@rangojs/router 0.0.0-experimental.19 → 0.0.0-experimental.1c0bdfad

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