@rangojs/router 0.0.0-experimental.0f44aca1
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/AGENTS.md +5 -0
- package/README.md +899 -0
- package/dist/bin/rango.js +1601 -0
- package/dist/vite/index.js +5214 -0
- package/package.json +176 -0
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +262 -0
- package/skills/caching/SKILL.md +220 -0
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +112 -0
- package/skills/document-cache/SKILL.md +182 -0
- package/skills/fonts/SKILL.md +167 -0
- package/skills/hooks/SKILL.md +704 -0
- package/skills/host-router/SKILL.md +218 -0
- package/skills/intercept/SKILL.md +313 -0
- package/skills/layout/SKILL.md +310 -0
- package/skills/links/SKILL.md +239 -0
- package/skills/loader/SKILL.md +596 -0
- package/skills/middleware/SKILL.md +339 -0
- package/skills/mime-routes/SKILL.md +128 -0
- package/skills/parallel/SKILL.md +305 -0
- package/skills/prerender/SKILL.md +643 -0
- package/skills/rango/SKILL.md +118 -0
- package/skills/response-routes/SKILL.md +411 -0
- package/skills/route/SKILL.md +385 -0
- package/skills/router-setup/SKILL.md +439 -0
- package/skills/tailwind/SKILL.md +129 -0
- package/skills/theme/SKILL.md +79 -0
- package/skills/typesafety/SKILL.md +623 -0
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +273 -0
- package/src/bin/rango.ts +321 -0
- package/src/browser/action-coordinator.ts +97 -0
- package/src/browser/action-response-classifier.ts +99 -0
- package/src/browser/event-controller.ts +899 -0
- package/src/browser/history-state.ts +80 -0
- package/src/browser/index.ts +18 -0
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +141 -0
- package/src/browser/logging.ts +55 -0
- package/src/browser/merge-segment-loaders.ts +134 -0
- package/src/browser/navigation-bridge.ts +645 -0
- package/src/browser/navigation-client.ts +215 -0
- package/src/browser/navigation-store.ts +806 -0
- package/src/browser/navigation-transaction.ts +295 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +550 -0
- package/src/browser/prefetch/cache.ts +146 -0
- package/src/browser/prefetch/fetch.ts +135 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +42 -0
- package/src/browser/prefetch/queue.ts +88 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +360 -0
- package/src/browser/react/NavigationProvider.tsx +386 -0
- package/src/browser/react/ScrollRestoration.tsx +94 -0
- package/src/browser/react/context.ts +59 -0
- package/src/browser/react/filter-segment-order.ts +11 -0
- package/src/browser/react/index.ts +52 -0
- package/src/browser/react/location-state-shared.ts +162 -0
- package/src/browser/react/location-state.ts +107 -0
- package/src/browser/react/mount-context.ts +37 -0
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/shallow-equal.ts +27 -0
- package/src/browser/react/use-action.ts +218 -0
- package/src/browser/react/use-client-cache.ts +58 -0
- package/src/browser/react/use-handle.ts +162 -0
- package/src/browser/react/use-href.tsx +40 -0
- package/src/browser/react/use-link-status.ts +135 -0
- package/src/browser/react/use-mount.ts +31 -0
- package/src/browser/react/use-navigation.ts +99 -0
- package/src/browser/react/use-params.ts +65 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-router.ts +63 -0
- package/src/browser/react/use-search-params.ts +56 -0
- package/src/browser/react/use-segments.ts +171 -0
- package/src/browser/response-adapter.ts +73 -0
- package/src/browser/rsc-router.tsx +431 -0
- package/src/browser/scroll-restoration.ts +400 -0
- package/src/browser/segment-reconciler.ts +216 -0
- package/src/browser/segment-structure-assert.ts +83 -0
- package/src/browser/server-action-bridge.ts +667 -0
- package/src/browser/shallow.ts +40 -0
- package/src/browser/types.ts +538 -0
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +438 -0
- package/src/build/generate-route-types.ts +36 -0
- package/src/build/index.ts +35 -0
- package/src/build/route-trie.ts +265 -0
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +98 -0
- package/src/build/route-types/codegen.ts +102 -0
- package/src/build/route-types/include-resolution.ts +411 -0
- package/src/build/route-types/param-extraction.ts +48 -0
- package/src/build/route-types/per-module-writer.ts +128 -0
- package/src/build/route-types/router-processing.ts +469 -0
- package/src/build/route-types/scan-filter.ts +78 -0
- package/src/build/runtime-discovery.ts +231 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-key-utils.ts +44 -0
- package/src/cache/cache-policy.ts +125 -0
- package/src/cache/cache-runtime.ts +338 -0
- package/src/cache/cache-scope.ts +382 -0
- package/src/cache/cf/cf-cache-store.ts +540 -0
- package/src/cache/cf/index.ts +25 -0
- package/src/cache/document-cache.ts +369 -0
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +41 -0
- package/src/cache/index.ts +43 -0
- package/src/cache/memory-segment-store.ts +328 -0
- package/src/cache/profile-registry.ts +73 -0
- package/src/cache/read-through-swr.ts +134 -0
- package/src/cache/segment-codec.ts +256 -0
- package/src/cache/taint.ts +98 -0
- package/src/cache/types.ts +342 -0
- package/src/client.rsc.tsx +85 -0
- package/src/client.tsx +601 -0
- package/src/component-utils.ts +76 -0
- package/src/components/DefaultDocument.tsx +27 -0
- package/src/context-var.ts +86 -0
- package/src/debug.ts +243 -0
- package/src/default-error-boundary.tsx +88 -0
- package/src/deps/browser.ts +8 -0
- package/src/deps/html-stream-client.ts +2 -0
- package/src/deps/html-stream-server.ts +2 -0
- package/src/deps/rsc.ts +10 -0
- package/src/deps/ssr.ts +2 -0
- package/src/errors.ts +365 -0
- package/src/handle.ts +135 -0
- package/src/handles/MetaTags.tsx +246 -0
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +7 -0
- package/src/handles/meta.ts +264 -0
- package/src/host/cookie-handler.ts +165 -0
- package/src/host/errors.ts +97 -0
- package/src/host/index.ts +53 -0
- package/src/host/pattern-matcher.ts +214 -0
- package/src/host/router.ts +352 -0
- package/src/host/testing.ts +79 -0
- package/src/host/types.ts +146 -0
- package/src/host/utils.ts +25 -0
- package/src/href-client.ts +222 -0
- package/src/index.rsc.ts +233 -0
- package/src/index.ts +277 -0
- package/src/internal-debug.ts +11 -0
- package/src/loader.rsc.ts +89 -0
- package/src/loader.ts +64 -0
- package/src/network-error-thrower.tsx +23 -0
- package/src/outlet-context.ts +15 -0
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +37 -0
- package/src/prerender/store.ts +185 -0
- package/src/prerender.ts +463 -0
- package/src/reverse.ts +330 -0
- package/src/root-error-boundary.tsx +289 -0
- package/src/route-content-wrapper.tsx +196 -0
- package/src/route-definition/dsl-helpers.ts +934 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +430 -0
- package/src/route-definition/index.ts +52 -0
- package/src/route-definition/redirect.ts +93 -0
- package/src/route-definition.ts +1 -0
- package/src/route-map-builder.ts +275 -0
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +259 -0
- package/src/router/content-negotiation.ts +116 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +287 -0
- package/src/router/find-match.ts +158 -0
- package/src/router/handler-context.ts +451 -0
- package/src/router/intercept-resolution.ts +395 -0
- package/src/router/lazy-includes.ts +234 -0
- package/src/router/loader-resolution.ts +420 -0
- package/src/router/logging.ts +248 -0
- package/src/router/manifest.ts +267 -0
- package/src/router/match-api.ts +620 -0
- package/src/router/match-context.ts +266 -0
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +223 -0
- package/src/router/match-middleware/cache-lookup.ts +634 -0
- package/src/router/match-middleware/cache-store.ts +295 -0
- package/src/router/match-middleware/index.ts +81 -0
- package/src/router/match-middleware/intercept-resolution.ts +306 -0
- package/src/router/match-middleware/segment-resolution.ts +192 -0
- package/src/router/match-pipelines.ts +179 -0
- package/src/router/match-result.ts +219 -0
- package/src/router/metrics.ts +282 -0
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +222 -0
- package/src/router/middleware.ts +748 -0
- package/src/router/pattern-matching.ts +563 -0
- package/src/router/prerender-match.ts +402 -0
- package/src/router/preview-match.ts +170 -0
- package/src/router/revalidation.ts +289 -0
- package/src/router/router-context.ts +316 -0
- package/src/router/router-interfaces.ts +452 -0
- package/src/router/router-options.ts +592 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +570 -0
- package/src/router/segment-resolution/helpers.ts +263 -0
- package/src/router/segment-resolution/loader-cache.ts +198 -0
- package/src/router/segment-resolution/revalidation.ts +1239 -0
- package/src/router/segment-resolution/static-store.ts +67 -0
- package/src/router/segment-resolution.ts +21 -0
- package/src/router/segment-wrappers.ts +289 -0
- package/src/router/telemetry-otel.ts +299 -0
- package/src/router/telemetry.ts +300 -0
- package/src/router/timeout.ts +148 -0
- package/src/router/trie-matching.ts +239 -0
- package/src/router/types.ts +170 -0
- package/src/router.ts +1002 -0
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +1089 -0
- package/src/rsc/helpers.ts +198 -0
- package/src/rsc/index.ts +36 -0
- package/src/rsc/loader-fetch.ts +209 -0
- package/src/rsc/manifest-init.ts +86 -0
- package/src/rsc/nonce.ts +32 -0
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +379 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +347 -0
- package/src/rsc/rsc-rendering.ts +235 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +348 -0
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +263 -0
- package/src/search-params.ts +230 -0
- package/src/segment-system.tsx +454 -0
- package/src/server/context.ts +591 -0
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +37 -0
- package/src/server/handle-store.ts +308 -0
- package/src/server/loader-registry.ts +133 -0
- package/src/server/request-context.ts +914 -0
- package/src/server/root-layout.tsx +10 -0
- package/src/server/tsconfig.json +14 -0
- package/src/server.ts +51 -0
- package/src/ssr/index.tsx +365 -0
- package/src/static-handler.ts +114 -0
- package/src/theme/ThemeProvider.tsx +297 -0
- package/src/theme/ThemeScript.tsx +61 -0
- package/src/theme/constants.ts +62 -0
- package/src/theme/index.ts +48 -0
- package/src/theme/theme-context.ts +44 -0
- package/src/theme/theme-script.ts +155 -0
- package/src/theme/types.ts +182 -0
- package/src/theme/use-theme.ts +44 -0
- package/src/types/boundaries.ts +158 -0
- package/src/types/cache-types.ts +198 -0
- package/src/types/error-types.ts +192 -0
- package/src/types/global-namespace.ts +100 -0
- package/src/types/handler-context.ts +687 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +183 -0
- package/src/types/route-config.ts +170 -0
- package/src/types/route-entry.ts +102 -0
- package/src/types/segments.ts +148 -0
- package/src/types.ts +1 -0
- package/src/urls/include-helper.ts +197 -0
- package/src/urls/index.ts +53 -0
- package/src/urls/path-helper-types.ts +339 -0
- package/src/urls/path-helper.ts +329 -0
- package/src/urls/pattern-types.ts +95 -0
- package/src/urls/response-types.ts +106 -0
- package/src/urls/type-extraction.ts +372 -0
- package/src/urls/urls-function.ts +98 -0
- package/src/urls.ts +1 -0
- package/src/use-loader.tsx +354 -0
- package/src/vite/discovery/bundle-postprocess.ts +184 -0
- package/src/vite/discovery/discover-routers.ts +344 -0
- package/src/vite/discovery/prerender-collection.ts +385 -0
- package/src/vite/discovery/route-types-writer.ts +258 -0
- package/src/vite/discovery/self-gen-tracking.ts +47 -0
- package/src/vite/discovery/state.ts +110 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +16 -0
- package/src/vite/plugin-types.ts +131 -0
- package/src/vite/plugins/cjs-to-esm.ts +93 -0
- package/src/vite/plugins/client-ref-dedup.ts +115 -0
- package/src/vite/plugins/client-ref-hashing.ts +105 -0
- package/src/vite/plugins/expose-action-id.ts +365 -0
- package/src/vite/plugins/expose-id-utils.ts +287 -0
- package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +569 -0
- package/src/vite/plugins/refresh-cmd.ts +65 -0
- package/src/vite/plugins/use-cache-transform.ts +323 -0
- package/src/vite/plugins/version-injector.ts +83 -0
- package/src/vite/plugins/version-plugin.ts +254 -0
- package/src/vite/plugins/version.d.ts +12 -0
- package/src/vite/plugins/virtual-entries.ts +123 -0
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +510 -0
- package/src/vite/router-discovery.ts +785 -0
- package/src/vite/utils/ast-handler-extract.ts +517 -0
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +137 -0
- package/src/vite/utils/manifest-utils.ts +70 -0
- package/src/vite/utils/package-resolution.ts +121 -0
- package/src/vite/utils/prerender-utils.ts +189 -0
- package/src/vite/utils/shared-utils.ts +169 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from "react";
|
|
2
|
+
import type { SerializedManifest } from "../debug.js";
|
|
3
|
+
import type { ReverseFunction } from "../reverse.js";
|
|
4
|
+
import type { UrlPatterns } from "../urls.js";
|
|
5
|
+
import type { EntryData } from "../server/context";
|
|
6
|
+
import type { ErrorInfo, MatchResult } from "../types";
|
|
7
|
+
import type { NonceProvider } from "../rsc/types.js";
|
|
8
|
+
import type { ExecutionContext } from "../server/request-context.js";
|
|
9
|
+
import type {
|
|
10
|
+
SerializedSegmentData,
|
|
11
|
+
SegmentHandleData,
|
|
12
|
+
} from "../cache/types.js";
|
|
13
|
+
import type { MiddlewareEntry, MiddlewareFn } from "./middleware.js";
|
|
14
|
+
import { RSC_ROUTER_BRAND } from "./router-registry.js";
|
|
15
|
+
import type { RSCRouterOptions, RootLayoutProps } from "./router-options.js";
|
|
16
|
+
import type { DefaultVars } from "../types/global-namespace.js";
|
|
17
|
+
import type { ResolvedTimeouts, OnTimeoutCallback } from "./timeout.js";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Options passed to router.fetch(), router.match(), and other request entrypoints.
|
|
21
|
+
* All entrypoints use this same shape for consistency.
|
|
22
|
+
*/
|
|
23
|
+
export interface RouterRequestInput<TEnv, TVars = DefaultVars> {
|
|
24
|
+
env?: TEnv;
|
|
25
|
+
vars?: Partial<TVars>;
|
|
26
|
+
ctx?: ExecutionContext;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Merge route patterns with response types into a single route map.
|
|
31
|
+
* Routes with response types get { path, response } objects; others stay as strings.
|
|
32
|
+
* Handles both plain string routes and { path, search } object routes.
|
|
33
|
+
*/
|
|
34
|
+
type MergeRoutesWithResponses<
|
|
35
|
+
TRoutes extends Record<string, unknown>,
|
|
36
|
+
TResponses,
|
|
37
|
+
> = {
|
|
38
|
+
[K in keyof TRoutes]: K extends keyof NonNullable<TResponses>
|
|
39
|
+
? unknown extends NonNullable<TResponses>[K]
|
|
40
|
+
? TRoutes[K] // RSC route — TData defaults to unknown, keep as-is
|
|
41
|
+
: TRoutes[K] extends { readonly path: infer P extends string }
|
|
42
|
+
? TRoutes[K] & { readonly response: NonNullable<TResponses>[K] }
|
|
43
|
+
: {
|
|
44
|
+
readonly path: TRoutes[K] & string;
|
|
45
|
+
readonly response: NonNullable<TResponses>[K];
|
|
46
|
+
}
|
|
47
|
+
: TRoutes[K];
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Public RSC Router interface — the user-facing API surface.
|
|
52
|
+
*
|
|
53
|
+
* Users interact with this type when building and using routers.
|
|
54
|
+
* Internal framework code uses RSCRouterInternal (via toInternal()) to access
|
|
55
|
+
* matching, build-time, and configuration members that are not part of the
|
|
56
|
+
* public contract.
|
|
57
|
+
*
|
|
58
|
+
* TRoutes accumulates all registered route types through the builder chain.
|
|
59
|
+
*/
|
|
60
|
+
export interface RSCRouter<
|
|
61
|
+
TEnv = any,
|
|
62
|
+
TRoutes extends Record<string, unknown> = Record<string, string>,
|
|
63
|
+
> {
|
|
64
|
+
/**
|
|
65
|
+
* Unique identifier for this router instance.
|
|
66
|
+
* Used to namespace static output and isolate route maps between routers.
|
|
67
|
+
*/
|
|
68
|
+
readonly id: string;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Register routes using URL patterns from urls()
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* createRouter({})
|
|
76
|
+
* .routes(urlpatterns)
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
routes<T extends UrlPatterns<TEnv, any>>(
|
|
80
|
+
patterns: T,
|
|
81
|
+
): RSCRouter<
|
|
82
|
+
TEnv,
|
|
83
|
+
TRoutes &
|
|
84
|
+
(NonNullable<T["_routes"]> extends Record<string, unknown>
|
|
85
|
+
? MergeRoutesWithResponses<NonNullable<T["_routes"]>, T["_responses"]>
|
|
86
|
+
: Record<string, string>)
|
|
87
|
+
>;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Add global middleware that runs on all routes
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* createRouter({ document: RootLayout })
|
|
95
|
+
* .use(loggerMiddleware) // All routes
|
|
96
|
+
* .use("/api/*", rateLimiter) // Pattern match
|
|
97
|
+
* .routes(urlpatterns)
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
use(
|
|
101
|
+
patternOrMiddleware: string | MiddlewareFn<TEnv>,
|
|
102
|
+
middleware?: MiddlewareFn<TEnv>,
|
|
103
|
+
): RSCRouter<TEnv, TRoutes>;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Type-safe URL builder for registered routes
|
|
107
|
+
* Types are inferred from the accumulated route registrations
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* router.reverse("cart"); // "/shop/cart"
|
|
112
|
+
* router.reverse("detail", { slug: "widget" }); // "/shop/product/widget"
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
reverse: ReverseFunction<TRoutes>;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Accumulated route map for typeof extraction
|
|
119
|
+
* Used for module augmentation: `type AppRoutes = typeof _router.routeMap`
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const _router = createRouter<AppEnv>({
|
|
124
|
+
* urls: urlpatterns,
|
|
125
|
+
* });
|
|
126
|
+
*
|
|
127
|
+
* type AppRoutes = typeof _router.routeMap;
|
|
128
|
+
*
|
|
129
|
+
* declare global {
|
|
130
|
+
* namespace RSCRouter {
|
|
131
|
+
* interface RegisteredRoutes extends AppRoutes {}
|
|
132
|
+
* }
|
|
133
|
+
* }
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
readonly routeMap: TRoutes;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Handle an RSC request.
|
|
140
|
+
*
|
|
141
|
+
* Uses the router's configuration (nonce, version, cache) automatically.
|
|
142
|
+
* The handler is lazily created on first call.
|
|
143
|
+
*
|
|
144
|
+
* @example Cloudflare Workers
|
|
145
|
+
* ```tsx
|
|
146
|
+
* import { router } from "./router";
|
|
147
|
+
*
|
|
148
|
+
* export default { fetch: router.fetch };
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* @example Direct export
|
|
152
|
+
* ```tsx
|
|
153
|
+
* const router = createRouter({
|
|
154
|
+
* document: Document,
|
|
155
|
+
* urls: urlpatterns,
|
|
156
|
+
* nonce: () => true,
|
|
157
|
+
* });
|
|
158
|
+
*
|
|
159
|
+
* export const fetch = router.fetch;
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
fetch(request: Request, input?: RouterRequestInput<TEnv>): Promise<Response>;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Internal RSC Router interface — the full framework-facing API.
|
|
167
|
+
*
|
|
168
|
+
* This type includes all members used by the Vite plugin, RSC handler,
|
|
169
|
+
* pre-rendering pipeline, and other framework internals. It is NOT exported
|
|
170
|
+
* from the public package API.
|
|
171
|
+
*
|
|
172
|
+
* Use toInternal(router) to assert a public RSCRouter into this type
|
|
173
|
+
* at the boundary where framework code receives a user-provided router.
|
|
174
|
+
*/
|
|
175
|
+
export interface RSCRouterInternal<
|
|
176
|
+
TEnv = any,
|
|
177
|
+
TRoutes extends Record<string, unknown> = Record<string, string>,
|
|
178
|
+
> {
|
|
179
|
+
/**
|
|
180
|
+
* Brand marker for build-time discovery.
|
|
181
|
+
* The Vite plugin uses this to identify router instances in module exports.
|
|
182
|
+
*/
|
|
183
|
+
readonly __brand: typeof RSC_ROUTER_BRAND;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Unique identifier for this router instance.
|
|
187
|
+
* Used to namespace static output and isolate route maps between routers.
|
|
188
|
+
*/
|
|
189
|
+
readonly id: string;
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Register routes using URL patterns from urls()
|
|
193
|
+
*/
|
|
194
|
+
routes<T extends UrlPatterns<TEnv, any>>(
|
|
195
|
+
patterns: T,
|
|
196
|
+
): RSCRouter<
|
|
197
|
+
TEnv,
|
|
198
|
+
TRoutes &
|
|
199
|
+
(NonNullable<T["_routes"]> extends Record<string, unknown>
|
|
200
|
+
? MergeRoutesWithResponses<NonNullable<T["_routes"]>, T["_responses"]>
|
|
201
|
+
: Record<string, string>)
|
|
202
|
+
>;
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Add global middleware that runs on all routes
|
|
206
|
+
*/
|
|
207
|
+
use(
|
|
208
|
+
patternOrMiddleware: string | MiddlewareFn<TEnv>,
|
|
209
|
+
middleware?: MiddlewareFn<TEnv>,
|
|
210
|
+
): RSCRouter<TEnv, TRoutes>;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Type-safe URL builder for registered routes
|
|
214
|
+
*/
|
|
215
|
+
reverse: ReverseFunction<TRoutes>;
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Accumulated route map for typeof extraction
|
|
219
|
+
*/
|
|
220
|
+
readonly routeMap: TRoutes;
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Root layout component that wraps the entire application
|
|
224
|
+
* Access this to pass to renderSegments
|
|
225
|
+
*/
|
|
226
|
+
readonly rootLayout?: ComponentType<RootLayoutProps>;
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Error callback for monitoring/alerting
|
|
230
|
+
* Called when errors occur in loaders, actions, or routes
|
|
231
|
+
*/
|
|
232
|
+
readonly onError?: RSCRouterOptions<TEnv>["onError"];
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Cache configuration
|
|
236
|
+
*/
|
|
237
|
+
readonly cache?: RSCRouterOptions<TEnv>["cache"];
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Not found component to render when no route matches
|
|
241
|
+
*/
|
|
242
|
+
readonly notFound?: RSCRouterOptions<TEnv>["notFound"];
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Resolved theme configuration (null if theme not enabled)
|
|
246
|
+
* Used by NavigationProvider to include ThemeProvider and by MetaTags to render theme script
|
|
247
|
+
*/
|
|
248
|
+
readonly themeConfig: import("../theme/types.js").ResolvedThemeConfig | null;
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Cache profiles for "use cache" per-request resolution.
|
|
252
|
+
* Always includes at least the "default" profile.
|
|
253
|
+
*/
|
|
254
|
+
readonly cacheProfiles: Record<
|
|
255
|
+
string,
|
|
256
|
+
import("../cache/profile-registry.js").CacheProfile
|
|
257
|
+
>;
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Cache-Control header value for prefetch responses.
|
|
261
|
+
* False means no caching of prefetch responses.
|
|
262
|
+
* Derived from prefetchCacheTTL.
|
|
263
|
+
*/
|
|
264
|
+
readonly prefetchCacheControl: string | false;
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* TTL in milliseconds for the client-side in-memory prefetch cache.
|
|
268
|
+
* 0 means caching is disabled.
|
|
269
|
+
*/
|
|
270
|
+
readonly prefetchCacheTTL: number;
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Whether connection warmup is enabled.
|
|
274
|
+
* When true, the client sends HEAD /?_rsc_warmup after idle periods
|
|
275
|
+
* and the server responds with 204 No Content.
|
|
276
|
+
*/
|
|
277
|
+
readonly warmupEnabled: boolean;
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Whether router-wide performance debugging is enabled.
|
|
281
|
+
* Used by the request handler to create metrics before middleware runs.
|
|
282
|
+
*/
|
|
283
|
+
readonly debugPerformance?: boolean;
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Whether ?__debug_manifest is allowed in production.
|
|
287
|
+
* Always enabled in development.
|
|
288
|
+
*/
|
|
289
|
+
readonly allowDebugManifest: boolean;
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Resolved timeout configuration (merged from shorthand + structured).
|
|
293
|
+
*/
|
|
294
|
+
readonly timeouts: ResolvedTimeouts;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Custom timeout response handler.
|
|
298
|
+
*/
|
|
299
|
+
readonly onTimeout?: OnTimeoutCallback<TEnv>;
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* App-level middleware entries
|
|
303
|
+
* These wrap the entire request/response cycle
|
|
304
|
+
*/
|
|
305
|
+
readonly middleware: MiddlewareEntry<TEnv>[];
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Nonce provider for CSP
|
|
309
|
+
*/
|
|
310
|
+
readonly nonce?: NonceProvider<TEnv>;
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* RSC version string
|
|
314
|
+
*/
|
|
315
|
+
readonly version?: string;
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* URL patterns reference for build-time manifest generation
|
|
319
|
+
*/
|
|
320
|
+
readonly urlpatterns?: UrlPatterns<TEnv, any>;
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* SSR configuration. resolveStreaming determines stream vs allReady
|
|
324
|
+
* per HTML request (undefined = always stream).
|
|
325
|
+
*/
|
|
326
|
+
readonly ssr?: import("./router-options.js").SSROptions<TEnv>;
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Cross-origin request protection configuration.
|
|
330
|
+
* Default: true (enabled).
|
|
331
|
+
*/
|
|
332
|
+
readonly originCheck: import("../rsc/origin-guard.js").OriginCheckConfig<TEnv>;
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Source file path where createRouter() was called.
|
|
336
|
+
* Set via Error.stack parsing at construction time.
|
|
337
|
+
* Used by the Vite plugin to write per-router named-routes.gen.ts files.
|
|
338
|
+
*/
|
|
339
|
+
readonly __sourceFile?: string;
|
|
340
|
+
|
|
341
|
+
match(
|
|
342
|
+
request: Request,
|
|
343
|
+
input?: RouterRequestInput<TEnv>,
|
|
344
|
+
): Promise<MatchResult>;
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Build-time pre-render match. Resolves segments with a BuildContext
|
|
348
|
+
* (no request/env/headers/cookies), skipping middleware and loaders.
|
|
349
|
+
* Used by the Vite plugin to collect pre-render data at build time.
|
|
350
|
+
*/
|
|
351
|
+
matchForPrerender(
|
|
352
|
+
pathname: string,
|
|
353
|
+
params: Record<string, string>,
|
|
354
|
+
buildVars?: Record<string, any>,
|
|
355
|
+
isPassthroughRoute?: boolean,
|
|
356
|
+
): Promise<{
|
|
357
|
+
segments: SerializedSegmentData[];
|
|
358
|
+
handles: Record<string, SegmentHandleData>;
|
|
359
|
+
routeName: string;
|
|
360
|
+
params: Record<string, string>;
|
|
361
|
+
interceptSegments?: SerializedSegmentData[];
|
|
362
|
+
interceptHandles?: Record<string, SegmentHandleData>;
|
|
363
|
+
passthrough?: true;
|
|
364
|
+
} | null>;
|
|
365
|
+
|
|
366
|
+
/**
|
|
367
|
+
* Render a single Static handler at build time.
|
|
368
|
+
* Returns the RSC-serialized component string and handle data, or null on failure.
|
|
369
|
+
*/
|
|
370
|
+
renderStaticSegment(
|
|
371
|
+
handler: Function,
|
|
372
|
+
handlerId: string,
|
|
373
|
+
routeName?: string,
|
|
374
|
+
): Promise<{ encoded: string; handles: Record<string, unknown[]> } | null>;
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Preview match - returns route middleware without segment resolution.
|
|
378
|
+
* Also returns responseType and handler for response routes (non-RSC short-circuit).
|
|
379
|
+
*/
|
|
380
|
+
previewMatch(
|
|
381
|
+
request: Request,
|
|
382
|
+
input?: RouterRequestInput<TEnv>,
|
|
383
|
+
): Promise<{
|
|
384
|
+
routeMiddleware?: Array<{
|
|
385
|
+
handler: import("./middleware.js").MiddlewareFn;
|
|
386
|
+
params: Record<string, string>;
|
|
387
|
+
}>;
|
|
388
|
+
responseType?: string;
|
|
389
|
+
handler?: Function;
|
|
390
|
+
params?: Record<string, string>;
|
|
391
|
+
negotiated?: boolean;
|
|
392
|
+
manifestEntry?: EntryData;
|
|
393
|
+
routeKey?: string;
|
|
394
|
+
} | null>;
|
|
395
|
+
|
|
396
|
+
matchPartial(
|
|
397
|
+
request: Request,
|
|
398
|
+
input?: RouterRequestInput<TEnv>,
|
|
399
|
+
actionContext?: {
|
|
400
|
+
actionId?: string;
|
|
401
|
+
actionUrl?: URL;
|
|
402
|
+
actionResult?: any;
|
|
403
|
+
formData?: FormData;
|
|
404
|
+
},
|
|
405
|
+
): Promise<MatchResult | null>;
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Match an error to the nearest error boundary and return error segments
|
|
409
|
+
*
|
|
410
|
+
* Used when an action or other operation fails and we need to render
|
|
411
|
+
* the error boundary UI. Finds the nearest errorBoundary in the route tree
|
|
412
|
+
* for the current URL and renders it with the error info.
|
|
413
|
+
*
|
|
414
|
+
* @param request - The current request (used to match the route)
|
|
415
|
+
* @param context - Environment context
|
|
416
|
+
* @param error - The error that occurred
|
|
417
|
+
* @param segmentType - Type of segment where error occurred (default: "route")
|
|
418
|
+
* @returns MatchResult with error segment, or null if no error boundary found
|
|
419
|
+
*/
|
|
420
|
+
matchError(
|
|
421
|
+
request: Request,
|
|
422
|
+
input: RouterRequestInput<TEnv> | undefined,
|
|
423
|
+
error: unknown,
|
|
424
|
+
segmentType?: ErrorInfo["segmentType"],
|
|
425
|
+
): Promise<MatchResult | null>;
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Debug utility to serialize the manifest for inspection
|
|
429
|
+
* Returns a JSON-friendly representation of all routes and layouts
|
|
430
|
+
*/
|
|
431
|
+
debugManifest(): Promise<SerializedManifest>;
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Handle an RSC request.
|
|
435
|
+
*/
|
|
436
|
+
fetch(request: Request, input?: RouterRequestInput<TEnv>): Promise<Response>;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Assert a public RSCRouter into the internal type.
|
|
441
|
+
*
|
|
442
|
+
* Use this at the boundary where framework code receives a user-provided
|
|
443
|
+
* router and needs access to internal members (match, config, build-time).
|
|
444
|
+
* The cast is safe because createRouter() always produces an object that
|
|
445
|
+
* satisfies RSCRouterInternal; the public type is just a narrower view.
|
|
446
|
+
*/
|
|
447
|
+
export function toInternal<
|
|
448
|
+
TEnv = any,
|
|
449
|
+
TRoutes extends Record<string, unknown> = Record<string, string>,
|
|
450
|
+
>(router: RSCRouter<TEnv, TRoutes>): RSCRouterInternal<TEnv, TRoutes> {
|
|
451
|
+
return router as RSCRouterInternal<TEnv, TRoutes>;
|
|
452
|
+
}
|