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

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 (1041) hide show
  1. package/README.md +120 -25
  2. package/dist/bin/rango.js +147 -57
  3. package/dist/vite/index.js +2108 -829
  4. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  5. package/package.json +13 -8
  6. package/skills/breadcrumbs/SKILL.md +3 -1
  7. package/skills/bundle-analysis/SKILL.md +159 -0
  8. package/skills/cache-guide/SKILL.md +222 -30
  9. package/skills/caching/SKILL.md +188 -8
  10. package/skills/composability/SKILL.md +27 -2
  11. package/skills/document-cache/SKILL.md +78 -55
  12. package/skills/handler-use/SKILL.md +364 -0
  13. package/skills/hooks/SKILL.md +229 -20
  14. package/skills/host-router/SKILL.md +45 -20
  15. package/skills/i18n/SKILL.md +276 -0
  16. package/skills/intercept/SKILL.md +46 -4
  17. package/skills/layout/SKILL.md +28 -7
  18. package/skills/links/SKILL.md +247 -17
  19. package/skills/loader/SKILL.md +219 -9
  20. package/skills/middleware/SKILL.md +47 -12
  21. package/skills/migrate-nextjs/SKILL.md +582 -0
  22. package/skills/migrate-react-router/SKILL.md +769 -0
  23. package/skills/mime-routes/SKILL.md +27 -0
  24. package/skills/observability/SKILL.md +137 -0
  25. package/skills/parallel/SKILL.md +71 -6
  26. package/skills/prerender/SKILL.md +14 -33
  27. package/skills/rango/SKILL.md +236 -22
  28. package/skills/react-compiler/SKILL.md +168 -0
  29. package/skills/response-routes/SKILL.md +66 -9
  30. package/skills/route/SKILL.md +57 -4
  31. package/skills/router-setup/SKILL.md +3 -3
  32. package/skills/server-actions/SKILL.md +751 -0
  33. package/skills/streams-and-websockets/SKILL.md +283 -0
  34. package/skills/typesafety/SKILL.md +319 -27
  35. package/skills/use-cache/SKILL.md +36 -5
  36. package/skills/view-transitions/SKILL.md +294 -0
  37. package/src/__augment-tests__/augment.ts +81 -0
  38. package/src/__augment-tests__/augmented.check.ts +117 -0
  39. package/src/browser/action-coordinator.ts +53 -36
  40. package/src/browser/app-shell.ts +52 -0
  41. package/src/browser/event-controller.ts +86 -70
  42. package/src/browser/history-state.ts +21 -0
  43. package/src/browser/index.ts +3 -3
  44. package/src/browser/navigation-bridge.ts +86 -11
  45. package/src/browser/navigation-client.ts +76 -28
  46. package/src/browser/navigation-store.ts +32 -9
  47. package/src/browser/navigation-transaction.ts +10 -28
  48. package/src/browser/partial-update.ts +64 -26
  49. package/src/browser/prefetch/cache.ts +129 -21
  50. package/src/browser/prefetch/fetch.ts +148 -16
  51. package/src/browser/prefetch/queue.ts +36 -5
  52. package/src/browser/rango-state.ts +53 -13
  53. package/src/browser/react/Link.tsx +30 -2
  54. package/src/browser/react/NavigationProvider.tsx +72 -31
  55. package/src/browser/react/filter-segment-order.ts +51 -7
  56. package/src/browser/react/index.ts +3 -0
  57. package/src/browser/react/location-state-shared.ts +175 -4
  58. package/src/browser/react/location-state.ts +39 -13
  59. package/src/browser/react/use-handle.ts +17 -9
  60. package/src/browser/react/use-navigation.ts +22 -2
  61. package/src/browser/react/use-params.ts +20 -8
  62. package/src/browser/react/use-reverse.ts +106 -0
  63. package/src/browser/react/use-router.ts +22 -2
  64. package/src/browser/react/use-segments.ts +11 -8
  65. package/src/browser/response-adapter.ts +25 -0
  66. package/src/browser/rsc-router.tsx +64 -22
  67. package/src/browser/scroll-restoration.ts +22 -14
  68. package/src/browser/segment-reconciler.ts +36 -14
  69. package/src/browser/segment-structure-assert.ts +2 -2
  70. package/src/browser/server-action-bridge.ts +23 -30
  71. package/src/browser/types.ts +21 -0
  72. package/src/build/collect-fallback-refs.ts +107 -0
  73. package/src/build/generate-manifest.ts +60 -35
  74. package/src/build/generate-route-types.ts +2 -0
  75. package/src/build/index.ts +2 -0
  76. package/src/build/route-trie.ts +52 -25
  77. package/src/build/route-types/codegen.ts +4 -4
  78. package/src/build/route-types/include-resolution.ts +1 -1
  79. package/src/build/route-types/per-module-writer.ts +7 -4
  80. package/src/build/route-types/router-processing.ts +55 -14
  81. package/src/build/route-types/scan-filter.ts +1 -1
  82. package/src/build/route-types/source-scan.ts +118 -0
  83. package/src/build/runtime-discovery.ts +9 -20
  84. package/src/cache/cache-error.ts +104 -0
  85. package/src/cache/cache-policy.ts +95 -1
  86. package/src/cache/cache-runtime.ts +79 -13
  87. package/src/cache/cache-scope.ts +77 -46
  88. package/src/cache/cache-tag.ts +135 -0
  89. package/src/cache/cf/cf-cache-store.ts +1067 -176
  90. package/src/cache/cf/index.ts +4 -1
  91. package/src/cache/document-cache.ts +59 -7
  92. package/src/cache/index.ts +6 -0
  93. package/src/cache/memory-segment-store.ts +158 -14
  94. package/src/cache/tag-invalidation.ts +206 -0
  95. package/src/cache/types.ts +27 -0
  96. package/src/client.rsc.tsx +3 -0
  97. package/src/client.tsx +92 -182
  98. package/src/context-var.ts +5 -5
  99. package/src/decode-loader-results.ts +36 -0
  100. package/src/errors.ts +30 -1
  101. package/src/handle.ts +4 -6
  102. package/src/host/index.ts +2 -2
  103. package/src/host/router.ts +129 -57
  104. package/src/host/types.ts +31 -2
  105. package/src/host/utils.ts +1 -1
  106. package/src/href-client.ts +140 -20
  107. package/src/index.rsc.ts +16 -4
  108. package/src/index.ts +65 -15
  109. package/src/loader-store.ts +500 -0
  110. package/src/loader.rsc.ts +2 -5
  111. package/src/loader.ts +3 -10
  112. package/src/missing-id-error.ts +68 -0
  113. package/src/outlet-context.ts +1 -1
  114. package/src/prerender.ts +4 -4
  115. package/src/response-utils.ts +37 -0
  116. package/src/reverse.ts +65 -36
  117. package/src/route-content-wrapper.tsx +6 -28
  118. package/src/route-definition/dsl-helpers.ts +384 -257
  119. package/src/route-definition/helper-factories.ts +29 -139
  120. package/src/route-definition/helpers-types.ts +100 -28
  121. package/src/route-definition/resolve-handler-use.ts +6 -0
  122. package/src/route-definition/use-item-types.ts +32 -0
  123. package/src/route-types.ts +26 -41
  124. package/src/router/content-negotiation.ts +15 -2
  125. package/src/router/error-handling.ts +1 -1
  126. package/src/router/handler-context.ts +21 -38
  127. package/src/router/intercept-resolution.ts +4 -18
  128. package/src/router/lazy-includes.ts +8 -8
  129. package/src/router/loader-resolution.ts +19 -2
  130. package/src/router/manifest.ts +22 -13
  131. package/src/router/match-api.ts +4 -3
  132. package/src/router/match-handlers.ts +1 -0
  133. package/src/router/match-middleware/cache-lookup.ts +46 -92
  134. package/src/router/match-middleware/cache-store.ts +3 -2
  135. package/src/router/match-result.ts +103 -4
  136. package/src/router/metrics.ts +1 -1
  137. package/src/router/middleware-types.ts +15 -26
  138. package/src/router/middleware.ts +99 -84
  139. package/src/router/pattern-matching.ts +101 -17
  140. package/src/router/prerender-match.ts +3 -1
  141. package/src/router/preview-match.ts +3 -1
  142. package/src/router/request-classification.ts +4 -28
  143. package/src/router/revalidation.ts +58 -2
  144. package/src/router/router-interfaces.ts +45 -28
  145. package/src/router/router-options.ts +25 -1
  146. package/src/router/router-registry.ts +2 -5
  147. package/src/router/segment-resolution/fresh.ts +32 -6
  148. package/src/router/segment-resolution/loader-cache.ts +8 -17
  149. package/src/router/segment-resolution/revalidation.ts +154 -107
  150. package/src/router/segment-resolution/view-transition-default.ts +36 -0
  151. package/src/router/substitute-pattern-params.ts +56 -0
  152. package/src/router/trie-matching.ts +18 -13
  153. package/src/router/types.ts +8 -0
  154. package/src/router/url-params.ts +49 -0
  155. package/src/router.ts +23 -18
  156. package/src/rsc/handler-context.ts +2 -2
  157. package/src/rsc/handler.ts +46 -74
  158. package/src/rsc/helpers.ts +72 -43
  159. package/src/rsc/index.ts +1 -1
  160. package/src/rsc/origin-guard.ts +28 -10
  161. package/src/rsc/progressive-enhancement.ts +4 -0
  162. package/src/rsc/response-route-handler.ts +54 -54
  163. package/src/rsc/rsc-rendering.ts +35 -51
  164. package/src/rsc/runtime-warnings.ts +9 -10
  165. package/src/rsc/server-action.ts +17 -37
  166. package/src/rsc/ssr-setup.ts +16 -0
  167. package/src/rsc/types.ts +8 -2
  168. package/src/search-params.ts +4 -4
  169. package/src/segment-content-promise.ts +67 -0
  170. package/src/segment-loader-promise.ts +122 -0
  171. package/src/segment-system.tsx +132 -116
  172. package/src/serialize.ts +243 -0
  173. package/src/server/context.ts +143 -53
  174. package/src/server/cookie-store.ts +28 -4
  175. package/src/server/request-context.ts +46 -44
  176. package/src/ssr/index.tsx +5 -1
  177. package/src/static-handler.ts +1 -1
  178. package/src/types/cache-types.ts +13 -4
  179. package/src/types/error-types.ts +5 -1
  180. package/src/types/global-namespace.ts +39 -26
  181. package/src/types/handler-context.ts +68 -50
  182. package/src/types/index.ts +1 -0
  183. package/src/types/loader-types.ts +5 -6
  184. package/src/types/request-scope.ts +126 -0
  185. package/src/types/route-entry.ts +11 -0
  186. package/src/types/segments.ts +36 -2
  187. package/src/urls/include-helper.ts +34 -67
  188. package/src/urls/index.ts +0 -3
  189. package/src/urls/path-helper-types.ts +41 -7
  190. package/src/urls/path-helper.ts +17 -52
  191. package/src/urls/pattern-types.ts +36 -19
  192. package/src/urls/response-types.ts +22 -29
  193. package/src/urls/type-extraction.ts +26 -116
  194. package/src/urls/urls-function.ts +1 -5
  195. package/src/use-loader.tsx +416 -42
  196. package/src/vite/debug.ts +185 -0
  197. package/src/vite/discovery/bundle-postprocess.ts +6 -6
  198. package/src/vite/discovery/discover-routers.ts +101 -51
  199. package/src/vite/discovery/discovery-errors.ts +194 -0
  200. package/src/vite/discovery/gate-state.ts +171 -0
  201. package/src/vite/discovery/prerender-collection.ts +67 -26
  202. package/src/vite/discovery/route-types-writer.ts +40 -84
  203. package/src/vite/discovery/self-gen-tracking.ts +27 -1
  204. package/src/vite/discovery/state.ts +33 -0
  205. package/src/vite/discovery/virtual-module-codegen.ts +13 -23
  206. package/src/vite/index.ts +2 -0
  207. package/src/vite/plugin-types.ts +67 -0
  208. package/src/vite/plugins/cjs-to-esm.ts +8 -7
  209. package/src/vite/plugins/client-ref-dedup.ts +16 -0
  210. package/src/vite/plugins/client-ref-hashing.ts +28 -5
  211. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  212. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  213. package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
  214. package/src/vite/plugins/expose-action-id.ts +54 -30
  215. package/src/vite/plugins/expose-id-utils.ts +24 -8
  216. package/src/vite/plugins/expose-ids/export-analysis.ts +100 -20
  217. package/src/vite/plugins/expose-ids/handler-transform.ts +8 -61
  218. package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
  219. package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
  220. package/src/vite/plugins/expose-internal-ids.ts +503 -468
  221. package/src/vite/plugins/performance-tracks.ts +29 -25
  222. package/src/vite/plugins/use-cache-transform.ts +65 -50
  223. package/src/vite/plugins/version-injector.ts +39 -23
  224. package/src/vite/plugins/version-plugin.ts +59 -2
  225. package/src/vite/plugins/virtual-entries.ts +2 -2
  226. package/src/vite/rango.ts +116 -29
  227. package/src/vite/router-discovery.ts +750 -100
  228. package/src/vite/utils/ast-handler-extract.ts +15 -15
  229. package/src/vite/utils/banner.ts +1 -1
  230. package/src/vite/utils/bundle-analysis.ts +4 -2
  231. package/src/vite/utils/client-chunks.ts +190 -0
  232. package/src/vite/utils/forward-user-plugins.ts +193 -0
  233. package/src/vite/utils/manifest-utils.ts +21 -5
  234. package/src/vite/utils/package-resolution.ts +41 -1
  235. package/src/vite/utils/prerender-utils.ts +21 -6
  236. package/src/vite/utils/shared-utils.ts +107 -26
  237. package/dist/__internal.d.ts +0 -83
  238. package/dist/__internal.d.ts.map +0 -1
  239. package/dist/__internal.js +0 -19
  240. package/dist/__internal.js.map +0 -1
  241. package/dist/__mocks__/version.d.ts +0 -7
  242. package/dist/__mocks__/version.d.ts.map +0 -1
  243. package/dist/__mocks__/version.js +0 -7
  244. package/dist/__mocks__/version.js.map +0 -1
  245. package/dist/__tests__/client-href.test.d.ts +0 -2
  246. package/dist/__tests__/client-href.test.d.ts.map +0 -1
  247. package/dist/__tests__/client-href.test.js +0 -74
  248. package/dist/__tests__/client-href.test.js.map +0 -1
  249. package/dist/__tests__/component-utils.test.d.ts +0 -2
  250. package/dist/__tests__/component-utils.test.d.ts.map +0 -1
  251. package/dist/__tests__/component-utils.test.js +0 -51
  252. package/dist/__tests__/component-utils.test.js.map +0 -1
  253. package/dist/__tests__/event-controller.test.d.ts +0 -2
  254. package/dist/__tests__/event-controller.test.d.ts.map +0 -1
  255. package/dist/__tests__/event-controller.test.js +0 -538
  256. package/dist/__tests__/event-controller.test.js.map +0 -1
  257. package/dist/__tests__/helpers/route-tree.d.ts +0 -118
  258. package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
  259. package/dist/__tests__/helpers/route-tree.js +0 -374
  260. package/dist/__tests__/helpers/route-tree.js.map +0 -1
  261. package/dist/__tests__/match-result.test.d.ts +0 -2
  262. package/dist/__tests__/match-result.test.d.ts.map +0 -1
  263. package/dist/__tests__/match-result.test.js +0 -154
  264. package/dist/__tests__/match-result.test.js.map +0 -1
  265. package/dist/__tests__/navigation-store.test.d.ts +0 -2
  266. package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
  267. package/dist/__tests__/navigation-store.test.js +0 -440
  268. package/dist/__tests__/navigation-store.test.js.map +0 -1
  269. package/dist/__tests__/partial-update.test.d.ts +0 -2
  270. package/dist/__tests__/partial-update.test.d.ts.map +0 -1
  271. package/dist/__tests__/partial-update.test.js +0 -1009
  272. package/dist/__tests__/partial-update.test.js.map +0 -1
  273. package/dist/__tests__/reverse-types.test.d.ts +0 -8
  274. package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
  275. package/dist/__tests__/reverse-types.test.js +0 -656
  276. package/dist/__tests__/reverse-types.test.js.map +0 -1
  277. package/dist/__tests__/route-definition.test.d.ts +0 -2
  278. package/dist/__tests__/route-definition.test.d.ts.map +0 -1
  279. package/dist/__tests__/route-definition.test.js +0 -55
  280. package/dist/__tests__/route-definition.test.js.map +0 -1
  281. package/dist/__tests__/router-helpers.test.d.ts +0 -2
  282. package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
  283. package/dist/__tests__/router-helpers.test.js +0 -377
  284. package/dist/__tests__/router-helpers.test.js.map +0 -1
  285. package/dist/__tests__/router-integration-2.test.d.ts +0 -2
  286. package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
  287. package/dist/__tests__/router-integration-2.test.js +0 -426
  288. package/dist/__tests__/router-integration-2.test.js.map +0 -1
  289. package/dist/__tests__/router-integration.test.d.ts +0 -2
  290. package/dist/__tests__/router-integration.test.d.ts.map +0 -1
  291. package/dist/__tests__/router-integration.test.js +0 -1051
  292. package/dist/__tests__/router-integration.test.js.map +0 -1
  293. package/dist/__tests__/search-params.test.d.ts +0 -5
  294. package/dist/__tests__/search-params.test.d.ts.map +0 -1
  295. package/dist/__tests__/search-params.test.js +0 -306
  296. package/dist/__tests__/search-params.test.js.map +0 -1
  297. package/dist/__tests__/segment-system.test.d.ts +0 -2
  298. package/dist/__tests__/segment-system.test.d.ts.map +0 -1
  299. package/dist/__tests__/segment-system.test.js +0 -627
  300. package/dist/__tests__/segment-system.test.js.map +0 -1
  301. package/dist/__tests__/static-handler-types.test.d.ts +0 -8
  302. package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
  303. package/dist/__tests__/static-handler-types.test.js +0 -63
  304. package/dist/__tests__/static-handler-types.test.js.map +0 -1
  305. package/dist/__tests__/urls.test.d.ts +0 -2
  306. package/dist/__tests__/urls.test.d.ts.map +0 -1
  307. package/dist/__tests__/urls.test.js +0 -421
  308. package/dist/__tests__/urls.test.js.map +0 -1
  309. package/dist/__tests__/use-mount.test.d.ts +0 -2
  310. package/dist/__tests__/use-mount.test.d.ts.map +0 -1
  311. package/dist/__tests__/use-mount.test.js +0 -35
  312. package/dist/__tests__/use-mount.test.js.map +0 -1
  313. package/dist/bin/rango.d.ts +0 -2
  314. package/dist/bin/rango.d.ts.map +0 -1
  315. package/dist/bin/rango.js.map +0 -1
  316. package/dist/browser/event-controller.d.ts +0 -191
  317. package/dist/browser/event-controller.d.ts.map +0 -1
  318. package/dist/browser/event-controller.js +0 -559
  319. package/dist/browser/event-controller.js.map +0 -1
  320. package/dist/browser/index.d.ts +0 -2
  321. package/dist/browser/index.d.ts.map +0 -1
  322. package/dist/browser/index.js +0 -14
  323. package/dist/browser/index.js.map +0 -1
  324. package/dist/browser/link-interceptor.d.ts +0 -38
  325. package/dist/browser/link-interceptor.d.ts.map +0 -1
  326. package/dist/browser/link-interceptor.js +0 -99
  327. package/dist/browser/link-interceptor.js.map +0 -1
  328. package/dist/browser/logging.d.ts +0 -10
  329. package/dist/browser/logging.d.ts.map +0 -1
  330. package/dist/browser/logging.js +0 -29
  331. package/dist/browser/logging.js.map +0 -1
  332. package/dist/browser/lru-cache.d.ts +0 -17
  333. package/dist/browser/lru-cache.d.ts.map +0 -1
  334. package/dist/browser/lru-cache.js +0 -50
  335. package/dist/browser/lru-cache.js.map +0 -1
  336. package/dist/browser/merge-segment-loaders.d.ts +0 -39
  337. package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
  338. package/dist/browser/merge-segment-loaders.js +0 -102
  339. package/dist/browser/merge-segment-loaders.js.map +0 -1
  340. package/dist/browser/navigation-bridge.d.ts +0 -102
  341. package/dist/browser/navigation-bridge.d.ts.map +0 -1
  342. package/dist/browser/navigation-bridge.js +0 -708
  343. package/dist/browser/navigation-bridge.js.map +0 -1
  344. package/dist/browser/navigation-client.d.ts +0 -25
  345. package/dist/browser/navigation-client.d.ts.map +0 -1
  346. package/dist/browser/navigation-client.js +0 -157
  347. package/dist/browser/navigation-client.js.map +0 -1
  348. package/dist/browser/navigation-store.d.ts +0 -101
  349. package/dist/browser/navigation-store.d.ts.map +0 -1
  350. package/dist/browser/navigation-store.js +0 -625
  351. package/dist/browser/navigation-store.js.map +0 -1
  352. package/dist/browser/partial-update.d.ts +0 -75
  353. package/dist/browser/partial-update.d.ts.map +0 -1
  354. package/dist/browser/partial-update.js +0 -426
  355. package/dist/browser/partial-update.js.map +0 -1
  356. package/dist/browser/react/Link.d.ts +0 -86
  357. package/dist/browser/react/Link.d.ts.map +0 -1
  358. package/dist/browser/react/Link.js +0 -128
  359. package/dist/browser/react/Link.js.map +0 -1
  360. package/dist/browser/react/NavigationProvider.d.ts +0 -63
  361. package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
  362. package/dist/browser/react/NavigationProvider.js +0 -216
  363. package/dist/browser/react/NavigationProvider.js.map +0 -1
  364. package/dist/browser/react/ScrollRestoration.d.ts +0 -75
  365. package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
  366. package/dist/browser/react/ScrollRestoration.js +0 -57
  367. package/dist/browser/react/ScrollRestoration.js.map +0 -1
  368. package/dist/browser/react/context.d.ts +0 -46
  369. package/dist/browser/react/context.d.ts.map +0 -1
  370. package/dist/browser/react/context.js +0 -10
  371. package/dist/browser/react/context.js.map +0 -1
  372. package/dist/browser/react/index.d.ts +0 -11
  373. package/dist/browser/react/index.d.ts.map +0 -1
  374. package/dist/browser/react/index.js +0 -22
  375. package/dist/browser/react/index.js.map +0 -1
  376. package/dist/browser/react/location-state-shared.d.ts +0 -63
  377. package/dist/browser/react/location-state-shared.d.ts.map +0 -1
  378. package/dist/browser/react/location-state-shared.js +0 -81
  379. package/dist/browser/react/location-state-shared.js.map +0 -1
  380. package/dist/browser/react/location-state.d.ts +0 -23
  381. package/dist/browser/react/location-state.d.ts.map +0 -1
  382. package/dist/browser/react/location-state.js +0 -29
  383. package/dist/browser/react/location-state.js.map +0 -1
  384. package/dist/browser/react/mount-context.d.ts +0 -24
  385. package/dist/browser/react/mount-context.d.ts.map +0 -1
  386. package/dist/browser/react/mount-context.js +0 -24
  387. package/dist/browser/react/mount-context.js.map +0 -1
  388. package/dist/browser/react/use-action.d.ts +0 -64
  389. package/dist/browser/react/use-action.d.ts.map +0 -1
  390. package/dist/browser/react/use-action.js +0 -134
  391. package/dist/browser/react/use-action.js.map +0 -1
  392. package/dist/browser/react/use-client-cache.d.ts +0 -41
  393. package/dist/browser/react/use-client-cache.d.ts.map +0 -1
  394. package/dist/browser/react/use-client-cache.js +0 -39
  395. package/dist/browser/react/use-client-cache.js.map +0 -1
  396. package/dist/browser/react/use-handle.d.ts +0 -31
  397. package/dist/browser/react/use-handle.d.ts.map +0 -1
  398. package/dist/browser/react/use-handle.js +0 -144
  399. package/dist/browser/react/use-handle.js.map +0 -1
  400. package/dist/browser/react/use-href.d.ts +0 -33
  401. package/dist/browser/react/use-href.d.ts.map +0 -1
  402. package/dist/browser/react/use-href.js +0 -39
  403. package/dist/browser/react/use-href.js.map +0 -1
  404. package/dist/browser/react/use-link-status.d.ts +0 -37
  405. package/dist/browser/react/use-link-status.d.ts.map +0 -1
  406. package/dist/browser/react/use-link-status.js +0 -99
  407. package/dist/browser/react/use-link-status.js.map +0 -1
  408. package/dist/browser/react/use-mount.d.ts +0 -25
  409. package/dist/browser/react/use-mount.d.ts.map +0 -1
  410. package/dist/browser/react/use-mount.js +0 -30
  411. package/dist/browser/react/use-mount.js.map +0 -1
  412. package/dist/browser/react/use-navigation.d.ts +0 -27
  413. package/dist/browser/react/use-navigation.d.ts.map +0 -1
  414. package/dist/browser/react/use-navigation.js +0 -87
  415. package/dist/browser/react/use-navigation.js.map +0 -1
  416. package/dist/browser/react/use-segments.d.ts +0 -38
  417. package/dist/browser/react/use-segments.d.ts.map +0 -1
  418. package/dist/browser/react/use-segments.js +0 -130
  419. package/dist/browser/react/use-segments.js.map +0 -1
  420. package/dist/browser/request-controller.d.ts +0 -26
  421. package/dist/browser/request-controller.d.ts.map +0 -1
  422. package/dist/browser/request-controller.js +0 -147
  423. package/dist/browser/request-controller.js.map +0 -1
  424. package/dist/browser/rsc-router.d.ts +0 -129
  425. package/dist/browser/rsc-router.d.ts.map +0 -1
  426. package/dist/browser/rsc-router.js +0 -195
  427. package/dist/browser/rsc-router.js.map +0 -1
  428. package/dist/browser/scroll-restoration.d.ts +0 -93
  429. package/dist/browser/scroll-restoration.d.ts.map +0 -1
  430. package/dist/browser/scroll-restoration.js +0 -321
  431. package/dist/browser/scroll-restoration.js.map +0 -1
  432. package/dist/browser/segment-structure-assert.d.ts +0 -17
  433. package/dist/browser/segment-structure-assert.d.ts.map +0 -1
  434. package/dist/browser/segment-structure-assert.js +0 -59
  435. package/dist/browser/segment-structure-assert.js.map +0 -1
  436. package/dist/browser/server-action-bridge.d.ts +0 -26
  437. package/dist/browser/server-action-bridge.d.ts.map +0 -1
  438. package/dist/browser/server-action-bridge.js +0 -668
  439. package/dist/browser/server-action-bridge.js.map +0 -1
  440. package/dist/browser/shallow.d.ts +0 -12
  441. package/dist/browser/shallow.d.ts.map +0 -1
  442. package/dist/browser/shallow.js +0 -34
  443. package/dist/browser/shallow.js.map +0 -1
  444. package/dist/browser/types.d.ts +0 -369
  445. package/dist/browser/types.d.ts.map +0 -1
  446. package/dist/browser/types.js +0 -2
  447. package/dist/browser/types.js.map +0 -1
  448. package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
  449. package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
  450. package/dist/build/__tests__/generate-cli.test.js +0 -237
  451. package/dist/build/__tests__/generate-cli.test.js.map +0 -1
  452. package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
  453. package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
  454. package/dist/build/__tests__/generate-manifest.test.js +0 -119
  455. package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
  456. package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
  457. package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
  458. package/dist/build/__tests__/generate-route-types.test.js +0 -620
  459. package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
  460. package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
  461. package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
  462. package/dist/build/__tests__/per-router-manifest.test.js +0 -308
  463. package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
  464. package/dist/build/generate-manifest.d.ts +0 -81
  465. package/dist/build/generate-manifest.d.ts.map +0 -1
  466. package/dist/build/generate-manifest.js +0 -276
  467. package/dist/build/generate-manifest.js.map +0 -1
  468. package/dist/build/generate-route-types.d.ts +0 -115
  469. package/dist/build/generate-route-types.d.ts.map +0 -1
  470. package/dist/build/generate-route-types.js +0 -740
  471. package/dist/build/generate-route-types.js.map +0 -1
  472. package/dist/build/index.d.ts +0 -21
  473. package/dist/build/index.d.ts.map +0 -1
  474. package/dist/build/index.js +0 -21
  475. package/dist/build/index.js.map +0 -1
  476. package/dist/build/route-trie.d.ts +0 -71
  477. package/dist/build/route-trie.d.ts.map +0 -1
  478. package/dist/build/route-trie.js +0 -175
  479. package/dist/build/route-trie.js.map +0 -1
  480. package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
  481. package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
  482. package/dist/cache/__tests__/cache-scope.test.js +0 -208
  483. package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
  484. package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
  485. package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
  486. package/dist/cache/__tests__/document-cache.test.js +0 -345
  487. package/dist/cache/__tests__/document-cache.test.js.map +0 -1
  488. package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
  489. package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
  490. package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
  491. package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
  492. package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
  493. package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
  494. package/dist/cache/__tests__/memory-store.test.js +0 -367
  495. package/dist/cache/__tests__/memory-store.test.js.map +0 -1
  496. package/dist/cache/cache-scope.d.ts +0 -102
  497. package/dist/cache/cache-scope.d.ts.map +0 -1
  498. package/dist/cache/cache-scope.js +0 -440
  499. package/dist/cache/cache-scope.js.map +0 -1
  500. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
  501. package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
  502. package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
  503. package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
  504. package/dist/cache/cf/cf-cache-store.d.ts +0 -165
  505. package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
  506. package/dist/cache/cf/cf-cache-store.js +0 -242
  507. package/dist/cache/cf/cf-cache-store.js.map +0 -1
  508. package/dist/cache/cf/index.d.ts +0 -14
  509. package/dist/cache/cf/index.d.ts.map +0 -1
  510. package/dist/cache/cf/index.js +0 -17
  511. package/dist/cache/cf/index.js.map +0 -1
  512. package/dist/cache/document-cache.d.ts +0 -64
  513. package/dist/cache/document-cache.d.ts.map +0 -1
  514. package/dist/cache/document-cache.js +0 -228
  515. package/dist/cache/document-cache.js.map +0 -1
  516. package/dist/cache/index.d.ts +0 -19
  517. package/dist/cache/index.d.ts.map +0 -1
  518. package/dist/cache/index.js +0 -21
  519. package/dist/cache/index.js.map +0 -1
  520. package/dist/cache/memory-segment-store.d.ts +0 -110
  521. package/dist/cache/memory-segment-store.d.ts.map +0 -1
  522. package/dist/cache/memory-segment-store.js +0 -117
  523. package/dist/cache/memory-segment-store.js.map +0 -1
  524. package/dist/cache/memory-store.d.ts +0 -41
  525. package/dist/cache/memory-store.d.ts.map +0 -1
  526. package/dist/cache/memory-store.js +0 -191
  527. package/dist/cache/memory-store.js.map +0 -1
  528. package/dist/cache/types.d.ts +0 -317
  529. package/dist/cache/types.d.ts.map +0 -1
  530. package/dist/cache/types.js +0 -12
  531. package/dist/cache/types.js.map +0 -1
  532. package/dist/client.d.ts +0 -248
  533. package/dist/client.d.ts.map +0 -1
  534. package/dist/client.js +0 -367
  535. package/dist/client.js.map +0 -1
  536. package/dist/client.rsc.d.ts +0 -26
  537. package/dist/client.rsc.d.ts.map +0 -1
  538. package/dist/client.rsc.js +0 -46
  539. package/dist/client.rsc.js.map +0 -1
  540. package/dist/component-utils.d.ts +0 -36
  541. package/dist/component-utils.d.ts.map +0 -1
  542. package/dist/component-utils.js +0 -61
  543. package/dist/component-utils.js.map +0 -1
  544. package/dist/components/DefaultDocument.d.ts +0 -13
  545. package/dist/components/DefaultDocument.d.ts.map +0 -1
  546. package/dist/components/DefaultDocument.js +0 -15
  547. package/dist/components/DefaultDocument.js.map +0 -1
  548. package/dist/debug.d.ts +0 -58
  549. package/dist/debug.d.ts.map +0 -1
  550. package/dist/debug.js +0 -157
  551. package/dist/debug.js.map +0 -1
  552. package/dist/default-error-boundary.d.ts +0 -11
  553. package/dist/default-error-boundary.d.ts.map +0 -1
  554. package/dist/default-error-boundary.js +0 -45
  555. package/dist/default-error-boundary.js.map +0 -1
  556. package/dist/deps/browser.d.ts +0 -2
  557. package/dist/deps/browser.d.ts.map +0 -1
  558. package/dist/deps/browser.js +0 -3
  559. package/dist/deps/browser.js.map +0 -1
  560. package/dist/deps/html-stream-client.d.ts +0 -2
  561. package/dist/deps/html-stream-client.d.ts.map +0 -1
  562. package/dist/deps/html-stream-client.js +0 -3
  563. package/dist/deps/html-stream-client.js.map +0 -1
  564. package/dist/deps/html-stream-server.d.ts +0 -2
  565. package/dist/deps/html-stream-server.d.ts.map +0 -1
  566. package/dist/deps/html-stream-server.js +0 -3
  567. package/dist/deps/html-stream-server.js.map +0 -1
  568. package/dist/deps/rsc.d.ts +0 -2
  569. package/dist/deps/rsc.d.ts.map +0 -1
  570. package/dist/deps/rsc.js +0 -4
  571. package/dist/deps/rsc.js.map +0 -1
  572. package/dist/deps/ssr.d.ts +0 -2
  573. package/dist/deps/ssr.d.ts.map +0 -1
  574. package/dist/deps/ssr.js +0 -3
  575. package/dist/deps/ssr.js.map +0 -1
  576. package/dist/errors.d.ts +0 -174
  577. package/dist/errors.d.ts.map +0 -1
  578. package/dist/errors.js +0 -241
  579. package/dist/errors.js.map +0 -1
  580. package/dist/handle.d.ts +0 -78
  581. package/dist/handle.d.ts.map +0 -1
  582. package/dist/handle.js +0 -82
  583. package/dist/handle.js.map +0 -1
  584. package/dist/handles/MetaTags.d.ts +0 -14
  585. package/dist/handles/MetaTags.d.ts.map +0 -1
  586. package/dist/handles/MetaTags.js +0 -136
  587. package/dist/handles/MetaTags.js.map +0 -1
  588. package/dist/handles/index.d.ts +0 -6
  589. package/dist/handles/index.d.ts.map +0 -1
  590. package/dist/handles/index.js +0 -6
  591. package/dist/handles/index.js.map +0 -1
  592. package/dist/handles/meta.d.ts +0 -39
  593. package/dist/handles/meta.d.ts.map +0 -1
  594. package/dist/handles/meta.js +0 -202
  595. package/dist/handles/meta.js.map +0 -1
  596. package/dist/host/__tests__/errors.test.d.ts +0 -2
  597. package/dist/host/__tests__/errors.test.d.ts.map +0 -1
  598. package/dist/host/__tests__/errors.test.js +0 -76
  599. package/dist/host/__tests__/errors.test.js.map +0 -1
  600. package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
  601. package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
  602. package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
  603. package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
  604. package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
  605. package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
  606. package/dist/host/__tests__/pattern-matcher.test.js +0 -251
  607. package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
  608. package/dist/host/__tests__/router.test.d.ts +0 -2
  609. package/dist/host/__tests__/router.test.d.ts.map +0 -1
  610. package/dist/host/__tests__/router.test.js +0 -241
  611. package/dist/host/__tests__/router.test.js.map +0 -1
  612. package/dist/host/__tests__/testing.test.d.ts +0 -2
  613. package/dist/host/__tests__/testing.test.d.ts.map +0 -1
  614. package/dist/host/__tests__/testing.test.js +0 -64
  615. package/dist/host/__tests__/testing.test.js.map +0 -1
  616. package/dist/host/__tests__/utils.test.d.ts +0 -2
  617. package/dist/host/__tests__/utils.test.d.ts.map +0 -1
  618. package/dist/host/__tests__/utils.test.js +0 -29
  619. package/dist/host/__tests__/utils.test.js.map +0 -1
  620. package/dist/host/cookie-handler.d.ts +0 -34
  621. package/dist/host/cookie-handler.d.ts.map +0 -1
  622. package/dist/host/cookie-handler.js +0 -124
  623. package/dist/host/cookie-handler.js.map +0 -1
  624. package/dist/host/errors.d.ts +0 -56
  625. package/dist/host/errors.d.ts.map +0 -1
  626. package/dist/host/errors.js +0 -79
  627. package/dist/host/errors.js.map +0 -1
  628. package/dist/host/index.d.ts +0 -29
  629. package/dist/host/index.d.ts.map +0 -1
  630. package/dist/host/index.js +0 -32
  631. package/dist/host/index.js.map +0 -1
  632. package/dist/host/pattern-matcher.d.ts +0 -36
  633. package/dist/host/pattern-matcher.d.ts.map +0 -1
  634. package/dist/host/pattern-matcher.js +0 -172
  635. package/dist/host/pattern-matcher.js.map +0 -1
  636. package/dist/host/router.d.ts +0 -26
  637. package/dist/host/router.d.ts.map +0 -1
  638. package/dist/host/router.js +0 -218
  639. package/dist/host/router.js.map +0 -1
  640. package/dist/host/testing.d.ts +0 -36
  641. package/dist/host/testing.d.ts.map +0 -1
  642. package/dist/host/testing.js +0 -55
  643. package/dist/host/testing.js.map +0 -1
  644. package/dist/host/types.d.ts +0 -115
  645. package/dist/host/types.d.ts.map +0 -1
  646. package/dist/host/types.js +0 -7
  647. package/dist/host/types.js.map +0 -1
  648. package/dist/host/utils.d.ts +0 -21
  649. package/dist/host/utils.d.ts.map +0 -1
  650. package/dist/host/utils.js +0 -23
  651. package/dist/host/utils.js.map +0 -1
  652. package/dist/href-client.d.ts +0 -131
  653. package/dist/href-client.d.ts.map +0 -1
  654. package/dist/href-client.js +0 -64
  655. package/dist/href-client.js.map +0 -1
  656. package/dist/href-context.d.ts +0 -29
  657. package/dist/href-context.d.ts.map +0 -1
  658. package/dist/href-context.js +0 -21
  659. package/dist/href-context.js.map +0 -1
  660. package/dist/index.d.ts +0 -73
  661. package/dist/index.d.ts.map +0 -1
  662. package/dist/index.js +0 -91
  663. package/dist/index.js.map +0 -1
  664. package/dist/index.rsc.d.ts +0 -32
  665. package/dist/index.rsc.d.ts.map +0 -1
  666. package/dist/index.rsc.js +0 -40
  667. package/dist/index.rsc.js.map +0 -1
  668. package/dist/internal-debug.d.ts +0 -2
  669. package/dist/internal-debug.d.ts.map +0 -1
  670. package/dist/internal-debug.js +0 -5
  671. package/dist/internal-debug.js.map +0 -1
  672. package/dist/loader.d.ts +0 -14
  673. package/dist/loader.d.ts.map +0 -1
  674. package/dist/loader.js +0 -20
  675. package/dist/loader.js.map +0 -1
  676. package/dist/loader.rsc.d.ts +0 -19
  677. package/dist/loader.rsc.d.ts.map +0 -1
  678. package/dist/loader.rsc.js +0 -99
  679. package/dist/loader.rsc.js.map +0 -1
  680. package/dist/network-error-thrower.d.ts +0 -17
  681. package/dist/network-error-thrower.d.ts.map +0 -1
  682. package/dist/network-error-thrower.js +0 -14
  683. package/dist/network-error-thrower.js.map +0 -1
  684. package/dist/outlet-context.d.ts +0 -13
  685. package/dist/outlet-context.d.ts.map +0 -1
  686. package/dist/outlet-context.js +0 -3
  687. package/dist/outlet-context.js.map +0 -1
  688. package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
  689. package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
  690. package/dist/prerender/__tests__/param-hash.test.js +0 -148
  691. package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
  692. package/dist/prerender/param-hash.d.ts +0 -16
  693. package/dist/prerender/param-hash.d.ts.map +0 -1
  694. package/dist/prerender/param-hash.js +0 -36
  695. package/dist/prerender/param-hash.js.map +0 -1
  696. package/dist/prerender/store.d.ts +0 -38
  697. package/dist/prerender/store.d.ts.map +0 -1
  698. package/dist/prerender/store.js +0 -61
  699. package/dist/prerender/store.js.map +0 -1
  700. package/dist/prerender.d.ts +0 -66
  701. package/dist/prerender.d.ts.map +0 -1
  702. package/dist/prerender.js +0 -57
  703. package/dist/prerender.js.map +0 -1
  704. package/dist/reverse.d.ts +0 -196
  705. package/dist/reverse.d.ts.map +0 -1
  706. package/dist/reverse.js +0 -78
  707. package/dist/reverse.js.map +0 -1
  708. package/dist/root-error-boundary.d.ts +0 -33
  709. package/dist/root-error-boundary.d.ts.map +0 -1
  710. package/dist/root-error-boundary.js +0 -165
  711. package/dist/root-error-boundary.js.map +0 -1
  712. package/dist/route-content-wrapper.d.ts +0 -46
  713. package/dist/route-content-wrapper.d.ts.map +0 -1
  714. package/dist/route-content-wrapper.js +0 -77
  715. package/dist/route-content-wrapper.js.map +0 -1
  716. package/dist/route-definition.d.ts +0 -421
  717. package/dist/route-definition.d.ts.map +0 -1
  718. package/dist/route-definition.js +0 -868
  719. package/dist/route-definition.js.map +0 -1
  720. package/dist/route-map-builder.d.ts +0 -155
  721. package/dist/route-map-builder.d.ts.map +0 -1
  722. package/dist/route-map-builder.js +0 -237
  723. package/dist/route-map-builder.js.map +0 -1
  724. package/dist/route-types.d.ts +0 -165
  725. package/dist/route-types.d.ts.map +0 -1
  726. package/dist/route-types.js +0 -7
  727. package/dist/route-types.js.map +0 -1
  728. package/dist/router/__tests__/handler-context.test.d.ts +0 -2
  729. package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
  730. package/dist/router/__tests__/handler-context.test.js +0 -65
  731. package/dist/router/__tests__/handler-context.test.js.map +0 -1
  732. package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
  733. package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
  734. package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
  735. package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
  736. package/dist/router/__tests__/match-context.test.d.ts +0 -2
  737. package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
  738. package/dist/router/__tests__/match-context.test.js +0 -92
  739. package/dist/router/__tests__/match-context.test.js.map +0 -1
  740. package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
  741. package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
  742. package/dist/router/__tests__/match-pipelines.test.js +0 -417
  743. package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
  744. package/dist/router/__tests__/match-result.test.d.ts +0 -2
  745. package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
  746. package/dist/router/__tests__/match-result.test.js +0 -457
  747. package/dist/router/__tests__/match-result.test.js.map +0 -1
  748. package/dist/router/__tests__/on-error.test.d.ts +0 -2
  749. package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
  750. package/dist/router/__tests__/on-error.test.js +0 -678
  751. package/dist/router/__tests__/on-error.test.js.map +0 -1
  752. package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
  753. package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
  754. package/dist/router/__tests__/pattern-matching.test.js +0 -629
  755. package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
  756. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
  757. package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
  758. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
  759. package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
  760. package/dist/router/error-handling.d.ts +0 -77
  761. package/dist/router/error-handling.d.ts.map +0 -1
  762. package/dist/router/error-handling.js +0 -202
  763. package/dist/router/error-handling.js.map +0 -1
  764. package/dist/router/handler-context.d.ts +0 -20
  765. package/dist/router/handler-context.d.ts.map +0 -1
  766. package/dist/router/handler-context.js +0 -198
  767. package/dist/router/handler-context.js.map +0 -1
  768. package/dist/router/intercept-resolution.d.ts +0 -66
  769. package/dist/router/intercept-resolution.d.ts.map +0 -1
  770. package/dist/router/intercept-resolution.js +0 -246
  771. package/dist/router/intercept-resolution.js.map +0 -1
  772. package/dist/router/loader-resolution.d.ts +0 -64
  773. package/dist/router/loader-resolution.d.ts.map +0 -1
  774. package/dist/router/loader-resolution.js +0 -284
  775. package/dist/router/loader-resolution.js.map +0 -1
  776. package/dist/router/logging.d.ts +0 -15
  777. package/dist/router/logging.d.ts.map +0 -1
  778. package/dist/router/logging.js +0 -99
  779. package/dist/router/logging.js.map +0 -1
  780. package/dist/router/manifest.d.ts +0 -22
  781. package/dist/router/manifest.d.ts.map +0 -1
  782. package/dist/router/manifest.js +0 -181
  783. package/dist/router/manifest.js.map +0 -1
  784. package/dist/router/match-api.d.ts +0 -35
  785. package/dist/router/match-api.d.ts.map +0 -1
  786. package/dist/router/match-api.js +0 -406
  787. package/dist/router/match-api.js.map +0 -1
  788. package/dist/router/match-context.d.ts +0 -206
  789. package/dist/router/match-context.d.ts.map +0 -1
  790. package/dist/router/match-context.js +0 -17
  791. package/dist/router/match-context.js.map +0 -1
  792. package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
  793. package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
  794. package/dist/router/match-middleware/background-revalidation.js +0 -75
  795. package/dist/router/match-middleware/background-revalidation.js.map +0 -1
  796. package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
  797. package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
  798. package/dist/router/match-middleware/cache-lookup.js +0 -257
  799. package/dist/router/match-middleware/cache-lookup.js.map +0 -1
  800. package/dist/router/match-middleware/cache-store.d.ts +0 -113
  801. package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
  802. package/dist/router/match-middleware/cache-store.js +0 -108
  803. package/dist/router/match-middleware/cache-store.js.map +0 -1
  804. package/dist/router/match-middleware/index.d.ts +0 -81
  805. package/dist/router/match-middleware/index.d.ts.map +0 -1
  806. package/dist/router/match-middleware/index.js +0 -80
  807. package/dist/router/match-middleware/index.js.map +0 -1
  808. package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
  809. package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
  810. package/dist/router/match-middleware/intercept-resolution.js +0 -134
  811. package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
  812. package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
  813. package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
  814. package/dist/router/match-middleware/segment-resolution.js +0 -53
  815. package/dist/router/match-middleware/segment-resolution.js.map +0 -1
  816. package/dist/router/match-pipelines.d.ts +0 -147
  817. package/dist/router/match-pipelines.d.ts.map +0 -1
  818. package/dist/router/match-pipelines.js +0 -82
  819. package/dist/router/match-pipelines.js.map +0 -1
  820. package/dist/router/match-result.d.ts +0 -126
  821. package/dist/router/match-result.d.ts.map +0 -1
  822. package/dist/router/match-result.js +0 -93
  823. package/dist/router/match-result.js.map +0 -1
  824. package/dist/router/metrics.d.ts +0 -20
  825. package/dist/router/metrics.d.ts.map +0 -1
  826. package/dist/router/metrics.js +0 -47
  827. package/dist/router/metrics.js.map +0 -1
  828. package/dist/router/middleware.d.ts +0 -249
  829. package/dist/router/middleware.d.ts.map +0 -1
  830. package/dist/router/middleware.js +0 -434
  831. package/dist/router/middleware.js.map +0 -1
  832. package/dist/router/middleware.test.d.ts +0 -2
  833. package/dist/router/middleware.test.d.ts.map +0 -1
  834. package/dist/router/middleware.test.js +0 -816
  835. package/dist/router/middleware.test.js.map +0 -1
  836. package/dist/router/pattern-matching.d.ts +0 -149
  837. package/dist/router/pattern-matching.d.ts.map +0 -1
  838. package/dist/router/pattern-matching.js +0 -349
  839. package/dist/router/pattern-matching.js.map +0 -1
  840. package/dist/router/revalidation.d.ts +0 -44
  841. package/dist/router/revalidation.d.ts.map +0 -1
  842. package/dist/router/revalidation.js +0 -147
  843. package/dist/router/revalidation.js.map +0 -1
  844. package/dist/router/router-context.d.ts +0 -135
  845. package/dist/router/router-context.d.ts.map +0 -1
  846. package/dist/router/router-context.js +0 -36
  847. package/dist/router/router-context.js.map +0 -1
  848. package/dist/router/segment-resolution.d.ts +0 -127
  849. package/dist/router/segment-resolution.d.ts.map +0 -1
  850. package/dist/router/segment-resolution.js +0 -919
  851. package/dist/router/segment-resolution.js.map +0 -1
  852. package/dist/router/trie-matching.d.ts +0 -40
  853. package/dist/router/trie-matching.d.ts.map +0 -1
  854. package/dist/router/trie-matching.js +0 -127
  855. package/dist/router/trie-matching.js.map +0 -1
  856. package/dist/router/types.d.ts +0 -136
  857. package/dist/router/types.d.ts.map +0 -1
  858. package/dist/router/types.js +0 -7
  859. package/dist/router/types.js.map +0 -1
  860. package/dist/router.d.ts +0 -753
  861. package/dist/router.d.ts.map +0 -1
  862. package/dist/router.gen.d.ts +0 -6
  863. package/dist/router.gen.d.ts.map +0 -1
  864. package/dist/router.gen.js +0 -6
  865. package/dist/router.gen.js.map +0 -1
  866. package/dist/router.js +0 -1304
  867. package/dist/router.js.map +0 -1
  868. package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
  869. package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
  870. package/dist/rsc/__tests__/helpers.test.js +0 -140
  871. package/dist/rsc/__tests__/helpers.test.js.map +0 -1
  872. package/dist/rsc/handler.d.ts +0 -45
  873. package/dist/rsc/handler.d.ts.map +0 -1
  874. package/dist/rsc/handler.js +0 -1172
  875. package/dist/rsc/handler.js.map +0 -1
  876. package/dist/rsc/helpers.d.ts +0 -16
  877. package/dist/rsc/helpers.d.ts.map +0 -1
  878. package/dist/rsc/helpers.js +0 -55
  879. package/dist/rsc/helpers.js.map +0 -1
  880. package/dist/rsc/index.d.ts +0 -22
  881. package/dist/rsc/index.d.ts.map +0 -1
  882. package/dist/rsc/index.js +0 -23
  883. package/dist/rsc/index.js.map +0 -1
  884. package/dist/rsc/nonce.d.ts +0 -9
  885. package/dist/rsc/nonce.d.ts.map +0 -1
  886. package/dist/rsc/nonce.js +0 -18
  887. package/dist/rsc/nonce.js.map +0 -1
  888. package/dist/rsc/types.d.ts +0 -206
  889. package/dist/rsc/types.d.ts.map +0 -1
  890. package/dist/rsc/types.js +0 -8
  891. package/dist/rsc/types.js.map +0 -1
  892. package/dist/search-params.d.ts +0 -103
  893. package/dist/search-params.d.ts.map +0 -1
  894. package/dist/search-params.js +0 -74
  895. package/dist/search-params.js.map +0 -1
  896. package/dist/segment-system.d.ts +0 -75
  897. package/dist/segment-system.d.ts.map +0 -1
  898. package/dist/segment-system.js +0 -336
  899. package/dist/segment-system.js.map +0 -1
  900. package/dist/server/context.d.ts +0 -245
  901. package/dist/server/context.d.ts.map +0 -1
  902. package/dist/server/context.js +0 -197
  903. package/dist/server/context.js.map +0 -1
  904. package/dist/server/fetchable-loader-store.d.ts +0 -18
  905. package/dist/server/fetchable-loader-store.d.ts.map +0 -1
  906. package/dist/server/fetchable-loader-store.js +0 -18
  907. package/dist/server/fetchable-loader-store.js.map +0 -1
  908. package/dist/server/handle-store.d.ts +0 -85
  909. package/dist/server/handle-store.d.ts.map +0 -1
  910. package/dist/server/handle-store.js +0 -142
  911. package/dist/server/handle-store.js.map +0 -1
  912. package/dist/server/loader-registry.d.ts +0 -55
  913. package/dist/server/loader-registry.d.ts.map +0 -1
  914. package/dist/server/loader-registry.js +0 -132
  915. package/dist/server/loader-registry.js.map +0 -1
  916. package/dist/server/request-context.d.ts +0 -226
  917. package/dist/server/request-context.d.ts.map +0 -1
  918. package/dist/server/request-context.js +0 -290
  919. package/dist/server/request-context.js.map +0 -1
  920. package/dist/server/root-layout.d.ts +0 -4
  921. package/dist/server/root-layout.d.ts.map +0 -1
  922. package/dist/server/root-layout.js +0 -5
  923. package/dist/server/root-layout.js.map +0 -1
  924. package/dist/server.d.ts +0 -15
  925. package/dist/server.d.ts.map +0 -1
  926. package/dist/server.js +0 -20
  927. package/dist/server.js.map +0 -1
  928. package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
  929. package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
  930. package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
  931. package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
  932. package/dist/ssr/index.d.ts +0 -98
  933. package/dist/ssr/index.d.ts.map +0 -1
  934. package/dist/ssr/index.js +0 -158
  935. package/dist/ssr/index.js.map +0 -1
  936. package/dist/static-handler.d.ts +0 -50
  937. package/dist/static-handler.d.ts.map +0 -1
  938. package/dist/static-handler.gen.d.ts +0 -5
  939. package/dist/static-handler.gen.d.ts.map +0 -1
  940. package/dist/static-handler.gen.js +0 -5
  941. package/dist/static-handler.gen.js.map +0 -1
  942. package/dist/static-handler.js +0 -29
  943. package/dist/static-handler.js.map +0 -1
  944. package/dist/theme/ThemeProvider.d.ts +0 -20
  945. package/dist/theme/ThemeProvider.d.ts.map +0 -1
  946. package/dist/theme/ThemeProvider.js +0 -240
  947. package/dist/theme/ThemeProvider.js.map +0 -1
  948. package/dist/theme/ThemeScript.d.ts +0 -48
  949. package/dist/theme/ThemeScript.d.ts.map +0 -1
  950. package/dist/theme/ThemeScript.js +0 -13
  951. package/dist/theme/ThemeScript.js.map +0 -1
  952. package/dist/theme/__tests__/theme.test.d.ts +0 -2
  953. package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
  954. package/dist/theme/__tests__/theme.test.js +0 -103
  955. package/dist/theme/__tests__/theme.test.js.map +0 -1
  956. package/dist/theme/constants.d.ts +0 -29
  957. package/dist/theme/constants.d.ts.map +0 -1
  958. package/dist/theme/constants.js +0 -48
  959. package/dist/theme/constants.js.map +0 -1
  960. package/dist/theme/index.d.ts +0 -31
  961. package/dist/theme/index.d.ts.map +0 -1
  962. package/dist/theme/index.js +0 -36
  963. package/dist/theme/index.js.map +0 -1
  964. package/dist/theme/theme-context.d.ts +0 -40
  965. package/dist/theme/theme-context.d.ts.map +0 -1
  966. package/dist/theme/theme-context.js +0 -60
  967. package/dist/theme/theme-context.js.map +0 -1
  968. package/dist/theme/theme-script.d.ts +0 -27
  969. package/dist/theme/theme-script.d.ts.map +0 -1
  970. package/dist/theme/theme-script.js +0 -147
  971. package/dist/theme/theme-script.js.map +0 -1
  972. package/dist/theme/types.d.ts +0 -163
  973. package/dist/theme/types.d.ts.map +0 -1
  974. package/dist/theme/types.js +0 -11
  975. package/dist/theme/types.js.map +0 -1
  976. package/dist/theme/use-theme.d.ts +0 -12
  977. package/dist/theme/use-theme.d.ts.map +0 -1
  978. package/dist/theme/use-theme.js +0 -40
  979. package/dist/theme/use-theme.js.map +0 -1
  980. package/dist/types.d.ts +0 -1479
  981. package/dist/types.d.ts.map +0 -1
  982. package/dist/types.js +0 -10
  983. package/dist/types.js.map +0 -1
  984. package/dist/urls.d.ts +0 -441
  985. package/dist/urls.d.ts.map +0 -1
  986. package/dist/urls.gen.d.ts +0 -8
  987. package/dist/urls.gen.d.ts.map +0 -1
  988. package/dist/urls.gen.js +0 -8
  989. package/dist/urls.gen.js.map +0 -1
  990. package/dist/urls.js +0 -443
  991. package/dist/urls.js.map +0 -1
  992. package/dist/use-loader.d.ts +0 -127
  993. package/dist/use-loader.d.ts.map +0 -1
  994. package/dist/use-loader.js +0 -237
  995. package/dist/use-loader.js.map +0 -1
  996. package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
  997. package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
  998. package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
  999. package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
  1000. package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
  1001. package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
  1002. package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
  1003. package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
  1004. package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
  1005. package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
  1006. package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
  1007. package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
  1008. package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
  1009. package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
  1010. package/dist/vite/__tests__/expose-router-id.test.js +0 -39
  1011. package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
  1012. package/dist/vite/ast-handler-extract.d.ts +0 -49
  1013. package/dist/vite/ast-handler-extract.d.ts.map +0 -1
  1014. package/dist/vite/ast-handler-extract.js +0 -249
  1015. package/dist/vite/ast-handler-extract.js.map +0 -1
  1016. package/dist/vite/expose-action-id.d.ts +0 -19
  1017. package/dist/vite/expose-action-id.d.ts.map +0 -1
  1018. package/dist/vite/expose-action-id.js +0 -250
  1019. package/dist/vite/expose-action-id.js.map +0 -1
  1020. package/dist/vite/expose-id-utils.d.ts +0 -69
  1021. package/dist/vite/expose-id-utils.d.ts.map +0 -1
  1022. package/dist/vite/expose-id-utils.js +0 -289
  1023. package/dist/vite/expose-id-utils.js.map +0 -1
  1024. package/dist/vite/expose-internal-ids.d.ts +0 -22
  1025. package/dist/vite/expose-internal-ids.d.ts.map +0 -1
  1026. package/dist/vite/expose-internal-ids.js +0 -886
  1027. package/dist/vite/expose-internal-ids.js.map +0 -1
  1028. package/dist/vite/index.d.ts +0 -149
  1029. package/dist/vite/index.d.ts.map +0 -1
  1030. package/dist/vite/index.js.bak +0 -5448
  1031. package/dist/vite/index.js.map +0 -1
  1032. package/dist/vite/index.named-routes.gen.ts +0 -103
  1033. package/dist/vite/package-resolution.d.ts +0 -43
  1034. package/dist/vite/package-resolution.d.ts.map +0 -1
  1035. package/dist/vite/package-resolution.js +0 -112
  1036. package/dist/vite/package-resolution.js.map +0 -1
  1037. package/dist/vite/virtual-entries.d.ts +0 -25
  1038. package/dist/vite/virtual-entries.d.ts.map +0 -1
  1039. package/dist/vite/virtual-entries.js +0 -110
  1040. package/dist/vite/virtual-entries.js.map +0 -1
  1041. package/src/browser/action-response-classifier.ts +0 -99
@@ -2,7 +2,12 @@ import type { Plugin, ResolvedConfig } from "vite";
2
2
  import { parseAst } from "vite";
3
3
  import MagicString from "magic-string";
4
4
  import path from "node:path";
5
- import { normalizePath, hashId, detectImports } from "./expose-id-utils.js";
5
+ import {
6
+ normalizePath,
7
+ hashId,
8
+ makeStubId,
9
+ detectImports,
10
+ } from "./expose-id-utils.js";
6
11
  import {
7
12
  transformInlineHandlers,
8
13
  type VirtualHandlerEntry,
@@ -23,6 +28,7 @@ import {
23
28
  getImportedFnNames,
24
29
  collectCreateExportBindings,
25
30
  buildUnsupportedShapeWarning,
31
+ findUnsupportedCreateCallSites,
26
32
  isExportOnlyFile,
27
33
  } from "./expose-ids/export-analysis.js";
28
34
  import {
@@ -34,10 +40,12 @@ import {
34
40
  transformHandles,
35
41
  transformLocationState,
36
42
  generateWholeFileStubs,
37
- generateExprStubs,
38
43
  stubHandlerExprs,
39
44
  transformHandlerIds,
40
45
  } from "./expose-ids/handler-transform.js";
46
+ import { createRangoDebugger, createCounter, NS } from "../debug.js";
47
+
48
+ const debug = createRangoDebugger(NS.transform);
41
49
 
42
50
  // Re-exports consumed by other packages/plugins
43
51
  export { exposeRouterId } from "./expose-ids/router-transform.js";
@@ -82,10 +90,16 @@ export function exposeInternalIds(options?: { forceBuild?: boolean }): Plugin {
82
90
  // De-duplicate unsupported shape warnings across repeated transforms.
83
91
  const unsupportedShapeWarnings = new Set<string>();
84
92
 
93
+ const counter = createCounter(debug, "expose-internal-ids");
94
+
85
95
  return {
86
96
  name: "@rangojs/router:expose-internal-ids",
87
97
  enforce: "post",
88
98
 
99
+ buildEnd() {
100
+ counter?.flush();
101
+ },
102
+
89
103
  api: {
90
104
  prerenderHandlerModules,
91
105
  staticHandlerModules,
@@ -228,534 +242,555 @@ ${lazyImports.join(",\n")}
228
242
  transform(code, id) {
229
243
  if (id.includes("/node_modules/")) return;
230
244
 
231
- const filePath = normalizePath(path.relative(projectRoot, id));
232
- const isRscEnv = this.environment?.name === "rsc";
233
-
234
- // Warn if named-routes.gen is imported in a client component.
235
- // NamedRoutes is server-only data and would bloat the client bundle.
236
- if (
237
- id.includes(".named-routes.gen.") &&
238
- !isRscEnv &&
239
- this.environment?.name === "client"
240
- ) {
241
- this.warn(
242
- `\n` +
243
- `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n` +
244
- `!! !!\n` +
245
- `!! WARNING: NamedRoutes imported in a CLIENT component! !!\n` +
246
- `!! !!\n` +
247
- `!! File: ${filePath.padEnd(53)}!!\n` +
248
- `!! !!\n` +
249
- `!! NamedRoutes contains your entire route structure — every !!\n` +
250
- `!! route name and URL pattern in your application. Shipping !!\n` +
251
- `!! this to the browser exposes your full routing topology to !!\n` +
252
- `!! the client, which is a security concern (internal/admin !!\n` +
253
- `!! routes, API endpoints, hidden paths become visible). !!\n` +
254
- `!! !!\n` +
255
- `!! It also bloats the client bundle — this map contains all !!\n` +
256
- `!! named routes in your application. !!\n` +
257
- `!! !!\n` +
258
- `!! Fix: remove the import or move it to a server component. !!\n` +
259
- `!! !!\n` +
260
- `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n`,
261
- );
262
- }
263
-
264
- // Fast exit: if the file doesn't import from @rangojs/router at all,
265
- // skip all create* analysis and transforms.
266
- if (!code.includes("@rangojs/router")) return;
267
-
268
- // Detect all relevant imports in one pass
269
- const has = detectImports(code);
270
-
271
- // Quick bail-out: also check for raw create* identifiers.
272
- // This is safe even with aliases (e.g., `import { createLoader as cl }`)
273
- // because the import statement itself always contains the canonical name
274
- // "createLoader", so code.includes("createLoader") will still match.
275
- const hasLoaderCode = has.loader && code.includes("createLoader");
276
- const hasHandleCode = has.handle && code.includes("createHandle");
277
- const hasLocationStateCode =
278
- has.locationState && code.includes("createLocationState");
279
- const hasPrerenderHandlerCode =
280
- has.prerenderHandler && code.includes("Prerender");
281
- const hasStaticHandlerCode = has.staticHandler && code.includes("Static");
282
- if (
283
- !hasLoaderCode &&
284
- !hasHandleCode &&
285
- !hasLocationStateCode &&
286
- !hasPrerenderHandlerCode &&
287
- !hasStaticHandlerCode
288
- ) {
289
- return;
290
- }
245
+ const __t0 = counter ? performance.now() : 0;
246
+ try {
247
+ const filePath = normalizePath(path.relative(projectRoot, id));
248
+ const isRscEnv = this.environment?.name === "rsc";
291
249
 
292
- // Per-invocation caches to avoid redundant AST parsing.
293
- // getImportedFnNames is cached by canonical name (imports never change).
294
- // collectCreateExportBindings is cached by fnNames key; the cache is
295
- // cleared when `code` changes (e.g., after inline handler extraction).
296
- const _fnNamesCache = new Map<string, string[]>();
297
- const _bindingsCache = new Map<string, CreateExportBinding[]>();
298
- let _cachedAst: any;
299
- let _astParseFailed = false;
300
- let _astCodeRef = code;
301
-
302
- const getFnNames = (canonicalName: string): string[] => {
303
- let result = _fnNamesCache.get(canonicalName);
304
- if (!result) {
305
- result = getImportedFnNames(code, canonicalName);
306
- _fnNamesCache.set(canonicalName, result);
307
- }
308
- return result;
309
- };
310
-
311
- // Lazy AST parse: parsed once and shared across all
312
- // collectCreateExportBindings calls for the same code string.
313
- const lazyAst = (): any | undefined => {
314
- if (code !== _astCodeRef) {
315
- _cachedAst = undefined;
316
- _astParseFailed = false;
317
- _astCodeRef = code;
318
- }
319
- if (_cachedAst !== undefined || _astParseFailed) return _cachedAst;
320
- try {
321
- _cachedAst = parseAst(code, { jsx: true });
322
- } catch {
323
- _astParseFailed = true;
324
- }
325
- return _cachedAst;
326
- };
327
-
328
- const getBindings = (
329
- currentCode: string,
330
- fnNames: string[],
331
- ): CreateExportBinding[] => {
332
- const key = fnNames.join("\0");
333
- let result = _bindingsCache.get(key);
334
- if (!result) {
335
- result = collectCreateExportBindings(currentCode, fnNames, lazyAst());
336
- _bindingsCache.set(key, result);
250
+ // Warn if named-routes.gen is imported in a client component.
251
+ // NamedRoutes is server-only data and would bloat the client bundle.
252
+ if (
253
+ id.includes(".named-routes.gen.") &&
254
+ !isRscEnv &&
255
+ this.environment?.name === "client"
256
+ ) {
257
+ this.warn(
258
+ `\n` +
259
+ `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n` +
260
+ `!! !!\n` +
261
+ `!! WARNING: NamedRoutes imported in a CLIENT component! !!\n` +
262
+ `!! !!\n` +
263
+ `!! File: ${filePath.padEnd(53)}!!\n` +
264
+ `!! !!\n` +
265
+ `!! NamedRoutes contains your entire route structure — every !!\n` +
266
+ `!! route name and URL pattern in your application. Shipping !!\n` +
267
+ `!! this to the browser exposes your full routing topology to !!\n` +
268
+ `!! the client, which is a security concern (internal/admin !!\n` +
269
+ `!! routes, API endpoints, hidden paths become visible). !!\n` +
270
+ `!! !!\n` +
271
+ `!! It also bloats the client bundle this map contains all !!\n` +
272
+ `!! named routes in your application. !!\n` +
273
+ `!! !!\n` +
274
+ `!! Fix: remove the import or move it to a server component. !!\n` +
275
+ `!! !!\n` +
276
+ `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n`,
277
+ );
337
278
  }
338
- return result;
339
- };
340
-
341
- // Warn on create* declaration shapes that are currently unsupported by
342
- // non-AST transforms (loader/handle/locationState only).
343
- for (const cfg of STRICT_CREATE_CONFIGS) {
344
- const hasCode =
345
- cfg.fnName === "createLoader"
346
- ? hasLoaderCode
347
- : cfg.fnName === "createHandle"
348
- ? hasHandleCode
349
- : hasLocationStateCode;
350
- if (!hasCode) continue;
351
-
352
- const fnNames = getFnNames(cfg.fnName);
353
- const totalCalls = countCreateCallsForNames(code, fnNames);
354
- const supportedBindings = getBindings(code, fnNames).length;
355
- if (totalCalls <= supportedBindings) continue;
356
-
357
- const warnKey = `${id}::${cfg.fnName}`;
358
- if (unsupportedShapeWarnings.has(warnKey)) continue;
359
- unsupportedShapeWarnings.add(warnKey);
360
- this.warn(buildUnsupportedShapeWarning(filePath, cfg.fnName));
361
- }
362
279
 
363
- // --- Loader: track for manifest (RSC env only) ---
364
- if (hasLoaderCode && isRscEnv) {
365
- const fnNames = getFnNames("createLoader");
366
- const bindings = getBindings(code, fnNames);
367
- for (const binding of bindings) {
368
- const exportName = binding.exportNames[0];
369
- const hashedId = hashId(filePath, exportName);
370
- loaderRegistry.set(hashedId, {
371
- filePath,
372
- exportName,
373
- });
280
+ // Fast exit: if the file doesn't import from @rangojs/router at all,
281
+ // skip all create* analysis and transforms.
282
+ if (!code.includes("@rangojs/router")) return;
283
+
284
+ // Detect all relevant imports in one pass
285
+ const has = detectImports(code);
286
+
287
+ // Quick bail-out: also check for raw create* identifiers.
288
+ // This is safe even with aliases (e.g., `import { createLoader as cl }`)
289
+ // because the import statement itself always contains the canonical name
290
+ // "createLoader", so code.includes("createLoader") will still match.
291
+ const hasLoaderCode = has.loader && code.includes("createLoader");
292
+ const hasHandleCode = has.handle && code.includes("createHandle");
293
+ const hasLocationStateCode =
294
+ has.locationState && code.includes("createLocationState");
295
+ const hasPrerenderHandlerCode =
296
+ has.prerenderHandler && code.includes("Prerender");
297
+ const hasStaticHandlerCode =
298
+ has.staticHandler && code.includes("Static");
299
+ if (
300
+ !hasLoaderCode &&
301
+ !hasHandleCode &&
302
+ !hasLocationStateCode &&
303
+ !hasPrerenderHandlerCode &&
304
+ !hasStaticHandlerCode
305
+ ) {
306
+ return;
374
307
  }
375
- }
376
308
 
377
- // --- Loader: client stubs for non-RSC environments ---
378
- if (hasLoaderCode && !isRscEnv) {
379
- const fnNames = getFnNames("createLoader");
380
- const bindings = getBindings(code, fnNames);
381
- const stubResult = generateClientLoaderStubs(
382
- bindings,
383
- code,
384
- filePath,
385
- isBuild,
386
- );
387
- if (stubResult) return stubResult;
388
- }
309
+ // Per-invocation caches to avoid redundant AST parsing.
310
+ // getImportedFnNames is cached by canonical name (imports never change).
311
+ // collectCreateExportBindings is cached by fnNames key; the cache is
312
+ // cleared when `code` changes (e.g., after inline handler extraction).
313
+ const _fnNamesCache = new Map<string, string[]>();
314
+ const _bindingsCache = new Map<string, CreateExportBinding[]>();
315
+ let _cachedAst: any;
316
+ let _astParseFailed = false;
317
+ let _astCodeRef = code;
318
+
319
+ const getFnNames = (canonicalName: string): string[] => {
320
+ let result = _fnNamesCache.get(canonicalName);
321
+ if (!result) {
322
+ result = getImportedFnNames(code, canonicalName);
323
+ _fnNamesCache.set(canonicalName, result);
324
+ }
325
+ return result;
326
+ };
327
+
328
+ // Lazy AST parse: parsed once and shared across all
329
+ // collectCreateExportBindings calls for the same code string.
330
+ const lazyAst = (): any | undefined => {
331
+ if (code !== _astCodeRef) {
332
+ _cachedAst = undefined;
333
+ _astParseFailed = false;
334
+ _astCodeRef = code;
335
+ }
336
+ if (_cachedAst !== undefined || _astParseFailed) return _cachedAst;
337
+ try {
338
+ _cachedAst = parseAst(code, { lang: "tsx" });
339
+ } catch {
340
+ _astParseFailed = true;
341
+ }
342
+ return _cachedAst;
343
+ };
344
+
345
+ const getBindings = (
346
+ currentCode: string,
347
+ fnNames: string[],
348
+ ): CreateExportBinding[] => {
349
+ const key = fnNames.join("\0");
350
+ let result = _bindingsCache.get(key);
351
+ if (!result) {
352
+ result = collectCreateExportBindings(
353
+ currentCode,
354
+ fnNames,
355
+ lazyAst(),
356
+ );
357
+ _bindingsCache.set(key, result);
358
+ }
359
+ return result;
360
+ };
361
+
362
+ // Warn on create* declaration shapes that are currently unsupported by
363
+ // non-AST transforms (loader/handle/locationState only).
364
+ for (const cfg of STRICT_CREATE_CONFIGS) {
365
+ const hasCode =
366
+ cfg.fnName === "createLoader"
367
+ ? hasLoaderCode
368
+ : cfg.fnName === "createHandle"
369
+ ? hasHandleCode
370
+ : hasLocationStateCode;
371
+ if (!hasCode) continue;
389
372
 
390
- // --- PrerenderHandler: non-RSC whole-file stub replacement ---
391
- // When ALL exports are Prerender() calls, replace the entire file.
392
- // Mixed-export files are handled in the unified pipeline below.
393
- if (hasPrerenderHandlerCode && !isRscEnv) {
394
- const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
395
- const bindings = getBindings(code, fnNames);
396
- const wholeFile = generateWholeFileStubs(
397
- PRERENDER_CONFIG,
398
- bindings,
399
- code,
400
- filePath,
401
- isBuild,
402
- );
403
- if (wholeFile) return wholeFile;
404
- }
373
+ const fnNames = getFnNames(cfg.fnName);
374
+ // Locate the real (comment/string-free) create* calls not covered by
375
+ // a supported, id-injectable export shape. Empty means every call is
376
+ // fine in particular, a create*() token in a comment or string no
377
+ // longer trips a spurious warning.
378
+ const sites = findUnsupportedCreateCallSites(
379
+ code,
380
+ fnNames,
381
+ getBindings(code, fnNames),
382
+ );
383
+ if (sites.length === 0) continue;
405
384
 
406
- // --- PrerenderHandler: RSC build module tracking ---
407
- if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
408
- const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
409
- const exportNames = getBindings(code, fnNames).map(
410
- (b) => b.exportNames[0],
411
- );
412
- if (exportNames.length > 0) {
413
- prerenderHandlerModules.set(id, exportNames);
385
+ const warnKey = `${id}::${cfg.fnName}`;
386
+ if (unsupportedShapeWarnings.has(warnKey)) continue;
387
+ unsupportedShapeWarnings.add(warnKey);
388
+ this.warn(buildUnsupportedShapeWarning(filePath, cfg.fnName, sites));
414
389
  }
415
- }
416
390
 
417
- // --- Inline handler extraction to virtual modules ---
418
- // Runs before stubs/tracking so inline calls become imports, then
419
- // the existing regex fast path handles both the original file's
420
- // export const patterns and the virtual modules independently.
421
- //
422
- // Cheap pre-check: count total fnName( occurrences vs export const
423
- // patterns. If they match, every call is a named export and the
424
- // regex fast path handles them -- skip the AST parse entirely.
425
- //
426
- // Each iteration creates a fresh MagicString so that AST positions
427
- // from findHandlerCalls always match the string they were parsed from.
428
- let changed = false;
429
-
430
- const handlerConfigs = [
431
- hasStaticHandlerCode && STATIC_CONFIG,
432
- hasPrerenderHandlerCode && PRERENDER_CONFIG,
433
- ]
434
- .filter((c): c is HandlerTransformConfig => !!c)
435
- .map((cfg) => {
436
- const fnNames = getFnNames(cfg.fnName);
437
- return { cfg, fnNames };
438
- });
439
-
440
- for (const { cfg, fnNames } of handlerConfigs) {
441
- const totalCalls = countCreateCallsForNames(code, fnNames);
442
- const supportedBindings = getBindings(code, fnNames).length;
443
-
444
- if (totalCalls > supportedBindings) {
445
- const iterS = new MagicString(code);
446
- const result = transformInlineHandlers(
447
- cfg.fnName,
448
- VIRTUAL_HANDLER_PREFIX,
449
- iterS,
391
+ // --- Loader: track for manifest (RSC env only) ---
392
+ if (hasLoaderCode && isRscEnv) {
393
+ const fnNames = getFnNames("createLoader");
394
+ const bindings = getBindings(code, fnNames);
395
+ for (const binding of bindings) {
396
+ const exportName = binding.exportNames[0];
397
+ const hashedId = hashId(filePath, exportName);
398
+ loaderRegistry.set(hashedId, {
399
+ filePath,
400
+ exportName,
401
+ });
402
+ }
403
+ }
404
+
405
+ // --- Loader: client stubs for non-RSC environments ---
406
+ if (hasLoaderCode && !isRscEnv) {
407
+ const fnNames = getFnNames("createLoader");
408
+ const bindings = getBindings(code, fnNames);
409
+ const stubResult = generateClientLoaderStubs(
410
+ bindings,
450
411
  code,
451
412
  filePath,
452
- virtualHandlers,
453
- id,
454
- parseAst,
413
+ isBuild,
455
414
  );
456
- if (result) {
457
- changed = true;
458
- code = iterS.toString();
459
- _bindingsCache.clear();
460
- }
415
+ if (stubResult) return stubResult;
461
416
  }
462
- }
463
417
 
464
- // --- StaticHandler: non-RSC whole-file stub replacement ---
465
- // When ALL exports are Static() calls, replace the entire file.
466
- if (hasStaticHandlerCode && !isRscEnv) {
467
- const fnNames = getFnNames(STATIC_CONFIG.fnName);
468
- const bindings = getBindings(code, fnNames);
469
- const wholeFile = generateWholeFileStubs(
470
- STATIC_CONFIG,
471
- bindings,
472
- code,
473
- filePath,
474
- isBuild,
475
- );
476
- if (wholeFile) return wholeFile;
477
- }
418
+ // --- PrerenderHandler: non-RSC whole-file stub replacement ---
419
+ // When ALL exports are Prerender() calls, replace the entire file.
420
+ // Mixed-export files are handled in the unified pipeline below.
421
+ if (hasPrerenderHandlerCode && !isRscEnv) {
422
+ const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
423
+ const bindings = getBindings(code, fnNames);
424
+ const wholeFile = generateWholeFileStubs(
425
+ PRERENDER_CONFIG,
426
+ bindings,
427
+ code,
428
+ filePath,
429
+ isBuild,
430
+ );
431
+ if (wholeFile) return wholeFile;
432
+ }
433
+
434
+ // --- Inline handler extraction to virtual modules ---
435
+ // Runs before stubs/tracking so inline calls become imports, then
436
+ // the existing regex fast path handles both the original file's
437
+ // export const patterns and the virtual modules independently.
438
+ //
439
+ // Cheap pre-check: count total fnName( occurrences vs export const
440
+ // patterns. If they match, every call is a named export and the
441
+ // regex fast path handles them -- skip the AST parse entirely.
442
+ //
443
+ // Each iteration creates a fresh MagicString so that AST positions
444
+ // from findHandlerCalls always match the string they were parsed from.
445
+ let changed = false;
446
+
447
+ const handlerConfigs = [
448
+ hasStaticHandlerCode && STATIC_CONFIG,
449
+ hasPrerenderHandlerCode && PRERENDER_CONFIG,
450
+ ]
451
+ .filter((c): c is HandlerTransformConfig => !!c)
452
+ .map((cfg) => {
453
+ const fnNames = getFnNames(cfg.fnName);
454
+ return { cfg, fnNames };
455
+ });
478
456
 
479
- // --- Mixed-type whole-file stub replacement (non-RSC) ---
480
- // When the individual whole-file checks above fail (each only checks
481
- // one type), the file has mixed exports (e.g. createLoader + Prerender).
482
- // Gather ALL stub-safe bindings and check if they cover every export.
483
- // If yes, replace the entire file with stubs — this strips server-only
484
- // imports (node:fs, DB clients, etc.) that would crash in the browser.
485
- //
486
- // Only applies when the file contains Prerender/Static (the handler
487
- // types that bring server-only code). Files with only loaders, handles,
488
- // or locationState are handled correctly by the unified pipeline below.
489
- //
490
- // Loader, Prerender, and Static exports become plain { __brand, $$id }
491
- // stubs. createHandle and createLocationState need their create*()
492
- // functions to execute (collect registration / __rsc_ls_key), so their
493
- // call expressions are preserved with only a @rangojs/router import.
494
- // This strips all server-only imports while keeping the correct
495
- // client contract for every export type.
496
- if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
497
- const prerenderFnNames = hasPrerenderHandlerCode
498
- ? getFnNames(PRERENDER_CONFIG.fnName)
499
- : [];
500
- const staticFnNames = hasStaticHandlerCode
501
- ? getFnNames(STATIC_CONFIG.fnName)
502
- : [];
503
- const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
504
- const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
505
- const lsFnNames = hasLocationStateCode
506
- ? getFnNames("createLocationState")
507
- : [];
508
-
509
- // Collect ALL recognized bindings to check export coverage
510
- const allBindings: CreateExportBinding[] = [];
511
- for (const fnNames of [
512
- prerenderFnNames,
513
- staticFnNames,
514
- loaderFnNames,
515
- handleFnNames,
516
- lsFnNames,
517
- ]) {
518
- if (fnNames.length > 0) {
519
- allBindings.push(...getBindings(code, fnNames));
457
+ for (const { cfg, fnNames } of handlerConfigs) {
458
+ const totalCalls = countCreateCallsForNames(code, fnNames);
459
+ const supportedBindings = getBindings(code, fnNames).length;
460
+
461
+ if (totalCalls > supportedBindings) {
462
+ const iterS = new MagicString(code);
463
+ const result = transformInlineHandlers(
464
+ cfg.fnName,
465
+ VIRTUAL_HANDLER_PREFIX,
466
+ iterS,
467
+ code,
468
+ filePath,
469
+ virtualHandlers,
470
+ id,
471
+ parseAst,
472
+ );
473
+ if (result) {
474
+ changed = true;
475
+ code = iterS.toString();
476
+ _bindingsCache.clear();
477
+ }
520
478
  }
521
479
  }
522
480
 
523
- // Check if preserved createHandle/createLocationState calls
524
- // reference non-exported locals (e.g. helper functions, constants).
525
- // If so, the whole-file stub would strip those locals, breaking
526
- // the call. Fall through to the unified pipeline instead.
527
- let canStubWholeFile =
528
- allBindings.length > 0 && isExportOnlyFile(code, allBindings);
481
+ // --- StaticHandler: non-RSC whole-file stub replacement ---
482
+ // When ALL exports are Static() calls, replace the entire file.
483
+ if (hasStaticHandlerCode && !isRscEnv) {
484
+ const fnNames = getFnNames(STATIC_CONFIG.fnName);
485
+ const bindings = getBindings(code, fnNames);
486
+ const wholeFile = generateWholeFileStubs(
487
+ STATIC_CONFIG,
488
+ bindings,
489
+ code,
490
+ filePath,
491
+ isBuild,
492
+ );
493
+ if (wholeFile) return wholeFile;
494
+ }
529
495
 
530
- if (
531
- canStubWholeFile &&
532
- (handleFnNames.length > 0 || lsFnNames.length > 0)
533
- ) {
534
- const exportedLocals = new Set(allBindings.map((b) => b.localName));
535
- // Collect all bindings that would be stripped: local declarations
536
- // AND imported bindings (except @rangojs/router which we re-import).
537
- const strippedBindings: string[] = [];
538
-
539
- // Local declarations: const/let/var/function
540
- const localDeclPattern =
541
- /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
542
- let declMatch: RegExpExecArray | null;
543
- while ((declMatch = localDeclPattern.exec(code)) !== null) {
544
- if (!exportedLocals.has(declMatch[1])) {
545
- strippedBindings.push(declMatch[1]);
496
+ // --- Mixed-type whole-file stub replacement (non-RSC) ---
497
+ // When the individual whole-file checks above fail (each only checks
498
+ // one type), the file has mixed exports (e.g. createLoader + Prerender).
499
+ // Gather ALL stub-safe bindings and check if they cover every export.
500
+ // If yes, replace the entire file with stubs — this strips server-only
501
+ // imports (node:fs, DB clients, etc.) that would crash in the browser.
502
+ //
503
+ // Only applies when the file contains Prerender/Static (the handler
504
+ // types that bring server-only code). Files with only loaders, handles,
505
+ // or locationState are handled correctly by the unified pipeline below.
506
+ //
507
+ // Loader, Prerender, and Static exports become plain { __brand, $$id }
508
+ // stubs. createHandle and createLocationState need their create*()
509
+ // functions to execute (collect registration / __rsc_ls_key), so their
510
+ // call expressions are preserved with only a @rangojs/router import.
511
+ // This strips all server-only imports while keeping the correct
512
+ // client contract for every export type.
513
+ if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
514
+ const prerenderFnNames = hasPrerenderHandlerCode
515
+ ? getFnNames(PRERENDER_CONFIG.fnName)
516
+ : [];
517
+ const staticFnNames = hasStaticHandlerCode
518
+ ? getFnNames(STATIC_CONFIG.fnName)
519
+ : [];
520
+ const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
521
+ const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
522
+ const lsFnNames = hasLocationStateCode
523
+ ? getFnNames("createLocationState")
524
+ : [];
525
+
526
+ // Collect ALL recognized bindings to check export coverage
527
+ const allBindings: CreateExportBinding[] = [];
528
+ for (const fnNames of [
529
+ prerenderFnNames,
530
+ staticFnNames,
531
+ loaderFnNames,
532
+ handleFnNames,
533
+ lsFnNames,
534
+ ]) {
535
+ if (fnNames.length > 0) {
536
+ allBindings.push(...getBindings(code, fnNames));
546
537
  }
547
538
  }
548
539
 
549
- // Imported bindings from non-@rangojs/router modules
550
- const importPattern =
551
- /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
552
- let importMatch: RegExpExecArray | null;
553
- while ((importMatch = importPattern.exec(code)) !== null) {
554
- for (const spec of importMatch[1].split(",")) {
555
- const m = spec
556
- .trim()
557
- .match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
558
- if (m) strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
540
+ // Check if preserved createHandle/createLocationState calls
541
+ // reference non-exported locals (e.g. helper functions, constants).
542
+ // If so, the whole-file stub would strip those locals, breaking
543
+ // the call. Fall through to the unified pipeline instead.
544
+ let canStubWholeFile =
545
+ allBindings.length > 0 && isExportOnlyFile(code, allBindings);
546
+
547
+ if (
548
+ canStubWholeFile &&
549
+ (handleFnNames.length > 0 || lsFnNames.length > 0)
550
+ ) {
551
+ const exportedLocals = new Set(allBindings.map((b) => b.localName));
552
+ // Collect bindings that would be stripped by whole-file replacement:
553
+ // local declarations and imported bindings from non-@rangojs/router
554
+ // modules. This is a regex-based heuristic — it intentionally skips
555
+ // edge cases (class decls, destructured bindings, combined
556
+ // default+named imports) since those rarely appear in route files.
557
+ const strippedBindings: string[] = [];
558
+
559
+ // Skip React Fast Refresh temporaries (_c, _c2, ...) which are
560
+ // injected by @vitejs/plugin-react in the client environment and
561
+ // would falsely trigger the bailout.
562
+ const localDeclPattern =
563
+ /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
564
+ let declMatch: RegExpExecArray | null;
565
+ while ((declMatch = localDeclPattern.exec(code)) !== null) {
566
+ const name = declMatch[1];
567
+ if (!exportedLocals.has(name) && !/^_c\d*$/.test(name)) {
568
+ strippedBindings.push(name);
569
+ }
559
570
  }
560
- }
561
- // Default imports from non-@rangojs/router modules
562
- const defaultImportPattern =
563
- /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
564
- while ((importMatch = defaultImportPattern.exec(code)) !== null) {
565
- strippedBindings.push(importMatch[1]);
566
- }
567
571
 
568
- if (strippedBindings.length > 0) {
569
- const preservedBindings = allBindings.filter((b) => {
570
- const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
571
- return (
572
- handleFnNames.some((n) => fc.includes(n)) ||
573
- lsFnNames.some((n) => fc.includes(n))
574
- );
575
- });
576
- canStubWholeFile = !preservedBindings.some((b) => {
577
- const expr = code.slice(b.callExprStart, b.callCloseParenPos + 1);
578
- return strippedBindings.some((name) =>
579
- new RegExp(`\\b${name}\\b`).test(expr),
572
+ const importPattern =
573
+ /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
574
+ let importMatch: RegExpExecArray | null;
575
+ while ((importMatch = importPattern.exec(code)) !== null) {
576
+ for (const spec of importMatch[1].split(",")) {
577
+ const m = spec
578
+ .trim()
579
+ .match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
580
+ if (m)
581
+ strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
582
+ }
583
+ }
584
+ const defaultImportPattern =
585
+ /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
586
+ while ((importMatch = defaultImportPattern.exec(code)) !== null) {
587
+ strippedBindings.push(importMatch[1]);
588
+ }
589
+ const nsImportPattern =
590
+ /import\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
591
+ while ((importMatch = nsImportPattern.exec(code)) !== null) {
592
+ strippedBindings.push(importMatch[1]);
593
+ }
594
+
595
+ if (strippedBindings.length > 0) {
596
+ const preservedBindings = allBindings.filter((b) => {
597
+ const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
598
+ return (
599
+ handleFnNames.some((n) => fc.includes(n)) ||
600
+ lsFnNames.some((n) => fc.includes(n))
601
+ );
602
+ });
603
+ const strippedRe = new RegExp(
604
+ `\\b(?:${strippedBindings.join("|")})\\b`,
580
605
  );
581
- });
606
+ canStubWholeFile = !preservedBindings.some((b) => {
607
+ const expr = code.slice(
608
+ b.callExprStart,
609
+ b.callCloseParenPos + 1,
610
+ );
611
+ return strippedRe.test(expr);
612
+ });
613
+ }
582
614
  }
583
- }
584
-
585
- if (canStubWholeFile) {
586
- const lines: string[] = [];
587
615
 
588
- // Determine which @rangojs/router imports are needed
589
- const neededImports: string[] = [];
590
- if (handleFnNames.length > 0) neededImports.push("createHandle");
591
- if (lsFnNames.length > 0) neededImports.push("createLocationState");
592
- if (neededImports.length > 0) {
593
- lines.push(
594
- `import { ${neededImports.join(", ")} } from "@rangojs/router";`,
595
- );
596
- }
616
+ if (canStubWholeFile) {
617
+ const lines: string[] = [];
618
+ const neededImports: string[] = [];
619
+ if (handleFnNames.length > 0) neededImports.push("createHandle");
620
+ if (lsFnNames.length > 0) neededImports.push("createLocationState");
621
+ if (neededImports.length > 0) {
622
+ lines.push(
623
+ `import { ${neededImports.join(", ")} } from "@rangojs/router";`,
624
+ );
625
+ }
597
626
 
598
- for (const binding of allBindings) {
599
- const fnCall = code.slice(
600
- binding.callExprStart,
601
- binding.callOpenParenPos + 1,
602
- );
603
- const isHandle = handleFnNames.some((n) => fnCall.includes(n));
604
- const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
605
-
606
- // All aliases share the first export name's ID, matching
607
- // the server transforms which key off exportNames[0].
608
- const primaryName = binding.exportNames[0];
609
- const stubId = isBuild
610
- ? hashId(filePath, primaryName)
611
- : `${filePath}#${primaryName}`;
612
-
613
- if (isHandle || isLocationState) {
614
- // Preserve the original call expression so create*() executes.
615
- // Replace the alias (if any) with the canonical name since the
616
- // stub file imports canonical names from @rangojs/router.
617
- const rawCallExpr = code.slice(
627
+ for (const binding of allBindings) {
628
+ const fnCall = code.slice(
618
629
  binding.callExprStart,
619
- binding.callCloseParenPos + 1,
630
+ binding.callOpenParenPos + 1,
620
631
  );
621
- const canonicalName = isHandle
622
- ? "createHandle"
623
- : "createLocationState";
624
- const activeFnNames = isHandle ? handleFnNames : lsFnNames;
625
- let callExpr = rawCallExpr;
626
- for (const alias of activeFnNames) {
627
- if (alias !== canonicalName && callExpr.startsWith(alias)) {
628
- callExpr = canonicalName + callExpr.slice(alias.length);
629
- break;
632
+ const isHandle = handleFnNames.some((n) => fnCall.includes(n));
633
+ const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
634
+
635
+ // Aliases share the primary name's ID (matches server transforms).
636
+ const primaryName = binding.exportNames[0];
637
+ const stubId = makeStubId(filePath, primaryName, isBuild);
638
+
639
+ if (isHandle || isLocationState) {
640
+ // Rewrite alias to canonical name since the stub file only
641
+ // imports canonical names from @rangojs/router.
642
+ // Strip React Fast Refresh `_c = ` wrappers from args
643
+ // (e.g. `_c = (segments) => ...` → `(segments) => ...`)
644
+ const rawArgs = code
645
+ .slice(
646
+ binding.callOpenParenPos + 1,
647
+ binding.callCloseParenPos,
648
+ )
649
+ .replace(/\b_c\d*\s*=\s*/g, "");
650
+ const canonicalName = isHandle
651
+ ? "createHandle"
652
+ : "createLocationState";
653
+ const activeFnNames = isHandle ? handleFnNames : lsFnNames;
654
+
655
+ // Reconstruct the function name (handling aliases + generics)
656
+ let rawCallee = code.slice(
657
+ binding.callExprStart,
658
+ binding.callOpenParenPos,
659
+ );
660
+ for (const alias of activeFnNames) {
661
+ if (alias !== canonicalName && rawCallee.startsWith(alias)) {
662
+ rawCallee = canonicalName + rawCallee.slice(alias.length);
663
+ break;
664
+ }
665
+ }
666
+
667
+ if (isHandle) {
668
+ // createHandle checks __injectedId DURING the call, so $$id
669
+ // must be a parameter, not a post-call property assignment.
670
+ const idParam =
671
+ binding.argCount === 0
672
+ ? `undefined, "${stubId}"`
673
+ : `, "${stubId}"`;
674
+ lines.push(
675
+ `export const ${primaryName} = ${rawCallee}(${rawArgs}${idParam});`,
676
+ );
677
+ lines.push(`${primaryName}.$$id = "${stubId}";`);
678
+ } else {
679
+ lines.push(
680
+ `export const ${primaryName} = ${rawCallee}(${rawArgs});`,
681
+ );
682
+ lines.push(
683
+ `${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`,
684
+ );
685
+ }
686
+ for (const name of binding.exportNames.slice(1)) {
687
+ lines.push(`export const ${name} = ${primaryName};`);
630
688
  }
631
- }
632
- lines.push(`export const ${primaryName} = ${callExpr};`);
633
- if (isHandle) {
634
- lines.push(`${primaryName}.$$id = "${stubId}";`);
635
689
  } else {
690
+ let brand = "loader";
691
+ if (prerenderFnNames.some((n) => fnCall.includes(n))) {
692
+ brand = PRERENDER_CONFIG.brand;
693
+ } else if (staticFnNames.some((n) => fnCall.includes(n))) {
694
+ brand = STATIC_CONFIG.brand;
695
+ }
636
696
  lines.push(
637
- `${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`,
697
+ `export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`,
638
698
  );
639
- }
640
- // Re-export aliases pointing to the same object
641
- for (const name of binding.exportNames.slice(1)) {
642
- lines.push(`export const ${name} = ${primaryName};`);
643
- }
644
- } else {
645
- // Loader, Prerender, Static → plain stub
646
- let brand = "loader";
647
- if (prerenderFnNames.some((n) => fnCall.includes(n))) {
648
- brand = PRERENDER_CONFIG.brand;
649
- } else if (staticFnNames.some((n) => fnCall.includes(n))) {
650
- brand = STATIC_CONFIG.brand;
651
- }
652
- lines.push(
653
- `export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`,
654
- );
655
- for (const name of binding.exportNames.slice(1)) {
656
- lines.push(`export const ${name} = ${primaryName};`);
699
+ for (const name of binding.exportNames.slice(1)) {
700
+ lines.push(`export const ${name} = ${primaryName};`);
701
+ }
657
702
  }
658
703
  }
659
- }
660
704
 
661
- return { code: lines.join("\n") + "\n", map: null };
705
+ return { code: lines.join("\n") + "\n", map: null };
706
+ }
662
707
  }
663
- }
664
708
 
665
- // --- StaticHandler: RSC build module tracking ---
666
- if (hasStaticHandlerCode && isRscEnv && isBuild) {
667
- const fnNames = getFnNames(STATIC_CONFIG.fnName);
668
- const exportNames = getBindings(code, fnNames).map(
669
- (b) => b.exportNames[0],
670
- );
671
- if (exportNames.length > 0) {
672
- staticHandlerModules.set(id, exportNames);
709
+ // RSC build module tracking (prerender + static), consumed via the
710
+ // plugin API for prerender freezing. Export-binding sets are invariant
711
+ // across the inline-extraction loop, so tracking both here is equivalent
712
+ // to the pre-extraction prerender tracking this replaces.
713
+ if (isRscEnv && isBuild) {
714
+ const trackTypes: Array<
715
+ [boolean, HandlerTransformConfig, Map<string, string[]>]
716
+ > = [
717
+ [
718
+ hasPrerenderHandlerCode,
719
+ PRERENDER_CONFIG,
720
+ prerenderHandlerModules,
721
+ ],
722
+ [hasStaticHandlerCode, STATIC_CONFIG, staticHandlerModules],
723
+ ];
724
+ for (const [has, cfg, trackMap] of trackTypes) {
725
+ if (!has) continue;
726
+ const exportNames = getBindings(code, getFnNames(cfg.fnName)).map(
727
+ (b) => b.exportNames[0],
728
+ );
729
+ if (exportNames.length > 0) trackMap.set(id, exportNames);
730
+ }
673
731
  }
674
- }
675
732
 
676
- // --- Unified MagicString transforms ---
677
- // Single pipeline for all downstream transforms (loaders, handles,
678
- // locationState, handler IDs). Uses the post-extraction code so
679
- // positions are always consistent.
680
- const s = new MagicString(code);
681
-
682
- if (hasLoaderCode) {
683
- const fnNames = getFnNames("createLoader");
684
- changed =
685
- transformLoaders(getBindings(code, fnNames), s, filePath, isBuild) ||
686
- changed;
687
- }
688
- if (hasHandleCode) {
689
- const fnNames = getFnNames("createHandle");
690
- changed =
691
- transformHandles(
692
- getBindings(code, fnNames),
693
- s,
694
- code,
695
- filePath,
696
- isBuild,
697
- ) || changed;
698
- }
699
- if (hasLocationStateCode) {
700
- const fnNames = getFnNames("createLocationState");
701
- changed =
702
- transformLocationState(
703
- getBindings(code, fnNames),
704
- s,
705
- filePath,
706
- isBuild,
707
- ) || changed;
708
- }
709
- if (hasPrerenderHandlerCode) {
710
- const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
711
- const bindings = getBindings(code, fnNames);
712
- if (isRscEnv) {
733
+ // --- Unified MagicString transforms ---
734
+ // Single pipeline for all downstream transforms (loaders, handles,
735
+ // locationState, handler IDs). Uses the post-extraction code so
736
+ // positions are always consistent.
737
+ const s = new MagicString(code);
738
+
739
+ if (hasLoaderCode) {
740
+ const fnNames = getFnNames("createLoader");
713
741
  changed =
714
- transformHandlerIds(
715
- PRERENDER_CONFIG,
716
- bindings,
742
+ transformLoaders(
743
+ getBindings(code, fnNames),
717
744
  s,
718
745
  filePath,
719
746
  isBuild,
720
747
  ) || changed;
721
- } else {
722
- // Non-RSC mixed-export file: replace Prerender() calls with stubs
723
- // on the shared MagicString so sourcemaps stay accurate.
748
+ }
749
+ if (hasHandleCode) {
750
+ const fnNames = getFnNames("createHandle");
724
751
  changed =
725
- stubHandlerExprs(
726
- PRERENDER_CONFIG,
727
- bindings,
752
+ transformHandles(
753
+ getBindings(code, fnNames),
728
754
  s,
755
+ code,
729
756
  filePath,
730
757
  isBuild,
731
758
  ) || changed;
732
759
  }
733
- }
734
- if (hasStaticHandlerCode) {
735
- const fnNames = getFnNames(STATIC_CONFIG.fnName);
736
- const bindings = getBindings(code, fnNames);
737
- if (isRscEnv) {
760
+ if (hasLocationStateCode) {
761
+ const fnNames = getFnNames("createLocationState");
738
762
  changed =
739
- transformHandlerIds(
740
- STATIC_CONFIG,
741
- bindings,
763
+ transformLocationState(
764
+ getBindings(code, fnNames),
742
765
  s,
743
766
  filePath,
744
767
  isBuild,
745
768
  ) || changed;
746
- } else {
769
+ }
770
+ // Prerender + Static share the RSC inject-id vs non-RSC stub dispatch.
771
+ // Call sites are disjoint (distinct fnNames), so loop order is irrelevant.
772
+ const finalHandlerConfigs = [
773
+ hasPrerenderHandlerCode && PRERENDER_CONFIG,
774
+ hasStaticHandlerCode && STATIC_CONFIG,
775
+ ].filter((c): c is HandlerTransformConfig => !!c);
776
+ for (const cfg of finalHandlerConfigs) {
777
+ const bindings = getBindings(code, getFnNames(cfg.fnName));
747
778
  changed =
748
- stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) ||
779
+ (isRscEnv
780
+ ? transformHandlerIds(cfg, bindings, s, filePath, isBuild)
781
+ : stubHandlerExprs(cfg, bindings, s, filePath, isBuild)) ||
749
782
  changed;
750
783
  }
751
- }
752
784
 
753
- if (!changed) return;
785
+ if (!changed) return;
754
786
 
755
- return {
756
- code: s.toString(),
757
- map: s.generateMap({ source: id, includeContent: true }),
758
- };
787
+ return {
788
+ code: s.toString(),
789
+ map: s.generateMap({ source: id, includeContent: true }),
790
+ };
791
+ } finally {
792
+ counter?.record(id, performance.now() - __t0);
793
+ }
759
794
  },
760
795
  };
761
796
  }