@stacksjs/bun-router 0.0.14 → 0.0.15
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 +261 -584
- package/bin/cli.ts +9 -0
- package/dist/auth.d.ts +134 -0
- package/dist/cache/lru-cache.d.ts +139 -0
- package/dist/cache/middleware-memoization.d.ts +151 -0
- package/dist/cache/route-cache-warmer.d.ts +161 -0
- package/dist/cache/sqlite-cache.d.ts +209 -0
- package/dist/cache/streaming-cache.d.ts +132 -0
- package/dist/chunk-j0e7z7hd.js +18053 -0
- package/dist/cli/colors.d.ts +15 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/middleware.d.ts +31 -0
- package/dist/cli/openapi.d.ts +17 -0
- package/dist/cli/router.d.ts +15 -0
- package/dist/cli/routes.d.ts +29 -0
- package/dist/cli/utils.d.ts +74 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +3360 -0
- package/dist/config.d.ts +7 -0
- package/dist/container/container.d.ts +273 -0
- package/dist/container/contextual-binding.d.ts +240 -0
- package/dist/container/decorators.d.ts +141 -0
- package/dist/container/service-provider.d.ts +285 -0
- package/dist/development/hot-reload.d.ts +187 -0
- package/dist/development/index.d.ts +167 -0
- package/dist/development/performance-profiler.d.ts +217 -0
- package/dist/development/route-debugger.d.ts +154 -0
- package/dist/development/route-inspector.d.ts +211 -0
- package/dist/development/typescript-utilities.d.ts +209 -0
- package/dist/docs.d.ts +11 -0
- package/dist/errors/circuit-breaker.d.ts +195 -0
- package/dist/errors/error-handler.d.ts +88 -0
- package/dist/errors/error-reporting.d.ts +144 -0
- package/dist/errors/exceptions.d.ts +184 -0
- package/dist/errors/graceful-degradation.d.ts +154 -0
- package/dist/errors/index.d.ts +9 -0
- package/dist/errors/router-errors.d.ts +110 -0
- package/dist/file-serving/static-files.d.ts +143 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +13968 -0
- package/dist/middleware/auth.d.ts +63 -0
- package/dist/middleware/content_security_policy.d.ts +53 -0
- package/dist/middleware/cors.d.ts +5 -0
- package/dist/middleware/csrf.d.ts +7 -0
- package/dist/middleware/ddos_protection.d.ts +39 -0
- package/dist/middleware/file_security.d.ts +26 -0
- package/dist/middleware/file_upload.d.ts +38 -0
- package/dist/middleware/helmet.d.ts +54 -0
- package/dist/middleware/index.d.ts +44 -0
- package/dist/middleware/input_validation.d.ts +45 -0
- package/dist/middleware/json_body.d.ts +4 -0
- package/dist/middleware/performance_alerting.d.ts +87 -0
- package/dist/middleware/performance_dashboard.d.ts +87 -0
- package/dist/middleware/performance_monitor.d.ts +209 -0
- package/dist/middleware/pipeline.d.ts +131 -0
- package/dist/middleware/rate_limit.d.ts +36 -0
- package/dist/middleware/request_id.d.ts +4 -0
- package/dist/middleware/request_signing.d.ts +153 -0
- package/dist/middleware/request_tracer.d.ts +72 -0
- package/dist/middleware/response_cache.d.ts +97 -0
- package/dist/middleware/security.d.ts +69 -0
- package/dist/middleware/security_suite.d.ts +46 -0
- package/dist/middleware/session.d.ts +23 -0
- package/dist/model-binding/index.d.ts +2 -0
- package/dist/model-binding/model-middleware.d.ts +118 -0
- package/dist/model-binding/model-registry.d.ts +164 -0
- package/dist/model-binding.d.ts +185 -0
- package/dist/model-resolver-factory.d.ts +31 -0
- package/dist/observability/correlation.d.ts +187 -0
- package/dist/observability/health-checks.d.ts +186 -0
- package/dist/observability/index.d.ts +60 -0
- package/dist/observability/integration.d.ts +147 -0
- package/dist/observability/metrics.d.ts +184 -0
- package/dist/observability/tracing.d.ts +187 -0
- package/dist/optimization/bun-utilities.d.ts +224 -0
- package/dist/query-builder-integration.d.ts +36 -0
- package/dist/request/context.d.ts +34 -0
- package/dist/request/enhanced-request.d.ts +213 -0
- package/dist/request/macros.d.ts +300 -0
- package/dist/response/macros.d.ts +256 -0
- package/dist/response/response-factory.d.ts +133 -0
- package/dist/router/api-routes.d.ts +5 -0
- package/dist/router/file-based-routing.d.ts +118 -0
- package/dist/router/file-streaming.d.ts +5 -0
- package/dist/router/fluent-router.d.ts +315 -0
- package/dist/router/fluent-routing.d.ts +271 -0
- package/dist/router/group-organization.d.ts +5 -0
- package/dist/router/handler-resolver.d.ts +24 -0
- package/dist/router/http-methods.d.ts +10 -0
- package/dist/router/index.d.ts +114 -0
- package/dist/router/middleware-groups.d.ts +94 -0
- package/dist/router/middleware-integration.d.ts +112 -0
- package/dist/router/middleware.d.ts +5 -0
- package/dist/router/model-binding.d.ts +5 -0
- package/dist/router/optimized-route-matching.d.ts +6 -0
- package/dist/router/route-building.d.ts +5 -0
- package/dist/router/route-compiler.d.ts +153 -0
- package/dist/router/route-matching.d.ts +5 -0
- package/dist/router/route-trie.d.ts +114 -0
- package/dist/router/router.d.ts +317 -0
- package/dist/router/server.d.ts +5 -0
- package/dist/router/validation-integration.d.ts +170 -0
- package/dist/router/view-rendering.d.ts +5 -0
- package/dist/router/websocket.d.ts +5 -0
- package/dist/routing/route-caching.d.ts +129 -0
- package/dist/routing/route-throttling.d.ts +150 -0
- package/dist/routing/subdomain-routing.d.ts +206 -0
- package/dist/session/database-store.d.ts +51 -0
- package/dist/session/file-store.d.ts +22 -0
- package/dist/session/index.d.ts +106 -0
- package/dist/session/memory-store.d.ts +21 -0
- package/dist/session/redis-store.d.ts +31 -0
- package/dist/streaming/index.d.ts +3 -0
- package/dist/streaming/sse-handler.d.ts +138 -0
- package/dist/streaming/stream-handler.d.ts +114 -0
- package/dist/testing/auth-testing.d.ts +156 -0
- package/dist/testing/file-upload-testing.d.ts +190 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/middleware-testing.d.ts +138 -0
- package/dist/testing/model-binding-testing.d.ts +186 -0
- package/dist/testing/performance-testing.d.ts +235 -0
- package/dist/testing/test-client.d.ts +117 -0
- package/dist/testing/test-request.d.ts +85 -0
- package/dist/testing/test-response.d.ts +90 -0
- package/dist/testing/types.d.ts +207 -0
- package/dist/testing/websocket-testing.d.ts +227 -0
- package/dist/types/controller-types.d.ts +208 -0
- package/dist/types/core.d.ts +543 -0
- package/dist/types/middleware-types.d.ts +227 -0
- package/dist/types/request-response-augmentation.d.ts +261 -0
- package/dist/types/route-inference.d.ts +168 -0
- package/dist/types.d.ts +1794 -0
- package/dist/url.d.ts +56 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/query-preservation.d.ts +48 -0
- package/dist/utils.d.ts +69 -0
- package/dist/validation/validator.d.ts +140 -0
- package/dist/websocket/clustering.d.ts +185 -0
- package/package.json +45 -44
- package/src/auth.ts +469 -0
- package/src/cache/lru-cache.ts +457 -0
- package/src/cache/middleware-memoization.ts +531 -0
- package/src/cache/route-cache-warmer.ts +486 -0
- package/src/cache/sqlite-cache.ts +783 -0
- package/src/cache/streaming-cache.ts +572 -0
- package/src/cli/colors.ts +29 -0
- package/src/cli/index.ts +287 -0
- package/src/cli/middleware.ts +291 -0
- package/src/cli/openapi.ts +407 -0
- package/src/cli/router.ts +188 -0
- package/src/cli/routes.ts +265 -0
- package/src/cli/utils.ts +531 -0
- package/src/cli.ts +5 -0
- package/src/config.ts +322 -0
- package/src/container/container.ts +740 -0
- package/src/container/contextual-binding.ts +603 -0
- package/src/container/decorators.ts +359 -0
- package/src/container/service-provider.ts +596 -0
- package/src/development/hot-reload.ts +673 -0
- package/src/development/index.ts +499 -0
- package/src/development/performance-profiler.ts +717 -0
- package/src/development/route-debugger.ts +527 -0
- package/src/development/route-inspector.ts +749 -0
- package/src/development/typescript-utilities.ts +682 -0
- package/src/docs.ts +397 -0
- package/src/errors/circuit-breaker.ts +732 -0
- package/src/errors/error-handler.ts +569 -0
- package/src/errors/error-reporting.ts +672 -0
- package/src/errors/exceptions.ts +536 -0
- package/src/errors/graceful-degradation.ts +621 -0
- package/src/errors/index.ts +21 -0
- package/src/errors/router-errors.ts +632 -0
- package/src/file-serving/static-files.ts +581 -0
- package/src/index.ts +14 -0
- package/src/middleware/auth.ts +220 -0
- package/src/middleware/content_security_policy.ts +215 -0
- package/src/middleware/cors.ts +74 -0
- package/src/middleware/csrf.ts +108 -0
- package/src/middleware/ddos_protection.ts +255 -0
- package/src/middleware/file_security.ts +191 -0
- package/src/middleware/file_upload.ts +275 -0
- package/src/middleware/helmet.ts +268 -0
- package/src/middleware/index.ts +117 -0
- package/src/middleware/input_validation.ts +449 -0
- package/src/middleware/json_body.ts +37 -0
- package/src/middleware/performance_alerting.ts +538 -0
- package/src/middleware/performance_dashboard.ts +661 -0
- package/src/middleware/performance_monitor.ts +943 -0
- package/src/middleware/pipeline.ts +489 -0
- package/src/middleware/rate_limit.ts +245 -0
- package/src/middleware/request_id.ts +36 -0
- package/src/middleware/request_signing.ts +636 -0
- package/src/middleware/request_tracer.ts +636 -0
- package/src/middleware/response_cache.ts +743 -0
- package/src/middleware/security.ts +482 -0
- package/src/middleware/security_suite.ts +257 -0
- package/src/middleware/session.ts +91 -0
- package/src/model-binding/index.ts +18 -0
- package/src/model-binding/model-middleware.ts +425 -0
- package/src/model-binding/model-registry.ts +550 -0
- package/src/model-binding.ts +370 -0
- package/src/model-resolver-factory.ts +106 -0
- package/src/observability/correlation.ts +691 -0
- package/src/observability/health-checks.ts +729 -0
- package/src/observability/index.ts +184 -0
- package/src/observability/integration.ts +548 -0
- package/src/observability/metrics.ts +753 -0
- package/src/observability/tracing.ts +638 -0
- package/src/optimization/bun-utilities.ts +778 -0
- package/src/query-builder-integration.ts +137 -0
- package/src/request/context.ts +62 -0
- package/src/request/enhanced-request.ts +857 -0
- package/src/request/macros.ts +688 -0
- package/src/response/macros.ts +665 -0
- package/src/response/response-factory.ts +596 -0
- package/src/router/api-routes.ts +243 -0
- package/src/router/file-based-routing.ts +690 -0
- package/src/router/file-streaming.ts +383 -0
- package/src/router/fluent-router.ts +927 -0
- package/src/router/fluent-routing.ts +797 -0
- package/src/router/group-organization.ts +213 -0
- package/src/router/handler-resolver.ts +291 -0
- package/src/router/http-methods.ts +377 -0
- package/src/router/index.ts +187 -0
- package/src/router/middleware-groups.ts +222 -0
- package/src/router/middleware-integration.ts +399 -0
- package/src/router/middleware.ts +231 -0
- package/src/router/model-binding.ts +215 -0
- package/src/router/optimized-route-matching.ts +253 -0
- package/src/router/route-building.ts +221 -0
- package/src/router/route-compiler.ts +702 -0
- package/src/router/route-matching.ts +349 -0
- package/src/router/route-trie.ts +464 -0
- package/src/router/router.ts +1604 -0
- package/src/router/server.ts +462 -0
- package/src/router/validation-integration.ts +443 -0
- package/src/router/view-rendering.ts +233 -0
- package/src/router/websocket.ts +100 -0
- package/src/routing/route-caching.ts +402 -0
- package/src/routing/route-throttling.ts +469 -0
- package/src/routing/subdomain-routing.ts +492 -0
- package/src/session/database-store.ts +109 -0
- package/src/session/file-store.ts +148 -0
- package/src/session/index.ts +244 -0
- package/src/session/memory-store.ts +88 -0
- package/src/session/redis-store.ts +93 -0
- package/src/streaming/index.ts +17 -0
- package/src/streaming/sse-handler.ts +482 -0
- package/src/streaming/stream-handler.ts +552 -0
- package/src/testing/auth-testing.ts +446 -0
- package/src/testing/file-upload-testing.ts +543 -0
- package/src/testing/index.ts +10 -0
- package/src/testing/middleware-testing.ts +322 -0
- package/src/testing/model-binding-testing.ts +645 -0
- package/src/testing/performance-testing.ts +738 -0
- package/src/testing/test-client.ts +310 -0
- package/src/testing/test-request.ts +315 -0
- package/src/testing/test-response.ts +332 -0
- package/src/testing/types.ts +224 -0
- package/src/testing/websocket-testing.ts +590 -0
- package/src/types/controller-types.ts +385 -0
- package/src/types/core.ts +683 -0
- package/src/types/middleware-types.ts +419 -0
- package/src/types/request-response-augmentation.ts +489 -0
- package/src/types/route-inference.ts +357 -0
- package/src/types.ts +2067 -0
- package/src/url.ts +126 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/query-preservation.ts +201 -0
- package/src/utils.ts +327 -0
- package/src/validation/validator.ts +685 -0
- package/src/websocket/clustering.ts +762 -0
- package/CHANGELOG.md +0 -770
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Development Tools - TypeScript Utilities
|
|
3
|
+
*
|
|
4
|
+
* TypeScript development utilities, type checking, and code generation
|
|
5
|
+
*/
|
|
6
|
+
import type { EnhancedRequest } from '../types';
|
|
7
|
+
export interface TypeScriptConfig {
|
|
8
|
+
strictMode?: boolean;
|
|
9
|
+
generateTypes?: boolean;
|
|
10
|
+
validateTypes?: boolean;
|
|
11
|
+
outputDir?: string;
|
|
12
|
+
includeComments?: boolean;
|
|
13
|
+
generateSchemas?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface RouteTypeInfo {
|
|
16
|
+
method: string;
|
|
17
|
+
pattern: string;
|
|
18
|
+
requestType: string;
|
|
19
|
+
responseType: string;
|
|
20
|
+
paramsType: string;
|
|
21
|
+
queryType: string;
|
|
22
|
+
bodyType: string;
|
|
23
|
+
middlewareTypes: string[];
|
|
24
|
+
handlerSignature: string;
|
|
25
|
+
}
|
|
26
|
+
export interface TypeDefinition {
|
|
27
|
+
name: string;
|
|
28
|
+
type: 'interface' | 'type' | 'enum' | 'class';
|
|
29
|
+
definition: string;
|
|
30
|
+
imports: string[];
|
|
31
|
+
exports: string[];
|
|
32
|
+
documentation?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface ValidationSchema {
|
|
35
|
+
type: 'object' | 'array' | 'string' | 'number' | 'boolean';
|
|
36
|
+
properties?: Record<string, ValidationSchema>;
|
|
37
|
+
items?: ValidationSchema;
|
|
38
|
+
required?: string[];
|
|
39
|
+
pattern?: string;
|
|
40
|
+
minimum?: number;
|
|
41
|
+
maximum?: number;
|
|
42
|
+
enum?: any[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* TypeScript utilities for development
|
|
46
|
+
*/
|
|
47
|
+
export declare class TypeScriptUtilities {
|
|
48
|
+
private config;
|
|
49
|
+
private routeTypes;
|
|
50
|
+
private typeDefinitions;
|
|
51
|
+
constructor(config?: TypeScriptConfig);
|
|
52
|
+
/**
|
|
53
|
+
* Register route type information
|
|
54
|
+
*/
|
|
55
|
+
registerRouteTypes(method: string, pattern: string, options?: {
|
|
56
|
+
requestType?: string;
|
|
57
|
+
responseType?: string;
|
|
58
|
+
paramsType?: string;
|
|
59
|
+
queryType?: string;
|
|
60
|
+
bodyType?: string;
|
|
61
|
+
middlewareTypes?: string[];
|
|
62
|
+
handlerSignature?: string;
|
|
63
|
+
}): void;
|
|
64
|
+
/**
|
|
65
|
+
* Generate TypeScript definitions for all routes
|
|
66
|
+
*/
|
|
67
|
+
generateRouteTypes(): string;
|
|
68
|
+
/**
|
|
69
|
+
* Generate validation schemas from TypeScript types
|
|
70
|
+
*/
|
|
71
|
+
generateValidationSchemas(): Record<string, ValidationSchema>;
|
|
72
|
+
/**
|
|
73
|
+
* Generate OpenAPI schema from route types
|
|
74
|
+
*/
|
|
75
|
+
generateOpenAPISchema(): any;
|
|
76
|
+
/**
|
|
77
|
+
* Validate request against TypeScript types
|
|
78
|
+
*/
|
|
79
|
+
validateRequest(req: EnhancedRequest, routeKey: string): {
|
|
80
|
+
valid: boolean;
|
|
81
|
+
errors: string[];
|
|
82
|
+
warnings: string[];
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Generate type-safe route builder
|
|
86
|
+
*/
|
|
87
|
+
generateRouteBuilder(): string;
|
|
88
|
+
/**
|
|
89
|
+
* Generate middleware type definitions
|
|
90
|
+
*/
|
|
91
|
+
generateMiddlewareTypes(): string;
|
|
92
|
+
/**
|
|
93
|
+
* Get route type information
|
|
94
|
+
*/
|
|
95
|
+
getRouteTypes(): RouteTypeInfo[];
|
|
96
|
+
/**
|
|
97
|
+
* Get type definition
|
|
98
|
+
*/
|
|
99
|
+
getTypeDefinition(name: string): TypeDefinition | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Register custom type definition
|
|
102
|
+
*/
|
|
103
|
+
registerTypeDefinition(definition: TypeDefinition): void;
|
|
104
|
+
/**
|
|
105
|
+
* Clear all type information
|
|
106
|
+
*/
|
|
107
|
+
clear(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Infer parameter types from route pattern
|
|
110
|
+
*/
|
|
111
|
+
private inferParamsType;
|
|
112
|
+
/**
|
|
113
|
+
* Extract path parameters from pattern
|
|
114
|
+
*/
|
|
115
|
+
private extractPathParameters;
|
|
116
|
+
/**
|
|
117
|
+
* Infer parameter type from constraint
|
|
118
|
+
*/
|
|
119
|
+
private inferParamType;
|
|
120
|
+
/**
|
|
121
|
+
* Generate handler signature
|
|
122
|
+
*/
|
|
123
|
+
private generateHandlerSignature;
|
|
124
|
+
/**
|
|
125
|
+
* Generate imports section
|
|
126
|
+
*/
|
|
127
|
+
private generateImports;
|
|
128
|
+
/**
|
|
129
|
+
* Generate parameter types
|
|
130
|
+
*/
|
|
131
|
+
private generateParamTypes;
|
|
132
|
+
/**
|
|
133
|
+
* Generate handler types
|
|
134
|
+
*/
|
|
135
|
+
private generateHandlerTypes;
|
|
136
|
+
/**
|
|
137
|
+
* Generate route registry type
|
|
138
|
+
*/
|
|
139
|
+
private generateRouteRegistryType;
|
|
140
|
+
/**
|
|
141
|
+
* Generate utility types
|
|
142
|
+
*/
|
|
143
|
+
private generateUtilityTypes;
|
|
144
|
+
/**
|
|
145
|
+
* Convert path to type name
|
|
146
|
+
*/
|
|
147
|
+
private pathToTypeName;
|
|
148
|
+
/**
|
|
149
|
+
* Convert path to method name
|
|
150
|
+
*/
|
|
151
|
+
private pathToMethodName;
|
|
152
|
+
/**
|
|
153
|
+
* Convert path to operation ID
|
|
154
|
+
*/
|
|
155
|
+
private pathToOperationId;
|
|
156
|
+
/**
|
|
157
|
+
* Convert TypeScript type to validation schema
|
|
158
|
+
*/
|
|
159
|
+
private typeToSchema;
|
|
160
|
+
/**
|
|
161
|
+
* Convert TypeScript type to OpenAPI schema
|
|
162
|
+
*/
|
|
163
|
+
private typeToOpenAPISchema;
|
|
164
|
+
/**
|
|
165
|
+
* Validate request parameters
|
|
166
|
+
*/
|
|
167
|
+
private validateParams;
|
|
168
|
+
/**
|
|
169
|
+
* Validate query parameters
|
|
170
|
+
*/
|
|
171
|
+
private validateQuery;
|
|
172
|
+
/**
|
|
173
|
+
* Validate request body
|
|
174
|
+
*/
|
|
175
|
+
private validateBody;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Initialize global TypeScript utilities
|
|
179
|
+
*/
|
|
180
|
+
export declare function initializeTypeScriptUtilities(config?: TypeScriptConfig): TypeScriptUtilities;
|
|
181
|
+
/**
|
|
182
|
+
* Get global TypeScript utilities
|
|
183
|
+
*/
|
|
184
|
+
export declare function getTypeScriptUtilities(): TypeScriptUtilities | null;
|
|
185
|
+
/**
|
|
186
|
+
* TypeScript development helpers
|
|
187
|
+
*/
|
|
188
|
+
export declare const TypeScriptHelpers: {
|
|
189
|
+
/**
|
|
190
|
+
* Generate types for current routes
|
|
191
|
+
*/
|
|
192
|
+
generateTypes: () => string;
|
|
193
|
+
/**
|
|
194
|
+
* Generate validation schemas
|
|
195
|
+
*/
|
|
196
|
+
generateSchemas: () => Record<string, ValidationSchema>;
|
|
197
|
+
/**
|
|
198
|
+
* Generate OpenAPI documentation
|
|
199
|
+
*/
|
|
200
|
+
generateOpenAPI: () => any;
|
|
201
|
+
/**
|
|
202
|
+
* Validate request types
|
|
203
|
+
*/
|
|
204
|
+
validateRequest: (req: EnhancedRequest, routeKey: string) => {
|
|
205
|
+
valid: boolean;
|
|
206
|
+
errors: string[];
|
|
207
|
+
warnings: string[];
|
|
208
|
+
};
|
|
209
|
+
};
|
package/dist/docs.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface DocsOptions {
|
|
2
|
+
verbose?: boolean;
|
|
3
|
+
output?: string;
|
|
4
|
+
groupBy?: 'path' | 'method' | 'tag';
|
|
5
|
+
includeExamples?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Generates API documentation from route definitions
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateApiDocs(options?: DocsOptions): Promise<void>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced Error Handling - Circuit Breaker Pattern
|
|
3
|
+
*
|
|
4
|
+
* Prevents cascading failures by monitoring external service health
|
|
5
|
+
* and temporarily blocking requests when services are failing
|
|
6
|
+
*/
|
|
7
|
+
import type { ErrorContext } from './exceptions';
|
|
8
|
+
export interface CircuitBreakerConfig {
|
|
9
|
+
name: string;
|
|
10
|
+
failureThreshold: number;
|
|
11
|
+
recoveryTimeout: number;
|
|
12
|
+
timeout: number;
|
|
13
|
+
monitoringPeriod: number;
|
|
14
|
+
minimumRequests: number;
|
|
15
|
+
errorThresholdPercentage: number;
|
|
16
|
+
halfOpenMaxCalls: number;
|
|
17
|
+
resetTimeout: number;
|
|
18
|
+
onStateChange?: (state: CircuitBreakerState, name: string) => void;
|
|
19
|
+
onFailure?: (error: Error, name: string) => void;
|
|
20
|
+
onSuccess?: (name: string) => void;
|
|
21
|
+
shouldTripOnError?: (error: Error) => boolean;
|
|
22
|
+
}
|
|
23
|
+
export type CircuitBreakerState = 'CLOSED' | 'OPEN' | 'HALF_OPEN';
|
|
24
|
+
export interface CircuitBreakerMetrics {
|
|
25
|
+
totalRequests: number;
|
|
26
|
+
successfulRequests: number;
|
|
27
|
+
failedRequests: number;
|
|
28
|
+
timeouts: number;
|
|
29
|
+
averageResponseTime: number;
|
|
30
|
+
lastFailureTime?: Date;
|
|
31
|
+
lastSuccessTime?: Date;
|
|
32
|
+
state: CircuitBreakerState;
|
|
33
|
+
nextAttemptTime?: Date;
|
|
34
|
+
consecutiveFailures: number;
|
|
35
|
+
consecutiveSuccesses: number;
|
|
36
|
+
}
|
|
37
|
+
export interface CircuitBreakerCall<T> {
|
|
38
|
+
execute: () => Promise<T>;
|
|
39
|
+
fallback?: () => Promise<T>;
|
|
40
|
+
timeout?: number;
|
|
41
|
+
retries?: number;
|
|
42
|
+
context?: ErrorContext;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Circuit breaker implementation
|
|
46
|
+
*/
|
|
47
|
+
export declare class CircuitBreaker {
|
|
48
|
+
private config;
|
|
49
|
+
private state;
|
|
50
|
+
private metrics;
|
|
51
|
+
private nextAttemptTime?;
|
|
52
|
+
private halfOpenCallCount;
|
|
53
|
+
private recentRequests;
|
|
54
|
+
constructor(config: CircuitBreakerConfig);
|
|
55
|
+
/**
|
|
56
|
+
* Execute a function with circuit breaker protection
|
|
57
|
+
*/
|
|
58
|
+
execute<T>(call: CircuitBreakerCall<T>): Promise<T>;
|
|
59
|
+
/**
|
|
60
|
+
* Get current circuit breaker state
|
|
61
|
+
*/
|
|
62
|
+
getState(): CircuitBreakerState;
|
|
63
|
+
/**
|
|
64
|
+
* Get circuit breaker metrics
|
|
65
|
+
*/
|
|
66
|
+
getMetrics(): CircuitBreakerMetrics;
|
|
67
|
+
/**
|
|
68
|
+
* Force circuit breaker to open state
|
|
69
|
+
*/
|
|
70
|
+
forceOpen(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Force circuit breaker to closed state
|
|
73
|
+
*/
|
|
74
|
+
forceClosed(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Reset circuit breaker metrics
|
|
77
|
+
*/
|
|
78
|
+
reset(): void;
|
|
79
|
+
private onSuccess;
|
|
80
|
+
private onFailure;
|
|
81
|
+
private shouldTrip;
|
|
82
|
+
private transitionToClosed;
|
|
83
|
+
private transitionToOpen;
|
|
84
|
+
private transitionToHalfOpen;
|
|
85
|
+
private updateAverageResponseTime;
|
|
86
|
+
private getRecentRequests;
|
|
87
|
+
private cleanupOldRequests;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Circuit breaker registry for managing multiple circuit breakers
|
|
91
|
+
*/
|
|
92
|
+
export declare class CircuitBreakerRegistry {
|
|
93
|
+
private breakers;
|
|
94
|
+
private configs;
|
|
95
|
+
/**
|
|
96
|
+
* Register a new circuit breaker
|
|
97
|
+
*/
|
|
98
|
+
register(config: CircuitBreakerConfig): CircuitBreaker;
|
|
99
|
+
/**
|
|
100
|
+
* Get circuit breaker by name
|
|
101
|
+
*/
|
|
102
|
+
get(name: string): CircuitBreaker | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* Execute function with circuit breaker protection
|
|
105
|
+
*/
|
|
106
|
+
execute<T>(name: string, call: CircuitBreakerCall<T>): Promise<T>;
|
|
107
|
+
/**
|
|
108
|
+
* Get all circuit breaker metrics
|
|
109
|
+
*/
|
|
110
|
+
getAllMetrics(): Record<string, CircuitBreakerMetrics>;
|
|
111
|
+
/**
|
|
112
|
+
* Get circuit breakers by state
|
|
113
|
+
*/
|
|
114
|
+
getBreakersByState(state: CircuitBreakerState): string[];
|
|
115
|
+
/**
|
|
116
|
+
* Force all circuit breakers to closed state
|
|
117
|
+
*/
|
|
118
|
+
forceAllClosed(): void;
|
|
119
|
+
/**
|
|
120
|
+
* Reset all circuit breaker metrics
|
|
121
|
+
*/
|
|
122
|
+
resetAll(): void;
|
|
123
|
+
/**
|
|
124
|
+
* Remove circuit breaker
|
|
125
|
+
*/
|
|
126
|
+
remove(name: string): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Get all registered circuit breaker names
|
|
129
|
+
*/
|
|
130
|
+
getNames(): string[];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Decorator for circuit breaker protection
|
|
134
|
+
*/
|
|
135
|
+
export declare function circuitBreaker(config: CircuitBreakerConfig): <T extends (...args: any[]) => Promise<any>>(target: any, propertyName: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
|
|
136
|
+
/**
|
|
137
|
+
* HTTP client with circuit breaker protection
|
|
138
|
+
*/
|
|
139
|
+
export declare class CircuitBreakerHttpClient {
|
|
140
|
+
private registry;
|
|
141
|
+
constructor(registry?: CircuitBreakerRegistry);
|
|
142
|
+
/**
|
|
143
|
+
* Make HTTP request with circuit breaker protection
|
|
144
|
+
*/
|
|
145
|
+
fetch(url: string, options?: RequestInit & {
|
|
146
|
+
circuitBreaker?: string | CircuitBreakerConfig;
|
|
147
|
+
fallback?: () => Promise<Response>;
|
|
148
|
+
context?: ErrorContext;
|
|
149
|
+
}): Promise<Response>;
|
|
150
|
+
/**
|
|
151
|
+
* Get circuit breaker registry
|
|
152
|
+
*/
|
|
153
|
+
getRegistry(): CircuitBreakerRegistry;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Middleware for circuit breaker protection
|
|
157
|
+
*/
|
|
158
|
+
export declare function createCircuitBreakerMiddleware(registry: CircuitBreakerRegistry): (req: any, next: () => Promise<Response>) => Promise<Response>;
|
|
159
|
+
/**
|
|
160
|
+
* Factory functions for common circuit breaker configurations
|
|
161
|
+
*/
|
|
162
|
+
export declare const CircuitBreakerPresets: {
|
|
163
|
+
/**
|
|
164
|
+
* Fast-failing circuit breaker for critical services
|
|
165
|
+
*/
|
|
166
|
+
critical: (name: string) => CircuitBreakerConfig;
|
|
167
|
+
/**
|
|
168
|
+
* Standard circuit breaker for regular services
|
|
169
|
+
*/
|
|
170
|
+
standard: (name: string) => CircuitBreakerConfig;
|
|
171
|
+
/**
|
|
172
|
+
* Tolerant circuit breaker for non-critical services
|
|
173
|
+
*/
|
|
174
|
+
tolerant: (name: string) => CircuitBreakerConfig;
|
|
175
|
+
/**
|
|
176
|
+
* Database circuit breaker with longer timeouts
|
|
177
|
+
*/
|
|
178
|
+
database: (name: string) => CircuitBreakerConfig;
|
|
179
|
+
/**
|
|
180
|
+
* External API circuit breaker
|
|
181
|
+
*/
|
|
182
|
+
externalApi: (name: string) => CircuitBreakerConfig;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Global circuit breaker registry instance
|
|
186
|
+
*/
|
|
187
|
+
export declare const globalCircuitBreakerRegistry: CircuitBreakerRegistry;
|
|
188
|
+
/**
|
|
189
|
+
* Convenience function to create and register a circuit breaker
|
|
190
|
+
*/
|
|
191
|
+
export declare function createCircuitBreaker(config: CircuitBreakerConfig): CircuitBreaker;
|
|
192
|
+
/**
|
|
193
|
+
* Convenience function to execute with circuit breaker protection
|
|
194
|
+
*/
|
|
195
|
+
export declare function withCircuitBreaker<T>(name: string, call: CircuitBreakerCall<T>): Promise<T>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced Error Handling - Main Error Handler Middleware
|
|
3
|
+
*
|
|
4
|
+
* Unified error handling middleware that integrates all error handling components
|
|
5
|
+
*/
|
|
6
|
+
import type { CircuitBreakerConfig, DegradationConfig, EnhancedRequest, ErrorReportingConfig } from '../types';
|
|
7
|
+
import { RouterException } from './exceptions';
|
|
8
|
+
export interface AdvancedErrorHandlerConfig {
|
|
9
|
+
errorReporting?: ErrorReportingConfig[];
|
|
10
|
+
gracefulDegradation?: DegradationConfig;
|
|
11
|
+
circuitBreakers?: CircuitBreakerConfig[];
|
|
12
|
+
globalErrorHandler?: (error: RouterException, req: EnhancedRequest) => Promise<Response>;
|
|
13
|
+
development?: boolean;
|
|
14
|
+
includeStackTrace?: boolean;
|
|
15
|
+
sanitizeErrors?: boolean;
|
|
16
|
+
logErrors?: boolean;
|
|
17
|
+
customErrorPages?: {
|
|
18
|
+
[statusCode: number]: string | ((_error: RouterException, _req: EnhancedRequest) => Promise<Response>);
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Advanced error handler middleware
|
|
23
|
+
*/
|
|
24
|
+
export declare class AdvancedErrorHandler {
|
|
25
|
+
private errorReporting?;
|
|
26
|
+
private gracefulDegradation?;
|
|
27
|
+
private circuitBreakerRegistry?;
|
|
28
|
+
private config;
|
|
29
|
+
constructor(config?: AdvancedErrorHandlerConfig);
|
|
30
|
+
private initializeComponents;
|
|
31
|
+
/**
|
|
32
|
+
* Main error handling middleware
|
|
33
|
+
*/
|
|
34
|
+
middleware(): (req: EnhancedRequest, next: () => Promise<Response>) => Promise<Response>;
|
|
35
|
+
/**
|
|
36
|
+
* Handle errors with full advanced error handling pipeline
|
|
37
|
+
*/
|
|
38
|
+
handleError(error: unknown, req: EnhancedRequest): Promise<Response>;
|
|
39
|
+
/**
|
|
40
|
+
* Convert any error to RouterException
|
|
41
|
+
*/
|
|
42
|
+
private normalizeError;
|
|
43
|
+
/**
|
|
44
|
+
* Create standardized error response
|
|
45
|
+
*/
|
|
46
|
+
private createErrorResponse;
|
|
47
|
+
/**
|
|
48
|
+
* Log error with appropriate level
|
|
49
|
+
*/
|
|
50
|
+
private logError;
|
|
51
|
+
/**
|
|
52
|
+
* Get error handler statistics
|
|
53
|
+
*/
|
|
54
|
+
getStats(): {
|
|
55
|
+
errorReporting?: any;
|
|
56
|
+
gracefulDegradation?: any;
|
|
57
|
+
circuitBreakers?: any;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Cleanup resources
|
|
61
|
+
*/
|
|
62
|
+
cleanup(): Promise<void>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Factory function to create advanced error handler middleware
|
|
66
|
+
*/
|
|
67
|
+
export declare function createAdvancedErrorHandler(config?: AdvancedErrorHandlerConfig): {
|
|
68
|
+
middleware: (req: EnhancedRequest, next: () => Promise<Response>) => Promise<Response>;
|
|
69
|
+
getStats: () => {
|
|
70
|
+
errorReporting?: any;
|
|
71
|
+
gracefulDegradation?: any;
|
|
72
|
+
circuitBreakers?: any;
|
|
73
|
+
};
|
|
74
|
+
cleanup: () => Promise<void>;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Preset configurations for different environments
|
|
78
|
+
*/
|
|
79
|
+
export declare const ErrorHandlerPresets: {
|
|
80
|
+
development: () => AdvancedErrorHandlerConfig;
|
|
81
|
+
production: (sentryDsn?: string, bugsnagApiKey?: string) => AdvancedErrorHandlerConfig;
|
|
82
|
+
staging: (sentryDsn?: string) => AdvancedErrorHandlerConfig;
|
|
83
|
+
resilient: (config?: {
|
|
84
|
+
sentryDsn?: string;
|
|
85
|
+
bugsnagApiKey?: string;
|
|
86
|
+
services?: string[];
|
|
87
|
+
}) => AdvancedErrorHandlerConfig;
|
|
88
|
+
};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Advanced Error Handling - Error Reporting Integration
|
|
3
|
+
*
|
|
4
|
+
* Integration with external error reporting services (Sentry, Bugsnag, etc.)
|
|
5
|
+
*/
|
|
6
|
+
import type { ErrorContext, RouterException } from './exceptions';
|
|
7
|
+
export interface ErrorReportingConfig {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
service: 'sentry' | 'bugsnag' | 'custom';
|
|
10
|
+
dsn?: string;
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
environment?: string;
|
|
13
|
+
release?: string;
|
|
14
|
+
sampleRate?: number;
|
|
15
|
+
beforeSend?: (error: Error, context: ErrorContext) => Error | null;
|
|
16
|
+
filters?: {
|
|
17
|
+
ignoreErrors?: (string | RegExp)[];
|
|
18
|
+
ignoreCodes?: string[];
|
|
19
|
+
ignoreUrls?: (string | RegExp)[];
|
|
20
|
+
allowUrls?: (string | RegExp)[];
|
|
21
|
+
};
|
|
22
|
+
tags?: Record<string, string>;
|
|
23
|
+
user?: {
|
|
24
|
+
id?: string;
|
|
25
|
+
email?: string;
|
|
26
|
+
username?: string;
|
|
27
|
+
};
|
|
28
|
+
extra?: Record<string, any>;
|
|
29
|
+
breadcrumbs?: {
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
maxBreadcrumbs: number;
|
|
32
|
+
};
|
|
33
|
+
performance?: {
|
|
34
|
+
enabled: boolean;
|
|
35
|
+
tracesSampleRate: number;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface ErrorReport {
|
|
39
|
+
error: RouterException;
|
|
40
|
+
context: ErrorContext;
|
|
41
|
+
fingerprint?: string[];
|
|
42
|
+
tags?: Record<string, string>;
|
|
43
|
+
extra?: Record<string, any>;
|
|
44
|
+
user?: Record<string, any>;
|
|
45
|
+
level?: 'debug' | 'info' | 'warning' | 'error' | 'fatal';
|
|
46
|
+
}
|
|
47
|
+
export interface ErrorReporter {
|
|
48
|
+
report: (error: RouterException, context?: ErrorContext) => Promise<string | null>;
|
|
49
|
+
addBreadcrumb: (message: string, category?: string, level?: string, data?: Record<string, any>) => void;
|
|
50
|
+
setUser: (user: Record<string, any>) => void;
|
|
51
|
+
setTag: (key: string, value: string) => void;
|
|
52
|
+
setExtra: (key: string, value: any) => void;
|
|
53
|
+
setContext: (key: string, context: Record<string, any>) => void;
|
|
54
|
+
close: (timeout?: number) => Promise<boolean>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Sentry error reporter implementation
|
|
58
|
+
*/
|
|
59
|
+
export declare class SentryReporter implements ErrorReporter {
|
|
60
|
+
private config;
|
|
61
|
+
private sentry;
|
|
62
|
+
constructor(config: ErrorReportingConfig);
|
|
63
|
+
private initializeSentry;
|
|
64
|
+
report(error: RouterException, context?: ErrorContext): Promise<string | null>;
|
|
65
|
+
addBreadcrumb(message: string, category?: string, level?: string, data?: Record<string, any>): void;
|
|
66
|
+
setUser(user: Record<string, any>): void;
|
|
67
|
+
setTag(key: string, value: string): void;
|
|
68
|
+
setExtra(key: string, value: any): void;
|
|
69
|
+
setContext(key: string, context: Record<string, any>): void;
|
|
70
|
+
close(timeout?: number): Promise<boolean>;
|
|
71
|
+
private shouldIgnoreError;
|
|
72
|
+
private mapSeverityToLevel;
|
|
73
|
+
private generateFingerprint;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Bugsnag error reporter implementation
|
|
77
|
+
*/
|
|
78
|
+
export declare class BugsnagReporter implements ErrorReporter {
|
|
79
|
+
private config;
|
|
80
|
+
private bugsnag;
|
|
81
|
+
constructor(config: ErrorReportingConfig);
|
|
82
|
+
private initializeBugsnag;
|
|
83
|
+
report(error: RouterException, context?: ErrorContext): Promise<string | null>;
|
|
84
|
+
addBreadcrumb(message: string, category?: string, _level?: string, data?: Record<string, any>): void;
|
|
85
|
+
setUser(user: Record<string, any>): void;
|
|
86
|
+
setTag(key: string, value: string): void;
|
|
87
|
+
setExtra(key: string, value: any): void;
|
|
88
|
+
setContext(key: string, context: Record<string, any>): void;
|
|
89
|
+
close(): Promise<boolean>;
|
|
90
|
+
private shouldIgnoreError;
|
|
91
|
+
private mapSeverityToBugsnag;
|
|
92
|
+
private generateGroupingHash;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Custom error reporter for custom implementations
|
|
96
|
+
*/
|
|
97
|
+
export declare class CustomReporter implements ErrorReporter {
|
|
98
|
+
private config;
|
|
99
|
+
private reportHandler;
|
|
100
|
+
constructor(config: ErrorReportingConfig, reportHandler: (report: ErrorReport) => Promise<string | null>);
|
|
101
|
+
report(error: RouterException, context?: ErrorContext): Promise<string | null>;
|
|
102
|
+
addBreadcrumb(): void;
|
|
103
|
+
setUser(): void;
|
|
104
|
+
setTag(): void;
|
|
105
|
+
setExtra(): void;
|
|
106
|
+
setContext(): void;
|
|
107
|
+
close(): Promise<boolean>;
|
|
108
|
+
private mapSeverityToLevel;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Error reporting manager
|
|
112
|
+
*/
|
|
113
|
+
export declare class ErrorReportingManager {
|
|
114
|
+
private reporters;
|
|
115
|
+
private breadcrumbs;
|
|
116
|
+
private maxBreadcrumbs;
|
|
117
|
+
constructor(configs: ErrorReportingConfig[]);
|
|
118
|
+
private initializeReporters;
|
|
119
|
+
addReporter(reporter: ErrorReporter): void;
|
|
120
|
+
report(error: RouterException, context?: ErrorContext): Promise<string[]>;
|
|
121
|
+
addBreadcrumb(message: string, category?: string, data?: any): void;
|
|
122
|
+
setUser(user: Record<string, any>): void;
|
|
123
|
+
setTag(key: string, value: string): void;
|
|
124
|
+
setExtra(key: string, value: any): void;
|
|
125
|
+
setContext(key: string, context: Record<string, any>): void;
|
|
126
|
+
close(timeout?: number): Promise<boolean>;
|
|
127
|
+
getBreadcrumbs(): Array<{
|
|
128
|
+
message: string;
|
|
129
|
+
timestamp: Date;
|
|
130
|
+
data?: any;
|
|
131
|
+
}>;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Factory function to create error reporting manager
|
|
135
|
+
*/
|
|
136
|
+
export declare function createErrorReporting(configs: ErrorReportingConfig[]): ErrorReportingManager;
|
|
137
|
+
/**
|
|
138
|
+
* Default configuration presets
|
|
139
|
+
*/
|
|
140
|
+
export declare const ErrorReportingPresets: {
|
|
141
|
+
sentry: (dsn: string, environment?: string) => ErrorReportingConfig;
|
|
142
|
+
bugsnag: (apiKey: string, environment?: string) => ErrorReportingConfig;
|
|
143
|
+
development: () => ErrorReportingConfig;
|
|
144
|
+
};
|