@rangojs/router 0.0.0-experimental.3 → 0.0.0-experimental.30

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 (297) hide show
  1. package/AGENTS.md +5 -0
  2. package/README.md +883 -4
  3. package/dist/bin/rango.js +1601 -0
  4. package/dist/vite/index.js +4655 -747
  5. package/package.json +78 -50
  6. package/skills/cache-guide/SKILL.md +262 -0
  7. package/skills/caching/SKILL.md +54 -25
  8. package/skills/composability/SKILL.md +172 -0
  9. package/skills/debug-manifest/SKILL.md +12 -8
  10. package/skills/document-cache/SKILL.md +23 -21
  11. package/skills/fonts/SKILL.md +167 -0
  12. package/skills/hooks/SKILL.md +390 -63
  13. package/skills/host-router/SKILL.md +218 -0
  14. package/skills/intercept/SKILL.md +133 -10
  15. package/skills/layout/SKILL.md +102 -5
  16. package/skills/links/SKILL.md +239 -0
  17. package/skills/loader/SKILL.md +366 -29
  18. package/skills/middleware/SKILL.md +173 -36
  19. package/skills/mime-routes/SKILL.md +128 -0
  20. package/skills/parallel/SKILL.md +80 -3
  21. package/skills/prerender/SKILL.md +643 -0
  22. package/skills/rango/SKILL.md +86 -16
  23. package/skills/response-routes/SKILL.md +411 -0
  24. package/skills/route/SKILL.md +227 -14
  25. package/skills/router-setup/SKILL.md +225 -32
  26. package/skills/tailwind/SKILL.md +129 -0
  27. package/skills/theme/SKILL.md +12 -11
  28. package/skills/typesafety/SKILL.md +401 -75
  29. package/skills/use-cache/SKILL.md +324 -0
  30. package/src/__internal.ts +10 -4
  31. package/src/bin/rango.ts +321 -0
  32. package/src/browser/action-coordinator.ts +97 -0
  33. package/src/browser/action-response-classifier.ts +99 -0
  34. package/src/browser/event-controller.ts +87 -64
  35. package/src/browser/history-state.ts +80 -0
  36. package/src/browser/intercept-utils.ts +52 -0
  37. package/src/browser/link-interceptor.ts +20 -4
  38. package/src/browser/logging.ts +55 -0
  39. package/src/browser/merge-segment-loaders.ts +20 -12
  40. package/src/browser/navigation-bridge.ts +201 -553
  41. package/src/browser/navigation-client.ts +124 -71
  42. package/src/browser/navigation-store.ts +33 -50
  43. package/src/browser/navigation-transaction.ts +295 -0
  44. package/src/browser/network-error-handler.ts +61 -0
  45. package/src/browser/partial-update.ts +267 -317
  46. package/src/browser/prefetch/cache.ts +146 -0
  47. package/src/browser/prefetch/fetch.ts +135 -0
  48. package/src/browser/prefetch/observer.ts +65 -0
  49. package/src/browser/prefetch/policy.ts +42 -0
  50. package/src/browser/prefetch/queue.ts +88 -0
  51. package/src/browser/rango-state.ts +112 -0
  52. package/src/browser/react/Link.tsx +173 -73
  53. package/src/browser/react/NavigationProvider.tsx +138 -27
  54. package/src/browser/react/context.ts +6 -0
  55. package/src/browser/react/filter-segment-order.ts +11 -0
  56. package/src/browser/react/index.ts +12 -12
  57. package/src/browser/react/location-state-shared.ts +95 -53
  58. package/src/browser/react/location-state.ts +60 -15
  59. package/src/browser/react/mount-context.ts +37 -0
  60. package/src/browser/react/nonce-context.ts +23 -0
  61. package/src/browser/react/shallow-equal.ts +27 -0
  62. package/src/browser/react/use-action.ts +29 -51
  63. package/src/browser/react/use-client-cache.ts +5 -3
  64. package/src/browser/react/use-handle.ts +49 -65
  65. package/src/browser/react/use-href.tsx +20 -188
  66. package/src/browser/react/use-link-status.ts +6 -5
  67. package/src/browser/react/use-mount.ts +31 -0
  68. package/src/browser/react/use-navigation.ts +27 -78
  69. package/src/browser/react/use-params.ts +65 -0
  70. package/src/browser/react/use-pathname.ts +47 -0
  71. package/src/browser/react/use-router.ts +63 -0
  72. package/src/browser/react/use-search-params.ts +56 -0
  73. package/src/browser/react/use-segments.ts +80 -97
  74. package/src/browser/response-adapter.ts +73 -0
  75. package/src/browser/rsc-router.tsx +111 -26
  76. package/src/browser/scroll-restoration.ts +92 -16
  77. package/src/browser/segment-reconciler.ts +216 -0
  78. package/src/browser/segment-structure-assert.ts +83 -0
  79. package/src/browser/server-action-bridge.ts +504 -584
  80. package/src/browser/shallow.ts +6 -1
  81. package/src/browser/types.ts +92 -57
  82. package/src/browser/validate-redirect-origin.ts +29 -0
  83. package/src/build/generate-manifest.ts +438 -0
  84. package/src/build/generate-route-types.ts +36 -0
  85. package/src/build/index.ts +35 -0
  86. package/src/build/route-trie.ts +265 -0
  87. package/src/build/route-types/ast-helpers.ts +25 -0
  88. package/src/build/route-types/ast-route-extraction.ts +98 -0
  89. package/src/build/route-types/codegen.ts +102 -0
  90. package/src/build/route-types/include-resolution.ts +411 -0
  91. package/src/build/route-types/param-extraction.ts +48 -0
  92. package/src/build/route-types/per-module-writer.ts +128 -0
  93. package/src/build/route-types/router-processing.ts +469 -0
  94. package/src/build/route-types/scan-filter.ts +78 -0
  95. package/src/build/runtime-discovery.ts +231 -0
  96. package/src/cache/background-task.ts +34 -0
  97. package/src/cache/cache-key-utils.ts +44 -0
  98. package/src/cache/cache-policy.ts +125 -0
  99. package/src/cache/cache-runtime.ts +338 -0
  100. package/src/cache/cache-scope.ts +120 -303
  101. package/src/cache/cf/cf-cache-store.ts +119 -7
  102. package/src/cache/cf/index.ts +8 -2
  103. package/src/cache/document-cache.ts +101 -72
  104. package/src/cache/handle-capture.ts +81 -0
  105. package/src/cache/handle-snapshot.ts +41 -0
  106. package/src/cache/index.ts +0 -15
  107. package/src/cache/memory-segment-store.ts +191 -13
  108. package/src/cache/profile-registry.ts +73 -0
  109. package/src/cache/read-through-swr.ts +134 -0
  110. package/src/cache/segment-codec.ts +256 -0
  111. package/src/cache/taint.ts +98 -0
  112. package/src/cache/types.ts +72 -122
  113. package/src/client.rsc.tsx +10 -15
  114. package/src/client.tsx +114 -135
  115. package/src/component-utils.ts +4 -4
  116. package/src/components/DefaultDocument.tsx +5 -1
  117. package/src/context-var.ts +86 -0
  118. package/src/debug.ts +17 -7
  119. package/src/errors.ts +108 -2
  120. package/src/handle.ts +34 -19
  121. package/src/handles/MetaTags.tsx +73 -20
  122. package/src/handles/meta.ts +30 -13
  123. package/src/host/cookie-handler.ts +165 -0
  124. package/src/host/errors.ts +97 -0
  125. package/src/host/index.ts +53 -0
  126. package/src/host/pattern-matcher.ts +214 -0
  127. package/src/host/router.ts +352 -0
  128. package/src/host/testing.ts +79 -0
  129. package/src/host/types.ts +146 -0
  130. package/src/host/utils.ts +25 -0
  131. package/src/href-client.ts +135 -49
  132. package/src/index.rsc.ts +182 -17
  133. package/src/index.ts +238 -24
  134. package/src/internal-debug.ts +11 -0
  135. package/src/loader.rsc.ts +27 -142
  136. package/src/loader.ts +27 -10
  137. package/src/network-error-thrower.tsx +3 -1
  138. package/src/outlet-provider.tsx +45 -0
  139. package/src/prerender/param-hash.ts +37 -0
  140. package/src/prerender/store.ts +185 -0
  141. package/src/prerender.ts +463 -0
  142. package/src/reverse.ts +330 -0
  143. package/src/root-error-boundary.tsx +41 -29
  144. package/src/route-content-wrapper.tsx +9 -11
  145. package/src/route-definition/dsl-helpers.ts +934 -0
  146. package/src/route-definition/helper-factories.ts +200 -0
  147. package/src/route-definition/helpers-types.ts +430 -0
  148. package/src/route-definition/index.ts +52 -0
  149. package/src/route-definition/redirect.ts +93 -0
  150. package/src/route-definition.ts +1 -1388
  151. package/src/route-map-builder.ts +241 -112
  152. package/src/route-name.ts +53 -0
  153. package/src/route-types.ts +70 -9
  154. package/src/router/content-negotiation.ts +116 -0
  155. package/src/router/debug-manifest.ts +72 -0
  156. package/src/router/error-handling.ts +9 -9
  157. package/src/router/find-match.ts +158 -0
  158. package/src/router/handler-context.ts +371 -81
  159. package/src/router/intercept-resolution.ts +395 -0
  160. package/src/router/lazy-includes.ts +234 -0
  161. package/src/router/loader-resolution.ts +215 -122
  162. package/src/router/logging.ts +248 -0
  163. package/src/router/manifest.ts +155 -32
  164. package/src/router/match-api.ts +620 -0
  165. package/src/router/match-context.ts +5 -3
  166. package/src/router/match-handlers.ts +440 -0
  167. package/src/router/match-middleware/background-revalidation.ts +80 -93
  168. package/src/router/match-middleware/cache-lookup.ts +382 -9
  169. package/src/router/match-middleware/cache-store.ts +51 -22
  170. package/src/router/match-middleware/intercept-resolution.ts +55 -17
  171. package/src/router/match-middleware/segment-resolution.ts +24 -6
  172. package/src/router/match-pipelines.ts +10 -45
  173. package/src/router/match-result.ts +34 -29
  174. package/src/router/metrics.ts +235 -15
  175. package/src/router/middleware-cookies.ts +55 -0
  176. package/src/router/middleware-types.ts +222 -0
  177. package/src/router/middleware.ts +324 -367
  178. package/src/router/pattern-matching.ts +321 -30
  179. package/src/router/prerender-match.ts +400 -0
  180. package/src/router/preview-match.ts +170 -0
  181. package/src/router/revalidation.ts +137 -38
  182. package/src/router/router-context.ts +36 -21
  183. package/src/router/router-interfaces.ts +452 -0
  184. package/src/router/router-options.ts +592 -0
  185. package/src/router/router-registry.ts +24 -0
  186. package/src/router/segment-resolution/fresh.ts +570 -0
  187. package/src/router/segment-resolution/helpers.ts +263 -0
  188. package/src/router/segment-resolution/loader-cache.ts +198 -0
  189. package/src/router/segment-resolution/revalidation.ts +1241 -0
  190. package/src/router/segment-resolution/static-store.ts +67 -0
  191. package/src/router/segment-resolution.ts +21 -0
  192. package/src/router/segment-wrappers.ts +289 -0
  193. package/src/router/telemetry-otel.ts +299 -0
  194. package/src/router/telemetry.ts +300 -0
  195. package/src/router/timeout.ts +148 -0
  196. package/src/router/trie-matching.ts +239 -0
  197. package/src/router/types.ts +77 -3
  198. package/src/router.ts +688 -3656
  199. package/src/rsc/handler-context.ts +45 -0
  200. package/src/rsc/handler.ts +786 -760
  201. package/src/rsc/helpers.ts +140 -6
  202. package/src/rsc/index.ts +5 -25
  203. package/src/rsc/loader-fetch.ts +209 -0
  204. package/src/rsc/manifest-init.ts +86 -0
  205. package/src/rsc/nonce.ts +14 -0
  206. package/src/rsc/origin-guard.ts +141 -0
  207. package/src/rsc/progressive-enhancement.ts +379 -0
  208. package/src/rsc/response-error.ts +37 -0
  209. package/src/rsc/response-route-handler.ts +347 -0
  210. package/src/rsc/rsc-rendering.ts +235 -0
  211. package/src/rsc/runtime-warnings.ts +42 -0
  212. package/src/rsc/server-action.ts +348 -0
  213. package/src/rsc/ssr-setup.ts +128 -0
  214. package/src/rsc/types.ts +40 -14
  215. package/src/search-params.ts +230 -0
  216. package/src/segment-system.tsx +57 -61
  217. package/src/server/context.ts +202 -51
  218. package/src/server/cookie-store.ts +190 -0
  219. package/src/server/fetchable-loader-store.ts +37 -0
  220. package/src/server/handle-store.ts +94 -15
  221. package/src/server/loader-registry.ts +15 -56
  222. package/src/server/request-context.ts +422 -70
  223. package/src/server.ts +36 -120
  224. package/src/ssr/index.tsx +157 -26
  225. package/src/static-handler.ts +114 -0
  226. package/src/theme/ThemeProvider.tsx +21 -15
  227. package/src/theme/ThemeScript.tsx +5 -5
  228. package/src/theme/constants.ts +5 -2
  229. package/src/theme/index.ts +4 -14
  230. package/src/theme/theme-context.ts +4 -30
  231. package/src/theme/theme-script.ts +21 -18
  232. package/src/types/boundaries.ts +158 -0
  233. package/src/types/cache-types.ts +198 -0
  234. package/src/types/error-types.ts +192 -0
  235. package/src/types/global-namespace.ts +100 -0
  236. package/src/types/handler-context.ts +687 -0
  237. package/src/types/index.ts +88 -0
  238. package/src/types/loader-types.ts +183 -0
  239. package/src/types/route-config.ts +170 -0
  240. package/src/types/route-entry.ts +102 -0
  241. package/src/types/segments.ts +148 -0
  242. package/src/types.ts +1 -1577
  243. package/src/urls/include-helper.ts +197 -0
  244. package/src/urls/index.ts +53 -0
  245. package/src/urls/path-helper-types.ts +339 -0
  246. package/src/urls/path-helper.ts +329 -0
  247. package/src/urls/pattern-types.ts +95 -0
  248. package/src/urls/response-types.ts +106 -0
  249. package/src/urls/type-extraction.ts +372 -0
  250. package/src/urls/urls-function.ts +98 -0
  251. package/src/urls.ts +1 -726
  252. package/src/use-loader.tsx +85 -77
  253. package/src/vite/discovery/bundle-postprocess.ts +184 -0
  254. package/src/vite/discovery/discover-routers.ts +344 -0
  255. package/src/vite/discovery/prerender-collection.ts +385 -0
  256. package/src/vite/discovery/route-types-writer.ts +258 -0
  257. package/src/vite/discovery/self-gen-tracking.ts +47 -0
  258. package/src/vite/discovery/state.ts +110 -0
  259. package/src/vite/discovery/virtual-module-codegen.ts +203 -0
  260. package/src/vite/index.ts +11 -782
  261. package/src/vite/plugin-types.ts +131 -0
  262. package/src/vite/plugins/cjs-to-esm.ts +93 -0
  263. package/src/vite/plugins/client-ref-dedup.ts +115 -0
  264. package/src/vite/plugins/client-ref-hashing.ts +105 -0
  265. package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -51
  266. package/src/vite/plugins/expose-id-utils.ts +287 -0
  267. package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
  268. package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
  269. package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
  270. package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
  271. package/src/vite/plugins/expose-ids/types.ts +45 -0
  272. package/src/vite/plugins/expose-internal-ids.ts +569 -0
  273. package/src/vite/plugins/refresh-cmd.ts +65 -0
  274. package/src/vite/plugins/use-cache-transform.ts +323 -0
  275. package/src/vite/plugins/version-injector.ts +83 -0
  276. package/src/vite/plugins/version-plugin.ts +254 -0
  277. package/src/vite/{virtual-entries.ts → plugins/virtual-entries.ts} +29 -15
  278. package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
  279. package/src/vite/rango.ts +510 -0
  280. package/src/vite/router-discovery.ts +785 -0
  281. package/src/vite/utils/ast-handler-extract.ts +517 -0
  282. package/src/vite/utils/banner.ts +36 -0
  283. package/src/vite/utils/bundle-analysis.ts +137 -0
  284. package/src/vite/utils/manifest-utils.ts +70 -0
  285. package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
  286. package/src/vite/utils/prerender-utils.ts +189 -0
  287. package/src/vite/utils/shared-utils.ts +169 -0
  288. package/CLAUDE.md +0 -3
  289. package/src/browser/lru-cache.ts +0 -69
  290. package/src/browser/request-controller.ts +0 -164
  291. package/src/cache/memory-store.ts +0 -253
  292. package/src/href-context.ts +0 -33
  293. package/src/href.ts +0 -255
  294. package/src/vite/expose-handle-id.ts +0 -209
  295. package/src/vite/expose-loader-id.ts +0 -357
  296. package/src/vite/expose-location-state-id.ts +0 -177
  297. /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
package/src/index.rsc.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
- * rsc-router (react-server environment)
2
+ * @rangojs/router (react-server environment)
3
3
  *
4
- * This file is used when importing "rsc-router" from RSC (server components).
4
+ * This file is used when importing "@rangojs/router" from RSC (server components).
5
5
  * It re-exports everything from the universal index.ts plus adds server-side
6
- * createLoader that includes the actual loader function.
6
+ * implementations that replace the client-side error stubs.
7
7
  *
8
8
  * The bundler uses the "react-server" export condition to select this file
9
9
  * in RSC context, while the regular index.ts is used in client components.
@@ -24,17 +24,23 @@ export {
24
24
  NetworkError,
25
25
  isNetworkError,
26
26
  sanitizeError,
27
+ RouterError,
28
+ Skip,
29
+ isSkip,
27
30
  } from "./index.js";
28
31
 
29
32
  // Re-export all types from types.ts (user-facing types only)
30
33
  export type {
31
34
  // Configuration types
32
35
  DocumentProps,
33
- RouterEnv,
34
36
  DefaultEnv,
35
37
  RouteDefinition,
38
+ RouteConfig,
39
+ RouteDefinitionOptions,
40
+ TrailingSlashMode,
36
41
  // Handler types
37
42
  Handler,
43
+ ScopedRouteMap,
38
44
  HandlerContext,
39
45
  ExtractParams,
40
46
  GenericParams,
@@ -50,9 +56,6 @@ export type {
50
56
  LoaderContext,
51
57
  FetchableLoaderOptions,
52
58
  LoadOptions,
53
- LoaderActionContext,
54
- LoaderAction,
55
- LoaderMiddlewareFn,
56
59
  // Error boundary types
57
60
  ErrorInfo,
58
61
  ErrorBoundaryFallbackProps,
@@ -62,23 +65,97 @@ export type {
62
65
  NotFoundInfo,
63
66
  NotFoundBoundaryFallbackProps,
64
67
  NotFoundBoundaryHandler,
68
+ // Error handling callback types
69
+ ErrorPhase,
70
+ OnErrorContext,
71
+ OnErrorCallback,
65
72
  } from "./types.js";
66
73
 
67
74
  // Router options type (server-only, so import directly)
68
- export type { RSCRouterOptions } from "./router.js";
75
+ export type {
76
+ RSCRouterOptions,
77
+ SSRStreamMode,
78
+ SSROptions,
79
+ ResolveStreamingContext,
80
+ } from "./router.js";
81
+
82
+ // Server-side createLoader and redirect
83
+ export {
84
+ createLoader,
85
+ redirect,
86
+ type RouteHelpers,
87
+ type RouteHandlers,
88
+ // Globally importable route helpers for composition
89
+ layout,
90
+ cache,
91
+ middleware,
92
+ revalidate,
93
+ loader,
94
+ loading,
95
+ parallel,
96
+ intercept,
97
+ when,
98
+ errorBoundary,
99
+ notFoundBoundary,
100
+ transition,
101
+ } from "./route-definition.js";
102
+
103
+ // Composition types for reusable callback factories
104
+ export type {
105
+ RouteUseItem,
106
+ LayoutUseItem,
107
+ AllUseItems,
108
+ UseItems,
109
+ } from "./route-types.js";
110
+
111
+ // Handle API
112
+ export { createHandle, isHandle, type Handle } from "./handle.js";
113
+
114
+ // Context variable API (typed ctx.set/ctx.get tokens)
115
+ export { createVar, type ContextVar } from "./context-var.js";
69
116
 
70
- // Server-side createLoader - includes the actual loader function
71
- // This is the key addition for RSC context
72
- export { createLoader } from "./route-definition.js";
117
+ // CSP nonce token (use with ctx.get(nonce) in middleware/handlers)
118
+ export { nonce } from "./rsc/nonce.js";
119
+
120
+ // Pre-render handler API
121
+ export {
122
+ Prerender,
123
+ isPrerenderHandler,
124
+ type PrerenderHandlerDefinition,
125
+ type PrerenderPassthroughContext,
126
+ type PrerenderOptions,
127
+ type BuildContext,
128
+ type StaticBuildContext,
129
+ type GetParamsContext,
130
+ } from "./prerender.js";
131
+
132
+ // Static handler API
133
+ export {
134
+ Static,
135
+ isStaticHandler,
136
+ type StaticHandlerDefinition,
137
+ } from "./static-handler.js";
73
138
 
74
139
  // Django-style URL patterns (RSC/server context)
75
140
  export {
76
141
  urls,
142
+ RESPONSE_TYPE,
77
143
  type PathHelpers,
78
144
  type PathOptions,
79
145
  type UrlPatterns,
80
146
  type IncludeOptions,
81
147
  type IncludeItem,
148
+ type RouteResponse,
149
+ type ResponseError,
150
+ type ResponseEnvelope,
151
+ type ResponseHandler,
152
+ type ResponseHandlerContext,
153
+ type JsonResponseHandler,
154
+ type TextResponseHandler,
155
+ type JsonValue,
156
+ type ResponsePathFn,
157
+ type JsonResponsePathFn,
158
+ type TextResponsePathFn,
82
159
  } from "./urls.js";
83
160
 
84
161
  // Core router (server-side)
@@ -86,15 +163,103 @@ export {
86
163
  createRouter,
87
164
  type RSCRouter,
88
165
  type RootLayoutProps,
166
+ type RouterRequestInput,
89
167
  } from "./router.js";
90
168
 
91
- // RSC handler (server-side)
92
- export { createRSCHandler } from "./rsc/handler.js";
93
- export type { CreateRSCHandlerOptions, HandlerCacheConfig } from "./rsc/types.js";
169
+ // RSC handler types (server-side)
170
+ export type { HandlerCacheConfig } from "./rsc/types.js";
94
171
 
95
172
  // Built-in handles (server-side)
96
173
  export { Meta } from "./handles/meta.js";
97
174
 
98
- // Href type utilities for type-safe URL generation
99
- export type { ScopedHrefFunction, HrefFunction, ExtractLocalRoutes } from "./href.js";
100
- export { scopedHref } from "./href.js";
175
+ // Request context (for accessing request data in server actions/components).
176
+ // Re-exported with a narrowed return type so that public consumers only see
177
+ // public members. Internal code imports from "./server/request-context.js"
178
+ // directly and gets the full type.
179
+ import { getRequestContext as _getRequestContextInternal } from "./server/request-context.js";
180
+ export type { PublicRequestContext as RequestContext } from "./server/request-context.js";
181
+ import type { PublicRequestContext } from "./server/request-context.js";
182
+ import type { DefaultEnv } from "./types/global-namespace.js";
183
+
184
+ export const getRequestContext: <
185
+ TEnv = DefaultEnv,
186
+ >() => PublicRequestContext<TEnv> = _getRequestContextInternal;
187
+
188
+ // Request-scoped shorthands
189
+ export {
190
+ cookies,
191
+ headers,
192
+ type CookieStore,
193
+ type Cookie,
194
+ type ReadonlyHeaders,
195
+ } from "./server/cookie-store.js";
196
+
197
+ // Meta types
198
+ export type { MetaDescriptor, MetaDescriptorBase } from "./router/types.js";
199
+
200
+ // Middleware context types
201
+ export type { MiddlewareContext, CookieOptions } from "./router/middleware.js";
202
+
203
+ // Reverse type utilities for type-safe URL generation (Django-style URL reversal)
204
+ export type {
205
+ ScopedReverseFunction,
206
+ ReverseFunction,
207
+ ExtractLocalRoutes,
208
+ ParamsFor,
209
+ SanitizePrefix,
210
+ MergeRoutes,
211
+ } from "./reverse.js";
212
+ export { scopedReverse, createReverse } from "./reverse.js";
213
+
214
+ // Search params schema types
215
+ export type {
216
+ SearchSchema,
217
+ SearchSchemaValue,
218
+ ResolveSearchSchema,
219
+ RouteSearchParams,
220
+ RouteParams,
221
+ } from "./search-params.js";
222
+
223
+ // Debug utilities for route matching (development only)
224
+ export {
225
+ enableMatchDebug,
226
+ getMatchDebugStats,
227
+ } from "./router/pattern-matching.js";
228
+
229
+ // Location state (universal)
230
+ export {
231
+ createLocationState,
232
+ type LocationStateDefinition,
233
+ type LocationStateEntry,
234
+ type LocationStateOptions,
235
+ } from "./browser/react/location-state-shared.js";
236
+
237
+ // Path-based response type lookup from RegisteredRoutes
238
+ export type { PathResponse } from "./href-client.js";
239
+
240
+ // Telemetry sink
241
+ export { createConsoleSink } from "./router/telemetry.js";
242
+ export { createOTelSink } from "./router/telemetry-otel.js";
243
+ export type { OTelTracer, OTelSpan } from "./router/telemetry-otel.js";
244
+ export type {
245
+ TelemetrySink,
246
+ TelemetryEvent,
247
+ RequestStartEvent,
248
+ RequestEndEvent,
249
+ RequestErrorEvent,
250
+ RequestTimeoutEvent,
251
+ LoaderStartEvent,
252
+ LoaderEndEvent,
253
+ LoaderErrorEvent,
254
+ HandlerErrorEvent,
255
+ CacheDecisionEvent,
256
+ RevalidationDecisionEvent,
257
+ } from "./router/telemetry.js";
258
+
259
+ // Timeout types and error class
260
+ export { RouterTimeoutError } from "./router/timeout.js";
261
+ export type {
262
+ RouterTimeouts,
263
+ TimeoutPhase,
264
+ TimeoutContext,
265
+ } from "./router/timeout.js";
package/src/index.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  /**
2
- * rsc-router
2
+ * @rangojs/router
3
3
  *
4
- * Universal exports - types and utilities safe for both server and client
4
+ * Single user-facing entrypoint for all router APIs.
5
5
  *
6
- * For server-only exports (urls, createRouter, createLoader, etc.):
7
- * import from "rsc-router/server"
6
+ * The "react-server" export condition selects index.rsc.ts (real implementations)
7
+ * vs this file (client stubs for server-only functions).
8
8
  *
9
- * For client-only exports (Outlet, useOutlet, etc.):
10
- * import from "rsc-router/client"
9
+ * For client-only exports (Outlet, useOutlet, hooks, components):
10
+ * import from "@rangojs/router/client"
11
11
  */
12
12
 
13
13
  // Universal rendering utilities (work on both server and client)
@@ -25,17 +25,23 @@ export {
25
25
  NetworkError,
26
26
  isNetworkError,
27
27
  sanitizeError,
28
+ RouterError,
29
+ Skip,
30
+ isSkip,
28
31
  } from "./errors.js";
29
32
 
30
33
  // Types (safe to import anywhere - no runtime code)
31
34
  export type {
32
35
  // Configuration types
33
36
  DocumentProps,
34
- RouterEnv,
35
37
  DefaultEnv,
36
38
  RouteDefinition,
39
+ RouteConfig,
40
+ RouteDefinitionOptions,
41
+ TrailingSlashMode,
37
42
  // Handler types
38
- Handler, // Supports params object, path pattern, or route name
43
+ Handler, // Supports params object, path pattern, or route name
44
+ ScopedRouteMap, // Scoped view of GeneratedRouteMap for Handler<"localName", ScopedRouteMap<"prefix">>
39
45
  HandlerContext,
40
46
  ExtractParams,
41
47
  GenericParams,
@@ -51,9 +57,6 @@ export type {
51
57
  LoaderContext,
52
58
  FetchableLoaderOptions,
53
59
  LoadOptions,
54
- LoaderActionContext,
55
- LoaderAction,
56
- LoaderMiddlewareFn,
57
60
  // Error boundary types
58
61
  ErrorInfo,
59
62
  ErrorBoundaryFallbackProps,
@@ -63,34 +66,245 @@ export type {
63
66
  NotFoundInfo,
64
67
  NotFoundBoundaryFallbackProps,
65
68
  NotFoundBoundaryHandler,
69
+ // Error handling callback types
70
+ ErrorPhase,
71
+ OnErrorContext,
72
+ OnErrorCallback,
66
73
  } from "./types.js";
67
74
 
75
+ // Search params schema types
76
+ export type {
77
+ SearchSchema,
78
+ SearchSchemaValue,
79
+ ResolveSearchSchema,
80
+ RouteSearchParams,
81
+ RouteParams,
82
+ } from "./search-params.js";
83
+
68
84
  // Client-safe createLoader - only stores the $$id, function is not included
69
85
  // Use this when defining loaders that will be imported by client components
70
86
  export { createLoader } from "./loader.js";
71
87
 
88
+ // Route definition types (safe to import anywhere)
89
+ export type { RouteHelpers, RouteHandlers } from "./route-definition.js";
90
+ export type { TransitionConfig, ViewTransitionClass } from "./types.js";
91
+
92
+ // Composition types for reusable callback factories
93
+ export type {
94
+ RouteUseItem,
95
+ LayoutUseItem,
96
+ AllUseItems,
97
+ UseItems,
98
+ } from "./route-types.js";
99
+
100
+ // Response route types (usable in both server and client contexts)
101
+ export type {
102
+ ResponseHandler,
103
+ ResponseHandlerContext,
104
+ JsonResponseHandler,
105
+ TextResponseHandler,
106
+ JsonValue,
107
+ ResponsePathFn,
108
+ JsonResponsePathFn,
109
+ TextResponsePathFn,
110
+ RouteResponse,
111
+ ResponseError,
112
+ ResponseEnvelope,
113
+ } from "./urls.js";
114
+
115
+ // Middleware context types
116
+ export type { MiddlewareContext, CookieOptions } from "./router/middleware.js";
117
+
118
+ function serverOnlyStubError(name: string): Error {
119
+ return new Error(
120
+ `${name}() is only available from "@rangojs/router" in a react-server/RSC environment. ` +
121
+ `For client hooks and components, import from "@rangojs/router/client".`,
122
+ );
123
+ }
124
+
72
125
  /**
73
126
  * Error-throwing stub for server-only `urls` function.
74
- * Import from "@rangojs/router/server" or use within RSC context instead.
75
127
  */
76
128
  export function urls(): never {
77
- throw new Error(
78
- 'urls() is server-only. Import from "@rangojs/router/server" instead, or ensure you\'re using it in a server component.'
79
- );
129
+ throw serverOnlyStubError("urls");
80
130
  }
81
131
 
82
132
  /**
83
133
  * Error-throwing stub for server-only `createRouter` function.
84
- * Import from "@rangojs/router/server" instead.
85
134
  */
86
135
  export function createRouter(): never {
87
- throw new Error(
88
- 'createRouter() is server-only. Import from "@rangojs/router/server" instead.'
89
- );
136
+ throw serverOnlyStubError("createRouter");
137
+ }
138
+
139
+ /**
140
+ * Error-throwing stub for server-only `redirect` function.
141
+ */
142
+ export function redirect(): never {
143
+ throw serverOnlyStubError("redirect");
90
144
  }
91
145
 
92
- // Href type utilities for type-safe URL generation
93
- // ScopedHrefFunction is used with useHref<typeof patterns>() for composable modules
94
- export type { ScopedHrefFunction, HrefFunction, ExtractLocalRoutes } from "./href.js";
95
- // scopedHref() helper for handlers to get locally-typed href
96
- export { scopedHref } from "./href.js";
146
+ // Handle API (universal - works on both server and client)
147
+ export { createHandle, isHandle, type Handle } from "./handle.js";
148
+
149
+ // Context variable API (typed ctx.set/ctx.get tokens)
150
+ export { createVar, type ContextVar } from "./context-var.js";
151
+
152
+ // CSP nonce token (use with ctx.get(nonce) in middleware/handlers)
153
+ export { nonce } from "./rsc/nonce.js";
154
+
155
+ /**
156
+ * Error-throwing stub for server-only `Prerender` function.
157
+ */
158
+ export function Prerender(): never {
159
+ throw serverOnlyStubError("Prerender");
160
+ }
161
+
162
+ /**
163
+ * Error-throwing stub for server-only `Static` function.
164
+ */
165
+ export function Static(): never {
166
+ throw serverOnlyStubError("Static");
167
+ }
168
+
169
+ /**
170
+ * Error-throwing stub for server-only `getRequestContext` function.
171
+ */
172
+ export function getRequestContext(): never {
173
+ throw serverOnlyStubError("getRequestContext");
174
+ }
175
+
176
+ /**
177
+ * Error-throwing stub for server-only `cookies` function.
178
+ */
179
+ export function cookies(): never {
180
+ throw serverOnlyStubError("cookies");
181
+ }
182
+
183
+ /**
184
+ * Error-throwing stub for server-only `headers` function.
185
+ */
186
+ export function headers(): never {
187
+ throw serverOnlyStubError("headers");
188
+ }
189
+
190
+ /**
191
+ * Error-throwing stub for server-only `createReverse` function.
192
+ */
193
+ export function createReverse(): never {
194
+ throw serverOnlyStubError("createReverse");
195
+ }
196
+
197
+ /**
198
+ * Error-throwing stub for server-only `enableMatchDebug` function.
199
+ */
200
+ export function enableMatchDebug(): never {
201
+ throw serverOnlyStubError("enableMatchDebug");
202
+ }
203
+
204
+ /**
205
+ * Error-throwing stub for server-only `getMatchDebugStats` function.
206
+ */
207
+ export function getMatchDebugStats(): never {
208
+ throw serverOnlyStubError("getMatchDebugStats");
209
+ }
210
+
211
+ // Error-throwing stubs for server-only route helpers
212
+ export function layout(): never {
213
+ throw serverOnlyStubError("layout");
214
+ }
215
+ export function cache(): never {
216
+ throw serverOnlyStubError("cache");
217
+ }
218
+ export function middleware(): never {
219
+ throw serverOnlyStubError("middleware");
220
+ }
221
+ export function revalidate(): never {
222
+ throw serverOnlyStubError("revalidate");
223
+ }
224
+ export function loader(): never {
225
+ throw serverOnlyStubError("loader");
226
+ }
227
+ export function loading(): never {
228
+ throw serverOnlyStubError("loading");
229
+ }
230
+ export function parallel(): never {
231
+ throw serverOnlyStubError("parallel");
232
+ }
233
+ export function intercept(): never {
234
+ throw serverOnlyStubError("intercept");
235
+ }
236
+ export function when(): never {
237
+ throw serverOnlyStubError("when");
238
+ }
239
+ export function errorBoundary(): never {
240
+ throw serverOnlyStubError("errorBoundary");
241
+ }
242
+ export function notFoundBoundary(): never {
243
+ throw serverOnlyStubError("notFoundBoundary");
244
+ }
245
+ export function transition(): never {
246
+ throw serverOnlyStubError("transition");
247
+ }
248
+
249
+ // Request context type (safe for client)
250
+ export type { PublicRequestContext as RequestContext } from "./server/request-context.js";
251
+
252
+ // Cookie store types (safe for client)
253
+ export type {
254
+ CookieStore,
255
+ Cookie,
256
+ ReadonlyHeaders,
257
+ } from "./server/cookie-store.js";
258
+
259
+ // Meta types
260
+ export type { MetaDescriptor, MetaDescriptorBase } from "./router/types.js";
261
+
262
+ // Reverse type utilities for type-safe URL generation (Django-style URL reversal)
263
+ export type {
264
+ ScopedReverseFunction,
265
+ ReverseFunction,
266
+ ExtractLocalRoutes,
267
+ ParamsFor,
268
+ SanitizePrefix,
269
+ MergeRoutes,
270
+ } from "./reverse.js";
271
+ // scopedReverse() helper for handlers to get locally-typed reverse
272
+ export { scopedReverse } from "./reverse.js";
273
+
274
+ // Location state (universal - works on both server and client)
275
+ export {
276
+ createLocationState,
277
+ type LocationStateDefinition,
278
+ type LocationStateEntry,
279
+ type LocationStateOptions,
280
+ } from "./browser/react/location-state-shared.js";
281
+
282
+ // Path-based response type lookup from RegisteredRoutes
283
+ export type { PathResponse } from "./href-client.js";
284
+
285
+ // Telemetry sink
286
+ export { createConsoleSink } from "./router/telemetry.js";
287
+ export { createOTelSink } from "./router/telemetry-otel.js";
288
+ export type { OTelTracer, OTelSpan } from "./router/telemetry-otel.js";
289
+ export type {
290
+ TelemetrySink,
291
+ TelemetryEvent,
292
+ RequestStartEvent,
293
+ RequestEndEvent,
294
+ RequestErrorEvent,
295
+ RequestTimeoutEvent,
296
+ LoaderStartEvent,
297
+ LoaderEndEvent,
298
+ LoaderErrorEvent,
299
+ HandlerErrorEvent,
300
+ CacheDecisionEvent,
301
+ RevalidationDecisionEvent,
302
+ } from "./router/telemetry.js";
303
+
304
+ // Timeout types and error class
305
+ export { RouterTimeoutError } from "./router/timeout.js";
306
+ export type {
307
+ RouterTimeouts,
308
+ TimeoutPhase,
309
+ TimeoutContext,
310
+ } from "./router/timeout.js";
@@ -0,0 +1,11 @@
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).
5
+ 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;