@stacksjs/bun-router 0.0.5 → 0.0.6
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/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/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 -1
- package/dist/cli.js +1 -1
- 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 +2 -0
- package/dist/index.js +319 -205
- 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 +245 -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 +113 -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 +276 -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 +1776 -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 +3 -2
- 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 +678 -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 +219 -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 +264 -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 +612 -0
- package/src/response/response-factory.ts +588 -0
- package/src/router/api-routes.ts +243 -0
- package/src/router/file-based-routing.ts +670 -0
- package/src/router/file-streaming.ts +372 -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 +185 -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 +212 -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 +1508 -0
- package/src/router/server.ts +406 -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 +2049 -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
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IoC Container for Dependency Resolution
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive dependency injection container with automatic resolution,
|
|
5
|
+
* lifecycle management, and contextual binding support
|
|
6
|
+
*/
|
|
7
|
+
declare global {
|
|
8
|
+
namespace Reflect {
|
|
9
|
+
function getMetadata(_metadataKey: any, _target: any, _propertyKey?: string | symbol): any;
|
|
10
|
+
function defineMetadata(_metadataKey: any, _metadataValue: any, _target: any, _propertyKey?: string | symbol): void;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export type BindingScope = 'singleton' | 'transient' | 'scoped' | 'request';
|
|
14
|
+
export type Token = string | symbol | ((...args: any[]) => any) | (new (...args: any[]) => any) | Function;
|
|
15
|
+
export interface BindingMetadata {
|
|
16
|
+
scope: BindingScope;
|
|
17
|
+
tags?: string[];
|
|
18
|
+
when?: (context: ResolutionContext) => boolean;
|
|
19
|
+
factory?: (..._args: any[]) => any;
|
|
20
|
+
dependencies?: Token[];
|
|
21
|
+
lazy?: boolean;
|
|
22
|
+
decorators?: ((..._args: any[]) => any)[];
|
|
23
|
+
}
|
|
24
|
+
export interface Binding<T = any> {
|
|
25
|
+
token: Token;
|
|
26
|
+
implementation?: new (...args: any[]) => T;
|
|
27
|
+
instance?: T;
|
|
28
|
+
factory?: (...args: any[]) => T;
|
|
29
|
+
value?: T;
|
|
30
|
+
metadata: BindingMetadata;
|
|
31
|
+
}
|
|
32
|
+
export interface ResolutionContext {
|
|
33
|
+
container: Container;
|
|
34
|
+
token: Token;
|
|
35
|
+
parent?: ResolutionContext;
|
|
36
|
+
environment?: string;
|
|
37
|
+
requestId?: string;
|
|
38
|
+
depth: number;
|
|
39
|
+
resolving: Set<Token>;
|
|
40
|
+
}
|
|
41
|
+
export interface ContainerOptions {
|
|
42
|
+
autoRegister?: boolean;
|
|
43
|
+
strictMode?: boolean;
|
|
44
|
+
maxDepth?: number;
|
|
45
|
+
enableDecorators?: boolean;
|
|
46
|
+
enableInterception?: boolean;
|
|
47
|
+
defaultScope?: BindingScope;
|
|
48
|
+
}
|
|
49
|
+
export declare const INJECTABLE_METADATA_KEY: unique symbol;
|
|
50
|
+
export declare const INJECT_METADATA_KEY: unique symbol;
|
|
51
|
+
export declare const OPTIONAL_METADATA_KEY: unique symbol;
|
|
52
|
+
export declare const TAGGED_METADATA_KEY: unique symbol;
|
|
53
|
+
export interface InjectableMetadata {
|
|
54
|
+
token?: string | symbol;
|
|
55
|
+
scope?: BindingScope;
|
|
56
|
+
tags?: string[];
|
|
57
|
+
}
|
|
58
|
+
export interface InjectMetadata {
|
|
59
|
+
token: Token;
|
|
60
|
+
optional?: boolean;
|
|
61
|
+
tags?: string[];
|
|
62
|
+
when?: (context: ResolutionContext) => boolean;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Main IoC Container implementation
|
|
66
|
+
*/
|
|
67
|
+
export declare class Container {
|
|
68
|
+
private bindings;
|
|
69
|
+
private instances;
|
|
70
|
+
private scopedInstances;
|
|
71
|
+
private interceptors;
|
|
72
|
+
private parent?;
|
|
73
|
+
private children;
|
|
74
|
+
private options;
|
|
75
|
+
constructor(options?: ContainerOptions);
|
|
76
|
+
/**
|
|
77
|
+
* Bind a token to an implementation
|
|
78
|
+
*/
|
|
79
|
+
bind<T>(token: Token): BindingBuilder<T>;
|
|
80
|
+
/**
|
|
81
|
+
* Register a binding
|
|
82
|
+
*/
|
|
83
|
+
register<T>(binding: Binding<T>): this;
|
|
84
|
+
/**
|
|
85
|
+
* Bind a singleton
|
|
86
|
+
*/
|
|
87
|
+
singleton<T>(token: Token, implementation: new (...args: any[]) => T): Container;
|
|
88
|
+
/**
|
|
89
|
+
* Bind a transient
|
|
90
|
+
*/
|
|
91
|
+
transient<T>(token: Token, implementation: new (...args: any[]) => T): Container;
|
|
92
|
+
/**
|
|
93
|
+
* Bind a value
|
|
94
|
+
*/
|
|
95
|
+
value<T>(token: Token, value: T): Container;
|
|
96
|
+
/**
|
|
97
|
+
* Bind a factory
|
|
98
|
+
*/
|
|
99
|
+
factory<T>(token: Token, factory: (...args: any[]) => T): Container;
|
|
100
|
+
/**
|
|
101
|
+
* Resolve a dependency
|
|
102
|
+
*/
|
|
103
|
+
resolve<T>(token: Token, context?: Partial<ResolutionContext>): T;
|
|
104
|
+
/**
|
|
105
|
+
* Resolve all instances of a token (useful for arrays of services)
|
|
106
|
+
*/
|
|
107
|
+
resolveAll<T>(token: Token): T[];
|
|
108
|
+
/**
|
|
109
|
+
* Resolve with tags
|
|
110
|
+
*/
|
|
111
|
+
resolveTagged<T>(tag: string): T[];
|
|
112
|
+
/**
|
|
113
|
+
* Get all bindings with a specific tag
|
|
114
|
+
*/
|
|
115
|
+
getTaggedBindings<T>(tag: string): Binding<T>[];
|
|
116
|
+
/**
|
|
117
|
+
* Add interceptor for a service
|
|
118
|
+
*/
|
|
119
|
+
addInterceptor<T>(token: Token, interceptor: (service: T) => T): void;
|
|
120
|
+
/**
|
|
121
|
+
* Register controller (basic implementation for compatibility)
|
|
122
|
+
*/
|
|
123
|
+
registerController(controller: new (...args: any[]) => any): void;
|
|
124
|
+
/**
|
|
125
|
+
* Get controller instance
|
|
126
|
+
*/
|
|
127
|
+
getController<T>(controller: new (...args: any[]) => T): T;
|
|
128
|
+
/**
|
|
129
|
+
* Check if a token is bound
|
|
130
|
+
*/
|
|
131
|
+
isBound(token: Token): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Unbind a token
|
|
134
|
+
*/
|
|
135
|
+
unbind(token: Token): this;
|
|
136
|
+
/**
|
|
137
|
+
* Create a child container
|
|
138
|
+
*/
|
|
139
|
+
createChild(options?: ContainerOptions): Container;
|
|
140
|
+
/**
|
|
141
|
+
* Create a scoped container
|
|
142
|
+
*/
|
|
143
|
+
createScope(scopeId: string): Container;
|
|
144
|
+
/**
|
|
145
|
+
* Get all bindings
|
|
146
|
+
*/
|
|
147
|
+
getBindings(): Map<Token, Binding>;
|
|
148
|
+
/**
|
|
149
|
+
* Clear all bindings and instances
|
|
150
|
+
*/
|
|
151
|
+
clear(): this;
|
|
152
|
+
/**
|
|
153
|
+
* Add interceptor
|
|
154
|
+
*/
|
|
155
|
+
intercept<T>(token: string | symbol | ((..._args: any[]) => any), interceptor: (instance: T, context: ResolutionContext) => T): this;
|
|
156
|
+
/**
|
|
157
|
+
* Internal resolution logic
|
|
158
|
+
*/
|
|
159
|
+
private resolveInternal;
|
|
160
|
+
/**
|
|
161
|
+
* Create instance from binding
|
|
162
|
+
*/
|
|
163
|
+
protected createInstance<T>(binding: Binding<T>, context: ResolutionContext): T;
|
|
164
|
+
/**
|
|
165
|
+
* Create new instance from binding
|
|
166
|
+
*/
|
|
167
|
+
private createNewInstance;
|
|
168
|
+
/**
|
|
169
|
+
* Create instance from constructor
|
|
170
|
+
*/
|
|
171
|
+
private createInstanceFromConstructor;
|
|
172
|
+
/**
|
|
173
|
+
* Get constructor dependencies using reflection
|
|
174
|
+
*/
|
|
175
|
+
private getConstructorDependencies;
|
|
176
|
+
/**
|
|
177
|
+
* Parse constructor dependencies from function string
|
|
178
|
+
*/
|
|
179
|
+
private parseConstructorDependencies;
|
|
180
|
+
/**
|
|
181
|
+
* Resolve array of dependencies
|
|
182
|
+
*/
|
|
183
|
+
private resolveDependencies;
|
|
184
|
+
/**
|
|
185
|
+
* Auto-register and resolve
|
|
186
|
+
*/
|
|
187
|
+
private autoRegisterAndResolve;
|
|
188
|
+
/**
|
|
189
|
+
* Apply decorators to instance
|
|
190
|
+
*/
|
|
191
|
+
private applyDecorators;
|
|
192
|
+
/**
|
|
193
|
+
* Check if binding has tag
|
|
194
|
+
*/
|
|
195
|
+
private hasTag;
|
|
196
|
+
/**
|
|
197
|
+
* Convert token to string for error messages
|
|
198
|
+
*/
|
|
199
|
+
private tokenToString;
|
|
200
|
+
/**
|
|
201
|
+
* Generate unique request ID
|
|
202
|
+
*/
|
|
203
|
+
private generateRequestId;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Fluent binding builder
|
|
207
|
+
*/
|
|
208
|
+
export declare class BindingBuilder<T> {
|
|
209
|
+
private container;
|
|
210
|
+
private binding;
|
|
211
|
+
constructor(container: Container, token: Token);
|
|
212
|
+
/**
|
|
213
|
+
* Bind to implementation
|
|
214
|
+
*/
|
|
215
|
+
to(implementation: new (...args: any[]) => T): this;
|
|
216
|
+
/**
|
|
217
|
+
* Bind to value
|
|
218
|
+
*/
|
|
219
|
+
toValue(value: T): this;
|
|
220
|
+
/**
|
|
221
|
+
* Bind to factory
|
|
222
|
+
*/
|
|
223
|
+
toFactory(factory: (...args: any[]) => T): this;
|
|
224
|
+
/**
|
|
225
|
+
* Bind to existing instance
|
|
226
|
+
*/
|
|
227
|
+
toInstance(instance: T): this;
|
|
228
|
+
/**
|
|
229
|
+
* Set singleton scope
|
|
230
|
+
*/
|
|
231
|
+
inSingletonScope(): this;
|
|
232
|
+
/**
|
|
233
|
+
* Set transient scope
|
|
234
|
+
*/
|
|
235
|
+
inTransientScope(): this;
|
|
236
|
+
/**
|
|
237
|
+
* Set scoped scope
|
|
238
|
+
*/
|
|
239
|
+
inScopedScope(): this;
|
|
240
|
+
/**
|
|
241
|
+
* Set request scope
|
|
242
|
+
*/
|
|
243
|
+
inRequestScope(): this;
|
|
244
|
+
/**
|
|
245
|
+
* Add tags
|
|
246
|
+
*/
|
|
247
|
+
withTags(...tags: string[]): this;
|
|
248
|
+
/**
|
|
249
|
+
* Add contextual condition
|
|
250
|
+
*/
|
|
251
|
+
when(condition: (context: ResolutionContext) => boolean): this;
|
|
252
|
+
/**
|
|
253
|
+
* Set as lazy
|
|
254
|
+
*/
|
|
255
|
+
lazy(): this;
|
|
256
|
+
/**
|
|
257
|
+
* Build and register binding
|
|
258
|
+
*/
|
|
259
|
+
build(): Container;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Get or create global container
|
|
263
|
+
*/
|
|
264
|
+
export declare function getContainer(): Container;
|
|
265
|
+
/**
|
|
266
|
+
* Set global container
|
|
267
|
+
*/
|
|
268
|
+
export declare function setContainer(container: Container): void;
|
|
269
|
+
/**
|
|
270
|
+
* Create new container
|
|
271
|
+
*/
|
|
272
|
+
export declare function createContainer(options?: ContainerOptions): Container;
|
|
273
|
+
export { Container as DIContainer };
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contextual Binding for Different Environments
|
|
3
|
+
*
|
|
4
|
+
* Advanced contextual binding system supporting environment-specific configurations,
|
|
5
|
+
* conditional service resolution, and dynamic binding based on runtime context
|
|
6
|
+
*/
|
|
7
|
+
import type { Binding, ResolutionContext, Token } from './container';
|
|
8
|
+
import { Container } from './container';
|
|
9
|
+
export interface ContextualBinding<T = any> extends Binding<T> {
|
|
10
|
+
conditions: BindingCondition[];
|
|
11
|
+
priority: number;
|
|
12
|
+
fallback?: Binding<T>;
|
|
13
|
+
}
|
|
14
|
+
export interface BindingCondition {
|
|
15
|
+
type: 'environment' | 'custom' | 'tag' | 'parent' | 'request';
|
|
16
|
+
predicate: (context: ResolutionContext) => boolean;
|
|
17
|
+
description?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface EnvironmentConfig {
|
|
20
|
+
name: string;
|
|
21
|
+
variables: Record<string, any>;
|
|
22
|
+
services: Record<string, any>;
|
|
23
|
+
features: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface ContextualBindingBuilder<T> {
|
|
26
|
+
to: (implementation: new (...args: any[]) => T) => ContextualBindingBuilder<T>;
|
|
27
|
+
toValue: (value: T) => ContextualBindingBuilder<T>;
|
|
28
|
+
toFactory: (factory: (...args: any[]) => T) => ContextualBindingBuilder<T>;
|
|
29
|
+
when: (condition: BindingCondition) => ContextualBindingBuilder<T>;
|
|
30
|
+
whenEnvironment: (...environments: string[]) => ContextualBindingBuilder<T>;
|
|
31
|
+
whenTag: (tag: string) => ContextualBindingBuilder<T>;
|
|
32
|
+
whenParent: (parentToken: string | symbol | ((..._args: any[]) => any)) => ContextualBindingBuilder<T>;
|
|
33
|
+
whenRequest: (predicate: (context: ResolutionContext) => boolean) => ContextualBindingBuilder<T>;
|
|
34
|
+
withPriority: (priority: number) => ContextualBindingBuilder<T>;
|
|
35
|
+
withFallback: (fallback: Binding<T>) => ContextualBindingBuilder<T>;
|
|
36
|
+
build: () => Container;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Environment manager for handling different deployment contexts
|
|
40
|
+
*/
|
|
41
|
+
export declare class EnvironmentManager {
|
|
42
|
+
private environments;
|
|
43
|
+
private currentEnvironment;
|
|
44
|
+
private variables;
|
|
45
|
+
constructor(defaultEnvironment?: string);
|
|
46
|
+
/**
|
|
47
|
+
* Register an environment configuration
|
|
48
|
+
*/
|
|
49
|
+
register(config: EnvironmentConfig): this;
|
|
50
|
+
/**
|
|
51
|
+
* Set current environment
|
|
52
|
+
*/
|
|
53
|
+
setEnvironment(name: string): this;
|
|
54
|
+
/**
|
|
55
|
+
* Get current environment
|
|
56
|
+
*/
|
|
57
|
+
getCurrentEnvironment(): string;
|
|
58
|
+
/**
|
|
59
|
+
* Get environment configuration
|
|
60
|
+
*/
|
|
61
|
+
getEnvironment(name?: string): EnvironmentConfig | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Check if environment is active
|
|
64
|
+
*/
|
|
65
|
+
is(...environments: string[]): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Get environment variable
|
|
68
|
+
*/
|
|
69
|
+
get(key: string, defaultValue?: any): any;
|
|
70
|
+
/**
|
|
71
|
+
* Set environment variable
|
|
72
|
+
*/
|
|
73
|
+
set(key: string, value: any): this;
|
|
74
|
+
/**
|
|
75
|
+
* Check if feature is enabled
|
|
76
|
+
*/
|
|
77
|
+
hasFeature(feature: string): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Load environment variables
|
|
80
|
+
*/
|
|
81
|
+
private loadEnvironmentVariables;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Contextual binding builder implementation
|
|
85
|
+
*/
|
|
86
|
+
export declare class DefaultContextualBindingBuilder<T> implements ContextualBindingBuilder<T> {
|
|
87
|
+
private container;
|
|
88
|
+
private binding;
|
|
89
|
+
constructor(container: ContextualContainer, token: Token);
|
|
90
|
+
/**
|
|
91
|
+
* Add custom condition
|
|
92
|
+
*/
|
|
93
|
+
when(condition: BindingCondition): ContextualBindingBuilder<T>;
|
|
94
|
+
/**
|
|
95
|
+
* Add environment condition
|
|
96
|
+
*/
|
|
97
|
+
whenEnvironment(...environments: string[]): ContextualBindingBuilder<T>;
|
|
98
|
+
/**
|
|
99
|
+
* Add tag condition
|
|
100
|
+
*/
|
|
101
|
+
whenTag(tag: string): ContextualBindingBuilder<T>;
|
|
102
|
+
/**
|
|
103
|
+
* Add parent condition
|
|
104
|
+
*/
|
|
105
|
+
whenParent(parentToken: string | symbol | ((..._args: any[]) => any)): ContextualBindingBuilder<T>;
|
|
106
|
+
/**
|
|
107
|
+
* Add request condition
|
|
108
|
+
*/
|
|
109
|
+
whenRequest(predicate: (context: ResolutionContext) => boolean): ContextualBindingBuilder<T>;
|
|
110
|
+
/**
|
|
111
|
+
* Set priority
|
|
112
|
+
*/
|
|
113
|
+
withPriority(priority: number): ContextualBindingBuilder<T>;
|
|
114
|
+
/**
|
|
115
|
+
* Set fallback binding
|
|
116
|
+
*/
|
|
117
|
+
withFallback(fallback: Binding<T>): ContextualBindingBuilder<T>;
|
|
118
|
+
/**
|
|
119
|
+
* Set implementation
|
|
120
|
+
*/
|
|
121
|
+
to(implementation: new (...args: any[]) => T): this;
|
|
122
|
+
/**
|
|
123
|
+
* Set value
|
|
124
|
+
*/
|
|
125
|
+
toValue(value: T): this;
|
|
126
|
+
/**
|
|
127
|
+
* Set factory
|
|
128
|
+
*/
|
|
129
|
+
toFactory(factory: (...args: any[]) => T): this;
|
|
130
|
+
/**
|
|
131
|
+
* Set singleton scope
|
|
132
|
+
*/
|
|
133
|
+
inSingletonScope(): this;
|
|
134
|
+
/**
|
|
135
|
+
* Set transient scope
|
|
136
|
+
*/
|
|
137
|
+
inTransientScope(): this;
|
|
138
|
+
/**
|
|
139
|
+
* Build and register binding
|
|
140
|
+
*/
|
|
141
|
+
build(): Container;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Enhanced container with contextual binding support
|
|
145
|
+
*/
|
|
146
|
+
export declare class ContextualContainer extends Container {
|
|
147
|
+
private contextualBindings;
|
|
148
|
+
private environmentManager;
|
|
149
|
+
constructor(options?: any);
|
|
150
|
+
/**
|
|
151
|
+
* Create contextual binding
|
|
152
|
+
*/
|
|
153
|
+
bindContextual<T>(token: Token): ContextualBindingBuilder<T>;
|
|
154
|
+
/**
|
|
155
|
+
* Register contextual binding
|
|
156
|
+
*/
|
|
157
|
+
registerContextualBinding<T>(binding: ContextualBinding<T>): this;
|
|
158
|
+
/**
|
|
159
|
+
* Get environment manager
|
|
160
|
+
*/
|
|
161
|
+
getEnvironmentManager(): EnvironmentManager;
|
|
162
|
+
/**
|
|
163
|
+
* Environment-specific binding helpers
|
|
164
|
+
*/
|
|
165
|
+
forDevelopment<T>(token: Token): ContextualBindingBuilder<T>;
|
|
166
|
+
forProduction<T>(token: Token): ContextualBindingBuilder<T>;
|
|
167
|
+
forTesting<T>(token: Token): ContextualBindingBuilder<T>;
|
|
168
|
+
forStaging<T>(token: Token): ContextualBindingBuilder<T>;
|
|
169
|
+
/**
|
|
170
|
+
* Override resolve to handle contextual bindings
|
|
171
|
+
*/
|
|
172
|
+
resolve<T>(token: Token, context?: Partial<ResolutionContext>): T;
|
|
173
|
+
/**
|
|
174
|
+
* Find matching contextual binding
|
|
175
|
+
*/
|
|
176
|
+
private findContextualBinding;
|
|
177
|
+
/**
|
|
178
|
+
* Evaluate binding conditions
|
|
179
|
+
*/
|
|
180
|
+
private evaluateConditions;
|
|
181
|
+
/**
|
|
182
|
+
* Create instance from contextual binding
|
|
183
|
+
*/
|
|
184
|
+
private createInstanceFromContextualBinding;
|
|
185
|
+
/**
|
|
186
|
+
* Generate unique request ID
|
|
187
|
+
*/
|
|
188
|
+
private generateContextualRequestId;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Pre-configured environment setups
|
|
192
|
+
*/
|
|
193
|
+
export declare class EnvironmentPresets {
|
|
194
|
+
/**
|
|
195
|
+
* Development environment
|
|
196
|
+
*/
|
|
197
|
+
static development(): EnvironmentConfig;
|
|
198
|
+
/**
|
|
199
|
+
* Production environment
|
|
200
|
+
*/
|
|
201
|
+
static production(): EnvironmentConfig;
|
|
202
|
+
/**
|
|
203
|
+
* Testing environment
|
|
204
|
+
*/
|
|
205
|
+
static testing(): EnvironmentConfig;
|
|
206
|
+
/**
|
|
207
|
+
* Staging environment
|
|
208
|
+
*/
|
|
209
|
+
static staging(): EnvironmentConfig;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Contextual binding conditions factory
|
|
213
|
+
*/
|
|
214
|
+
export declare class BindingConditions {
|
|
215
|
+
/**
|
|
216
|
+
* Environment condition
|
|
217
|
+
*/
|
|
218
|
+
static environment(...environments: string[]): BindingCondition;
|
|
219
|
+
/**
|
|
220
|
+
* Feature flag condition
|
|
221
|
+
*/
|
|
222
|
+
static feature(featureName: string): BindingCondition;
|
|
223
|
+
/**
|
|
224
|
+
* Environment variable condition
|
|
225
|
+
*/
|
|
226
|
+
static envVar(key: string, value: any): BindingCondition;
|
|
227
|
+
/**
|
|
228
|
+
* Request ID pattern condition
|
|
229
|
+
*/
|
|
230
|
+
static requestPattern(pattern: RegExp): BindingCondition;
|
|
231
|
+
/**
|
|
232
|
+
* Time-based condition
|
|
233
|
+
*/
|
|
234
|
+
static timeRange(startHour: number, endHour: number): BindingCondition;
|
|
235
|
+
/**
|
|
236
|
+
* Custom predicate condition
|
|
237
|
+
*/
|
|
238
|
+
static custom(predicate: (context: ResolutionContext) => boolean, description?: string): BindingCondition;
|
|
239
|
+
}
|
|
240
|
+
export { ContextualContainer as DIContainer };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modern Dependency Injection Decorators
|
|
3
|
+
*/
|
|
4
|
+
import type { ResolutionContext } from './container';
|
|
5
|
+
import { Container } from './container';
|
|
6
|
+
export declare const INJECTABLE_METADATA_KEY: unique symbol;
|
|
7
|
+
export declare const INJECT_METADATA_KEY: unique symbol;
|
|
8
|
+
export declare const OPTIONAL_METADATA_KEY: unique symbol;
|
|
9
|
+
export declare const TAGGED_METADATA_KEY: unique symbol;
|
|
10
|
+
export declare const CONTROLLER_METADATA_KEY: unique symbol;
|
|
11
|
+
export declare const ROUTE_METADATA_KEY: unique symbol;
|
|
12
|
+
export declare const MIDDLEWARE_METADATA_KEY: unique symbol;
|
|
13
|
+
export declare const PARAM_METADATA_KEY: unique symbol;
|
|
14
|
+
export interface InjectableMetadata {
|
|
15
|
+
token?: string | symbol;
|
|
16
|
+
scope?: 'singleton' | 'transient' | 'scoped' | 'request';
|
|
17
|
+
tags?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface InjectMetadata {
|
|
20
|
+
token: string | symbol | Function;
|
|
21
|
+
optional?: boolean;
|
|
22
|
+
tags?: string[];
|
|
23
|
+
when?: (context: ResolutionContext) => boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface ControllerMetadata {
|
|
26
|
+
prefix?: string;
|
|
27
|
+
middleware?: Function[];
|
|
28
|
+
tags?: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface RouteMetadata {
|
|
31
|
+
method: string;
|
|
32
|
+
path: string;
|
|
33
|
+
middleware?: Function[];
|
|
34
|
+
tags?: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface ParamMetadata {
|
|
37
|
+
type: 'param' | 'query' | 'body' | 'header' | 'cookie';
|
|
38
|
+
key?: string;
|
|
39
|
+
token?: string | symbol | Function;
|
|
40
|
+
optional?: boolean;
|
|
41
|
+
transform?: (value: any) => any;
|
|
42
|
+
validate?: (value: any) => boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Injectable decorator - marks a class as injectable
|
|
46
|
+
*/
|
|
47
|
+
export declare function Injectable(metadata?: InjectableMetadata): ClassDecorator;
|
|
48
|
+
/**
|
|
49
|
+
* Inject decorator - specifies dependency injection for constructor parameters
|
|
50
|
+
*/
|
|
51
|
+
export declare function Inject(token: string | symbol | Function, options?: {
|
|
52
|
+
optional?: boolean;
|
|
53
|
+
tags?: string[];
|
|
54
|
+
when?: (context: ResolutionContext) => boolean;
|
|
55
|
+
}): ParameterDecorator;
|
|
56
|
+
/**
|
|
57
|
+
* Optional decorator - marks a dependency as optional
|
|
58
|
+
*/
|
|
59
|
+
export declare function Optional(): ParameterDecorator;
|
|
60
|
+
/**
|
|
61
|
+
* Tagged decorator - injects services with specific tags
|
|
62
|
+
*/
|
|
63
|
+
export declare function Tagged(tag: string): ParameterDecorator;
|
|
64
|
+
/**
|
|
65
|
+
* Controller decorator - marks a class as a controller
|
|
66
|
+
*/
|
|
67
|
+
export declare function Controller(prefix?: string, options?: {
|
|
68
|
+
middleware?: Function[];
|
|
69
|
+
tags?: string[];
|
|
70
|
+
}): ClassDecorator;
|
|
71
|
+
/**
|
|
72
|
+
* HTTP method decorators
|
|
73
|
+
*/
|
|
74
|
+
export declare function Get(path?: string, options?: {
|
|
75
|
+
middleware?: Function[];
|
|
76
|
+
tags?: string[];
|
|
77
|
+
}): MethodDecorator;
|
|
78
|
+
export declare function Post(path?: string, options?: {
|
|
79
|
+
middleware?: Function[];
|
|
80
|
+
tags?: string[];
|
|
81
|
+
}): MethodDecorator;
|
|
82
|
+
export declare function Put(path?: string, options?: {
|
|
83
|
+
middleware?: Function[];
|
|
84
|
+
tags?: string[];
|
|
85
|
+
}): MethodDecorator;
|
|
86
|
+
export declare function Delete(path?: string, options?: {
|
|
87
|
+
middleware?: Function[];
|
|
88
|
+
tags?: string[];
|
|
89
|
+
}): MethodDecorator;
|
|
90
|
+
export declare function Patch(path?: string, options?: {
|
|
91
|
+
middleware?: Function[];
|
|
92
|
+
tags?: string[];
|
|
93
|
+
}): MethodDecorator;
|
|
94
|
+
export declare function Options(path?: string, options?: {
|
|
95
|
+
middleware?: Function[];
|
|
96
|
+
tags?: string[];
|
|
97
|
+
}): MethodDecorator;
|
|
98
|
+
export declare function Head(path?: string, options?: {
|
|
99
|
+
middleware?: Function[];
|
|
100
|
+
tags?: string[];
|
|
101
|
+
}): MethodDecorator;
|
|
102
|
+
/**
|
|
103
|
+
* UseMiddleware decorator - applies middleware to a class or method
|
|
104
|
+
*/
|
|
105
|
+
export declare function UseMiddleware(...middleware: Function[]): ClassDecorator & MethodDecorator;
|
|
106
|
+
/**
|
|
107
|
+
* Parameter decorators for route handlers
|
|
108
|
+
*/
|
|
109
|
+
export declare function Param(key?: string): ParameterDecorator;
|
|
110
|
+
export declare function Query(key?: string): ParameterDecorator;
|
|
111
|
+
export declare function Body(): ParameterDecorator;
|
|
112
|
+
export declare function Header(key?: string): ParameterDecorator;
|
|
113
|
+
export declare function Cookie(key?: string): ParameterDecorator;
|
|
114
|
+
export declare function InjectParam(token: string | symbol | Function): ParameterDecorator;
|
|
115
|
+
/**
|
|
116
|
+
* Metadata reader utility class
|
|
117
|
+
*/
|
|
118
|
+
export declare class MetadataReader {
|
|
119
|
+
static getInjectableMetadata(target: Function): InjectableMetadata | undefined;
|
|
120
|
+
static getInjectMetadata(target: Function): InjectMetadata[];
|
|
121
|
+
static getOptionalMetadata(target: Function): boolean[];
|
|
122
|
+
static getTaggedMetadata(target: Function): string[];
|
|
123
|
+
static getControllerMetadata(target: Function): ControllerMetadata | undefined;
|
|
124
|
+
static getAllRoutes(target: Function): any[];
|
|
125
|
+
static getMiddlewareMetadata(target: Function, propertyKey?: string | symbol): Function[];
|
|
126
|
+
static getParamMetadata(target: Function, propertyKey: string | symbol): ParamMetadata[];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Modern Decorator Container
|
|
130
|
+
*/
|
|
131
|
+
export declare class DecoratorContainer extends Container {
|
|
132
|
+
/**
|
|
133
|
+
* Register a controller with automatic route discovery
|
|
134
|
+
*/
|
|
135
|
+
registerController(controllerClass: Function): void;
|
|
136
|
+
/**
|
|
137
|
+
* Enhanced resolve method that handles decorator metadata
|
|
138
|
+
*/
|
|
139
|
+
resolve<T>(token: string | symbol | Function, context?: ResolutionContext): T;
|
|
140
|
+
}
|
|
141
|
+
export declare const decoratorContainer: DecoratorContainer;
|