@rangojs/router 0.0.0-experimental.8 → 0.0.0-experimental.80
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 +9 -0
- package/README.md +942 -4
- package/dist/bin/rango.js +1689 -0
- package/dist/vite/index.js +4960 -935
- package/package.json +70 -60
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +294 -0
- package/skills/caching/SKILL.md +93 -23
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +12 -8
- package/skills/document-cache/SKILL.md +18 -16
- package/skills/fonts/SKILL.md +167 -0
- package/skills/handler-use/SKILL.md +362 -0
- package/skills/hooks/SKILL.md +334 -72
- package/skills/host-router/SKILL.md +218 -0
- package/skills/intercept/SKILL.md +151 -8
- package/skills/layout/SKILL.md +122 -3
- package/skills/links/SKILL.md +92 -31
- package/skills/loader/SKILL.md +404 -44
- package/skills/middleware/SKILL.md +205 -37
- package/skills/migrate-nextjs/SKILL.md +560 -0
- package/skills/migrate-react-router/SKILL.md +764 -0
- package/skills/mime-routes/SKILL.md +128 -0
- package/skills/parallel/SKILL.md +263 -1
- package/skills/prerender/SKILL.md +685 -0
- package/skills/rango/SKILL.md +87 -16
- package/skills/response-routes/SKILL.md +411 -0
- package/skills/route/SKILL.md +281 -14
- package/skills/router-setup/SKILL.md +210 -32
- package/skills/tailwind/SKILL.md +129 -0
- package/skills/theme/SKILL.md +9 -8
- package/skills/typesafety/SKILL.md +328 -89
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +102 -4
- 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/app-version.ts +14 -0
- package/src/browser/event-controller.ts +92 -64
- package/src/browser/history-state.ts +80 -0
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +24 -4
- package/src/browser/logging.ts +55 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +317 -560
- package/src/browser/navigation-client.ts +206 -68
- package/src/browser/navigation-store.ts +73 -55
- package/src/browser/navigation-transaction.ts +297 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +343 -316
- package/src/browser/prefetch/cache.ts +216 -0
- package/src/browser/prefetch/fetch.ts +206 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +160 -0
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +253 -74
- package/src/browser/react/NavigationProvider.tsx +87 -11
- package/src/browser/react/context.ts +11 -0
- package/src/browser/react/filter-segment-order.ts +11 -0
- package/src/browser/react/index.ts +12 -12
- package/src/browser/react/location-state-shared.ts +95 -53
- package/src/browser/react/location-state.ts +60 -15
- package/src/browser/react/mount-context.ts +6 -1
- 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 +29 -51
- package/src/browser/react/use-client-cache.ts +5 -3
- package/src/browser/react/use-handle.ts +30 -126
- package/src/browser/react/use-href.tsx +2 -2
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-navigation.ts +44 -65
- 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 +76 -0
- package/src/browser/react/use-search-params.ts +56 -0
- package/src/browser/react/use-segments.ts +80 -97
- package/src/browser/response-adapter.ts +73 -0
- package/src/browser/rsc-router.tsx +214 -58
- package/src/browser/scroll-restoration.ts +127 -52
- package/src/browser/segment-reconciler.ts +243 -0
- package/src/browser/segment-structure-assert.ts +16 -0
- package/src/browser/server-action-bridge.ts +510 -603
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +141 -48
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +235 -24
- package/src/build/generate-route-types.ts +39 -0
- package/src/build/index.ts +13 -0
- package/src/build/route-trie.ts +291 -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 +418 -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 +618 -0
- package/src/build/route-types/scan-filter.ts +85 -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 +342 -0
- package/src/cache/cache-scope.ts +167 -309
- package/src/cache/cf/cf-cache-store.ts +571 -17
- package/src/cache/cf/index.ts +13 -3
- package/src/cache/document-cache.ts +116 -77
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +41 -0
- package/src/cache/index.ts +1 -15
- package/src/cache/memory-segment-store.ts +191 -13
- 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 +153 -0
- package/src/cache/types.ts +72 -122
- package/src/client.rsc.tsx +3 -1
- package/src/client.tsx +135 -301
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +5 -1
- package/src/context-var.ts +156 -0
- package/src/debug.ts +19 -9
- package/src/errors.ts +108 -2
- package/src/handle.ts +55 -29
- package/src/handles/MetaTags.tsx +73 -20
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/handles/meta.ts +30 -13
- package/src/host/cookie-handler.ts +21 -15
- package/src/host/errors.ts +8 -8
- package/src/host/index.ts +4 -7
- package/src/host/pattern-matcher.ts +27 -27
- package/src/host/router.ts +61 -39
- package/src/host/testing.ts +8 -8
- package/src/host/types.ts +15 -7
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +119 -29
- package/src/index.rsc.ts +155 -19
- package/src/index.ts +251 -30
- package/src/internal-debug.ts +11 -0
- package/src/loader.rsc.ts +26 -157
- package/src/loader.ts +27 -10
- package/src/network-error-thrower.tsx +3 -1
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +37 -0
- package/src/prerender/store.ts +186 -0
- package/src/prerender.ts +524 -0
- package/src/reverse.ts +354 -0
- package/src/root-error-boundary.tsx +41 -29
- package/src/route-content-wrapper.tsx +7 -4
- package/src/route-definition/dsl-helpers.ts +1121 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +478 -0
- package/src/route-definition/index.ts +55 -0
- package/src/route-definition/redirect.ts +101 -0
- package/src/route-definition/resolve-handler-use.ts +149 -0
- package/src/route-definition.ts +1 -1428
- package/src/route-map-builder.ts +217 -123
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +77 -8
- package/src/router/content-negotiation.ts +215 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +9 -9
- package/src/router/find-match.ts +160 -0
- package/src/router/handler-context.ts +438 -86
- package/src/router/intercept-resolution.ts +402 -0
- package/src/router/lazy-includes.ts +237 -0
- package/src/router/loader-resolution.ts +356 -128
- package/src/router/logging.ts +251 -0
- package/src/router/manifest.ts +163 -35
- package/src/router/match-api.ts +555 -0
- package/src/router/match-context.ts +5 -3
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +108 -93
- package/src/router/match-middleware/cache-lookup.ts +460 -10
- package/src/router/match-middleware/cache-store.ts +98 -26
- package/src/router/match-middleware/intercept-resolution.ts +57 -17
- package/src/router/match-middleware/segment-resolution.ts +80 -6
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +135 -35
- package/src/router/metrics.ts +240 -15
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +220 -0
- package/src/router/middleware.ts +324 -369
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +211 -43
- package/src/router/prerender-match.ts +502 -0
- package/src/router/preview-match.ts +98 -0
- package/src/router/request-classification.ts +310 -0
- package/src/router/revalidation.ts +137 -38
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-context.ts +41 -21
- package/src/router/router-interfaces.ts +484 -0
- package/src/router/router-options.ts +618 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +748 -0
- package/src/router/segment-resolution/helpers.ts +268 -0
- package/src/router/segment-resolution/loader-cache.ts +199 -0
- package/src/router/segment-resolution/revalidation.ts +1379 -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 +291 -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 +78 -3
- package/src/router.ts +740 -4252
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +907 -797
- package/src/rsc/helpers.ts +140 -6
- package/src/rsc/index.ts +0 -20
- package/src/rsc/loader-fetch.ts +229 -0
- package/src/rsc/manifest-init.ts +90 -0
- package/src/rsc/nonce.ts +14 -0
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +391 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +347 -0
- package/src/rsc/rsc-rendering.ts +246 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +356 -0
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +46 -11
- package/src/search-params.ts +230 -0
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +134 -36
- package/src/server/context.ts +341 -61
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +37 -0
- package/src/server/handle-store.ts +113 -15
- package/src/server/loader-registry.ts +24 -64
- package/src/server/request-context.ts +607 -81
- package/src/server.ts +35 -130
- package/src/ssr/index.tsx +103 -30
- package/src/static-handler.ts +126 -0
- package/src/theme/ThemeProvider.tsx +21 -15
- package/src/theme/ThemeScript.tsx +5 -5
- package/src/theme/constants.ts +5 -2
- package/src/theme/index.ts +4 -14
- package/src/theme/theme-context.ts +4 -30
- package/src/theme/theme-script.ts +21 -18
- 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 +791 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +210 -0
- package/src/types/route-config.ts +170 -0
- package/src/types/route-entry.ts +120 -0
- package/src/types/segments.ts +150 -0
- package/src/types.ts +1 -1623
- package/src/urls/include-helper.ts +207 -0
- package/src/urls/index.ts +53 -0
- package/src/urls/path-helper-types.ts +372 -0
- package/src/urls/path-helper.ts +364 -0
- package/src/urls/pattern-types.ts +107 -0
- package/src/urls/response-types.ts +116 -0
- package/src/urls/type-extraction.ts +372 -0
- package/src/urls/urls-function.ts +98 -0
- package/src/urls.ts +1 -802
- package/src/use-loader.tsx +161 -81
- package/src/vite/discovery/bundle-postprocess.ts +181 -0
- package/src/vite/discovery/discover-routers.ts +348 -0
- package/src/vite/discovery/prerender-collection.ts +439 -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 +117 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +15 -1133
- package/src/vite/plugin-types.ts +103 -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/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
- package/src/vite/plugins/expose-id-utils.ts +299 -0
- package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +209 -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 +786 -0
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +127 -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 +266 -0
- package/src/vite/{virtual-entries.ts → plugins/virtual-entries.ts} +23 -14
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +462 -0
- package/src/vite/router-discovery.ts +918 -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/{package-resolution.ts → utils/package-resolution.ts} +25 -29
- package/src/vite/utils/prerender-utils.ts +221 -0
- package/src/vite/utils/shared-utils.ts +170 -0
- package/CLAUDE.md +0 -43
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/memory-store.ts +0 -253
- package/src/href-context.ts +0 -33
- package/src/href.ts +0 -255
- package/src/server/route-manifest-cache.ts +0 -173
- package/src/vite/expose-handle-id.ts +0 -209
- package/src/vite/expose-loader-id.ts +0 -426
- package/src/vite/expose-location-state-id.ts +0 -177
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions and interfaces for the middleware system.
|
|
5
|
+
* Separated from execution logic for cleaner imports.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { ContextVar } from "../context-var.js";
|
|
9
|
+
import type {
|
|
10
|
+
DefaultReverseRouteMap,
|
|
11
|
+
DefaultRouteName,
|
|
12
|
+
DefaultVars,
|
|
13
|
+
} from "../types/global-namespace.js";
|
|
14
|
+
import type { ScopedReverseFunction } from "../reverse.js";
|
|
15
|
+
import type { Theme } from "../theme/types.js";
|
|
16
|
+
import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Get variable function type
|
|
20
|
+
*/
|
|
21
|
+
type GetVariableFn = {
|
|
22
|
+
<T>(contextVar: ContextVar<T>): T | undefined;
|
|
23
|
+
<K extends keyof DefaultVars>(key: K): DefaultVars[K];
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Set variable function type
|
|
28
|
+
*/
|
|
29
|
+
type SetVariableFn = {
|
|
30
|
+
<T>(contextVar: ContextVar<T>, value: T, options?: { cache?: boolean }): void;
|
|
31
|
+
<K extends keyof DefaultVars>(
|
|
32
|
+
key: K,
|
|
33
|
+
value: DefaultVars[K],
|
|
34
|
+
options?: { cache?: boolean },
|
|
35
|
+
): void;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Cookie options for setting cookies
|
|
40
|
+
*/
|
|
41
|
+
export interface CookieOptions {
|
|
42
|
+
domain?: string;
|
|
43
|
+
path?: string;
|
|
44
|
+
maxAge?: number;
|
|
45
|
+
expires?: Date;
|
|
46
|
+
httpOnly?: boolean;
|
|
47
|
+
secure?: boolean;
|
|
48
|
+
sameSite?: "strict" | "lax" | "none";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Context passed to middleware
|
|
53
|
+
*
|
|
54
|
+
* @template TEnv - Environment type (bindings, variables) - defaults to any for internal flexibility
|
|
55
|
+
* @template TParams - URL params type (typed for route middleware, Record<string, string> for global middleware)
|
|
56
|
+
*/
|
|
57
|
+
export interface MiddlewareContext<
|
|
58
|
+
TEnv = any,
|
|
59
|
+
TParams = Record<string, string>,
|
|
60
|
+
> {
|
|
61
|
+
/** Original request */
|
|
62
|
+
request: Request;
|
|
63
|
+
|
|
64
|
+
/** Parsed URL (with internal `_rsc*` params stripped) */
|
|
65
|
+
url: URL;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The original request URL with all parameters intact, including
|
|
69
|
+
* internal `_rsc*` transport params.
|
|
70
|
+
*/
|
|
71
|
+
originalUrl: URL;
|
|
72
|
+
|
|
73
|
+
/** URL pathname */
|
|
74
|
+
pathname: string;
|
|
75
|
+
|
|
76
|
+
/** URL search params */
|
|
77
|
+
searchParams: URLSearchParams;
|
|
78
|
+
|
|
79
|
+
/** Platform bindings (Cloudflare, etc.) */
|
|
80
|
+
env: TEnv;
|
|
81
|
+
|
|
82
|
+
/** URL params extracted from route/middleware pattern */
|
|
83
|
+
params: TParams;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Response headers.
|
|
87
|
+
* Before `next()`, returns headers from the shared response stub.
|
|
88
|
+
* After `next()`, returns headers from the downstream response.
|
|
89
|
+
*/
|
|
90
|
+
readonly headers: Headers;
|
|
91
|
+
|
|
92
|
+
/** Get a context variable (shared with route handlers) */
|
|
93
|
+
get: GetVariableFn;
|
|
94
|
+
|
|
95
|
+
/** Set a context variable (shared with route handlers) */
|
|
96
|
+
set: SetVariableFn;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Set a response header - can be called before or after `next()`.
|
|
100
|
+
*
|
|
101
|
+
* When called before `next()`, headers are queued and merged into the final response.
|
|
102
|
+
* When called after `next()`, headers are set directly on the response.
|
|
103
|
+
*/
|
|
104
|
+
header(name: string, value: string): void;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The matched route name, if available and the route has an explicit name.
|
|
108
|
+
* Undefined for global middleware (runs before route matching) or unnamed routes.
|
|
109
|
+
*/
|
|
110
|
+
routeName?: DefaultRouteName;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Enable performance metrics for this request.
|
|
114
|
+
* When called, granular timing breakdown is logged to console and
|
|
115
|
+
* included in the Server-Timing response header, regardless of the
|
|
116
|
+
* router-level `debugPerformance` option.
|
|
117
|
+
*
|
|
118
|
+
* Call **before** `await next()` so the metrics store exists when
|
|
119
|
+
* downstream phases (route matching, rendering, SSR) record their
|
|
120
|
+
* spans. Calling after `next()` returns still emits `handler:total`
|
|
121
|
+
* but misses all upstream metrics.
|
|
122
|
+
*/
|
|
123
|
+
debugPerformance(): void;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Current theme (from cookie or default).
|
|
127
|
+
* Only available when theme is enabled in router config.
|
|
128
|
+
*/
|
|
129
|
+
theme?: Theme;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Set the theme (only available when theme is enabled in router config).
|
|
133
|
+
* Sets a cookie with the new theme value.
|
|
134
|
+
*/
|
|
135
|
+
setTheme?: (theme: Theme) => void;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Attach location state entries to this response.
|
|
139
|
+
* State is delivered to the client via history.pushState and accessible
|
|
140
|
+
* through the useLocationState() hook.
|
|
141
|
+
*/
|
|
142
|
+
setLocationState(entries: LocationStateEntry | LocationStateEntry[]): void;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Generate URLs from route names.
|
|
146
|
+
* - `name` — global route, from the named-routes definition
|
|
147
|
+
*/
|
|
148
|
+
reverse: ScopedReverseFunction<
|
|
149
|
+
Record<string, string>,
|
|
150
|
+
DefaultReverseRouteMap
|
|
151
|
+
>;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Middleware function signature
|
|
156
|
+
*
|
|
157
|
+
* @template TEnv - Environment type - defaults to any for internal flexibility
|
|
158
|
+
* @template TParams - URL params type (typed for route middleware)
|
|
159
|
+
*
|
|
160
|
+
* When using middleware with global augmentation (RSCRouter.Env), explicitly
|
|
161
|
+
* annotate your middleware functions, or the types will be inferred from context:
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* // With explicit annotation (recommended for reusable middleware)
|
|
166
|
+
* const authMiddleware: MiddlewareFn<AppEnv> = async (ctx, next) => {...}
|
|
167
|
+
*
|
|
168
|
+
* // Types inferred from router.use() call
|
|
169
|
+
* router.use((ctx, next) => {...}) // ctx is typed from router's TEnv
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
export type MiddlewareFn<TEnv = any, TParams = Record<string, string>> = (
|
|
173
|
+
ctx: MiddlewareContext<TEnv, TParams>,
|
|
174
|
+
next: () => Promise<Response>,
|
|
175
|
+
) => Response | void | Promise<Response | void>;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Stored middleware entry with pattern matching info
|
|
179
|
+
* @internal - uses any for internal flexibility
|
|
180
|
+
*/
|
|
181
|
+
export interface MiddlewareEntry<TEnv = any> {
|
|
182
|
+
/** Original pattern string */
|
|
183
|
+
pattern: string | null;
|
|
184
|
+
|
|
185
|
+
/** Compiled regex for matching */
|
|
186
|
+
regex: RegExp | null;
|
|
187
|
+
|
|
188
|
+
/** Param names extracted from pattern */
|
|
189
|
+
paramNames: string[];
|
|
190
|
+
|
|
191
|
+
/** The middleware function */
|
|
192
|
+
handler: MiddlewareFn<TEnv>;
|
|
193
|
+
|
|
194
|
+
/** Mount prefix this middleware is scoped to (null = global) */
|
|
195
|
+
mountPrefix: string | null;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Mutable response holder - tracks the current response through the middleware chain.
|
|
200
|
+
*/
|
|
201
|
+
export interface ResponseHolder {
|
|
202
|
+
response: Response | null;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Entry type for middleware collection
|
|
207
|
+
* Matches the shape of EntryData used in router.ts
|
|
208
|
+
*/
|
|
209
|
+
export interface MiddlewareCollectableEntry {
|
|
210
|
+
middleware?: MiddlewareFn<any, any>[];
|
|
211
|
+
layout?: MiddlewareCollectableEntry[];
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Collected route middleware with params
|
|
216
|
+
*/
|
|
217
|
+
export interface CollectedMiddleware {
|
|
218
|
+
handler: MiddlewareFn<any, any>;
|
|
219
|
+
params: Record<string, string>;
|
|
220
|
+
}
|