@stacksjs/bun-router 0.0.13 → 0.0.14
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/CHANGELOG.md +770 -0
- package/README.md +584 -261
- package/package.json +43 -47
- package/bin/cli.ts +0 -9
- package/dist/auth.d.ts +0 -134
- package/dist/cache/lru-cache.d.ts +0 -139
- package/dist/cache/middleware-memoization.d.ts +0 -151
- package/dist/cache/route-cache-warmer.d.ts +0 -161
- package/dist/cache/sqlite-cache.d.ts +0 -209
- package/dist/cache/streaming-cache.d.ts +0 -132
- package/dist/chunk-1mvtv6jw.js +0 -13012
- package/dist/cli/colors.d.ts +0 -15
- package/dist/cli/index.d.ts +0 -10
- package/dist/cli/middleware.d.ts +0 -31
- package/dist/cli/openapi.d.ts +0 -17
- package/dist/cli/router.d.ts +0 -15
- package/dist/cli/routes.d.ts +0 -29
- package/dist/cli/utils.d.ts +0 -74
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +0 -3195
- package/dist/config.d.ts +0 -7
- package/dist/container/container.d.ts +0 -273
- package/dist/container/contextual-binding.d.ts +0 -240
- package/dist/container/decorators.d.ts +0 -141
- package/dist/container/service-provider.d.ts +0 -285
- package/dist/development/hot-reload.d.ts +0 -187
- package/dist/development/index.d.ts +0 -167
- package/dist/development/performance-profiler.d.ts +0 -217
- package/dist/development/route-debugger.d.ts +0 -154
- package/dist/development/route-inspector.d.ts +0 -211
- package/dist/development/typescript-utilities.d.ts +0 -209
- package/dist/docs.d.ts +0 -11
- package/dist/errors/circuit-breaker.d.ts +0 -195
- package/dist/errors/error-handler.d.ts +0 -88
- package/dist/errors/error-reporting.d.ts +0 -144
- package/dist/errors/exceptions.d.ts +0 -184
- package/dist/errors/graceful-degradation.d.ts +0 -154
- package/dist/errors/index.d.ts +0 -9
- package/dist/errors/router-errors.d.ts +0 -110
- package/dist/file-serving/static-files.d.ts +0 -143
- package/dist/index.d.ts +0 -14
- package/dist/index.js +0 -13933
- package/dist/middleware/auth.d.ts +0 -63
- package/dist/middleware/content_security_policy.d.ts +0 -53
- package/dist/middleware/cors.d.ts +0 -5
- package/dist/middleware/csrf.d.ts +0 -7
- package/dist/middleware/ddos_protection.d.ts +0 -39
- package/dist/middleware/file_security.d.ts +0 -26
- package/dist/middleware/file_upload.d.ts +0 -38
- package/dist/middleware/helmet.d.ts +0 -54
- package/dist/middleware/index.d.ts +0 -44
- package/dist/middleware/input_validation.d.ts +0 -45
- package/dist/middleware/json_body.d.ts +0 -4
- package/dist/middleware/performance_alerting.d.ts +0 -87
- package/dist/middleware/performance_dashboard.d.ts +0 -87
- package/dist/middleware/performance_monitor.d.ts +0 -209
- package/dist/middleware/pipeline.d.ts +0 -131
- package/dist/middleware/rate_limit.d.ts +0 -36
- package/dist/middleware/request_id.d.ts +0 -4
- package/dist/middleware/request_signing.d.ts +0 -153
- package/dist/middleware/request_tracer.d.ts +0 -72
- package/dist/middleware/response_cache.d.ts +0 -97
- package/dist/middleware/security.d.ts +0 -69
- package/dist/middleware/security_suite.d.ts +0 -46
- package/dist/middleware/session.d.ts +0 -23
- package/dist/model-binding/index.d.ts +0 -2
- package/dist/model-binding/model-middleware.d.ts +0 -118
- package/dist/model-binding/model-registry.d.ts +0 -164
- package/dist/model-binding.d.ts +0 -185
- package/dist/model-resolver-factory.d.ts +0 -31
- package/dist/observability/correlation.d.ts +0 -187
- package/dist/observability/health-checks.d.ts +0 -186
- package/dist/observability/index.d.ts +0 -60
- package/dist/observability/integration.d.ts +0 -147
- package/dist/observability/metrics.d.ts +0 -184
- package/dist/observability/tracing.d.ts +0 -187
- package/dist/optimization/bun-utilities.d.ts +0 -224
- package/dist/query-builder-integration.d.ts +0 -36
- package/dist/request/context.d.ts +0 -34
- package/dist/request/enhanced-request.d.ts +0 -213
- package/dist/request/macros.d.ts +0 -300
- package/dist/response/macros.d.ts +0 -245
- package/dist/response/response-factory.d.ts +0 -133
- package/dist/router/api-routes.d.ts +0 -5
- package/dist/router/file-based-routing.d.ts +0 -118
- package/dist/router/file-streaming.d.ts +0 -5
- package/dist/router/fluent-router.d.ts +0 -315
- package/dist/router/fluent-routing.d.ts +0 -271
- package/dist/router/group-organization.d.ts +0 -5
- package/dist/router/handler-resolver.d.ts +0 -24
- package/dist/router/http-methods.d.ts +0 -10
- package/dist/router/index.d.ts +0 -114
- package/dist/router/middleware-groups.d.ts +0 -94
- package/dist/router/middleware-integration.d.ts +0 -112
- package/dist/router/middleware.d.ts +0 -5
- package/dist/router/model-binding.d.ts +0 -5
- package/dist/router/optimized-route-matching.d.ts +0 -6
- package/dist/router/route-building.d.ts +0 -5
- package/dist/router/route-compiler.d.ts +0 -153
- package/dist/router/route-matching.d.ts +0 -5
- package/dist/router/route-trie.d.ts +0 -114
- package/dist/router/router.d.ts +0 -294
- package/dist/router/server.d.ts +0 -5
- package/dist/router/validation-integration.d.ts +0 -170
- package/dist/router/view-rendering.d.ts +0 -5
- package/dist/router/websocket.d.ts +0 -5
- package/dist/routing/route-caching.d.ts +0 -129
- package/dist/routing/route-throttling.d.ts +0 -150
- package/dist/routing/subdomain-routing.d.ts +0 -206
- package/dist/session/database-store.d.ts +0 -51
- package/dist/session/file-store.d.ts +0 -22
- package/dist/session/index.d.ts +0 -106
- package/dist/session/memory-store.d.ts +0 -21
- package/dist/session/redis-store.d.ts +0 -31
- package/dist/streaming/index.d.ts +0 -3
- package/dist/streaming/sse-handler.d.ts +0 -138
- package/dist/streaming/stream-handler.d.ts +0 -114
- package/dist/testing/auth-testing.d.ts +0 -156
- package/dist/testing/file-upload-testing.d.ts +0 -190
- package/dist/testing/index.d.ts +0 -10
- package/dist/testing/middleware-testing.d.ts +0 -138
- package/dist/testing/model-binding-testing.d.ts +0 -186
- package/dist/testing/performance-testing.d.ts +0 -235
- package/dist/testing/test-client.d.ts +0 -117
- package/dist/testing/test-request.d.ts +0 -85
- package/dist/testing/test-response.d.ts +0 -90
- package/dist/testing/types.d.ts +0 -207
- package/dist/testing/websocket-testing.d.ts +0 -227
- package/dist/types/controller-types.d.ts +0 -208
- package/dist/types/core.d.ts +0 -543
- package/dist/types/middleware-types.d.ts +0 -227
- package/dist/types/request-response-augmentation.d.ts +0 -261
- package/dist/types/route-inference.d.ts +0 -168
- package/dist/types.d.ts +0 -1782
- package/dist/url.d.ts +0 -56
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/query-preservation.d.ts +0 -48
- package/dist/utils.d.ts +0 -69
- package/dist/validation/validator.d.ts +0 -140
- package/dist/websocket/clustering.d.ts +0 -185
- package/src/auth.ts +0 -469
- package/src/cache/lru-cache.ts +0 -457
- package/src/cache/middleware-memoization.ts +0 -531
- package/src/cache/route-cache-warmer.ts +0 -486
- package/src/cache/sqlite-cache.ts +0 -783
- package/src/cache/streaming-cache.ts +0 -572
- package/src/cli/colors.ts +0 -29
- package/src/cli/index.ts +0 -287
- package/src/cli/middleware.ts +0 -291
- package/src/cli/openapi.ts +0 -407
- package/src/cli/router.ts +0 -188
- package/src/cli/routes.ts +0 -265
- package/src/cli/utils.ts +0 -531
- package/src/cli.ts +0 -5
- package/src/config.ts +0 -322
- package/src/container/container.ts +0 -740
- package/src/container/contextual-binding.ts +0 -603
- package/src/container/decorators.ts +0 -359
- package/src/container/service-provider.ts +0 -596
- package/src/development/hot-reload.ts +0 -673
- package/src/development/index.ts +0 -499
- package/src/development/performance-profiler.ts +0 -717
- package/src/development/route-debugger.ts +0 -527
- package/src/development/route-inspector.ts +0 -749
- package/src/development/typescript-utilities.ts +0 -682
- package/src/docs.ts +0 -397
- package/src/errors/circuit-breaker.ts +0 -732
- package/src/errors/error-handler.ts +0 -569
- package/src/errors/error-reporting.ts +0 -672
- package/src/errors/exceptions.ts +0 -536
- package/src/errors/graceful-degradation.ts +0 -621
- package/src/errors/index.ts +0 -21
- package/src/errors/router-errors.ts +0 -632
- package/src/file-serving/static-files.ts +0 -581
- package/src/index.ts +0 -14
- package/src/middleware/auth.ts +0 -219
- package/src/middleware/content_security_policy.ts +0 -215
- package/src/middleware/cors.ts +0 -74
- package/src/middleware/csrf.ts +0 -108
- package/src/middleware/ddos_protection.ts +0 -255
- package/src/middleware/file_security.ts +0 -191
- package/src/middleware/file_upload.ts +0 -264
- package/src/middleware/helmet.ts +0 -268
- package/src/middleware/index.ts +0 -117
- package/src/middleware/input_validation.ts +0 -449
- package/src/middleware/json_body.ts +0 -37
- package/src/middleware/performance_alerting.ts +0 -538
- package/src/middleware/performance_dashboard.ts +0 -661
- package/src/middleware/performance_monitor.ts +0 -943
- package/src/middleware/pipeline.ts +0 -489
- package/src/middleware/rate_limit.ts +0 -245
- package/src/middleware/request_id.ts +0 -36
- package/src/middleware/request_signing.ts +0 -636
- package/src/middleware/request_tracer.ts +0 -636
- package/src/middleware/response_cache.ts +0 -743
- package/src/middleware/security.ts +0 -482
- package/src/middleware/security_suite.ts +0 -257
- package/src/middleware/session.ts +0 -91
- package/src/model-binding/index.ts +0 -18
- package/src/model-binding/model-middleware.ts +0 -425
- package/src/model-binding/model-registry.ts +0 -550
- package/src/model-binding.ts +0 -370
- package/src/model-resolver-factory.ts +0 -106
- package/src/observability/correlation.ts +0 -691
- package/src/observability/health-checks.ts +0 -729
- package/src/observability/index.ts +0 -184
- package/src/observability/integration.ts +0 -548
- package/src/observability/metrics.ts +0 -753
- package/src/observability/tracing.ts +0 -638
- package/src/optimization/bun-utilities.ts +0 -778
- package/src/query-builder-integration.ts +0 -137
- package/src/request/context.ts +0 -62
- package/src/request/enhanced-request.ts +0 -857
- package/src/request/macros.ts +0 -688
- package/src/response/macros.ts +0 -612
- package/src/response/response-factory.ts +0 -596
- package/src/router/api-routes.ts +0 -243
- package/src/router/file-based-routing.ts +0 -670
- package/src/router/file-streaming.ts +0 -372
- package/src/router/fluent-router.ts +0 -927
- package/src/router/fluent-routing.ts +0 -797
- package/src/router/group-organization.ts +0 -213
- package/src/router/handler-resolver.ts +0 -291
- package/src/router/http-methods.ts +0 -377
- package/src/router/index.ts +0 -187
- package/src/router/middleware-groups.ts +0 -222
- package/src/router/middleware-integration.ts +0 -399
- package/src/router/middleware.ts +0 -231
- package/src/router/model-binding.ts +0 -215
- package/src/router/optimized-route-matching.ts +0 -253
- package/src/router/route-building.ts +0 -212
- package/src/router/route-compiler.ts +0 -702
- package/src/router/route-matching.ts +0 -349
- package/src/router/route-trie.ts +0 -464
- package/src/router/router.ts +0 -1581
- package/src/router/server.ts +0 -462
- package/src/router/validation-integration.ts +0 -443
- package/src/router/view-rendering.ts +0 -233
- package/src/router/websocket.ts +0 -100
- package/src/routing/route-caching.ts +0 -402
- package/src/routing/route-throttling.ts +0 -469
- package/src/routing/subdomain-routing.ts +0 -492
- package/src/session/database-store.ts +0 -109
- package/src/session/file-store.ts +0 -148
- package/src/session/index.ts +0 -244
- package/src/session/memory-store.ts +0 -88
- package/src/session/redis-store.ts +0 -93
- package/src/streaming/index.ts +0 -17
- package/src/streaming/sse-handler.ts +0 -482
- package/src/streaming/stream-handler.ts +0 -552
- package/src/testing/auth-testing.ts +0 -446
- package/src/testing/file-upload-testing.ts +0 -543
- package/src/testing/index.ts +0 -10
- package/src/testing/middleware-testing.ts +0 -322
- package/src/testing/model-binding-testing.ts +0 -645
- package/src/testing/performance-testing.ts +0 -738
- package/src/testing/test-client.ts +0 -310
- package/src/testing/test-request.ts +0 -315
- package/src/testing/test-response.ts +0 -332
- package/src/testing/types.ts +0 -224
- package/src/testing/websocket-testing.ts +0 -590
- package/src/types/controller-types.ts +0 -385
- package/src/types/core.ts +0 -683
- package/src/types/middleware-types.ts +0 -419
- package/src/types/request-response-augmentation.ts +0 -489
- package/src/types/route-inference.ts +0 -357
- package/src/types.ts +0 -2055
- package/src/url.ts +0 -126
- package/src/utils/index.ts +0 -1
- package/src/utils/query-preservation.ts +0 -201
- package/src/utils.ts +0 -327
- package/src/validation/validator.ts +0 -685
- package/src/websocket/clustering.ts +0 -762
|
@@ -1,419 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Middleware Type Safety with Generic Constraints
|
|
3
|
-
*
|
|
4
|
-
* Advanced TypeScript utilities for type-safe middleware with generic constraints
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { RouteHandler, TypedRequest } from './route-inference'
|
|
8
|
-
|
|
9
|
-
// Base middleware interface with generic constraints
|
|
10
|
-
export interface TypedMiddleware<
|
|
11
|
-
TInput = any,
|
|
12
|
-
TOutput = TInput,
|
|
13
|
-
_TContext = object,
|
|
14
|
-
TNext = any,
|
|
15
|
-
> {
|
|
16
|
-
(
|
|
17
|
-
request: TInput,
|
|
18
|
-
next: TNext
|
|
19
|
-
): Promise<TOutput> | TOutput
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Middleware context augmentation
|
|
23
|
-
export type AugmentContext<TBase, TAddition> = TBase & TAddition
|
|
24
|
-
|
|
25
|
-
// Request augmentation through middleware
|
|
26
|
-
export type AugmentRequest<TRequest, TAugmentation> = TRequest & TAugmentation
|
|
27
|
-
|
|
28
|
-
// Middleware chain type inference
|
|
29
|
-
export type MiddlewareChain<T extends readonly any[]> = T extends readonly [
|
|
30
|
-
infer First,
|
|
31
|
-
...infer Rest,
|
|
32
|
-
]
|
|
33
|
-
? First extends TypedMiddleware<infer Input, infer Output, infer Context, any>
|
|
34
|
-
? Rest extends readonly []
|
|
35
|
-
? TypedMiddleware<Input, Output, Context, any>
|
|
36
|
-
: Rest extends readonly TypedMiddleware<Output, any, any, any>[]
|
|
37
|
-
? MiddlewareChain<Rest> extends TypedMiddleware<Output, infer FinalOutput, infer RestContext, any>
|
|
38
|
-
? TypedMiddleware<Input, FinalOutput, Context & RestContext, any>
|
|
39
|
-
: never
|
|
40
|
-
: never
|
|
41
|
-
: never
|
|
42
|
-
: never
|
|
43
|
-
|
|
44
|
-
// Middleware composition types
|
|
45
|
-
export type ComposeMiddleware<
|
|
46
|
-
TFirst extends TypedMiddleware<any, any, any, any>,
|
|
47
|
-
TSecond extends TypedMiddleware<any, any, any, any>,
|
|
48
|
-
> = TFirst extends TypedMiddleware<infer Input1, infer Output1, infer Context1, any>
|
|
49
|
-
? TSecond extends TypedMiddleware<Output1, infer Output2, infer Context2, any>
|
|
50
|
-
? TypedMiddleware<Input1, Output2, Context1 & Context2, any>
|
|
51
|
-
: never
|
|
52
|
-
: never
|
|
53
|
-
|
|
54
|
-
// Authentication middleware types
|
|
55
|
-
export interface AuthenticatedRequest<TUser = any> {
|
|
56
|
-
user: TUser
|
|
57
|
-
isAuthenticated: true
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface UnauthenticatedRequest {
|
|
61
|
-
user?: never
|
|
62
|
-
isAuthenticated: false
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export type AuthMiddleware<TUser = any> = TypedMiddleware<
|
|
66
|
-
Request,
|
|
67
|
-
Request & AuthenticatedRequest<TUser>,
|
|
68
|
-
{ auth: { user: TUser } },
|
|
69
|
-
any
|
|
70
|
-
>
|
|
71
|
-
|
|
72
|
-
// Authorization middleware types
|
|
73
|
-
export interface AuthorizedRequest<TPermissions extends string = string> {
|
|
74
|
-
permissions: TPermissions[]
|
|
75
|
-
hasPermission: (permission: TPermissions) => boolean
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export type AuthzMiddleware<TPermissions extends string = string> = TypedMiddleware<
|
|
79
|
-
Request & AuthenticatedRequest,
|
|
80
|
-
Request & AuthenticatedRequest & AuthorizedRequest<TPermissions>,
|
|
81
|
-
{ authz: { permissions: TPermissions[] } },
|
|
82
|
-
any
|
|
83
|
-
>
|
|
84
|
-
|
|
85
|
-
// Validation middleware types
|
|
86
|
-
export interface ValidatedRequest<TParams = any, TQuery = any, TBody = any> {
|
|
87
|
-
validatedParams: TParams
|
|
88
|
-
validatedQuery: TQuery
|
|
89
|
-
validatedBody: TBody
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
export type ValidationMiddleware<TParams = any, TQuery = any, TBody = any> = TypedMiddleware<
|
|
93
|
-
Request,
|
|
94
|
-
Request & ValidatedRequest<TParams, TQuery, TBody>,
|
|
95
|
-
{ validation: { params: TParams, query: TQuery, body: TBody } },
|
|
96
|
-
any
|
|
97
|
-
>
|
|
98
|
-
|
|
99
|
-
// Rate limiting middleware types
|
|
100
|
-
export interface RateLimitedRequest {
|
|
101
|
-
rateLimit: {
|
|
102
|
-
remaining: number
|
|
103
|
-
reset: Date
|
|
104
|
-
limit: number
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export type RateLimitMiddleware = TypedMiddleware<
|
|
109
|
-
Request,
|
|
110
|
-
Request & RateLimitedRequest,
|
|
111
|
-
{ rateLimit: RateLimitedRequest['rateLimit'] },
|
|
112
|
-
any
|
|
113
|
-
>
|
|
114
|
-
|
|
115
|
-
// Caching middleware types
|
|
116
|
-
export interface CachedRequest {
|
|
117
|
-
cache: {
|
|
118
|
-
key: string
|
|
119
|
-
ttl: number
|
|
120
|
-
hit: boolean
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export type CacheMiddleware = TypedMiddleware<
|
|
125
|
-
Request,
|
|
126
|
-
Request & CachedRequest,
|
|
127
|
-
{ cache: CachedRequest['cache'] },
|
|
128
|
-
any
|
|
129
|
-
>
|
|
130
|
-
|
|
131
|
-
// Logging middleware types
|
|
132
|
-
export interface LoggedRequest {
|
|
133
|
-
requestId: string
|
|
134
|
-
startTime: number
|
|
135
|
-
logger: {
|
|
136
|
-
info: (message: string, meta?: any) => void
|
|
137
|
-
warn: (message: string, meta?: any) => void
|
|
138
|
-
error: (message: string, meta?: any) => void
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
export type LoggingMiddleware = TypedMiddleware<
|
|
143
|
-
Request,
|
|
144
|
-
Request & LoggedRequest,
|
|
145
|
-
{ logging: { requestId: string, logger: LoggedRequest['logger'] } },
|
|
146
|
-
any
|
|
147
|
-
>
|
|
148
|
-
|
|
149
|
-
// CORS middleware types
|
|
150
|
-
export interface CORSRequest {
|
|
151
|
-
cors: {
|
|
152
|
-
origin: string
|
|
153
|
-
methods: string[]
|
|
154
|
-
headers: string[]
|
|
155
|
-
credentials: boolean
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export type CORSMiddleware = TypedMiddleware<
|
|
160
|
-
Request,
|
|
161
|
-
Request & CORSRequest,
|
|
162
|
-
{ cors: CORSRequest['cors'] },
|
|
163
|
-
any
|
|
164
|
-
>
|
|
165
|
-
|
|
166
|
-
// File upload middleware types
|
|
167
|
-
export interface FileUploadRequest<TFiles extends Record<string, any> = Record<string, File>> {
|
|
168
|
-
files: TFiles
|
|
169
|
-
formData: FormData
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export type FileUploadMiddleware<TFiles extends Record<string, any> = Record<string, File>> = TypedMiddleware<
|
|
173
|
-
Request,
|
|
174
|
-
Request & FileUploadRequest<TFiles>,
|
|
175
|
-
{ upload: { files: TFiles } },
|
|
176
|
-
any
|
|
177
|
-
>
|
|
178
|
-
|
|
179
|
-
// Session middleware types
|
|
180
|
-
export interface SessionRequest<TSession = any> {
|
|
181
|
-
session: TSession & {
|
|
182
|
-
id: string
|
|
183
|
-
save: () => Promise<void>
|
|
184
|
-
destroy: () => Promise<void>
|
|
185
|
-
regenerate: () => Promise<void>
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
export type SessionMiddleware<TSession = any> = TypedMiddleware<
|
|
190
|
-
Request,
|
|
191
|
-
Request & SessionRequest<TSession>,
|
|
192
|
-
{ session: SessionRequest<TSession>['session'] },
|
|
193
|
-
any
|
|
194
|
-
>
|
|
195
|
-
|
|
196
|
-
// Middleware factory types
|
|
197
|
-
export interface MiddlewareFactory<TOptions = any, TMiddleware extends TypedMiddleware<any, any, any, any> = any> {
|
|
198
|
-
(options?: TOptions): TMiddleware
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Conditional middleware types
|
|
202
|
-
export type ConditionalMiddleware<
|
|
203
|
-
_TCondition extends (_req: any) => boolean,
|
|
204
|
-
TMiddleware extends TypedMiddleware<any, any, any, any>,
|
|
205
|
-
> = TypedMiddleware<
|
|
206
|
-
Parameters<TMiddleware>[0],
|
|
207
|
-
TMiddleware extends TypedMiddleware<any, infer Output, any, any> ? Output : never,
|
|
208
|
-
TMiddleware extends TypedMiddleware<any, any, infer Context, any> ? Context : object,
|
|
209
|
-
any
|
|
210
|
-
>
|
|
211
|
-
|
|
212
|
-
// Middleware group types
|
|
213
|
-
export interface MiddlewareGroup<TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[]> {
|
|
214
|
-
middlewares: TMiddlewares
|
|
215
|
-
compose: () => MiddlewareChain<TMiddlewares>
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// Error handling middleware types
|
|
219
|
-
export interface ErrorHandlingRequest {
|
|
220
|
-
error?: Error
|
|
221
|
-
errorHandled: boolean
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
export type ErrorMiddleware = TypedMiddleware<
|
|
225
|
-
Request & { error: Error },
|
|
226
|
-
Response,
|
|
227
|
-
{ error: { handled: boolean } },
|
|
228
|
-
any
|
|
229
|
-
>
|
|
230
|
-
|
|
231
|
-
// Middleware pipeline types
|
|
232
|
-
export interface MiddlewarePipeline<T extends readonly TypedMiddleware<any, any, any, any>[]> {
|
|
233
|
-
readonly middlewares: T
|
|
234
|
-
execute: <TRequest>(request: TRequest) => Promise<
|
|
235
|
-
T extends readonly []
|
|
236
|
-
? TRequest
|
|
237
|
-
: MiddlewareChain<T> extends TypedMiddleware<TRequest, infer Output, any, any>
|
|
238
|
-
? Output
|
|
239
|
-
: never
|
|
240
|
-
>
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// Advanced middleware constraints
|
|
244
|
-
export interface MiddlewareConstraint<T> {
|
|
245
|
-
input: T extends TypedMiddleware<infer Input, any, any, any> ? Input : never
|
|
246
|
-
output: T extends TypedMiddleware<any, infer Output, any, any> ? Output : never
|
|
247
|
-
context: T extends TypedMiddleware<any, any, infer Context, any> ? Context : never
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// Middleware compatibility checking
|
|
251
|
-
export type MiddlewareCompatible<
|
|
252
|
-
TFirst extends TypedMiddleware<any, any, any, any>,
|
|
253
|
-
TSecond extends TypedMiddleware<any, any, any, any>,
|
|
254
|
-
> = MiddlewareConstraint<TFirst>['output'] extends MiddlewareConstraint<TSecond>['input']
|
|
255
|
-
? true
|
|
256
|
-
: false
|
|
257
|
-
|
|
258
|
-
// Route-specific middleware types
|
|
259
|
-
export type RouteMiddleware<
|
|
260
|
-
TPath extends string,
|
|
261
|
-
TQuery extends Record<string, any> = object,
|
|
262
|
-
TBody = unknown,
|
|
263
|
-
TContext = object,
|
|
264
|
-
> = TypedMiddleware<
|
|
265
|
-
TypedRequest<TPath, TQuery, TBody, TContext>,
|
|
266
|
-
TypedRequest<TPath, TQuery, TBody, TContext>,
|
|
267
|
-
TContext,
|
|
268
|
-
RouteHandler<TPath, TQuery, TBody, TContext>
|
|
269
|
-
>
|
|
270
|
-
|
|
271
|
-
// Middleware builder interface
|
|
272
|
-
export interface MiddlewareBuilder<TContext = object> {
|
|
273
|
-
use: <TNewContext>(
|
|
274
|
-
middleware: TypedMiddleware<any, any, TNewContext, any>
|
|
275
|
-
) => MiddlewareBuilder<TContext & TNewContext>
|
|
276
|
-
|
|
277
|
-
auth: <TUser>(
|
|
278
|
-
middleware: AuthMiddleware<TUser>
|
|
279
|
-
) => MiddlewareBuilder<TContext & { auth: { user: TUser } }>
|
|
280
|
-
|
|
281
|
-
validate: <TParams, TQuery, TBody>(
|
|
282
|
-
middleware: ValidationMiddleware<TParams, TQuery, TBody>
|
|
283
|
-
) => MiddlewareBuilder<TContext & { validation: { params: TParams, query: TQuery, body: TBody } }>
|
|
284
|
-
|
|
285
|
-
rateLimit: (
|
|
286
|
-
middleware: RateLimitMiddleware
|
|
287
|
-
) => MiddlewareBuilder<TContext & { rateLimit: RateLimitedRequest['rateLimit'] }>
|
|
288
|
-
|
|
289
|
-
cache: (
|
|
290
|
-
middleware: CacheMiddleware
|
|
291
|
-
) => MiddlewareBuilder<TContext & { cache: CachedRequest['cache'] }>
|
|
292
|
-
|
|
293
|
-
cors: (
|
|
294
|
-
middleware: CORSMiddleware
|
|
295
|
-
) => MiddlewareBuilder<TContext & { cors: CORSRequest['cors'] }>
|
|
296
|
-
|
|
297
|
-
session: <TSession>(
|
|
298
|
-
middleware: SessionMiddleware<TSession>
|
|
299
|
-
) => MiddlewareBuilder<TContext & { session: SessionRequest<TSession>['session'] }>
|
|
300
|
-
|
|
301
|
-
build: () => TypedMiddleware<Request, Request & TContext, TContext, any>[]
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
// Middleware execution context
|
|
305
|
-
export interface MiddlewareExecutionContext<TContext = object> {
|
|
306
|
-
request: Request
|
|
307
|
-
response?: Response
|
|
308
|
-
context: TContext
|
|
309
|
-
next: () => Promise<Response>
|
|
310
|
-
skip: () => void
|
|
311
|
-
abort: (response: Response) => void
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// Middleware hooks
|
|
315
|
-
export interface MiddlewareHooks<TContext = object> {
|
|
316
|
-
beforeExecution?: (context: MiddlewareExecutionContext<TContext>) => Promise<void> | void
|
|
317
|
-
afterExecution?: (context: MiddlewareExecutionContext<TContext>, result: any) => Promise<void> | void
|
|
318
|
-
onError?: (context: MiddlewareExecutionContext<TContext>, error: Error) => Promise<Response> | Response
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
// Async middleware types
|
|
322
|
-
export type AsyncMiddleware<
|
|
323
|
-
TInput = any,
|
|
324
|
-
TOutput = TInput,
|
|
325
|
-
TContext = object,
|
|
326
|
-
TNext = any,
|
|
327
|
-
> = TypedMiddleware<TInput, Promise<TOutput>, TContext, TNext>
|
|
328
|
-
|
|
329
|
-
// Middleware metadata
|
|
330
|
-
export interface MiddlewareMetadata {
|
|
331
|
-
name: string
|
|
332
|
-
version?: string
|
|
333
|
-
description?: string
|
|
334
|
-
dependencies?: string[]
|
|
335
|
-
tags?: string[]
|
|
336
|
-
priority?: number
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
// Decorated middleware
|
|
340
|
-
export interface DecoratedMiddleware<
|
|
341
|
-
TInput = any,
|
|
342
|
-
TOutput = TInput,
|
|
343
|
-
TContext = object,
|
|
344
|
-
TNext = any,
|
|
345
|
-
> extends TypedMiddleware<TInput, TOutput, TContext, TNext> {
|
|
346
|
-
metadata: MiddlewareMetadata
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
// Middleware registry
|
|
350
|
-
export interface MiddlewareRegistry {
|
|
351
|
-
register: <T extends TypedMiddleware<any, any, any, any>>(
|
|
352
|
-
name: string,
|
|
353
|
-
middleware: T,
|
|
354
|
-
metadata?: Partial<MiddlewareMetadata>
|
|
355
|
-
) => void
|
|
356
|
-
|
|
357
|
-
get: <T extends TypedMiddleware<any, any, any, any>>(name: string) => T | undefined
|
|
358
|
-
|
|
359
|
-
list: () => Array<{ name: string, middleware: TypedMiddleware<any, any, any, any>, metadata: MiddlewareMetadata }>
|
|
360
|
-
|
|
361
|
-
resolve: (dependencies: string[]) => TypedMiddleware<any, any, any, any>[]
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// Middleware composition utilities
|
|
365
|
-
export type Compose<T extends readonly TypedMiddleware<any, any, any, any>[]> =
|
|
366
|
-
T extends readonly [infer First, ...infer Rest]
|
|
367
|
-
? First extends TypedMiddleware<infer Input, infer Output, infer Context, any>
|
|
368
|
-
? Rest extends readonly TypedMiddleware<any, any, any, any>[]
|
|
369
|
-
? Rest extends readonly []
|
|
370
|
-
? TypedMiddleware<Input, Output, Context, any>
|
|
371
|
-
: Compose<Rest> extends TypedMiddleware<Output, infer FinalOutput, infer RestContext, any>
|
|
372
|
-
? TypedMiddleware<Input, FinalOutput, Context & RestContext, any>
|
|
373
|
-
: never
|
|
374
|
-
: never
|
|
375
|
-
: never
|
|
376
|
-
: TypedMiddleware<any, any, object, any>
|
|
377
|
-
|
|
378
|
-
// Middleware type guards
|
|
379
|
-
export type IsMiddleware<T> = T extends TypedMiddleware<any, any, any, any> ? true : false
|
|
380
|
-
|
|
381
|
-
export type IsCompatibleMiddleware<T1, T2> =
|
|
382
|
-
T1 extends TypedMiddleware<any, infer Output1, any, any>
|
|
383
|
-
? T2 extends TypedMiddleware<Output1, any, any, any>
|
|
384
|
-
? true
|
|
385
|
-
: false
|
|
386
|
-
: false
|
|
387
|
-
|
|
388
|
-
// Middleware transformation types
|
|
389
|
-
export type TransformMiddleware<
|
|
390
|
-
TMiddleware extends TypedMiddleware<any, any, any, any>,
|
|
391
|
-
TNewInput,
|
|
392
|
-
TNewOutput = TNewInput,
|
|
393
|
-
> = TMiddleware extends TypedMiddleware<any, any, infer Context, any>
|
|
394
|
-
? TypedMiddleware<TNewInput, TNewOutput, Context, any>
|
|
395
|
-
: never
|
|
396
|
-
|
|
397
|
-
// Route-aware middleware
|
|
398
|
-
export type RouteAwareMiddleware<TRoutes extends Record<string, any> = object> = {
|
|
399
|
-
[K in keyof TRoutes]: TRoutes[K] extends RouteHandler<infer Path, infer Query, infer Body, infer Context>
|
|
400
|
-
? RouteMiddleware<Path, Query, Body, Context>
|
|
401
|
-
: never
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
// Middleware performance tracking
|
|
405
|
-
export interface MiddlewarePerformance {
|
|
406
|
-
name: string
|
|
407
|
-
executionTime: number
|
|
408
|
-
memoryUsage: number
|
|
409
|
-
callCount: number
|
|
410
|
-
errorCount: number
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
export type PerformanceTrackingMiddleware<T extends TypedMiddleware<any, any, any, any>> =
|
|
414
|
-
T & {
|
|
415
|
-
getPerformanceMetrics: () => MiddlewarePerformance
|
|
416
|
-
resetMetrics: () => void
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
// Export all middleware types
|