@veloxts/core 0.3.3 → 0.3.5

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 (54) hide show
  1. package/README.md +697 -16
  2. package/dist/app.d.ts +67 -10
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js +79 -12
  5. package/dist/app.js.map +1 -1
  6. package/dist/context.d.ts +26 -1
  7. package/dist/context.d.ts.map +1 -1
  8. package/dist/context.js +29 -0
  9. package/dist/context.js.map +1 -1
  10. package/dist/di/container.d.ts +406 -0
  11. package/dist/di/container.d.ts.map +1 -0
  12. package/dist/di/container.js +699 -0
  13. package/dist/di/container.js.map +1 -0
  14. package/dist/di/decorators.d.ts +235 -0
  15. package/dist/di/decorators.d.ts.map +1 -0
  16. package/dist/di/decorators.js +297 -0
  17. package/dist/di/decorators.js.map +1 -0
  18. package/dist/di/index.d.ts +65 -0
  19. package/dist/di/index.d.ts.map +1 -0
  20. package/dist/di/index.js +73 -0
  21. package/dist/di/index.js.map +1 -0
  22. package/dist/di/providers.d.ts +397 -0
  23. package/dist/di/providers.d.ts.map +1 -0
  24. package/dist/di/providers.js +380 -0
  25. package/dist/di/providers.js.map +1 -0
  26. package/dist/di/scope.d.ts +230 -0
  27. package/dist/di/scope.d.ts.map +1 -0
  28. package/dist/di/scope.js +294 -0
  29. package/dist/di/scope.js.map +1 -0
  30. package/dist/di/tokens.d.ts +227 -0
  31. package/dist/di/tokens.d.ts.map +1 -0
  32. package/dist/di/tokens.js +192 -0
  33. package/dist/di/tokens.js.map +1 -0
  34. package/dist/errors/catalog.d.ts +79 -0
  35. package/dist/errors/catalog.d.ts.map +1 -0
  36. package/dist/errors/catalog.js +492 -0
  37. package/dist/errors/catalog.js.map +1 -0
  38. package/dist/errors/formatter.d.ts +101 -0
  39. package/dist/errors/formatter.d.ts.map +1 -0
  40. package/dist/errors/formatter.js +330 -0
  41. package/dist/errors/formatter.js.map +1 -0
  42. package/dist/errors/index.d.ts +14 -0
  43. package/dist/errors/index.d.ts.map +1 -0
  44. package/dist/errors/index.js +16 -0
  45. package/dist/errors/index.js.map +1 -0
  46. package/dist/errors.d.ts +35 -5
  47. package/dist/errors.d.ts.map +1 -1
  48. package/dist/errors.js +57 -4
  49. package/dist/errors.js.map +1 -1
  50. package/dist/index.d.ts +10 -6
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +29 -6
  53. package/dist/index.js.map +1 -1
  54. package/package.json +14 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Decorators for dependency injection
3
+ *
4
+ * VeloxTS uses TypeScript decorators with reflect-metadata for automatic
5
+ * constructor injection. These decorators provide metadata that the
6
+ * container uses to resolve dependencies.
7
+ *
8
+ * IMPORTANT: Requires `experimentalDecorators` and `emitDecoratorMetadata`
9
+ * in tsconfig.json, and `import 'reflect-metadata'` at your app's entry point.
10
+ *
11
+ * @module di/decorators
12
+ */
13
+ import 'reflect-metadata';
14
+ import { Scope } from './scope.js';
15
+ import type { InjectionToken } from './tokens.js';
16
+ /**
17
+ * Type representing a class constructor for decorator metadata operations
18
+ *
19
+ * This type is used throughout the DI decorator system to represent classes
20
+ * that can have metadata attached via reflect-metadata. It uses a permissive
21
+ * signature compatible with any class constructor.
22
+ *
23
+ * Note: This differs from ClassConstructor in tokens.ts which uses `never[]`
24
+ * for strict type inference. This type uses `never` for args to remain
25
+ * compatible with ClassConstructor while accepting any constructor.
26
+ *
27
+ * @typeParam T - The instance type that the constructor creates
28
+ */
29
+ export type Constructor<T = unknown> = abstract new (...args: never) => T;
30
+ /**
31
+ * Metadata key for storing whether a class is injectable
32
+ */
33
+ export declare const INJECTABLE_METADATA_KEY: unique symbol;
34
+ /**
35
+ * Metadata key for storing the scope of an injectable class
36
+ */
37
+ export declare const SCOPE_METADATA_KEY: unique symbol;
38
+ /**
39
+ * Metadata key for storing parameter injection tokens
40
+ */
41
+ export declare const INJECT_METADATA_KEY: unique symbol;
42
+ /**
43
+ * Metadata key for storing optional parameter flags
44
+ */
45
+ export declare const OPTIONAL_METADATA_KEY: unique symbol;
46
+ /**
47
+ * Built-in key used by TypeScript's emitDecoratorMetadata
48
+ */
49
+ export declare const DESIGN_PARAMTYPES_KEY = "design:paramtypes";
50
+ /**
51
+ * Options for the @Injectable decorator
52
+ */
53
+ export interface InjectableOptions {
54
+ /**
55
+ * The lifecycle scope for this service
56
+ * @default Scope.SINGLETON
57
+ */
58
+ scope?: Scope;
59
+ }
60
+ /**
61
+ * Marks a class as injectable
62
+ *
63
+ * Classes decorated with @Injectable can be:
64
+ * - Automatically instantiated by the container
65
+ * - Have their constructor dependencies resolved automatically
66
+ * - Registered with a specific lifecycle scope
67
+ *
68
+ * @param options - Injectable configuration options
69
+ * @returns Class decorator
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * // Basic usage with default singleton scope
74
+ * @Injectable()
75
+ * class UserService {
76
+ * constructor(private db: DatabaseClient) {}
77
+ * }
78
+ *
79
+ * // With request scope
80
+ * @Injectable({ scope: Scope.REQUEST })
81
+ * class UserContext {
82
+ * constructor(private request: FastifyRequest) {}
83
+ * }
84
+ *
85
+ * // With transient scope
86
+ * @Injectable({ scope: Scope.TRANSIENT })
87
+ * class RequestIdGenerator {
88
+ * readonly id = crypto.randomUUID();
89
+ * }
90
+ * ```
91
+ */
92
+ export declare function Injectable(options?: InjectableOptions): ClassDecorator;
93
+ /**
94
+ * Explicitly specifies the injection token for a constructor parameter
95
+ *
96
+ * Use this decorator when:
97
+ * - Injecting by a string or symbol token instead of class
98
+ * - Injecting an interface (TypeScript interfaces are erased at runtime)
99
+ * - The automatic type resolution doesn't work correctly
100
+ *
101
+ * @param token - The injection token to use
102
+ * @returns Parameter decorator
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * const DATABASE = createStringToken<DatabaseClient>('DATABASE');
107
+ * const LOGGER = createSymbolToken<Logger>('LOGGER');
108
+ *
109
+ * @Injectable()
110
+ * class UserService {
111
+ * constructor(
112
+ * @Inject(DATABASE) private db: DatabaseClient,
113
+ * @Inject(LOGGER) private logger: Logger,
114
+ * private config: ConfigService, // Auto-injected by class token
115
+ * ) {}
116
+ * }
117
+ * ```
118
+ */
119
+ export declare function Inject(token: InjectionToken): ParameterDecorator;
120
+ /**
121
+ * Marks a constructor parameter as optional
122
+ *
123
+ * When a dependency is marked as optional and cannot be resolved,
124
+ * `undefined` is injected instead of throwing an error.
125
+ *
126
+ * @returns Parameter decorator
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * @Injectable()
131
+ * class NotificationService {
132
+ * constructor(
133
+ * @Optional() private emailService?: EmailService,
134
+ * @Optional() @Inject(SMS_SERVICE) private smsService?: SmsService,
135
+ * ) {}
136
+ *
137
+ * notify(message: string) {
138
+ * // Gracefully handle missing services
139
+ * this.emailService?.send(message);
140
+ * this.smsService?.send(message);
141
+ * }
142
+ * }
143
+ * ```
144
+ */
145
+ export declare function Optional(): ParameterDecorator;
146
+ /**
147
+ * Checks if a class is marked as injectable
148
+ *
149
+ * @param target - The class to check
150
+ * @returns true if the class has the @Injectable decorator
151
+ */
152
+ export declare function isInjectable(target: Constructor): boolean;
153
+ /**
154
+ * Gets the scope of an injectable class
155
+ *
156
+ * @param target - The class to check
157
+ * @returns The configured scope or SINGLETON if not specified
158
+ */
159
+ export declare function getInjectableScope(target: Constructor): Scope;
160
+ /**
161
+ * Gets the explicit injection tokens for a class's constructor parameters
162
+ *
163
+ * @param target - The class to get tokens for
164
+ * @returns A map of parameter index to injection token
165
+ */
166
+ export declare function getExplicitInjectTokens(target: Constructor): Map<number, InjectionToken>;
167
+ /**
168
+ * Gets the set of optional parameter indices for a class's constructor
169
+ *
170
+ * @param target - The class to check
171
+ * @returns A set of parameter indices marked as optional
172
+ */
173
+ export declare function getOptionalParams(target: Constructor): Set<number>;
174
+ /**
175
+ * Gets the design-time parameter types from TypeScript metadata
176
+ *
177
+ * Requires `emitDecoratorMetadata: true` in tsconfig.json
178
+ *
179
+ * @param target - The class to get parameter types for
180
+ * @returns Array of constructor parameter types, or undefined if not available
181
+ */
182
+ export declare function getDesignParamTypes(target: Constructor): Constructor[] | undefined;
183
+ /**
184
+ * Gets all injection tokens for a class's constructor parameters
185
+ *
186
+ * Combines explicit @Inject tokens with design-time types from TypeScript.
187
+ * Explicit tokens take precedence over inferred types.
188
+ *
189
+ * @param target - The class to get tokens for
190
+ * @returns Array of injection tokens for each constructor parameter
191
+ */
192
+ export declare function getConstructorTokens(target: Constructor): InjectionToken[];
193
+ /**
194
+ * Creates injectable metadata without using decorators
195
+ *
196
+ * Useful for environments where decorators are not supported,
197
+ * or for programmatic registration of third-party classes.
198
+ *
199
+ * @param target - The class to make injectable
200
+ * @param options - Injectable options
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * // Make a third-party class injectable
205
+ * import { ThirdPartyService } from 'third-party-lib';
206
+ *
207
+ * makeInjectable(ThirdPartyService, { scope: Scope.SINGLETON });
208
+ *
209
+ * // Then register with explicit dependencies
210
+ * container.register({
211
+ * provide: ThirdPartyService,
212
+ * useClass: ThirdPartyService,
213
+ * inject: [ConfigService]
214
+ * });
215
+ * ```
216
+ */
217
+ export declare function makeInjectable(target: Constructor, options?: InjectableOptions): void;
218
+ /**
219
+ * Sets explicit inject tokens for a class's constructor parameters
220
+ *
221
+ * Useful for programmatically setting dependency tokens without decorators.
222
+ *
223
+ * @param target - The class to set tokens for
224
+ * @param tokens - Array of tokens matching constructor parameter positions
225
+ *
226
+ * @example
227
+ * ```typescript
228
+ * import { ThirdPartyService } from 'third-party-lib';
229
+ *
230
+ * // ThirdPartyService constructor: (config: Config, db: Database)
231
+ * setInjectTokens(ThirdPartyService, [ConfigService, DATABASE]);
232
+ * ```
233
+ */
234
+ export declare function setInjectTokens(target: Constructor, tokens: InjectionToken[]): void;
235
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/di/decorators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC;AAM1E;;GAEG;AACH,eAAO,MAAM,uBAAuB,eAA6B,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,kBAAkB,eAAwB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,mBAAmB,eAAyB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,qBAAqB,eAA2B,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAMzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CAW1E;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,kBAAkB,CAiBhE;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,QAAQ,IAAI,kBAAkB,CAiB7C;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAG7D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAElE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,GAAG,SAAS,CAElF;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,EAAE,CAwB1E;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI,CAGzF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAMnF"}
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Decorators for dependency injection
3
+ *
4
+ * VeloxTS uses TypeScript decorators with reflect-metadata for automatic
5
+ * constructor injection. These decorators provide metadata that the
6
+ * container uses to resolve dependencies.
7
+ *
8
+ * IMPORTANT: Requires `experimentalDecorators` and `emitDecoratorMetadata`
9
+ * in tsconfig.json, and `import 'reflect-metadata'` at your app's entry point.
10
+ *
11
+ * @module di/decorators
12
+ */
13
+ import 'reflect-metadata';
14
+ import { Scope } from './scope.js';
15
+ // ============================================================================
16
+ // Metadata Keys
17
+ // ============================================================================
18
+ /**
19
+ * Metadata key for storing whether a class is injectable
20
+ */
21
+ export const INJECTABLE_METADATA_KEY = Symbol('velox:injectable');
22
+ /**
23
+ * Metadata key for storing the scope of an injectable class
24
+ */
25
+ export const SCOPE_METADATA_KEY = Symbol('velox:scope');
26
+ /**
27
+ * Metadata key for storing parameter injection tokens
28
+ */
29
+ export const INJECT_METADATA_KEY = Symbol('velox:inject');
30
+ /**
31
+ * Metadata key for storing optional parameter flags
32
+ */
33
+ export const OPTIONAL_METADATA_KEY = Symbol('velox:optional');
34
+ /**
35
+ * Built-in key used by TypeScript's emitDecoratorMetadata
36
+ */
37
+ export const DESIGN_PARAMTYPES_KEY = 'design:paramtypes';
38
+ /**
39
+ * Marks a class as injectable
40
+ *
41
+ * Classes decorated with @Injectable can be:
42
+ * - Automatically instantiated by the container
43
+ * - Have their constructor dependencies resolved automatically
44
+ * - Registered with a specific lifecycle scope
45
+ *
46
+ * @param options - Injectable configuration options
47
+ * @returns Class decorator
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * // Basic usage with default singleton scope
52
+ * @Injectable()
53
+ * class UserService {
54
+ * constructor(private db: DatabaseClient) {}
55
+ * }
56
+ *
57
+ * // With request scope
58
+ * @Injectable({ scope: Scope.REQUEST })
59
+ * class UserContext {
60
+ * constructor(private request: FastifyRequest) {}
61
+ * }
62
+ *
63
+ * // With transient scope
64
+ * @Injectable({ scope: Scope.TRANSIENT })
65
+ * class RequestIdGenerator {
66
+ * readonly id = crypto.randomUUID();
67
+ * }
68
+ * ```
69
+ */
70
+ export function Injectable(options = {}) {
71
+ // biome-ignore lint/complexity/noBannedTypes: ClassDecorator requires Function type per TypeScript lib.es5.d.ts
72
+ return function injectableDecorator(target) {
73
+ // Mark the class as injectable
74
+ Reflect.defineMetadata(INJECTABLE_METADATA_KEY, true, target);
75
+ // Store the scope (default to SINGLETON)
76
+ Reflect.defineMetadata(SCOPE_METADATA_KEY, options.scope ?? Scope.SINGLETON, target);
77
+ return target;
78
+ };
79
+ }
80
+ // ============================================================================
81
+ // Inject Decorator
82
+ // ============================================================================
83
+ /**
84
+ * Explicitly specifies the injection token for a constructor parameter
85
+ *
86
+ * Use this decorator when:
87
+ * - Injecting by a string or symbol token instead of class
88
+ * - Injecting an interface (TypeScript interfaces are erased at runtime)
89
+ * - The automatic type resolution doesn't work correctly
90
+ *
91
+ * @param token - The injection token to use
92
+ * @returns Parameter decorator
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * const DATABASE = createStringToken<DatabaseClient>('DATABASE');
97
+ * const LOGGER = createSymbolToken<Logger>('LOGGER');
98
+ *
99
+ * @Injectable()
100
+ * class UserService {
101
+ * constructor(
102
+ * @Inject(DATABASE) private db: DatabaseClient,
103
+ * @Inject(LOGGER) private logger: Logger,
104
+ * private config: ConfigService, // Auto-injected by class token
105
+ * ) {}
106
+ * }
107
+ * ```
108
+ */
109
+ export function Inject(token) {
110
+ return function injectDecorator(
111
+ // biome-ignore lint/complexity/noBannedTypes: ParameterDecorator requires Object type per TypeScript lib.es5.d.ts
112
+ target, _propertyKey, parameterIndex) {
113
+ // Get existing inject metadata or create new array
114
+ const existingTokens = Reflect.getMetadata(INJECT_METADATA_KEY, target) ?? new Map();
115
+ // Store the token for this parameter index
116
+ existingTokens.set(parameterIndex, token);
117
+ // Save the metadata
118
+ Reflect.defineMetadata(INJECT_METADATA_KEY, existingTokens, target);
119
+ };
120
+ }
121
+ // ============================================================================
122
+ // Optional Decorator
123
+ // ============================================================================
124
+ /**
125
+ * Marks a constructor parameter as optional
126
+ *
127
+ * When a dependency is marked as optional and cannot be resolved,
128
+ * `undefined` is injected instead of throwing an error.
129
+ *
130
+ * @returns Parameter decorator
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * @Injectable()
135
+ * class NotificationService {
136
+ * constructor(
137
+ * @Optional() private emailService?: EmailService,
138
+ * @Optional() @Inject(SMS_SERVICE) private smsService?: SmsService,
139
+ * ) {}
140
+ *
141
+ * notify(message: string) {
142
+ * // Gracefully handle missing services
143
+ * this.emailService?.send(message);
144
+ * this.smsService?.send(message);
145
+ * }
146
+ * }
147
+ * ```
148
+ */
149
+ export function Optional() {
150
+ return function optionalDecorator(
151
+ // biome-ignore lint/complexity/noBannedTypes: ParameterDecorator requires Object type per TypeScript lib.es5.d.ts
152
+ target, _propertyKey, parameterIndex) {
153
+ // Get existing optional flags or create new set
154
+ const optionalParams = Reflect.getMetadata(OPTIONAL_METADATA_KEY, target) ?? new Set();
155
+ // Mark this parameter as optional
156
+ optionalParams.add(parameterIndex);
157
+ // Save the metadata
158
+ Reflect.defineMetadata(OPTIONAL_METADATA_KEY, optionalParams, target);
159
+ };
160
+ }
161
+ // ============================================================================
162
+ // Metadata Readers
163
+ // ============================================================================
164
+ /**
165
+ * Checks if a class is marked as injectable
166
+ *
167
+ * @param target - The class to check
168
+ * @returns true if the class has the @Injectable decorator
169
+ */
170
+ export function isInjectable(target) {
171
+ return Reflect.getMetadata(INJECTABLE_METADATA_KEY, target) === true;
172
+ }
173
+ /**
174
+ * Gets the scope of an injectable class
175
+ *
176
+ * @param target - The class to check
177
+ * @returns The configured scope or SINGLETON if not specified
178
+ */
179
+ export function getInjectableScope(target) {
180
+ const scope = Reflect.getMetadata(SCOPE_METADATA_KEY, target);
181
+ return scope ?? Scope.SINGLETON;
182
+ }
183
+ /**
184
+ * Gets the explicit injection tokens for a class's constructor parameters
185
+ *
186
+ * @param target - The class to get tokens for
187
+ * @returns A map of parameter index to injection token
188
+ */
189
+ export function getExplicitInjectTokens(target) {
190
+ return Reflect.getMetadata(INJECT_METADATA_KEY, target) ?? new Map();
191
+ }
192
+ /**
193
+ * Gets the set of optional parameter indices for a class's constructor
194
+ *
195
+ * @param target - The class to check
196
+ * @returns A set of parameter indices marked as optional
197
+ */
198
+ export function getOptionalParams(target) {
199
+ return Reflect.getMetadata(OPTIONAL_METADATA_KEY, target) ?? new Set();
200
+ }
201
+ /**
202
+ * Gets the design-time parameter types from TypeScript metadata
203
+ *
204
+ * Requires `emitDecoratorMetadata: true` in tsconfig.json
205
+ *
206
+ * @param target - The class to get parameter types for
207
+ * @returns Array of constructor parameter types, or undefined if not available
208
+ */
209
+ export function getDesignParamTypes(target) {
210
+ return Reflect.getMetadata(DESIGN_PARAMTYPES_KEY, target);
211
+ }
212
+ /**
213
+ * Gets all injection tokens for a class's constructor parameters
214
+ *
215
+ * Combines explicit @Inject tokens with design-time types from TypeScript.
216
+ * Explicit tokens take precedence over inferred types.
217
+ *
218
+ * @param target - The class to get tokens for
219
+ * @returns Array of injection tokens for each constructor parameter
220
+ */
221
+ export function getConstructorTokens(target) {
222
+ // Get design-time types from TypeScript's metadata emission
223
+ const designTypes = getDesignParamTypes(target) ?? [];
224
+ // Get explicit @Inject tokens
225
+ const explicitTokens = getExplicitInjectTokens(target);
226
+ // Merge: explicit tokens override design types
227
+ const tokens = [];
228
+ for (let i = 0; i < designTypes.length; i++) {
229
+ const explicitToken = explicitTokens.get(i);
230
+ if (explicitToken !== undefined) {
231
+ // Use explicit @Inject token
232
+ tokens.push(explicitToken);
233
+ }
234
+ else {
235
+ // Use design-time type
236
+ // Note: If the type is Object, it usually means the type wasn't resolved
237
+ // (e.g., it was an interface). This will be caught at resolution time.
238
+ tokens.push(designTypes[i]);
239
+ }
240
+ }
241
+ return tokens;
242
+ }
243
+ // ============================================================================
244
+ // Decorator Utilities
245
+ // ============================================================================
246
+ /**
247
+ * Creates injectable metadata without using decorators
248
+ *
249
+ * Useful for environments where decorators are not supported,
250
+ * or for programmatic registration of third-party classes.
251
+ *
252
+ * @param target - The class to make injectable
253
+ * @param options - Injectable options
254
+ *
255
+ * @example
256
+ * ```typescript
257
+ * // Make a third-party class injectable
258
+ * import { ThirdPartyService } from 'third-party-lib';
259
+ *
260
+ * makeInjectable(ThirdPartyService, { scope: Scope.SINGLETON });
261
+ *
262
+ * // Then register with explicit dependencies
263
+ * container.register({
264
+ * provide: ThirdPartyService,
265
+ * useClass: ThirdPartyService,
266
+ * inject: [ConfigService]
267
+ * });
268
+ * ```
269
+ */
270
+ export function makeInjectable(target, options = {}) {
271
+ Reflect.defineMetadata(INJECTABLE_METADATA_KEY, true, target);
272
+ Reflect.defineMetadata(SCOPE_METADATA_KEY, options.scope ?? Scope.SINGLETON, target);
273
+ }
274
+ /**
275
+ * Sets explicit inject tokens for a class's constructor parameters
276
+ *
277
+ * Useful for programmatically setting dependency tokens without decorators.
278
+ *
279
+ * @param target - The class to set tokens for
280
+ * @param tokens - Array of tokens matching constructor parameter positions
281
+ *
282
+ * @example
283
+ * ```typescript
284
+ * import { ThirdPartyService } from 'third-party-lib';
285
+ *
286
+ * // ThirdPartyService constructor: (config: Config, db: Database)
287
+ * setInjectTokens(ThirdPartyService, [ConfigService, DATABASE]);
288
+ * ```
289
+ */
290
+ export function setInjectTokens(target, tokens) {
291
+ const tokenMap = new Map();
292
+ tokens.forEach((token, index) => {
293
+ tokenMap.set(index, token);
294
+ });
295
+ Reflect.defineMetadata(INJECT_METADATA_KEY, tokenMap, target);
296
+ }
297
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/di/decorators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Dependency Injection Module
3
+ *
4
+ * VeloxTS provides a powerful, type-safe dependency injection container
5
+ * inspired by Angular and NestJS, designed for the VeloxTS framework.
6
+ *
7
+ * Features:
8
+ * - Class, factory, value, and alias providers
9
+ * - Singleton, transient, and request-scoped lifecycles
10
+ * - Automatic constructor injection via decorators
11
+ * - Circular dependency detection
12
+ * - Fastify integration for request-scoped services
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import {
17
+ * Container,
18
+ * Injectable,
19
+ * Inject,
20
+ * Scope,
21
+ * token
22
+ * } from '@veloxts/core';
23
+ *
24
+ * // Create tokens for interfaces
25
+ * const DATABASE = token<DatabaseClient>('DATABASE');
26
+ * const LOGGER = token.symbol<Logger>('LOGGER');
27
+ *
28
+ * // Define injectable services
29
+ * @Injectable({ scope: Scope.REQUEST })
30
+ * class UserService {
31
+ * constructor(
32
+ * @Inject(DATABASE) private db: DatabaseClient,
33
+ * private config: ConfigService,
34
+ * ) {}
35
+ * }
36
+ *
37
+ * // Register providers
38
+ * const container = new Container();
39
+ * container.register({
40
+ * provide: DATABASE,
41
+ * useFactory: () => createDatabaseClient(),
42
+ * scope: Scope.SINGLETON
43
+ * });
44
+ * container.register({
45
+ * provide: UserService,
46
+ * useClass: UserService,
47
+ * scope: Scope.REQUEST
48
+ * });
49
+ *
50
+ * // Resolve services
51
+ * const userService = container.resolve(UserService, { request });
52
+ * ```
53
+ *
54
+ * @module di
55
+ */
56
+ export type { ContainerOptions, ResolutionContext } from './container.js';
57
+ export { Container, container, createContainer } from './container.js';
58
+ export type { InjectableOptions } from './decorators.js';
59
+ export { getConstructorTokens, getExplicitInjectTokens, getInjectableScope, getOptionalParams, INJECT_METADATA_KEY, INJECTABLE_METADATA_KEY, Inject, Injectable, isInjectable, makeInjectable, OPTIONAL_METADATA_KEY, Optional, SCOPE_METADATA_KEY, setInjectTokens, } from './decorators.js';
60
+ export type { ClassProvider, ExistingProvider, FactoryProvider, Provider, ValueProvider, } from './providers.js';
61
+ export { asClass, asExisting, asFactory, asValue, factory, isClassProvider, isExistingProvider, isFactoryProvider, isValueProvider, scoped, singleton, transient, validateProvider, value, } from './providers.js';
62
+ export { Scope, ScopeManager } from './scope.js';
63
+ export type { AbstractClass, ClassConstructor, InjectionToken, StringToken, SymbolToken, TokenType, } from './tokens.js';
64
+ export { createStringToken, createSymbolToken, getTokenName, isClassToken, isStringToken, isSymbolToken, token, validateToken, } from './tokens.js';
65
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,MAAM,EACN,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,OAAO,EACP,UAAU,EACV,SAAS,EACT,OAAO,EACP,OAAO,EAEP,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,MAAM,EAEN,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,KAAK,GACN,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,WAAW,EACX,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,iBAAiB,EACjB,iBAAiB,EAEjB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EAEb,KAAK,EACL,aAAa,GACd,MAAM,aAAa,CAAC"}