@rangojs/router 0.0.0-experimental.e16b7c00 → 0.0.0-experimental.e9c0b2f2

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 (1155) hide show
  1. package/AGENTS.md +8 -0
  2. package/README.md +64 -6
  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 +195 -52
  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/dist/network-error-thrower.d.ts +17 -0
  448. package/dist/network-error-thrower.d.ts.map +1 -0
  449. package/dist/network-error-thrower.js +14 -0
  450. package/dist/network-error-thrower.js.map +1 -0
  451. package/dist/outlet-context.d.ts +13 -0
  452. package/dist/outlet-context.d.ts.map +1 -0
  453. package/dist/outlet-context.js +3 -0
  454. package/dist/outlet-context.js.map +1 -0
  455. package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
  456. package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
  457. package/dist/prerender/__tests__/param-hash.test.js +148 -0
  458. package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
  459. package/dist/prerender/param-hash.d.ts +16 -0
  460. package/dist/prerender/param-hash.d.ts.map +1 -0
  461. package/dist/prerender/param-hash.js +36 -0
  462. package/dist/prerender/param-hash.js.map +1 -0
  463. package/dist/prerender/store.d.ts +38 -0
  464. package/dist/prerender/store.d.ts.map +1 -0
  465. package/dist/prerender/store.js +61 -0
  466. package/dist/prerender/store.js.map +1 -0
  467. package/dist/prerender.d.ts +66 -0
  468. package/dist/prerender.d.ts.map +1 -0
  469. package/dist/prerender.js +57 -0
  470. package/dist/prerender.js.map +1 -0
  471. package/dist/reverse.d.ts +196 -0
  472. package/dist/reverse.d.ts.map +1 -0
  473. package/dist/reverse.js +78 -0
  474. package/dist/reverse.js.map +1 -0
  475. package/dist/root-error-boundary.d.ts +33 -0
  476. package/dist/root-error-boundary.d.ts.map +1 -0
  477. package/dist/root-error-boundary.js +165 -0
  478. package/dist/root-error-boundary.js.map +1 -0
  479. package/dist/route-content-wrapper.d.ts +46 -0
  480. package/dist/route-content-wrapper.d.ts.map +1 -0
  481. package/dist/route-content-wrapper.js +77 -0
  482. package/dist/route-content-wrapper.js.map +1 -0
  483. package/dist/route-definition.d.ts +421 -0
  484. package/dist/route-definition.d.ts.map +1 -0
  485. package/dist/route-definition.js +868 -0
  486. package/dist/route-definition.js.map +1 -0
  487. package/dist/route-map-builder.d.ts +155 -0
  488. package/dist/route-map-builder.d.ts.map +1 -0
  489. package/dist/route-map-builder.js +237 -0
  490. package/dist/route-map-builder.js.map +1 -0
  491. package/dist/route-types.d.ts +165 -0
  492. package/dist/route-types.d.ts.map +1 -0
  493. package/dist/route-types.js +7 -0
  494. package/dist/route-types.js.map +1 -0
  495. package/dist/router/__tests__/handler-context.test.d.ts +2 -0
  496. package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
  497. package/dist/router/__tests__/handler-context.test.js +65 -0
  498. package/dist/router/__tests__/handler-context.test.js.map +1 -0
  499. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
  500. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
  501. package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
  502. package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
  503. package/dist/router/__tests__/match-context.test.d.ts +2 -0
  504. package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
  505. package/dist/router/__tests__/match-context.test.js +92 -0
  506. package/dist/router/__tests__/match-context.test.js.map +1 -0
  507. package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
  508. package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
  509. package/dist/router/__tests__/match-pipelines.test.js +417 -0
  510. package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
  511. package/dist/router/__tests__/match-result.test.d.ts +2 -0
  512. package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
  513. package/dist/router/__tests__/match-result.test.js +457 -0
  514. package/dist/router/__tests__/match-result.test.js.map +1 -0
  515. package/dist/router/__tests__/on-error.test.d.ts +2 -0
  516. package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
  517. package/dist/router/__tests__/on-error.test.js +678 -0
  518. package/dist/router/__tests__/on-error.test.js.map +1 -0
  519. package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
  520. package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
  521. package/dist/router/__tests__/pattern-matching.test.js +629 -0
  522. package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
  523. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
  524. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
  525. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
  526. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
  527. package/dist/router/error-handling.d.ts +77 -0
  528. package/dist/router/error-handling.d.ts.map +1 -0
  529. package/dist/router/error-handling.js +202 -0
  530. package/dist/router/error-handling.js.map +1 -0
  531. package/dist/router/handler-context.d.ts +20 -0
  532. package/dist/router/handler-context.d.ts.map +1 -0
  533. package/dist/router/handler-context.js +198 -0
  534. package/dist/router/handler-context.js.map +1 -0
  535. package/dist/router/intercept-resolution.d.ts +66 -0
  536. package/dist/router/intercept-resolution.d.ts.map +1 -0
  537. package/dist/router/intercept-resolution.js +246 -0
  538. package/dist/router/intercept-resolution.js.map +1 -0
  539. package/dist/router/loader-resolution.d.ts +64 -0
  540. package/dist/router/loader-resolution.d.ts.map +1 -0
  541. package/dist/router/loader-resolution.js +284 -0
  542. package/dist/router/loader-resolution.js.map +1 -0
  543. package/dist/router/logging.d.ts +15 -0
  544. package/dist/router/logging.d.ts.map +1 -0
  545. package/dist/router/logging.js +99 -0
  546. package/dist/router/logging.js.map +1 -0
  547. package/dist/router/manifest.d.ts +22 -0
  548. package/dist/router/manifest.d.ts.map +1 -0
  549. package/dist/router/manifest.js +181 -0
  550. package/dist/router/manifest.js.map +1 -0
  551. package/dist/router/match-api.d.ts +35 -0
  552. package/dist/router/match-api.d.ts.map +1 -0
  553. package/dist/router/match-api.js +406 -0
  554. package/dist/router/match-api.js.map +1 -0
  555. package/dist/router/match-context.d.ts +206 -0
  556. package/dist/router/match-context.d.ts.map +1 -0
  557. package/dist/router/match-context.js +17 -0
  558. package/dist/router/match-context.js.map +1 -0
  559. package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
  560. package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
  561. package/dist/router/match-middleware/background-revalidation.js +75 -0
  562. package/dist/router/match-middleware/background-revalidation.js.map +1 -0
  563. package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
  564. package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
  565. package/dist/router/match-middleware/cache-lookup.js +257 -0
  566. package/dist/router/match-middleware/cache-lookup.js.map +1 -0
  567. package/dist/router/match-middleware/cache-store.d.ts +113 -0
  568. package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
  569. package/dist/router/match-middleware/cache-store.js +108 -0
  570. package/dist/router/match-middleware/cache-store.js.map +1 -0
  571. package/dist/router/match-middleware/index.d.ts +81 -0
  572. package/dist/router/match-middleware/index.d.ts.map +1 -0
  573. package/dist/router/match-middleware/index.js +80 -0
  574. package/dist/router/match-middleware/index.js.map +1 -0
  575. package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
  576. package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
  577. package/dist/router/match-middleware/intercept-resolution.js +134 -0
  578. package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
  579. package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
  580. package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
  581. package/dist/router/match-middleware/segment-resolution.js +53 -0
  582. package/dist/router/match-middleware/segment-resolution.js.map +1 -0
  583. package/dist/router/match-pipelines.d.ts +147 -0
  584. package/dist/router/match-pipelines.d.ts.map +1 -0
  585. package/dist/router/match-pipelines.js +82 -0
  586. package/dist/router/match-pipelines.js.map +1 -0
  587. package/dist/router/match-result.d.ts +126 -0
  588. package/dist/router/match-result.d.ts.map +1 -0
  589. package/dist/router/match-result.js +93 -0
  590. package/dist/router/match-result.js.map +1 -0
  591. package/dist/router/metrics.d.ts +20 -0
  592. package/dist/router/metrics.d.ts.map +1 -0
  593. package/dist/router/metrics.js +47 -0
  594. package/dist/router/metrics.js.map +1 -0
  595. package/dist/router/middleware.d.ts +249 -0
  596. package/dist/router/middleware.d.ts.map +1 -0
  597. package/dist/router/middleware.js +434 -0
  598. package/dist/router/middleware.js.map +1 -0
  599. package/dist/router/middleware.test.d.ts +2 -0
  600. package/dist/router/middleware.test.d.ts.map +1 -0
  601. package/dist/router/middleware.test.js +816 -0
  602. package/dist/router/middleware.test.js.map +1 -0
  603. package/dist/router/pattern-matching.d.ts +149 -0
  604. package/dist/router/pattern-matching.d.ts.map +1 -0
  605. package/dist/router/pattern-matching.js +349 -0
  606. package/dist/router/pattern-matching.js.map +1 -0
  607. package/dist/router/revalidation.d.ts +44 -0
  608. package/dist/router/revalidation.d.ts.map +1 -0
  609. package/dist/router/revalidation.js +147 -0
  610. package/dist/router/revalidation.js.map +1 -0
  611. package/dist/router/router-context.d.ts +135 -0
  612. package/dist/router/router-context.d.ts.map +1 -0
  613. package/dist/router/router-context.js +36 -0
  614. package/dist/router/router-context.js.map +1 -0
  615. package/dist/router/segment-resolution.d.ts +127 -0
  616. package/dist/router/segment-resolution.d.ts.map +1 -0
  617. package/dist/router/segment-resolution.js +919 -0
  618. package/dist/router/segment-resolution.js.map +1 -0
  619. package/dist/router/trie-matching.d.ts +40 -0
  620. package/dist/router/trie-matching.d.ts.map +1 -0
  621. package/dist/router/trie-matching.js +127 -0
  622. package/dist/router/trie-matching.js.map +1 -0
  623. package/dist/router/types.d.ts +136 -0
  624. package/dist/router/types.d.ts.map +1 -0
  625. package/dist/router/types.js +7 -0
  626. package/dist/router/types.js.map +1 -0
  627. package/dist/router.d.ts +753 -0
  628. package/dist/router.d.ts.map +1 -0
  629. package/dist/router.gen.d.ts +6 -0
  630. package/dist/router.gen.d.ts.map +1 -0
  631. package/dist/router.gen.js +6 -0
  632. package/dist/router.gen.js.map +1 -0
  633. package/dist/router.js +1304 -0
  634. package/dist/router.js.map +1 -0
  635. package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
  636. package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
  637. package/dist/rsc/__tests__/helpers.test.js +140 -0
  638. package/dist/rsc/__tests__/helpers.test.js.map +1 -0
  639. package/dist/rsc/handler.d.ts +45 -0
  640. package/dist/rsc/handler.d.ts.map +1 -0
  641. package/dist/rsc/handler.js +1172 -0
  642. package/dist/rsc/handler.js.map +1 -0
  643. package/dist/rsc/helpers.d.ts +16 -0
  644. package/dist/rsc/helpers.d.ts.map +1 -0
  645. package/dist/rsc/helpers.js +55 -0
  646. package/dist/rsc/helpers.js.map +1 -0
  647. package/dist/rsc/index.d.ts +22 -0
  648. package/dist/rsc/index.d.ts.map +1 -0
  649. package/dist/rsc/index.js +23 -0
  650. package/dist/rsc/index.js.map +1 -0
  651. package/dist/rsc/nonce.d.ts +9 -0
  652. package/dist/rsc/nonce.d.ts.map +1 -0
  653. package/dist/rsc/nonce.js +18 -0
  654. package/dist/rsc/nonce.js.map +1 -0
  655. package/dist/rsc/types.d.ts +206 -0
  656. package/dist/rsc/types.d.ts.map +1 -0
  657. package/dist/rsc/types.js +8 -0
  658. package/dist/rsc/types.js.map +1 -0
  659. package/dist/search-params.d.ts +103 -0
  660. package/dist/search-params.d.ts.map +1 -0
  661. package/dist/search-params.js +74 -0
  662. package/dist/search-params.js.map +1 -0
  663. package/dist/segment-system.d.ts +75 -0
  664. package/dist/segment-system.d.ts.map +1 -0
  665. package/dist/segment-system.js +336 -0
  666. package/dist/segment-system.js.map +1 -0
  667. package/dist/server/context.d.ts +245 -0
  668. package/dist/server/context.d.ts.map +1 -0
  669. package/dist/server/context.js +197 -0
  670. package/dist/server/context.js.map +1 -0
  671. package/dist/server/fetchable-loader-store.d.ts +18 -0
  672. package/dist/server/fetchable-loader-store.d.ts.map +1 -0
  673. package/dist/server/fetchable-loader-store.js +18 -0
  674. package/dist/server/fetchable-loader-store.js.map +1 -0
  675. package/dist/server/handle-store.d.ts +85 -0
  676. package/dist/server/handle-store.d.ts.map +1 -0
  677. package/dist/server/handle-store.js +142 -0
  678. package/dist/server/handle-store.js.map +1 -0
  679. package/dist/server/loader-registry.d.ts +55 -0
  680. package/dist/server/loader-registry.d.ts.map +1 -0
  681. package/dist/server/loader-registry.js +132 -0
  682. package/dist/server/loader-registry.js.map +1 -0
  683. package/dist/server/request-context.d.ts +226 -0
  684. package/dist/server/request-context.d.ts.map +1 -0
  685. package/dist/server/request-context.js +290 -0
  686. package/dist/server/request-context.js.map +1 -0
  687. package/dist/server/root-layout.d.ts +4 -0
  688. package/dist/server/root-layout.d.ts.map +1 -0
  689. package/dist/server/root-layout.js +5 -0
  690. package/dist/server/root-layout.js.map +1 -0
  691. package/dist/server.d.ts +15 -0
  692. package/dist/server.d.ts.map +1 -0
  693. package/dist/server.js +20 -0
  694. package/dist/server.js.map +1 -0
  695. package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
  696. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
  697. package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
  698. package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
  699. package/dist/ssr/index.d.ts +98 -0
  700. package/dist/ssr/index.d.ts.map +1 -0
  701. package/dist/ssr/index.js +158 -0
  702. package/dist/ssr/index.js.map +1 -0
  703. package/dist/static-handler.d.ts +50 -0
  704. package/dist/static-handler.d.ts.map +1 -0
  705. package/dist/static-handler.gen.d.ts +5 -0
  706. package/dist/static-handler.gen.d.ts.map +1 -0
  707. package/dist/static-handler.gen.js +5 -0
  708. package/dist/static-handler.gen.js.map +1 -0
  709. package/dist/static-handler.js +29 -0
  710. package/dist/static-handler.js.map +1 -0
  711. package/dist/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 +1165 -310
  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 +71 -7
  811. package/skills/api-client/SKILL.md +211 -0
  812. package/skills/breadcrumbs/SKILL.md +61 -1
  813. package/skills/bundle-analysis/SKILL.md +2 -2
  814. package/skills/cache-guide/SKILL.md +2 -2
  815. package/skills/caching/SKILL.md +92 -10
  816. package/skills/css/SKILL.md +76 -0
  817. package/skills/debug-manifest/SKILL.md +4 -2
  818. package/skills/document-cache/SKILL.md +2 -2
  819. package/skills/handler-use/SKILL.md +1 -1
  820. package/skills/hooks/SKILL.md +40 -29
  821. package/skills/host-router/SKILL.md +80 -3
  822. package/skills/intercept/SKILL.md +5 -3
  823. package/skills/layout/SKILL.md +11 -6
  824. package/skills/loader/SKILL.md +25 -19
  825. package/skills/middleware/SKILL.md +4 -2
  826. package/skills/migrate-nextjs/SKILL.md +3 -1
  827. package/skills/migrate-react-router/SKILL.md +4 -2
  828. package/skills/mime-routes/SKILL.md +2 -2
  829. package/skills/observability/SKILL.md +61 -4
  830. package/skills/parallel/SKILL.md +9 -4
  831. package/skills/prerender/SKILL.md +31 -10
  832. package/skills/rango/SKILL.md +31 -10
  833. package/skills/response-routes/SKILL.md +63 -45
  834. package/skills/route/SKILL.md +14 -2
  835. package/skills/router-setup/SKILL.md +27 -3
  836. package/skills/scripts/SKILL.md +179 -0
  837. package/skills/server-actions/SKILL.md +25 -1
  838. package/skills/tailwind/SKILL.md +27 -3
  839. package/skills/testing/SKILL.md +129 -0
  840. package/skills/testing/bindings.md +103 -0
  841. package/skills/testing/cache-prerender.md +127 -0
  842. package/skills/testing/client-components.md +124 -0
  843. package/skills/testing/e2e-parity.md +125 -0
  844. package/skills/testing/flight.md +91 -0
  845. package/skills/testing/handles.md +129 -0
  846. package/skills/testing/loader.md +128 -0
  847. package/skills/testing/middleware.md +99 -0
  848. package/skills/testing/render-handler.md +121 -0
  849. package/skills/testing/response-routes.md +95 -0
  850. package/skills/testing/reverse-and-types.md +84 -0
  851. package/skills/testing/server-actions.md +107 -0
  852. package/skills/testing/server-tree.md +128 -0
  853. package/skills/testing/setup.md +123 -0
  854. package/skills/typesafety/SKILL.md +6 -5
  855. package/skills/use-cache/SKILL.md +10 -9
  856. package/skills/vercel/SKILL.md +128 -0
  857. package/src/__augment-tests__/augmented.check.ts +2 -3
  858. package/src/__internal.ts +0 -65
  859. package/src/browser/action-coordinator.ts +1 -1
  860. package/src/browser/action-fence.ts +47 -0
  861. package/src/browser/app-shell.ts +14 -27
  862. package/src/browser/connection-warmup.ts +134 -0
  863. package/src/browser/cookie-name.ts +140 -0
  864. package/src/browser/event-controller.ts +115 -89
  865. package/src/browser/invalidate-client-cache.ts +52 -0
  866. package/src/browser/navigation-bridge.ts +16 -52
  867. package/src/browser/navigation-client.ts +84 -69
  868. package/src/browser/navigation-store-handle.ts +38 -0
  869. package/src/browser/navigation-store.ts +25 -74
  870. package/src/browser/navigation-transaction.ts +0 -32
  871. package/src/browser/partial-update.ts +81 -127
  872. package/src/browser/prefetch/cache.ts +99 -72
  873. package/src/browser/prefetch/fetch.ts +176 -34
  874. package/src/browser/prefetch/queue.ts +6 -3
  875. package/src/browser/rango-state.ts +157 -115
  876. package/src/browser/react/Link.tsx +30 -7
  877. package/src/browser/react/NavigationProvider.tsx +32 -95
  878. package/src/browser/react/ScrollRestoration.tsx +10 -6
  879. package/src/browser/react/filter-segment-order.ts +17 -2
  880. package/src/browser/react/index.ts +0 -51
  881. package/src/browser/react/location-state-shared.ts +14 -15
  882. package/src/browser/react/location-state.ts +0 -1
  883. package/src/browser/react/use-action.ts +6 -15
  884. package/src/browser/react/use-handle.ts +0 -5
  885. package/src/browser/react/use-href.tsx +8 -1
  886. package/src/browser/react/use-link-status.ts +33 -8
  887. package/src/browser/react/use-navigation.ts +10 -5
  888. package/src/browser/react/use-params.ts +0 -2
  889. package/src/browser/react/use-router.ts +6 -4
  890. package/src/browser/react/use-search-params.ts +0 -5
  891. package/src/browser/react/use-segments.ts +0 -13
  892. package/src/browser/response-adapter.ts +41 -4
  893. package/src/browser/rsc-router.tsx +43 -18
  894. package/src/browser/scroll-restoration.ts +8 -3
  895. package/src/browser/server-action-bridge.ts +194 -28
  896. package/src/browser/types.ts +40 -21
  897. package/src/browser/validate-redirect-origin.ts +43 -16
  898. package/src/build/generate-route-types.ts +1 -1
  899. package/src/build/index.ts +8 -4
  900. package/src/build/prefix-tree-utils.ts +123 -0
  901. package/src/build/route-trie.ts +117 -15
  902. package/src/build/route-types/ast-route-extraction.ts +15 -8
  903. package/src/build/route-types/codegen.ts +12 -1
  904. package/src/build/route-types/include-resolution.ts +116 -22
  905. package/src/build/route-types/param-extraction.ts +6 -3
  906. package/src/build/route-types/per-module-writer.ts +15 -2
  907. package/src/build/route-types/router-processing.ts +77 -41
  908. package/src/build/route-types/source-scan.ts +105 -7
  909. package/src/cache/cache-key-utils.ts +29 -13
  910. package/src/cache/cache-policy.ts +42 -62
  911. package/src/cache/cache-runtime.ts +126 -30
  912. package/src/cache/cache-scope.ts +118 -43
  913. package/src/cache/cache-tag.ts +7 -39
  914. package/src/cache/cf/cf-base64.ts +33 -0
  915. package/src/cache/cf/cf-cache-constants.ts +127 -0
  916. package/src/cache/cf/cf-cache-store.ts +1257 -537
  917. package/src/cache/cf/cf-cache-types.ts +349 -0
  918. package/src/cache/cf/cf-kv-utils.ts +46 -0
  919. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  920. package/src/cache/cf/index.ts +6 -19
  921. package/src/cache/document-cache.ts +32 -32
  922. package/src/cache/handle-snapshot.ts +70 -0
  923. package/src/cache/index.ts +20 -24
  924. package/src/cache/memory-segment-store.ts +3 -48
  925. package/src/cache/profile-registry.ts +31 -31
  926. package/src/cache/read-through-swr.ts +41 -11
  927. package/src/cache/segment-codec.ts +9 -17
  928. package/src/cache/tag-invalidation.ts +29 -5
  929. package/src/cache/types.ts +14 -104
  930. package/src/cache/vercel/index.ts +11 -0
  931. package/src/cache/vercel/vercel-cache-store.ts +855 -0
  932. package/src/client.rsc.tsx +42 -22
  933. package/src/client.tsx +31 -58
  934. package/src/cloudflare/index.ts +11 -0
  935. package/src/cloudflare/tracing.ts +109 -0
  936. package/src/component-utils.ts +19 -0
  937. package/src/components/DefaultDocument.tsx +8 -2
  938. package/src/context-var.ts +13 -1
  939. package/src/decode-loader-results.ts +18 -2
  940. package/src/defer.ts +196 -0
  941. package/src/deps/ssr.ts +0 -1
  942. package/src/encode-kv.ts +49 -0
  943. package/src/errors.ts +0 -3
  944. package/src/escape-script.ts +52 -0
  945. package/src/handle.ts +28 -18
  946. package/src/handles/MetaTags.tsx +56 -19
  947. package/src/handles/Scripts.tsx +183 -0
  948. package/src/handles/breadcrumbs.ts +37 -8
  949. package/src/handles/is-thenable.ts +19 -0
  950. package/src/handles/meta.ts +51 -40
  951. package/src/handles/script.ts +244 -0
  952. package/src/host/cookie-handler.ts +9 -60
  953. package/src/host/errors.ts +0 -24
  954. package/src/host/index.ts +6 -0
  955. package/src/host/pattern-matcher.ts +23 -52
  956. package/src/host/router.ts +1 -65
  957. package/src/host/testing.ts +40 -27
  958. package/src/host/types.ts +6 -2
  959. package/src/href-client.ts +7 -12
  960. package/src/index.rsc.ts +75 -8
  961. package/src/index.ts +60 -4
  962. package/src/internal-debug.ts +2 -4
  963. package/src/loader.rsc.ts +19 -9
  964. package/src/loader.ts +12 -4
  965. package/src/network-error-thrower.tsx +1 -6
  966. package/src/outlet-provider.tsx +1 -5
  967. package/src/prerender/param-hash.ts +16 -16
  968. package/src/prerender/store.ts +32 -37
  969. package/src/prerender.ts +58 -3
  970. package/src/redirect-origin.ts +100 -0
  971. package/src/regex-escape.ts +8 -0
  972. package/src/response-utils.ts +25 -0
  973. package/src/root-error-boundary.tsx +1 -19
  974. package/src/route-content-wrapper.tsx +1 -44
  975. package/src/route-definition/dsl-helpers.ts +39 -21
  976. package/src/route-definition/helpers-types.ts +3 -3
  977. package/src/route-definition/redirect.ts +44 -11
  978. package/src/route-definition/resolve-handler-use.ts +6 -0
  979. package/src/route-map-builder.ts +0 -16
  980. package/src/router/basename.ts +14 -0
  981. package/src/router/content-negotiation.ts +58 -23
  982. package/src/router/error-handling.ts +44 -17
  983. package/src/router/find-match.ts +44 -23
  984. package/src/router/handler-context.ts +6 -1
  985. package/src/router/instrument.ts +350 -0
  986. package/src/router/intercept-resolution.ts +35 -2
  987. package/src/router/lazy-includes.ts +7 -44
  988. package/src/router/loader-resolution.ts +139 -73
  989. package/src/router/logging.ts +0 -6
  990. package/src/router/manifest.ts +18 -29
  991. package/src/router/match-api.ts +0 -20
  992. package/src/router/match-context.ts +0 -22
  993. package/src/router/match-handlers.ts +57 -58
  994. package/src/router/match-middleware/background-revalidation.ts +6 -7
  995. package/src/router/match-middleware/cache-lookup.ts +115 -194
  996. package/src/router/match-middleware/cache-store.ts +28 -32
  997. package/src/router/match-middleware/intercept-resolution.ts +0 -22
  998. package/src/router/match-middleware/segment-resolution.ts +0 -22
  999. package/src/router/match-pipelines.ts +1 -42
  1000. package/src/router/match-result.ts +1 -52
  1001. package/src/router/metrics.ts +0 -34
  1002. package/src/router/middleware-types.ts +0 -116
  1003. package/src/router/middleware.ts +175 -90
  1004. package/src/router/navigation-snapshot.ts +0 -51
  1005. package/src/router/params-util.ts +23 -0
  1006. package/src/router/pattern-matching.ts +47 -89
  1007. package/src/router/prefetch-cache-ttl.ts +51 -0
  1008. package/src/router/prerender-match.ts +101 -64
  1009. package/src/router/request-classification.ts +25 -35
  1010. package/src/router/revalidation.ts +75 -81
  1011. package/src/router/route-snapshot.ts +0 -1
  1012. package/src/router/router-context.ts +3 -28
  1013. package/src/router/router-interfaces.ts +38 -7
  1014. package/src/router/router-options.ts +111 -4
  1015. package/src/router/segment-resolution/fresh.ts +66 -78
  1016. package/src/router/segment-resolution/helpers.ts +86 -6
  1017. package/src/router/segment-resolution/loader-cache.ts +57 -23
  1018. package/src/router/segment-resolution/revalidation.ts +212 -304
  1019. package/src/router/segment-resolution/static-store.ts +19 -5
  1020. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  1021. package/src/router/segment-resolution.ts +5 -1
  1022. package/src/router/segment-wrappers.ts +6 -5
  1023. package/src/router/state-cookie-name.ts +33 -0
  1024. package/src/router/telemetry-otel.ts +161 -199
  1025. package/src/router/telemetry.ts +96 -19
  1026. package/src/router/timeout.ts +0 -20
  1027. package/src/router/tracing.ts +206 -0
  1028. package/src/router/trie-matching.ts +163 -64
  1029. package/src/router/types.ts +1 -63
  1030. package/src/router/url-params.ts +0 -5
  1031. package/src/router.ts +87 -37
  1032. package/src/rsc/handler-context.ts +1 -0
  1033. package/src/rsc/handler.ts +232 -153
  1034. package/src/rsc/helpers.ts +97 -4
  1035. package/src/rsc/index.ts +1 -4
  1036. package/src/rsc/json-route-result.ts +38 -0
  1037. package/src/rsc/loader-fetch.ts +114 -38
  1038. package/src/rsc/manifest-init.ts +28 -41
  1039. package/src/rsc/origin-guard.ts +11 -15
  1040. package/src/rsc/progressive-enhancement.ts +59 -9
  1041. package/src/rsc/redirect-guard.ts +99 -0
  1042. package/src/rsc/response-cache-serve.ts +238 -0
  1043. package/src/rsc/response-error.ts +79 -12
  1044. package/src/rsc/response-route-handler.ts +57 -147
  1045. package/src/rsc/rsc-rendering.ts +64 -24
  1046. package/src/rsc/runtime-warnings.ts +14 -0
  1047. package/src/rsc/server-action.ts +244 -81
  1048. package/src/rsc/types.ts +15 -3
  1049. package/src/runtime-env.ts +18 -0
  1050. package/src/search-params.ts +31 -26
  1051. package/src/segment-loader-promise.ts +31 -4
  1052. package/src/segment-system.tsx +89 -89
  1053. package/src/server/context.ts +32 -0
  1054. package/src/server/cookie-parse.ts +32 -0
  1055. package/src/server/cookie-store.ts +52 -1
  1056. package/src/server/handle-store.ts +21 -38
  1057. package/src/server/loader-registry.ts +21 -42
  1058. package/src/server/request-context.ts +189 -131
  1059. package/src/ssr/index.tsx +19 -18
  1060. package/src/static-handler.ts +10 -13
  1061. package/src/testing/cache-status.ts +162 -0
  1062. package/src/testing/collect-handle.ts +40 -0
  1063. package/src/testing/dispatch.ts +701 -0
  1064. package/src/testing/dom.entry.ts +22 -0
  1065. package/src/testing/e2e/fixture.ts +188 -0
  1066. package/src/testing/e2e/index.ts +128 -0
  1067. package/src/testing/e2e/matchers.ts +35 -0
  1068. package/src/testing/e2e/page-helpers.ts +272 -0
  1069. package/src/testing/e2e/parity.ts +387 -0
  1070. package/src/testing/e2e/server.ts +195 -0
  1071. package/src/testing/flight-matchers.ts +97 -0
  1072. package/src/testing/flight-normalize.ts +11 -0
  1073. package/src/testing/flight-runtime.d.ts +57 -0
  1074. package/src/testing/flight-tree.ts +682 -0
  1075. package/src/testing/flight.entry.ts +52 -0
  1076. package/src/testing/flight.ts +257 -0
  1077. package/src/testing/generated-routes.ts +183 -0
  1078. package/src/testing/index.ts +99 -0
  1079. package/src/testing/internal/context.ts +371 -0
  1080. package/src/testing/internal/flight-client-globals.ts +30 -0
  1081. package/src/testing/internal/seed-vars.ts +54 -0
  1082. package/src/testing/render-handler.ts +343 -0
  1083. package/src/testing/render-route.tsx +581 -0
  1084. package/src/testing/run-loader.ts +385 -0
  1085. package/src/testing/run-middleware.ts +205 -0
  1086. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  1087. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  1088. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  1089. package/src/testing/vitest-stubs/version.ts +5 -0
  1090. package/src/testing/vitest.ts +305 -0
  1091. package/src/theme/ThemeProvider.tsx +20 -58
  1092. package/src/theme/ThemeScript.tsx +7 -9
  1093. package/src/theme/constants.ts +52 -13
  1094. package/src/theme/index.ts +0 -7
  1095. package/src/theme/theme-context.ts +1 -5
  1096. package/src/theme/theme-script.ts +22 -21
  1097. package/src/theme/use-theme.ts +0 -3
  1098. package/src/types/boundaries.ts +0 -35
  1099. package/src/types/cache-types.ts +3 -3
  1100. package/src/types/error-types.ts +25 -89
  1101. package/src/types/global-namespace.ts +15 -15
  1102. package/src/types/handler-context.ts +44 -14
  1103. package/src/types/index.ts +0 -10
  1104. package/src/types/loader-types.ts +6 -3
  1105. package/src/types/request-scope.ts +8 -22
  1106. package/src/types/route-config.ts +6 -50
  1107. package/src/types/route-entry.ts +0 -6
  1108. package/src/types/segments.ts +0 -13
  1109. package/src/urls/include-helper.ts +0 -4
  1110. package/src/urls/index.ts +1 -8
  1111. package/src/urls/path-helper-types.ts +8 -2
  1112. package/src/urls/path-helper.ts +0 -54
  1113. package/src/urls/type-extraction.ts +33 -24
  1114. package/src/urls/urls-function.ts +0 -13
  1115. package/src/use-loader.tsx +0 -186
  1116. package/src/vercel/index.ts +11 -0
  1117. package/src/vercel/tracing.ts +88 -0
  1118. package/src/vite/discovery/bundle-postprocess.ts +2 -1
  1119. package/src/vite/discovery/discover-routers.ts +33 -42
  1120. package/src/vite/discovery/prerender-collection.ts +33 -46
  1121. package/src/vite/discovery/state.ts +12 -1
  1122. package/src/vite/discovery/virtual-module-codegen.ts +1 -11
  1123. package/src/vite/index.ts +2 -0
  1124. package/src/vite/plugin-types.ts +143 -10
  1125. package/src/vite/plugins/cjs-to-esm.ts +8 -12
  1126. package/src/vite/plugins/client-ref-dedup.ts +0 -11
  1127. package/src/vite/plugins/client-ref-hashing.ts +0 -10
  1128. package/src/vite/plugins/cloudflare-protocol-stub.ts +0 -20
  1129. package/src/vite/plugins/expose-action-id.ts +2 -73
  1130. package/src/vite/plugins/expose-id-utils.ts +85 -56
  1131. package/src/vite/plugins/expose-ids/export-analysis.ts +30 -43
  1132. package/src/vite/plugins/expose-ids/handler-transform.ts +5 -31
  1133. package/src/vite/plugins/expose-ids/loader-transform.ts +12 -20
  1134. package/src/vite/plugins/expose-ids/router-transform.ts +98 -26
  1135. package/src/vite/plugins/expose-internal-ids.ts +10 -1
  1136. package/src/vite/plugins/performance-tracks.ts +0 -3
  1137. package/src/vite/plugins/refresh-cmd.ts +1 -1
  1138. package/src/vite/plugins/use-cache-transform.ts +21 -46
  1139. package/src/vite/plugins/vercel-output.ts +295 -0
  1140. package/src/vite/plugins/version-injector.ts +0 -20
  1141. package/src/vite/plugins/version-plugin.ts +6 -66
  1142. package/src/vite/plugins/virtual-entries.ts +70 -17
  1143. package/src/vite/rango.ts +135 -134
  1144. package/src/vite/router-discovery.ts +21 -8
  1145. package/src/vite/utils/ast-handler-extract.ts +11 -20
  1146. package/src/vite/utils/bundle-analysis.ts +6 -13
  1147. package/src/vite/utils/client-chunks.ts +0 -6
  1148. package/src/vite/utils/directive-prologue.ts +40 -0
  1149. package/src/vite/utils/forward-user-plugins.ts +0 -22
  1150. package/src/vite/utils/manifest-utils.ts +4 -75
  1151. package/src/vite/utils/package-resolution.ts +1 -73
  1152. package/src/vite/utils/prerender-utils.ts +54 -40
  1153. package/src/vite/utils/shared-utils.ts +8 -37
  1154. package/src/browser/shallow.ts +0 -40
  1155. package/src/router/middleware-cookies.ts +0 -55
@@ -7,9 +7,6 @@ import { createRangoDebugger, createCounter, NS } from "../debug.js";
7
7
 
8
8
  const debug = createRangoDebugger(NS.transform);
9
9
 
10
- /**
11
- * Type for the RSC plugin's manager API
12
- */
13
10
  interface RscPluginManager {
14
11
  serverReferenceMetaMap: Record<
15
12
  string,
@@ -26,14 +23,9 @@ interface RscPluginApi {
26
23
  manager: RscPluginManager;
27
24
  }
28
25
 
29
- /**
30
- * Get the RSC plugin's API from Vite config
31
- */
32
26
  function getRscPluginApi(config: ResolvedConfig): RscPluginApi | undefined {
33
- // Try by name first
34
27
  let plugin = config.plugins.find((p) => p.name === "rsc:minimal");
35
28
 
36
- // Fallback: find by API structure if name lookup fails
37
29
  if (!plugin) {
38
30
  plugin = config.plugins.find(
39
31
  (p) =>
@@ -62,13 +54,11 @@ function getRscPluginApi(config: ResolvedConfig): RscPluginApi | undefined {
62
54
  function isUseServerModule(filePath: string): boolean {
63
55
  try {
64
56
  const content = fs.readFileSync(filePath, "utf-8");
65
- // Remove leading comments and whitespace to find the first meaningful content
66
57
  const trimmed = content
67
- .replace(/^\s*\/\/[^\n]*\n/gm, "") // Remove single-line comments
68
- .replace(/^\s*\/\*[\s\S]*?\*\/\s*/gm, "") // Remove multi-line comments
58
+ .replace(/^\s*\/\/[^\n]*\n/gm, "")
59
+ .replace(/^\s*\/\*[\s\S]*?\*\/\s*/gm, "")
69
60
  .trimStart();
70
61
 
71
- // Check if the file starts with "use server" directive
72
62
  return (
73
63
  trimmed.startsWith('"use server"') || trimmed.startsWith("'use server'")
74
64
  );
@@ -77,18 +67,6 @@ function isUseServerModule(filePath: string): boolean {
77
67
  }
78
68
  }
79
69
 
80
- /**
81
- * Transform code to expose action IDs on createServerReference calls.
82
- * Wraps each call with an IIFE that attaches $id to the returned function.
83
- *
84
- * @param code - The source code to transform
85
- * @param sourceId - The source file identifier (for sourcemap)
86
- * @param hashToFileMap - Optional mapping from hash to file path (for server bundles)
87
- */
88
- /**
89
- * Apply createServerReference wrapping to a MagicString instance.
90
- * Returns true if any changes were made.
91
- */
92
70
  function applyServerReferenceWrapping(
93
71
  code: string,
94
72
  s: MagicString,
@@ -98,11 +76,6 @@ function applyServerReferenceWrapping(
98
76
  return false;
99
77
  }
100
78
 
101
- // Match: createServerReference("hash#actionName", ...) or $$ReactClient.createServerReference(...)
102
- // The RSC plugin uses $$ReactClient namespace in transformed code.
103
- // Note: [^)]* cannot handle nested parens in trailing args. This is safe in practice
104
- // because the RSC plugin always generates simple variable references (e.g., callServer)
105
- // as the second argument, never nested function calls.
106
79
  const pattern =
107
80
  /((?:\$\$\w+\.)?createServerReference)\(("[^"]+#[^"]+")([^)]*)\)/g;
108
81
 
@@ -115,23 +88,19 @@ function applyServerReferenceWrapping(
115
88
  const start = match.index;
116
89
  const end = start + fullMatch.length;
117
90
 
118
- // Parse the ID to potentially replace hash with file path
119
91
  let finalIdArg = idArg;
120
92
  if (hashToFileMap) {
121
- // idArg is like '"hash#actionName"', extract the parts
122
93
  const idValue = idArg.slice(1, -1); // Remove quotes
123
94
  const hashMatch = idValue.match(/^([^#]+)#(.+)$/);
124
95
  if (hashMatch) {
125
96
  const [, hash, actionName] = hashMatch;
126
97
  const filePath = hashToFileMap.get(hash);
127
98
  if (filePath) {
128
- // Replace hash with file path for server-side
129
99
  finalIdArg = `"${filePath}#${actionName}"`;
130
100
  }
131
101
  }
132
102
  }
133
103
 
134
- // Wrap the createServerReference call to attach $$id to the returned function
135
104
  const replacement = `(function(fn) { fn.$$id = ${finalIdArg}; return fn; })(${fnCall}(${idArg}${rest}))`;
136
105
  s.overwrite(start, end, replacement);
137
106
  }
@@ -155,29 +124,6 @@ function transformServerReferences(
155
124
  };
156
125
  }
157
126
 
158
- /**
159
- * Transform registerServerReference calls in server bundles to use file paths instead of hashes.
160
- * Pattern: registerServerReference(fn, "hash", "exportName")
161
- * React's registerServerReference sets $$id = hash + "#" + exportName
162
- * By replacing the hash with file path, $$id will contain the file path for revalidation matching.
163
- *
164
- * Only actions from module-level "use server" files are transformed.
165
- * Inline actions (defined in RSC components with "use server" inside a function) are NOT in
166
- * hashToFileMap and keep their hashed IDs. This is intentional for client security:
167
- * - Module-level "use server" files: shared action modules, file path helps revalidation
168
- * - Inline actions: one-off actions in RSC, hash ID prevents file path exposure to client
169
- *
170
- * @param code - The source code to transform
171
- * @param sourceId - The source file identifier (for sourcemap)
172
- * @param hashToFileMap - Mapping from hash to file path (only module-level "use server" files)
173
- */
174
- /**
175
- * Apply registerServerReference wrapping to a MagicString instance.
176
- * Returns true if any changes were made.
177
- *
178
- * Only actions from module-level "use server" files are transformed.
179
- * Inline actions keep their hashed IDs for client security.
180
- */
181
127
  function applyRegisterReferenceWrapping(
182
128
  code: string,
183
129
  s: MagicString,
@@ -187,8 +133,6 @@ function applyRegisterReferenceWrapping(
187
133
  return false;
188
134
  }
189
135
 
190
- // Match: registerServerReference(fn, "hash", "exportName")
191
- // The hash is the second argument, exportName is the third
192
136
  const pattern =
193
137
  /registerServerReference\(([^,]+),\s*"([^"]+)",\s*"([^"]+)"\)/g;
194
138
 
@@ -200,15 +144,9 @@ function applyRegisterReferenceWrapping(
200
144
  const start = match.index;
201
145
  const end = start + fullMatch.length;
202
146
 
203
- // Look up the file path for this hash
204
147
  const filePath = hashToFileMap.get(hash);
205
148
  if (filePath) {
206
149
  hasChanges = true;
207
- // WRAP the call to add $id property with file path
208
- // Keep the original hash for React's action registry (so loadServerAction works)
209
- // Add $id (single dollar) with file path for revalidation matching
210
- // Note: We use $id instead of $$id because React's registerServerReference
211
- // sets $$id as a non-writable property
212
150
  const filePathId = `${filePath}#${exportName}`;
213
151
  const replacement = `(function(fn) { fn.$id = "${filePathId}"; return fn; })(registerServerReference(${fnArg}, "${hash}", "${exportName}"))`;
214
152
  s.overwrite(start, end, replacement);
@@ -336,27 +274,19 @@ export function exposeActionId(): Plugin {
336
274
 
337
275
  const start = counterTransform ? performance.now() : 0;
338
276
  try {
339
- // Dev mode: no hash-to-file mapping needed (IDs are already file paths)
340
277
  return transformServerReferences(code, id);
341
278
  } finally {
342
279
  counterTransform?.record(id, performance.now() - start);
343
280
  }
344
281
  },
345
282
 
346
- // Build mode: renderChunk runs after all transforms and bundling complete
347
283
  renderChunk(code, chunk) {
348
284
  const start = counterRender ? performance.now() : 0;
349
285
  try {
350
- // Only RSC bundle should get file paths for revalidation matching
351
- // SSR bundle must NOT use file paths because client components run there
352
- // and need to match the client bundle during hydration (otherwise: error #418)
353
286
  const isRscEnv = this.environment?.name === "rsc";
354
287
 
355
- // Only use file path mapping for RSC environment
356
288
  const effectiveMap = isRscEnv ? hashToFileMap : undefined;
357
289
 
358
- // For RSC bundles, both createServerReference and registerServerReference
359
- // may need transforming. Use a single MagicString for correct sourcemaps.
360
290
  if (isRscEnv && hashToFileMap) {
361
291
  const s = new MagicString(code);
362
292
  const changed1 = applyServerReferenceWrapping(code, s, effectiveMap);
@@ -377,7 +307,6 @@ export function exposeActionId(): Plugin {
377
307
  return null;
378
308
  }
379
309
 
380
- // Non-RSC environments: only transform createServerReference calls
381
310
  return transformServerReferences(code, chunk.fileName, effectiveMap);
382
311
  } finally {
383
312
  counterRender?.record(chunk.fileName, performance.now() - start);
@@ -8,21 +8,12 @@ export function normalizePath(p: string): string {
8
8
  return p.split(path.sep).join("/");
9
9
  }
10
10
 
11
- /**
12
- * Generate a short hash for an ID.
13
- * Uses first 8 chars of SHA-256 hash for uniqueness while keeping IDs short.
14
- * Appends export name for easier debugging in production: "abc123#ExportName"
15
- */
16
11
  export function hashId(filePath: string, exportName: string): string {
17
12
  const input = `${filePath}#${exportName}`;
18
13
  const hash = crypto.createHash("sha256").update(input).digest("hex");
19
14
  return `${hash.slice(0, 8)}#${exportName}`;
20
15
  }
21
16
 
22
- /**
23
- * Build a stable ID for an export binding. Uses hashed IDs in production
24
- * builds (short + opaque) and readable path#name IDs in dev.
25
- */
26
17
  export function makeStubId(
27
18
  filePath: string,
28
19
  exportName: string,
@@ -31,17 +22,6 @@ export function makeStubId(
31
22
  return isBuild ? hashId(filePath, exportName) : `${filePath}#${exportName}`;
32
23
  }
33
24
 
34
- /**
35
- * Generate an 8-char hex hash for an inline handler call site.
36
- *
37
- * Keyed on the source-order INDEX of the call (the Nth inline `fnName(...)` in
38
- * the file), NOT its line number. Line numbers shift between the prerender
39
- * build context and the production build context (preceding transforms differ,
40
- * e.g. plugin-react boilerplate), which would desync the prerender manifest key
41
- * from the runtime handler id and break prerender/static freezing. The
42
- * source-order index is invariant to line shifts; `fnName` keeps Static and
43
- * Prerender inline ids from colliding at the same index.
44
- */
45
25
  export function hashInlineId(
46
26
  filePath: string,
47
27
  fnName: string,
@@ -61,11 +41,6 @@ export interface DetectedImports {
61
41
  any: boolean;
62
42
  }
63
43
 
64
- /**
65
- * Build a map from local binding name to exported names by walking
66
- * ExportNamedDeclaration nodes. Handles `export const X`, `export { X }`,
67
- * and `export { X as Y }`. Skips re-exports (`export { X } from "..."`).
68
- */
69
44
  export function buildExportMap(program: any): Map<string, string[]> {
70
45
  const exportMap = new Map<string, string[]>();
71
46
 
@@ -105,10 +80,6 @@ export function buildExportMap(program: any): Map<string, string[]> {
105
80
  return exportMap;
106
81
  }
107
82
 
108
- /**
109
- * Single-pass detection of all create* imports from @rangojs/router.
110
- * Returns which create functions are imported so we can skip unnecessary transforms.
111
- */
112
83
  export function detectImports(code: string): DetectedImports {
113
84
  // Extract all import declarations from @rangojs/router in one scan
114
85
  const importPattern =
@@ -135,10 +106,6 @@ export function detectImports(code: string): DetectedImports {
135
106
  if (/\bcreateRouter\b/.test(imports)) result.router = true;
136
107
  }
137
108
 
138
- // createRouter has a stricter check: only from "@rangojs/router" (not sub-paths).
139
- // NOTE: This is intentional — detectImports is used as a fast pre-filter in
140
- // exposeInternalIds (which does NOT handle router transforms). The separate
141
- // exposeRouterId plugin handles createRouter and DOES accept the /server subpath.
142
109
  if (result.router) {
143
110
  result.router =
144
111
  /import\s*\{[^}]*\bcreateRouter\b[^}]*\}\s*from\s*["']@rangojs\/router["']/.test(
@@ -157,11 +124,6 @@ export function detectImports(code: string): DetectedImports {
157
124
  return result;
158
125
  }
159
126
 
160
- /**
161
- * Skip past a string literal, template literal, or comment starting at pos.
162
- * Returns the index after the closing delimiter, or pos if not at a
163
- * string/comment start. Handles escape sequences and nested ${} in templates.
164
- */
165
127
  export function skipStringOrComment(code: string, pos: number): number {
166
128
  const ch = code[pos];
167
129
 
@@ -219,11 +181,6 @@ export function skipStringOrComment(code: string, pos: number): number {
219
181
  return pos;
220
182
  }
221
183
 
222
- /**
223
- * Find the matching closing paren starting after an already-opened paren.
224
- * Skips strings, template literals, and comments so parens inside them
225
- * don't affect depth tracking. Returns the index after the closing paren.
226
- */
227
184
  export function findMatchingParen(code: string, startPos: number): number {
228
185
  let depth = 1;
229
186
  let i = startPos;
@@ -240,10 +197,6 @@ export function findMatchingParen(code: string, startPos: number): number {
240
197
  return i;
241
198
  }
242
199
 
243
- /**
244
- * Count the number of top-level arguments in a function call.
245
- * Skips nested parens, brackets, braces, strings, and comments.
246
- */
247
200
  export function countArgs(
248
201
  code: string,
249
202
  startPos: number,
@@ -257,7 +210,16 @@ export function countArgs(
257
210
  while (i < endPos) {
258
211
  const skipped = skipStringOrComment(code, i);
259
212
  if (skipped > i) {
260
- hasContent = true;
213
+ // A comment is transparent: `createHandle(/* meta */)` has ZERO real
214
+ // arguments, so a comment-only region must NOT set hasContent (else the
215
+ // fallback path would count it as 1 arg and inject `, "id"` over an elided
216
+ // first slot — a syntax error). A string/template literal IS content.
217
+ const ch = code[i];
218
+ const isComment =
219
+ ch === "/" &&
220
+ i + 1 < code.length &&
221
+ (code[i + 1] === "/" || code[i + 1] === "*");
222
+ if (!isComment) hasContent = true;
261
223
  i = skipped;
262
224
  continue;
263
225
  }
@@ -279,10 +241,6 @@ export function countArgs(
279
241
  return hasContent ? argCount + 1 : 0;
280
242
  }
281
243
 
282
- /**
283
- * Find the end of a statement: skip whitespace and optional semicolon after
284
- * a closing paren position.
285
- */
286
244
  export function findStatementEnd(code: string, pos: number): number {
287
245
  let i = pos;
288
246
  while (i < code.length && /\s/.test(code[i])) {
@@ -294,10 +252,81 @@ export function findStatementEnd(code: string, pos: number): number {
294
252
  return i;
295
253
  }
296
254
 
255
+ export { escapeRegExp } from "../../regex-escape.js";
256
+
297
257
  /**
298
- * Escape special regex characters in a string so it can be safely
299
- * interpolated into a RegExp pattern.
258
+ * Given an index pointing just past a `create*` callee identifier, return the
259
+ * index of the call's opening `(`, accounting for an optional generic type
260
+ * argument list `<...>` with arbitrarily nested `<>`. Returns -1 when the next
261
+ * non-trivia token is neither `<` nor `(` (i.e. not a call site).
262
+ *
263
+ * Replaces the single-level `<[^>]*>` regex assumption, which stopped at the
264
+ * first `>` and so never reached `(` for `createRouter<Config<Env>>(`.
265
+ *
266
+ * Whitespace, comments, and strings between the callee and `(` are skipped via
267
+ * skipStringOrComment. The `<...>` scan only balances angle brackets; it does
268
+ * not attempt to parse full TS type syntax (sufficient for locating the paren).
300
269
  */
301
- export function escapeRegExp(input: string): string {
302
- return input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
270
+ export function findCallParenAfterGenerics(
271
+ code: string,
272
+ afterCalleeIndex: number,
273
+ ): number {
274
+ let i = afterCalleeIndex;
275
+ // Skip leading whitespace/comments/strings before `<` or `(`.
276
+ while (i < code.length) {
277
+ const skipped = skipStringOrComment(code, i);
278
+ if (skipped > i) {
279
+ i = skipped;
280
+ continue;
281
+ }
282
+ if (/\s/.test(code[i])) {
283
+ i++;
284
+ continue;
285
+ }
286
+ break;
287
+ }
288
+
289
+ if (i >= code.length) return -1;
290
+
291
+ if (code[i] === "(") return i;
292
+
293
+ if (code[i] === "<") {
294
+ let depth = 0;
295
+ while (i < code.length) {
296
+ const skipped = skipStringOrComment(code, i);
297
+ if (skipped > i) {
298
+ i = skipped;
299
+ continue;
300
+ }
301
+ const ch = code[i];
302
+ if (ch === "<") {
303
+ depth++;
304
+ } else if (ch === ">") {
305
+ depth--;
306
+ if (depth === 0) {
307
+ i++;
308
+ break;
309
+ }
310
+ }
311
+ i++;
312
+ }
313
+ if (depth !== 0) return -1;
314
+ // After the balanced generic list, skip trivia and expect `(`.
315
+ while (i < code.length) {
316
+ const skipped = skipStringOrComment(code, i);
317
+ if (skipped > i) {
318
+ i = skipped;
319
+ continue;
320
+ }
321
+ if (/\s/.test(code[i])) {
322
+ i++;
323
+ continue;
324
+ }
325
+ break;
326
+ }
327
+ if (i < code.length && code[i] === "(") return i;
328
+ return -1;
329
+ }
330
+
331
+ return -1;
303
332
  }
@@ -5,16 +5,11 @@ import {
5
5
  findStatementEnd,
6
6
  buildExportMap,
7
7
  escapeRegExp,
8
+ findCallParenAfterGenerics,
8
9
  } from "../expose-id-utils.js";
9
10
  import { codeMatchIndices } from "../../../build/route-types/source-scan.js";
10
11
  import type { CreateExportBinding } from "./types.js";
11
12
 
12
- /**
13
- * Check whether every non-type export in `code` is accounted for by the given
14
- * bindings. Returns false if any export exists that is not one of the known
15
- * create* call locals/exports, allowing callers to bail out for mixed-export
16
- * files.
17
- */
18
13
  export function isExportOnlyFile(
19
14
  code: string,
20
15
  bindings: CreateExportBinding[],
@@ -28,10 +23,8 @@ export function isExportOnlyFile(
28
23
  for (const e of b.exportNames) knownExports.add(e);
29
24
  }
30
25
 
31
- // Bail on star re-exports (unknown exports)
32
26
  if (/export\s*\*/.test(code)) return false;
33
27
 
34
- // Check `export const/let/var/function/class/default X` declarations
35
28
  const declExportPattern =
36
29
  /export\s+(const|let|var|function|class|default)\s+(\w+)/g;
37
30
  let match: RegExpExecArray | null;
@@ -39,8 +32,6 @@ export function isExportOnlyFile(
39
32
  if (!knownExports.has(match[2])) return false;
40
33
  }
41
34
 
42
- // Check `export { X }` and `export { X as Y }` specifiers: the local name
43
- // must reference a known create* binding.
44
35
  const specExportPattern = /export\s*\{([^}]+)\}/g;
45
36
  while ((match = specExportPattern.exec(code)) !== null) {
46
37
  const specifiers = match[1]
@@ -60,24 +51,44 @@ export function isExportOnlyFile(
60
51
  return true;
61
52
  }
62
53
 
54
+ // Matches the callee identifier only. The optional generic argument list
55
+ // (which may be nested, e.g. createLoader<A<B>>(...)) and the call paren are
56
+ // resolved per match via findCallParenAfterGenerics, so a nested `>` no longer
57
+ // defeats the scan the way `<[^>]*>` did (it stopped at the first `>`).
63
58
  function createCallPattern(fnNames: string[]): RegExp {
64
- return new RegExp(
65
- `\\b(?:${fnNames.map(escapeRegExp).join("|")})\\s*(?:<[^>]*>\\s*)?\\(`,
66
- "g",
59
+ return new RegExp(`\\b(?:${fnNames.map(escapeRegExp).join("|")})\\b`, "g");
60
+ }
61
+
62
+ /**
63
+ * Byte offsets of every create*-call site in real code: a callee-identifier
64
+ * match that is actually followed by a call `(` (after an optional nested
65
+ * generic list). Non-call references (type positions, the import specifier
66
+ * itself) yield -1 from findCallParenAfterGenerics and are dropped.
67
+ */
68
+ function createCallStartIndices(code: string, fnNames: string[]): number[] {
69
+ return codeMatchIndices(code, createCallPattern(fnNames)).filter(
70
+ (index) =>
71
+ findCallParenAfterGenerics(
72
+ code,
73
+ index + matchedNameLength(code, index),
74
+ ) !== -1,
67
75
  );
68
76
  }
69
77
 
70
- // Counts real create*() call sites, ignoring occurrences inside comments and
71
- // string literals. Used by the unsupported-shape warning heuristic and the
72
- // inline-extraction pre-check.
78
+ // Length of the identifier match at `index` (run of identifier chars).
79
+ function matchedNameLength(code: string, index: number): number {
80
+ let i = index;
81
+ while (i < code.length && /[A-Za-z0-9_$]/.test(code[i])) i++;
82
+ return i - index;
83
+ }
84
+
73
85
  export function countCreateCallsForNames(
74
86
  code: string,
75
87
  fnNames: string[],
76
88
  ): number {
77
- return codeMatchIndices(code, createCallPattern(fnNames)).length;
89
+ return createCallStartIndices(code, fnNames).length;
78
90
  }
79
91
 
80
- /** Convert a 0-based byte offset to a 1-based { line, column }. */
81
92
  export function offsetToLineColumn(
82
93
  code: string,
83
94
  index: number,
@@ -94,21 +105,13 @@ export function offsetToLineColumn(
94
105
  return { line, column: index - lineStart + 1 };
95
106
  }
96
107
 
97
- /**
98
- * Locate every real create*() call site (comment/string-free) that is NOT one
99
- * of the supported, id-injectable export bindings, returning each as a 1-based
100
- * { line, column }. The empty result means every call is in a supported shape.
101
- * Both binding-collection paths anchor `callExprStart` at the start of the
102
- * create* identifier — exactly where this pattern matches — so the set
103
- * difference is exact.
104
- */
105
108
  export function findUnsupportedCreateCallSites(
106
109
  code: string,
107
110
  fnNames: string[],
108
111
  supportedBindings: CreateExportBinding[],
109
112
  ): Array<{ line: number; column: number }> {
110
113
  const supported = new Set(supportedBindings.map((b) => b.callExprStart));
111
- return codeMatchIndices(code, createCallPattern(fnNames))
114
+ return createCallStartIndices(code, fnNames)
112
115
  .filter((index) => !supported.has(index))
113
116
  .map((index) => offsetToLineColumn(code, index));
114
117
  }
@@ -158,16 +161,6 @@ export function getCalledIdentifierFromCall(callExpr: any): string | null {
158
161
  return null;
159
162
  }
160
163
 
161
- /**
162
- * plugin-react's dev Fast Refresh wraps exports whose function body uses
163
- * hook-like calls in a signature-registration call. A loader/handle that calls
164
- * `ctx.use(...)` trips this heuristic, so `export const X = createLoader(...)`
165
- * becomes `export const X = _s(createLoader(...), "<sig>", true)` — the create*
166
- * call is the first argument of an unrelated wrapper call. Unwrap a single such
167
- * layer so ID injection still targets the inner create* call. The `$$id`
168
- * assignment is appended after the whole statement (against the export local),
169
- * which is unaffected by the wrapper since `_s(x)` returns `x`.
170
- */
171
164
  function unwrapSignatureWrappedCall(init: any, fnNameSet: Set<string>): any {
172
165
  if (init?.type !== "CallExpression") return init;
173
166
  const directId = getCalledIdentifierFromCall(init);
@@ -331,10 +324,6 @@ export function collectCreateExportBindings(
331
324
  }
332
325
  }
333
326
 
334
- // When the JS parser misidentifies TypeScript generics (e.g.,
335
- // createLocationState<{ text: string }>({...})) as binary expressions,
336
- // the AST path finds 0 bindings even though calls exist. Fall back to
337
- // regex-based detection which handles generics via <[^>]*> matching.
338
327
  if (bindings.length === 0) {
339
328
  return collectCreateExportBindingsFallback(code, fnNames);
340
329
  }
@@ -349,8 +338,6 @@ export function buildUnsupportedShapeWarning(
349
338
  ): string {
350
339
  const lines = [`[rango] Unsupported ${fnName} shape in "${filePath}".`];
351
340
 
352
- // Point at the exact call(s) so the location is clickable in the terminal/IDE
353
- // (file:line:column) instead of leaving the user to scan the whole file.
354
341
  if (sites.length === 1) {
355
342
  const s = sites[0];
356
343
  lines.push(
@@ -3,35 +3,24 @@ import { makeStubId } from "../expose-id-utils.js";
3
3
  import type { HandlerTransformConfig, CreateExportBinding } from "./types.js";
4
4
  import { isExportOnlyFile } from "./export-analysis.js";
5
5
 
6
- function analyzeCreateHandleArgs(
7
- code: string,
8
- startPos: number,
9
- endPos: number,
10
- ): { hasArgs: boolean } {
11
- const content = code.slice(startPos, endPos).trim();
12
- return { hasArgs: content.length > 0 };
13
- }
14
-
15
6
  export function transformHandles(
16
7
  bindings: CreateExportBinding[],
17
8
  s: MagicString,
18
- code: string,
19
9
  filePath: string,
20
10
  isBuild: boolean,
21
11
  ): boolean {
22
12
  let hasChanges = false;
23
13
  for (const binding of bindings) {
24
14
  const exportName = binding.exportNames[0];
25
- const args = analyzeCreateHandleArgs(
26
- code,
27
- binding.callOpenParenPos + 1,
28
- binding.callCloseParenPos,
29
- );
30
15
 
31
16
  const handleId = makeStubId(filePath, exportName, isBuild);
32
17
 
18
+ // Branch on the AST-derived argCount, not a string-trim of the raw arg
19
+ // slice. A comment-only arg list (`createHandle(/* meta */)`) trims to
20
+ // non-empty but is zero real arguments; injecting `, "id"` would emit
21
+ // `createHandle(/* meta */, "id")` — an elided first arg / syntax error.
33
22
  let paramInjection: string;
34
- if (!args.hasArgs) {
23
+ if (binding.argCount === 0) {
35
24
  paramInjection = `undefined, "${handleId}"`;
36
25
  } else {
37
26
  paramInjection = `, "${handleId}"`;
@@ -69,10 +58,6 @@ export function transformLocationState(
69
58
  return hasChanges;
70
59
  }
71
60
 
72
- /**
73
- * Replace the entire file with lightweight stubs when ALL non-type exports are
74
- * handler calls of the given type. Returns null for files with mixed exports.
75
- */
76
61
  export function generateWholeFileStubs(
77
62
  cfg: HandlerTransformConfig,
78
63
  bindings: CreateExportBinding[],
@@ -91,10 +76,6 @@ export function generateWholeFileStubs(
91
76
  return { code: stubs.join("\n") + "\n", map: null };
92
77
  }
93
78
 
94
- /**
95
- * Replace handler call expressions with lightweight stub objects on the shared
96
- * unified-pipeline MagicString so all transforms share one sourcemap.
97
- */
98
79
  export function stubHandlerExprs(
99
80
  cfg: HandlerTransformConfig,
100
81
  bindings: CreateExportBinding[],
@@ -117,9 +98,6 @@ export function stubHandlerExprs(
117
98
  return hasChanges;
118
99
  }
119
100
 
120
- /**
121
- * Inject $$id into export const handler calls in RSC environments.
122
- */
123
101
  export function transformHandlerIds(
124
102
  cfg: HandlerTransformConfig,
125
103
  bindings: CreateExportBinding[],
@@ -133,10 +111,6 @@ export function transformHandlerIds(
133
111
 
134
112
  const handlerId = makeStubId(filePath, exportName, isBuild);
135
113
 
136
- // Injection strategy matches the runtime overload signatures:
137
- // 0 args -> inject undefined, "id"
138
- // 1 arg (handler) -> inject , undefined, "id"
139
- // 2+ args -> inject , "id"
140
114
  let paramInjection: string;
141
115
  if (binding.argCount === 0) {
142
116
  paramInjection = `undefined, "${handlerId}"`;
@@ -9,18 +9,6 @@ export function hasCreateLoaderImport(code: string): boolean {
9
9
  );
10
10
  }
11
11
 
12
- /**
13
- * Generate lightweight client stubs for loader files.
14
- *
15
- * When a loader file is imported from a client component (e.g., for useLoader()),
16
- * the client only needs { __brand: "loader", $$id: "..." } objects.
17
- * This function replaces the entire file contents with just those stub exports,
18
- * preventing server-only data (constants, DB queries, etc.) from leaking into
19
- * the client bundle.
20
- *
21
- * Only applies when ALL named exports are createLoader() calls (plus type exports
22
- * which are erased at compile time). Files with mixed exports are left untouched.
23
- */
24
12
  export function generateClientLoaderStubs(
25
13
  bindings: CreateExportBinding[],
26
14
  code: string,
@@ -32,11 +20,18 @@ export function generateClientLoaderStubs(
32
20
  const lines: string[] = [];
33
21
 
34
22
  for (const binding of bindings) {
35
- for (const name of binding.exportNames) {
36
- const loaderId = makeStubId(filePath, name, isBuild);
37
- lines.push(
38
- `export const ${name} = { __brand: "loader", $$id: "${loaderId}" };`,
39
- );
23
+ // Aliases share the primary export's id (matches the server side, which
24
+ // registers only exportNames[0] in the loader registry, and the mixed-type
25
+ // whole-file path). Emitting a distinct makeStubId per alias would make a
26
+ // client component importing the alias fetch an id absent from the server
27
+ // registry, so the fetchable-loader request would 404.
28
+ const primaryName = binding.exportNames[0];
29
+ const loaderId = makeStubId(filePath, primaryName, isBuild);
30
+ lines.push(
31
+ `export const ${primaryName} = { __brand: "loader", $$id: "${loaderId}" };`,
32
+ );
33
+ for (const alias of binding.exportNames.slice(1)) {
34
+ lines.push(`export const ${alias} = ${primaryName};`);
40
35
  }
41
36
  }
42
37
 
@@ -56,9 +51,6 @@ export function transformLoaders(
56
51
 
57
52
  const loaderId = makeStubId(filePath, exportName, isBuild);
58
53
 
59
- // Inject $$id as hidden third parameter.
60
- // createLoader(fn) -> createLoader(fn, undefined, "id")
61
- // createLoader(fn, true) -> createLoader(fn, true, "id")
62
54
  const paramInjection =
63
55
  binding.argCount === 1 ? `, undefined, "${loaderId}"` : `, "${loaderId}"`;
64
56
  s.appendLeft(binding.callCloseParenPos, paramInjection);