@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,73 @@
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 { Container, container, createContainer } from './container.js';
57
+ 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';
58
+ export {
59
+ // Legacy helpers (still supported)
60
+ asClass, asExisting, asFactory, asValue, factory,
61
+ // Type guards
62
+ isClassProvider, isExistingProvider, isFactoryProvider, isValueProvider, scoped,
63
+ // Succinct scope helpers (preferred)
64
+ singleton, transient, validateProvider, value, } from './providers.js';
65
+ export { Scope, ScopeManager } from './scope.js';
66
+ export {
67
+ // Legacy (deprecated) - keep for backwards compatibility
68
+ createStringToken, createSymbolToken,
69
+ // Utilities
70
+ getTokenName, isClassToken, isStringToken, isSymbolToken,
71
+ // Succinct API (preferred)
72
+ token, validateToken, } from './tokens.js';
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAGH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvE,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;AAQzB,OAAO;AACL,mCAAmC;AACnC,OAAO,EACP,UAAU,EACV,SAAS,EACT,OAAO,EACP,OAAO;AACP,cAAc;AACd,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,MAAM;AACN,qCAAqC;AACrC,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,KAAK,GACN,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AASjD,OAAO;AACL,yDAAyD;AACzD,iBAAiB,EACjB,iBAAiB;AACjB,YAAY;AACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa;AACb,2BAA2B;AAC3B,KAAK,EACL,aAAa,GACd,MAAM,aAAa,CAAC"}
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Provider types and registration interfaces for dependency injection
3
+ *
4
+ * Providers define how services are created and configured.
5
+ * VeloxTS supports four provider types:
6
+ * - Class providers: Instantiate a class
7
+ * - Factory providers: Use a factory function
8
+ * - Value providers: Use an existing value
9
+ * - Existing providers: Alias another token
10
+ *
11
+ * @module di/providers
12
+ */
13
+ import { Scope } from './scope.js';
14
+ import type { ClassConstructor, InjectionToken } from './tokens.js';
15
+ /**
16
+ * Base provider interface
17
+ *
18
+ * All providers must specify the token they provide
19
+ * and optionally their lifecycle scope.
20
+ *
21
+ * @template T - The type of service being provided
22
+ */
23
+ interface BaseProvider<T = unknown> {
24
+ /**
25
+ * The token that identifies this service
26
+ */
27
+ provide: InjectionToken<T>;
28
+ /**
29
+ * The lifecycle scope for this service
30
+ * @default Scope.SINGLETON
31
+ */
32
+ scope?: Scope;
33
+ }
34
+ /**
35
+ * Class provider
36
+ *
37
+ * Creates instances by calling `new` on the specified class.
38
+ * Constructor dependencies are automatically injected.
39
+ *
40
+ * @template T - The type of service being provided
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * container.register({
45
+ * provide: UserService,
46
+ * useClass: UserService,
47
+ * scope: Scope.REQUEST
48
+ * });
49
+ *
50
+ * // Or with a different implementation
51
+ * container.register({
52
+ * provide: IUserRepository,
53
+ * useClass: PrismaUserRepository
54
+ * });
55
+ * ```
56
+ */
57
+ export interface ClassProvider<T = unknown> extends BaseProvider<T> {
58
+ /**
59
+ * The class to instantiate
60
+ */
61
+ useClass: ClassConstructor<T>;
62
+ }
63
+ /**
64
+ * Factory provider
65
+ *
66
+ * Creates instances using a factory function.
67
+ * Dependencies can be injected into the factory via the `inject` array.
68
+ *
69
+ * @template T - The type of service being provided
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * container.register({
74
+ * provide: DATABASE,
75
+ * useFactory: (config: ConfigService) => {
76
+ * return createDatabaseClient(config.databaseUrl);
77
+ * },
78
+ * inject: [ConfigService],
79
+ * scope: Scope.SINGLETON
80
+ * });
81
+ * ```
82
+ */
83
+ export interface FactoryProvider<T = unknown> extends BaseProvider<T> {
84
+ /**
85
+ * The factory function that creates the service
86
+ *
87
+ * Receives resolved dependencies in order matching the `inject` array.
88
+ */
89
+ useFactory: (...args: never[]) => T | Promise<T>;
90
+ /**
91
+ * Tokens for dependencies to inject into the factory
92
+ *
93
+ * Dependencies are resolved and passed to the factory in order.
94
+ */
95
+ inject?: InjectionToken[];
96
+ }
97
+ /**
98
+ * Value provider
99
+ *
100
+ * Uses an existing value directly without any instantiation.
101
+ * Useful for configuration objects, constants, or pre-created instances.
102
+ *
103
+ * @template T - The type of service being provided
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * container.register({
108
+ * provide: CONFIG,
109
+ * useValue: {
110
+ * port: 3210,
111
+ * host: 'localhost',
112
+ * debug: true
113
+ * }
114
+ * });
115
+ * ```
116
+ */
117
+ export interface ValueProvider<T = unknown> extends BaseProvider<T> {
118
+ /**
119
+ * The value to use as the service instance
120
+ */
121
+ useValue: T;
122
+ }
123
+ /**
124
+ * Existing provider (alias)
125
+ *
126
+ * Aliases one token to another, allowing multiple tokens
127
+ * to resolve to the same service.
128
+ *
129
+ * @template T - The type of service being provided
130
+ *
131
+ * @example
132
+ * ```typescript
133
+ * // Register the concrete implementation
134
+ * container.register({
135
+ * provide: ConsoleLogger,
136
+ * useClass: ConsoleLogger
137
+ * });
138
+ *
139
+ * // Create an alias using the interface token
140
+ * container.register({
141
+ * provide: LOGGER,
142
+ * useExisting: ConsoleLogger
143
+ * });
144
+ *
145
+ * // Both resolve to the same instance
146
+ * const logger1 = container.resolve(LOGGER);
147
+ * const logger2 = container.resolve(ConsoleLogger);
148
+ * // logger1 === logger2
149
+ * ```
150
+ */
151
+ export interface ExistingProvider<T = unknown> extends BaseProvider<T> {
152
+ /**
153
+ * The token to alias to
154
+ *
155
+ * Resolving the `provide` token will resolve this token instead.
156
+ */
157
+ useExisting: InjectionToken<T>;
158
+ }
159
+ /**
160
+ * Union of all provider types
161
+ */
162
+ export type Provider<T = unknown> = ClassProvider<T> | FactoryProvider<T> | ValueProvider<T> | ExistingProvider<T>;
163
+ /**
164
+ * Type guard for class providers
165
+ */
166
+ export declare function isClassProvider<T>(provider: Provider<T>): provider is ClassProvider<T>;
167
+ /**
168
+ * Type guard for factory providers
169
+ */
170
+ export declare function isFactoryProvider<T>(provider: Provider<T>): provider is FactoryProvider<T>;
171
+ /**
172
+ * Type guard for value providers
173
+ */
174
+ export declare function isValueProvider<T>(provider: Provider<T>): provider is ValueProvider<T>;
175
+ /**
176
+ * Type guard for existing/alias providers
177
+ */
178
+ export declare function isExistingProvider<T>(provider: Provider<T>): provider is ExistingProvider<T>;
179
+ /**
180
+ * Validates a provider configuration
181
+ *
182
+ * @param provider - The provider to validate
183
+ * @throws {VeloxError} If the provider is invalid
184
+ */
185
+ export declare function validateProvider(provider: unknown): asserts provider is Provider;
186
+ /**
187
+ * Normalized class provider
188
+ * @internal
189
+ */
190
+ interface NormalizedClassProvider<T = unknown> {
191
+ provide: InjectionToken<T>;
192
+ scope: Scope;
193
+ type: 'class';
194
+ implementation: {
195
+ class: ClassConstructor<T>;
196
+ };
197
+ }
198
+ /**
199
+ * Normalized factory provider
200
+ * @internal
201
+ */
202
+ export interface NormalizedFactoryProvider<T = unknown> {
203
+ provide: InjectionToken<T>;
204
+ scope: Scope;
205
+ type: 'factory';
206
+ implementation: {
207
+ factory: (...args: never[]) => T | Promise<T>;
208
+ inject?: InjectionToken[];
209
+ };
210
+ }
211
+ /**
212
+ * Normalized value provider
213
+ * @internal
214
+ */
215
+ interface NormalizedValueProvider<T = unknown> {
216
+ provide: InjectionToken<T>;
217
+ scope: Scope;
218
+ type: 'value';
219
+ implementation: {
220
+ value: T;
221
+ };
222
+ }
223
+ /**
224
+ * Normalized existing/alias provider
225
+ * @internal
226
+ */
227
+ interface NormalizedExistingProvider<T = unknown> {
228
+ provide: InjectionToken<T>;
229
+ scope: Scope;
230
+ type: 'existing';
231
+ implementation: {
232
+ existing: InjectionToken<T>;
233
+ };
234
+ }
235
+ /**
236
+ * Normalized provider with all optional fields filled in
237
+ *
238
+ * Uses discriminated union based on 'type' field for proper type narrowing.
239
+ *
240
+ * @internal
241
+ */
242
+ export type NormalizedProvider<T = unknown> = NormalizedClassProvider<T> | NormalizedFactoryProvider<T> | NormalizedValueProvider<T> | NormalizedExistingProvider<T>;
243
+ /**
244
+ * Normalizes a provider to a consistent internal format
245
+ *
246
+ * @param provider - The provider to normalize
247
+ * @returns The normalized provider
248
+ *
249
+ * @internal
250
+ */
251
+ export declare function normalizeProvider<T>(provider: Provider<T>): NormalizedProvider<T>;
252
+ /**
253
+ * Creates a class provider with type inference
254
+ *
255
+ * @param cls - The class to provide
256
+ * @param scope - The lifecycle scope
257
+ * @returns A class provider configuration
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * container.register(asClass(UserService, Scope.REQUEST));
262
+ * ```
263
+ */
264
+ export declare function asClass<T>(cls: ClassConstructor<T>, scope?: Scope): ClassProvider<T>;
265
+ /**
266
+ * Creates a factory provider with type inference
267
+ *
268
+ * @param token - The token to provide
269
+ * @param factory - The factory function
270
+ * @param options - Factory options (inject, scope)
271
+ * @returns A factory provider configuration
272
+ *
273
+ * @example
274
+ * ```typescript
275
+ * container.register(asFactory(
276
+ * DATABASE,
277
+ * (config: ConfigService) => createDb(config.dbUrl),
278
+ * { inject: [ConfigService] }
279
+ * ));
280
+ * ```
281
+ */
282
+ export declare function asFactory<T>(token: InjectionToken<T>, factory: (...args: never[]) => T | Promise<T>, options?: {
283
+ inject?: InjectionToken[];
284
+ scope?: Scope;
285
+ }): FactoryProvider<T>;
286
+ /**
287
+ * Creates a value provider with type inference
288
+ *
289
+ * @param token - The token to provide
290
+ * @param value - The value to use
291
+ * @returns A value provider configuration
292
+ *
293
+ * @example
294
+ * ```typescript
295
+ * container.register(asValue(CONFIG, { port: 3210 }));
296
+ * ```
297
+ */
298
+ export declare function asValue<T>(token: InjectionToken<T>, value: T): ValueProvider<T>;
299
+ /**
300
+ * Creates an existing/alias provider with type inference
301
+ *
302
+ * @param token - The token to provide (alias)
303
+ * @param existing - The token to alias to
304
+ * @returns An existing provider configuration
305
+ *
306
+ * @example
307
+ * ```typescript
308
+ * container.register(asExisting(LOGGER, ConsoleLogger));
309
+ * ```
310
+ */
311
+ export declare function asExisting<T>(token: InjectionToken<T>, existing: InjectionToken<T>): ExistingProvider<T>;
312
+ /**
313
+ * Creates a singleton class provider
314
+ *
315
+ * Singleton services are instantiated once and shared across all requests.
316
+ * This is the default scope and the most common pattern.
317
+ *
318
+ * @param cls - The class to provide as a singleton
319
+ * @returns A class provider configured as singleton
320
+ *
321
+ * @example
322
+ * ```typescript
323
+ * container.register(singleton(ConfigService));
324
+ * container.register(singleton(DatabasePool));
325
+ * ```
326
+ */
327
+ export declare function singleton<T>(cls: ClassConstructor<T>): ClassProvider<T>;
328
+ /**
329
+ * Creates a request-scoped class provider
330
+ *
331
+ * Request-scoped services are instantiated once per HTTP request.
332
+ * Ideal for services that need request-specific state.
333
+ *
334
+ * @param cls - The class to provide with request scope
335
+ * @returns A class provider configured as request-scoped
336
+ *
337
+ * @example
338
+ * ```typescript
339
+ * container.register(scoped(RequestContext));
340
+ * container.register(scoped(UserSession));
341
+ * ```
342
+ */
343
+ export declare function scoped<T>(cls: ClassConstructor<T>): ClassProvider<T>;
344
+ /**
345
+ * Creates a transient class provider
346
+ *
347
+ * Transient services are instantiated every time they are resolved.
348
+ * Useful for stateful objects that should not be shared.
349
+ *
350
+ * @param cls - The class to provide as transient
351
+ * @returns A class provider configured as transient
352
+ *
353
+ * @example
354
+ * ```typescript
355
+ * container.register(transient(EmailBuilder));
356
+ * container.register(transient(RequestId));
357
+ * ```
358
+ */
359
+ export declare function transient<T>(cls: ClassConstructor<T>): ClassProvider<T>;
360
+ /**
361
+ * Creates a value provider (convenience alias)
362
+ *
363
+ * @param token - The token to provide
364
+ * @param val - The value to use
365
+ * @returns A value provider configuration
366
+ *
367
+ * @example
368
+ * ```typescript
369
+ * container.register(value(CONFIG, { port: 3210 }));
370
+ * ```
371
+ */
372
+ export declare function value<T>(token: InjectionToken<T>, val: T): ValueProvider<T>;
373
+ /**
374
+ * Creates a factory provider (convenience alias)
375
+ *
376
+ * @param token - The token to provide
377
+ * @param factoryFn - The factory function
378
+ * @param deps - Dependencies to inject into the factory
379
+ * @returns A factory provider configuration
380
+ *
381
+ * @example
382
+ * ```typescript
383
+ * container.register(factory(DATABASE, createDb, [ConfigService]));
384
+ * ```
385
+ */
386
+ export declare function factory<T>(token: InjectionToken<T>, factoryFn: (...args: never[]) => T | Promise<T>, deps?: InjectionToken[]): FactoryProvider<T>;
387
+ /**
388
+ * Gets a human-readable description of a provider
389
+ *
390
+ * @param provider - The provider to describe
391
+ * @returns A string description
392
+ *
393
+ * @internal
394
+ */
395
+ export declare function describeProvider(provider: Provider): string;
396
+ export {};
397
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/di/providers.ts"],"names":[],"mappings":"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"}