@rangojs/router 0.0.0-experimental.9eb4192e → 0.0.0-experimental.a014d2b7

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 (1191) hide show
  1. package/AGENTS.md +8 -0
  2. package/README.md +123 -15
  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 +319 -95
  82. package/dist/bin/rango.js.map +1 -0
  83. package/dist/browser/event-controller.d.ts +191 -0
  84. package/dist/browser/event-controller.d.ts.map +1 -0
  85. package/dist/browser/event-controller.js +559 -0
  86. package/dist/browser/event-controller.js.map +1 -0
  87. package/dist/browser/index.d.ts +2 -0
  88. package/dist/browser/index.d.ts.map +1 -0
  89. package/dist/browser/index.js +14 -0
  90. package/dist/browser/index.js.map +1 -0
  91. package/dist/browser/link-interceptor.d.ts +38 -0
  92. package/dist/browser/link-interceptor.d.ts.map +1 -0
  93. package/dist/browser/link-interceptor.js +99 -0
  94. package/dist/browser/link-interceptor.js.map +1 -0
  95. package/dist/browser/logging.d.ts +10 -0
  96. package/dist/browser/logging.d.ts.map +1 -0
  97. package/dist/browser/logging.js +29 -0
  98. package/dist/browser/logging.js.map +1 -0
  99. package/dist/browser/lru-cache.d.ts +17 -0
  100. package/dist/browser/lru-cache.d.ts.map +1 -0
  101. package/dist/browser/lru-cache.js +50 -0
  102. package/dist/browser/lru-cache.js.map +1 -0
  103. package/dist/browser/merge-segment-loaders.d.ts +39 -0
  104. package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
  105. package/dist/browser/merge-segment-loaders.js +102 -0
  106. package/dist/browser/merge-segment-loaders.js.map +1 -0
  107. package/dist/browser/navigation-bridge.d.ts +102 -0
  108. package/dist/browser/navigation-bridge.d.ts.map +1 -0
  109. package/dist/browser/navigation-bridge.js +708 -0
  110. package/dist/browser/navigation-bridge.js.map +1 -0
  111. package/dist/browser/navigation-client.d.ts +25 -0
  112. package/dist/browser/navigation-client.d.ts.map +1 -0
  113. package/dist/browser/navigation-client.js +157 -0
  114. package/dist/browser/navigation-client.js.map +1 -0
  115. package/dist/browser/navigation-store.d.ts +101 -0
  116. package/dist/browser/navigation-store.d.ts.map +1 -0
  117. package/dist/browser/navigation-store.js +625 -0
  118. package/dist/browser/navigation-store.js.map +1 -0
  119. package/dist/browser/partial-update.d.ts +75 -0
  120. package/dist/browser/partial-update.d.ts.map +1 -0
  121. package/dist/browser/partial-update.js +426 -0
  122. package/dist/browser/partial-update.js.map +1 -0
  123. package/dist/browser/react/Link.d.ts +86 -0
  124. package/dist/browser/react/Link.d.ts.map +1 -0
  125. package/dist/browser/react/Link.js +128 -0
  126. package/dist/browser/react/Link.js.map +1 -0
  127. package/dist/browser/react/NavigationProvider.d.ts +63 -0
  128. package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
  129. package/dist/browser/react/NavigationProvider.js +216 -0
  130. package/dist/browser/react/NavigationProvider.js.map +1 -0
  131. package/dist/browser/react/ScrollRestoration.d.ts +75 -0
  132. package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
  133. package/dist/browser/react/ScrollRestoration.js +57 -0
  134. package/dist/browser/react/ScrollRestoration.js.map +1 -0
  135. package/dist/browser/react/context.d.ts +46 -0
  136. package/dist/browser/react/context.d.ts.map +1 -0
  137. package/dist/browser/react/context.js +10 -0
  138. package/dist/browser/react/context.js.map +1 -0
  139. package/dist/browser/react/index.d.ts +11 -0
  140. package/dist/browser/react/index.d.ts.map +1 -0
  141. package/dist/browser/react/index.js +22 -0
  142. package/dist/browser/react/index.js.map +1 -0
  143. package/dist/browser/react/location-state-shared.d.ts +63 -0
  144. package/dist/browser/react/location-state-shared.d.ts.map +1 -0
  145. package/dist/browser/react/location-state-shared.js +81 -0
  146. package/dist/browser/react/location-state-shared.js.map +1 -0
  147. package/dist/browser/react/location-state.d.ts +23 -0
  148. package/dist/browser/react/location-state.d.ts.map +1 -0
  149. package/dist/browser/react/location-state.js +29 -0
  150. package/dist/browser/react/location-state.js.map +1 -0
  151. package/dist/browser/react/mount-context.d.ts +24 -0
  152. package/dist/browser/react/mount-context.d.ts.map +1 -0
  153. package/dist/browser/react/mount-context.js +24 -0
  154. package/dist/browser/react/mount-context.js.map +1 -0
  155. package/dist/browser/react/use-action.d.ts +64 -0
  156. package/dist/browser/react/use-action.d.ts.map +1 -0
  157. package/dist/browser/react/use-action.js +134 -0
  158. package/dist/browser/react/use-action.js.map +1 -0
  159. package/dist/browser/react/use-client-cache.d.ts +41 -0
  160. package/dist/browser/react/use-client-cache.d.ts.map +1 -0
  161. package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
  162. package/dist/browser/react/use-client-cache.js.map +1 -0
  163. package/dist/browser/react/use-handle.d.ts +31 -0
  164. package/dist/browser/react/use-handle.d.ts.map +1 -0
  165. package/dist/browser/react/use-handle.js +144 -0
  166. package/dist/browser/react/use-handle.js.map +1 -0
  167. package/dist/browser/react/use-href.d.ts +33 -0
  168. package/dist/browser/react/use-href.d.ts.map +1 -0
  169. package/dist/browser/react/use-href.js +39 -0
  170. package/dist/browser/react/use-href.js.map +1 -0
  171. package/dist/browser/react/use-link-status.d.ts +37 -0
  172. package/dist/browser/react/use-link-status.d.ts.map +1 -0
  173. package/dist/browser/react/use-link-status.js +99 -0
  174. package/dist/browser/react/use-link-status.js.map +1 -0
  175. package/dist/browser/react/use-mount.d.ts +25 -0
  176. package/dist/browser/react/use-mount.d.ts.map +1 -0
  177. package/dist/browser/react/use-mount.js +30 -0
  178. package/dist/browser/react/use-mount.js.map +1 -0
  179. package/dist/browser/react/use-navigation.d.ts +27 -0
  180. package/dist/browser/react/use-navigation.d.ts.map +1 -0
  181. package/dist/browser/react/use-navigation.js +87 -0
  182. package/dist/browser/react/use-navigation.js.map +1 -0
  183. package/dist/browser/react/use-segments.d.ts +38 -0
  184. package/dist/browser/react/use-segments.d.ts.map +1 -0
  185. package/dist/browser/react/use-segments.js +130 -0
  186. package/dist/browser/react/use-segments.js.map +1 -0
  187. package/dist/browser/request-controller.d.ts +26 -0
  188. package/dist/browser/request-controller.d.ts.map +1 -0
  189. package/dist/browser/request-controller.js +147 -0
  190. package/dist/browser/request-controller.js.map +1 -0
  191. package/dist/browser/rsc-router.d.ts +129 -0
  192. package/dist/browser/rsc-router.d.ts.map +1 -0
  193. package/dist/browser/rsc-router.js +195 -0
  194. package/dist/browser/rsc-router.js.map +1 -0
  195. package/dist/browser/scroll-restoration.d.ts +93 -0
  196. package/dist/browser/scroll-restoration.d.ts.map +1 -0
  197. package/dist/browser/scroll-restoration.js +321 -0
  198. package/dist/browser/scroll-restoration.js.map +1 -0
  199. package/dist/browser/segment-structure-assert.d.ts +17 -0
  200. package/dist/browser/segment-structure-assert.d.ts.map +1 -0
  201. package/dist/browser/segment-structure-assert.js +59 -0
  202. package/dist/browser/segment-structure-assert.js.map +1 -0
  203. package/dist/browser/server-action-bridge.d.ts +26 -0
  204. package/dist/browser/server-action-bridge.d.ts.map +1 -0
  205. package/dist/browser/server-action-bridge.js +668 -0
  206. package/dist/browser/server-action-bridge.js.map +1 -0
  207. package/dist/browser/shallow.d.ts +12 -0
  208. package/dist/browser/shallow.d.ts.map +1 -0
  209. package/dist/browser/shallow.js +34 -0
  210. package/dist/browser/shallow.js.map +1 -0
  211. package/dist/browser/types.d.ts +369 -0
  212. package/dist/browser/types.d.ts.map +1 -0
  213. package/dist/browser/types.js +2 -0
  214. package/dist/browser/types.js.map +1 -0
  215. package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
  216. package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
  217. package/dist/build/__tests__/generate-cli.test.js +237 -0
  218. package/dist/build/__tests__/generate-cli.test.js.map +1 -0
  219. package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
  220. package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
  221. package/dist/build/__tests__/generate-manifest.test.js +119 -0
  222. package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
  223. package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
  224. package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
  225. package/dist/build/__tests__/generate-route-types.test.js +620 -0
  226. package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
  227. package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
  228. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
  229. package/dist/build/__tests__/per-router-manifest.test.js +308 -0
  230. package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
  231. package/dist/build/generate-manifest.d.ts +81 -0
  232. package/dist/build/generate-manifest.d.ts.map +1 -0
  233. package/dist/build/generate-manifest.js +276 -0
  234. package/dist/build/generate-manifest.js.map +1 -0
  235. package/dist/build/generate-route-types.d.ts +115 -0
  236. package/dist/build/generate-route-types.d.ts.map +1 -0
  237. package/dist/build/generate-route-types.js +740 -0
  238. package/dist/build/generate-route-types.js.map +1 -0
  239. package/dist/build/index.d.ts +21 -0
  240. package/dist/build/index.d.ts.map +1 -0
  241. package/dist/build/index.js +21 -0
  242. package/dist/build/index.js.map +1 -0
  243. package/dist/build/route-trie.d.ts +71 -0
  244. package/dist/build/route-trie.d.ts.map +1 -0
  245. package/dist/build/route-trie.js +175 -0
  246. package/dist/build/route-trie.js.map +1 -0
  247. package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
  248. package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
  249. package/dist/cache/__tests__/cache-scope.test.js +208 -0
  250. package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
  251. package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
  252. package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
  253. package/dist/cache/__tests__/document-cache.test.js +345 -0
  254. package/dist/cache/__tests__/document-cache.test.js.map +1 -0
  255. package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
  256. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
  257. package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
  258. package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
  259. package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
  260. package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
  261. package/dist/cache/__tests__/memory-store.test.js +367 -0
  262. package/dist/cache/__tests__/memory-store.test.js.map +1 -0
  263. package/dist/cache/cache-scope.d.ts +102 -0
  264. package/dist/cache/cache-scope.d.ts.map +1 -0
  265. package/dist/cache/cache-scope.js +440 -0
  266. package/dist/cache/cache-scope.js.map +1 -0
  267. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
  268. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
  269. package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
  270. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
  271. package/dist/cache/cf/cf-cache-store.d.ts +165 -0
  272. package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
  273. package/dist/cache/cf/cf-cache-store.js +242 -0
  274. package/dist/cache/cf/cf-cache-store.js.map +1 -0
  275. package/dist/cache/cf/index.d.ts +14 -0
  276. package/dist/cache/cf/index.d.ts.map +1 -0
  277. package/dist/cache/cf/index.js +17 -0
  278. package/dist/cache/cf/index.js.map +1 -0
  279. package/dist/cache/document-cache.d.ts +64 -0
  280. package/dist/cache/document-cache.d.ts.map +1 -0
  281. package/dist/cache/document-cache.js +228 -0
  282. package/dist/cache/document-cache.js.map +1 -0
  283. package/dist/cache/index.d.ts +19 -0
  284. package/dist/cache/index.d.ts.map +1 -0
  285. package/dist/cache/index.js +21 -0
  286. package/dist/cache/index.js.map +1 -0
  287. package/dist/cache/memory-segment-store.d.ts +110 -0
  288. package/dist/cache/memory-segment-store.d.ts.map +1 -0
  289. package/dist/cache/memory-segment-store.js +117 -0
  290. package/dist/cache/memory-segment-store.js.map +1 -0
  291. package/dist/cache/memory-store.d.ts +41 -0
  292. package/dist/cache/memory-store.d.ts.map +1 -0
  293. package/dist/cache/memory-store.js +191 -0
  294. package/dist/cache/memory-store.js.map +1 -0
  295. package/dist/cache/types.d.ts +317 -0
  296. package/dist/cache/types.d.ts.map +1 -0
  297. package/dist/cache/types.js +12 -0
  298. package/dist/cache/types.js.map +1 -0
  299. package/dist/client.d.ts +248 -0
  300. package/dist/client.d.ts.map +1 -0
  301. package/dist/client.js +367 -0
  302. package/dist/client.js.map +1 -0
  303. package/dist/client.rsc.d.ts +26 -0
  304. package/dist/client.rsc.d.ts.map +1 -0
  305. package/dist/client.rsc.js +46 -0
  306. package/dist/client.rsc.js.map +1 -0
  307. package/dist/component-utils.d.ts +36 -0
  308. package/dist/component-utils.d.ts.map +1 -0
  309. package/dist/component-utils.js +61 -0
  310. package/dist/component-utils.js.map +1 -0
  311. package/dist/components/DefaultDocument.d.ts +13 -0
  312. package/dist/components/DefaultDocument.d.ts.map +1 -0
  313. package/dist/components/DefaultDocument.js +15 -0
  314. package/dist/components/DefaultDocument.js.map +1 -0
  315. package/dist/debug.d.ts +58 -0
  316. package/dist/debug.d.ts.map +1 -0
  317. package/dist/debug.js +157 -0
  318. package/dist/debug.js.map +1 -0
  319. package/dist/default-error-boundary.d.ts +11 -0
  320. package/dist/default-error-boundary.d.ts.map +1 -0
  321. package/dist/default-error-boundary.js +45 -0
  322. package/dist/default-error-boundary.js.map +1 -0
  323. package/dist/deps/browser.d.ts +2 -0
  324. package/dist/deps/browser.d.ts.map +1 -0
  325. package/dist/deps/browser.js +3 -0
  326. package/dist/deps/browser.js.map +1 -0
  327. package/dist/deps/html-stream-client.d.ts +2 -0
  328. package/dist/deps/html-stream-client.d.ts.map +1 -0
  329. package/dist/deps/html-stream-client.js +3 -0
  330. package/dist/deps/html-stream-client.js.map +1 -0
  331. package/dist/deps/html-stream-server.d.ts +2 -0
  332. package/dist/deps/html-stream-server.d.ts.map +1 -0
  333. package/dist/deps/html-stream-server.js +3 -0
  334. package/dist/deps/html-stream-server.js.map +1 -0
  335. package/dist/deps/rsc.d.ts +2 -0
  336. package/dist/deps/rsc.d.ts.map +1 -0
  337. package/dist/deps/rsc.js +4 -0
  338. package/dist/deps/rsc.js.map +1 -0
  339. package/dist/deps/ssr.d.ts +2 -0
  340. package/dist/deps/ssr.d.ts.map +1 -0
  341. package/dist/deps/ssr.js +3 -0
  342. package/dist/deps/ssr.js.map +1 -0
  343. package/dist/errors.d.ts +174 -0
  344. package/dist/errors.d.ts.map +1 -0
  345. package/dist/errors.js +241 -0
  346. package/dist/errors.js.map +1 -0
  347. package/dist/handle.d.ts +78 -0
  348. package/dist/handle.d.ts.map +1 -0
  349. package/dist/handle.js +82 -0
  350. package/dist/handle.js.map +1 -0
  351. package/dist/handles/MetaTags.d.ts +14 -0
  352. package/dist/handles/MetaTags.d.ts.map +1 -0
  353. package/dist/handles/MetaTags.js +136 -0
  354. package/dist/handles/MetaTags.js.map +1 -0
  355. package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
  356. package/dist/handles/index.d.ts.map +1 -0
  357. package/dist/handles/index.js +6 -0
  358. package/dist/handles/index.js.map +1 -0
  359. package/dist/handles/meta.d.ts +39 -0
  360. package/dist/handles/meta.d.ts.map +1 -0
  361. package/dist/handles/meta.js +202 -0
  362. package/dist/handles/meta.js.map +1 -0
  363. package/dist/host/__tests__/errors.test.d.ts +2 -0
  364. package/dist/host/__tests__/errors.test.d.ts.map +1 -0
  365. package/dist/host/__tests__/errors.test.js +76 -0
  366. package/dist/host/__tests__/errors.test.js.map +1 -0
  367. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
  368. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
  369. package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
  370. package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
  371. package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
  372. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
  373. package/dist/host/__tests__/pattern-matcher.test.js +251 -0
  374. package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
  375. package/dist/host/__tests__/router.test.d.ts +2 -0
  376. package/dist/host/__tests__/router.test.d.ts.map +1 -0
  377. package/dist/host/__tests__/router.test.js +241 -0
  378. package/dist/host/__tests__/router.test.js.map +1 -0
  379. package/dist/host/__tests__/testing.test.d.ts +2 -0
  380. package/dist/host/__tests__/testing.test.d.ts.map +1 -0
  381. package/dist/host/__tests__/testing.test.js +64 -0
  382. package/dist/host/__tests__/testing.test.js.map +1 -0
  383. package/dist/host/__tests__/utils.test.d.ts +2 -0
  384. package/dist/host/__tests__/utils.test.d.ts.map +1 -0
  385. package/dist/host/__tests__/utils.test.js +29 -0
  386. package/dist/host/__tests__/utils.test.js.map +1 -0
  387. package/dist/host/cookie-handler.d.ts +34 -0
  388. package/dist/host/cookie-handler.d.ts.map +1 -0
  389. package/dist/host/cookie-handler.js +124 -0
  390. package/dist/host/cookie-handler.js.map +1 -0
  391. package/dist/host/errors.d.ts +56 -0
  392. package/dist/host/errors.d.ts.map +1 -0
  393. package/dist/host/errors.js +79 -0
  394. package/dist/host/errors.js.map +1 -0
  395. package/dist/host/index.d.ts +29 -0
  396. package/dist/host/index.d.ts.map +1 -0
  397. package/dist/host/index.js +32 -0
  398. package/dist/host/index.js.map +1 -0
  399. package/dist/host/pattern-matcher.d.ts +36 -0
  400. package/dist/host/pattern-matcher.d.ts.map +1 -0
  401. package/dist/host/pattern-matcher.js +172 -0
  402. package/dist/host/pattern-matcher.js.map +1 -0
  403. package/dist/host/router.d.ts +26 -0
  404. package/dist/host/router.d.ts.map +1 -0
  405. package/dist/host/router.js +218 -0
  406. package/dist/host/router.js.map +1 -0
  407. package/dist/host/testing.d.ts +36 -0
  408. package/dist/host/testing.d.ts.map +1 -0
  409. package/dist/host/testing.js +55 -0
  410. package/dist/host/testing.js.map +1 -0
  411. package/dist/host/types.d.ts +115 -0
  412. package/dist/host/types.d.ts.map +1 -0
  413. package/dist/host/types.js +7 -0
  414. package/dist/host/types.js.map +1 -0
  415. package/dist/host/utils.d.ts +21 -0
  416. package/dist/host/utils.d.ts.map +1 -0
  417. package/dist/host/utils.js +23 -0
  418. package/dist/host/utils.js.map +1 -0
  419. package/dist/href-client.d.ts +131 -0
  420. package/dist/href-client.d.ts.map +1 -0
  421. package/dist/href-client.js +64 -0
  422. package/dist/href-client.js.map +1 -0
  423. package/dist/href-context.d.ts +29 -0
  424. package/dist/href-context.d.ts.map +1 -0
  425. package/dist/href-context.js +21 -0
  426. package/dist/href-context.js.map +1 -0
  427. package/dist/index.d.ts +73 -0
  428. package/dist/index.d.ts.map +1 -0
  429. package/dist/index.js +91 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.rsc.d.ts +32 -0
  432. package/dist/index.rsc.d.ts.map +1 -0
  433. package/dist/index.rsc.js +40 -0
  434. package/dist/index.rsc.js.map +1 -0
  435. package/dist/internal-debug.d.ts +2 -0
  436. package/dist/internal-debug.d.ts.map +1 -0
  437. package/dist/internal-debug.js +5 -0
  438. package/dist/internal-debug.js.map +1 -0
  439. package/dist/loader.d.ts +14 -0
  440. package/dist/loader.d.ts.map +1 -0
  441. package/dist/loader.js +20 -0
  442. package/dist/loader.js.map +1 -0
  443. package/dist/loader.rsc.d.ts +19 -0
  444. package/dist/loader.rsc.d.ts.map +1 -0
  445. package/dist/loader.rsc.js +99 -0
  446. package/dist/loader.rsc.js.map +1 -0
  447. package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/testing/vitest.js +82 -0
  712. package/dist/theme/ThemeProvider.d.ts +20 -0
  713. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  714. package/dist/theme/ThemeProvider.js +240 -0
  715. package/dist/theme/ThemeProvider.js.map +1 -0
  716. package/dist/theme/ThemeScript.d.ts +48 -0
  717. package/dist/theme/ThemeScript.d.ts.map +1 -0
  718. package/dist/theme/ThemeScript.js +13 -0
  719. package/dist/theme/ThemeScript.js.map +1 -0
  720. package/dist/theme/__tests__/theme.test.d.ts +2 -0
  721. package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
  722. package/dist/theme/__tests__/theme.test.js +103 -0
  723. package/dist/theme/__tests__/theme.test.js.map +1 -0
  724. package/dist/theme/constants.d.ts +29 -0
  725. package/dist/theme/constants.d.ts.map +1 -0
  726. package/dist/theme/constants.js +48 -0
  727. package/dist/theme/constants.js.map +1 -0
  728. package/dist/theme/index.d.ts +31 -0
  729. package/dist/theme/index.d.ts.map +1 -0
  730. package/dist/theme/index.js +36 -0
  731. package/dist/theme/index.js.map +1 -0
  732. package/dist/theme/theme-context.d.ts +40 -0
  733. package/dist/theme/theme-context.d.ts.map +1 -0
  734. package/dist/theme/theme-context.js +60 -0
  735. package/dist/theme/theme-context.js.map +1 -0
  736. package/dist/theme/theme-script.d.ts +27 -0
  737. package/dist/theme/theme-script.d.ts.map +1 -0
  738. package/dist/theme/theme-script.js +147 -0
  739. package/dist/theme/theme-script.js.map +1 -0
  740. package/dist/theme/types.d.ts +163 -0
  741. package/dist/theme/types.d.ts.map +1 -0
  742. package/dist/theme/types.js +11 -0
  743. package/dist/theme/types.js.map +1 -0
  744. package/dist/theme/use-theme.d.ts +12 -0
  745. package/dist/theme/use-theme.d.ts.map +1 -0
  746. package/dist/theme/use-theme.js +40 -0
  747. package/dist/theme/use-theme.js.map +1 -0
  748. package/dist/types.d.ts +1479 -0
  749. package/dist/types.d.ts.map +1 -0
  750. package/dist/types.js +10 -0
  751. package/dist/types.js.map +1 -0
  752. package/dist/urls.d.ts +441 -0
  753. package/dist/urls.d.ts.map +1 -0
  754. package/dist/urls.gen.d.ts +8 -0
  755. package/dist/urls.gen.d.ts.map +1 -0
  756. package/dist/urls.gen.js +8 -0
  757. package/dist/urls.gen.js.map +1 -0
  758. package/dist/urls.js +443 -0
  759. package/dist/urls.js.map +1 -0
  760. package/dist/use-loader.d.ts +127 -0
  761. package/dist/use-loader.d.ts.map +1 -0
  762. package/dist/use-loader.js +237 -0
  763. package/dist/use-loader.js.map +1 -0
  764. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
  765. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
  766. package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
  767. package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
  768. package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
  769. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
  770. package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
  771. package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
  772. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
  773. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
  774. package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
  775. package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
  776. package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
  777. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
  778. package/dist/vite/__tests__/expose-router-id.test.js +39 -0
  779. package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
  780. package/dist/vite/ast-handler-extract.d.ts +49 -0
  781. package/dist/vite/ast-handler-extract.d.ts.map +1 -0
  782. package/dist/vite/ast-handler-extract.js +249 -0
  783. package/dist/vite/ast-handler-extract.js.map +1 -0
  784. package/dist/vite/expose-action-id.d.ts +19 -0
  785. package/dist/vite/expose-action-id.d.ts.map +1 -0
  786. package/dist/vite/expose-action-id.js +250 -0
  787. package/dist/vite/expose-action-id.js.map +1 -0
  788. package/dist/vite/expose-id-utils.d.ts +69 -0
  789. package/dist/vite/expose-id-utils.d.ts.map +1 -0
  790. package/dist/vite/expose-id-utils.js +289 -0
  791. package/dist/vite/expose-id-utils.js.map +1 -0
  792. package/dist/vite/expose-internal-ids.d.ts +22 -0
  793. package/dist/vite/expose-internal-ids.d.ts.map +1 -0
  794. package/dist/vite/expose-internal-ids.js +886 -0
  795. package/dist/vite/expose-internal-ids.js.map +1 -0
  796. package/dist/vite/index.d.ts +149 -0
  797. package/dist/vite/index.d.ts.map +1 -0
  798. package/dist/vite/index.js +2011 -783
  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/virtual-entries.d.ts +25 -0
  807. package/dist/vite/virtual-entries.d.ts.map +1 -0
  808. package/dist/vite/virtual-entries.js +110 -0
  809. package/dist/vite/virtual-entries.js.map +1 -0
  810. package/package.json +67 -15
  811. package/skills/api-client/SKILL.md +211 -0
  812. package/skills/breadcrumbs/SKILL.md +61 -1
  813. package/skills/bundle-analysis/SKILL.md +159 -0
  814. package/skills/cache-guide/SKILL.md +224 -32
  815. package/skills/caching/SKILL.md +279 -17
  816. package/skills/composability/SKILL.md +27 -3
  817. package/skills/css/SKILL.md +76 -0
  818. package/skills/debug-manifest/SKILL.md +4 -2
  819. package/skills/document-cache/SKILL.md +78 -55
  820. package/skills/handler-use/SKILL.md +11 -9
  821. package/skills/hooks/SKILL.md +240 -28
  822. package/skills/host-router/SKILL.md +83 -23
  823. package/skills/i18n/SKILL.md +276 -0
  824. package/skills/intercept/SKILL.md +68 -19
  825. package/skills/layout/SKILL.md +13 -9
  826. package/skills/links/SKILL.md +175 -17
  827. package/skills/loader/SKILL.md +217 -24
  828. package/skills/middleware/SKILL.md +18 -10
  829. package/skills/migrate-nextjs/SKILL.md +43 -19
  830. package/skills/migrate-react-router/SKILL.md +8 -2
  831. package/skills/mime-routes/SKILL.md +28 -1
  832. package/skills/observability/SKILL.md +172 -0
  833. package/skills/parallel/SKILL.md +18 -7
  834. package/skills/prerender/SKILL.md +65 -60
  835. package/skills/rango/SKILL.md +251 -24
  836. package/skills/react-compiler/SKILL.md +168 -0
  837. package/skills/response-routes/SKILL.md +115 -48
  838. package/skills/route/SKILL.md +46 -5
  839. package/skills/router-setup/SKILL.md +30 -8
  840. package/skills/scripts/SKILL.md +179 -0
  841. package/skills/server-actions/SKILL.md +775 -0
  842. package/skills/tailwind/SKILL.md +27 -3
  843. package/skills/testing/SKILL.md +130 -0
  844. package/skills/testing/bindings.md +103 -0
  845. package/skills/testing/cache-prerender.md +127 -0
  846. package/skills/testing/client-components.md +124 -0
  847. package/skills/testing/e2e-parity.md +125 -0
  848. package/skills/testing/flight.md +91 -0
  849. package/skills/testing/handles.md +129 -0
  850. package/skills/testing/loader.md +128 -0
  851. package/skills/testing/middleware.md +99 -0
  852. package/skills/testing/render-handler.md +122 -0
  853. package/skills/testing/response-routes.md +95 -0
  854. package/skills/testing/reverse-and-types.md +84 -0
  855. package/skills/testing/server-actions.md +107 -0
  856. package/skills/testing/server-tree.md +128 -0
  857. package/skills/testing/setup.md +123 -0
  858. package/skills/typesafety/SKILL.md +319 -28
  859. package/skills/use-cache/SKILL.md +57 -14
  860. package/skills/view-transitions/SKILL.md +337 -0
  861. package/src/__augment-tests__/augment.ts +81 -0
  862. package/src/__augment-tests__/augmented.check.ts +116 -0
  863. package/src/__internal.ts +0 -65
  864. package/src/browser/action-coordinator.ts +53 -36
  865. package/src/browser/action-fence.ts +47 -0
  866. package/src/browser/app-shell.ts +14 -27
  867. package/src/browser/connection-warmup.ts +134 -0
  868. package/src/browser/cookie-name.ts +140 -0
  869. package/src/browser/event-controller.ts +192 -150
  870. package/src/browser/history-state.ts +21 -0
  871. package/src/browser/index.ts +3 -3
  872. package/src/browser/invalidate-client-cache.ts +52 -0
  873. package/src/browser/navigation-bridge.ts +95 -75
  874. package/src/browser/navigation-client.ts +110 -84
  875. package/src/browser/navigation-store-handle.ts +38 -0
  876. package/src/browser/navigation-store.ts +114 -90
  877. package/src/browser/navigation-transaction.ts +9 -59
  878. package/src/browser/network-error-handler.ts +34 -7
  879. package/src/browser/partial-update.ts +147 -147
  880. package/src/browser/prefetch/cache.ts +107 -72
  881. package/src/browser/prefetch/fetch.ts +204 -34
  882. package/src/browser/prefetch/queue.ts +6 -3
  883. package/src/browser/rango-state.ts +157 -115
  884. package/src/browser/react/Link.tsx +30 -7
  885. package/src/browser/react/NavigationProvider.tsx +272 -142
  886. package/src/browser/react/ScrollRestoration.tsx +10 -6
  887. package/src/browser/react/deferred-handle-resolution.ts +75 -0
  888. package/src/browser/react/filter-segment-order.ts +66 -7
  889. package/src/browser/react/index.ts +0 -48
  890. package/src/browser/react/location-state-shared.ts +178 -8
  891. package/src/browser/react/location-state.ts +39 -14
  892. package/src/browser/react/use-action.ts +6 -15
  893. package/src/browser/react/use-handle.ts +17 -14
  894. package/src/browser/react/use-href.tsx +8 -1
  895. package/src/browser/react/use-link-status.ts +33 -8
  896. package/src/browser/react/use-navigation.ts +10 -5
  897. package/src/browser/react/use-params.ts +11 -11
  898. package/src/browser/react/use-reverse.ts +106 -0
  899. package/src/browser/react/use-router.ts +20 -5
  900. package/src/browser/react/use-search-params.ts +0 -5
  901. package/src/browser/react/use-segments.ts +11 -21
  902. package/src/browser/response-adapter.ts +99 -8
  903. package/src/browser/rsc-router.tsx +73 -34
  904. package/src/browser/scroll-restoration.ts +30 -17
  905. package/src/browser/segment-structure-assert.ts +2 -2
  906. package/src/browser/server-action-bridge.ts +214 -55
  907. package/src/browser/types.ts +80 -22
  908. package/src/browser/validate-redirect-origin.ts +43 -16
  909. package/src/build/collect-fallback-refs.ts +107 -0
  910. package/src/build/generate-manifest.ts +60 -35
  911. package/src/build/generate-route-types.ts +2 -1
  912. package/src/build/index.ts +8 -2
  913. package/src/build/prefix-tree-utils.ts +123 -0
  914. package/src/build/route-trie.ts +117 -14
  915. package/src/build/route-types/ast-route-extraction.ts +15 -8
  916. package/src/build/route-types/codegen.ts +16 -5
  917. package/src/build/route-types/include-resolution.ts +117 -23
  918. package/src/build/route-types/param-extraction.ts +6 -3
  919. package/src/build/route-types/per-module-writer.ts +22 -6
  920. package/src/build/route-types/router-processing.ts +55 -28
  921. package/src/build/route-types/scan-filter.ts +1 -1
  922. package/src/build/route-types/source-scan.ts +216 -0
  923. package/src/build/runtime-discovery.ts +9 -20
  924. package/src/cache/cache-error.ts +104 -0
  925. package/src/cache/cache-key-utils.ts +29 -13
  926. package/src/cache/cache-policy.ts +108 -34
  927. package/src/cache/cache-runtime.ts +224 -41
  928. package/src/cache/cache-scope.ts +188 -82
  929. package/src/cache/cache-tag.ts +103 -0
  930. package/src/cache/cf/cf-base64.ts +33 -0
  931. package/src/cache/cf/cf-cache-constants.ts +127 -0
  932. package/src/cache/cf/cf-cache-store.ts +1990 -377
  933. package/src/cache/cf/cf-cache-types.ts +349 -0
  934. package/src/cache/cf/cf-kv-utils.ts +46 -0
  935. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  936. package/src/cache/cf/index.ts +6 -16
  937. package/src/cache/document-cache.ts +89 -21
  938. package/src/cache/handle-snapshot.ts +70 -0
  939. package/src/cache/index.ts +10 -20
  940. package/src/cache/memory-segment-store.ts +136 -37
  941. package/src/cache/profile-registry.ts +46 -31
  942. package/src/cache/read-through-swr.ts +56 -12
  943. package/src/cache/segment-codec.ts +9 -17
  944. package/src/cache/tag-invalidation.ts +230 -0
  945. package/src/cache/types.ts +37 -100
  946. package/src/client.rsc.tsx +44 -21
  947. package/src/client.tsx +36 -61
  948. package/src/cloudflare/index.ts +11 -0
  949. package/src/cloudflare/tracing.ts +109 -0
  950. package/src/component-utils.ts +19 -0
  951. package/src/components/DefaultDocument.tsx +8 -2
  952. package/src/context-var.ts +18 -6
  953. package/src/decode-loader-results.ts +52 -0
  954. package/src/defer.ts +196 -0
  955. package/src/deps/ssr.ts +0 -1
  956. package/src/encode-kv.ts +49 -0
  957. package/src/errors.ts +30 -4
  958. package/src/escape-script.ts +52 -0
  959. package/src/handle.ts +31 -23
  960. package/src/handles/MetaTags.tsx +62 -19
  961. package/src/handles/Scripts.tsx +183 -0
  962. package/src/handles/breadcrumbs.ts +37 -8
  963. package/src/handles/is-thenable.ts +19 -0
  964. package/src/handles/meta.ts +51 -40
  965. package/src/handles/script.ts +244 -0
  966. package/src/host/cookie-handler.ts +9 -60
  967. package/src/host/errors.ts +0 -24
  968. package/src/host/index.ts +8 -2
  969. package/src/host/pattern-matcher.ts +23 -52
  970. package/src/host/router.ts +107 -99
  971. package/src/host/testing.ts +40 -27
  972. package/src/host/types.ts +37 -4
  973. package/src/host/utils.ts +1 -1
  974. package/src/href-client.ts +137 -22
  975. package/src/index.rsc.ts +93 -12
  976. package/src/index.ts +91 -14
  977. package/src/internal-debug.ts +11 -10
  978. package/src/loader-store.ts +500 -0
  979. package/src/loader.rsc.ts +20 -13
  980. package/src/loader.ts +12 -11
  981. package/src/missing-id-error.ts +68 -0
  982. package/src/outlet-provider.tsx +1 -5
  983. package/src/prerender/param-hash.ts +16 -16
  984. package/src/prerender/store.ts +32 -37
  985. package/src/prerender.ts +61 -6
  986. package/src/redirect-origin.ts +100 -0
  987. package/src/regex-escape.ts +8 -0
  988. package/src/render-error-thrower.tsx +20 -0
  989. package/src/response-utils.ts +34 -0
  990. package/src/reverse.ts +65 -40
  991. package/src/root-error-boundary.tsx +1 -19
  992. package/src/route-content-wrapper.tsx +19 -77
  993. package/src/route-definition/dsl-helpers.ts +293 -311
  994. package/src/route-definition/helper-factories.ts +28 -140
  995. package/src/route-definition/helpers-types.ts +82 -55
  996. package/src/route-definition/index.ts +1 -2
  997. package/src/route-definition/redirect.ts +44 -11
  998. package/src/route-definition/resolve-handler-use.ts +6 -1
  999. package/src/route-definition/use-item-types.ts +29 -0
  1000. package/src/route-map-builder.ts +0 -16
  1001. package/src/route-types.ts +19 -46
  1002. package/src/router/basename.ts +14 -0
  1003. package/src/router/content-negotiation.ts +73 -25
  1004. package/src/router/error-handling.ts +45 -18
  1005. package/src/router/find-match.ts +44 -23
  1006. package/src/router/handler-context.ts +10 -42
  1007. package/src/router/instrument.ts +350 -0
  1008. package/src/router/intercept-resolution.ts +39 -20
  1009. package/src/router/lazy-includes.ts +9 -46
  1010. package/src/router/loader-resolution.ts +152 -72
  1011. package/src/router/logging.ts +0 -6
  1012. package/src/router/manifest.ts +18 -29
  1013. package/src/router/match-api.ts +6 -21
  1014. package/src/router/match-context.ts +0 -22
  1015. package/src/router/match-handlers.ts +58 -58
  1016. package/src/router/match-middleware/background-revalidation.ts +40 -24
  1017. package/src/router/match-middleware/cache-lookup.ts +159 -285
  1018. package/src/router/match-middleware/cache-store.ts +64 -52
  1019. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  1020. package/src/router/match-middleware/segment-resolution.ts +0 -22
  1021. package/src/router/match-pipelines.ts +1 -42
  1022. package/src/router/match-result.ts +44 -74
  1023. package/src/router/metrics.ts +0 -34
  1024. package/src/router/middleware-types.ts +5 -112
  1025. package/src/router/middleware.ts +237 -165
  1026. package/src/router/navigation-snapshot.ts +0 -51
  1027. package/src/router/params-util.ts +23 -0
  1028. package/src/router/pattern-matching.ts +85 -94
  1029. package/src/router/prefetch-cache-ttl.ts +51 -0
  1030. package/src/router/prerender-match.ts +104 -65
  1031. package/src/router/preview-match.ts +3 -1
  1032. package/src/router/request-classification.ts +28 -62
  1033. package/src/router/revalidation.ts +123 -73
  1034. package/src/router/route-snapshot.ts +0 -1
  1035. package/src/router/router-context.ts +3 -28
  1036. package/src/router/router-interfaces.ts +83 -35
  1037. package/src/router/router-options.ts +136 -5
  1038. package/src/router/router-registry.ts +2 -5
  1039. package/src/router/segment-resolution/fresh.ts +97 -84
  1040. package/src/router/segment-resolution/helpers.ts +86 -6
  1041. package/src/router/segment-resolution/loader-cache.ts +76 -39
  1042. package/src/router/segment-resolution/revalidation.ts +272 -320
  1043. package/src/router/segment-resolution/static-store.ts +19 -5
  1044. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1045. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  1046. package/src/router/segment-resolution.ts +5 -1
  1047. package/src/router/segment-wrappers.ts +6 -5
  1048. package/src/router/state-cookie-name.ts +33 -0
  1049. package/src/router/substitute-pattern-params.ts +56 -0
  1050. package/src/router/telemetry-otel.ts +161 -199
  1051. package/src/router/telemetry.ts +96 -19
  1052. package/src/router/timeout.ts +0 -20
  1053. package/src/router/tracing.ts +206 -0
  1054. package/src/router/trie-matching.ts +162 -64
  1055. package/src/router/types.ts +9 -63
  1056. package/src/router/url-params.ts +0 -5
  1057. package/src/router.ts +109 -53
  1058. package/src/rsc/handler-context.ts +3 -2
  1059. package/src/rsc/handler.ts +262 -219
  1060. package/src/rsc/helpers.ts +100 -6
  1061. package/src/rsc/index.ts +2 -5
  1062. package/src/rsc/json-route-result.ts +38 -0
  1063. package/src/rsc/loader-fetch.ts +114 -38
  1064. package/src/rsc/manifest-init.ts +28 -41
  1065. package/src/rsc/origin-guard.ts +39 -25
  1066. package/src/rsc/progressive-enhancement.ts +117 -11
  1067. package/src/rsc/redirect-guard.ts +99 -0
  1068. package/src/rsc/response-cache-serve.ts +238 -0
  1069. package/src/rsc/response-error.ts +79 -12
  1070. package/src/rsc/response-route-handler.ts +85 -188
  1071. package/src/rsc/rsc-rendering.ts +98 -76
  1072. package/src/rsc/runtime-warnings.ts +23 -10
  1073. package/src/rsc/server-action.ts +281 -117
  1074. package/src/rsc/ssr-setup.ts +16 -0
  1075. package/src/rsc/transition-gate.ts +89 -0
  1076. package/src/rsc/types.ts +23 -5
  1077. package/src/runtime-env.ts +18 -0
  1078. package/src/search-params.ts +35 -30
  1079. package/src/segment-loader-promise.ts +31 -4
  1080. package/src/segment-system.tsx +227 -143
  1081. package/src/serialize.ts +243 -0
  1082. package/src/server/context.ts +163 -51
  1083. package/src/server/cookie-parse.ts +32 -0
  1084. package/src/server/cookie-store.ts +80 -5
  1085. package/src/server/handle-store.ts +21 -38
  1086. package/src/server/loader-registry.ts +33 -42
  1087. package/src/server/request-context.ts +277 -136
  1088. package/src/ssr/index.tsx +21 -16
  1089. package/src/static-handler.ts +10 -13
  1090. package/src/testing/cache-status.ts +162 -0
  1091. package/src/testing/collect-handle.ts +40 -0
  1092. package/src/testing/dispatch.ts +701 -0
  1093. package/src/testing/dom.entry.ts +22 -0
  1094. package/src/testing/e2e/fixture.ts +188 -0
  1095. package/src/testing/e2e/index.ts +128 -0
  1096. package/src/testing/e2e/matchers.ts +35 -0
  1097. package/src/testing/e2e/page-helpers.ts +272 -0
  1098. package/src/testing/e2e/parity.ts +387 -0
  1099. package/src/testing/e2e/server.ts +195 -0
  1100. package/src/testing/flight-matchers.ts +97 -0
  1101. package/src/testing/flight-normalize.ts +11 -0
  1102. package/src/testing/flight-runtime.d.ts +57 -0
  1103. package/src/testing/flight-tree.ts +682 -0
  1104. package/src/testing/flight.entry.ts +52 -0
  1105. package/src/testing/flight.ts +257 -0
  1106. package/src/testing/generated-routes.ts +183 -0
  1107. package/src/testing/index.ts +105 -0
  1108. package/src/testing/internal/context.ts +371 -0
  1109. package/src/testing/internal/flight-client-globals.ts +30 -0
  1110. package/src/testing/internal/seed-vars.ts +54 -0
  1111. package/src/testing/render-handler.ts +357 -0
  1112. package/src/testing/render-route.tsx +581 -0
  1113. package/src/testing/run-loader.ts +385 -0
  1114. package/src/testing/run-middleware.ts +205 -0
  1115. package/src/testing/run-transition-when.ts +164 -0
  1116. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1117. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1118. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1119. package/src/testing/vitest-stubs/version.ts +5 -0
  1120. package/src/testing/vitest.ts +305 -0
  1121. package/src/theme/ThemeProvider.tsx +20 -58
  1122. package/src/theme/ThemeScript.tsx +7 -9
  1123. package/src/theme/constants.ts +52 -13
  1124. package/src/theme/index.ts +0 -7
  1125. package/src/theme/theme-context.ts +1 -5
  1126. package/src/theme/theme-script.ts +22 -21
  1127. package/src/theme/use-theme.ts +0 -3
  1128. package/src/types/boundaries.ts +0 -35
  1129. package/src/types/cache-types.ts +13 -4
  1130. package/src/types/error-types.ts +30 -90
  1131. package/src/types/global-namespace.ts +54 -41
  1132. package/src/types/handler-context.ts +108 -28
  1133. package/src/types/index.ts +3 -10
  1134. package/src/types/loader-types.ts +6 -3
  1135. package/src/types/request-scope.ts +8 -22
  1136. package/src/types/route-config.ts +6 -50
  1137. package/src/types/route-entry.ts +0 -6
  1138. package/src/types/segments.ts +135 -14
  1139. package/src/urls/include-helper.ts +9 -56
  1140. package/src/urls/index.ts +1 -11
  1141. package/src/urls/path-helper-types.ts +29 -12
  1142. package/src/urls/path-helper.ts +17 -106
  1143. package/src/urls/pattern-types.ts +36 -19
  1144. package/src/urls/response-types.ts +20 -19
  1145. package/src/urls/type-extraction.ts +58 -139
  1146. package/src/urls/urls-function.ts +1 -19
  1147. package/src/use-loader.tsx +292 -107
  1148. package/src/vite/debug.ts +58 -13
  1149. package/src/vite/discovery/bundle-postprocess.ts +8 -7
  1150. package/src/vite/discovery/discover-routers.ts +97 -84
  1151. package/src/vite/discovery/discovery-errors.ts +194 -0
  1152. package/src/vite/discovery/gate-state.ts +171 -0
  1153. package/src/vite/discovery/prerender-collection.ts +50 -69
  1154. package/src/vite/discovery/route-types-writer.ts +40 -84
  1155. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  1156. package/src/vite/discovery/state.ts +44 -0
  1157. package/src/vite/discovery/virtual-module-codegen.ts +14 -34
  1158. package/src/vite/index.ts +2 -0
  1159. package/src/vite/inject-client-debug.ts +36 -0
  1160. package/src/vite/plugin-types.ts +126 -8
  1161. package/src/vite/plugins/cjs-to-esm.ts +14 -28
  1162. package/src/vite/plugins/client-ref-dedup.ts +5 -21
  1163. package/src/vite/plugins/client-ref-hashing.ts +14 -13
  1164. package/src/vite/plugins/cloudflare-protocol-stub.ts +1 -21
  1165. package/src/vite/plugins/expose-action-id.ts +6 -77
  1166. package/src/vite/plugins/expose-id-utils.ts +88 -55
  1167. package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
  1168. package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
  1169. package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
  1170. package/src/vite/plugins/expose-ids/router-transform.ts +100 -28
  1171. package/src/vite/plugins/expose-internal-ids.ts +59 -70
  1172. package/src/vite/plugins/performance-tracks.ts +11 -18
  1173. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1174. package/src/vite/plugins/use-cache-transform.ts +28 -52
  1175. package/src/vite/plugins/version-injector.ts +40 -29
  1176. package/src/vite/plugins/version-plugin.ts +37 -40
  1177. package/src/vite/plugins/virtual-entries.ts +39 -25
  1178. package/src/vite/rango.ts +62 -106
  1179. package/src/vite/router-discovery.ts +591 -122
  1180. package/src/vite/utils/ast-handler-extract.ts +26 -35
  1181. package/src/vite/utils/bundle-analysis.ts +10 -15
  1182. package/src/vite/utils/client-chunks.ts +184 -0
  1183. package/src/vite/utils/directive-prologue.ts +40 -0
  1184. package/src/vite/utils/forward-user-plugins.ts +171 -0
  1185. package/src/vite/utils/manifest-utils.ts +4 -59
  1186. package/src/vite/utils/package-resolution.ts +1 -73
  1187. package/src/vite/utils/prerender-utils.ts +54 -39
  1188. package/src/vite/utils/shared-utils.ts +90 -41
  1189. package/src/browser/action-response-classifier.ts +0 -99
  1190. package/src/browser/shallow.ts +0 -40
  1191. package/src/router/middleware-cookies.ts +0 -55
@@ -10,9 +10,24 @@ import {
10
10
  parsePattern,
11
11
  type ParsedSegment,
12
12
  } from "../router/pattern-matching.js";
13
+ import { buildRouteToStaticPrefix } from "./prefix-tree-utils.js";
14
+ import type { FullManifest } from "./generate-manifest.js";
13
15
 
14
16
  // -- Trie data structures (compact keys for JSON serialization) --
15
17
 
18
+ /**
19
+ * A response-type variant folded into a primary leaf's negotiate list. `pa` is
20
+ * the variant's own positional param-name array, carried so the runtime can
21
+ * re-key the matched params under the variant's names when it wins negotiation
22
+ * (the trie match extracts params under the PRIMARY leaf's pa). Omitted when the
23
+ * variant has no params; absent/identical pa means no re-key is needed.
24
+ */
25
+ export interface NegotiateVariant {
26
+ routeKey: string;
27
+ responseType: string;
28
+ pa?: string[];
29
+ }
30
+
16
31
  export interface TrieLeaf {
17
32
  /** Route name (e.g., "site.l1_500") */
18
33
  n: string;
@@ -20,8 +35,6 @@ export interface TrieLeaf {
20
35
  sp: string;
21
36
  /** Ancestry shortCodes from root to route [M0L0, M0L0L0, M0L0L0R499] */
22
37
  a: string[];
23
- /** Optional param names (absent params get empty string value) */
24
- op?: string[];
25
38
  /** Constraint validation: paramName -> allowed values */
26
39
  cv?: Record<string, string[]>;
27
40
  /** Ordered param names for this route (positional) */
@@ -35,7 +48,7 @@ export interface TrieLeaf {
35
48
  /** Response type for non-RSC routes (json, text, image, any) */
36
49
  rt?: string;
37
50
  /** Negotiate variants: response-type routes sharing this path */
38
- nv?: Array<{ routeKey: string; responseType: string }>;
51
+ nv?: NegotiateVariant[];
39
52
  /** RSC-first: RSC route was defined before response-type variants */
40
53
  rf?: true;
41
54
  }
@@ -60,6 +73,9 @@ export interface TrieNode {
60
73
  * @param routeAncestry - Map of route name to ancestry shortCodes
61
74
  * @param routeToStaticPrefix - Map of route name to its entry's staticPrefix
62
75
  * @param routeTrailingSlash - Optional map of route name to trailing slash mode
76
+ * @param prerenderRouteNames - Optional set of prerendered route names (sets leaf.pr)
77
+ * @param passthroughRouteNames - Optional set of passthrough route names (sets leaf.pt)
78
+ * @param responseTypeRoutes - Optional map of route name to response type (sets leaf.rt)
63
79
  */
64
80
  export function buildRouteTrie(
65
81
  routeManifest: Record<string, string>,
@@ -94,9 +110,88 @@ export function buildRouteTrie(
94
110
  });
95
111
  }
96
112
 
113
+ sortSuffixParams(root);
97
114
  return root;
98
115
  }
99
116
 
117
+ /**
118
+ * Sort every node's suffix-param map (`node.xp`) by descending suffix length so
119
+ * the matcher tries the most specific suffix first. Overlapping suffixes like
120
+ * `.min.js` and `.js` must resolve by specificity, not route declaration order:
121
+ * a request for `/app.min.js` should match `:file.min.js`, not `:file.js`.
122
+ *
123
+ * This started as a bug — `walkTrie` iterates `node.xp` in object order and
124
+ * returns the first suffix the segment ends with, so the winner depended on
125
+ * which route was declared first. Sorting at build time fixes it allocation-free
126
+ * on the match hot path: the serialized production trie preserves this key order
127
+ * through JSON.parse, so dev (per-request rebuild) and production match
128
+ * identically. Array.prototype.sort is stable (ES2019+), so equal-length
129
+ * suffixes keep their declaration order — the router's existing tiebreak.
130
+ */
131
+ function sortSuffixParams(node: TrieNode): void {
132
+ if (node.xp) {
133
+ const sorted: Record<string, { n: string; c: TrieNode }> = {};
134
+ for (const suffix of Object.keys(node.xp).sort(
135
+ (a, b) => b.length - a.length,
136
+ )) {
137
+ sorted[suffix] = node.xp[suffix];
138
+ }
139
+ node.xp = sorted;
140
+ for (const child of Object.values(node.xp)) {
141
+ sortSuffixParams(child.c);
142
+ }
143
+ }
144
+ if (node.s) {
145
+ for (const child of Object.values(node.s)) {
146
+ sortSuffixParams(child);
147
+ }
148
+ }
149
+ if (node.p) {
150
+ sortSuffixParams(node.p.c);
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Build a per-router trie from a generated manifest. This is the single
156
+ * construction path shared by build/discovery (discover-routers.ts, serialized
157
+ * into the production chunk) and the dev/HMR runtime rebuild
158
+ * (rsc/manifest-init.ts). Keeping one code path is what guarantees the dev
159
+ * runtime trie and the production serialized trie are byte-for-byte identical
160
+ * (modulo `leaf.a` ancestry, which embeds the mount index and is debug-only).
161
+ *
162
+ * Returns null when the manifest has no route ancestry (no routes), matching
163
+ * the prior guard at both call sites.
164
+ */
165
+ export function buildPerRouterTrie(manifest: FullManifest): TrieNode | null {
166
+ const ancestry = manifest._routeAncestry;
167
+ if (!ancestry || Object.keys(ancestry).length === 0) {
168
+ return null;
169
+ }
170
+
171
+ // Seed every route to the root static prefix (""), then override with each
172
+ // route's include() scope prefix from the prefix tree so the trie returns the
173
+ // correct `sp` for lazy-entry lookup in find-match.
174
+ const routeToStaticPrefix: Record<string, string> = {};
175
+ for (const name of Object.keys(manifest.routeManifest)) {
176
+ routeToStaticPrefix[name] = "";
177
+ }
178
+ if (manifest.prefixTree) {
179
+ buildRouteToStaticPrefix(manifest.prefixTree, routeToStaticPrefix);
180
+ }
181
+
182
+ return buildRouteTrie(
183
+ manifest.routeManifest,
184
+ ancestry,
185
+ routeToStaticPrefix,
186
+ manifest.routeTrailingSlash,
187
+ manifest.prerenderRoutes ? new Set(manifest.prerenderRoutes) : undefined,
188
+ manifest.passthroughRoutes
189
+ ? new Set(manifest.passthroughRoutes)
190
+ : undefined,
191
+ manifest.responseTypeRoutes,
192
+ );
193
+ }
194
+
100
195
  /**
101
196
  * Insert a route into the trie. Optional params expand into two branches at
102
197
  * registration time (skip-first, then present), so each terminal lives at the
@@ -111,18 +206,14 @@ function insertRoute(
111
206
  node: TrieNode,
112
207
  segments: ParsedSegment[],
113
208
  index: number,
114
- leaf: Omit<TrieLeaf, "op" | "cv" | "pa">,
209
+ leaf: Omit<TrieLeaf, "cv" | "pa">,
115
210
  ): void {
116
- // op (full optional list) and cv (full constraint map) are route-level and
117
- // identical on every terminal, so compute them once on the shared base.
118
- const optionalParams: string[] = [];
211
+ // cv (full constraint map) is route-level and identical on every terminal,
212
+ // so compute it once on the shared base.
119
213
  const constraints: Record<string, string[]> = {};
120
214
 
121
215
  for (const seg of segments) {
122
216
  if (seg.type === "param") {
123
- if (seg.optional) {
124
- optionalParams.push(seg.value);
125
- }
126
217
  if (seg.constraint) {
127
218
  constraints[seg.value] = seg.constraint;
128
219
  }
@@ -131,7 +222,6 @@ function insertRoute(
131
222
 
132
223
  const leafBase: Omit<TrieLeaf, "pa"> = {
133
224
  ...leaf,
134
- ...(optionalParams.length > 0 ? { op: optionalParams } : {}),
135
225
  ...(Object.keys(constraints).length > 0 ? { cv: constraints } : {}),
136
226
  };
137
227
 
@@ -180,6 +270,19 @@ export function extractAncestryFromTrie(
180
270
  * appended to the nv (negotiate variants) array.
181
271
  * Multiple response types on the same path are supported (json + text + xml).
182
272
  */
273
+ /**
274
+ * Build a negotiate-variant entry from a leaf being folded into another leaf's
275
+ * nv list. Carries the variant's positional param names (`pa`) so the runtime
276
+ * can re-key matched params under the variant's names; omitted when the variant
277
+ * has none (the common case where primary and variant share the same names is a
278
+ * no-op re-key regardless).
279
+ */
280
+ function toVariant(leaf: TrieLeaf, responseType: string): NegotiateVariant {
281
+ return leaf.pa
282
+ ? { routeKey: leaf.n, responseType, pa: leaf.pa }
283
+ : { routeKey: leaf.n, responseType };
284
+ }
285
+
183
286
  function mergeLeaves(existing: TrieLeaf | undefined, leaf: TrieLeaf): TrieLeaf {
184
287
  if (!existing) return leaf;
185
288
 
@@ -187,7 +290,7 @@ function mergeLeaves(existing: TrieLeaf | undefined, leaf: TrieLeaf): TrieLeaf {
187
290
  // Both are response-type: preserve old as variant
188
291
  const merged = leaf;
189
292
  merged.nv = existing.nv || [];
190
- merged.nv.push({ routeKey: existing.n, responseType: existing.rt });
293
+ merged.nv.push(toVariant(existing, existing.rt));
191
294
  return merged;
192
295
  }
193
296
  if (leaf.rt && !existing.rt) {
@@ -197,7 +300,7 @@ function mergeLeaves(existing: TrieLeaf | undefined, leaf: TrieLeaf): TrieLeaf {
197
300
  existing.nv = [];
198
301
  existing.rf = true;
199
302
  }
200
- existing.nv.push({ routeKey: leaf.n, responseType: leaf.rt });
303
+ existing.nv.push(toVariant(leaf, leaf.rt));
201
304
  return existing;
202
305
  }
203
306
  if (!leaf.rt && existing.rt) {
@@ -205,7 +308,7 @@ function mergeLeaves(existing: TrieLeaf | undefined, leaf: TrieLeaf): TrieLeaf {
205
308
  // RSC was defined second (response-type was already the existing leaf)
206
309
  if (!leaf.nv) leaf.nv = [];
207
310
  if (existing.nv) leaf.nv.push(...existing.nv);
208
- leaf.nv.push({ routeKey: existing.n, responseType: existing.rt });
311
+ leaf.nv.push(toVariant(existing, existing.rt));
209
312
  // rf intentionally not set — RSC came after response-type variants
210
313
  return leaf;
211
314
  }
@@ -15,19 +15,26 @@ import { extractParamsFromPattern } from "./param-extraction.js";
15
15
  * the pattern, name, params, and optional search schema from each.
16
16
  * Skips unnamed paths (no { name: "..." }).
17
17
  */
18
- export function extractRoutesFromSource(code: string): Array<{
18
+ export function extractRoutesFromSource(
19
+ code: string,
20
+ sourceFileArg?: ts.SourceFile,
21
+ ): Array<{
19
22
  name: string;
20
23
  pattern: string;
21
24
  params?: Record<string, string>;
22
25
  search?: Record<string, string>;
23
26
  }> {
24
- const sourceFile = ts.createSourceFile(
25
- "input.tsx",
26
- code,
27
- ts.ScriptTarget.Latest,
28
- true,
29
- ts.ScriptKind.TSX,
30
- );
27
+ // Reuse a caller-provided SourceFile (parsed once per scan) when given;
28
+ // otherwise parse the block here. The walk does not mutate the tree.
29
+ const sourceFile =
30
+ sourceFileArg ??
31
+ ts.createSourceFile(
32
+ "input.tsx",
33
+ code,
34
+ ts.ScriptTarget.Latest,
35
+ true,
36
+ ts.ScriptKind.TSX,
37
+ );
31
38
  const routes: Array<{
32
39
  name: string;
33
40
  pattern: string;
@@ -23,7 +23,7 @@ export function generatePerModuleTypesSource(
23
23
  const valid = routes.filter(({ name }) => {
24
24
  if (!name || /["'\\`\n\r]/.test(name)) {
25
25
  console.warn(
26
- `[rsc-router] Skipping route with invalid name: ${JSON.stringify(name)}`,
26
+ `[rango] Skipping route with invalid name: ${JSON.stringify(name)}`,
27
27
  );
28
28
  return false;
29
29
  }
@@ -42,7 +42,7 @@ export function generatePerModuleTypesSource(
42
42
  for (const { name, pattern, params, search } of valid) {
43
43
  if (deduped.has(name)) {
44
44
  console.warn(
45
- `[rsc-router] Duplicate route name "${name}" — keeping first definition`,
45
+ `[rango] Duplicate route name "${name}" — keeping first definition`,
46
46
  );
47
47
  continue;
48
48
  }
@@ -59,7 +59,7 @@ export function generatePerModuleTypesSource(
59
59
  }
60
60
 
61
61
  /**
62
- * Generates a .ts file that augments RSCRouter.GeneratedRouteMap
62
+ * Generates a .ts file that augments Rango.GeneratedRouteMap
63
63
  * with route name -> pattern mappings. This enables Handler<"routeName">
64
64
  * without circular references since the file has no imports from the app.
65
65
  */
@@ -88,14 +88,25 @@ export function generateRouteTypesSource(
88
88
  })
89
89
  .join("\n");
90
90
 
91
+ // The global augmentation extends an alias of `typeof NamedRoutes` rather than
92
+ // `Readonly<typeof NamedRoutes>`. `as const` already makes the members readonly,
93
+ // so the two are behaviour-identical, but `Readonly<>` is a homomorphic mapped
94
+ // type the compiler instantiates once per route at the augmentation site
95
+ // (~4 instantiations/route). An interface `extends` clause cannot name a bare
96
+ // `typeof` query, so the alias is what lets us drop the wrapper. Measured: ~35%
97
+ // fewer type instantiations on a 14k-route app; negligible (but free) on small.
91
98
  return `// Auto-generated by @rangojs/router - do not edit
92
99
  export const NamedRoutes = {
93
100
  ${objectBody}
94
101
  } as const;
95
102
 
103
+ // Aliased so the augmentation below does not pay a homomorphic mapped-type
104
+ // instantiation per route; \`as const\` already makes the members readonly.
105
+ type NamedRoutesShape = typeof NamedRoutes;
106
+
96
107
  declare global {
97
- namespace RSCRouter {
98
- interface GeneratedRouteMap extends Readonly<typeof NamedRoutes> {}
108
+ namespace Rango {
109
+ interface GeneratedRouteMap extends NamedRoutesShape {}
99
110
  }
100
111
  }
101
112
  `;
@@ -22,6 +22,61 @@ export interface UnresolvableInclude {
22
22
  detail: string;
23
23
  }
24
24
 
25
+ // ---------------------------------------------------------------------------
26
+ // Per-scan memo
27
+ // ---------------------------------------------------------------------------
28
+
29
+ /**
30
+ * Per-scan memo shared across the include-resolution recursion. Keys are
31
+ * absolute file paths; values cache the readFileSync result and the
32
+ * ts.SourceFile parsed from the FULL file source. A separate blockSources map
33
+ * caches parses of extracted sub-blocks (urls() call text), keyed by the exact
34
+ * block string, so the two extractors (routes + includes) for the same block
35
+ * share a single parse.
36
+ *
37
+ * The memo is purely a performance accelerator: same input -> same parse, so
38
+ * generated output is identical to the un-memoized path. A fresh memo is
39
+ * created per top-level scan entry, so stale file edits between scans are never
40
+ * served.
41
+ */
42
+ export interface ScanMemo {
43
+ files: Map<string, string>;
44
+ blockSourceFiles: Map<string, ts.SourceFile>;
45
+ }
46
+
47
+ export function createScanMemo(): ScanMemo {
48
+ return { files: new Map(), blockSourceFiles: new Map() };
49
+ }
50
+
51
+ function parseBlock(memo: ScanMemo | undefined, block: string): ts.SourceFile {
52
+ if (memo) {
53
+ const cached = memo.blockSourceFiles.get(block);
54
+ if (cached) return cached;
55
+ }
56
+ const sf = ts.createSourceFile(
57
+ "input.tsx",
58
+ block,
59
+ ts.ScriptTarget.Latest,
60
+ true,
61
+ ts.ScriptKind.TSX,
62
+ );
63
+ if (memo) memo.blockSourceFiles.set(block, sf);
64
+ return sf;
65
+ }
66
+
67
+ function readSourceMemoized(
68
+ memo: ScanMemo | undefined,
69
+ realPath: string,
70
+ ): string {
71
+ if (memo) {
72
+ const cached = memo.files.get(realPath);
73
+ if (cached !== undefined) return cached;
74
+ }
75
+ const source = readFileSync(realPath, "utf-8");
76
+ if (memo) memo.files.set(realPath, source);
77
+ return source;
78
+ }
79
+
25
80
  // ---------------------------------------------------------------------------
26
81
  // AST-based include() parsing
27
82
  // ---------------------------------------------------------------------------
@@ -47,7 +102,10 @@ function extractNamePrefixFromInclude(node: ts.CallExpression): string | null {
47
102
  * Returns both resolved includes (identifier second args) and unresolvable
48
103
  * includes (factory calls, etc.) with reasons.
49
104
  */
50
- export function extractIncludesWithDiagnostics(code: string): {
105
+ export function extractIncludesWithDiagnostics(
106
+ code: string,
107
+ sourceFileArg?: ts.SourceFile,
108
+ ): {
51
109
  resolved: Array<{
52
110
  pathPrefix: string;
53
111
  variableName: string;
@@ -60,13 +118,16 @@ export function extractIncludesWithDiagnostics(code: string): {
60
118
  detail: string;
61
119
  }>;
62
120
  } {
63
- const sourceFile = ts.createSourceFile(
64
- "input.tsx",
65
- code,
66
- ts.ScriptTarget.Latest,
67
- true,
68
- ts.ScriptKind.TSX,
69
- );
121
+ // Reuse a caller-provided SourceFile (parsed once per scan) when given.
122
+ const sourceFile =
123
+ sourceFileArg ??
124
+ ts.createSourceFile(
125
+ "input.tsx",
126
+ code,
127
+ ts.ScriptTarget.Latest,
128
+ true,
129
+ ts.ScriptKind.TSX,
130
+ );
70
131
  const resolved: Array<{
71
132
  pathPrefix: string;
72
133
  variableName: string;
@@ -140,7 +201,13 @@ export function resolveImportedVariable(
140
201
  code: string,
141
202
  localName: string,
142
203
  ): { specifier: string; exportedName: string } | null {
143
- const importRegex = /import\s*\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;
204
+ // Allow an optional leading default binding before the named-import brace so
205
+ // a combined `import Foo, { bar } from "..."` is matched (the named members
206
+ // are the only part we resolve; the default binding is skipped). Without the
207
+ // optional `(?:[\w$]+\s*,\s*)?` segment, the `Foo, ` prefix breaks the match
208
+ // and a legitimate static named import surfaces as `unresolvable-import`.
209
+ const importRegex =
210
+ /import\s*(?:[\w$]+\s*,\s*)?\{([^}]+)\}\s*from\s*["']([^"']+)["']/g;
144
211
  let match;
145
212
 
146
213
  while ((match = importRegex.exec(code)) !== null) {
@@ -206,14 +273,18 @@ export function resolveImportPath(
206
273
  function extractUrlsBlockForVariable(
207
274
  code: string,
208
275
  varName: string,
276
+ sourceFileArg?: ts.SourceFile,
209
277
  ): string | null {
210
- const sourceFile = ts.createSourceFile(
211
- "input.tsx",
212
- code,
213
- ts.ScriptTarget.Latest,
214
- true,
215
- ts.ScriptKind.TSX,
216
- );
278
+ // Reuse a caller-provided full-source SourceFile (parsed once per scan).
279
+ const sourceFile =
280
+ sourceFileArg ??
281
+ ts.createSourceFile(
282
+ "input.tsx",
283
+ code,
284
+ ts.ScriptTarget.Latest,
285
+ true,
286
+ ts.ScriptKind.TSX,
287
+ );
217
288
  let result: string | null = null;
218
289
 
219
290
  function visit(node: ts.Node) {
@@ -249,11 +320,15 @@ function buildRouteMapFromBlock(
249
320
  visited: Set<string>,
250
321
  searchSchemasOut?: Record<string, Record<string, string>>,
251
322
  diagnosticsOut?: UnresolvableInclude[],
323
+ memo?: ScanMemo,
252
324
  ): Record<string, string> {
253
325
  const routeMap: Record<string, string> = {};
254
326
 
327
+ // Parse the block once and share the SourceFile between both extractors.
328
+ const blockSourceFile = parseBlock(memo, block);
329
+
255
330
  // Extract local path() routes
256
- const localRoutes = extractRoutesFromSource(block);
331
+ const localRoutes = extractRoutesFromSource(block, blockSourceFile);
257
332
  for (const { name, pattern, search } of localRoutes) {
258
333
  routeMap[name] = pattern;
259
334
  if (search && searchSchemasOut) {
@@ -262,8 +337,10 @@ function buildRouteMapFromBlock(
262
337
  }
263
338
 
264
339
  // Extract include() calls with diagnostics for unresolvable ones
265
- const { resolved: includes, unresolvable } =
266
- extractIncludesWithDiagnostics(block);
340
+ const { resolved: includes, unresolvable } = extractIncludesWithDiagnostics(
341
+ block,
342
+ blockSourceFile,
343
+ );
267
344
 
268
345
  if (diagnosticsOut) {
269
346
  for (const entry of unresolvable) {
@@ -298,12 +375,17 @@ function buildRouteMapFromBlock(
298
375
  imported.exportedName,
299
376
  visited,
300
377
  diagnosticsOut,
378
+ undefined,
379
+ memo,
301
380
  );
302
381
  } else {
303
- // Check if variable exists as a same-file urls() definition
382
+ // Check if variable exists as a same-file urls() definition. Share the
383
+ // full-source SourceFile parse via the memo (block === fullSource hits the
384
+ // same cache entry already used above).
304
385
  const sameFileBlock = extractUrlsBlockForVariable(
305
386
  fullSource,
306
387
  variableName,
388
+ parseBlock(memo, fullSource),
307
389
  );
308
390
  if (!sameFileBlock) {
309
391
  if (diagnosticsOut) {
@@ -322,6 +404,8 @@ function buildRouteMapFromBlock(
322
404
  variableName,
323
405
  visited,
324
406
  diagnosticsOut,
407
+ undefined,
408
+ memo,
325
409
  );
326
410
  }
327
411
 
@@ -361,6 +445,9 @@ function buildRouteMapFromBlock(
361
445
  * @param inlineBlock - Optional pre-extracted code block (e.g. from an inline
362
446
  * builder function). When provided, variableName is ignored and the block
363
447
  * is parsed directly for path()/include() calls.
448
+ * @param memo - Per-scan readFileSync/parse memo. A fresh one is created at the
449
+ * top-level entry and threaded through the recursion so each file is read and
450
+ * parsed once per scan. Behavior-preserving (same input -> same output).
364
451
  */
365
452
  export function buildCombinedRouteMapWithSearch(
366
453
  filePath: string,
@@ -368,22 +455,24 @@ export function buildCombinedRouteMapWithSearch(
368
455
  visited?: Set<string>,
369
456
  diagnosticsOut?: UnresolvableInclude[],
370
457
  inlineBlock?: string,
458
+ memo?: ScanMemo,
371
459
  ): {
372
460
  routes: Record<string, string>;
373
461
  searchSchemas: Record<string, Record<string, string>>;
374
462
  } {
375
463
  visited = visited ?? new Set();
464
+ memo = memo ?? createScanMemo();
376
465
  const realPath = resolve(filePath);
377
466
  const key = variableName ? `${realPath}:${variableName}` : realPath;
378
467
  if (visited.has(key)) {
379
- console.warn(`[rsc-router] Circular include detected, skipping: ${key}`);
468
+ console.warn(`[rango] Circular include detected, skipping: ${key}`);
380
469
  return { routes: {}, searchSchemas: {} };
381
470
  }
382
471
  visited.add(key);
383
472
 
384
473
  let source: string;
385
474
  try {
386
- source = readFileSync(realPath, "utf-8");
475
+ source = readSourceMemoized(memo, realPath);
387
476
  } catch {
388
477
  return { routes: {}, searchSchemas: {} };
389
478
  }
@@ -392,7 +481,11 @@ export function buildCombinedRouteMapWithSearch(
392
481
  if (inlineBlock) {
393
482
  block = inlineBlock;
394
483
  } else if (variableName) {
395
- const extracted = extractUrlsBlockForVariable(source, variableName);
484
+ const extracted = extractUrlsBlockForVariable(
485
+ source,
486
+ variableName,
487
+ parseBlock(memo, source),
488
+ );
396
489
  if (!extracted) return { routes: {}, searchSchemas: {} };
397
490
  block = extracted;
398
491
  } else {
@@ -407,6 +500,7 @@ export function buildCombinedRouteMapWithSearch(
407
500
  visited,
408
501
  searchSchemas,
409
502
  diagnosticsOut,
503
+ memo,
410
504
  );
411
505
 
412
506
  // Remove from visited so sibling branches can include the same variable
@@ -37,12 +37,15 @@ export function formatRouteEntry(
37
37
  ): string {
38
38
  const hasSearch = search && Object.keys(search).length > 0;
39
39
 
40
+ // JSON.stringify the pattern and search values so backslashes and quotes in a
41
+ // route pattern (e.g. a custom regex constraint) survive interpolation into
42
+ // both the type-level string and the runtime NamedRoutes value.
40
43
  if (!hasSearch) {
41
- return ` ${key}: "${pattern}",`;
44
+ return ` ${key}: ${JSON.stringify(pattern)},`;
42
45
  }
43
46
 
44
47
  const searchBody = Object.entries(search!)
45
- .map(([k, v]) => `${k}: "${v}"`)
48
+ .map(([k, v]) => `${k}: ${JSON.stringify(v)}`)
46
49
  .join(", ");
47
- return ` ${key}: { path: "${pattern}", search: { ${searchBody} } },`;
50
+ return ` ${key}: { path: ${JSON.stringify(pattern)}, search: { ${searchBody} } },`;
48
51
  }
@@ -3,7 +3,10 @@ import ts from "typescript";
3
3
  import { extractParamsFromPattern } from "./param-extraction.js";
4
4
  import { extractRoutesFromSource } from "./ast-route-extraction.js";
5
5
  import { generatePerModuleTypesSource } from "./codegen.js";
6
- import { buildCombinedRouteMapWithSearch } from "./include-resolution.js";
6
+ import {
7
+ buildCombinedRouteMapWithSearch,
8
+ createScanMemo,
9
+ } from "./include-resolution.js";
7
10
  import type { ScanFilter } from "./scan-filter.js";
8
11
  import { findTsFiles } from "./scan-filter.js";
9
12
 
@@ -78,10 +81,20 @@ export function writePerModuleRouteTypesForFile(filePath: string): void {
78
81
  if (varNames.length > 0) {
79
82
  // Follow includes recursively via the combined route map builder.
80
83
  // The visited set in buildCombinedRouteMapWithSearch prevents infinite loops.
84
+ // Share one per-file scan memo across all urls() variables so a shared
85
+ // include target is read+parsed once for this file, not once per variable.
81
86
  routes = [];
87
+ const memo = createScanMemo();
82
88
  for (const varName of varNames) {
83
89
  const { routes: routeMap, searchSchemas } =
84
- buildCombinedRouteMapWithSearch(filePath, varName);
90
+ buildCombinedRouteMapWithSearch(
91
+ filePath,
92
+ varName,
93
+ undefined,
94
+ undefined,
95
+ undefined,
96
+ memo,
97
+ );
85
98
  for (const [name, pattern] of Object.entries(routeMap)) {
86
99
  const params = extractParamsFromPattern(pattern);
87
100
  routes.push({
@@ -97,7 +110,10 @@ export function writePerModuleRouteTypesForFile(filePath: string): void {
97
110
  routes = extractRoutesFromSource(source);
98
111
  }
99
112
 
100
- const genPath = filePath.replace(/\.(tsx?)$/, ".gen.ts");
113
+ // Match .ts/.tsx/.js/.jsx (same as router-processing.ts / router-transform.ts).
114
+ // Without the jsx? branch a .jsx/.js source produced genPath === filePath,
115
+ // overwriting the source file instead of writing a sibling .gen.ts.
116
+ const genPath = filePath.replace(/\.(tsx?|jsx?)$/, ".gen.ts");
101
117
 
102
118
  // When a urls() variable was found but static resolution yields zero
103
119
  // routes, write an empty placeholder so generated imports stay
@@ -106,7 +122,7 @@ export function writePerModuleRouteTypesForFile(filePath: string): void {
106
122
  if (varNames.length > 0 && !existsSync(genPath)) {
107
123
  writeFileSync(genPath, generatePerModuleTypesSource([]));
108
124
  console.log(
109
- `[rsc-router] Generated route types (placeholder) -> ${genPath}`,
125
+ `[rango] Generated route types (placeholder) -> ${genPath}`,
110
126
  );
111
127
  }
112
128
  return;
@@ -118,11 +134,11 @@ export function writePerModuleRouteTypesForFile(filePath: string): void {
118
134
  : null;
119
135
  if (existing !== genSource) {
120
136
  writeFileSync(genPath, genSource);
121
- console.log(`[rsc-router] Generated route types -> ${genPath}`);
137
+ console.log(`[rango] Generated route types -> ${genPath}`);
122
138
  }
123
139
  } catch (err) {
124
140
  console.warn(
125
- `[rsc-router] Failed to generate route types for ${filePath}: ${(err as Error).message}`,
141
+ `[rango] Failed to generate route types for ${filePath}: ${(err as Error).message}`,
126
142
  );
127
143
  }
128
144
  }