@navios/di 0.7.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +110 -0
- package/README.md +117 -17
- package/lib/browser/container/abstract-container.d.mts +112 -0
- package/lib/browser/container/abstract-container.d.mts.map +1 -0
- package/lib/browser/container/abstract-container.mjs +100 -0
- package/lib/browser/container/abstract-container.mjs.map +1 -0
- package/lib/browser/container/container.d.mts +100 -0
- package/lib/browser/container/container.d.mts.map +1 -0
- package/lib/browser/container/container.mjs +424 -0
- package/lib/browser/container/container.mjs.map +1 -0
- package/lib/browser/container/scoped-container.d.mts +93 -0
- package/lib/browser/container/scoped-container.d.mts.map +1 -0
- package/lib/browser/container/scoped-container.mjs +119 -0
- package/lib/browser/container/scoped-container.mjs.map +1 -0
- package/lib/browser/decorators/factory.decorator.d.mts +26 -0
- package/lib/browser/decorators/factory.decorator.d.mts.map +1 -0
- package/lib/browser/decorators/factory.decorator.mjs +20 -0
- package/lib/browser/decorators/factory.decorator.mjs.map +1 -0
- package/lib/browser/decorators/injectable.decorator.d.mts +38 -0
- package/lib/browser/decorators/injectable.decorator.d.mts.map +1 -0
- package/lib/browser/decorators/injectable.decorator.mjs +21 -0
- package/lib/browser/decorators/injectable.decorator.mjs.map +1 -0
- package/lib/browser/enums/injectable-scope.enum.d.mts +18 -0
- package/lib/browser/enums/injectable-scope.enum.d.mts.map +1 -0
- package/lib/browser/enums/injectable-scope.enum.mjs +20 -0
- package/lib/browser/enums/injectable-scope.enum.mjs.map +1 -0
- package/lib/browser/enums/injectable-type.enum.d.mts +8 -0
- package/lib/browser/enums/injectable-type.enum.d.mts.map +1 -0
- package/lib/browser/enums/injectable-type.enum.mjs +10 -0
- package/lib/browser/enums/injectable-type.enum.mjs.map +1 -0
- package/lib/browser/errors/di-error.d.mts +43 -0
- package/lib/browser/errors/di-error.d.mts.map +1 -0
- package/lib/browser/errors/di-error.mjs +98 -0
- package/lib/browser/errors/di-error.mjs.map +1 -0
- package/lib/browser/event-emitter.d.mts +16 -0
- package/lib/browser/event-emitter.d.mts.map +1 -0
- package/lib/browser/event-emitter.mjs +320 -0
- package/lib/browser/event-emitter.mjs.map +1 -0
- package/lib/browser/index.d.mts +37 -1508
- package/lib/browser/index.mjs +29 -2650
- package/lib/browser/interfaces/container.interface.d.mts +59 -0
- package/lib/browser/interfaces/container.interface.d.mts.map +1 -0
- package/lib/browser/interfaces/factory.interface.d.mts +14 -0
- package/lib/browser/interfaces/factory.interface.d.mts.map +1 -0
- package/lib/browser/interfaces/on-service-destroy.interface.d.mts +7 -0
- package/lib/browser/interfaces/on-service-destroy.interface.d.mts.map +1 -0
- package/lib/browser/interfaces/on-service-init.interface.d.mts +7 -0
- package/lib/browser/interfaces/on-service-init.interface.d.mts.map +1 -0
- package/lib/browser/internal/context/async-local-storage.browser.mjs +20 -0
- package/lib/browser/internal/context/async-local-storage.browser.mjs.map +1 -0
- package/lib/browser/internal/context/async-local-storage.d.mts +9 -0
- package/lib/browser/internal/context/async-local-storage.d.mts.map +1 -0
- package/lib/browser/internal/context/async-local-storage.types.d.mts +11 -0
- package/lib/browser/internal/context/async-local-storage.types.d.mts.map +1 -0
- package/lib/browser/internal/context/factory-context.d.mts +23 -0
- package/lib/browser/internal/context/factory-context.d.mts.map +1 -0
- package/lib/browser/internal/context/resolution-context.d.mts +43 -0
- package/lib/browser/internal/context/resolution-context.d.mts.map +1 -0
- package/lib/browser/internal/context/resolution-context.mjs +56 -0
- package/lib/browser/internal/context/resolution-context.mjs.map +1 -0
- package/lib/browser/internal/context/service-initialization-context.d.mts +48 -0
- package/lib/browser/internal/context/service-initialization-context.d.mts.map +1 -0
- package/lib/browser/internal/context/sync-local-storage.mjs +53 -0
- package/lib/browser/internal/context/sync-local-storage.mjs.map +1 -0
- package/lib/browser/internal/core/instance-resolver.d.mts +119 -0
- package/lib/browser/internal/core/instance-resolver.d.mts.map +1 -0
- package/lib/browser/internal/core/instance-resolver.mjs +306 -0
- package/lib/browser/internal/core/instance-resolver.mjs.map +1 -0
- package/lib/browser/internal/core/name-resolver.d.mts +52 -0
- package/lib/browser/internal/core/name-resolver.d.mts.map +1 -0
- package/lib/browser/internal/core/name-resolver.mjs +118 -0
- package/lib/browser/internal/core/name-resolver.mjs.map +1 -0
- package/lib/browser/internal/core/scope-tracker.d.mts +65 -0
- package/lib/browser/internal/core/scope-tracker.d.mts.map +1 -0
- package/lib/browser/internal/core/scope-tracker.mjs +120 -0
- package/lib/browser/internal/core/scope-tracker.mjs.map +1 -0
- package/lib/browser/internal/core/service-initializer.d.mts +44 -0
- package/lib/browser/internal/core/service-initializer.d.mts.map +1 -0
- package/lib/browser/internal/core/service-initializer.mjs +109 -0
- package/lib/browser/internal/core/service-initializer.mjs.map +1 -0
- package/lib/browser/internal/core/service-invalidator.d.mts +81 -0
- package/lib/browser/internal/core/service-invalidator.d.mts.map +1 -0
- package/lib/browser/internal/core/service-invalidator.mjs +142 -0
- package/lib/browser/internal/core/service-invalidator.mjs.map +1 -0
- package/lib/browser/internal/core/token-resolver.d.mts +54 -0
- package/lib/browser/internal/core/token-resolver.d.mts.map +1 -0
- package/lib/browser/internal/core/token-resolver.mjs +77 -0
- package/lib/browser/internal/core/token-resolver.mjs.map +1 -0
- package/lib/browser/internal/holder/holder-storage.interface.d.mts +99 -0
- package/lib/browser/internal/holder/holder-storage.interface.d.mts.map +1 -0
- package/lib/browser/internal/holder/instance-holder.d.mts +101 -0
- package/lib/browser/internal/holder/instance-holder.d.mts.map +1 -0
- package/lib/browser/internal/holder/instance-holder.mjs +19 -0
- package/lib/browser/internal/holder/instance-holder.mjs.map +1 -0
- package/lib/browser/internal/holder/unified-storage.d.mts +53 -0
- package/lib/browser/internal/holder/unified-storage.d.mts.map +1 -0
- package/lib/browser/internal/holder/unified-storage.mjs +144 -0
- package/lib/browser/internal/holder/unified-storage.mjs.map +1 -0
- package/lib/browser/internal/lifecycle/circular-detector.d.mts +39 -0
- package/lib/browser/internal/lifecycle/circular-detector.d.mts.map +1 -0
- package/lib/browser/internal/lifecycle/circular-detector.mjs +55 -0
- package/lib/browser/internal/lifecycle/circular-detector.mjs.map +1 -0
- package/lib/browser/internal/lifecycle/lifecycle-event-bus.d.mts +18 -0
- package/lib/browser/internal/lifecycle/lifecycle-event-bus.d.mts.map +1 -0
- package/lib/browser/internal/lifecycle/lifecycle-event-bus.mjs +43 -0
- package/lib/browser/internal/lifecycle/lifecycle-event-bus.mjs.map +1 -0
- package/lib/browser/internal/stub-factory-class.d.mts +14 -0
- package/lib/browser/internal/stub-factory-class.d.mts.map +1 -0
- package/lib/browser/internal/stub-factory-class.mjs +18 -0
- package/lib/browser/internal/stub-factory-class.mjs.map +1 -0
- package/lib/browser/symbols/injectable-token.d.mts +5 -0
- package/lib/browser/symbols/injectable-token.d.mts.map +1 -0
- package/lib/browser/symbols/injectable-token.mjs +6 -0
- package/lib/browser/symbols/injectable-token.mjs.map +1 -0
- package/lib/browser/token/injection-token.d.mts +55 -0
- package/lib/browser/token/injection-token.d.mts.map +1 -0
- package/lib/browser/token/injection-token.mjs +100 -0
- package/lib/browser/token/injection-token.mjs.map +1 -0
- package/lib/browser/token/registry.d.mts +37 -0
- package/lib/browser/token/registry.d.mts.map +1 -0
- package/lib/browser/token/registry.mjs +86 -0
- package/lib/browser/token/registry.mjs.map +1 -0
- package/lib/browser/utils/default-injectors.d.mts +12 -0
- package/lib/browser/utils/default-injectors.d.mts.map +1 -0
- package/lib/browser/utils/default-injectors.mjs +13 -0
- package/lib/browser/utils/default-injectors.mjs.map +1 -0
- package/lib/browser/utils/get-injectable-token.d.mts +9 -0
- package/lib/browser/utils/get-injectable-token.d.mts.map +1 -0
- package/lib/browser/utils/get-injectable-token.mjs +13 -0
- package/lib/browser/utils/get-injectable-token.mjs.map +1 -0
- package/lib/browser/utils/get-injectors.d.mts +55 -0
- package/lib/browser/utils/get-injectors.d.mts.map +1 -0
- package/lib/browser/utils/get-injectors.mjs +121 -0
- package/lib/browser/utils/get-injectors.mjs.map +1 -0
- package/lib/browser/utils/types.d.mts +23 -0
- package/lib/browser/utils/types.d.mts.map +1 -0
- package/lib/{container-Pb_Y4Z4x.mjs → container-8-z89TyQ.mjs} +1269 -1305
- package/lib/container-8-z89TyQ.mjs.map +1 -0
- package/lib/{container-BuAutHGg.d.mts → container-CNiqesCL.d.mts} +600 -569
- package/lib/container-CNiqesCL.d.mts.map +1 -0
- package/lib/{container-DnzgpfBe.cjs → container-CaY2fDuk.cjs} +1287 -1329
- package/lib/container-CaY2fDuk.cjs.map +1 -0
- package/lib/{container-oGTgX2iX.d.cts → container-D-0Ho3qL.d.cts} +601 -565
- package/lib/container-D-0Ho3qL.d.cts.map +1 -0
- package/lib/index.cjs +13 -15
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +58 -223
- package/lib/index.d.cts.map +1 -1
- package/lib/index.d.mts +62 -222
- package/lib/index.d.mts.map +1 -1
- package/lib/index.mjs +5 -6
- package/lib/index.mjs.map +1 -1
- package/lib/testing/index.cjs +569 -311
- package/lib/testing/index.cjs.map +1 -1
- package/lib/testing/index.d.cts +370 -41
- package/lib/testing/index.d.cts.map +1 -1
- package/lib/testing/index.d.mts +370 -41
- package/lib/testing/index.d.mts.map +1 -1
- package/lib/testing/index.mjs +568 -305
- package/lib/testing/index.mjs.map +1 -1
- package/package.json +2 -1
- package/src/__tests__/circular-detector.spec.mts +193 -0
- package/src/__tests__/concurrent.spec.mts +368 -0
- package/src/__tests__/container.spec.mts +32 -30
- package/src/__tests__/di-error.spec.mts +351 -0
- package/src/__tests__/e2e.browser.spec.mts +0 -4
- package/src/__tests__/e2e.spec.mts +10 -19
- package/src/__tests__/event-emitter.spec.mts +232 -109
- package/src/__tests__/get-injectors.spec.mts +250 -39
- package/src/__tests__/injection-token.spec.mts +293 -349
- package/src/__tests__/library-findings.spec.mts +8 -8
- package/src/__tests__/registry.spec.mts +358 -210
- package/src/__tests__/resolution-context.spec.mts +255 -0
- package/src/__tests__/scope-tracker.spec.mts +598 -0
- package/src/__tests__/scope-upgrade.spec.mts +808 -0
- package/src/__tests__/scoped-container.spec.mts +595 -0
- package/src/__tests__/test-container.spec.mts +293 -0
- package/src/__tests__/token-resolver.spec.mts +207 -0
- package/src/__tests__/unified-storage.spec.mts +535 -0
- package/src/__tests__/unit-test-container.spec.mts +405 -0
- package/src/__type-tests__/container.spec-d.mts +180 -0
- package/src/__type-tests__/factory.spec-d.mts +15 -3
- package/src/__type-tests__/inject.spec-d.mts +115 -20
- package/src/__type-tests__/injectable.spec-d.mts +69 -52
- package/src/__type-tests__/injection-token.spec-d.mts +176 -0
- package/src/__type-tests__/scoped-container.spec-d.mts +212 -0
- package/src/container/abstract-container.mts +327 -0
- package/src/container/container.mts +142 -170
- package/src/container/scoped-container.mts +126 -208
- package/src/decorators/factory.decorator.mts +16 -11
- package/src/decorators/injectable.decorator.mts +20 -16
- package/src/enums/index.mts +2 -2
- package/src/enums/injectable-scope.enum.mts +1 -0
- package/src/enums/injectable-type.enum.mts +1 -0
- package/src/errors/di-error.mts +96 -0
- package/src/event-emitter.mts +3 -27
- package/src/index.mts +6 -153
- package/src/interfaces/container.interface.mts +13 -0
- package/src/interfaces/factory.interface.mts +1 -1
- package/src/interfaces/index.mts +1 -1
- package/src/internal/context/async-local-storage.mts +3 -2
- package/src/internal/context/async-local-storage.types.mts +1 -0
- package/src/internal/context/factory-context.mts +1 -0
- package/src/internal/context/index.mts +3 -1
- package/src/internal/context/resolution-context.mts +1 -0
- package/src/internal/context/service-initialization-context.mts +43 -0
- package/src/internal/core/index.mts +5 -4
- package/src/internal/core/instance-resolver.mts +461 -292
- package/src/internal/core/name-resolver.mts +196 -0
- package/src/internal/core/scope-tracker.mts +242 -0
- package/src/internal/core/{instantiator.mts → service-initializer.mts} +51 -29
- package/src/internal/core/service-invalidator.mts +290 -0
- package/src/internal/core/{token-processor.mts → token-resolver.mts} +17 -88
- package/src/internal/holder/holder-storage.interface.mts +11 -5
- package/src/internal/holder/index.mts +2 -5
- package/src/internal/holder/instance-holder.mts +1 -3
- package/src/internal/holder/unified-storage.mts +245 -0
- package/src/internal/index.mts +2 -1
- package/src/internal/lifecycle/circular-detector.mts +1 -0
- package/src/internal/lifecycle/index.mts +1 -1
- package/src/internal/lifecycle/lifecycle-event-bus.mts +1 -0
- package/src/internal/stub-factory-class.mts +16 -0
- package/src/symbols/injectable-token.mts +3 -1
- package/src/testing/index.mts +2 -0
- package/src/testing/test-container.mts +546 -85
- package/src/testing/types.mts +117 -0
- package/src/testing/unit-test-container.mts +509 -0
- package/src/token/injection-token.mts +41 -4
- package/src/token/registry.mts +75 -9
- package/src/utils/default-injectors.mts +16 -0
- package/src/utils/get-injectable-token.mts +2 -3
- package/src/utils/get-injectors.mts +26 -15
- package/src/utils/index.mts +3 -1
- package/src/utils/types.mts +1 -0
- package/tsdown.config.mts +11 -1
- package/lib/browser/index.d.mts.map +0 -1
- package/lib/browser/index.mjs.map +0 -1
- package/lib/container-BuAutHGg.d.mts.map +0 -1
- package/lib/container-DnzgpfBe.cjs.map +0 -1
- package/lib/container-Pb_Y4Z4x.mjs.map +0 -1
- package/lib/container-oGTgX2iX.d.cts.map +0 -1
- package/src/__tests__/async-local-storage.browser.spec.mts +0 -166
- package/src/__tests__/async-local-storage.spec.mts +0 -333
- package/src/__tests__/errors.spec.mts +0 -87
- package/src/__tests__/factory.spec.mts +0 -137
- package/src/__tests__/injectable.spec.mts +0 -246
- package/src/__tests__/request-scope.spec.mts +0 -416
- package/src/__tests__/service-instantiator.spec.mts +0 -410
- package/src/__tests__/service-locator-event-bus.spec.mts +0 -242
- package/src/__tests__/service-locator-manager.spec.mts +0 -300
- package/src/__tests__/service-locator.spec.mts +0 -966
- package/src/__tests__/unified-api.spec.mts +0 -130
- package/src/browser.mts +0 -11
- package/src/injectors.mts +0 -18
- package/src/internal/context/request-context.mts +0 -214
- package/src/internal/core/invalidator.mts +0 -437
- package/src/internal/core/service-locator.mts +0 -202
- package/src/internal/holder/base-holder-manager.mts +0 -238
- package/src/internal/holder/holder-manager.mts +0 -85
- package/src/internal/holder/request-storage.mts +0 -134
- package/src/internal/holder/singleton-storage.mts +0 -105
- package/src/testing/README.md +0 -80
- package/src/testing/__tests__/test-container.spec.mts +0 -173
package/lib/testing/index.d.mts
CHANGED
|
@@ -1,65 +1,394 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { T as Registry, t as Container, tt as InjectionToken } from "../container-CNiqesCL.mjs";
|
|
2
2
|
|
|
3
|
-
//#region src/testing/
|
|
3
|
+
//#region src/testing/types.d.mts
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Tracks method calls on a mocked service.
|
|
7
|
+
*/
|
|
8
|
+
interface MethodCallRecord {
|
|
9
|
+
method: string;
|
|
10
|
+
args: unknown[];
|
|
11
|
+
timestamp: number;
|
|
12
|
+
result?: unknown;
|
|
13
|
+
error?: Error;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Tracks lifecycle events for a service.
|
|
17
|
+
*/
|
|
18
|
+
interface LifecycleRecord {
|
|
19
|
+
event: 'created' | 'initialized' | 'destroyed';
|
|
20
|
+
timestamp: number;
|
|
21
|
+
instanceName: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Statistics about a mocked service.
|
|
25
|
+
*/
|
|
26
|
+
interface MockServiceStats {
|
|
27
|
+
instanceCount: number;
|
|
28
|
+
methodCalls: MethodCallRecord[];
|
|
29
|
+
lifecycleEvents: LifecycleRecord[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A node in the dependency graph.
|
|
33
|
+
*/
|
|
34
|
+
interface DependencyNode {
|
|
35
|
+
token: string;
|
|
36
|
+
instanceName: string;
|
|
37
|
+
scope: string;
|
|
38
|
+
dependencies: string[];
|
|
39
|
+
dependents: string[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Serializable dependency graph for snapshot testing.
|
|
43
|
+
*/
|
|
44
|
+
interface DependencyGraph {
|
|
45
|
+
nodes: Record<string, DependencyNode>;
|
|
46
|
+
rootTokens: string[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Binding configuration for TestContainer.
|
|
50
|
+
*/
|
|
51
|
+
interface BindingBuilder<T> {
|
|
52
|
+
/**
|
|
53
|
+
* Bind to a concrete value.
|
|
54
|
+
*/
|
|
55
|
+
toValue(value: T): void;
|
|
56
|
+
/**
|
|
57
|
+
* Bind to a class implementation.
|
|
58
|
+
*/
|
|
59
|
+
toClass<C extends new (...args: any[]) => T>(cls: C): void;
|
|
60
|
+
/**
|
|
61
|
+
* Bind to a factory function.
|
|
62
|
+
*/
|
|
63
|
+
toFactory(factory: () => T | Promise<T>): void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Provider configuration for UnitTestContainer.
|
|
67
|
+
*/
|
|
68
|
+
interface ProviderConfig<T = any> {
|
|
69
|
+
token: InjectionToken<T, any> | (new (...args: any[]) => T);
|
|
70
|
+
useValue?: T;
|
|
71
|
+
useClass?: new (...args: any[]) => T;
|
|
72
|
+
useFactory?: () => T | Promise<T>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Options for TestContainer.
|
|
76
|
+
*/
|
|
77
|
+
interface TestContainerOptions {
|
|
78
|
+
/**
|
|
79
|
+
* Parent registry. Defaults to globalRegistry.
|
|
80
|
+
* Pass `null` to create a completely isolated container.
|
|
81
|
+
*/
|
|
82
|
+
parentRegistry?: Registry | null;
|
|
83
|
+
/**
|
|
84
|
+
* Logger for debugging.
|
|
85
|
+
*/
|
|
86
|
+
logger?: Console | null;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Options for UnitTestContainer.
|
|
7
90
|
*/
|
|
8
|
-
|
|
9
|
-
private readonly container;
|
|
10
|
-
private readonly token;
|
|
11
|
-
constructor(container: TestContainer, token: InjectionToken<T, any>);
|
|
91
|
+
interface UnitTestContainerOptions {
|
|
12
92
|
/**
|
|
13
|
-
*
|
|
14
|
-
* This is useful for testing with mock values or constants.
|
|
15
|
-
* @param value The value to bind to the token
|
|
93
|
+
* List of providers to register. Only these services can be resolved.
|
|
16
94
|
*/
|
|
17
|
-
|
|
95
|
+
providers: ProviderConfig[];
|
|
18
96
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
97
|
+
* If true, unregistered dependencies will be auto-mocked instead of throwing.
|
|
98
|
+
* Default: false (throws on unregistered dependencies)
|
|
21
99
|
*/
|
|
22
|
-
|
|
100
|
+
allowUnregistered?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Logger for debugging.
|
|
103
|
+
*/
|
|
104
|
+
logger?: Console | null;
|
|
23
105
|
}
|
|
106
|
+
//#endregion
|
|
107
|
+
//#region src/testing/test-container.d.mts
|
|
108
|
+
type AnyToken$1 = InjectionToken<any, any> | (new (...args: any[]) => any);
|
|
24
109
|
/**
|
|
25
|
-
* TestContainer extends
|
|
26
|
-
*
|
|
110
|
+
* TestContainer extends Container with testing utilities.
|
|
111
|
+
*
|
|
112
|
+
* Provides simple value/class binding for integration/e2e tests,
|
|
113
|
+
* plus assertion helpers and dependency graph inspection.
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* const container = new TestContainer()
|
|
118
|
+
*
|
|
119
|
+
* // Bind mock values
|
|
120
|
+
* container.bind(DatabaseToken).toValue(mockDatabase)
|
|
121
|
+
* container.bind(UserService).toClass(MockUserService)
|
|
122
|
+
*
|
|
123
|
+
* // Use container normally
|
|
124
|
+
* const service = await container.get(MyService)
|
|
125
|
+
*
|
|
126
|
+
* // Assert on container state
|
|
127
|
+
* container.expectResolved(MyService)
|
|
128
|
+
* container.expectSingleton(MyService)
|
|
129
|
+
* ```
|
|
27
130
|
*/
|
|
28
131
|
declare class TestContainer extends Container {
|
|
29
|
-
|
|
132
|
+
private readonly testRegistry;
|
|
133
|
+
private readonly methodCalls;
|
|
134
|
+
private readonly lifecycleEvents;
|
|
135
|
+
private readonly instanceCounts;
|
|
136
|
+
private readonly boundTokens;
|
|
137
|
+
/**
|
|
138
|
+
* Creates a new TestContainer.
|
|
139
|
+
*
|
|
140
|
+
* @param options - Configuration options
|
|
141
|
+
* @param options.parentRegistry - Parent registry. Defaults to globalRegistry.
|
|
142
|
+
* Pass `null` for a completely isolated container.
|
|
143
|
+
* @param options.logger - Optional logger for debugging.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* // Uses globalRegistry as parent (default)
|
|
148
|
+
* const container = new TestContainer()
|
|
149
|
+
*
|
|
150
|
+
* // Isolated container (no access to @Injectable classes)
|
|
151
|
+
* const isolated = new TestContainer({ parentRegistry: null })
|
|
152
|
+
*
|
|
153
|
+
* // Custom parent registry
|
|
154
|
+
* const custom = new TestContainer({ parentRegistry: myRegistry })
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
constructor(options?: TestContainerOptions);
|
|
30
158
|
/**
|
|
31
159
|
* Creates a binding builder for the given token.
|
|
32
|
-
*
|
|
33
|
-
* @
|
|
34
|
-
*
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```ts
|
|
163
|
+
* container.bind(UserService).toValue(mockUserService)
|
|
164
|
+
* container.bind(DatabaseToken).toClass(MockDatabase)
|
|
165
|
+
* container.bind(ConfigToken).toFactory(() => ({ apiKey: 'test' }))
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
bind<T>(token: InjectionToken<T, any> | (new (...args: any[]) => T)): BindingBuilder<T>;
|
|
169
|
+
/**
|
|
170
|
+
* Clears all bindings and resets container state.
|
|
171
|
+
*/
|
|
172
|
+
clear(): Promise<void>;
|
|
173
|
+
/**
|
|
174
|
+
* Asserts that a service has been resolved at least once.
|
|
175
|
+
*/
|
|
176
|
+
expectResolved(token: AnyToken$1): void;
|
|
177
|
+
/**
|
|
178
|
+
* Asserts that a service has NOT been resolved.
|
|
179
|
+
*/
|
|
180
|
+
expectNotResolved(token: AnyToken$1): void;
|
|
181
|
+
/**
|
|
182
|
+
* Asserts that a service is registered as singleton scope.
|
|
183
|
+
*/
|
|
184
|
+
expectSingleton(token: AnyToken$1): void;
|
|
185
|
+
/**
|
|
186
|
+
* Asserts that a service is registered as transient scope.
|
|
187
|
+
*/
|
|
188
|
+
expectTransient(token: AnyToken$1): void;
|
|
189
|
+
/**
|
|
190
|
+
* Asserts that a service is registered as request scope.
|
|
191
|
+
*/
|
|
192
|
+
expectRequestScoped(token: AnyToken$1): void;
|
|
193
|
+
/**
|
|
194
|
+
* Asserts that two service resolutions return the same instance.
|
|
195
|
+
*/
|
|
196
|
+
expectSameInstance(token: AnyToken$1): Promise<void>;
|
|
197
|
+
/**
|
|
198
|
+
* Asserts that two service resolutions return different instances.
|
|
199
|
+
*/
|
|
200
|
+
expectDifferentInstances(token: AnyToken$1): Promise<void>;
|
|
201
|
+
/**
|
|
202
|
+
* Asserts that a service's onServiceInit was called.
|
|
203
|
+
*/
|
|
204
|
+
expectInitialized(token: AnyToken$1): void;
|
|
205
|
+
/**
|
|
206
|
+
* Asserts that a service's onServiceDestroy was called.
|
|
207
|
+
*/
|
|
208
|
+
expectDestroyed(token: AnyToken$1): void;
|
|
209
|
+
/**
|
|
210
|
+
* Asserts that a service has NOT been destroyed.
|
|
211
|
+
*/
|
|
212
|
+
expectNotDestroyed(token: AnyToken$1): void;
|
|
213
|
+
/**
|
|
214
|
+
* Records a method call for tracking.
|
|
215
|
+
* Call this from your mock implementations.
|
|
216
|
+
*/
|
|
217
|
+
recordMethodCall(token: AnyToken$1, method: string, args: unknown[], result?: unknown, error?: Error): void;
|
|
218
|
+
/**
|
|
219
|
+
* Records a lifecycle event for tracking.
|
|
220
|
+
*/
|
|
221
|
+
recordLifecycleEvent(token: AnyToken$1, event: 'created' | 'initialized' | 'destroyed', instanceName: string): void;
|
|
222
|
+
/**
|
|
223
|
+
* Asserts that a method was called on a service.
|
|
224
|
+
*/
|
|
225
|
+
expectCalled(token: AnyToken$1, method: string): void;
|
|
226
|
+
/**
|
|
227
|
+
* Asserts that a method was called with specific arguments.
|
|
228
|
+
*/
|
|
229
|
+
expectCalledWith(token: AnyToken$1, method: string, expectedArgs: unknown[]): void;
|
|
230
|
+
/**
|
|
231
|
+
* Asserts that a method was called a specific number of times.
|
|
232
|
+
*/
|
|
233
|
+
expectCallCount(token: AnyToken$1, method: string, count: number): void;
|
|
234
|
+
/**
|
|
235
|
+
* Gets all recorded method calls for a service.
|
|
236
|
+
*/
|
|
237
|
+
getMethodCalls(token: AnyToken$1): MethodCallRecord[];
|
|
238
|
+
/**
|
|
239
|
+
* Gets statistics about a mocked service.
|
|
240
|
+
*/
|
|
241
|
+
getServiceStats(token: AnyToken$1): MockServiceStats;
|
|
242
|
+
/**
|
|
243
|
+
* Clears all recorded method calls.
|
|
244
|
+
*/
|
|
245
|
+
clearMethodCalls(): void;
|
|
246
|
+
/**
|
|
247
|
+
* Gets the dependency graph for snapshot testing.
|
|
248
|
+
* Returns a serializable structure that can be used with vitest snapshots.
|
|
249
|
+
*/
|
|
250
|
+
getDependencyGraph(): DependencyGraph;
|
|
251
|
+
/**
|
|
252
|
+
* Gets a simplified dependency graph showing only token relationships.
|
|
253
|
+
* Useful for cleaner snapshot comparisons.
|
|
254
|
+
*/
|
|
255
|
+
getSimplifiedDependencyGraph(): Record<string, string[]>;
|
|
256
|
+
private resolveToken;
|
|
257
|
+
private registerValueBinding;
|
|
258
|
+
private registerClassBinding;
|
|
259
|
+
private registerFactoryBinding;
|
|
260
|
+
private argsMatch;
|
|
261
|
+
}
|
|
262
|
+
//#endregion
|
|
263
|
+
//#region src/testing/unit-test-container.d.mts
|
|
264
|
+
type AnyToken = InjectionToken<any, any> | (new (...args: any[]) => any);
|
|
265
|
+
/**
|
|
266
|
+
* UnitTestContainer for isolated unit testing.
|
|
267
|
+
*
|
|
268
|
+
* Only services explicitly listed in `providers` can be resolved.
|
|
269
|
+
* All method calls are automatically tracked via proxies.
|
|
270
|
+
* Unregistered dependencies throw by default, or can be auto-mocked.
|
|
271
|
+
*
|
|
272
|
+
* @example
|
|
273
|
+
* ```ts
|
|
274
|
+
* const container = new UnitTestContainer({
|
|
275
|
+
* providers: [
|
|
276
|
+
* { token: UserService, useClass: MockUserService },
|
|
277
|
+
* { token: ConfigToken, useValue: { apiUrl: 'test' } },
|
|
278
|
+
* ],
|
|
279
|
+
* })
|
|
280
|
+
*
|
|
281
|
+
* const service = await container.get(UserService)
|
|
282
|
+
*
|
|
283
|
+
* // All method calls are automatically tracked
|
|
284
|
+
* await service.findUser('123')
|
|
285
|
+
*
|
|
286
|
+
* container.expectCalled(UserService, 'findUser')
|
|
287
|
+
* container.expectCalledWith(UserService, 'findUser', ['123'])
|
|
288
|
+
* ```
|
|
289
|
+
*/
|
|
290
|
+
declare class UnitTestContainer extends Container {
|
|
291
|
+
private readonly testRegistry;
|
|
292
|
+
private readonly methodCalls;
|
|
293
|
+
private readonly lifecycleEvents;
|
|
294
|
+
private readonly instanceCounts;
|
|
295
|
+
private readonly registeredTokenIds;
|
|
296
|
+
private readonly autoMockedTokenIds;
|
|
297
|
+
private allowUnregistered;
|
|
298
|
+
constructor(options: UnitTestContainerOptions);
|
|
299
|
+
/**
|
|
300
|
+
* Enables auto-mocking for unregistered dependencies.
|
|
301
|
+
* Call this to switch from strict mode to auto-mock mode.
|
|
302
|
+
*/
|
|
303
|
+
enableAutoMocking(): this;
|
|
304
|
+
/**
|
|
305
|
+
* Disables auto-mocking (strict mode).
|
|
306
|
+
* Unregistered dependencies will throw.
|
|
307
|
+
*/
|
|
308
|
+
disableAutoMocking(): this;
|
|
309
|
+
/**
|
|
310
|
+
* Override get to wrap instances in tracking proxies.
|
|
311
|
+
*/
|
|
312
|
+
get(token: any, args?: unknown): Promise<any>;
|
|
313
|
+
/**
|
|
314
|
+
* Clears all state and disposes the container.
|
|
315
|
+
*/
|
|
316
|
+
clear(): Promise<void>;
|
|
317
|
+
/**
|
|
318
|
+
* Asserts that a service has been resolved at least once.
|
|
319
|
+
*/
|
|
320
|
+
expectResolved(token: AnyToken): void;
|
|
321
|
+
/**
|
|
322
|
+
* Asserts that a service has NOT been resolved.
|
|
323
|
+
*/
|
|
324
|
+
expectNotResolved(token: AnyToken): void;
|
|
325
|
+
/**
|
|
326
|
+
* Asserts that a service was auto-mocked (not in providers list).
|
|
327
|
+
*/
|
|
328
|
+
expectAutoMocked(token: AnyToken): void;
|
|
329
|
+
/**
|
|
330
|
+
* Asserts that a service was NOT auto-mocked (is in providers list).
|
|
331
|
+
*/
|
|
332
|
+
expectNotAutoMocked(token: AnyToken): void;
|
|
333
|
+
/**
|
|
334
|
+
* Records a lifecycle event for tracking.
|
|
335
|
+
*/
|
|
336
|
+
recordLifecycleEvent(token: AnyToken, event: 'created' | 'initialized' | 'destroyed', instanceName: string): void;
|
|
337
|
+
/**
|
|
338
|
+
* Asserts that a service's onServiceInit was called.
|
|
339
|
+
*/
|
|
340
|
+
expectInitialized(token: AnyToken): void;
|
|
341
|
+
/**
|
|
342
|
+
* Asserts that a service's onServiceDestroy was called.
|
|
343
|
+
*/
|
|
344
|
+
expectDestroyed(token: AnyToken): void;
|
|
345
|
+
/**
|
|
346
|
+
* Asserts that a service has NOT been destroyed.
|
|
347
|
+
*/
|
|
348
|
+
expectNotDestroyed(token: AnyToken): void;
|
|
349
|
+
/**
|
|
350
|
+
* Asserts that a method was called on a service.
|
|
351
|
+
*/
|
|
352
|
+
expectCalled(token: AnyToken, method: string): void;
|
|
353
|
+
/**
|
|
354
|
+
* Asserts that a method was NOT called on a service.
|
|
355
|
+
*/
|
|
356
|
+
expectNotCalled(token: AnyToken, method: string): void;
|
|
357
|
+
/**
|
|
358
|
+
* Asserts that a method was called with specific arguments.
|
|
359
|
+
*/
|
|
360
|
+
expectCalledWith(token: AnyToken, method: string, expectedArgs: unknown[]): void;
|
|
361
|
+
/**
|
|
362
|
+
* Asserts that a method was called a specific number of times.
|
|
363
|
+
*/
|
|
364
|
+
expectCallCount(token: AnyToken, method: string, count: number): void;
|
|
365
|
+
/**
|
|
366
|
+
* Gets all recorded method calls for a service.
|
|
367
|
+
*/
|
|
368
|
+
getMethodCalls(token: AnyToken): MethodCallRecord[];
|
|
369
|
+
/**
|
|
370
|
+
* Gets statistics about a service.
|
|
35
371
|
*/
|
|
36
|
-
|
|
37
|
-
bind<T>(token: InjectionToken<T, any>): TestBindingBuilder<T>;
|
|
372
|
+
getServiceStats(token: AnyToken): MockServiceStats;
|
|
38
373
|
/**
|
|
39
|
-
*
|
|
40
|
-
* This is a convenience method equivalent to bind(token).toValue(value).
|
|
41
|
-
* @param token The injection token to bind
|
|
42
|
-
* @param value The value to bind to the token
|
|
43
|
-
* @returns The TestContainer instance for chaining
|
|
374
|
+
* Clears all recorded method calls.
|
|
44
375
|
*/
|
|
45
|
-
|
|
46
|
-
bindValue<T>(token: InjectionToken<T, any>, value: T): TestContainer;
|
|
376
|
+
clearMethodCalls(): void;
|
|
47
377
|
/**
|
|
48
|
-
*
|
|
49
|
-
* This is a convenience method equivalent to bind(token).toClass(target).
|
|
50
|
-
* @param token The injection token to bind
|
|
51
|
-
* @param target The class constructor to bind to
|
|
52
|
-
* @returns The TestContainer instance for chaining
|
|
378
|
+
* Gets list of all registered provider token IDs.
|
|
53
379
|
*/
|
|
54
|
-
|
|
55
|
-
bindClass<T>(token: InjectionToken<T, any>, target: ClassType): TestContainer;
|
|
380
|
+
getRegisteredTokenIds(): ReadonlySet<string>;
|
|
56
381
|
/**
|
|
57
|
-
*
|
|
58
|
-
* This is useful for creating isolated test containers.
|
|
59
|
-
* @returns A new TestContainer instance
|
|
382
|
+
* Gets list of all auto-mocked token IDs.
|
|
60
383
|
*/
|
|
61
|
-
|
|
384
|
+
getAutoMockedTokenIds(): ReadonlySet<string>;
|
|
385
|
+
private resolveToken;
|
|
386
|
+
private registerProvider;
|
|
387
|
+
private registerValueBinding;
|
|
388
|
+
private registerClassBinding;
|
|
389
|
+
private registerFactoryBinding;
|
|
390
|
+
private argsMatch;
|
|
62
391
|
}
|
|
63
392
|
//#endregion
|
|
64
|
-
export {
|
|
393
|
+
export { BindingBuilder, DependencyGraph, DependencyNode, LifecycleRecord, MethodCallRecord, MockServiceStats, ProviderConfig, TestContainer, TestContainerOptions, UnitTestContainer, UnitTestContainerOptions };
|
|
65
394
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/testing/test-container.mts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/testing/types.mts","../../src/testing/test-container.mts","../../src/testing/unit-test-container.mts"],"sourcesContent":[],"mappings":"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"}
|