@rangojs/router 0.0.0-experimental.14 → 0.0.0-experimental.141

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 (460) hide show
  1. package/AGENTS.md +17 -0
  2. package/README.md +432 -7
  3. package/dist/bin/rango.js +2073 -213
  4. package/dist/testing/vitest.js +82 -0
  5. package/dist/vite/index.js +7258 -2714
  6. package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  7. package/package.json +140 -67
  8. package/skills/api-client/SKILL.md +211 -0
  9. package/skills/breadcrumbs/SKILL.md +329 -0
  10. package/skills/bundle-analysis/SKILL.md +159 -0
  11. package/skills/cache-guide/SKILL.md +487 -0
  12. package/skills/caching/SKILL.md +357 -25
  13. package/skills/comparison/SKILL.md +50 -0
  14. package/skills/comparison/agents/openai.yaml +4 -0
  15. package/skills/comparison/references/framework-comparison.md +837 -0
  16. package/skills/composability/SKILL.md +246 -0
  17. package/skills/css/SKILL.md +76 -0
  18. package/skills/debug-manifest/SKILL.md +16 -10
  19. package/skills/document-cache/SKILL.md +87 -62
  20. package/skills/fonts/SKILL.md +6 -4
  21. package/skills/handler-use/SKILL.md +364 -0
  22. package/skills/hooks/SKILL.md +557 -79
  23. package/skills/host-router/SKILL.md +320 -0
  24. package/skills/i18n/SKILL.md +276 -0
  25. package/skills/intercept/SKILL.md +207 -15
  26. package/skills/layout/SKILL.md +146 -6
  27. package/skills/links/SKILL.md +304 -25
  28. package/skills/loader/SKILL.md +616 -54
  29. package/skills/middleware/SKILL.md +217 -37
  30. package/skills/migrate-nextjs/SKILL.md +611 -0
  31. package/skills/migrate-react-router/SKILL.md +927 -0
  32. package/skills/mime-routes/SKILL.md +42 -11
  33. package/skills/observability/SKILL.md +194 -0
  34. package/skills/parallel/SKILL.md +284 -3
  35. package/skills/ppr/SKILL.md +293 -0
  36. package/skills/prerender/SKILL.md +437 -52
  37. package/skills/rango/SKILL.md +369 -22
  38. package/skills/react-compiler/SKILL.md +168 -0
  39. package/skills/response-routes/SKILL.md +263 -121
  40. package/skills/route/SKILL.md +350 -21
  41. package/skills/router-setup/SKILL.md +246 -33
  42. package/skills/scripts/SKILL.md +179 -0
  43. package/skills/server-actions/SKILL.md +775 -0
  44. package/skills/shell-manifest/SKILL.md +185 -0
  45. package/skills/streams-and-websockets/SKILL.md +283 -0
  46. package/skills/tailwind/SKILL.md +27 -3
  47. package/skills/testing/SKILL.md +126 -222
  48. package/skills/testing/bindings.md +103 -0
  49. package/skills/testing/cache-prerender.md +127 -0
  50. package/skills/testing/client-components.md +124 -0
  51. package/skills/testing/e2e-parity.md +125 -0
  52. package/skills/testing/flight.md +91 -0
  53. package/skills/testing/handles.md +131 -0
  54. package/skills/testing/loader.md +128 -0
  55. package/skills/testing/middleware.md +99 -0
  56. package/skills/testing/render-handler.md +122 -0
  57. package/skills/testing/response-routes.md +95 -0
  58. package/skills/testing/reverse-and-types.md +85 -0
  59. package/skills/testing/server-actions.md +107 -0
  60. package/skills/testing/server-tree.md +128 -0
  61. package/skills/testing/setup.md +123 -0
  62. package/skills/theme/SKILL.md +9 -8
  63. package/skills/typesafety/SKILL.md +532 -103
  64. package/skills/use-cache/SKILL.md +367 -0
  65. package/skills/vercel/SKILL.md +128 -0
  66. package/skills/view-transitions/SKILL.md +337 -0
  67. package/src/__augment-tests__/augment.ts +81 -0
  68. package/src/__augment-tests__/augmented.check.ts +116 -0
  69. package/src/__internal.ts +77 -44
  70. package/src/bin/rango.ts +312 -15
  71. package/src/browser/action-coordinator.ts +114 -0
  72. package/src/browser/action-fence.ts +47 -0
  73. package/src/browser/app-shell.ts +39 -0
  74. package/src/browser/app-version.ts +14 -0
  75. package/src/browser/connection-warmup.ts +134 -0
  76. package/src/browser/cookie-name.ts +140 -0
  77. package/src/browser/event-controller.ts +293 -202
  78. package/src/browser/history-state.ts +101 -0
  79. package/src/browser/index.ts +3 -3
  80. package/src/browser/intercept-utils.ts +52 -0
  81. package/src/browser/invalidate-client-cache.ts +52 -0
  82. package/src/browser/link-interceptor.ts +24 -4
  83. package/src/browser/logging.ts +11 -0
  84. package/src/browser/merge-segment-loaders.ts +20 -12
  85. package/src/browser/navigation-bridge.ts +385 -576
  86. package/src/browser/navigation-client.ts +245 -75
  87. package/src/browser/navigation-store-handle.ts +38 -0
  88. package/src/browser/navigation-store.ts +184 -118
  89. package/src/browser/navigation-transaction.ts +247 -0
  90. package/src/browser/network-error-handler.ts +88 -0
  91. package/src/browser/partial-update.ts +412 -364
  92. package/src/browser/prefetch/cache.ts +359 -0
  93. package/src/browser/prefetch/fetch.ts +452 -0
  94. package/src/browser/prefetch/observer.ts +65 -0
  95. package/src/browser/prefetch/policy.ts +48 -0
  96. package/src/browser/prefetch/queue.ts +209 -0
  97. package/src/browser/prefetch/resource-ready.ts +77 -0
  98. package/src/browser/rango-state.ts +194 -0
  99. package/src/browser/react/Link.tsx +275 -68
  100. package/src/browser/react/NavigationProvider.tsx +265 -109
  101. package/src/browser/react/ScrollRestoration.tsx +10 -6
  102. package/src/browser/react/context.ts +11 -0
  103. package/src/browser/react/filter-segment-order.ts +70 -0
  104. package/src/browser/react/index.ts +0 -48
  105. package/src/browser/react/location-state-shared.ts +272 -60
  106. package/src/browser/react/location-state.ts +90 -20
  107. package/src/browser/react/mount-context.ts +6 -1
  108. package/src/browser/react/nonce-context.ts +23 -0
  109. package/src/browser/react/shallow-equal.ts +27 -0
  110. package/src/browser/react/use-action.ts +35 -66
  111. package/src/browser/react/use-handle.ts +39 -126
  112. package/src/browser/react/use-href.tsx +8 -1
  113. package/src/browser/react/use-link-status.ts +39 -13
  114. package/src/browser/react/use-navigation.ts +53 -69
  115. package/src/browser/react/use-params.ts +75 -0
  116. package/src/browser/react/use-pathname.ts +47 -0
  117. package/src/browser/react/use-reverse.ts +106 -0
  118. package/src/browser/react/use-router.ts +98 -0
  119. package/src/browser/react/use-search-params.ts +51 -0
  120. package/src/browser/react/use-segments.ts +72 -99
  121. package/src/browser/response-adapter.ts +164 -0
  122. package/src/browser/rsc-router.tsx +300 -72
  123. package/src/browser/scroll-restoration.ts +138 -50
  124. package/src/browser/segment-reconciler.ts +243 -0
  125. package/src/browser/segment-structure-assert.ts +17 -1
  126. package/src/browser/server-action-bridge.ts +668 -613
  127. package/src/browser/types.ts +223 -51
  128. package/src/browser/validate-redirect-origin.ts +56 -0
  129. package/src/build/collect-fallback-refs.ts +107 -0
  130. package/src/build/generate-manifest.ts +252 -161
  131. package/src/build/generate-route-types.ts +41 -1038
  132. package/src/build/index.ts +12 -7
  133. package/src/build/prefix-tree-utils.ts +123 -0
  134. package/src/build/route-trie.ts +225 -42
  135. package/src/build/route-types/ast-helpers.ts +25 -0
  136. package/src/build/route-types/ast-route-extraction.ts +105 -0
  137. package/src/build/route-types/codegen.ts +113 -0
  138. package/src/build/route-types/include-resolution.ts +812 -0
  139. package/src/build/route-types/param-extraction.ts +51 -0
  140. package/src/build/route-types/per-module-writer.ts +144 -0
  141. package/src/build/route-types/router-processing.ts +695 -0
  142. package/src/build/route-types/scan-filter.ts +85 -0
  143. package/src/build/route-types/source-scan.ts +216 -0
  144. package/src/build/runtime-discovery.ts +223 -0
  145. package/src/cache/background-task.ts +34 -0
  146. package/src/cache/cache-error.ts +104 -0
  147. package/src/cache/cache-key-utils.ts +60 -0
  148. package/src/cache/cache-policy.ts +199 -0
  149. package/src/cache/cache-runtime.ts +525 -0
  150. package/src/cache/cache-scope.ts +298 -332
  151. package/src/cache/cache-tag.ts +103 -0
  152. package/src/cache/cf/cf-base64.ts +33 -0
  153. package/src/cache/cf/cf-cache-constants.ts +127 -0
  154. package/src/cache/cf/cf-cache-store.ts +2508 -158
  155. package/src/cache/cf/cf-cache-types.ts +349 -0
  156. package/src/cache/cf/cf-kv-utils.ts +46 -0
  157. package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
  158. package/src/cache/cf/index.ts +17 -17
  159. package/src/cache/document-cache.ts +199 -92
  160. package/src/cache/handle-capture.ts +81 -0
  161. package/src/cache/handle-snapshot.ts +111 -0
  162. package/src/cache/index.ts +24 -35
  163. package/src/cache/memory-segment-store.ts +363 -30
  164. package/src/cache/profile-registry.ts +88 -0
  165. package/src/cache/read-through-swr.ts +178 -0
  166. package/src/cache/segment-codec.ts +248 -0
  167. package/src/cache/shell-snapshot.ts +368 -0
  168. package/src/cache/tag-invalidation.ts +230 -0
  169. package/src/cache/taint.ts +153 -0
  170. package/src/cache/types.ts +222 -211
  171. package/src/cache/vercel/index.ts +11 -0
  172. package/src/cache/vercel/vercel-cache-store.ts +1113 -0
  173. package/src/client.rsc.tsx +43 -21
  174. package/src/client.tsx +131 -347
  175. package/src/cloudflare/index.ts +11 -0
  176. package/src/cloudflare/tracing.ts +109 -0
  177. package/src/component-utils.ts +23 -4
  178. package/src/components/DefaultDocument.tsx +13 -3
  179. package/src/context-var.ts +168 -0
  180. package/src/debug.ts +19 -9
  181. package/src/decode-loader-results.ts +52 -0
  182. package/src/defer.ts +185 -0
  183. package/src/deps/ssr.ts +0 -1
  184. package/src/encode-kv.ts +49 -0
  185. package/src/errors.ts +106 -10
  186. package/src/escape-script.ts +52 -0
  187. package/src/handle.ts +110 -35
  188. package/src/handles/MetaTags.tsx +83 -59
  189. package/src/handles/Scripts.tsx +183 -0
  190. package/src/handles/breadcrumbs.ts +93 -0
  191. package/src/handles/deferred-resolution.ts +127 -0
  192. package/src/handles/is-thenable.ts +18 -0
  193. package/src/handles/meta.ts +44 -53
  194. package/src/handles/script.ts +244 -0
  195. package/src/host/cookie-handler.ts +20 -65
  196. package/src/host/errors.ts +21 -30
  197. package/src/host/index.ts +13 -9
  198. package/src/host/pattern-matcher.ts +50 -79
  199. package/src/host/router.ts +151 -121
  200. package/src/host/testing.ts +45 -32
  201. package/src/host/types.ts +52 -11
  202. package/src/host/utils.ts +2 -2
  203. package/src/href-client.ts +192 -57
  204. package/src/index.rsc.ts +173 -35
  205. package/src/index.ts +241 -73
  206. package/src/internal-debug.ts +9 -2
  207. package/src/loader-store.ts +500 -0
  208. package/src/loader.rsc.ts +31 -99
  209. package/src/loader.ts +30 -12
  210. package/src/missing-id-error.ts +68 -0
  211. package/src/outlet-context.ts +1 -1
  212. package/src/outlet-provider.tsx +41 -0
  213. package/src/prerender/param-hash.ts +16 -14
  214. package/src/prerender/store.ts +121 -21
  215. package/src/prerender.ts +460 -26
  216. package/src/redirect-origin.ts +100 -0
  217. package/src/regex-escape.ts +8 -0
  218. package/src/render-error-thrower.tsx +20 -0
  219. package/src/response-utils.ts +62 -0
  220. package/src/reverse.ts +198 -128
  221. package/src/root-error-boundary.tsx +42 -48
  222. package/src/route-content-wrapper.tsx +22 -77
  223. package/src/route-definition/dsl-helpers.ts +1116 -0
  224. package/src/route-definition/helper-factories.ts +88 -0
  225. package/src/route-definition/helpers-types.ts +505 -0
  226. package/src/route-definition/index.ts +54 -0
  227. package/src/route-definition/redirect.ts +134 -0
  228. package/src/route-definition/resolve-handler-use.ts +160 -0
  229. package/src/route-definition/use-item-types.ts +29 -0
  230. package/src/route-definition.ts +1 -1481
  231. package/src/route-map-builder.ts +82 -144
  232. package/src/route-name.ts +53 -0
  233. package/src/route-types.ts +71 -45
  234. package/src/router/basename.ts +14 -0
  235. package/src/router/content-negotiation.ts +263 -0
  236. package/src/router/debug-manifest.ts +72 -0
  237. package/src/router/error-handling.ts +54 -27
  238. package/src/router/find-match.ts +245 -0
  239. package/src/router/handler-context.ts +377 -125
  240. package/src/router/instrument.ts +350 -0
  241. package/src/router/intercept-resolution.ts +59 -28
  242. package/src/router/lazy-includes.ts +254 -0
  243. package/src/router/loader-resolution.ts +421 -157
  244. package/src/router/logging.ts +106 -6
  245. package/src/router/manifest.ts +131 -57
  246. package/src/router/match-api.ts +167 -246
  247. package/src/router/match-context.ts +4 -24
  248. package/src/router/match-handlers.ts +440 -0
  249. package/src/router/match-middleware/background-revalidation.ts +117 -93
  250. package/src/router/match-middleware/cache-lookup.ts +297 -150
  251. package/src/router/match-middleware/cache-store.ts +123 -51
  252. package/src/router/match-middleware/intercept-resolution.ts +44 -43
  253. package/src/router/match-middleware/segment-resolution.ts +64 -22
  254. package/src/router/match-pipelines.ts +11 -87
  255. package/src/router/match-result.ts +121 -50
  256. package/src/router/metrics.ts +219 -28
  257. package/src/router/middleware-types.ts +93 -0
  258. package/src/router/middleware.ts +505 -441
  259. package/src/router/navigation-snapshot.ts +133 -0
  260. package/src/router/params-util.ts +23 -0
  261. package/src/router/parse-pattern.ts +115 -0
  262. package/src/router/pattern-matching.ts +311 -142
  263. package/src/router/prefetch-cache-ttl.ts +51 -0
  264. package/src/router/prefetch-limits.ts +37 -0
  265. package/src/router/prerender-match.ts +547 -0
  266. package/src/router/preview-match.ts +102 -0
  267. package/src/router/request-classification.ts +278 -0
  268. package/src/router/revalidation.ts +203 -62
  269. package/src/router/route-snapshot.ts +246 -0
  270. package/src/router/router-context.ts +45 -48
  271. package/src/router/router-interfaces.ts +554 -0
  272. package/src/router/router-options.ts +779 -0
  273. package/src/router/router-registry.ts +21 -0
  274. package/src/router/segment-resolution/fresh.ts +772 -0
  275. package/src/router/segment-resolution/helpers.ts +348 -0
  276. package/src/router/segment-resolution/loader-cache.ts +250 -0
  277. package/src/router/segment-resolution/loader-mask.ts +44 -0
  278. package/src/router/segment-resolution/revalidation.ts +1331 -0
  279. package/src/router/segment-resolution/static-store.ts +81 -0
  280. package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
  281. package/src/router/segment-resolution/view-transition-default.ts +56 -0
  282. package/src/router/segment-resolution.ts +25 -1354
  283. package/src/router/segment-wrappers.ts +292 -0
  284. package/src/router/state-cookie-name.ts +33 -0
  285. package/src/router/substitute-pattern-params.ts +75 -0
  286. package/src/router/telemetry-otel.ts +261 -0
  287. package/src/router/telemetry.ts +377 -0
  288. package/src/router/timeout.ts +128 -0
  289. package/src/router/tracing.ts +206 -0
  290. package/src/router/trie-matching.ts +240 -61
  291. package/src/router/types.ts +23 -70
  292. package/src/router/url-params.ts +57 -0
  293. package/src/router.ts +781 -2378
  294. package/src/rsc/full-payload.ts +70 -0
  295. package/src/rsc/handler-context.ts +46 -0
  296. package/src/rsc/handler.ts +905 -1142
  297. package/src/rsc/helpers.ts +275 -19
  298. package/src/rsc/index.ts +2 -25
  299. package/src/rsc/json-route-result.ts +38 -0
  300. package/src/rsc/loader-fetch.ts +305 -0
  301. package/src/rsc/manifest-init.ts +77 -0
  302. package/src/rsc/nonce.ts +14 -0
  303. package/src/rsc/origin-guard.ts +155 -0
  304. package/src/rsc/progressive-enhancement.ts +502 -0
  305. package/src/rsc/redirect-guard.ts +99 -0
  306. package/src/rsc/response-cache-serve.ts +238 -0
  307. package/src/rsc/response-error.ts +104 -0
  308. package/src/rsc/response-route-handler.ts +257 -0
  309. package/src/rsc/rsc-rendering.ts +527 -0
  310. package/src/rsc/runtime-warnings.ts +55 -0
  311. package/src/rsc/server-action.ts +522 -0
  312. package/src/rsc/shell-capture.ts +897 -0
  313. package/src/rsc/shell-serve.ts +124 -0
  314. package/src/rsc/ssr-setup.ts +144 -0
  315. package/src/rsc/transition-gate.ts +89 -0
  316. package/src/rsc/types.ts +95 -12
  317. package/src/runtime-env.ts +18 -0
  318. package/src/search-params.ts +99 -82
  319. package/src/segment-content-promise.ts +67 -0
  320. package/src/segment-loader-promise.ts +149 -0
  321. package/src/segment-system.tsx +349 -134
  322. package/src/serialize.ts +243 -0
  323. package/src/server/context.ts +459 -85
  324. package/src/server/cookie-parse.ts +32 -0
  325. package/src/server/cookie-store.ts +310 -0
  326. package/src/server/fetchable-loader-store.ts +11 -6
  327. package/src/server/handle-store.ts +123 -42
  328. package/src/server/loader-registry.ts +51 -100
  329. package/src/server/request-context.ts +848 -157
  330. package/src/server.ts +15 -8
  331. package/src/ssr/index.tsx +443 -135
  332. package/src/ssr/ssr-root.tsx +228 -0
  333. package/src/static-handler.ts +45 -18
  334. package/src/testing/cache-status.ts +162 -0
  335. package/src/testing/collect-handle.ts +46 -0
  336. package/src/testing/dispatch.ts +701 -0
  337. package/src/testing/dom.entry.ts +22 -0
  338. package/src/testing/e2e/fixture.ts +188 -0
  339. package/src/testing/e2e/index.ts +128 -0
  340. package/src/testing/e2e/matchers.ts +35 -0
  341. package/src/testing/e2e/page-helpers.ts +272 -0
  342. package/src/testing/e2e/parity.ts +387 -0
  343. package/src/testing/e2e/server.ts +195 -0
  344. package/src/testing/flight-matchers.ts +97 -0
  345. package/src/testing/flight-normalize.ts +11 -0
  346. package/src/testing/flight-runtime.d.ts +57 -0
  347. package/src/testing/flight-tree.ts +682 -0
  348. package/src/testing/flight.entry.ts +52 -0
  349. package/src/testing/flight.ts +257 -0
  350. package/src/testing/generated-routes.ts +199 -0
  351. package/src/testing/index.ts +105 -0
  352. package/src/testing/internal/context.ts +371 -0
  353. package/src/testing/internal/flight-client-globals.ts +30 -0
  354. package/src/testing/internal/seed-vars.ts +54 -0
  355. package/src/testing/render-handler.ts +357 -0
  356. package/src/testing/render-route.tsx +584 -0
  357. package/src/testing/run-loader.ts +385 -0
  358. package/src/testing/run-middleware.ts +205 -0
  359. package/src/testing/run-transition-when.ts +164 -0
  360. package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
  361. package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
  362. package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
  363. package/src/testing/vitest-stubs/version.ts +5 -0
  364. package/src/testing/vitest.ts +305 -0
  365. package/src/theme/ThemeProvider.tsx +76 -98
  366. package/src/theme/ThemeScript.tsx +12 -14
  367. package/src/theme/constants.ts +57 -15
  368. package/src/theme/index.ts +3 -20
  369. package/src/theme/theme-context.ts +5 -35
  370. package/src/theme/theme-script.ts +43 -39
  371. package/src/theme/use-theme.ts +0 -3
  372. package/src/types/boundaries.ts +123 -0
  373. package/src/types/cache-types.ts +207 -0
  374. package/src/types/error-types.ts +132 -0
  375. package/src/types/global-namespace.ts +113 -0
  376. package/src/types/handler-context.ts +839 -0
  377. package/src/types/index.ts +81 -0
  378. package/src/types/loader-types.ts +212 -0
  379. package/src/types/request-scope.ts +112 -0
  380. package/src/types/route-config.ts +138 -0
  381. package/src/types/route-entry.ts +114 -0
  382. package/src/types/segments.ts +271 -0
  383. package/src/types.ts +1 -1795
  384. package/src/urls/include-helper.ts +162 -0
  385. package/src/urls/include-provider.ts +71 -0
  386. package/src/urls/index.ts +44 -0
  387. package/src/urls/path-helper-types.ts +413 -0
  388. package/src/urls/path-helper.ts +280 -0
  389. package/src/urls/pattern-types.ts +160 -0
  390. package/src/urls/response-types.ts +109 -0
  391. package/src/urls/type-extraction.ts +316 -0
  392. package/src/urls/urls-function.ts +80 -0
  393. package/src/urls.ts +1 -1341
  394. package/src/use-loader.tsx +406 -141
  395. package/src/vercel/index.ts +11 -0
  396. package/src/vercel/tracing.ts +88 -0
  397. package/src/vite/debug.ts +185 -0
  398. package/src/vite/discovery/bundle-postprocess.ts +182 -0
  399. package/src/vite/discovery/discover-routers.ts +389 -0
  400. package/src/vite/discovery/discovery-errors.ts +255 -0
  401. package/src/vite/discovery/gate-state.ts +171 -0
  402. package/src/vite/discovery/prerender-collection.ts +467 -0
  403. package/src/vite/discovery/route-types-writer.ts +214 -0
  404. package/src/vite/discovery/self-gen-tracking.ts +73 -0
  405. package/src/vite/discovery/state.ts +161 -0
  406. package/src/vite/discovery/virtual-module-codegen.ts +183 -0
  407. package/src/vite/index.ts +23 -2255
  408. package/src/vite/inject-client-debug.ts +36 -0
  409. package/src/vite/plugin-types.ts +303 -0
  410. package/src/vite/plugins/cjs-to-esm.ts +90 -0
  411. package/src/vite/plugins/client-ref-dedup.ts +120 -0
  412. package/src/vite/plugins/client-ref-hashing.ts +118 -0
  413. package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
  414. package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
  415. package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
  416. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +88 -110
  417. package/src/vite/{expose-id-utils.ts → plugins/expose-id-utils.ts} +89 -79
  418. package/src/vite/plugins/expose-ids/export-analysis.ts +363 -0
  419. package/src/vite/plugins/expose-ids/handler-transform.ts +130 -0
  420. package/src/vite/plugins/expose-ids/loader-transform.ts +64 -0
  421. package/src/vite/plugins/expose-ids/router-transform.ts +199 -0
  422. package/src/vite/plugins/expose-ids/types.ts +45 -0
  423. package/src/vite/plugins/expose-internal-ids.ts +805 -0
  424. package/src/vite/plugins/performance-tracks.ts +89 -0
  425. package/src/vite/plugins/refresh-cmd.ts +127 -0
  426. package/src/vite/plugins/use-cache-transform.ts +313 -0
  427. package/src/vite/plugins/vercel-output.ts +384 -0
  428. package/src/vite/plugins/version-injector.ts +94 -0
  429. package/src/vite/plugins/version-plugin.ts +263 -0
  430. package/src/vite/plugins/virtual-entries.ts +234 -0
  431. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  432. package/src/vite/rango.ts +560 -0
  433. package/src/vite/router-discovery.ts +1638 -0
  434. package/src/vite/{ast-handler-extract.ts → utils/ast-handler-extract.ts} +200 -37
  435. package/src/vite/utils/banner.ts +36 -0
  436. package/src/vite/utils/bundle-analysis.ts +132 -0
  437. package/src/vite/utils/client-chunks.ts +184 -0
  438. package/src/vite/utils/directive-prologue.ts +40 -0
  439. package/src/vite/utils/forward-user-plugins.ts +171 -0
  440. package/src/vite/utils/manifest-utils.ts +15 -0
  441. package/src/vite/utils/package-resolution.ts +89 -0
  442. package/src/vite/utils/prerender-utils.ts +249 -0
  443. package/src/vite/utils/shared-utils.ts +269 -0
  444. package/CLAUDE.md +0 -43
  445. package/dist/vite/index.named-routes.gen.ts +0 -103
  446. package/src/browser/lru-cache.ts +0 -69
  447. package/src/browser/react/use-client-cache.ts +0 -56
  448. package/src/browser/request-controller.ts +0 -164
  449. package/src/browser/shallow.ts +0 -35
  450. package/src/cache/memory-store.ts +0 -253
  451. package/src/handles/index.ts +0 -6
  452. package/src/href-context.ts +0 -33
  453. package/src/network-error-thrower.tsx +0 -21
  454. package/src/router.gen.ts +0 -6
  455. package/src/static-handler.gen.ts +0 -5
  456. package/src/urls.gen.ts +0 -8
  457. package/src/vite/expose-internal-ids.ts +0 -1167
  458. package/src/vite/package-resolution.ts +0 -125
  459. package/src/vite/virtual-entries.ts +0 -114
  460. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
package/src/index.ts CHANGED
@@ -10,9 +10,6 @@
10
10
  * import from "@rangojs/router/client"
11
11
  */
12
12
 
13
- // Universal rendering utilities (work on both server and client)
14
- export { renderSegments } from "./segment-system.js";
15
-
16
13
  // Error classes (can be used on both server and client)
17
14
  export {
18
15
  RouteNotFoundError,
@@ -21,26 +18,24 @@ export {
21
18
  MiddlewareError,
22
19
  HandlerError,
23
20
  BuildError,
21
+ DslContextError,
24
22
  InvalidHandlerError,
25
- NetworkError,
26
- isNetworkError,
27
- sanitizeError,
28
23
  RouterError,
24
+ Skip,
25
+ isSkip,
29
26
  } from "./errors.js";
30
27
 
31
28
  // Types (safe to import anywhere - no runtime code)
32
29
  export type {
33
30
  // Configuration types
34
31
  DocumentProps,
35
- RouterEnv,
36
32
  DefaultEnv,
37
33
  RouteDefinition,
38
34
  RouteConfig,
39
35
  RouteDefinitionOptions,
40
36
  TrailingSlashMode,
41
37
  // Handler types
42
- Handler, // Supports params object, path pattern, or route name
43
- ScopedRouteMap, // Scoped view of GeneratedRouteMap for Handler<"localName", ScopedRouteMap<"prefix">>
38
+ Handler, // Supports params object, path pattern, or route name
44
39
  HandlerContext,
45
40
  ExtractParams,
46
41
  GenericParams,
@@ -49,6 +44,7 @@ export type {
49
44
  // Revalidation types
50
45
  RevalidateParams,
51
46
  Revalidate,
47
+ ActionRef,
52
48
  RouteKeys,
53
49
  // Loader types
54
50
  LoaderDefinition,
@@ -56,9 +52,6 @@ export type {
56
52
  LoaderContext,
57
53
  FetchableLoaderOptions,
58
54
  LoadOptions,
59
- LoaderActionContext,
60
- LoaderAction,
61
- LoaderMiddlewareFn,
62
55
  // Error boundary types
63
56
  ErrorInfo,
64
57
  ErrorBoundaryFallbackProps,
@@ -75,7 +68,13 @@ export type {
75
68
  } from "./types.js";
76
69
 
77
70
  // Search params schema types
78
- export type { SearchSchema, SearchSchemaValue, ResolveSearchSchema, RouteSearchParams, RouteParams } from "./search-params.js";
71
+ export type {
72
+ SearchSchema,
73
+ SearchSchemaValue,
74
+ ResolveSearchSchema,
75
+ RouteSearchParams,
76
+ RouteParams,
77
+ } from "./search-params.js";
79
78
 
80
79
  // Client-safe createLoader - only stores the $$id, function is not included
81
80
  // Use this when defining loaders that will be imported by client components
@@ -83,6 +82,21 @@ export { createLoader } from "./loader.js";
83
82
 
84
83
  // Route definition types (safe to import anywhere)
85
84
  export type { RouteHelpers, RouteHandlers } from "./route-definition.js";
85
+ export type {
86
+ TransitionConfig,
87
+ TransitionWhenFn,
88
+ TransitionWhenContext,
89
+ ViewTransitionClass,
90
+ } from "./types.js";
91
+
92
+ // Composition types for reusable callback factories
93
+ export type {
94
+ RouteUseItem,
95
+ LayoutUseItem,
96
+ AllUseItems,
97
+ UseItems,
98
+ HandlerUseItem,
99
+ } from "./route-types.js";
86
100
 
87
101
  // Response route types (usable in both server and client contexts)
88
102
  export type {
@@ -95,126 +109,226 @@ export type {
95
109
  JsonResponsePathFn,
96
110
  TextResponsePathFn,
97
111
  RouteResponse,
98
- ResponseError,
99
- ResponseEnvelope,
112
+ ProblemDetails,
113
+ PartialPrerenderProps,
100
114
  } from "./urls.js";
101
115
 
102
116
  // Middleware context types
103
- export type {
104
- MiddlewareContext,
105
- CookieOptions,
106
- } from "./router/middleware.js";
117
+ export type { MiddlewareContext, CookieOptions } from "./router/middleware.js";
118
+
119
+ function serverOnlyStubError(name: string): Error {
120
+ return new Error(
121
+ `${name}() is only available from "@rangojs/router" in a react-server/RSC environment. ` +
122
+ `For client hooks and components, import from "@rangojs/router/client".`,
123
+ );
124
+ }
107
125
 
108
126
  /**
109
127
  * Error-throwing stub for server-only `urls` function.
110
128
  */
111
129
  export function urls(): never {
112
- throw new Error(
113
- 'urls() is server-only and requires RSC context.'
114
- );
130
+ throw serverOnlyStubError("urls");
115
131
  }
116
132
 
117
133
  /**
118
134
  * Error-throwing stub for server-only `createRouter` function.
119
135
  */
120
136
  export function createRouter(): never {
121
- throw new Error(
122
- 'createRouter() is server-only and requires RSC context.'
123
- );
137
+ throw serverOnlyStubError("createRouter");
124
138
  }
125
139
 
126
140
  /**
127
141
  * Error-throwing stub for server-only `redirect` function.
128
142
  */
129
143
  export function redirect(): never {
130
- throw new Error(
131
- 'redirect() is server-only and requires RSC context.'
132
- );
144
+ throw serverOnlyStubError("redirect");
133
145
  }
134
146
 
135
147
  // Handle API (universal - works on both server and client)
136
148
  export { createHandle, isHandle, type Handle } from "./handle.js";
149
+ export {
150
+ DEFAULT_DEFER_TIMEOUT_MS,
151
+ type DeferOptions,
152
+ type HandlePush,
153
+ type HandlePushFn,
154
+ } from "./defer.js";
155
+
156
+ // Context variable API (typed ctx.set/ctx.get tokens)
157
+ export { createVar, type ContextVar } from "./context-var.js";
158
+
159
+ // CSP nonce token (use with ctx.get(nonce) in middleware/handlers)
160
+ export { nonce } from "./rsc/nonce.js";
137
161
 
138
162
  /**
139
- * Error-throwing stub for server-only `Prerender` function.
163
+ * SSR/client stub for server-only `Prerender` function.
164
+ *
165
+ * Returns a lightweight stub object instead of throwing so that the
166
+ * production SSR build can safely bundle the RSC entry chunk — the SSR
167
+ * bundler resolves `@rangojs/router` to this (SSR) entry, so Prerender
168
+ * calls in RSC code must not crash at module-evaluation time.
140
169
  */
141
- export function Prerender(): never {
142
- throw new Error(
143
- 'Prerender() is server-only and requires RSC context.'
144
- );
170
+ export function Prerender(
171
+ _handler?: any,
172
+ _optionsOrId?: any,
173
+ __injectedId?: string,
174
+ ): any {
175
+ const id =
176
+ typeof _optionsOrId === "string" ? _optionsOrId : __injectedId || "";
177
+ return { __brand: "prerenderHandler" as const, $$id: id };
145
178
  }
146
179
 
147
180
  /**
148
- * Error-throwing stub for server-only `Static` function.
181
+ * SSR/client stub for server-only `Passthrough` function.
149
182
  */
150
- export function Static(): never {
151
- throw new Error(
152
- 'Static() is server-only and requires RSC context.'
153
- );
183
+ export function Passthrough(
184
+ _handler?: any,
185
+ _optionsOrId?: any,
186
+ __injectedId?: string,
187
+ ): any {
188
+ const id =
189
+ typeof _optionsOrId === "string" ? _optionsOrId : __injectedId || "";
190
+ return { __brand: "passthroughHandler" as const, $$id: id };
154
191
  }
155
192
 
156
193
  /**
157
- * Error-throwing stub for server-only `getRequestContext` function.
194
+ * SSR/client stub for server-only `Static` function.
195
+ *
196
+ * Returns a lightweight stub object instead of throwing so that the
197
+ * production SSR build can safely bundle the RSC entry chunk — the SSR
198
+ * bundler resolves `@rangojs/router` to this (SSR) entry, so Static
199
+ * calls in RSC code must not crash at module-evaluation time.
158
200
  */
159
- export function getRequestContext(): never {
160
- throw new Error(
161
- 'getRequestContext() is server-only and requires RSC context.'
162
- );
201
+ export function Static(
202
+ _handler?: any,
203
+ _optionsOrId?: any,
204
+ __injectedId?: string,
205
+ ): any {
206
+ const id =
207
+ typeof _optionsOrId === "string" ? _optionsOrId : __injectedId || "";
208
+ return { __brand: "staticHandler" as const, $$id: id };
163
209
  }
164
210
 
165
211
  /**
166
- * Error-throwing stub for server-only `requireRequestContext` function.
212
+ * Error-throwing stub for server-only `getRequestContext` function.
167
213
  */
168
- export function requireRequestContext(): never {
169
- throw new Error(
170
- 'requireRequestContext() is server-only and requires RSC context.'
171
- );
214
+ export function getRequestContext(): never {
215
+ throw serverOnlyStubError("getRequestContext");
172
216
  }
173
217
 
174
218
  /**
175
- * Error-throwing stub for server-only `createReverse` function.
219
+ * Error-throwing stub for server-only `cookies` function.
176
220
  */
177
- export function createReverse(): never {
178
- throw new Error(
179
- 'createReverse() is server-only and requires RSC context.'
180
- );
221
+ export function cookies(): never {
222
+ throw serverOnlyStubError("cookies");
181
223
  }
182
224
 
183
225
  /**
184
- * Error-throwing stub for server-only `enableMatchDebug` function.
226
+ * Error-throwing stub for server-only `headers` function.
185
227
  */
186
- export function enableMatchDebug(): never {
187
- throw new Error(
188
- 'enableMatchDebug() is server-only and requires RSC context.'
189
- );
228
+ export function headers(): never {
229
+ throw serverOnlyStubError("headers");
190
230
  }
191
231
 
192
232
  /**
193
- * Error-throwing stub for server-only `getMatchDebugStats` function.
233
+ * Client implementation of `invalidateClientCache()`. Unlike the server-only
234
+ * stubs above this is a REAL function under the `default` condition (it marks
235
+ * the client's caches stale); the `react-server` condition (index.rsc.ts)
236
+ * selects the server implementation that writes a rotated `Set-Cookie`.
194
237
  */
195
- export function getMatchDebugStats(): never {
196
- throw new Error(
197
- 'getMatchDebugStats() is server-only and requires RSC context.'
198
- );
199
- }
238
+ export {
239
+ invalidateClientCache,
240
+ keepClientCache,
241
+ } from "./browser/invalidate-client-cache.js";
200
242
 
201
243
  /**
202
- * Error-throwing stub for server-only `track` function.
244
+ * Error-throwing stub for server-only `createReverse` function.
203
245
  */
204
- export function track(): never {
205
- throw new Error(
206
- 'track() is server-only and requires RSC context.'
207
- );
246
+ export function createReverse(): never {
247
+ throw serverOnlyStubError("createReverse");
248
+ }
249
+
250
+ // Error-throwing stubs for server-only route helpers
251
+ export function layout(): never {
252
+ throw serverOnlyStubError("layout");
253
+ }
254
+ export function cache(): never {
255
+ throw serverOnlyStubError("cache");
256
+ }
257
+ export function middleware(): never {
258
+ throw serverOnlyStubError("middleware");
259
+ }
260
+ export function revalidate(): never {
261
+ throw serverOnlyStubError("revalidate");
262
+ }
263
+ // Cache tag APIs are server-only (real implementations in index.rsc.ts). These
264
+ // stubs keep the named-export shape identical under the default/non-react-server
265
+ // condition so SSR/client/default bundles that encounter the import link cleanly.
266
+ export function cacheTag(): never {
267
+ throw serverOnlyStubError("cacheTag");
268
+ }
269
+ export function updateTag(): never {
270
+ throw serverOnlyStubError("updateTag");
271
+ }
272
+ export function revalidateTag(): never {
273
+ throw serverOnlyStubError("revalidateTag");
274
+ }
275
+ export function loader(): never {
276
+ throw serverOnlyStubError("loader");
277
+ }
278
+ export function loading(): never {
279
+ throw serverOnlyStubError("loading");
280
+ }
281
+ export function parallel(): never {
282
+ throw serverOnlyStubError("parallel");
283
+ }
284
+ export function intercept(): never {
285
+ throw serverOnlyStubError("intercept");
286
+ }
287
+ export function errorBoundary(): never {
288
+ throw serverOnlyStubError("errorBoundary");
289
+ }
290
+ export function notFoundBoundary(): never {
291
+ throw serverOnlyStubError("notFoundBoundary");
292
+ }
293
+ export function transition(): never {
294
+ throw serverOnlyStubError("transition");
208
295
  }
209
296
 
210
297
  // Request context type (safe for client)
211
- export type { RequestContext } from "./server/request-context.js";
298
+ export type { PublicRequestContext as RequestContext } from "./server/request-context.js";
299
+
300
+ // Shared base for every user-facing request context.
301
+ export type { RequestScope, ExecutionContext } from "./types/request-scope.js";
302
+
303
+ // Cookie store types (safe for client)
304
+ export type {
305
+ CookieStore,
306
+ Cookie,
307
+ ReadonlyHeaders,
308
+ } from "./server/cookie-store.js";
309
+
310
+ // Built-in handles (universal — work on both server and client)
311
+ export { Meta } from "./handles/meta.js";
312
+ export {
313
+ Script,
314
+ type ScriptConfig,
315
+ type ScriptAttributes,
316
+ } from "./handles/script.js";
317
+ export { Breadcrumbs } from "./handles/breadcrumbs.js";
212
318
 
213
319
  // Meta types
214
320
  export type { MetaDescriptor, MetaDescriptorBase } from "./router/types.js";
215
321
 
322
+ // Breadcrumb types
323
+ export type { BreadcrumbItem } from "./handles/breadcrumbs.js";
324
+
216
325
  // Reverse type utilities for type-safe URL generation (Django-style URL reversal)
217
- export type { ScopedReverseFunction, ReverseFunction, ExtractLocalRoutes, PrefixedRoutes, PrefixRoutePatterns, ParamsFor, SanitizePrefix, MergeRoutes } from "./reverse.js";
326
+ export type {
327
+ ScopedReverseFunction,
328
+ ReverseFunction,
329
+ ExtractLocalRoutes,
330
+ ParamsFor,
331
+ } from "./reverse.js";
218
332
  // scopedReverse() helper for handlers to get locally-typed reverse
219
333
  export { scopedReverse } from "./reverse.js";
220
334
 
@@ -223,7 +337,61 @@ export {
223
337
  createLocationState,
224
338
  type LocationStateDefinition,
225
339
  type LocationStateEntry,
340
+ type LocationStateOptions,
226
341
  } from "./browser/react/location-state-shared.js";
227
342
 
228
- // Path-based response type lookup from RegisteredRoutes
229
- export type { PathResponse } from "./href-client.js";
343
+ // Path and response types are ambient on the `Rango` namespace (`Rango.Path`,
344
+ // `Rango.PathResponse`, declared in href-client.ts) — no import needed.
345
+
346
+ // Telemetry types only — the createConsoleSink/createOTelSink values are
347
+ // server-only and live in index.rsc.ts (the `react-server` condition of the
348
+ // bare `@rangojs/router` import). Re-exporting them as values from this
349
+ // (default/client) entry would pull telemetry.ts and telemetry-otel.ts into
350
+ // the client module graph; both tree-shake to zero bytes but still appear in
351
+ // bundle analysis output and slow build-time module resolution. Consumers
352
+ // who need the values in non-RSC contexts can import from
353
+ // `@rangojs/router/server`.
354
+ export type {
355
+ OTelTracer,
356
+ OTelActiveSpanTracer,
357
+ OTelSpan,
358
+ OTelTracingOptions,
359
+ } from "./router/telemetry-otel.js";
360
+ // The full TelemetryEvent union PLUS its member types, so a consumer writing a
361
+ // TelemetrySink can annotate a per-`type` handler (or construct an event literal
362
+ // in a test) instead of only narrowing the opaque union.
363
+ export type {
364
+ TelemetrySink,
365
+ TelemetryEvent,
366
+ RequestStartEvent,
367
+ RequestEndEvent,
368
+ RequestErrorEvent,
369
+ LoaderStartEvent,
370
+ LoaderEndEvent,
371
+ LoaderErrorEvent,
372
+ HandlerErrorEvent,
373
+ CacheSegmentStatus,
374
+ CacheSegmentSignal,
375
+ CacheDecisionEvent,
376
+ RevalidationDecisionEvent,
377
+ RequestTimeoutEvent,
378
+ OriginCheckRejectedEvent,
379
+ } from "./router/telemetry.js";
380
+
381
+ // Span tracing config types a consumer annotates. SpanRunner/TraceSpan are the
382
+ // internal runner contract (consumers go through createOTelTracing /
383
+ // createCloudflareTracing, which return a ready RouterTracingConfig) and are not
384
+ // exported.
385
+ export type {
386
+ RouterTracingConfig,
387
+ TracePhase,
388
+ TracePhaseToggles,
389
+ } from "./router/tracing.js";
390
+
391
+ // Timeout types and error class
392
+ export { RouterTimeoutError } from "./router/timeout.js";
393
+ export type {
394
+ RouterTimeouts,
395
+ TimeoutPhase,
396
+ TimeoutContext,
397
+ } from "./router/timeout.js";
@@ -1,5 +1,12 @@
1
- // Internal debug gate. Enable with INTERNAL_RANGO_DEBUG=1 in the environment.
2
- // Only checked on the server (Node.js / Bun); on workers process is undefined.
1
+ // Runtime fallback for non-Vite contexts (Node, tests, raw imports). In the Vite
2
+ // pipeline -- dev and build, every environment -- the router discovery plugin's
3
+ // transform replaces this module with the build-time-resolved flag (see
4
+ // vite/inject-client-debug.ts), so the CLIENT debug flag no longer depends on a
5
+ // `__RANGO_DEBUG__` define being delivered to the browser (which dev did only as
6
+ // an injected global whose presence varied across consumer setups).
7
+ //
8
+ // Keep this module to the single INTERNAL_RANGO_DEBUG export: the transform
9
+ // replaces the whole file, so a second export would be dropped from the bundle.
3
10
  export const INTERNAL_RANGO_DEBUG: boolean =
4
11
  typeof process !== "undefined" &&
5
12
  Boolean((process as any).env?.INTERNAL_RANGO_DEBUG);