@rangojs/router 0.0.0-experimental.002d056c
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 +899 -0
- package/dist/bin/rango.js +1606 -0
- package/dist/vite/index.js +5153 -0
- package/package.json +177 -0
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +262 -0
- package/skills/caching/SKILL.md +253 -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 +638 -0
- package/src/browser/navigation-client.ts +261 -0
- package/src/browser/navigation-store.ts +806 -0
- package/src/browser/navigation-transaction.ts +297 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +582 -0
- package/src/browser/prefetch/cache.ts +206 -0
- package/src/browser/prefetch/fetch.ts +145 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +128 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +368 -0
- package/src/browser/react/NavigationProvider.tsx +413 -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 +464 -0
- package/src/browser/scroll-restoration.ts +397 -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 +547 -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 +479 -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 +982 -0
- package/src/cache/cf/index.ts +29 -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 +44 -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 +281 -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 +160 -0
- package/src/router/handler-context.ts +451 -0
- package/src/router/intercept-resolution.ts +397 -0
- package/src/router/lazy-includes.ts +236 -0
- package/src/router/loader-resolution.ts +420 -0
- package/src/router/logging.ts +251 -0
- package/src/router/manifest.ts +269 -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 +193 -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 +749 -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 +320 -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 +1242 -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 +170 -0
- package/src/router.ts +1006 -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 +237 -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 +920 -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 +109 -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 +108 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +16 -0
- package/src/vite/plugin-types.ts +48 -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 +363 -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 +266 -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 +445 -0
- package/src/vite/router-discovery.ts +777 -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,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase where the error occurred during request handling.
|
|
3
|
+
*
|
|
4
|
+
* Coverage notes:
|
|
5
|
+
* - "routing": Invoked when route matching fails (router.ts, rsc/handler.ts)
|
|
6
|
+
* - "manifest": Reserved for manifest loading errors (not currently invoked)
|
|
7
|
+
* - "middleware": Reserved for middleware execution errors (errors propagate to handler phase)
|
|
8
|
+
* - "loader": Invoked when loader execution fails (router.ts via wrapLoaderWithErrorHandling, rsc/handler.ts)
|
|
9
|
+
* - "handler": Invoked when route/layout handler execution fails (router.ts)
|
|
10
|
+
* - "rendering": Invoked during SSR rendering errors (ssr/index.tsx, separate callback)
|
|
11
|
+
* - "action": Invoked when server action execution fails (rsc/handler.ts, router.ts)
|
|
12
|
+
* - "revalidation": Invoked when revalidation fails (router.ts, conditional with action)
|
|
13
|
+
* - "origin": Invoked when cross-origin request validation rejects a request (rsc/handler.ts)
|
|
14
|
+
* - "unknown": Fallback for unclassified errors (not currently invoked)
|
|
15
|
+
*/
|
|
16
|
+
export type ErrorPhase =
|
|
17
|
+
| "routing" // During route matching
|
|
18
|
+
| "manifest" // During manifest loading (reserved, not currently invoked)
|
|
19
|
+
| "middleware" // During middleware execution (errors propagate to handler phase)
|
|
20
|
+
| "loader" // During loader execution
|
|
21
|
+
| "handler" // During route/layout handler execution
|
|
22
|
+
| "rendering" // During RSC/SSR rendering (SSR handler uses separate callback)
|
|
23
|
+
| "action" // During server action execution
|
|
24
|
+
| "revalidation" // During revalidation evaluation
|
|
25
|
+
| "cache" // During "use cache" background operations (stale revalidation, async cache writes)
|
|
26
|
+
| "prerender" // During build-time pre-rendering (Vite closeBundle)
|
|
27
|
+
| "static" // During build-time static handler rendering (Vite closeBundle)
|
|
28
|
+
| "origin" // During cross-origin request validation (CSRF protection)
|
|
29
|
+
| "unknown"; // Fallback for unclassified errors
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Comprehensive context passed to onError callback
|
|
33
|
+
*
|
|
34
|
+
* Provides all available information about where and when an error occurred
|
|
35
|
+
* during request handling. The callback can use this for logging, monitoring,
|
|
36
|
+
* error tracking services, or custom error responses.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const router = createRouter<AppEnv>({
|
|
41
|
+
* onError: (context) => {
|
|
42
|
+
* // Log to error tracking service
|
|
43
|
+
* errorTracker.capture({
|
|
44
|
+
* error: context.error,
|
|
45
|
+
* phase: context.phase,
|
|
46
|
+
* url: context.request.url,
|
|
47
|
+
* route: context.routeKey,
|
|
48
|
+
* userId: context.env?.user?.id,
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* // Log to console with context
|
|
52
|
+
* console.error(`[${context.phase}] Error in ${context.routeKey}:`, {
|
|
53
|
+
* message: context.error.message,
|
|
54
|
+
* segment: context.segmentId,
|
|
55
|
+
* duration: context.duration,
|
|
56
|
+
* });
|
|
57
|
+
* },
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export interface OnErrorContext<TEnv = any> {
|
|
62
|
+
/**
|
|
63
|
+
* The error that occurred
|
|
64
|
+
*/
|
|
65
|
+
error: Error;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Phase where the error occurred
|
|
69
|
+
*/
|
|
70
|
+
phase: ErrorPhase;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The original request
|
|
74
|
+
*/
|
|
75
|
+
request: Request;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Parsed URL from the request
|
|
79
|
+
*/
|
|
80
|
+
url: URL;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Request pathname
|
|
84
|
+
*/
|
|
85
|
+
pathname: string;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* HTTP method
|
|
89
|
+
*/
|
|
90
|
+
method: string;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Matched route key (if available)
|
|
94
|
+
* e.g., "shop.products.detail"
|
|
95
|
+
*/
|
|
96
|
+
routeKey?: string;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Route params (if available)
|
|
100
|
+
* e.g., { slug: "headphones" }
|
|
101
|
+
*/
|
|
102
|
+
params?: Record<string, string>;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Segment ID where error occurred (if available)
|
|
106
|
+
* e.g., "M1L0" for a layout, "M1R0" for a route
|
|
107
|
+
*/
|
|
108
|
+
segmentId?: string;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Segment type where error occurred (if available)
|
|
112
|
+
*/
|
|
113
|
+
segmentType?: "layout" | "route" | "parallel" | "loader" | "middleware";
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Loader name (if error occurred in a loader)
|
|
117
|
+
*/
|
|
118
|
+
loaderName?: string;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Middleware name/id (if error occurred in middleware)
|
|
122
|
+
*/
|
|
123
|
+
middlewareId?: string;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Action ID (if error occurred during server action)
|
|
127
|
+
* e.g., "src/actions.ts#addToCart"
|
|
128
|
+
*/
|
|
129
|
+
actionId?: string;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Environment/bindings (platform context)
|
|
133
|
+
*/
|
|
134
|
+
env?: TEnv;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Duration from request start to error (milliseconds)
|
|
138
|
+
*/
|
|
139
|
+
duration?: number;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Whether this is a partial/navigation request
|
|
143
|
+
*/
|
|
144
|
+
isPartial?: boolean;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Whether an error boundary caught the error
|
|
148
|
+
* If true, the error was handled and a fallback UI was rendered
|
|
149
|
+
*/
|
|
150
|
+
handledByBoundary?: boolean;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Stack trace (if available)
|
|
154
|
+
*/
|
|
155
|
+
stack?: string;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Additional metadata specific to the error phase
|
|
159
|
+
*/
|
|
160
|
+
metadata?: Record<string, unknown>;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Callback function for error handling
|
|
165
|
+
*
|
|
166
|
+
* Called whenever an error occurs during request handling.
|
|
167
|
+
* The callback is for notification/logging purposes - it cannot
|
|
168
|
+
* modify the error handling flow (use errorBoundary for that).
|
|
169
|
+
*
|
|
170
|
+
* @param context - Comprehensive error context
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```typescript
|
|
174
|
+
* const onError: OnErrorCallback = (context) => {
|
|
175
|
+
* // Send to error tracking service
|
|
176
|
+
* Sentry.captureException(context.error, {
|
|
177
|
+
* tags: {
|
|
178
|
+
* phase: context.phase,
|
|
179
|
+
* route: context.routeKey,
|
|
180
|
+
* },
|
|
181
|
+
* extra: {
|
|
182
|
+
* url: context.url.toString(),
|
|
183
|
+
* params: context.params,
|
|
184
|
+
* duration: context.duration,
|
|
185
|
+
* },
|
|
186
|
+
* });
|
|
187
|
+
* };
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export type OnErrorCallback<TEnv = any> = (
|
|
191
|
+
context: OnErrorContext<TEnv>,
|
|
192
|
+
) => void | Promise<void>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global namespace for module augmentation
|
|
3
|
+
*
|
|
4
|
+
* Users augment these interfaces for type-safe context:
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // In env.ts or env.d.ts
|
|
9
|
+
* declare global {
|
|
10
|
+
* namespace RSCRouter {
|
|
11
|
+
* interface Env extends AppBindings {}
|
|
12
|
+
* interface Vars extends AppVariables {}
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* // Now all handlers have type-safe context without imports!
|
|
17
|
+
* // ctx.env.DB, ctx.get("user"), etc.
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
declare global {
|
|
21
|
+
namespace RSCRouter {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
23
|
+
interface Env {
|
|
24
|
+
// Empty by default - users augment with their bindings (e.g., { DB: D1Database })
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
28
|
+
interface Vars {
|
|
29
|
+
// Empty by default - users augment with their variables (e.g., { user?: User })
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
33
|
+
interface RegisteredRoutes {
|
|
34
|
+
// Empty by default - users augment with their merged route maps for type-safe href()
|
|
35
|
+
// Values are string (pattern) for RSC routes, or { path: string; response: T } for response routes
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
39
|
+
interface GeneratedRouteMap {
|
|
40
|
+
// Empty by default - populated by generated named-routes.gen.ts
|
|
41
|
+
// Maps route names to URL pattern strings for Handler<"routeName"> support
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get registered routes or fallback to generic Record<string, string>
|
|
48
|
+
* When RSCRouter.RegisteredRoutes is augmented, provides autocomplete for route names
|
|
49
|
+
* When not augmented, allows any string (no autocomplete)
|
|
50
|
+
*/
|
|
51
|
+
export type GetRegisteredRoutes = keyof RSCRouter.RegisteredRoutes extends never
|
|
52
|
+
? Record<string, string>
|
|
53
|
+
: RSCRouter.RegisteredRoutes;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Default route map for reverse() surfaces.
|
|
57
|
+
* Prefers GeneratedRouteMap to avoid router.tsx -> urls.tsx -> types -> router.tsx
|
|
58
|
+
* cycles, but falls back to RegisteredRoutes for manual augmentation and then to
|
|
59
|
+
* a permissive record when no route types are available.
|
|
60
|
+
*/
|
|
61
|
+
export type DefaultReverseRouteMap =
|
|
62
|
+
keyof RSCRouter.GeneratedRouteMap extends never
|
|
63
|
+
? keyof RSCRouter.RegisteredRoutes extends never
|
|
64
|
+
? Record<string, string>
|
|
65
|
+
: RSCRouter.RegisteredRoutes
|
|
66
|
+
: RSCRouter.GeneratedRouteMap;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Default route map for Handler type.
|
|
70
|
+
* Uses GeneratedRouteMap (from gen file) instead of RegisteredRoutes to avoid
|
|
71
|
+
* circular dependencies: router.tsx -> urls.tsx -> handler.tsx -> RegisteredRoutes -> router.tsx.
|
|
72
|
+
* GeneratedRouteMap is declared in a standalone gen file with no imports.
|
|
73
|
+
*/
|
|
74
|
+
export type DefaultHandlerRouteMap =
|
|
75
|
+
keyof RSCRouter.GeneratedRouteMap extends never
|
|
76
|
+
? {}
|
|
77
|
+
: RSCRouter.GeneratedRouteMap;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Default environment type - uses global augmentation if available, any otherwise
|
|
81
|
+
*/
|
|
82
|
+
export type DefaultEnv = keyof RSCRouter.Env extends never
|
|
83
|
+
? any
|
|
84
|
+
: RSCRouter.Env;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Default variables type - uses global augmentation if available, Record<string, any> otherwise
|
|
88
|
+
*/
|
|
89
|
+
export type DefaultVars = keyof RSCRouter.Vars extends never
|
|
90
|
+
? Record<string, any>
|
|
91
|
+
: RSCRouter.Vars;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Default route name type for public `routeName` on contexts.
|
|
95
|
+
* When GeneratedRouteMap is augmented, narrows to the known route names.
|
|
96
|
+
* Otherwise falls back to `string` for untyped usage.
|
|
97
|
+
*/
|
|
98
|
+
export type DefaultRouteName = keyof RSCRouter.GeneratedRouteMap extends never
|
|
99
|
+
? string
|
|
100
|
+
: keyof RSCRouter.GeneratedRouteMap & string;
|