@rangojs/router 0.0.0-experimental.d20dd405 → 0.0.0-experimental.dacec167
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.
- package/README.md +8 -8
- package/dist/bin/rango.js +147 -57
- package/dist/testing/vitest.js +82 -0
- package/dist/vite/index.js +914 -485
- package/package.json +55 -11
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +220 -30
- package/skills/caching/SKILL.md +116 -8
- package/skills/composability/SKILL.md +27 -2
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +1 -1
- package/skills/hooks/SKILL.md +196 -21
- package/skills/host-router/SKILL.md +45 -20
- package/skills/intercept/SKILL.md +1 -4
- package/skills/layout/SKILL.md +4 -7
- package/skills/links/SKILL.md +22 -10
- package/skills/loader/SKILL.md +149 -6
- package/skills/middleware/SKILL.md +13 -9
- package/skills/migrate-nextjs/SKILL.md +1 -1
- package/skills/mime-routes/SKILL.md +27 -0
- package/skills/observability/SKILL.md +137 -0
- package/skills/parallel/SKILL.md +3 -6
- package/skills/prerender/SKILL.md +14 -33
- package/skills/rango/SKILL.md +242 -26
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +58 -9
- package/skills/route/SKILL.md +9 -4
- package/skills/router-setup/SKILL.md +3 -3
- package/skills/server-actions/SKILL.md +53 -41
- package/skills/testing/SKILL.md +778 -0
- package/skills/typesafety/SKILL.md +310 -26
- package/skills/use-cache/SKILL.md +34 -5
- package/skills/view-transitions/SKILL.md +85 -3
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +117 -0
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/event-controller.ts +42 -66
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/navigation-bridge.ts +9 -67
- package/src/browser/navigation-client.ts +12 -15
- package/src/browser/navigation-store.ts +7 -8
- package/src/browser/navigation-transaction.ts +10 -28
- package/src/browser/partial-update.ts +8 -16
- package/src/browser/react/NavigationProvider.tsx +55 -65
- package/src/browser/react/location-state-shared.ts +175 -4
- package/src/browser/react/location-state.ts +39 -13
- package/src/browser/react/use-handle.ts +17 -9
- package/src/browser/react/use-params.ts +3 -4
- package/src/browser/react/use-reverse.ts +19 -12
- package/src/browser/react/use-router.ts +14 -1
- package/src/browser/response-adapter.ts +25 -0
- package/src/browser/rsc-router.tsx +30 -16
- package/src/browser/scroll-restoration.ts +30 -25
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +23 -30
- package/src/browser/types.ts +2 -0
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +60 -35
- package/src/build/generate-route-types.ts +2 -0
- package/src/build/index.ts +2 -0
- package/src/build/route-types/codegen.ts +4 -4
- package/src/build/route-types/include-resolution.ts +1 -1
- package/src/build/route-types/per-module-writer.ts +7 -4
- package/src/build/route-types/router-processing.ts +55 -14
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +118 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-scope.ts +28 -42
- package/src/cache/cf/cf-cache-store.ts +49 -6
- package/src/client.tsx +5 -7
- package/src/context-var.ts +5 -5
- package/src/decode-loader-results.ts +36 -0
- package/src/errors.ts +30 -1
- package/src/handle.ts +26 -13
- package/src/host/index.ts +2 -2
- package/src/host/router.ts +129 -57
- package/src/host/types.ts +31 -2
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +136 -19
- package/src/index.rsc.ts +6 -4
- package/src/index.ts +13 -6
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +21 -6
- package/src/loader.ts +3 -10
- package/src/missing-id-error.ts +68 -0
- package/src/prerender.ts +4 -4
- package/src/response-utils.ts +9 -0
- package/src/reverse.ts +16 -13
- package/src/route-content-wrapper.tsx +6 -28
- package/src/route-definition/dsl-helpers.ts +238 -263
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +37 -14
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-types.ts +19 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +15 -2
- package/src/router/error-handling.ts +1 -1
- package/src/router/intercept-resolution.ts +4 -18
- package/src/router/lazy-includes.ts +2 -2
- package/src/router/loader-resolution.ts +16 -2
- package/src/router/match-handlers.ts +62 -20
- package/src/router/match-middleware/cache-lookup.ts +44 -91
- package/src/router/match-middleware/cache-store.ts +3 -2
- package/src/router/match-result.ts +32 -30
- package/src/router/metrics.ts +1 -1
- package/src/router/middleware-types.ts +1 -1
- package/src/router/middleware.ts +46 -78
- package/src/router/prerender-match.ts +1 -1
- package/src/router/preview-match.ts +3 -1
- package/src/router/request-classification.ts +4 -28
- package/src/router/revalidation.ts +43 -1
- package/src/router/router-interfaces.ts +45 -28
- package/src/router/router-options.ts +40 -1
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +19 -6
- package/src/router/segment-resolution/revalidation.ts +19 -6
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/telemetry.ts +99 -0
- package/src/router/types.ts +8 -0
- package/src/router.ts +37 -21
- package/src/rsc/handler-context.ts +2 -2
- package/src/rsc/handler.ts +20 -65
- package/src/rsc/helpers.ts +22 -2
- package/src/rsc/index.ts +1 -1
- package/src/rsc/origin-guard.ts +28 -10
- package/src/rsc/response-route-handler.ts +32 -52
- package/src/rsc/rsc-rendering.ts +27 -53
- package/src/rsc/runtime-warnings.ts +9 -10
- package/src/rsc/server-action.ts +13 -37
- package/src/rsc/ssr-setup.ts +16 -0
- package/src/rsc/types.ts +2 -2
- package/src/search-params.ts +4 -4
- package/src/segment-system.tsx +64 -49
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +118 -51
- package/src/server/cookie-store.ts +28 -4
- package/src/server/request-context.ts +10 -0
- package/src/static-handler.ts +1 -1
- package/src/testing/cache-status.ts +166 -0
- package/src/testing/collect-handle.ts +63 -0
- package/src/testing/dispatch.ts +440 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +154 -0
- package/src/testing/e2e/index.ts +149 -0
- package/src/testing/e2e/matchers.ts +51 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +306 -0
- package/src/testing/e2e/server.ts +183 -0
- package/src/testing/flight-matchers.ts +104 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +320 -0
- package/src/testing/flight.entry.ts +39 -0
- package/src/testing/flight.ts +197 -0
- package/src/testing/generated-routes.ts +223 -0
- package/src/testing/index.ts +106 -0
- package/src/testing/internal/context.ts +331 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/render-route.tsx +565 -0
- package/src/testing/run-loader.ts +341 -0
- package/src/testing/run-middleware.ts +188 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +270 -0
- package/src/types/global-namespace.ts +39 -26
- package/src/types/handler-context.ts +56 -11
- package/src/types/index.ts +1 -0
- package/src/types/segments.ts +18 -1
- package/src/urls/include-helper.ts +10 -53
- package/src/urls/index.ts +0 -3
- package/src/urls/path-helper-types.ts +11 -3
- package/src/urls/path-helper.ts +17 -52
- package/src/urls/pattern-types.ts +36 -19
- package/src/urls/response-types.ts +20 -19
- package/src/urls/type-extraction.ts +26 -116
- package/src/urls/urls-function.ts +1 -5
- package/src/use-loader.tsx +413 -42
- package/src/vite/debug.ts +1 -0
- package/src/vite/discovery/bundle-postprocess.ts +6 -6
- package/src/vite/discovery/discover-routers.ts +70 -48
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/prerender-collection.ts +19 -25
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/state.ts +33 -0
- package/src/vite/discovery/virtual-module-codegen.ts +13 -23
- package/src/vite/index.ts +2 -0
- package/src/vite/plugin-types.ts +67 -0
- package/src/vite/plugins/cjs-to-esm.ts +3 -7
- package/src/vite/plugins/client-ref-hashing.ts +12 -1
- package/src/vite/plugins/cloudflare-protocol-stub.ts +1 -1
- package/src/vite/plugins/expose-action-id.ts +2 -2
- package/src/vite/plugins/expose-id-utils.ts +12 -8
- package/src/vite/plugins/expose-ids/export-analysis.ts +100 -20
- package/src/vite/plugins/expose-ids/handler-transform.ts +8 -61
- package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
- package/src/vite/plugins/expose-internal-ids.ts +47 -67
- package/src/vite/plugins/performance-tracks.ts +12 -16
- package/src/vite/plugins/use-cache-transform.ts +13 -11
- package/src/vite/plugins/version-injector.ts +2 -12
- package/src/vite/plugins/version-plugin.ts +59 -2
- package/src/vite/plugins/virtual-entries.ts +2 -2
- package/src/vite/rango.ts +67 -15
- package/src/vite/router-discovery.ts +208 -63
- package/src/vite/utils/ast-handler-extract.ts +15 -15
- package/src/vite/utils/bundle-analysis.ts +4 -2
- package/src/vite/utils/client-chunks.ts +190 -0
- package/src/vite/utils/forward-user-plugins.ts +193 -0
- package/src/vite/utils/manifest-utils.ts +21 -5
- package/src/vite/utils/shared-utils.ts +107 -26
- package/src/browser/action-response-classifier.ts +0 -99
package/src/href-client.ts
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import type { GetRegisteredRoutes } from "./types.js";
|
|
18
|
+
import type { JsonSerialize } from "./serialize.js";
|
|
18
19
|
import type { ResponseEnvelope } from "./urls.js";
|
|
19
20
|
|
|
20
21
|
/**
|
|
@@ -103,29 +104,75 @@ type NameForPattern<TPattern extends string, TRoutes = GetRegisteredRoutes> = {
|
|
|
103
104
|
}[keyof TRoutes];
|
|
104
105
|
|
|
105
106
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
107
|
+
* Strip a query (`?…`) and/or hash (`#…`) suffix before matching, so a concrete
|
|
108
|
+
* URL like `/api/health?ts=1` still resolves to its route's response. Removes
|
|
109
|
+
* from the earliest of `?`/`#`: a `#` before the first `?` (the query is part of
|
|
110
|
+
* a fragment, e.g. `/health#top?x=1`) is handled, as is a `/:` that only appears
|
|
111
|
+
* inside the query (e.g. `/health?next=/:id`).
|
|
112
|
+
*/
|
|
113
|
+
type StripPathSuffix<T extends string> = T extends `${infer Base}?${string}`
|
|
114
|
+
? Base extends `${infer Frag}#${string}`
|
|
115
|
+
? Frag
|
|
116
|
+
: Base
|
|
117
|
+
: T extends `${infer Base}#${string}`
|
|
118
|
+
? Base
|
|
119
|
+
: T;
|
|
120
|
+
|
|
121
|
+
/** Extract a route entry's response payload (or `never` for RSC routes). */
|
|
122
|
+
type ResponsePayloadOf<TRoutes, K extends keyof TRoutes> = TRoutes[K] extends {
|
|
123
|
+
readonly response: infer R;
|
|
124
|
+
}
|
|
125
|
+
? Exclude<R, Response>
|
|
126
|
+
: never;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Look up the response payload for a route, keyed by either a route pattern
|
|
130
|
+
* (`/api/products/:id`) or a concrete path (`/api/products/123`). The same type
|
|
131
|
+
* serves a pattern lookup and a typed `fetch` wrapper that forwards a concrete
|
|
132
|
+
* `Rango.Path`:
|
|
110
133
|
*
|
|
111
|
-
*
|
|
112
|
-
* PathResponse<"/api/
|
|
134
|
+
* PathResponse<"/api/products/:id"> → Product // by pattern
|
|
135
|
+
* PathResponse<"/api/products/123"> → Product // by concrete path
|
|
113
136
|
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
137
|
+
* The query/hash suffix is stripped first; the stripped key is then treated as a
|
|
138
|
+
* pattern when it contains a `/:param` segment and matched exactly (precise even
|
|
139
|
+
* for nested dynamic routes), otherwise as a concrete path matched against each
|
|
140
|
+
* route's `PatternToPath` template. Because those holes are `${string}`
|
|
141
|
+
* (slash-greedy), a concrete path under a *nested* dynamic route can match several
|
|
142
|
+
* patterns and union their responses — pattern lookups do not have this
|
|
143
|
+
* looseness. RSC routes (no response) and unmatched keys resolve to `never`.
|
|
144
|
+
*/
|
|
145
|
+
type ResponsePayloadFor<
|
|
146
|
+
TPath extends string,
|
|
147
|
+
TRoutes = GetRegisteredRoutes,
|
|
148
|
+
> = ResponsePayloadForKey<StripPathSuffix<TPath>, TRoutes>;
|
|
149
|
+
|
|
150
|
+
type ResponsePayloadForKey<
|
|
151
|
+
TKey extends string,
|
|
152
|
+
TRoutes,
|
|
153
|
+
> = TKey extends `${string}/:${string}`
|
|
154
|
+
? {
|
|
155
|
+
[K in keyof TRoutes]: RoutePattern<TRoutes, K> extends TKey
|
|
156
|
+
? ResponsePayloadOf<TRoutes, K>
|
|
157
|
+
: never;
|
|
158
|
+
}[keyof TRoutes]
|
|
159
|
+
: {
|
|
160
|
+
[K in keyof TRoutes]: TKey extends PatternToPath<RoutePattern<TRoutes, K>>
|
|
161
|
+
? ResponsePayloadOf<TRoutes, K>
|
|
162
|
+
: never;
|
|
163
|
+
}[keyof TRoutes];
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Public response type for a route, keyed by pattern or concrete path. The
|
|
167
|
+
* payload is wrapped in `JsonSerialize` so it describes the JSON **wire** value a
|
|
168
|
+
* consumer receives from `fetch().then(r => r.json())`, not the handler's raw
|
|
169
|
+
* return type — e.g. a handler returning `{ createdAt: Date }` resolves here to
|
|
170
|
+
* `ResponseEnvelope<{ createdAt: string }>`.
|
|
116
171
|
*/
|
|
117
172
|
export type PathResponse<
|
|
118
|
-
|
|
173
|
+
TPath extends string,
|
|
119
174
|
TRoutes = GetRegisteredRoutes,
|
|
120
|
-
> = ResponseEnvelope<
|
|
121
|
-
{
|
|
122
|
-
[K in keyof TRoutes]: RoutePattern<TRoutes, K> extends TPattern
|
|
123
|
-
? TRoutes[K] extends { readonly response: infer R }
|
|
124
|
-
? Exclude<R, Response>
|
|
125
|
-
: never
|
|
126
|
-
: never;
|
|
127
|
-
}[keyof TRoutes]
|
|
128
|
-
>;
|
|
175
|
+
> = ResponseEnvelope<JsonSerialize<ResponsePayloadFor<TPath, TRoutes>>>;
|
|
129
176
|
|
|
130
177
|
/**
|
|
131
178
|
* Strip trailing slash from a path (e.g., "/blog/" -> "/blog" | "/blog/")
|
|
@@ -140,7 +187,7 @@ type OptionalTrailingSlash<T extends string> = T extends `${infer Base}/`
|
|
|
140
187
|
/**
|
|
141
188
|
* Union of all valid paths from registered routes
|
|
142
189
|
*
|
|
143
|
-
* Generated from
|
|
190
|
+
* Generated from Rango.RegisteredRoutes via module augmentation.
|
|
144
191
|
* Allows optional query strings and hash fragments.
|
|
145
192
|
*/
|
|
146
193
|
export type ValidPaths<TRoutes = GetRegisteredRoutes> =
|
|
@@ -154,6 +201,76 @@ export type ValidPaths<TRoutes = GetRegisteredRoutes> =
|
|
|
154
201
|
}[keyof TRoutes]
|
|
155
202
|
>;
|
|
156
203
|
|
|
204
|
+
// Module-scoped alias so the ambient `Rango.PathResponse` below can reference
|
|
205
|
+
// the module-level `PathResponse` without the global namespace shadowing the
|
|
206
|
+
// name when both are called `PathResponse`.
|
|
207
|
+
type GlobalPathResponse<
|
|
208
|
+
TPattern extends string,
|
|
209
|
+
TRoutes = GetRegisteredRoutes,
|
|
210
|
+
> = PathResponse<TPattern, TRoutes>;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Ambient path types on the `Rango` namespace.
|
|
214
|
+
*
|
|
215
|
+
* These live on the same global namespace consumers already augment for
|
|
216
|
+
* `Rango.Env` / `Rango.Vars`, so they are reachable with no import wherever the
|
|
217
|
+
* router's types are in scope. They are the public, recommended surface for
|
|
218
|
+
* typing anything that wraps `href()`. `ValidPaths` / `PathResponse` stay as the
|
|
219
|
+
* internal building blocks behind them.
|
|
220
|
+
*/
|
|
221
|
+
declare global {
|
|
222
|
+
namespace Rango {
|
|
223
|
+
/**
|
|
224
|
+
* Union of every valid route path accepted by `href()`.
|
|
225
|
+
*
|
|
226
|
+
* Type a wrapper's path parameter as `Rango.Path` so it shares `href()`'s
|
|
227
|
+
* compile-time validation against the registered routes:
|
|
228
|
+
*
|
|
229
|
+
* ```ts
|
|
230
|
+
* import { href } from "@rangojs/router/client";
|
|
231
|
+
*
|
|
232
|
+
* export const appHref = (path: Rango.Path) => href(path);
|
|
233
|
+
* ```
|
|
234
|
+
*
|
|
235
|
+
* Resolves from `Rango.RegisteredRoutes` when augmented, otherwise the
|
|
236
|
+
* auto-generated `Rango.GeneratedRouteMap`, otherwise a permissive
|
|
237
|
+
* `/${string}` fallback.
|
|
238
|
+
*/
|
|
239
|
+
type Path<TRoutes = GetRegisteredRoutes> = ValidPaths<TRoutes>;
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Response payload for a route, looked up from the global route map by
|
|
243
|
+
* either a route pattern (`/api/products/:id`) or a concrete path
|
|
244
|
+
* (`/api/products/123`). Because it accepts a concrete `Rango.Path`, it
|
|
245
|
+
* doubles as the return type of a typed `fetch` wrapper:
|
|
246
|
+
*
|
|
247
|
+
* ```ts
|
|
248
|
+
* type Product = Rango.PathResponse<"/api/products/:id">; // by pattern
|
|
249
|
+
* type Same = Rango.PathResponse<"/api/products/42">; // by concrete path
|
|
250
|
+
*
|
|
251
|
+
* const get = async <T extends Rango.Path>(
|
|
252
|
+
* path: T,
|
|
253
|
+
* ): Promise<Rango.PathResponse<T>> =>
|
|
254
|
+
* fetch(href(path)).then((r) => r.json());
|
|
255
|
+
* ```
|
|
256
|
+
*
|
|
257
|
+
* The payload is the JSON **wire** shape (via `Rango.JsonSerialize`), not the
|
|
258
|
+
* handler's raw return — a handler returning `{ createdAt: Date }` resolves
|
|
259
|
+
* here to `ResponseEnvelope<{ createdAt: string }>`, matching what
|
|
260
|
+
* `fetch().then(r => r.json())` actually yields.
|
|
261
|
+
*
|
|
262
|
+
* Only resolves once `Rango.RegisteredRoutes` carries response metadata (the
|
|
263
|
+
* generated map has paths and search but no payloads). Pass an explicit route
|
|
264
|
+
* map as the second argument to look up against a non-global map (rarely
|
|
265
|
+
* needed in app code).
|
|
266
|
+
*/
|
|
267
|
+
type PathResponse<
|
|
268
|
+
TPath extends string,
|
|
269
|
+
TRoutes = GetRegisteredRoutes,
|
|
270
|
+
> = GlobalPathResponse<TPath, TRoutes>;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
157
274
|
/**
|
|
158
275
|
* Type-safe href function for client-side use
|
|
159
276
|
*
|
package/src/index.rsc.ts
CHANGED
|
@@ -18,6 +18,7 @@ export {
|
|
|
18
18
|
MiddlewareError,
|
|
19
19
|
HandlerError,
|
|
20
20
|
BuildError,
|
|
21
|
+
DslContextError,
|
|
21
22
|
InvalidHandlerError,
|
|
22
23
|
RouterError,
|
|
23
24
|
Skip,
|
|
@@ -43,6 +44,7 @@ export type {
|
|
|
43
44
|
// Revalidation types
|
|
44
45
|
RevalidateParams,
|
|
45
46
|
Revalidate,
|
|
47
|
+
ActionRef,
|
|
46
48
|
RouteKeys,
|
|
47
49
|
// Loader types
|
|
48
50
|
LoaderDefinition,
|
|
@@ -67,7 +69,7 @@ export type {
|
|
|
67
69
|
|
|
68
70
|
// Router options type (server-only, so import directly)
|
|
69
71
|
export type {
|
|
70
|
-
|
|
72
|
+
RangoOptions,
|
|
71
73
|
SSRStreamMode,
|
|
72
74
|
SSROptions,
|
|
73
75
|
ResolveStreamingContext,
|
|
@@ -151,7 +153,7 @@ export {
|
|
|
151
153
|
// Core router (server-side)
|
|
152
154
|
export {
|
|
153
155
|
createRouter,
|
|
154
|
-
type
|
|
156
|
+
type Rango,
|
|
155
157
|
type RootLayoutProps,
|
|
156
158
|
type RouterRequestInput,
|
|
157
159
|
} from "./router.js";
|
|
@@ -220,8 +222,8 @@ export {
|
|
|
220
222
|
type LocationStateOptions,
|
|
221
223
|
} from "./browser/react/location-state-shared.js";
|
|
222
224
|
|
|
223
|
-
// Path
|
|
224
|
-
|
|
225
|
+
// Path and response types are ambient on the `Rango` namespace (`Rango.Path`,
|
|
226
|
+
// `Rango.PathResponse`, declared in href-client.ts) — no import needed.
|
|
225
227
|
|
|
226
228
|
// Telemetry sink
|
|
227
229
|
export { createConsoleSink } from "./router/telemetry.js";
|
package/src/index.ts
CHANGED
|
@@ -18,6 +18,7 @@ export {
|
|
|
18
18
|
MiddlewareError,
|
|
19
19
|
HandlerError,
|
|
20
20
|
BuildError,
|
|
21
|
+
DslContextError,
|
|
21
22
|
InvalidHandlerError,
|
|
22
23
|
RouterError,
|
|
23
24
|
Skip,
|
|
@@ -43,6 +44,7 @@ export type {
|
|
|
43
44
|
// Revalidation types
|
|
44
45
|
RevalidateParams,
|
|
45
46
|
Revalidate,
|
|
47
|
+
ActionRef,
|
|
46
48
|
RouteKeys,
|
|
47
49
|
// Loader types
|
|
48
50
|
LoaderDefinition,
|
|
@@ -302,12 +304,17 @@ export {
|
|
|
302
304
|
type LocationStateOptions,
|
|
303
305
|
} from "./browser/react/location-state-shared.js";
|
|
304
306
|
|
|
305
|
-
// Path
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
// Telemetry
|
|
309
|
-
|
|
310
|
-
|
|
307
|
+
// Path and response types are ambient on the `Rango` namespace (`Rango.Path`,
|
|
308
|
+
// `Rango.PathResponse`, declared in href-client.ts) — no import needed.
|
|
309
|
+
|
|
310
|
+
// Telemetry types only — the createConsoleSink/createOTelSink values are
|
|
311
|
+
// server-only and live in index.rsc.ts (the `react-server` condition of the
|
|
312
|
+
// bare `@rangojs/router` import). Re-exporting them as values from this
|
|
313
|
+
// (default/client) entry would pull telemetry.ts and telemetry-otel.ts into
|
|
314
|
+
// the client module graph; both tree-shake to zero bytes but still appear in
|
|
315
|
+
// bundle analysis output and slow build-time module resolution. Consumers
|
|
316
|
+
// who need the values in non-RSC contexts can import from
|
|
317
|
+
// `@rangojs/router/server`.
|
|
311
318
|
export type { OTelTracer, OTelSpan } from "./router/telemetry-otel.js";
|
|
312
319
|
export type { TelemetrySink, TelemetryEvent } from "./router/telemetry.js";
|
|
313
320
|
|