@rangojs/router 0.0.0-experimental.19 → 0.0.0-experimental.190fb30d

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 (1254) hide show
  1. package/AGENTS.md +13 -0
  2. package/README.md +304 -708
  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 +822 -182
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/dist/handles/index.d.ts +6 -0
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/{src/handles/index.ts → dist/handles/index.js} +1 -1
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +4644 -1433
  799. package/dist/vite/index.js.bak +5448 -0
  800. package/dist/vite/index.js.map +1 -0
  801. package/dist/vite/index.named-routes.gen.ts +103 -0
  802. package/dist/vite/package-resolution.d.ts +43 -0
  803. package/dist/vite/package-resolution.d.ts.map +1 -0
  804. package/dist/vite/package-resolution.js +112 -0
  805. package/dist/vite/package-resolution.js.map +1 -0
  806. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  807. package/dist/vite/virtual-entries.d.ts +25 -0
  808. package/dist/vite/virtual-entries.d.ts.map +1 -0
  809. package/dist/vite/virtual-entries.js +110 -0
  810. package/dist/vite/virtual-entries.js.map +1 -0
  811. package/package.json +87 -16
  812. package/skills/api-client/SKILL.md +211 -0
  813. package/skills/breadcrumbs/SKILL.md +329 -0
  814. package/skills/bundle-analysis/SKILL.md +159 -0
  815. package/skills/cache-guide/SKILL.md +251 -24
  816. package/skills/caching/SKILL.md +379 -21
  817. package/skills/catalog.json +271 -0
  818. package/skills/comparison/SKILL.md +50 -0
  819. package/skills/comparison/agents/openai.yaml +4 -0
  820. package/skills/comparison/references/framework-comparison.md +837 -0
  821. package/skills/composability/SKILL.md +110 -4
  822. package/skills/css/SKILL.md +76 -0
  823. package/skills/debug-manifest/SKILL.md +5 -3
  824. package/skills/defer-hydration/SKILL.md +235 -0
  825. package/skills/document-cache/SKILL.md +87 -56
  826. package/skills/fonts/SKILL.md +1 -1
  827. package/skills/handler-use/SKILL.md +364 -0
  828. package/skills/hooks/SKILL.md +76 -692
  829. package/skills/hooks/data.md +273 -0
  830. package/skills/hooks/handle-and-actions.md +103 -0
  831. package/skills/hooks/navigation.md +110 -0
  832. package/skills/hooks/outlets.md +41 -0
  833. package/skills/hooks/state.md +228 -0
  834. package/skills/hooks/urls.md +135 -0
  835. package/skills/host-router/SKILL.md +320 -0
  836. package/skills/i18n/SKILL.md +276 -0
  837. package/skills/intercept/SKILL.md +94 -18
  838. package/skills/layout/SKILL.md +62 -19
  839. package/skills/links/SKILL.md +249 -17
  840. package/skills/loader/SKILL.md +320 -32
  841. package/skills/middleware/SKILL.md +59 -16
  842. package/skills/migrate-nextjs/SKILL.md +745 -0
  843. package/skills/migrate-react-router/SKILL.md +153 -0
  844. package/skills/migrate-react-router/cloudflare-workers.md +129 -0
  845. package/skills/migrate-react-router/component-migration.md +196 -0
  846. package/skills/migrate-react-router/data-and-actions.md +225 -0
  847. package/skills/migrate-react-router/route-mapping.md +271 -0
  848. package/skills/mime-routes/SKILL.md +29 -2
  849. package/skills/observability/SKILL.md +202 -0
  850. package/skills/parallel/SKILL.md +225 -10
  851. package/skills/ppr/SKILL.md +618 -0
  852. package/skills/prerender/SKILL.md +180 -126
  853. package/skills/rango/SKILL.md +318 -25
  854. package/skills/react-compiler/SKILL.md +168 -0
  855. package/skills/response-routes/SKILL.md +138 -49
  856. package/skills/route/SKILL.md +175 -13
  857. package/skills/router-setup/SKILL.md +139 -14
  858. package/skills/scripts/SKILL.md +179 -0
  859. package/skills/server-actions/SKILL.md +776 -0
  860. package/skills/shell-manifest/SKILL.md +185 -0
  861. package/skills/streams-and-websockets/SKILL.md +283 -0
  862. package/skills/tailwind/SKILL.md +28 -4
  863. package/skills/testing/SKILL.md +126 -222
  864. package/skills/testing/bindings.md +103 -0
  865. package/skills/testing/cache-prerender.md +127 -0
  866. package/skills/testing/client-components.md +124 -0
  867. package/skills/testing/e2e-parity.md +125 -0
  868. package/skills/testing/flight.md +91 -0
  869. package/skills/testing/handles.md +131 -0
  870. package/skills/testing/loader.md +128 -0
  871. package/skills/testing/middleware.md +99 -0
  872. package/skills/testing/render-handler.md +122 -0
  873. package/skills/testing/response-routes.md +95 -0
  874. package/skills/testing/reverse-and-types.md +85 -0
  875. package/skills/testing/server-actions.md +107 -0
  876. package/skills/testing/server-tree.md +128 -0
  877. package/skills/testing/setup.md +123 -0
  878. package/skills/theme/SKILL.md +1 -1
  879. package/skills/typesafety/SKILL.md +45 -614
  880. package/skills/typesafety/env-and-bindings.md +254 -0
  881. package/skills/typesafety/generated-files-and-cli.md +335 -0
  882. package/skills/typesafety/params-and-search.md +153 -0
  883. package/skills/typesafety/route-types.md +209 -0
  884. package/skills/use-cache/SKILL.md +74 -15
  885. package/skills/vercel/SKILL.md +128 -0
  886. package/skills/view-transitions/SKILL.md +337 -0
  887. package/src/__augment-tests__/augment.ts +81 -0
  888. package/src/__augment-tests__/augmented.check.ts +116 -0
  889. package/src/__internal.ts +67 -40
  890. package/src/bin/rango.ts +18 -0
  891. package/src/browser/action-coordinator.ts +53 -36
  892. package/src/browser/action-fence.ts +47 -0
  893. package/src/browser/app-shell.ts +39 -0
  894. package/src/browser/app-version.ts +14 -0
  895. package/src/browser/connection-warmup.ts +134 -0
  896. package/src/browser/cookie-name.ts +140 -0
  897. package/src/browser/event-controller.ts +257 -158
  898. package/src/browser/history-state.ts +21 -0
  899. package/src/browser/index.ts +3 -3
  900. package/src/browser/invalidate-client-cache.ts +52 -0
  901. package/src/browser/link-interceptor.ts +4 -0
  902. package/src/browser/logging.ts +28 -0
  903. package/src/browser/merge-segment-loaders.ts +6 -4
  904. package/src/browser/navigation-bridge.ts +222 -38
  905. package/src/browser/navigation-client.ts +233 -58
  906. package/src/browser/navigation-store-handle.ts +38 -0
  907. package/src/browser/navigation-store.ts +203 -80
  908. package/src/browser/navigation-transaction.ts +18 -66
  909. package/src/browser/network-error-handler.ts +34 -7
  910. package/src/browser/partial-update.ts +242 -126
  911. package/src/browser/prefetch/cache.ts +344 -30
  912. package/src/browser/prefetch/fetch.ts +373 -48
  913. package/src/browser/prefetch/policy.ts +6 -0
  914. package/src/browser/prefetch/queue.ts +144 -23
  915. package/src/browser/prefetch/resource-ready.ts +77 -0
  916. package/src/browser/rango-state.ts +158 -76
  917. package/src/browser/react/Link.tsx +135 -18
  918. package/src/browser/react/NavigationProvider.tsx +240 -122
  919. package/src/browser/react/ScrollRestoration.tsx +10 -6
  920. package/src/browser/react/context.ts +7 -2
  921. package/src/browser/react/filter-segment-order.ts +66 -7
  922. package/src/browser/react/index.ts +0 -48
  923. package/src/browser/react/location-state-shared.ts +178 -8
  924. package/src/browser/react/location-state.ts +39 -14
  925. package/src/browser/react/use-action.ts +6 -15
  926. package/src/browser/react/use-handle.ts +23 -69
  927. package/src/browser/react/use-href.tsx +8 -1
  928. package/src/browser/react/use-link-status.ts +33 -8
  929. package/src/browser/react/use-navigation.ts +32 -7
  930. package/src/browser/react/use-params.ts +20 -10
  931. package/src/browser/react/use-reverse.ts +106 -0
  932. package/src/browser/react/use-router.ts +46 -11
  933. package/src/browser/react/use-search-params.ts +0 -5
  934. package/src/browser/react/use-segments.ts +11 -21
  935. package/src/browser/response-adapter.ts +99 -8
  936. package/src/browser/rsc-router.tsx +276 -75
  937. package/src/browser/scroll-restoration.ts +61 -47
  938. package/src/browser/segment-reconciler.ts +44 -7
  939. package/src/browser/segment-structure-assert.ts +2 -2
  940. package/src/browser/server-action-bridge.ts +631 -442
  941. package/src/browser/types.ts +160 -12
  942. package/src/browser/validate-redirect-origin.ts +43 -16
  943. package/src/build/collect-fallback-refs.ts +107 -0
  944. package/src/build/generate-manifest.ts +207 -158
  945. package/src/build/generate-route-types.ts +8 -1
  946. package/src/build/index.ts +11 -3
  947. package/src/build/prefix-tree-utils.ts +123 -0
  948. package/src/build/route-trie.ts +215 -42
  949. package/src/build/route-types/ast-route-extraction.ts +15 -8
  950. package/src/build/route-types/codegen.ts +16 -5
  951. package/src/build/route-types/include-resolution.ts +464 -63
  952. package/src/build/route-types/param-extraction.ts +6 -3
  953. package/src/build/route-types/per-module-writer.ts +22 -6
  954. package/src/build/route-types/router-processing.ts +442 -106
  955. package/src/build/route-types/scan-filter.ts +9 -2
  956. package/src/build/route-types/source-scan.ts +216 -0
  957. package/src/build/runtime-discovery.ts +13 -21
  958. package/src/cache/cache-error.ts +104 -0
  959. package/src/cache/cache-key-utils.ts +58 -13
  960. package/src/cache/cache-policy.ts +108 -34
  961. package/src/cache/cache-runtime.ts +454 -97
  962. package/src/cache/cache-scope.ts +235 -103
  963. package/src/cache/cache-tag.ts +149 -0
  964. package/src/cache/cf/cf-base64.ts +33 -0
  965. package/src/cache/cf/cf-cache-constants.ts +127 -0
  966. package/src/cache/cf/cf-cache-store.ts +2446 -170
  967. package/src/cache/cf/cf-cache-types.ts +349 -0
  968. package/src/cache/cf/cf-kv-utils.ts +46 -0
  969. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  970. package/src/cache/cf/index.ts +11 -17
  971. package/src/cache/document-cache.ts +144 -49
  972. package/src/cache/handle-snapshot.ts +70 -0
  973. package/src/cache/index.ts +24 -20
  974. package/src/cache/memory-segment-store.ts +243 -37
  975. package/src/cache/profile-registry.ts +46 -31
  976. package/src/cache/read-through-swr.ts +56 -12
  977. package/src/cache/segment-codec.ts +13 -21
  978. package/src/cache/shell-snapshot.ts +417 -0
  979. package/src/cache/tag-invalidation.ts +230 -0
  980. package/src/cache/taint.ts +55 -0
  981. package/src/cache/types.ts +194 -99
  982. package/src/cache/vercel/index.ts +11 -0
  983. package/src/cache/vercel/vercel-cache-store.ts +1132 -0
  984. package/src/client.rsc.tsx +42 -21
  985. package/src/client.tsx +117 -336
  986. package/src/cloudflare/index.ts +11 -0
  987. package/src/cloudflare/tracing.ts +108 -0
  988. package/src/component-utils.ts +19 -0
  989. package/src/components/DefaultDocument.tsx +8 -2
  990. package/src/context-var.ts +84 -2
  991. package/src/debug.ts +2 -2
  992. package/src/decode-loader-results.ts +52 -0
  993. package/src/defer.ts +185 -0
  994. package/src/deps/ssr.ts +0 -1
  995. package/src/encode-kv.ts +49 -0
  996. package/src/errors.ts +30 -4
  997. package/src/escape-script.ts +52 -0
  998. package/src/handle.ts +104 -34
  999. package/src/handles/MetaTags.tsx +24 -53
  1000. package/src/handles/Scripts.tsx +183 -0
  1001. package/src/handles/breadcrumbs.ts +93 -0
  1002. package/src/handles/deferred-resolution.ts +127 -0
  1003. package/src/handles/is-thenable.ts +18 -0
  1004. package/src/handles/meta.ts +14 -40
  1005. package/src/handles/script.ts +244 -0
  1006. package/src/host/cookie-handler.ts +9 -60
  1007. package/src/host/errors.ts +13 -22
  1008. package/src/host/index.ts +9 -5
  1009. package/src/host/pattern-matcher.ts +23 -52
  1010. package/src/host/router.ts +107 -99
  1011. package/src/host/testing.ts +40 -27
  1012. package/src/host/types.ts +37 -4
  1013. package/src/host/utils.ts +1 -1
  1014. package/src/href-client.ts +137 -22
  1015. package/src/index.rsc.ts +86 -30
  1016. package/src/index.ts +158 -68
  1017. package/src/internal-debug.ts +11 -10
  1018. package/src/loader-store.ts +500 -0
  1019. package/src/loader.rsc.ts +20 -13
  1020. package/src/loader.ts +12 -11
  1021. package/src/missing-id-error.ts +68 -0
  1022. package/src/outlet-context.ts +1 -1
  1023. package/src/outlet-provider.tsx +1 -5
  1024. package/src/prerender/param-hash.ts +16 -16
  1025. package/src/prerender/store.ts +63 -26
  1026. package/src/prerender.ts +215 -86
  1027. package/src/redirect-origin.ts +114 -0
  1028. package/src/regex-escape.ts +8 -0
  1029. package/src/render-error-thrower.tsx +20 -0
  1030. package/src/response-utils.ts +62 -0
  1031. package/src/reverse.ts +65 -15
  1032. package/src/root-error-boundary.tsx +1 -19
  1033. package/src/route-content-wrapper.tsx +19 -77
  1034. package/src/route-definition/dsl-helpers.ts +485 -303
  1035. package/src/route-definition/helper-factories.ts +28 -140
  1036. package/src/route-definition/helpers-types.ts +153 -77
  1037. package/src/route-definition/index.ts +4 -5
  1038. package/src/route-definition/redirect.ts +53 -12
  1039. package/src/route-definition/resolve-handler-use.ts +160 -0
  1040. package/src/route-definition/use-item-types.ts +29 -0
  1041. package/src/route-map-builder.ts +48 -21
  1042. package/src/route-types.ts +37 -46
  1043. package/src/router/basename.ts +14 -0
  1044. package/src/router/content-negotiation.ts +164 -17
  1045. package/src/router/error-handling.ts +45 -18
  1046. package/src/router/find-match.ts +130 -29
  1047. package/src/router/handler-context.ts +110 -39
  1048. package/src/router/instrument.ts +355 -0
  1049. package/src/router/intercept-resolution.ts +50 -24
  1050. package/src/router/lazy-includes.ts +89 -63
  1051. package/src/router/loader-resolution.ts +286 -56
  1052. package/src/router/logging.ts +5 -8
  1053. package/src/router/manifest.ts +105 -56
  1054. package/src/router/match-api.ts +179 -219
  1055. package/src/router/match-context.ts +0 -22
  1056. package/src/router/match-handlers.ts +211 -165
  1057. package/src/router/match-middleware/background-revalidation.ts +66 -22
  1058. package/src/router/match-middleware/cache-lookup.ts +214 -263
  1059. package/src/router/match-middleware/cache-store.ts +105 -50
  1060. package/src/router/match-middleware/intercept-resolution.ts +8 -28
  1061. package/src/router/match-middleware/segment-resolution.ts +52 -18
  1062. package/src/router/match-pipelines.ts +1 -42
  1063. package/src/router/match-result.ts +127 -52
  1064. package/src/router/metrics.ts +217 -26
  1065. package/src/router/middleware-types.ts +24 -110
  1066. package/src/router/middleware.ts +412 -199
  1067. package/src/router/navigation-snapshot.ts +133 -0
  1068. package/src/router/params-util.ts +23 -0
  1069. package/src/router/parse-pattern.ts +115 -0
  1070. package/src/router/pattern-matching.ts +183 -137
  1071. package/src/router/prefetch-cache-ttl.ts +51 -0
  1072. package/src/router/prefetch-limits.ts +37 -0
  1073. package/src/router/prerender-match.ts +207 -58
  1074. package/src/router/preview-match.ts +35 -103
  1075. package/src/router/request-classification.ts +291 -0
  1076. package/src/router/revalidation.ts +144 -74
  1077. package/src/router/route-snapshot.ts +256 -0
  1078. package/src/router/router-context.ts +11 -29
  1079. package/src/router/router-interfaces.ts +160 -36
  1080. package/src/router/router-options.ts +215 -23
  1081. package/src/router/router-registry.ts +2 -5
  1082. package/src/router/segment-resolution/fresh.ts +318 -77
  1083. package/src/router/segment-resolution/helpers.ts +116 -31
  1084. package/src/router/segment-resolution/loader-cache.ts +156 -39
  1085. package/src/router/segment-resolution/loader-mask.ts +67 -0
  1086. package/src/router/segment-resolution/loader-snapshot.ts +308 -0
  1087. package/src/router/segment-resolution/revalidation.ts +496 -391
  1088. package/src/router/segment-resolution/static-store.ts +19 -5
  1089. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1090. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1091. package/src/router/segment-resolution.ts +5 -1
  1092. package/src/router/segment-wrappers.ts +8 -5
  1093. package/src/router/state-cookie-name.ts +33 -0
  1094. package/src/router/substitute-pattern-params.ts +75 -0
  1095. package/src/router/telemetry-otel.ts +160 -200
  1096. package/src/router/telemetry.ts +105 -20
  1097. package/src/router/timeout.ts +0 -20
  1098. package/src/router/tracing.ts +215 -0
  1099. package/src/router/trie-matching.ts +188 -58
  1100. package/src/router/types.ts +10 -63
  1101. package/src/router/url-params.ts +57 -0
  1102. package/src/router.ts +224 -65
  1103. package/src/rsc/full-payload.ts +70 -0
  1104. package/src/rsc/handler-context.ts +3 -2
  1105. package/src/rsc/handler.ts +726 -457
  1106. package/src/rsc/helpers.ts +168 -46
  1107. package/src/rsc/index.ts +2 -25
  1108. package/src/rsc/json-route-result.ts +38 -0
  1109. package/src/rsc/loader-fetch.ts +127 -31
  1110. package/src/rsc/manifest-init.ts +33 -42
  1111. package/src/rsc/nonce.ts +10 -1
  1112. package/src/rsc/origin-guard.ts +39 -25
  1113. package/src/rsc/progressive-enhancement.ts +159 -23
  1114. package/src/rsc/redirect-guard.ts +100 -0
  1115. package/src/rsc/response-cache-serve.ts +238 -0
  1116. package/src/rsc/response-error.ts +79 -12
  1117. package/src/rsc/response-route-handler.ts +99 -189
  1118. package/src/rsc/rsc-rendering.ts +516 -104
  1119. package/src/rsc/runtime-warnings.ts +23 -10
  1120. package/src/rsc/server-action.ts +293 -115
  1121. package/src/rsc/shell-capture.ts +1166 -0
  1122. package/src/rsc/shell-serve.ts +181 -0
  1123. package/src/rsc/ssr-setup.ts +144 -0
  1124. package/src/rsc/transition-gate.ts +89 -0
  1125. package/src/rsc/types.ts +64 -6
  1126. package/src/runtime-env.ts +18 -0
  1127. package/src/search-params.ts +49 -41
  1128. package/src/segment-content-promise.ts +67 -0
  1129. package/src/segment-loader-promise.ts +167 -0
  1130. package/src/segment-system.tsx +418 -131
  1131. package/src/serialize.ts +243 -0
  1132. package/src/server/context.ts +375 -63
  1133. package/src/server/cookie-parse.ts +32 -0
  1134. package/src/server/cookie-store.ts +152 -5
  1135. package/src/server/handle-store.ts +40 -38
  1136. package/src/server/loader-registry.ts +38 -46
  1137. package/src/server/request-context.ts +585 -178
  1138. package/src/server.ts +6 -0
  1139. package/src/ssr/index.tsx +467 -174
  1140. package/src/ssr/inject-rsc-eager.ts +167 -0
  1141. package/src/ssr/ssr-root.tsx +228 -0
  1142. package/src/static-handler.ts +27 -18
  1143. package/src/testing/cache-status.ts +162 -0
  1144. package/src/testing/collect-handle.ts +46 -0
  1145. package/src/testing/dispatch.ts +813 -0
  1146. package/src/testing/dom.entry.ts +22 -0
  1147. package/src/testing/e2e/fixture.ts +188 -0
  1148. package/src/testing/e2e/index.ts +128 -0
  1149. package/src/testing/e2e/matchers.ts +35 -0
  1150. package/src/testing/e2e/page-helpers.ts +272 -0
  1151. package/src/testing/e2e/parity.ts +387 -0
  1152. package/src/testing/e2e/server.ts +195 -0
  1153. package/src/testing/flight-matchers.ts +97 -0
  1154. package/src/testing/flight-normalize.ts +11 -0
  1155. package/src/testing/flight-runtime.d.ts +57 -0
  1156. package/src/testing/flight-tree.ts +682 -0
  1157. package/src/testing/flight.entry.ts +52 -0
  1158. package/src/testing/flight.ts +257 -0
  1159. package/src/testing/generated-routes.ts +199 -0
  1160. package/src/testing/index.ts +105 -0
  1161. package/src/testing/internal/context.ts +371 -0
  1162. package/src/testing/internal/flight-client-globals.ts +30 -0
  1163. package/src/testing/internal/seed-vars.ts +54 -0
  1164. package/src/testing/render-handler.ts +357 -0
  1165. package/src/testing/render-route.tsx +584 -0
  1166. package/src/testing/run-loader.ts +385 -0
  1167. package/src/testing/run-middleware.ts +205 -0
  1168. package/src/testing/run-transition-when.ts +164 -0
  1169. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1170. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1171. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1172. package/src/testing/vitest-stubs/version.ts +5 -0
  1173. package/src/testing/vitest.ts +305 -0
  1174. package/src/theme/ThemeProvider.tsx +56 -84
  1175. package/src/theme/ThemeScript.tsx +7 -9
  1176. package/src/theme/constants.ts +52 -13
  1177. package/src/theme/index.ts +3 -19
  1178. package/src/theme/theme-context.ts +1 -5
  1179. package/src/theme/theme-script.ts +22 -21
  1180. package/src/theme/use-theme.ts +0 -3
  1181. package/src/types/boundaries.ts +0 -35
  1182. package/src/types/cache-types.ts +17 -8
  1183. package/src/types/error-types.ts +30 -90
  1184. package/src/types/global-namespace.ts +54 -41
  1185. package/src/types/handler-context.ts +237 -89
  1186. package/src/types/index.ts +3 -10
  1187. package/src/types/loader-types.ts +44 -15
  1188. package/src/types/request-scope.ts +112 -0
  1189. package/src/types/route-config.ts +23 -46
  1190. package/src/types/route-entry.ts +19 -7
  1191. package/src/types/segments.ts +137 -19
  1192. package/src/urls/include-helper.ts +40 -75
  1193. package/src/urls/include-provider.ts +71 -0
  1194. package/src/urls/index.ts +2 -11
  1195. package/src/urls/path-helper-types.ts +102 -23
  1196. package/src/urls/path-helper.ts +62 -111
  1197. package/src/urls/pattern-types.ts +84 -19
  1198. package/src/urls/response-types.ts +25 -22
  1199. package/src/urls/type-extraction.ts +98 -154
  1200. package/src/urls/urls-function.ts +1 -19
  1201. package/src/use-loader.tsx +346 -89
  1202. package/src/vercel/index.ts +11 -0
  1203. package/src/vercel/tracing.ts +88 -0
  1204. package/src/vite/debug.ts +185 -0
  1205. package/src/vite/discovery/bundle-postprocess.ts +64 -91
  1206. package/src/vite/discovery/dev-prerender-cache.ts +117 -0
  1207. package/src/vite/discovery/discover-routers.ts +147 -88
  1208. package/src/vite/discovery/discovery-errors.ts +255 -0
  1209. package/src/vite/discovery/gate-state.ts +171 -0
  1210. package/src/vite/discovery/prerender-collection.ts +247 -145
  1211. package/src/vite/discovery/route-types-writer.ts +40 -84
  1212. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1213. package/src/vite/discovery/state.ts +61 -13
  1214. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1215. package/src/vite/index.ts +19 -3
  1216. package/src/vite/inject-client-debug.ts +88 -0
  1217. package/src/vite/plugin-types.ts +234 -62
  1218. package/src/vite/plugins/cjs-to-esm.ts +16 -19
  1219. package/src/vite/plugins/client-ref-dedup.ts +120 -0
  1220. package/src/vite/plugins/client-ref-hashing.ts +28 -15
  1221. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  1222. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  1223. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  1224. package/src/vite/plugins/expose-action-id.ts +49 -98
  1225. package/src/vite/plugins/expose-id-utils.ts +96 -51
  1226. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1227. package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
  1228. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1229. package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
  1230. package/src/vite/plugins/expose-internal-ids.ts +553 -317
  1231. package/src/vite/plugins/performance-tracks.ts +89 -0
  1232. package/src/vite/plugins/refresh-cmd.ts +127 -0
  1233. package/src/vite/plugins/use-cache-transform.ts +73 -83
  1234. package/src/vite/plugins/vercel-output.ts +384 -0
  1235. package/src/vite/plugins/version-injector.ts +40 -29
  1236. package/src/vite/plugins/version-plugin.ts +46 -37
  1237. package/src/vite/plugins/virtual-entries.ts +138 -27
  1238. package/src/vite/rango.ts +356 -295
  1239. package/src/vite/router-discovery.ts +1106 -166
  1240. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1241. package/src/vite/utils/banner.ts +4 -4
  1242. package/src/vite/utils/bundle-analysis.ts +10 -15
  1243. package/src/vite/utils/client-chunks.ts +184 -0
  1244. package/src/vite/utils/directive-prologue.ts +40 -0
  1245. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1246. package/src/vite/utils/manifest-utils.ts +4 -59
  1247. package/src/vite/utils/package-resolution.ts +20 -52
  1248. package/src/vite/utils/prerender-utils.ts +158 -38
  1249. package/src/vite/utils/shared-utils.ts +144 -44
  1250. package/CLAUDE.md +0 -5
  1251. package/src/browser/action-response-classifier.ts +0 -99
  1252. package/src/browser/shallow.ts +0 -40
  1253. package/src/route-definition/route-function.ts +0 -119
  1254. package/src/router/middleware-cookies.ts +0 -55
package/dist/bin/rango.js CHANGED
@@ -1,8 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __esm = (fn, res) => function __init() {
5
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
4
+ var __esm = (fn, res, err) => function __init() {
5
+ if (err) throw err[0];
6
+ try {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ } catch (e) {
9
+ throw err = [e], e;
10
+ }
6
11
  };
7
12
  var __export = (target, all) => {
8
13
  for (var name in all)
@@ -22,10 +27,10 @@ function extractParamsFromPattern(pattern) {
22
27
  function formatRouteEntry(key, pattern, _params, search) {
23
28
  const hasSearch = search && Object.keys(search).length > 0;
24
29
  if (!hasSearch) {
25
- return ` ${key}: "${pattern}",`;
30
+ return ` ${key}: ${JSON.stringify(pattern)},`;
26
31
  }
27
- const searchBody = Object.entries(search).map(([k, v]) => `${k}: "${v}"`).join(", ");
28
- return ` ${key}: { path: "${pattern}", search: { ${searchBody} } },`;
32
+ const searchBody = Object.entries(search).map(([k, v]) => `${k}: ${JSON.stringify(v)}`).join(", ");
33
+ return ` ${key}: { path: ${JSON.stringify(pattern)}, search: { ${searchBody} } },`;
29
34
  }
30
35
  var init_param_extraction = __esm({
31
36
  "src/build/route-types/param-extraction.ts"() {
@@ -59,8 +64,8 @@ var init_ast_helpers = __esm({
59
64
 
60
65
  // src/build/route-types/ast-route-extraction.ts
61
66
  import ts2 from "typescript";
62
- function extractRoutesFromSource(code) {
63
- const sourceFile = ts2.createSourceFile(
67
+ function extractRoutesFromSource(code, sourceFileArg) {
68
+ const sourceFile = sourceFileArg ?? ts2.createSourceFile(
64
69
  "input.tsx",
65
70
  code,
66
71
  ts2.ScriptTarget.Latest,
@@ -139,7 +144,7 @@ function generatePerModuleTypesSource(routes) {
139
144
  const valid = routes.filter(({ name }) => {
140
145
  if (!name || /["'\\`\n\r]/.test(name)) {
141
146
  console.warn(
142
- `[rsc-router] Skipping route with invalid name: ${JSON.stringify(name)}`
147
+ `[rango] Skipping route with invalid name: ${JSON.stringify(name)}`
143
148
  );
144
149
  return false;
145
150
  }
@@ -149,7 +154,7 @@ function generatePerModuleTypesSource(routes) {
149
154
  for (const { name, pattern, params, search } of valid) {
150
155
  if (deduped.has(name)) {
151
156
  console.warn(
152
- `[rsc-router] Duplicate route name "${name}" \u2014 keeping first definition`
157
+ `[rango] Duplicate route name "${name}" \u2014 keeping first definition`
153
158
  );
154
159
  continue;
155
160
  }
@@ -185,9 +190,13 @@ export const NamedRoutes = {
185
190
  ${objectBody}
186
191
  } as const;
187
192
 
193
+ // Aliased so the augmentation below does not pay a homomorphic mapped-type
194
+ // instantiation per route; \`as const\` already makes the members readonly.
195
+ type NamedRoutesShape = typeof NamedRoutes;
196
+
188
197
  declare global {
189
- namespace RSCRouter {
190
- interface GeneratedRouteMap extends Readonly<typeof NamedRoutes> {}
198
+ namespace Rango {
199
+ interface GeneratedRouteMap extends NamedRoutesShape {}
191
200
  }
192
201
  }
193
202
  `;
@@ -211,14 +220,15 @@ function findTsFiles(dir, filter) {
211
220
  entries = readdirSync(dir, { withFileTypes: true });
212
221
  } catch (err) {
213
222
  console.warn(
214
- `[rsc-router] Failed to scan directory ${dir}: ${err.message}`
223
+ `[rango] Failed to scan directory ${dir}: ${err.message}`
215
224
  );
216
225
  return results;
217
226
  }
218
227
  for (const entry of entries) {
219
228
  const fullPath = join(dir, entry.name);
220
229
  if (entry.isDirectory()) {
221
- if (entry.name === "node_modules" || entry.name.startsWith(".")) continue;
230
+ if (entry.name === "node_modules" || entry.name.startsWith(".") || entry.name === "dist" || entry.name === "build" || entry.name === "coverage")
231
+ continue;
222
232
  results.push(...findTsFiles(fullPath, filter));
223
233
  } else if ((entry.name.endsWith(".ts") || entry.name.endsWith(".tsx") || entry.name.endsWith(".js") || entry.name.endsWith(".jsx")) && !entry.name.includes(".gen.")) {
224
234
  if (filter && !filter(fullPath)) continue;
@@ -237,6 +247,33 @@ var init_scan_filter = __esm({
237
247
  import { readFileSync, existsSync } from "node:fs";
238
248
  import { dirname, resolve } from "node:path";
239
249
  import ts3 from "typescript";
250
+ function createScanMemo() {
251
+ return { files: /* @__PURE__ */ new Map(), blockSourceFiles: /* @__PURE__ */ new Map() };
252
+ }
253
+ function parseBlock(memo, block) {
254
+ if (memo) {
255
+ const cached = memo.blockSourceFiles.get(block);
256
+ if (cached) return cached;
257
+ }
258
+ const sf = ts3.createSourceFile(
259
+ "input.tsx",
260
+ block,
261
+ ts3.ScriptTarget.Latest,
262
+ true,
263
+ ts3.ScriptKind.TSX
264
+ );
265
+ if (memo) memo.blockSourceFiles.set(block, sf);
266
+ return sf;
267
+ }
268
+ function readSourceMemoized(memo, realPath) {
269
+ if (memo) {
270
+ const cached = memo.files.get(realPath);
271
+ if (cached !== void 0) return cached;
272
+ }
273
+ const source = readFileSync(realPath, "utf-8");
274
+ if (memo) memo.files.set(realPath, source);
275
+ return source;
276
+ }
240
277
  function extractNamePrefixFromInclude(node) {
241
278
  if (node.arguments.length >= 3) {
242
279
  const thirdArg = node.arguments[2];
@@ -252,8 +289,98 @@ function extractNamePrefixFromInclude(node) {
252
289
  }
253
290
  return null;
254
291
  }
255
- function extractIncludesWithDiagnostics(code) {
256
- const sourceFile = ts3.createSourceFile(
292
+ function thenSelectsNonDefaultMember(expr) {
293
+ const findThenCall = (e) => {
294
+ if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression) && e.expression.name.text === "then") {
295
+ return e;
296
+ }
297
+ if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression)) {
298
+ return findThenCall(e.expression.expression);
299
+ }
300
+ if (ts3.isPropertyAccessExpression(e)) return findThenCall(e.expression);
301
+ if (ts3.isParenthesizedExpression(e)) return findThenCall(e.expression);
302
+ if (ts3.isAwaitExpression(e)) return findThenCall(e.expression);
303
+ return null;
304
+ };
305
+ const thenCall = findThenCall(expr);
306
+ if (!thenCall || thenCall.arguments.length === 0) return false;
307
+ const cb = thenCall.arguments[0];
308
+ if (!ts3.isArrowFunction(cb) && !ts3.isFunctionExpression(cb)) return false;
309
+ let ret;
310
+ if (ts3.isBlock(cb.body)) {
311
+ for (const stmt of cb.body.statements) {
312
+ if (ts3.isReturnStatement(stmt) && stmt.expression) {
313
+ ret = stmt.expression;
314
+ break;
315
+ }
316
+ }
317
+ } else {
318
+ ret = cb.body;
319
+ }
320
+ if (!ret) return false;
321
+ if (ts3.isPropertyAccessExpression(ret)) {
322
+ return ret.name.text !== "default";
323
+ }
324
+ return false;
325
+ }
326
+ function extractDynamicImportSpecifier(node) {
327
+ let body;
328
+ if (ts3.isArrowFunction(node) || ts3.isFunctionExpression(node)) {
329
+ body = node.body;
330
+ }
331
+ if (!body) return null;
332
+ let expr;
333
+ if (ts3.isBlock(body)) {
334
+ for (const stmt of body.statements) {
335
+ if (ts3.isReturnStatement(stmt) && stmt.expression) {
336
+ expr = stmt.expression;
337
+ break;
338
+ }
339
+ }
340
+ } else {
341
+ expr = body;
342
+ }
343
+ if (!expr) return null;
344
+ const findImportCall = (e) => {
345
+ if (ts3.isCallExpression(e) && e.expression.kind === ts3.SyntaxKind.ImportKeyword) {
346
+ return e;
347
+ }
348
+ if (ts3.isCallExpression(e) && ts3.isPropertyAccessExpression(e.expression)) {
349
+ return findImportCall(e.expression.expression);
350
+ }
351
+ if (ts3.isPropertyAccessExpression(e)) return findImportCall(e.expression);
352
+ if (ts3.isParenthesizedExpression(e)) return findImportCall(e.expression);
353
+ if (ts3.isAwaitExpression(e)) return findImportCall(e.expression);
354
+ return null;
355
+ };
356
+ const importCall = findImportCall(expr);
357
+ if (!importCall || importCall.arguments.length === 0) return null;
358
+ if (thenSelectsNonDefaultMember(expr)) return null;
359
+ return getStringValue(importCall.arguments[0]);
360
+ }
361
+ function resolveDefaultExportTarget(code, sourceFile) {
362
+ let result = null;
363
+ function visit(node) {
364
+ if (result) return;
365
+ if (ts3.isExportAssignment(node) && !node.isExportEquals) {
366
+ const expr = node.expression;
367
+ if (ts3.isIdentifier(expr)) {
368
+ result = { variableName: expr.text };
369
+ } else if (ts3.isCallExpression(expr)) {
370
+ const callee = expr.expression;
371
+ if (ts3.isIdentifier(callee) && callee.text === "urls") {
372
+ result = { inlineBlock: expr.getText(sourceFile) };
373
+ }
374
+ }
375
+ return;
376
+ }
377
+ ts3.forEachChild(node, visit);
378
+ }
379
+ visit(sourceFile);
380
+ return result;
381
+ }
382
+ function extractIncludesWithDiagnostics(code, sourceFileArg) {
383
+ const sourceFile = sourceFileArg ?? ts3.createSourceFile(
257
384
  "input.tsx",
258
385
  code,
259
386
  ts3.ScriptTarget.Latest,
@@ -277,12 +404,19 @@ function extractIncludesWithDiagnostics(code) {
277
404
  }
278
405
  const secondArg = node.arguments[1];
279
406
  const namePrefix = extractNamePrefixFromInclude(node);
407
+ const dynamicImportSpec = extractDynamicImportSpecifier(secondArg);
280
408
  if (ts3.isIdentifier(secondArg)) {
281
409
  resolved.push({
282
410
  pathPrefix,
283
411
  variableName: secondArg.text,
284
412
  namePrefix
285
413
  });
414
+ } else if (dynamicImportSpec !== null) {
415
+ resolved.push({
416
+ pathPrefix,
417
+ moduleSpecifier: dynamicImportSpec,
418
+ namePrefix
419
+ });
286
420
  } else if (ts3.isCallExpression(secondArg)) {
287
421
  const callText = secondArg.expression.getText(sourceFile);
288
422
  unresolvable.push({
@@ -307,7 +441,7 @@ function extractIncludesWithDiagnostics(code) {
307
441
  return { resolved, unresolvable };
308
442
  }
309
443
  function resolveImportedVariable(code, localName) {
310
- const importRegex = /import\s*\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;
444
+ const importRegex = /import\s*(?:[\w$]+\s*,\s*)?\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;
311
445
  let match;
312
446
  while ((match = importRegex.exec(code)) !== null) {
313
447
  const imports = match[1];
@@ -344,8 +478,8 @@ function resolveImportPath(importSpec, fromFile) {
344
478
  }
345
479
  return null;
346
480
  }
347
- function extractUrlsBlockForVariable(code, varName) {
348
- const sourceFile = ts3.createSourceFile(
481
+ function extractUrlsBlockForVariable(code, varName, sourceFileArg) {
482
+ const sourceFile = sourceFileArg ?? ts3.createSourceFile(
349
483
  "input.tsx",
350
484
  code,
351
485
  ts3.ScriptTarget.Latest,
@@ -367,67 +501,113 @@ function extractUrlsBlockForVariable(code, varName) {
367
501
  visit(sourceFile);
368
502
  return result;
369
503
  }
370
- function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSchemasOut, diagnosticsOut) {
504
+ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSchemasOut, diagnosticsOut, memo) {
371
505
  const routeMap = {};
372
- const localRoutes = extractRoutesFromSource(block);
506
+ const blockSourceFile = parseBlock(memo, block);
507
+ const localRoutes = extractRoutesFromSource(block, blockSourceFile);
373
508
  for (const { name, pattern, search } of localRoutes) {
374
509
  routeMap[name] = pattern;
375
510
  if (search && searchSchemasOut) {
376
511
  searchSchemasOut[name] = search;
377
512
  }
378
513
  }
379
- const { resolved: includes, unresolvable } = extractIncludesWithDiagnostics(block);
514
+ const { resolved: includes, unresolvable } = extractIncludesWithDiagnostics(
515
+ block,
516
+ blockSourceFile
517
+ );
380
518
  if (diagnosticsOut) {
381
519
  for (const entry of unresolvable) {
382
520
  diagnosticsOut.push({ ...entry, sourceFile: filePath });
383
521
  }
384
522
  }
385
- for (const { pathPrefix, variableName, namePrefix } of includes) {
523
+ for (const inc of includes) {
524
+ const { pathPrefix, namePrefix } = inc;
386
525
  let childResult;
387
- const imported = resolveImportedVariable(fullSource, variableName);
388
- if (imported) {
389
- const targetFile = resolveImportPath(imported.specifier, filePath);
526
+ if (inc.moduleSpecifier) {
527
+ const targetFile = resolveImportPath(inc.moduleSpecifier, filePath);
390
528
  if (!targetFile) {
391
- if (diagnosticsOut) {
392
- diagnosticsOut.push({
393
- pathPrefix,
394
- namePrefix,
395
- reason: "file-not-found",
396
- sourceFile: filePath,
397
- detail: `import "${imported.specifier}" resolved to no file`
398
- });
399
- }
529
+ diagnosticsOut?.push({
530
+ pathPrefix,
531
+ namePrefix,
532
+ reason: "file-not-found",
533
+ sourceFile: filePath,
534
+ detail: `import("${inc.moduleSpecifier}") resolved to no file`
535
+ });
400
536
  continue;
401
537
  }
402
- childResult = buildCombinedRouteMapWithSearch(
403
- targetFile,
404
- imported.exportedName,
405
- visited,
406
- diagnosticsOut
407
- );
408
- } else {
409
- const sameFileBlock = extractUrlsBlockForVariable(
410
- fullSource,
411
- variableName
538
+ let targetSource;
539
+ try {
540
+ targetSource = readSourceMemoized(memo, resolve(targetFile));
541
+ } catch (err) {
542
+ diagnosticsOut?.push({
543
+ pathPrefix,
544
+ namePrefix,
545
+ reason: "file-not-found",
546
+ sourceFile: filePath,
547
+ detail: `import("${inc.moduleSpecifier}") resolved to "${targetFile}" but reading it failed: ${err?.message ?? String(err)}`
548
+ });
549
+ continue;
550
+ }
551
+ const def = resolveDefaultExportTarget(
552
+ targetSource,
553
+ parseBlock(memo, targetSource)
412
554
  );
413
- if (!sameFileBlock) {
414
- if (diagnosticsOut) {
415
- diagnosticsOut.push({
416
- pathPrefix,
417
- namePrefix,
418
- reason: "unresolvable-import",
419
- sourceFile: filePath,
420
- detail: `variable "${variableName}" not found in imports or same-file scope`
421
- });
422
- }
555
+ if (!def) {
556
+ diagnosticsOut?.push({
557
+ pathPrefix,
558
+ namePrefix,
559
+ reason: "unresolvable-import",
560
+ sourceFile: filePath,
561
+ detail: `import("${inc.moduleSpecifier}") has no resolvable \`export default urls(...)\``
562
+ });
423
563
  continue;
424
564
  }
425
- childResult = buildCombinedRouteMapWithSearch(
426
- filePath,
565
+ if (def.inlineBlock) {
566
+ childResult = buildCombinedRouteMapWithSearch(
567
+ targetFile,
568
+ void 0,
569
+ visited,
570
+ diagnosticsOut,
571
+ def.inlineBlock,
572
+ memo
573
+ );
574
+ } else {
575
+ const variableName = def.variableName;
576
+ const resolved = resolveIncludedVariable({
577
+ variableName,
578
+ resolutionFile: targetFile,
579
+ resolutionSource: targetSource,
580
+ reportFile: filePath,
581
+ memo,
582
+ visited,
583
+ diagnosticsOut,
584
+ pathPrefix,
585
+ namePrefix,
586
+ fileNotFoundDetail: (specifier) => `import("${inc.moduleSpecifier}") default re-exports "${variableName}" from "${specifier}", which resolved to no file`,
587
+ notFoundDetail: () => `import("${inc.moduleSpecifier}") default "${variableName}" not found in its imports or same-file scope`
588
+ });
589
+ if (!resolved) continue;
590
+ childResult = resolved;
591
+ }
592
+ } else if (inc.variableName) {
593
+ const variableName = inc.variableName;
594
+ const resolved = resolveIncludedVariable({
427
595
  variableName,
596
+ resolutionFile: filePath,
597
+ resolutionSource: fullSource,
598
+ reportFile: filePath,
599
+ memo,
428
600
  visited,
429
- diagnosticsOut
430
- );
601
+ diagnosticsOut,
602
+ pathPrefix,
603
+ namePrefix,
604
+ fileNotFoundDetail: (specifier) => `import "${specifier}" resolved to no file`,
605
+ notFoundDetail: () => `variable "${variableName}" not found in imports or same-file scope`
606
+ });
607
+ if (!resolved) continue;
608
+ childResult = resolved;
609
+ } else {
610
+ continue;
431
611
  }
432
612
  if (namePrefix === null) {
433
613
  continue;
@@ -450,24 +630,89 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
450
630
  }
451
631
  return routeMap;
452
632
  }
453
- function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
633
+ function resolveIncludedVariable(opts) {
634
+ const {
635
+ variableName,
636
+ resolutionFile,
637
+ resolutionSource,
638
+ reportFile,
639
+ memo,
640
+ visited,
641
+ diagnosticsOut,
642
+ pathPrefix,
643
+ namePrefix
644
+ } = opts;
645
+ const imported = resolveImportedVariable(resolutionSource, variableName);
646
+ if (imported) {
647
+ const targetFile = resolveImportPath(imported.specifier, resolutionFile);
648
+ if (!targetFile) {
649
+ diagnosticsOut?.push({
650
+ pathPrefix,
651
+ namePrefix,
652
+ reason: "file-not-found",
653
+ sourceFile: reportFile,
654
+ detail: opts.fileNotFoundDetail(imported.specifier)
655
+ });
656
+ return null;
657
+ }
658
+ return buildCombinedRouteMapWithSearch(
659
+ targetFile,
660
+ imported.exportedName,
661
+ visited,
662
+ diagnosticsOut,
663
+ void 0,
664
+ memo
665
+ );
666
+ }
667
+ const sameFileBlock = extractUrlsBlockForVariable(
668
+ resolutionSource,
669
+ variableName,
670
+ parseBlock(memo, resolutionSource)
671
+ );
672
+ if (!sameFileBlock) {
673
+ diagnosticsOut?.push({
674
+ pathPrefix,
675
+ namePrefix,
676
+ reason: "unresolvable-import",
677
+ sourceFile: reportFile,
678
+ detail: opts.notFoundDetail()
679
+ });
680
+ return null;
681
+ }
682
+ return buildCombinedRouteMapWithSearch(
683
+ resolutionFile,
684
+ variableName,
685
+ visited,
686
+ diagnosticsOut,
687
+ void 0,
688
+ memo
689
+ );
690
+ }
691
+ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock, memo) {
454
692
  visited = visited ?? /* @__PURE__ */ new Set();
693
+ memo = memo ?? createScanMemo();
455
694
  const realPath = resolve(filePath);
456
695
  const key = variableName ? `${realPath}:${variableName}` : realPath;
457
696
  if (visited.has(key)) {
458
- console.warn(`[rsc-router] Circular include detected, skipping: ${key}`);
697
+ console.warn(`[rango] Circular include detected, skipping: ${key}`);
459
698
  return { routes: {}, searchSchemas: {} };
460
699
  }
461
700
  visited.add(key);
462
701
  let source;
463
702
  try {
464
- source = readFileSync(realPath, "utf-8");
703
+ source = readSourceMemoized(memo, realPath);
465
704
  } catch {
466
705
  return { routes: {}, searchSchemas: {} };
467
706
  }
468
707
  let block;
469
- if (variableName) {
470
- const extracted = extractUrlsBlockForVariable(source, variableName);
708
+ if (inlineBlock) {
709
+ block = inlineBlock;
710
+ } else if (variableName) {
711
+ const extracted = extractUrlsBlockForVariable(
712
+ source,
713
+ variableName,
714
+ parseBlock(memo, source)
715
+ );
471
716
  if (!extracted) return { routes: {}, searchSchemas: {} };
472
717
  block = extracted;
473
718
  } else {
@@ -480,7 +725,8 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
480
725
  realPath,
481
726
  visited,
482
727
  searchSchemas,
483
- diagnosticsOut
728
+ diagnosticsOut,
729
+ memo
484
730
  );
485
731
  visited.delete(key);
486
732
  return { routes, searchSchemas };
@@ -525,8 +771,16 @@ function writePerModuleRouteTypesForFile(filePath) {
525
771
  let routes;
526
772
  if (varNames.length > 0) {
527
773
  routes = [];
774
+ const memo = createScanMemo();
528
775
  for (const varName of varNames) {
529
- const { routes: routeMap, searchSchemas } = buildCombinedRouteMapWithSearch(filePath, varName);
776
+ const { routes: routeMap, searchSchemas } = buildCombinedRouteMapWithSearch(
777
+ filePath,
778
+ varName,
779
+ void 0,
780
+ void 0,
781
+ void 0,
782
+ memo
783
+ );
530
784
  for (const [name, pattern] of Object.entries(routeMap)) {
531
785
  const params = extractParamsFromPattern(pattern);
532
786
  routes.push({
@@ -540,12 +794,12 @@ function writePerModuleRouteTypesForFile(filePath) {
540
794
  } else {
541
795
  routes = extractRoutesFromSource(source);
542
796
  }
543
- const genPath = filePath.replace(/\.(tsx?)$/, ".gen.ts");
797
+ const genPath = filePath.replace(/\.(tsx?|jsx?)$/, ".gen.ts");
544
798
  if (routes.length === 0) {
545
799
  if (varNames.length > 0 && !existsSync2(genPath)) {
546
800
  writeFileSync(genPath, generatePerModuleTypesSource([]));
547
801
  console.log(
548
- `[rsc-router] Generated route types (placeholder) -> ${genPath}`
802
+ `[rango] Generated route types (placeholder) -> ${genPath}`
549
803
  );
550
804
  }
551
805
  return;
@@ -554,11 +808,11 @@ function writePerModuleRouteTypesForFile(filePath) {
554
808
  const existing = existsSync2(genPath) ? readFileSync2(genPath, "utf-8") : null;
555
809
  if (existing !== genSource) {
556
810
  writeFileSync(genPath, genSource);
557
- console.log(`[rsc-router] Generated route types -> ${genPath}`);
811
+ console.log(`[rango] Generated route types -> ${genPath}`);
558
812
  }
559
813
  } catch (err) {
560
814
  console.warn(
561
- `[rsc-router] Failed to generate route types for ${filePath}: ${err.message}`
815
+ `[rango] Failed to generate route types for ${filePath}: ${err.message}`
562
816
  );
563
817
  }
564
818
  }
@@ -573,9 +827,146 @@ var init_per_module_writer = __esm({
573
827
  }
574
828
  });
575
829
 
830
+ // src/build/route-types/source-scan.ts
831
+ function isLineTerminator(ch) {
832
+ const c = ch.charCodeAt(0);
833
+ return c === 10 || c === 13 || c === 8232 || c === 8233;
834
+ }
835
+ function isRegexPositionAt(code, slashPos, prevChar) {
836
+ if (prevChar === void 0) return true;
837
+ if (prevChar === ")" || prevChar === "]" || prevChar === "}") return false;
838
+ if (!/[\w$]/.test(prevChar)) return true;
839
+ let k = slashPos - 1;
840
+ while (k >= 0 && /\s/.test(code[k])) k--;
841
+ const wordEnd = k + 1;
842
+ while (k >= 0 && /[\w$]/.test(code[k])) k--;
843
+ return REGEX_PRECEDING_KEYWORDS.has(code.slice(k + 1, wordEnd));
844
+ }
845
+ function makeCodeClassifier(code) {
846
+ const n = code.length;
847
+ let i = 0;
848
+ let skipStart = -1;
849
+ let skipEnd = -1;
850
+ let lastSig;
851
+ return (q) => {
852
+ if (q >= skipStart && q < skipEnd) return false;
853
+ while (i < n && i <= q) {
854
+ const c = code[i];
855
+ const d = i + 1 < n ? code[i + 1] : "";
856
+ let end = -1;
857
+ let transparent = false;
858
+ if (c === "/" && d === "/") {
859
+ let j = i + 2;
860
+ while (j < n && !isLineTerminator(code[j])) j++;
861
+ end = j;
862
+ transparent = true;
863
+ } else if (c === "/" && d === "*") {
864
+ let j = i + 2;
865
+ while (j < n && !(code[j] === "*" && code[j + 1] === "/")) j++;
866
+ end = Math.min(n, j + 2);
867
+ transparent = true;
868
+ } else if (c === '"' || c === "'" || c === "`") {
869
+ let j = i + 1;
870
+ while (j < n) {
871
+ if (code[j] === "\\") {
872
+ j += 2;
873
+ continue;
874
+ }
875
+ if (code[j] === c) {
876
+ j++;
877
+ break;
878
+ }
879
+ j++;
880
+ }
881
+ end = j;
882
+ } else if (c === "/" && d !== "/" && d !== "*" && isRegexPositionAt(code, i, lastSig)) {
883
+ let j = i + 1;
884
+ let inClass = false;
885
+ let closed = false;
886
+ while (j < n && !isLineTerminator(code[j])) {
887
+ const r = code[j];
888
+ if (r === "\\") {
889
+ j += 2;
890
+ continue;
891
+ }
892
+ if (r === "[") inClass = true;
893
+ else if (r === "]") inClass = false;
894
+ else if (r === "/" && !inClass) {
895
+ j++;
896
+ closed = true;
897
+ break;
898
+ }
899
+ j++;
900
+ }
901
+ if (closed) {
902
+ while (j < n && /[a-z]/.test(code[j])) j++;
903
+ end = j;
904
+ }
905
+ }
906
+ if (end >= 0) {
907
+ if (q < end) {
908
+ skipStart = i;
909
+ skipEnd = end;
910
+ return false;
911
+ }
912
+ i = end;
913
+ if (!transparent) lastSig = "x";
914
+ } else {
915
+ if (!/\s/.test(c)) lastSig = c;
916
+ i++;
917
+ }
918
+ }
919
+ return true;
920
+ };
921
+ }
922
+ function firstCodeMatchIndex(code, pattern) {
923
+ const inCode = makeCodeClassifier(code);
924
+ pattern.lastIndex = 0;
925
+ let m;
926
+ while ((m = pattern.exec(code)) !== null) {
927
+ if (inCode(m.index)) return m.index;
928
+ if (pattern.lastIndex <= m.index) pattern.lastIndex = m.index + 1;
929
+ }
930
+ return -1;
931
+ }
932
+ var REGEX_PRECEDING_KEYWORDS;
933
+ var init_source_scan = __esm({
934
+ "src/build/route-types/source-scan.ts"() {
935
+ "use strict";
936
+ REGEX_PRECEDING_KEYWORDS = /* @__PURE__ */ new Set([
937
+ "return",
938
+ "typeof",
939
+ "instanceof",
940
+ "in",
941
+ "of",
942
+ "new",
943
+ "delete",
944
+ "void",
945
+ "do",
946
+ "else",
947
+ "yield",
948
+ "await",
949
+ "case",
950
+ "throw"
951
+ ]);
952
+ }
953
+ });
954
+
576
955
  // src/build/route-types/router-processing.ts
577
- import { readFileSync as readFileSync3, writeFileSync as writeFileSync2, existsSync as existsSync3, unlinkSync } from "node:fs";
578
- import { join as join2, dirname as dirname2, resolve as resolve2, basename as pathBasename } from "node:path";
956
+ import {
957
+ readFileSync as readFileSync3,
958
+ writeFileSync as writeFileSync2,
959
+ existsSync as existsSync3,
960
+ unlinkSync,
961
+ readdirSync as readdirSync2
962
+ } from "node:fs";
963
+ import {
964
+ join as join2,
965
+ dirname as dirname2,
966
+ resolve as resolve2,
967
+ sep,
968
+ basename as pathBasename
969
+ } from "node:path";
579
970
  import ts5 from "typescript";
580
971
  function countPublicRouteEntries(source) {
581
972
  const matches = source.matchAll(/^\s+(?:"([^"]+)"|([a-zA-Z_$][^:]*)):\s*["{]/gm) ?? [];
@@ -588,7 +979,85 @@ function countPublicRouteEntries(source) {
588
979
  }
589
980
  return count;
590
981
  }
591
- function extractUrlsVariableFromRouter(code) {
982
+ function isRoutableSourceFile(name) {
983
+ return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
984
+ }
985
+ function isExcludedScanDir(name) {
986
+ return name === "node_modules" || name === "dist" || name === "coverage" || name === "__tests__" || name === "__mocks__" || name.startsWith(".");
987
+ }
988
+ function findCallSiteFilesRecursive(dir, pattern, patternG, stopAtMatchDir, filter, results) {
989
+ let entries;
990
+ try {
991
+ entries = readdirSync2(dir, { withFileTypes: true });
992
+ } catch (err) {
993
+ console.warn(
994
+ `[rango] Failed to scan directory ${dir}: ${err.message}`
995
+ );
996
+ return;
997
+ }
998
+ const childDirs = [];
999
+ const matchesInDir = [];
1000
+ for (const entry of entries) {
1001
+ const fullPath = join2(dir, entry.name);
1002
+ if (entry.isDirectory()) {
1003
+ if (!isExcludedScanDir(entry.name)) childDirs.push(fullPath);
1004
+ continue;
1005
+ }
1006
+ if (!isRoutableSourceFile(entry.name)) continue;
1007
+ if (filter && !filter(fullPath)) continue;
1008
+ try {
1009
+ const source = readFileSync3(fullPath, "utf-8");
1010
+ if (pattern.test(source) && firstCodeMatchIndex(source, patternG) >= 0) {
1011
+ matchesInDir.push(fullPath);
1012
+ }
1013
+ } catch {
1014
+ continue;
1015
+ }
1016
+ }
1017
+ results.push(...matchesInDir);
1018
+ if (!stopAtMatchDir || matchesInDir.length === 0) {
1019
+ for (const childDir of childDirs) {
1020
+ findCallSiteFilesRecursive(
1021
+ childDir,
1022
+ pattern,
1023
+ patternG,
1024
+ stopAtMatchDir,
1025
+ filter,
1026
+ results
1027
+ );
1028
+ }
1029
+ }
1030
+ }
1031
+ function findNestedRouterConflict(routerFiles) {
1032
+ const routerDirs = [
1033
+ ...new Set(routerFiles.map((filePath) => dirname2(resolve2(filePath))))
1034
+ ].sort((a, b) => a.length - b.length);
1035
+ for (let i = 0; i < routerDirs.length; i++) {
1036
+ const ancestorDir = routerDirs[i];
1037
+ const prefix = ancestorDir.endsWith(sep) ? ancestorDir : `${ancestorDir}${sep}`;
1038
+ for (let j = i + 1; j < routerDirs.length; j++) {
1039
+ const nestedDir = routerDirs[j];
1040
+ if (!nestedDir.startsWith(prefix)) continue;
1041
+ const ancestorFile = routerFiles.find(
1042
+ (filePath) => dirname2(resolve2(filePath)) === ancestorDir
1043
+ );
1044
+ const nestedFile = routerFiles.find(
1045
+ (filePath) => dirname2(resolve2(filePath)) === nestedDir
1046
+ );
1047
+ if (ancestorFile && nestedFile) {
1048
+ return { ancestor: ancestorFile, nested: nestedFile };
1049
+ }
1050
+ }
1051
+ }
1052
+ return null;
1053
+ }
1054
+ function formatNestedRouterConflictError(conflict, prefix = "[rango]") {
1055
+ return `${prefix} Nested router roots are not supported.
1056
+ Router root: ${conflict.ancestor}
1057
+ Nested router: ${conflict.nested}
1058
+ Move the nested router into a sibling directory or configure it as a separate app root.`;
1059
+ }
1060
+ function extractUrlsFromRouter(code) {
592
1061
  const sourceFile = ts5.createSourceFile(
593
1062
  "router.tsx",
594
1063
  code,
@@ -602,24 +1071,70 @@ function extractUrlsVariableFromRouter(code) {
602
1071
  const callee = node.expression;
603
1072
  return ts5.isIdentifier(callee) && callee.text === "createRouter";
604
1073
  }
1074
+ function isInlineBuilder(node) {
1075
+ return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
1076
+ }
1077
+ function isRoutesOnCreateRouter(node) {
1078
+ if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
1079
+ return false;
1080
+ let inner = node.expression.expression;
1081
+ while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
1082
+ inner = inner.expression.expression;
1083
+ }
1084
+ return isCreateRouterCall(inner);
1085
+ }
605
1086
  function visit(node) {
606
1087
  if (result) return;
607
- if (ts5.isCallExpression(node) && ts5.isPropertyAccessExpression(node.expression) && node.expression.name.text === "routes" && node.arguments.length >= 1 && ts5.isIdentifier(node.arguments[0])) {
608
- let inner = node.expression.expression;
609
- while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
610
- inner = inner.expression.expression;
611
- }
612
- if (isCreateRouterCall(inner)) {
613
- result = node.arguments[0].text;
614
- return;
1088
+ if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
1089
+ const arg = node.arguments[0];
1090
+ if (ts5.isIdentifier(arg)) {
1091
+ result = { kind: "variable", name: arg.text };
1092
+ } else if (isInlineBuilder(arg)) {
1093
+ result = { kind: "inline", block: arg.getText(sourceFile) };
615
1094
  }
1095
+ return;
616
1096
  }
617
1097
  if (isCreateRouterCall(node)) {
618
1098
  const callExpr = node;
619
- for (const arg of callExpr.arguments) {
1099
+ for (const callArg of callExpr.arguments) {
1100
+ if (ts5.isObjectLiteralExpression(callArg)) {
1101
+ for (const prop of callArg.properties) {
1102
+ if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
1103
+ if (ts5.isIdentifier(prop.initializer)) {
1104
+ result = { kind: "variable", name: prop.initializer.text };
1105
+ } else if (isInlineBuilder(prop.initializer)) {
1106
+ result = {
1107
+ kind: "inline",
1108
+ block: prop.initializer.getText(sourceFile)
1109
+ };
1110
+ }
1111
+ return;
1112
+ }
1113
+ }
1114
+ }
1115
+ }
1116
+ }
1117
+ ts5.forEachChild(node, visit);
1118
+ }
1119
+ visit(sourceFile);
1120
+ return result;
1121
+ }
1122
+ function extractBasenameFromRouter(code) {
1123
+ const sourceFile = ts5.createSourceFile(
1124
+ "router.tsx",
1125
+ code,
1126
+ ts5.ScriptTarget.Latest,
1127
+ true,
1128
+ ts5.ScriptKind.TSX
1129
+ );
1130
+ let result;
1131
+ function visit(node) {
1132
+ if (result !== void 0) return;
1133
+ if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
1134
+ for (const arg of node.arguments) {
620
1135
  if (ts5.isObjectLiteralExpression(arg)) {
621
1136
  for (const prop of arg.properties) {
622
- if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls" && ts5.isIdentifier(prop.initializer)) {
1137
+ if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
623
1138
  result = prop.initializer.text;
624
1139
  return;
625
1140
  }
@@ -632,6 +1147,38 @@ function extractUrlsVariableFromRouter(code) {
632
1147
  visit(sourceFile);
633
1148
  return result;
634
1149
  }
1150
+ function applyBasenameToRoutes(result, basename) {
1151
+ const prefixed = {};
1152
+ for (const [name, pattern] of Object.entries(result.routes)) {
1153
+ if (pattern === "/") {
1154
+ prefixed[name] = basename;
1155
+ } else if (basename.endsWith("/") && pattern.startsWith("/")) {
1156
+ prefixed[name] = basename + pattern.slice(1);
1157
+ } else {
1158
+ prefixed[name] = basename + pattern;
1159
+ }
1160
+ }
1161
+ return { routes: prefixed, searchSchemas: result.searchSchemas };
1162
+ }
1163
+ function genFileTsPath(sourceFile) {
1164
+ const base = pathBasename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
1165
+ return join2(dirname2(sourceFile), `${base}.named-routes.gen.ts`);
1166
+ }
1167
+ function resolveSearchSchemas(publicRouteNames, runtimeSchemas, sourceFile) {
1168
+ if (runtimeSchemas && Object.keys(runtimeSchemas).length > 0) {
1169
+ return runtimeSchemas;
1170
+ }
1171
+ const staticParsed = buildCombinedRouteMapForRouterFile(sourceFile);
1172
+ if (Object.keys(staticParsed.searchSchemas).length === 0) {
1173
+ return runtimeSchemas;
1174
+ }
1175
+ const filtered = {};
1176
+ for (const name of publicRouteNames) {
1177
+ const schema = staticParsed.searchSchemas[name];
1178
+ if (schema) filtered[name] = schema;
1179
+ }
1180
+ return Object.keys(filtered).length > 0 ? filtered : runtimeSchemas;
1181
+ }
635
1182
  function buildCombinedRouteMapForRouterFile(routerFilePath) {
636
1183
  let routerSource;
637
1184
  try {
@@ -639,19 +1186,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
639
1186
  } catch {
640
1187
  return { routes: {}, searchSchemas: {} };
641
1188
  }
642
- const urlsVarName = extractUrlsVariableFromRouter(routerSource);
643
- if (!urlsVarName) {
1189
+ const extraction = extractUrlsFromRouter(routerSource);
1190
+ if (!extraction) {
644
1191
  return { routes: {}, searchSchemas: {} };
645
1192
  }
646
- const imported = resolveImportedVariable(routerSource, urlsVarName);
647
- if (imported) {
648
- const targetFile = resolveImportPath(imported.specifier, routerFilePath);
649
- if (!targetFile) {
650
- return { routes: {}, searchSchemas: {} };
1193
+ const rawBasename = extractBasenameFromRouter(routerSource);
1194
+ const basename = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
1195
+ let result;
1196
+ if (extraction.kind === "inline") {
1197
+ result = buildCombinedRouteMapWithSearch(
1198
+ routerFilePath,
1199
+ void 0,
1200
+ void 0,
1201
+ void 0,
1202
+ extraction.block
1203
+ );
1204
+ } else {
1205
+ const imported = resolveImportedVariable(routerSource, extraction.name);
1206
+ if (imported) {
1207
+ const targetFile = resolveImportPath(imported.specifier, routerFilePath);
1208
+ if (!targetFile) {
1209
+ return { routes: {}, searchSchemas: {} };
1210
+ }
1211
+ result = buildCombinedRouteMapWithSearch(
1212
+ targetFile,
1213
+ imported.exportedName
1214
+ );
1215
+ } else {
1216
+ result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
651
1217
  }
652
- return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
653
1218
  }
654
- return buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
1219
+ if (basename) {
1220
+ result = applyBasenameToRoutes(result, basename);
1221
+ }
1222
+ return result;
655
1223
  }
656
1224
  function detectUnresolvableIncludes(routerFilePath) {
657
1225
  const realPath = resolve2(routerFilePath);
@@ -661,9 +1229,20 @@ function detectUnresolvableIncludes(routerFilePath) {
661
1229
  } catch {
662
1230
  return [];
663
1231
  }
664
- const urlsVarName = extractUrlsVariableFromRouter(source);
665
- if (!urlsVarName) return [];
666
- const imported = resolveImportedVariable(source, urlsVarName);
1232
+ const extraction = extractUrlsFromRouter(source);
1233
+ if (!extraction) return [];
1234
+ const diagnostics = [];
1235
+ if (extraction.kind === "inline") {
1236
+ buildCombinedRouteMapWithSearch(
1237
+ realPath,
1238
+ void 0,
1239
+ /* @__PURE__ */ new Set(),
1240
+ diagnostics,
1241
+ extraction.block
1242
+ );
1243
+ return diagnostics;
1244
+ }
1245
+ const imported = resolveImportedVariable(source, extraction.name);
667
1246
  let targetFile;
668
1247
  let exportedName;
669
1248
  if (imported) {
@@ -683,9 +1262,8 @@ function detectUnresolvableIncludes(routerFilePath) {
683
1262
  exportedName = imported.exportedName;
684
1263
  } else {
685
1264
  targetFile = realPath;
686
- exportedName = urlsVarName;
1265
+ exportedName = extraction.name;
687
1266
  }
688
- const diagnostics = [];
689
1267
  buildCombinedRouteMapWithSearch(
690
1268
  targetFile,
691
1269
  exportedName,
@@ -711,19 +1289,15 @@ function detectUnresolvableIncludesForUrlsFile(filePath) {
711
1289
  return diagnostics;
712
1290
  }
713
1291
  function findRouterFiles(root, filter) {
714
- const files = findTsFiles(root, filter);
715
1292
  const result = [];
716
- for (const filePath of files) {
717
- if (filePath.includes(".gen.")) continue;
718
- try {
719
- const source = readFileSync3(filePath, "utf-8");
720
- if (/\bcreateRouter\s*[<(]/.test(source)) {
721
- result.push(filePath);
722
- }
723
- } catch {
724
- continue;
725
- }
726
- }
1293
+ findCallSiteFilesRecursive(
1294
+ root,
1295
+ ROUTER_CALL_PATTERN,
1296
+ ROUTER_CALL_PATTERN_G,
1297
+ true,
1298
+ filter,
1299
+ result
1300
+ );
727
1301
  return result;
728
1302
  }
729
1303
  function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
@@ -732,46 +1306,34 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
732
1306
  if (existsSync3(oldCombinedPath)) {
733
1307
  unlinkSync(oldCombinedPath);
734
1308
  console.log(
735
- `[rsc-router] Removed stale combined route types: ${oldCombinedPath}`
1309
+ `[rango] Removed stale combined route types: ${oldCombinedPath}`
736
1310
  );
737
1311
  }
738
1312
  } catch {
739
1313
  }
740
1314
  const routerFilePaths = knownRouterFiles ?? findRouterFiles(root);
741
1315
  if (routerFilePaths.length === 0) return;
1316
+ const nestedRouterConflict = findNestedRouterConflict(routerFilePaths);
1317
+ if (nestedRouterConflict) {
1318
+ throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
1319
+ }
742
1320
  for (const routerFilePath of routerFilePaths) {
743
- let routerSource;
744
- try {
745
- routerSource = readFileSync3(routerFilePath, "utf-8");
746
- } catch {
747
- continue;
748
- }
749
- const urlsVarName = extractUrlsVariableFromRouter(routerSource);
750
- if (!urlsVarName) continue;
751
- let result;
752
- const imported = resolveImportedVariable(routerSource, urlsVarName);
753
- if (imported) {
754
- const targetFile = resolveImportPath(imported.specifier, routerFilePath);
755
- if (!targetFile) continue;
756
- result = buildCombinedRouteMapWithSearch(
757
- targetFile,
758
- imported.exportedName
759
- );
760
- } else {
761
- result = buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
1321
+ const result = buildCombinedRouteMapForRouterFile(routerFilePath);
1322
+ if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
1323
+ let routerSource;
1324
+ try {
1325
+ routerSource = readFileSync3(routerFilePath, "utf-8");
1326
+ } catch {
1327
+ continue;
1328
+ }
1329
+ if (!extractUrlsFromRouter(routerSource)) continue;
762
1330
  }
763
- const routerBasename = pathBasename(routerFilePath).replace(
764
- /\.(tsx?|jsx?)$/,
765
- ""
766
- );
767
- const outPath = join2(
768
- dirname2(routerFilePath),
769
- `${routerBasename}.named-routes.gen.ts`
770
- );
1331
+ const outPath = genFileTsPath(routerFilePath);
771
1332
  const existing = existsSync3(outPath) ? readFileSync3(outPath, "utf-8") : null;
772
1333
  if (Object.keys(result.routes).length === 0) {
773
1334
  if (!existing) {
774
1335
  const emptySource = generateRouteTypesSource({});
1336
+ opts?.onWrite?.(outPath, emptySource);
775
1337
  writeFileSync2(outPath, emptySource);
776
1338
  }
777
1339
  continue;
@@ -791,21 +1353,25 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
791
1353
  continue;
792
1354
  }
793
1355
  }
1356
+ opts?.onWrite?.(outPath, source);
794
1357
  writeFileSync2(outPath, source);
795
1358
  console.log(
796
- `[rsc-router] Generated route types (${Object.keys(result.routes).length} routes) -> ${outPath}`
1359
+ `[rango] Generated route types (${Object.keys(result.routes).length} routes) -> ${outPath}`
797
1360
  );
798
1361
  }
799
1362
  }
800
1363
  }
1364
+ var ROUTER_CALL_PATTERN, ROUTER_CALL_PATTERN_G;
801
1365
  var init_router_processing = __esm({
802
1366
  "src/build/route-types/router-processing.ts"() {
803
1367
  "use strict";
804
1368
  init_codegen();
805
- init_scan_filter();
1369
+ init_source_scan();
806
1370
  init_include_resolution();
807
1371
  init_per_module_writer();
808
1372
  init_route_name();
1373
+ ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
1374
+ ROUTER_CALL_PATTERN_G = /\bcreateRouter\s*[<(]/g;
809
1375
  }
810
1376
  });
811
1377
 
@@ -843,7 +1409,7 @@ import {
843
1409
  import { createElement, StrictMode } from "react";
844
1410
  import { hydrateRoot } from "react-dom/client";
845
1411
  import { rscStream } from "@rangojs/router/internal/deps/html-stream-client";
846
- import { initBrowserApp, RSCRouter } from "@rangojs/router/browser";
1412
+ import { initBrowserApp, Rango } from "@rangojs/router/browser";
847
1413
 
848
1414
  async function initializeApp() {
849
1415
  const deps = {
@@ -854,11 +1420,16 @@ async function initializeApp() {
854
1420
  createTemporaryReferenceSet,
855
1421
  };
856
1422
 
857
- await initBrowserApp({ rscStream, deps });
1423
+ // initBrowserApp resolves the initial payload and returns the browser app
1424
+ // context, including strictMode (default true) from createRouter. StrictMode
1425
+ // is the default; createRouter({ strictMode: false }) ships the opt-out in the
1426
+ // payload metadata. StrictMode emits no DOM, so toggling never changes markup.
1427
+ const { strictMode } = await initBrowserApp({ rscStream, deps });
858
1428
 
1429
+ const app = createElement(Rango);
859
1430
  hydrateRoot(
860
1431
  document,
861
- createElement(StrictMode, null, createElement(RSCRouter))
1432
+ strictMode === false ? app : createElement(StrictMode, null, app)
862
1433
  );
863
1434
  }
864
1435
 
@@ -866,9 +1437,14 @@ initializeApp().catch(console.error);
866
1437
  `.trim();
867
1438
  VIRTUAL_ENTRY_SSR = `
868
1439
  import { createFromReadableStream } from "@rangojs/router/internal/deps/ssr";
869
- import { renderToReadableStream } from "react-dom/server.edge";
1440
+ import { renderToReadableStream, resume } from "react-dom/server.edge";
1441
+ import { prerender } from "react-dom/static.edge";
870
1442
  import { injectRSCPayload } from "@rangojs/router/internal/deps/html-stream-server";
871
- import { createSSRHandler } from "@rangojs/router/ssr";
1443
+ import {
1444
+ createSSRHandler,
1445
+ createShellCaptureHandler,
1446
+ createShellResumeHandler,
1447
+ } from "@rangojs/router/ssr";
872
1448
 
873
1449
  export const renderHTML = createSSRHandler({
874
1450
  createFromReadableStream,
@@ -877,6 +1453,26 @@ export const renderHTML = createSSRHandler({
877
1453
  loadBootstrapScriptContent: () =>
878
1454
  import.meta.viteRsc.loadBootstrapScriptContent("index"),
879
1455
  });
1456
+
1457
+ export const captureShellHTML = createShellCaptureHandler({
1458
+ createFromReadableStream,
1459
+ renderToReadableStream,
1460
+ injectRSCPayload,
1461
+ prerender,
1462
+ resume,
1463
+ loadBootstrapScriptContent: () =>
1464
+ import.meta.viteRsc.loadBootstrapScriptContent("index"),
1465
+ });
1466
+
1467
+ export const resumeShellHTML = createShellResumeHandler({
1468
+ createFromReadableStream,
1469
+ renderToReadableStream,
1470
+ injectRSCPayload,
1471
+ prerender,
1472
+ resume,
1473
+ loadBootstrapScriptContent: () =>
1474
+ import.meta.viteRsc.loadBootstrapScriptContent("index"),
1475
+ });
880
1476
  `.trim();
881
1477
  VIRTUAL_IDS = {
882
1478
  browser: "virtual:rsc-router/entry.browser.js",
@@ -887,12 +1483,37 @@ export const renderHTML = createSSRHandler({
887
1483
  }
888
1484
  });
889
1485
 
1486
+ // src/vite/utils/directive-prologue.ts
1487
+ import { parseAst } from "vite";
1488
+ function hasUseClientDirective(source) {
1489
+ let program;
1490
+ try {
1491
+ program = parseAst(source, { lang: "tsx" });
1492
+ } catch {
1493
+ return false;
1494
+ }
1495
+ for (const node of program.body ?? []) {
1496
+ if (node?.type === "ExpressionStatement" && node.expression?.type === "Literal" && typeof node.expression.value === "string") {
1497
+ if (node.expression.value === "use client") return true;
1498
+ continue;
1499
+ }
1500
+ break;
1501
+ }
1502
+ return false;
1503
+ }
1504
+ var init_directive_prologue = __esm({
1505
+ "src/vite/utils/directive-prologue.ts"() {
1506
+ "use strict";
1507
+ }
1508
+ });
1509
+
890
1510
  // src/vite/plugins/version-plugin.ts
891
1511
  var version_plugin_exports = {};
892
1512
  __export(version_plugin_exports, {
893
- createVersionPlugin: () => createVersionPlugin
1513
+ createVersionPlugin: () => createVersionPlugin,
1514
+ isViteDepCachePath: () => isViteDepCachePath
894
1515
  });
895
- import { parseAst } from "vite";
1516
+ import { parseAst as parseAst2 } from "vite";
896
1517
  function isCodeModule(id) {
897
1518
  return /\.(tsx?|jsx?)($|\?)/.test(id);
898
1519
  }
@@ -900,23 +1521,13 @@ function normalizeModuleId(id) {
900
1521
  return id.split("?", 1)[0];
901
1522
  }
902
1523
  function getClientModuleSignature(source) {
1524
+ if (!hasUseClientDirective(source)) return void 0;
903
1525
  let program;
904
1526
  try {
905
- program = parseAst(source, { jsx: true });
1527
+ program = parseAst2(source, { lang: "tsx" });
906
1528
  } catch {
907
1529
  return void 0;
908
1530
  }
909
- let isUseClient = false;
910
- for (const node of program.body ?? []) {
911
- if (node?.type === "ExpressionStatement" && node.expression?.type === "Literal" && typeof node.expression.value === "string") {
912
- if (node.expression.value === "use client") {
913
- isUseClient = true;
914
- }
915
- continue;
916
- }
917
- break;
918
- }
919
- if (!isUseClient) return void 0;
920
1531
  const exports = /* @__PURE__ */ new Set();
921
1532
  let hasDefault = false;
922
1533
  let hasExportAll = false;
@@ -985,10 +1596,12 @@ function createVersionPlugin() {
985
1596
  let currentVersion = buildVersion;
986
1597
  let isDev = false;
987
1598
  let server = null;
1599
+ let resolvedCacheDir;
988
1600
  const clientModuleSignatures = /* @__PURE__ */ new Map();
1601
+ let versionCounter = 0;
989
1602
  const bumpVersion = (reason) => {
990
- currentVersion = Date.now().toString(16);
991
- console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
1603
+ currentVersion = Date.now().toString(16) + String(++versionCounter);
1604
+ console.log(`[rango] ${reason}, version updated: ${currentVersion}`);
992
1605
  const rscEnv = server?.environments?.rsc;
993
1606
  const versionMod = rscEnv?.moduleGraph?.getModuleById(
994
1607
  "\0" + VIRTUAL_IDS.version
@@ -1002,6 +1615,7 @@ function createVersionPlugin() {
1002
1615
  enforce: "pre",
1003
1616
  configResolved(config) {
1004
1617
  isDev = config.command === "serve";
1618
+ resolvedCacheDir = config.cacheDir ? String(config.cacheDir).replace(/\\/g, "/") : void 0;
1005
1619
  },
1006
1620
  configureServer(devServer) {
1007
1621
  server = devServer;
@@ -1038,11 +1652,14 @@ function createVersionPlugin() {
1038
1652
  }
1039
1653
  return null;
1040
1654
  },
1041
- // Track RSC module changes and update version
1042
1655
  async hotUpdate(ctx) {
1043
1656
  if (!isDev) return;
1044
1657
  const isRscModule = this.environment?.name === "rsc";
1045
1658
  if (!isRscModule) return;
1659
+ if (isViteDepCachePath(ctx.file, resolvedCacheDir)) return;
1660
+ if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
1661
+ return;
1662
+ }
1046
1663
  if (isCodeModule(ctx.file)) {
1047
1664
  const filePath = normalizeModuleId(ctx.file);
1048
1665
  const previousSignature = clientModuleSignatures.get(filePath);
@@ -1069,10 +1686,22 @@ function createVersionPlugin() {
1069
1686
  }
1070
1687
  };
1071
1688
  }
1689
+ function isViteDepCachePath(filePath, cacheDir) {
1690
+ if (!filePath) return false;
1691
+ const normalized = filePath.replace(/\\/g, "/");
1692
+ if (cacheDir) {
1693
+ const normalizedCacheDir = cacheDir.replace(/\\/g, "/").replace(/\/+$/, "");
1694
+ if (normalized === normalizedCacheDir || normalized.startsWith(normalizedCacheDir + "/")) {
1695
+ return true;
1696
+ }
1697
+ }
1698
+ return /\/node_modules\/\.vite[^/]*\//.test(normalized) || normalized.includes("/.vite-isolated/");
1699
+ }
1072
1700
  var init_version_plugin = __esm({
1073
1701
  "src/vite/plugins/version-plugin.ts"() {
1074
1702
  "use strict";
1075
1703
  init_virtual_entries();
1704
+ init_directive_prologue();
1076
1705
  }
1077
1706
  });
1078
1707
 
@@ -1114,7 +1743,7 @@ var runtime_discovery_exports = {};
1114
1743
  __export(runtime_discovery_exports, {
1115
1744
  discoverAndWriteRouteTypes: () => discoverAndWriteRouteTypes
1116
1745
  });
1117
- import { dirname as dirname3, join as join3, basename, resolve as resolve3 } from "node:path";
1746
+ import { resolve as resolve3 } from "node:path";
1118
1747
  import { existsSync as existsSync4, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "node:fs";
1119
1748
  async function discoverAndWriteRouteTypes(opts) {
1120
1749
  let createViteServer;
@@ -1200,7 +1829,10 @@ async function discoverAndWriteRouteTypes(opts) {
1200
1829
  let routerMountIndex = 0;
1201
1830
  for (const [id, router] of registry) {
1202
1831
  if (!router.urlpatterns) continue;
1203
- const manifest = generateManifest(router.urlpatterns, routerMountIndex);
1832
+ const manifest = await generateManifest(
1833
+ router.urlpatterns,
1834
+ routerMountIndex
1835
+ );
1204
1836
  routerMountIndex++;
1205
1837
  const rawManifest = manifest.routeManifest;
1206
1838
  const routeManifest = {};
@@ -1224,22 +1856,12 @@ This means createRouter() stack trace parsing matched an internal frame.
1224
1856
  Set an explicit \`id\` on createRouter() or check the call site.`
1225
1857
  );
1226
1858
  }
1227
- if (!routeSearchSchemas || Object.keys(routeSearchSchemas).length === 0) {
1228
- const staticParsed = buildCombinedRouteMapForRouterFile(sourceFile);
1229
- if (Object.keys(staticParsed.searchSchemas).length > 0) {
1230
- const filtered = {};
1231
- for (const name of Object.keys(routeManifest)) {
1232
- const schema = staticParsed.searchSchemas[name];
1233
- if (schema) filtered[name] = schema;
1234
- }
1235
- if (Object.keys(filtered).length > 0) {
1236
- routeSearchSchemas = filtered;
1237
- }
1238
- }
1239
- }
1240
- const routerDir = dirname3(sourceFile);
1241
- const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
1242
- const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
1859
+ routeSearchSchemas = resolveSearchSchemas(
1860
+ Object.keys(routeManifest),
1861
+ routeSearchSchemas,
1862
+ sourceFile
1863
+ );
1864
+ const outPath = genFileTsPath(sourceFile);
1243
1865
  const source = generateRouteTypesSource(
1244
1866
  routeManifest,
1245
1867
  routeSearchSchemas && Object.keys(routeSearchSchemas).length > 0 ? routeSearchSchemas : void 0
@@ -1276,7 +1898,7 @@ var init_runtime_discovery = __esm({
1276
1898
 
1277
1899
  // src/bin/rango.ts
1278
1900
  init_generate_route_types();
1279
- import { resolve as resolve4, dirname as dirname4 } from "node:path";
1901
+ import { resolve as resolve4, dirname as dirname3 } from "node:path";
1280
1902
  import { readFileSync as readFileSync5, statSync, existsSync as existsSync5 } from "node:fs";
1281
1903
  var [command, ...rawArgs] = process.argv.slice(2);
1282
1904
  if (command === "generate") {
@@ -1347,12 +1969,12 @@ Examples:
1347
1969
  );
1348
1970
  }
1349
1971
  function findProjectRoot(fromPath) {
1350
- let dir = dirname4(resolve4(fromPath));
1351
- while (dir !== dirname4(dir)) {
1972
+ let dir = dirname3(resolve4(fromPath));
1973
+ while (dir !== dirname3(dir)) {
1352
1974
  if (existsSync5(resolve4(dir, "package.json")) || existsSync5(resolve4(dir, "vite.config.ts")) || existsSync5(resolve4(dir, "vite.config.js"))) {
1353
1975
  return dir;
1354
1976
  }
1355
- dir = dirname4(dir);
1977
+ dir = dirname3(dir);
1356
1978
  }
1357
1979
  return process.cwd();
1358
1980
  }
@@ -1428,6 +2050,15 @@ function runStaticGeneration(args, mode) {
1428
2050
  formatDiagnostics(uniqueDiagnostics);
1429
2051
  console.warn("");
1430
2052
  }
2053
+ const nestedRouterConflict = findNestedRouterConflict(routerFiles);
2054
+ if (nestedRouterConflict) {
2055
+ console.error(
2056
+ `
2057
+ ${formatNestedRouterConflictError(nestedRouterConflict, "[rango]")}
2058
+ `
2059
+ );
2060
+ process.exit(1);
2061
+ }
1431
2062
  for (const urlsFile of urlsFiles) {
1432
2063
  writePerModuleRouteTypesForFile(urlsFile);
1433
2064
  }
@@ -1471,6 +2102,15 @@ async function runRuntimeDiscovery(args, configFile) {
1471
2102
  console.error("[rango] No router files found in the provided paths");
1472
2103
  process.exit(1);
1473
2104
  }
2105
+ const nestedRouterConflict = findNestedRouterConflict(routerEntries);
2106
+ if (nestedRouterConflict) {
2107
+ console.error(
2108
+ `
2109
+ ${formatNestedRouterConflictError(nestedRouterConflict, "[rango]")}
2110
+ `
2111
+ );
2112
+ process.exit(1);
2113
+ }
1474
2114
  let discoverAndWriteRouteTypes2;
1475
2115
  try {
1476
2116
  const mod = await Promise.resolve().then(() => (init_runtime_discovery(), runtime_discovery_exports));