@stacksjs/bun-router 0.0.2

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.
Files changed (131) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +397 -0
  3. package/bin/cli.ts +9 -0
  4. package/dist/auth.d.ts +77 -0
  5. package/dist/cache/lru-cache.d.ts +88 -0
  6. package/dist/cache/middleware-memoization.d.ts +101 -0
  7. package/dist/cache/route-cache-warmer.d.ts +125 -0
  8. package/dist/cache/sqlite-cache.d.ts +114 -0
  9. package/dist/cache/streaming-cache.d.ts +86 -0
  10. package/dist/chunk-r15a48wc.js +25448 -0
  11. package/dist/cli/colors.d.ts +12 -0
  12. package/dist/cli/index.d.ts +10 -0
  13. package/dist/cli/middleware.d.ts +31 -0
  14. package/dist/cli/openapi.d.ts +17 -0
  15. package/dist/cli/router.d.ts +15 -0
  16. package/dist/cli/routes.d.ts +30 -0
  17. package/dist/cli/utils.d.ts +68 -0
  18. package/dist/cli.d.ts +0 -0
  19. package/dist/cli.js +3195 -0
  20. package/dist/config.d.ts +274 -0
  21. package/dist/container/container.d.ts +141 -0
  22. package/dist/container/contextual-binding.d.ts +112 -0
  23. package/dist/container/decorators.d.ts +114 -0
  24. package/dist/container/service-provider.d.ts +221 -0
  25. package/dist/development/hot-reload.d.ts +129 -0
  26. package/dist/development/index.d.ts +144 -0
  27. package/dist/development/performance-profiler.d.ts +152 -0
  28. package/dist/development/route-debugger.d.ts +102 -0
  29. package/dist/development/route-inspector.d.ts +142 -0
  30. package/dist/development/typescript-utilities.d.ts +116 -0
  31. package/dist/docs.d.ts +10 -0
  32. package/dist/errors/circuit-breaker.d.ts +138 -0
  33. package/dist/errors/error-handler.d.ts +57 -0
  34. package/dist/errors/error-reporting.d.ts +135 -0
  35. package/dist/errors/exceptions.d.ts +178 -0
  36. package/dist/errors/graceful-degradation.d.ts +130 -0
  37. package/dist/errors/index.d.ts +6 -0
  38. package/dist/errors/router-errors.d.ts +97 -0
  39. package/dist/file-serving/static-files.d.ts +98 -0
  40. package/dist/index.d.ts +10 -0
  41. package/dist/index.js +13417 -0
  42. package/dist/middleware/auth.d.ts +34 -0
  43. package/dist/middleware/content_security_policy.d.ts +54 -0
  44. package/dist/middleware/cors.d.ts +5 -0
  45. package/dist/middleware/csrf.d.ts +7 -0
  46. package/dist/middleware/ddos_protection.d.ts +47 -0
  47. package/dist/middleware/file_security.d.ts +23 -0
  48. package/dist/middleware/file_upload.d.ts +41 -0
  49. package/dist/middleware/helmet.d.ts +54 -0
  50. package/dist/middleware/index.d.ts +55 -0
  51. package/dist/middleware/input_validation.d.ts +46 -0
  52. package/dist/middleware/json_body.d.ts +4 -0
  53. package/dist/middleware/performance_alerting.d.ts +88 -0
  54. package/dist/middleware/performance_dashboard.d.ts +97 -0
  55. package/dist/middleware/performance_monitor.d.ts +236 -0
  56. package/dist/middleware/pipeline.d.ts +90 -0
  57. package/dist/middleware/rate_limit.d.ts +33 -0
  58. package/dist/middleware/request_id.d.ts +4 -0
  59. package/dist/middleware/request_signing.d.ts +96 -0
  60. package/dist/middleware/request_tracer.d.ts +76 -0
  61. package/dist/middleware/response_cache.d.ts +90 -0
  62. package/dist/middleware/security.d.ts +70 -0
  63. package/dist/middleware/security_suite.d.ts +46 -0
  64. package/dist/middleware/session.d.ts +7 -0
  65. package/dist/model-binding/index.d.ts +17 -0
  66. package/dist/model-binding/model-middleware.d.ts +80 -0
  67. package/dist/model-binding/model-registry.d.ts +125 -0
  68. package/dist/model-binding.d.ts +123 -0
  69. package/dist/model-resolver-factory.d.ts +31 -0
  70. package/dist/observability/correlation.d.ts +131 -0
  71. package/dist/observability/health-checks.d.ts +129 -0
  72. package/dist/observability/index.d.ts +92 -0
  73. package/dist/observability/integration.d.ts +112 -0
  74. package/dist/observability/metrics.d.ts +135 -0
  75. package/dist/observability/tracing.d.ts +112 -0
  76. package/dist/optimization/bun-utilities.d.ts +106 -0
  77. package/dist/query-builder-integration.d.ts +24 -0
  78. package/dist/request/enhanced-request.d.ts +143 -0
  79. package/dist/request/macros.d.ts +267 -0
  80. package/dist/response/macros.d.ts +207 -0
  81. package/dist/response/response-factory.d.ts +93 -0
  82. package/dist/router/file-based-routing.d.ts +40 -0
  83. package/dist/router/file-streaming.d.ts +6 -0
  84. package/dist/router/fluent-router.d.ts +179 -0
  85. package/dist/router/fluent-routing.d.ts +198 -0
  86. package/dist/router/group-organization.d.ts +5 -0
  87. package/dist/router/handler-resolver.d.ts +13 -0
  88. package/dist/router/http-methods.d.ts +10 -0
  89. package/dist/router/index.d.ts +114 -0
  90. package/dist/router/middleware-integration.d.ts +86 -0
  91. package/dist/router/middleware.d.ts +5 -0
  92. package/dist/router/model-binding.d.ts +7 -0
  93. package/dist/router/optimized-route-matching.d.ts +6 -0
  94. package/dist/router/route-building.d.ts +5 -0
  95. package/dist/router/route-compiler.d.ts +67 -0
  96. package/dist/router/route-matching.d.ts +5 -0
  97. package/dist/router/route-trie.d.ts +69 -0
  98. package/dist/router/router.d.ts +133 -0
  99. package/dist/router/server.d.ts +5 -0
  100. package/dist/router/validation-integration.d.ts +116 -0
  101. package/dist/router/view-rendering.d.ts +5 -0
  102. package/dist/router/websocket.d.ts +5 -0
  103. package/dist/routing/route-caching.d.ts +105 -0
  104. package/dist/routing/route-throttling.d.ts +112 -0
  105. package/dist/routing/subdomain-routing.d.ts +159 -0
  106. package/dist/streaming/index.d.ts +15 -0
  107. package/dist/streaming/sse-handler.d.ts +81 -0
  108. package/dist/streaming/stream-handler.d.ts +81 -0
  109. package/dist/testing/auth-testing.d.ts +107 -0
  110. package/dist/testing/file-upload-testing.d.ts +139 -0
  111. package/dist/testing/index.d.ts +10 -0
  112. package/dist/testing/middleware-testing.d.ts +99 -0
  113. package/dist/testing/model-binding-testing.d.ts +132 -0
  114. package/dist/testing/performance-testing.d.ts +202 -0
  115. package/dist/testing/test-client.d.ts +58 -0
  116. package/dist/testing/test-request.d.ts +43 -0
  117. package/dist/testing/test-response.d.ts +45 -0
  118. package/dist/testing/types.d.ts +206 -0
  119. package/dist/testing/websocket-testing.d.ts +170 -0
  120. package/dist/types/controller-types.d.ts +303 -0
  121. package/dist/types/core.d.ts +526 -0
  122. package/dist/types/middleware-types.d.ts +315 -0
  123. package/dist/types/request-response-augmentation.d.ts +373 -0
  124. package/dist/types/route-inference.d.ts +287 -0
  125. package/dist/types.d.ts +1620 -0
  126. package/dist/utils/index.d.ts +1 -0
  127. package/dist/utils/query-preservation.d.ts +31 -0
  128. package/dist/utils.d.ts +69 -0
  129. package/dist/validation/validator.d.ts +169 -0
  130. package/dist/websocket/clustering.d.ts +114 -0
  131. package/package.json +81 -0
@@ -0,0 +1,315 @@
1
+ import type { RouteHandler, TypedRequest } from './route-inference';
2
+ // Base middleware interface with generic constraints
3
+ export declare interface TypedMiddleware<TInput = any, TOutput = TInput, _TContext = object, TNext = any> {
4
+ (request: TInput, next: TNext): Promise<TOutput> | TOutput
5
+ }
6
+ // Authentication middleware types
7
+ export declare interface AuthenticatedRequest<TUser = any> {
8
+ user: TUser
9
+ isAuthenticated: true
10
+ }
11
+ export declare interface UnauthenticatedRequest {
12
+ user?: never
13
+ isAuthenticated: false
14
+ }
15
+ // Authorization middleware types
16
+ export declare interface AuthorizedRequest<TPermissions extends string = string> {
17
+ permissions: TPermissions[]
18
+ hasPermission: (permission: TPermissions) => boolean
19
+ }
20
+ // Validation middleware types
21
+ export declare interface ValidatedRequest<TParams = any, TQuery = any, TBody = any> {
22
+ validatedParams: TParams
23
+ validatedQuery: TQuery
24
+ validatedBody: TBody
25
+ }
26
+ // Rate limiting middleware types
27
+ export declare interface RateLimitedRequest {
28
+ rateLimit: {
29
+ remaining: number
30
+ reset: Date
31
+ limit: number
32
+ }
33
+ }
34
+ // Caching middleware types
35
+ export declare interface CachedRequest {
36
+ cache: {
37
+ key: string
38
+ ttl: number
39
+ hit: boolean
40
+ }
41
+ }
42
+ // Logging middleware types
43
+ export declare interface LoggedRequest {
44
+ requestId: string
45
+ startTime: number
46
+ logger: {
47
+ info: (message: string, meta?: any) => void
48
+ warn: (message: string, meta?: any) => void
49
+ error: (message: string, meta?: any) => void
50
+ }
51
+ }
52
+ // CORS middleware types
53
+ export declare interface CORSRequest {
54
+ cors: {
55
+ origin: string
56
+ methods: string[]
57
+ headers: string[]
58
+ credentials: boolean
59
+ }
60
+ }
61
+ // File upload middleware types
62
+ export declare interface FileUploadRequest<TFiles extends Record<string, any> = Record<string, File>> {
63
+ files: TFiles
64
+ formData: FormData
65
+ }
66
+ // Session middleware types
67
+ export declare interface SessionRequest<TSession = any> {
68
+ session: TSession & {
69
+ id: string
70
+ save: () => Promise<void>
71
+ destroy: () => Promise<void>
72
+ regenerate: () => Promise<void>
73
+ }
74
+ }
75
+ // Middleware factory types
76
+ export declare interface MiddlewareFactory<TOptions = any, TMiddleware extends TypedMiddleware<any, any, any, any> = any> {
77
+ (options?: TOptions): TMiddleware
78
+ }
79
+ // Middleware group types
80
+ export declare interface MiddlewareGroup<TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[]> {
81
+ middlewares: TMiddlewares
82
+ compose: () => MiddlewareChain<TMiddlewares>
83
+ }
84
+ // Error handling middleware types
85
+ export declare interface ErrorHandlingRequest {
86
+ error?: Error
87
+ errorHandled: boolean
88
+ }
89
+ // Middleware pipeline types
90
+ export declare interface MiddlewarePipeline<T extends readonly TypedMiddleware<any, any, any, any>[]> {
91
+ middlewares: T
92
+ execute: <TRequest>(request: TRequest) => Promise<
93
+ T extends readonly []
94
+ ? TRequest
95
+ : MiddlewareChain<T> extends TypedMiddleware<TRequest, infer Output, any, any>
96
+ ? Output
97
+ : never
98
+ >
99
+ }
100
+ // Advanced middleware constraints
101
+ export declare interface MiddlewareConstraint<T> {
102
+ input: T extends TypedMiddleware<infer Input, any, any, any> ? Input : never
103
+ output: T extends TypedMiddleware<any, infer Output, any, any> ? Output : never
104
+ context: T extends TypedMiddleware<any, any, infer Context, any> ? Context : never
105
+ }
106
+ // Middleware builder interface
107
+ export declare interface MiddlewareBuilder<TContext = object> {
108
+ use: <TNewContext>(
109
+ middleware: TypedMiddleware<any, any, TNewContext, any>
110
+ ) => MiddlewareBuilder<TContext & TNewContext>
111
+ auth: <TUser>(
112
+ middleware: AuthMiddleware<TUser>
113
+ ) => MiddlewareBuilder<TContext & { auth: { user: TUser } }>
114
+ validate: <TParams, TQuery, TBody>(
115
+ middleware: ValidationMiddleware<TParams, TQuery, TBody>
116
+ ) => MiddlewareBuilder<TContext & { validation: { params: TParams, query: TQuery, body: TBody } }>
117
+ rateLimit: (
118
+ middleware: RateLimitMiddleware
119
+ ) => MiddlewareBuilder<TContext & { rateLimit: RateLimitedRequest['rateLimit'] }>
120
+ cache: (
121
+ middleware: CacheMiddleware
122
+ ) => MiddlewareBuilder<TContext & { cache: CachedRequest['cache'] }>
123
+ cors: (
124
+ middleware: CORSMiddleware
125
+ ) => MiddlewareBuilder<TContext & { cors: CORSRequest['cors'] }>
126
+ session: <TSession>(
127
+ middleware: SessionMiddleware<TSession>
128
+ ) => MiddlewareBuilder<TContext & { session: SessionRequest<TSession>['session'] }>
129
+ build: () => TypedMiddleware<Request, Request & TContext, TContext, any>[]
130
+ }
131
+ // Middleware execution context
132
+ export declare interface MiddlewareExecutionContext<TContext = object> {
133
+ request: Request
134
+ response?: Response
135
+ context: TContext
136
+ next: () => Promise<Response>
137
+ skip: () => void
138
+ abort: (response: Response) => void
139
+ }
140
+ // Middleware hooks
141
+ export declare interface MiddlewareHooks<TContext = object> {
142
+ beforeExecution?: (context: MiddlewareExecutionContext<TContext>) => Promise<void> | void
143
+ afterExecution?: (context: MiddlewareExecutionContext<TContext>, result: any) => Promise<void> | void
144
+ onError?: (context: MiddlewareExecutionContext<TContext>, error: Error) => Promise<Response> | Response
145
+ }
146
+ // Middleware metadata
147
+ export declare interface MiddlewareMetadata {
148
+ name: string
149
+ version?: string
150
+ description?: string
151
+ dependencies?: string[]
152
+ tags?: string[]
153
+ priority?: number
154
+ }
155
+ // Decorated middleware
156
+ export declare interface DecoratedMiddleware<TInput = any, TOutput = TInput, TContext = object, TNext = any> extends TypedMiddleware<TInput, TOutput, TContext, TNext> {
157
+ metadata: MiddlewareMetadata
158
+ }
159
+ // Middleware registry
160
+ export declare interface MiddlewareRegistry {
161
+ register: <T extends TypedMiddleware<any, any, any, any>>(
162
+ name: string,
163
+ middleware: T,
164
+ metadata?: Partial<MiddlewareMetadata>
165
+ ) => void
166
+ get: <T extends TypedMiddleware<any, any, any, any>>(name: string) => T | undefined
167
+ list: () => Array<{ name: string, middleware: TypedMiddleware<any, any, any, any>, metadata: MiddlewareMetadata }>
168
+ resolve: (dependencies: string[]) => TypedMiddleware<any, any, any, any>[]
169
+ }
170
+ // Middleware performance tracking
171
+ export declare interface MiddlewarePerformance {
172
+ name: string
173
+ executionTime: number
174
+ memoryUsage: number
175
+ callCount: number
176
+ errorCount: number
177
+ }
178
+ // Middleware context augmentation
179
+ export type AugmentContext<TBase, TAddition> = TBase & TAddition
180
+ // Request augmentation through middleware
181
+ export type AugmentRequest<TRequest, TAugmentation> = TRequest & TAugmentation
182
+ // Middleware chain type inference
183
+ export type MiddlewareChain<T extends readonly any[]> = T extends readonly [
184
+ infer First,
185
+ ...infer Rest,
186
+ ]
187
+ ? First extends TypedMiddleware<infer Input, infer Output, infer Context, any>
188
+ ? Rest extends readonly []
189
+ ? TypedMiddleware<Input, Output, Context, any>
190
+ : Rest extends readonly TypedMiddleware<Output, any, any, any>[]
191
+ ? MiddlewareChain<Rest> extends TypedMiddleware<Output, infer FinalOutput, infer RestContext, any>
192
+ ? TypedMiddleware<Input, FinalOutput, Context & RestContext, any>
193
+ : never
194
+ : never
195
+ : never
196
+ : never
197
+ // Middleware composition types
198
+ export type ComposeMiddleware<TFirst extends TypedMiddleware<any, any, any, any>, TSecond extends TypedMiddleware<any, any, any, any>> = TFirst extends TypedMiddleware<infer Input1, infer Output1, infer Context1, any>
199
+ ? TSecond extends TypedMiddleware<Output1, infer Output2, infer Context2, any>
200
+ ? TypedMiddleware<Input1, Output2, Context1 & Context2, any>
201
+ : never
202
+ : never
203
+ export type AuthMiddleware<TUser = any> = TypedMiddleware<
204
+ Request,
205
+ Request & AuthenticatedRequest<TUser>,
206
+ { auth: { user: TUser } },
207
+ any
208
+ >
209
+ export type AuthzMiddleware<TPermissions extends string = string> = TypedMiddleware<
210
+ Request & AuthenticatedRequest,
211
+ Request & AuthenticatedRequest & AuthorizedRequest<TPermissions>,
212
+ { authz: { permissions: TPermissions[] } },
213
+ any
214
+ >
215
+ export type ValidationMiddleware<TParams = any, TQuery = any, TBody = any> = TypedMiddleware<
216
+ Request,
217
+ Request & ValidatedRequest<TParams, TQuery, TBody>,
218
+ { validation: { params: TParams, query: TQuery, body: TBody } },
219
+ any
220
+ >
221
+ export type RateLimitMiddleware = TypedMiddleware<
222
+ Request,
223
+ Request & RateLimitedRequest,
224
+ { rateLimit: RateLimitedRequest['rateLimit'] },
225
+ any
226
+ >
227
+ export type CacheMiddleware = TypedMiddleware<
228
+ Request,
229
+ Request & CachedRequest,
230
+ { cache: CachedRequest['cache'] },
231
+ any
232
+ >
233
+ export type LoggingMiddleware = TypedMiddleware<
234
+ Request,
235
+ Request & LoggedRequest,
236
+ { logging: { requestId: string, logger: LoggedRequest['logger'] } },
237
+ any
238
+ >
239
+ export type CORSMiddleware = TypedMiddleware<
240
+ Request,
241
+ Request & CORSRequest,
242
+ { cors: CORSRequest['cors'] },
243
+ any
244
+ >
245
+ export type FileUploadMiddleware<TFiles extends Record<string, any> = Record<string, File>> = TypedMiddleware<
246
+ Request,
247
+ Request & FileUploadRequest<TFiles>,
248
+ { upload: { files: TFiles } },
249
+ any
250
+ >
251
+ export type SessionMiddleware<TSession = any> = TypedMiddleware<
252
+ Request,
253
+ Request & SessionRequest<TSession>,
254
+ { session: SessionRequest<TSession>['session'] },
255
+ any
256
+ >
257
+ // Conditional middleware types
258
+ export type ConditionalMiddleware<_TCondition extends (req: any) => boolean, TMiddleware extends TypedMiddleware<any, any, any, any>> = TypedMiddleware<
259
+ Parameters<TMiddleware>[0],
260
+ TMiddleware extends TypedMiddleware<any, infer Output, any, any> ? Output : never,
261
+ TMiddleware extends TypedMiddleware<any, any, infer Context, any> ? Context : object,
262
+ any
263
+ >
264
+ export type ErrorMiddleware = TypedMiddleware<
265
+ Request & { error: Error },
266
+ Response,
267
+ { error: { handled: boolean } },
268
+ any
269
+ >
270
+ // Middleware compatibility checking
271
+ export type MiddlewareCompatible<TFirst extends TypedMiddleware<any, any, any, any>, TSecond extends TypedMiddleware<any, any, any, any>> = MiddlewareConstraint<TFirst>['output'] extends MiddlewareConstraint<TSecond>['input']
272
+ ? true
273
+ : false
274
+ // Route-specific middleware types
275
+ export type RouteMiddleware<TPath extends string, TQuery extends Record<string, any> = object, TBody = unknown, TContext = object> = TypedMiddleware<
276
+ TypedRequest<TPath, TQuery, TBody, TContext>,
277
+ TypedRequest<TPath, TQuery, TBody, TContext>,
278
+ TContext,
279
+ RouteHandler<TPath, TQuery, TBody, TContext>
280
+ >
281
+ // Async middleware types
282
+ export type AsyncMiddleware<TInput = any, TOutput = TInput, TContext = object, TNext = any> = TypedMiddleware<TInput, Promise<TOutput>, TContext, TNext>
283
+ // Middleware composition utilities
284
+ export type Compose<T extends readonly TypedMiddleware<any, any, any, any>[]> = T extends readonly [infer First, ...infer Rest]
285
+ ? First extends TypedMiddleware<infer Input, infer Output, infer Context, any>
286
+ ? Rest extends readonly TypedMiddleware<any, any, any, any>[]
287
+ ? Rest extends readonly []
288
+ ? TypedMiddleware<Input, Output, Context, any>
289
+ : Compose<Rest> extends TypedMiddleware<Output, infer FinalOutput, infer RestContext, any>
290
+ ? TypedMiddleware<Input, FinalOutput, Context & RestContext, any>
291
+ : never
292
+ : never
293
+ : never
294
+ : TypedMiddleware<any, any, object, any>
295
+ // Middleware type guards
296
+ export type IsMiddleware<T> = T extends TypedMiddleware<any, any, any, any> ? true : false
297
+ export type IsCompatibleMiddleware<T1, T2> = T1 extends TypedMiddleware<any, infer Output1, any, any>
298
+ ? T2 extends TypedMiddleware<Output1, any, any, any>
299
+ ? true
300
+ : false
301
+ : false
302
+ // Middleware transformation types
303
+ export type TransformMiddleware<TMiddleware extends TypedMiddleware<any, any, any, any>, TNewInput, TNewOutput = TNewInput> = TMiddleware extends TypedMiddleware<any, any, infer Context, any>
304
+ ? TypedMiddleware<TNewInput, TNewOutput, Context, any>
305
+ : never
306
+ // Route-aware middleware
307
+ export type RouteAwareMiddleware<TRoutes extends Record<string, any> = object> = {
308
+ [K in keyof TRoutes]: TRoutes[K] extends RouteHandler<infer Path, infer Query, infer Body, infer Context>
309
+ ? RouteMiddleware<Path, Query, Body, Context>
310
+ : never
311
+ }
312
+ export type PerformanceTrackingMiddleware<T extends TypedMiddleware<any, any, any, any>> = T & {
313
+ getPerformanceMetrics: () => MiddlewarePerformance
314
+ resetMetrics: () => void
315
+ }
@@ -0,0 +1,373 @@
1
+ import type { AuthenticatedRequest, AuthorizedRequest, CachedRequest, CORSRequest, FileUploadRequest, LoggedRequest, RateLimitedRequest, SessionRequest, TypedMiddleware, ValidatedRequest, } from './middleware-types';
2
+ import type { ExtractQueryParams, ExtractTypedParams, TypedRequest, } from './route-inference';
3
+ // Base augmentation interface
4
+ export declare interface RequestAugmentation {
5
+
6
+ }
7
+ export declare interface ResponseAugmentation {
8
+
9
+ }
10
+ // Enhanced response with middleware augmentations
11
+ export declare interface EnhancedResponse<TAugmentations = object> extends Response {
12
+ cached?: TAugmentations extends { cache: any }
13
+ ? boolean
14
+ : never
15
+ rateLimited?: TAugmentations extends { rateLimit: any }
16
+ ? boolean
17
+ : never
18
+ requestId?: TAugmentations extends { logging: any }
19
+ ? string
20
+ : never
21
+ executionTime?: TAugmentations extends { logging: any }
22
+ ? number
23
+ : never
24
+ }
25
+ // Augmentation builder
26
+ export declare interface AugmentationBuilder<TBase = Request> {
27
+ withAuth: <TUser>(
28
+ middleware: TypedMiddleware<any, any, { auth: { user: TUser } }, any>
29
+ ) => AugmentationBuilder<TBase & AuthenticatedRequest<TUser>>
30
+ withValidation: <TParams, TQuery, TBody>(
31
+ middleware: TypedMiddleware<any, any, { validation: { params: TParams, query: TQuery, body: TBody } }, any>
32
+ ) => AugmentationBuilder<TBase & ValidatedRequest<TParams, TQuery, TBody>>
33
+ withRateLimit: (
34
+ middleware: TypedMiddleware<any, any, { rateLimit: RateLimitedRequest['rateLimit'] }, any>
35
+ ) => AugmentationBuilder<TBase & RateLimitedRequest>
36
+ withCache: (
37
+ middleware: TypedMiddleware<any, any, { cache: CachedRequest['cache'] }, any>
38
+ ) => AugmentationBuilder<TBase & CachedRequest>
39
+ withLogging: (
40
+ middleware: TypedMiddleware<any, any, { logging: { requestId: string, logger: LoggedRequest['logger'] } }, any>
41
+ ) => AugmentationBuilder<TBase & LoggedRequest>
42
+ withCORS: (
43
+ middleware: TypedMiddleware<any, any, { cors: CORSRequest['cors'] }, any>
44
+ ) => AugmentationBuilder<TBase & CORSRequest>
45
+ withFileUpload: <TFiles extends Record<string, any>>(
46
+ middleware: TypedMiddleware<any, any, { upload: { files: TFiles } }, any>
47
+ ) => AugmentationBuilder<TBase & FileUploadRequest<TFiles>>
48
+ withSession: <TSession>(
49
+ middleware: TypedMiddleware<any, any, { session: SessionRequest<TSession>['session'] }, any>
50
+ ) => AugmentationBuilder<TBase & SessionRequest<TSession>>
51
+ build: () => TBase
52
+ }
53
+ // Route with augmented types
54
+ export declare interface AugmentedRoute<TPath extends string, TQuery extends Record<string, any> = object, TBody = unknown, TContext = object, TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[] = []> {
55
+ method: string
56
+ path: TPath
57
+ handler: AugmentedRouteHandler<TPath, TQuery, TBody, TContext, TMiddlewares>
58
+ middleware: TMiddlewares
59
+ augmentedRequest: EnhancedRequest<TPath, TQuery, TBody, TContext, AccumulateContext<TMiddlewares>>
60
+ augmentedResponse: EnhancedResponse<AccumulateContext<TMiddlewares>>
61
+ }
62
+ // Type-safe route builder with augmentation
63
+ export declare interface AugmentedRouteBuilder<TContext = object> {
64
+ get: <
65
+ TPath extends string,
66
+ TQuery extends Record<string, any> = object,
67
+ TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[] = [],
68
+ >(
69
+ path: TPath,
70
+ middleware: TMiddlewares,
71
+ handler: AugmentedRouteHandler<TPath, TQuery, never, TContext, TMiddlewares>
72
+ ) => AugmentedRoute<TPath, TQuery, never, TContext, TMiddlewares>
73
+ post: <
74
+ TPath extends string,
75
+ TQuery extends Record<string, any> = object,
76
+ TBody = unknown,
77
+ TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[] = [],
78
+ >(
79
+ path: TPath,
80
+ middleware: TMiddlewares,
81
+ handler: AugmentedRouteHandler<TPath, TQuery, TBody, TContext, TMiddlewares>
82
+ ) => AugmentedRoute<TPath, TQuery, TBody, TContext, TMiddlewares>
83
+ put: <
84
+ TPath extends string,
85
+ TQuery extends Record<string, any> = object,
86
+ TBody = unknown,
87
+ TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[] = [],
88
+ >(
89
+ path: TPath,
90
+ middleware: TMiddlewares,
91
+ handler: AugmentedRouteHandler<TPath, TQuery, TBody, TContext, TMiddlewares>
92
+ ) => AugmentedRoute<TPath, TQuery, TBody, TContext, TMiddlewares>
93
+ patch: <
94
+ TPath extends string,
95
+ TQuery extends Record<string, any> = object,
96
+ TBody = unknown,
97
+ TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[] = [],
98
+ >(
99
+ path: TPath,
100
+ middleware: TMiddlewares,
101
+ handler: AugmentedRouteHandler<TPath, TQuery, TBody, TContext, TMiddlewares>
102
+ ) => AugmentedRoute<TPath, TQuery, TBody, TContext, TMiddlewares>
103
+ delete: <
104
+ TPath extends string,
105
+ TQuery extends Record<string, any> = object,
106
+ TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[] = [],
107
+ >(
108
+ path: TPath,
109
+ middleware: TMiddlewares,
110
+ handler: AugmentedRouteHandler<TPath, TQuery, never, TContext, TMiddlewares>
111
+ ) => AugmentedRoute<TPath, TQuery, never, TContext, TMiddlewares>
112
+ }
113
+ // Runtime augmentation helpers
114
+ export declare interface RuntimeAugmentation {
115
+ augmentRequest: <T>(request: Request, augmentation: T) => Request & T
116
+ extractAugmentation: <T>(request: Request & T) => T
117
+ hasAugmentation: <T>(request: Request, key: keyof T) => boolean
118
+ getAugmentation: <T, K extends keyof T>(request: Request & T, key: K) => T[K]
119
+ }
120
+ // Augmentation metadata
121
+ export declare interface AugmentationMetadata {
122
+ name: string
123
+ version?: string
124
+ description?: string
125
+ dependencies?: string[]
126
+ provides: string[]
127
+ requires?: string[]
128
+ }
129
+ // Augmentation registry
130
+ export declare interface AugmentationRegistry {
131
+ register: (
132
+ name: string,
133
+ middleware: TypedMiddleware<any, any, any, any>,
134
+ metadata: AugmentationMetadata
135
+ ) => void
136
+ get: (name: string) => {
137
+ middleware: TypedMiddleware<any, any, any, any>
138
+ metadata: AugmentationMetadata
139
+ } | undefined
140
+ resolve: (requirements: string[]) => TypedMiddleware<any, any, any, any>[]
141
+ validate: (middlewares: TypedMiddleware<any, any, any, any>[]) => {
142
+ valid: boolean
143
+ errors: string[]
144
+ warnings: string[]
145
+ }
146
+ }
147
+ // Middleware augmentation extraction
148
+ export type ExtractMiddlewareAugmentation<T> = T extends TypedMiddleware<infer Input, infer Output, infer Context, any>
149
+ ? {
150
+ input: Input
151
+ output: Output
152
+ context: Context
153
+ augmentation: Output extends Input & infer Aug ? Aug : object
154
+ }
155
+ : never
156
+ // Request augmentation through middleware chain
157
+ export type AugmentRequestThroughChain<TRequest, TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[]> = TMiddlewares extends readonly [infer First, ...infer Rest]
158
+ ? First extends TypedMiddleware<TRequest, infer Output, any, any>
159
+ ? Rest extends readonly TypedMiddleware<any, any, any, any>[]
160
+ ? AugmentRequestThroughChain<Output, Rest>
161
+ : Output
162
+ : TRequest
163
+ : TRequest
164
+ // Context accumulation through middleware chain
165
+ export type AccumulateContext<TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[]> = TMiddlewares extends readonly [infer First, ...infer Rest]
166
+ ? First extends TypedMiddleware<any, any, infer Context, any>
167
+ ? Rest extends readonly TypedMiddleware<any, any, any, any>[]
168
+ ? Context & AccumulateContext<Rest>
169
+ : Context
170
+ : object
171
+ : object
172
+ // Enhanced request with middleware augmentations
173
+ export type EnhancedRequest<TPath extends string = string, TQuery extends Record<string, any> = object, TBody = unknown, TContext = object, TAugmentations = object> = TypedRequest<TPath, TQuery, TBody, TContext> & {
174
+ // Core request properties
175
+ params: ExtractTypedParams<TPath>
176
+ query: ExtractQueryParams<TQuery>
177
+ body: TBody
178
+ context: TContext & TAugmentations
179
+
180
+ // Middleware augmentations (conditionally added)
181
+ user?: TAugmentations extends { auth: any }
182
+ ? TAugmentations['auth']['user']
183
+ : never
184
+
185
+ isAuthenticated?: TAugmentations extends { auth: any }
186
+ ? boolean
187
+ : never
188
+
189
+ permissions?: TAugmentations extends { authz: any }
190
+ ? TAugmentations['authz']['permissions']
191
+ : never
192
+
193
+ hasPermission?: TAugmentations extends { authz: any }
194
+ ? (permission: string) => boolean
195
+ : never
196
+
197
+ validatedParams?: TAugmentations extends { validation: any }
198
+ ? TAugmentations['validation']['params']
199
+ : never
200
+
201
+ validatedQuery?: TAugmentations extends { validation: any }
202
+ ? TAugmentations['validation']['query']
203
+ : never
204
+
205
+ validatedBody?: TAugmentations extends { validation: any }
206
+ ? TAugmentations['validation']['body']
207
+ : never
208
+
209
+ rateLimit?: TAugmentations extends { rateLimit: any }
210
+ ? TAugmentations['rateLimit']
211
+ : never
212
+
213
+ cache?: TAugmentations extends { cache: any }
214
+ ? TAugmentations['cache']
215
+ : never
216
+
217
+ requestId?: TAugmentations extends { logging: any }
218
+ ? string
219
+ : never
220
+
221
+ logger?: TAugmentations extends { logging: any }
222
+ ? TAugmentations['logging']['logger']
223
+ : never
224
+
225
+ cors?: TAugmentations extends { cors: any }
226
+ ? TAugmentations['cors']
227
+ : never
228
+
229
+ files?: TAugmentations extends { upload: any }
230
+ ? TAugmentations['upload']['files']
231
+ : never
232
+
233
+ session?: TAugmentations extends { session: any }
234
+ ? TAugmentations['session']
235
+ : never
236
+ }
237
+ // Middleware-aware route handler
238
+ export type AugmentedRouteHandler<TPath extends string, TQuery extends Record<string, any> = object, TBody = unknown, TContext = object, TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[] = []> = (
239
+ request: EnhancedRequest<
240
+ TPath,
241
+ TQuery,
242
+ TBody,
243
+ TContext,
244
+ AccumulateContext<TMiddlewares>
245
+ >
246
+ ) => Promise<EnhancedResponse<AccumulateContext<TMiddlewares>>> | EnhancedResponse<AccumulateContext<TMiddlewares>>
247
+ // Type-safe middleware application
248
+ export type ApplyMiddleware<TRequest, TMiddleware extends TypedMiddleware<any, any, any, any>> = TMiddleware extends TypedMiddleware<TRequest, infer Output, infer Context, any>
249
+ ? {
250
+ request: Output
251
+ context: Context
252
+ }
253
+ : never
254
+ // Sequential middleware application
255
+ export type ApplyMiddlewareSequence<TRequest, TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[]> = TMiddlewares extends readonly [infer First, ...infer Rest]
256
+ ? First extends TypedMiddleware<TRequest, infer Output, infer Context, any>
257
+ ? Rest extends readonly TypedMiddleware<any, any, any, any>[]
258
+ ? ApplyMiddlewareSequence<Output, Rest> extends {
259
+ request: infer FinalRequest
260
+ context: infer RestContext
261
+ }
262
+ ? {
263
+ request: FinalRequest
264
+ context: Context & RestContext
265
+ }
266
+ : {
267
+ request: Output
268
+ context: Context
269
+ }
270
+ : {
271
+ request: Output
272
+ context: Context
273
+ }
274
+ : {
275
+ request: TRequest
276
+ context: object
277
+ }
278
+ : {
279
+ request: TRequest
280
+ context: object
281
+ }
282
+ // Conditional augmentation based on middleware presence
283
+ export type ConditionalAugmentation<TMiddlewares extends readonly TypedMiddleware<any, any, any, any>[], TAugmentation> = TMiddlewares extends readonly []
284
+ ? object
285
+ : TAugmentation
286
+ // Authentication augmentation
287
+ export type AuthAugmentation<TUser = any> = ConditionalAugmentation<
288
+ [TypedMiddleware<any, any, { auth: { user: TUser } }, any>],
289
+ AuthenticatedRequest<TUser>
290
+ >
291
+ // Authorization augmentation
292
+ export type AuthzAugmentation<TPermissions extends string = string> = ConditionalAugmentation<
293
+ [TypedMiddleware<any, any, { authz: { permissions: TPermissions[] } }, any>],
294
+ AuthorizedRequest<TPermissions>
295
+ >
296
+ // Validation augmentation
297
+ export type ValidationAugmentation<TParams = any, TQuery = any, TBody = any> = ConditionalAugmentation<
298
+ [TypedMiddleware<any, any, { validation: { params: TParams, query: TQuery, body: TBody } }, any>],
299
+ ValidatedRequest<TParams, TQuery, TBody>
300
+ >
301
+ // Rate limiting augmentation
302
+ export type RateLimitAugmentation = ConditionalAugmentation<
303
+ [TypedMiddleware<any, any, { rateLimit: RateLimitedRequest['rateLimit'] }, any>],
304
+ RateLimitedRequest
305
+ >
306
+ // Caching augmentation
307
+ export type CacheAugmentation = ConditionalAugmentation<
308
+ [TypedMiddleware<any, any, { cache: CachedRequest['cache'] }, any>],
309
+ CachedRequest
310
+ >
311
+ // Logging augmentation
312
+ export type LoggingAugmentation = ConditionalAugmentation<
313
+ [TypedMiddleware<any, any, { logging: { requestId: string, logger: LoggedRequest['logger'] } }, any>],
314
+ LoggedRequest
315
+ >
316
+ // CORS augmentation
317
+ export type CORSAugmentation = ConditionalAugmentation<
318
+ [TypedMiddleware<any, any, { cors: CORSRequest['cors'] }, any>],
319
+ CORSRequest
320
+ >
321
+ // File upload augmentation
322
+ export type FileUploadAugmentation<TFiles extends Record<string, any> = Record<string, File>> = ConditionalAugmentation<
323
+ [TypedMiddleware<any, any, { upload: { files: TFiles } }, any>],
324
+ FileUploadRequest<TFiles>
325
+ >
326
+ // Session augmentation
327
+ export type SessionAugmentation<TSession = any> = ConditionalAugmentation<
328
+ [TypedMiddleware<any, any, { session: SessionRequest<TSession>['session'] }, any>],
329
+ SessionRequest<TSession>
330
+ >
331
+ // Combined augmentations
332
+ export type CombineAugmentations<T extends Record<string, any>[]> = T extends [
333
+ infer First,
334
+ ...infer Rest,
335
+ ]
336
+ ? First extends Record<string, any>
337
+ ? Rest extends Record<string, any>[]
338
+ ? First & CombineAugmentations<Rest>
339
+ : First
340
+ : object
341
+ : object
342
+ // Middleware type detection
343
+ export type HasAuthMiddleware<T extends readonly TypedMiddleware<any, any, any, any>[]> = T extends readonly [infer First, ...infer Rest]
344
+ ? First extends TypedMiddleware<any, any, { auth: any }, any>
345
+ ? true
346
+ : Rest extends readonly TypedMiddleware<any, any, any, any>[]
347
+ ? HasAuthMiddleware<Rest>
348
+ : false
349
+ : false
350
+ export type HasValidationMiddleware<T extends readonly TypedMiddleware<any, any, any, any>[]> = T extends readonly [infer First, ...infer Rest]
351
+ ? First extends TypedMiddleware<any, any, { validation: any }, any>
352
+ ? true
353
+ : Rest extends readonly TypedMiddleware<any, any, any, any>[]
354
+ ? HasValidationMiddleware<Rest>
355
+ : false
356
+ : false
357
+ export type HasRateLimitMiddleware<T extends readonly TypedMiddleware<any, any, any, any>[]> = T extends readonly [infer First, ...infer Rest]
358
+ ? First extends TypedMiddleware<any, any, { rateLimit: any }, any>
359
+ ? true
360
+ : Rest extends readonly TypedMiddleware<any, any, any, any>[]
361
+ ? HasRateLimitMiddleware<Rest>
362
+ : false
363
+ : false
364
+ // Augmentation validation
365
+ export type ValidateAugmentation<TRequest, TExpectedAugmentation> = TRequest extends TExpectedAugmentation
366
+ ? true
367
+ : false
368
+ // Augmentation compatibility checking
369
+ export type AugmentationCompatible<TMiddleware1 extends TypedMiddleware<any, any, any, any>, TMiddleware2 extends TypedMiddleware<any, any, any, any>> = TMiddleware1 extends TypedMiddleware<any, infer Output1, any, any>
370
+ ? TMiddleware2 extends TypedMiddleware<Output1, any, any, any>
371
+ ? true
372
+ : false
373
+ : false