@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.
Files changed (263) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/README.md +117 -17
  3. package/lib/browser/container/abstract-container.d.mts +112 -0
  4. package/lib/browser/container/abstract-container.d.mts.map +1 -0
  5. package/lib/browser/container/abstract-container.mjs +100 -0
  6. package/lib/browser/container/abstract-container.mjs.map +1 -0
  7. package/lib/browser/container/container.d.mts +100 -0
  8. package/lib/browser/container/container.d.mts.map +1 -0
  9. package/lib/browser/container/container.mjs +424 -0
  10. package/lib/browser/container/container.mjs.map +1 -0
  11. package/lib/browser/container/scoped-container.d.mts +93 -0
  12. package/lib/browser/container/scoped-container.d.mts.map +1 -0
  13. package/lib/browser/container/scoped-container.mjs +119 -0
  14. package/lib/browser/container/scoped-container.mjs.map +1 -0
  15. package/lib/browser/decorators/factory.decorator.d.mts +26 -0
  16. package/lib/browser/decorators/factory.decorator.d.mts.map +1 -0
  17. package/lib/browser/decorators/factory.decorator.mjs +20 -0
  18. package/lib/browser/decorators/factory.decorator.mjs.map +1 -0
  19. package/lib/browser/decorators/injectable.decorator.d.mts +38 -0
  20. package/lib/browser/decorators/injectable.decorator.d.mts.map +1 -0
  21. package/lib/browser/decorators/injectable.decorator.mjs +21 -0
  22. package/lib/browser/decorators/injectable.decorator.mjs.map +1 -0
  23. package/lib/browser/enums/injectable-scope.enum.d.mts +18 -0
  24. package/lib/browser/enums/injectable-scope.enum.d.mts.map +1 -0
  25. package/lib/browser/enums/injectable-scope.enum.mjs +20 -0
  26. package/lib/browser/enums/injectable-scope.enum.mjs.map +1 -0
  27. package/lib/browser/enums/injectable-type.enum.d.mts +8 -0
  28. package/lib/browser/enums/injectable-type.enum.d.mts.map +1 -0
  29. package/lib/browser/enums/injectable-type.enum.mjs +10 -0
  30. package/lib/browser/enums/injectable-type.enum.mjs.map +1 -0
  31. package/lib/browser/errors/di-error.d.mts +43 -0
  32. package/lib/browser/errors/di-error.d.mts.map +1 -0
  33. package/lib/browser/errors/di-error.mjs +98 -0
  34. package/lib/browser/errors/di-error.mjs.map +1 -0
  35. package/lib/browser/event-emitter.d.mts +16 -0
  36. package/lib/browser/event-emitter.d.mts.map +1 -0
  37. package/lib/browser/event-emitter.mjs +320 -0
  38. package/lib/browser/event-emitter.mjs.map +1 -0
  39. package/lib/browser/index.d.mts +37 -1508
  40. package/lib/browser/index.mjs +29 -2650
  41. package/lib/browser/interfaces/container.interface.d.mts +59 -0
  42. package/lib/browser/interfaces/container.interface.d.mts.map +1 -0
  43. package/lib/browser/interfaces/factory.interface.d.mts +14 -0
  44. package/lib/browser/interfaces/factory.interface.d.mts.map +1 -0
  45. package/lib/browser/interfaces/on-service-destroy.interface.d.mts +7 -0
  46. package/lib/browser/interfaces/on-service-destroy.interface.d.mts.map +1 -0
  47. package/lib/browser/interfaces/on-service-init.interface.d.mts +7 -0
  48. package/lib/browser/interfaces/on-service-init.interface.d.mts.map +1 -0
  49. package/lib/browser/internal/context/async-local-storage.browser.mjs +20 -0
  50. package/lib/browser/internal/context/async-local-storage.browser.mjs.map +1 -0
  51. package/lib/browser/internal/context/async-local-storage.d.mts +9 -0
  52. package/lib/browser/internal/context/async-local-storage.d.mts.map +1 -0
  53. package/lib/browser/internal/context/async-local-storage.types.d.mts +11 -0
  54. package/lib/browser/internal/context/async-local-storage.types.d.mts.map +1 -0
  55. package/lib/browser/internal/context/factory-context.d.mts +23 -0
  56. package/lib/browser/internal/context/factory-context.d.mts.map +1 -0
  57. package/lib/browser/internal/context/resolution-context.d.mts +43 -0
  58. package/lib/browser/internal/context/resolution-context.d.mts.map +1 -0
  59. package/lib/browser/internal/context/resolution-context.mjs +56 -0
  60. package/lib/browser/internal/context/resolution-context.mjs.map +1 -0
  61. package/lib/browser/internal/context/service-initialization-context.d.mts +48 -0
  62. package/lib/browser/internal/context/service-initialization-context.d.mts.map +1 -0
  63. package/lib/browser/internal/context/sync-local-storage.mjs +53 -0
  64. package/lib/browser/internal/context/sync-local-storage.mjs.map +1 -0
  65. package/lib/browser/internal/core/instance-resolver.d.mts +119 -0
  66. package/lib/browser/internal/core/instance-resolver.d.mts.map +1 -0
  67. package/lib/browser/internal/core/instance-resolver.mjs +306 -0
  68. package/lib/browser/internal/core/instance-resolver.mjs.map +1 -0
  69. package/lib/browser/internal/core/name-resolver.d.mts +52 -0
  70. package/lib/browser/internal/core/name-resolver.d.mts.map +1 -0
  71. package/lib/browser/internal/core/name-resolver.mjs +118 -0
  72. package/lib/browser/internal/core/name-resolver.mjs.map +1 -0
  73. package/lib/browser/internal/core/scope-tracker.d.mts +65 -0
  74. package/lib/browser/internal/core/scope-tracker.d.mts.map +1 -0
  75. package/lib/browser/internal/core/scope-tracker.mjs +120 -0
  76. package/lib/browser/internal/core/scope-tracker.mjs.map +1 -0
  77. package/lib/browser/internal/core/service-initializer.d.mts +44 -0
  78. package/lib/browser/internal/core/service-initializer.d.mts.map +1 -0
  79. package/lib/browser/internal/core/service-initializer.mjs +109 -0
  80. package/lib/browser/internal/core/service-initializer.mjs.map +1 -0
  81. package/lib/browser/internal/core/service-invalidator.d.mts +81 -0
  82. package/lib/browser/internal/core/service-invalidator.d.mts.map +1 -0
  83. package/lib/browser/internal/core/service-invalidator.mjs +142 -0
  84. package/lib/browser/internal/core/service-invalidator.mjs.map +1 -0
  85. package/lib/browser/internal/core/token-resolver.d.mts +54 -0
  86. package/lib/browser/internal/core/token-resolver.d.mts.map +1 -0
  87. package/lib/browser/internal/core/token-resolver.mjs +77 -0
  88. package/lib/browser/internal/core/token-resolver.mjs.map +1 -0
  89. package/lib/browser/internal/holder/holder-storage.interface.d.mts +99 -0
  90. package/lib/browser/internal/holder/holder-storage.interface.d.mts.map +1 -0
  91. package/lib/browser/internal/holder/instance-holder.d.mts +101 -0
  92. package/lib/browser/internal/holder/instance-holder.d.mts.map +1 -0
  93. package/lib/browser/internal/holder/instance-holder.mjs +19 -0
  94. package/lib/browser/internal/holder/instance-holder.mjs.map +1 -0
  95. package/lib/browser/internal/holder/unified-storage.d.mts +53 -0
  96. package/lib/browser/internal/holder/unified-storage.d.mts.map +1 -0
  97. package/lib/browser/internal/holder/unified-storage.mjs +144 -0
  98. package/lib/browser/internal/holder/unified-storage.mjs.map +1 -0
  99. package/lib/browser/internal/lifecycle/circular-detector.d.mts +39 -0
  100. package/lib/browser/internal/lifecycle/circular-detector.d.mts.map +1 -0
  101. package/lib/browser/internal/lifecycle/circular-detector.mjs +55 -0
  102. package/lib/browser/internal/lifecycle/circular-detector.mjs.map +1 -0
  103. package/lib/browser/internal/lifecycle/lifecycle-event-bus.d.mts +18 -0
  104. package/lib/browser/internal/lifecycle/lifecycle-event-bus.d.mts.map +1 -0
  105. package/lib/browser/internal/lifecycle/lifecycle-event-bus.mjs +43 -0
  106. package/lib/browser/internal/lifecycle/lifecycle-event-bus.mjs.map +1 -0
  107. package/lib/browser/internal/stub-factory-class.d.mts +14 -0
  108. package/lib/browser/internal/stub-factory-class.d.mts.map +1 -0
  109. package/lib/browser/internal/stub-factory-class.mjs +18 -0
  110. package/lib/browser/internal/stub-factory-class.mjs.map +1 -0
  111. package/lib/browser/symbols/injectable-token.d.mts +5 -0
  112. package/lib/browser/symbols/injectable-token.d.mts.map +1 -0
  113. package/lib/browser/symbols/injectable-token.mjs +6 -0
  114. package/lib/browser/symbols/injectable-token.mjs.map +1 -0
  115. package/lib/browser/token/injection-token.d.mts +55 -0
  116. package/lib/browser/token/injection-token.d.mts.map +1 -0
  117. package/lib/browser/token/injection-token.mjs +100 -0
  118. package/lib/browser/token/injection-token.mjs.map +1 -0
  119. package/lib/browser/token/registry.d.mts +37 -0
  120. package/lib/browser/token/registry.d.mts.map +1 -0
  121. package/lib/browser/token/registry.mjs +86 -0
  122. package/lib/browser/token/registry.mjs.map +1 -0
  123. package/lib/browser/utils/default-injectors.d.mts +12 -0
  124. package/lib/browser/utils/default-injectors.d.mts.map +1 -0
  125. package/lib/browser/utils/default-injectors.mjs +13 -0
  126. package/lib/browser/utils/default-injectors.mjs.map +1 -0
  127. package/lib/browser/utils/get-injectable-token.d.mts +9 -0
  128. package/lib/browser/utils/get-injectable-token.d.mts.map +1 -0
  129. package/lib/browser/utils/get-injectable-token.mjs +13 -0
  130. package/lib/browser/utils/get-injectable-token.mjs.map +1 -0
  131. package/lib/browser/utils/get-injectors.d.mts +55 -0
  132. package/lib/browser/utils/get-injectors.d.mts.map +1 -0
  133. package/lib/browser/utils/get-injectors.mjs +121 -0
  134. package/lib/browser/utils/get-injectors.mjs.map +1 -0
  135. package/lib/browser/utils/types.d.mts +23 -0
  136. package/lib/browser/utils/types.d.mts.map +1 -0
  137. package/lib/{container-Pb_Y4Z4x.mjs → container-8-z89TyQ.mjs} +1269 -1305
  138. package/lib/container-8-z89TyQ.mjs.map +1 -0
  139. package/lib/{container-BuAutHGg.d.mts → container-CNiqesCL.d.mts} +600 -569
  140. package/lib/container-CNiqesCL.d.mts.map +1 -0
  141. package/lib/{container-DnzgpfBe.cjs → container-CaY2fDuk.cjs} +1287 -1329
  142. package/lib/container-CaY2fDuk.cjs.map +1 -0
  143. package/lib/{container-oGTgX2iX.d.cts → container-D-0Ho3qL.d.cts} +601 -565
  144. package/lib/container-D-0Ho3qL.d.cts.map +1 -0
  145. package/lib/index.cjs +13 -15
  146. package/lib/index.cjs.map +1 -1
  147. package/lib/index.d.cts +58 -223
  148. package/lib/index.d.cts.map +1 -1
  149. package/lib/index.d.mts +62 -222
  150. package/lib/index.d.mts.map +1 -1
  151. package/lib/index.mjs +5 -6
  152. package/lib/index.mjs.map +1 -1
  153. package/lib/testing/index.cjs +569 -311
  154. package/lib/testing/index.cjs.map +1 -1
  155. package/lib/testing/index.d.cts +370 -41
  156. package/lib/testing/index.d.cts.map +1 -1
  157. package/lib/testing/index.d.mts +370 -41
  158. package/lib/testing/index.d.mts.map +1 -1
  159. package/lib/testing/index.mjs +568 -305
  160. package/lib/testing/index.mjs.map +1 -1
  161. package/package.json +2 -1
  162. package/src/__tests__/circular-detector.spec.mts +193 -0
  163. package/src/__tests__/concurrent.spec.mts +368 -0
  164. package/src/__tests__/container.spec.mts +32 -30
  165. package/src/__tests__/di-error.spec.mts +351 -0
  166. package/src/__tests__/e2e.browser.spec.mts +0 -4
  167. package/src/__tests__/e2e.spec.mts +10 -19
  168. package/src/__tests__/event-emitter.spec.mts +232 -109
  169. package/src/__tests__/get-injectors.spec.mts +250 -39
  170. package/src/__tests__/injection-token.spec.mts +293 -349
  171. package/src/__tests__/library-findings.spec.mts +8 -8
  172. package/src/__tests__/registry.spec.mts +358 -210
  173. package/src/__tests__/resolution-context.spec.mts +255 -0
  174. package/src/__tests__/scope-tracker.spec.mts +598 -0
  175. package/src/__tests__/scope-upgrade.spec.mts +808 -0
  176. package/src/__tests__/scoped-container.spec.mts +595 -0
  177. package/src/__tests__/test-container.spec.mts +293 -0
  178. package/src/__tests__/token-resolver.spec.mts +207 -0
  179. package/src/__tests__/unified-storage.spec.mts +535 -0
  180. package/src/__tests__/unit-test-container.spec.mts +405 -0
  181. package/src/__type-tests__/container.spec-d.mts +180 -0
  182. package/src/__type-tests__/factory.spec-d.mts +15 -3
  183. package/src/__type-tests__/inject.spec-d.mts +115 -20
  184. package/src/__type-tests__/injectable.spec-d.mts +69 -52
  185. package/src/__type-tests__/injection-token.spec-d.mts +176 -0
  186. package/src/__type-tests__/scoped-container.spec-d.mts +212 -0
  187. package/src/container/abstract-container.mts +327 -0
  188. package/src/container/container.mts +142 -170
  189. package/src/container/scoped-container.mts +126 -208
  190. package/src/decorators/factory.decorator.mts +16 -11
  191. package/src/decorators/injectable.decorator.mts +20 -16
  192. package/src/enums/index.mts +2 -2
  193. package/src/enums/injectable-scope.enum.mts +1 -0
  194. package/src/enums/injectable-type.enum.mts +1 -0
  195. package/src/errors/di-error.mts +96 -0
  196. package/src/event-emitter.mts +3 -27
  197. package/src/index.mts +6 -153
  198. package/src/interfaces/container.interface.mts +13 -0
  199. package/src/interfaces/factory.interface.mts +1 -1
  200. package/src/interfaces/index.mts +1 -1
  201. package/src/internal/context/async-local-storage.mts +3 -2
  202. package/src/internal/context/async-local-storage.types.mts +1 -0
  203. package/src/internal/context/factory-context.mts +1 -0
  204. package/src/internal/context/index.mts +3 -1
  205. package/src/internal/context/resolution-context.mts +1 -0
  206. package/src/internal/context/service-initialization-context.mts +43 -0
  207. package/src/internal/core/index.mts +5 -4
  208. package/src/internal/core/instance-resolver.mts +461 -292
  209. package/src/internal/core/name-resolver.mts +196 -0
  210. package/src/internal/core/scope-tracker.mts +242 -0
  211. package/src/internal/core/{instantiator.mts → service-initializer.mts} +51 -29
  212. package/src/internal/core/service-invalidator.mts +290 -0
  213. package/src/internal/core/{token-processor.mts → token-resolver.mts} +17 -88
  214. package/src/internal/holder/holder-storage.interface.mts +11 -5
  215. package/src/internal/holder/index.mts +2 -5
  216. package/src/internal/holder/instance-holder.mts +1 -3
  217. package/src/internal/holder/unified-storage.mts +245 -0
  218. package/src/internal/index.mts +2 -1
  219. package/src/internal/lifecycle/circular-detector.mts +1 -0
  220. package/src/internal/lifecycle/index.mts +1 -1
  221. package/src/internal/lifecycle/lifecycle-event-bus.mts +1 -0
  222. package/src/internal/stub-factory-class.mts +16 -0
  223. package/src/symbols/injectable-token.mts +3 -1
  224. package/src/testing/index.mts +2 -0
  225. package/src/testing/test-container.mts +546 -85
  226. package/src/testing/types.mts +117 -0
  227. package/src/testing/unit-test-container.mts +509 -0
  228. package/src/token/injection-token.mts +41 -4
  229. package/src/token/registry.mts +75 -9
  230. package/src/utils/default-injectors.mts +16 -0
  231. package/src/utils/get-injectable-token.mts +2 -3
  232. package/src/utils/get-injectors.mts +26 -15
  233. package/src/utils/index.mts +3 -1
  234. package/src/utils/types.mts +1 -0
  235. package/tsdown.config.mts +11 -1
  236. package/lib/browser/index.d.mts.map +0 -1
  237. package/lib/browser/index.mjs.map +0 -1
  238. package/lib/container-BuAutHGg.d.mts.map +0 -1
  239. package/lib/container-DnzgpfBe.cjs.map +0 -1
  240. package/lib/container-Pb_Y4Z4x.mjs.map +0 -1
  241. package/lib/container-oGTgX2iX.d.cts.map +0 -1
  242. package/src/__tests__/async-local-storage.browser.spec.mts +0 -166
  243. package/src/__tests__/async-local-storage.spec.mts +0 -333
  244. package/src/__tests__/errors.spec.mts +0 -87
  245. package/src/__tests__/factory.spec.mts +0 -137
  246. package/src/__tests__/injectable.spec.mts +0 -246
  247. package/src/__tests__/request-scope.spec.mts +0 -416
  248. package/src/__tests__/service-instantiator.spec.mts +0 -410
  249. package/src/__tests__/service-locator-event-bus.spec.mts +0 -242
  250. package/src/__tests__/service-locator-manager.spec.mts +0 -300
  251. package/src/__tests__/service-locator.spec.mts +0 -966
  252. package/src/__tests__/unified-api.spec.mts +0 -130
  253. package/src/browser.mts +0 -11
  254. package/src/injectors.mts +0 -18
  255. package/src/internal/context/request-context.mts +0 -214
  256. package/src/internal/core/invalidator.mts +0 -437
  257. package/src/internal/core/service-locator.mts +0 -202
  258. package/src/internal/holder/base-holder-manager.mts +0 -238
  259. package/src/internal/holder/holder-manager.mts +0 -85
  260. package/src/internal/holder/request-storage.mts +0 -134
  261. package/src/internal/holder/singleton-storage.mts +0 -105
  262. package/src/testing/README.md +0 -80
  263. package/src/testing/__tests__/test-container.spec.mts +0 -173
@@ -1,65 +1,394 @@
1
- import { D as Registry, H as InjectionToken, J as Injectors, P as ClassType, t as Container } from "../container-BuAutHGg.mjs";
1
+ import { T as Registry, t as Container, tt as InjectionToken } from "../container-CNiqesCL.mjs";
2
2
 
3
- //#region src/testing/test-container.d.mts
3
+ //#region src/testing/types.d.mts
4
4
 
5
5
  /**
6
- * A binding builder for the TestContainer that allows chaining binding operations.
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
- declare class TestBindingBuilder<T> {
9
- private readonly container;
10
- private readonly token;
11
- constructor(container: TestContainer, token: InjectionToken<T, any>);
91
+ interface UnitTestContainerOptions {
12
92
  /**
13
- * Binds the token to a specific value.
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
- toValue(value: T): TestContainer;
95
+ providers: ProviderConfig[];
18
96
  /**
19
- * Binds the token to a class constructor.
20
- * @param target The class constructor to bind to
97
+ * If true, unregistered dependencies will be auto-mocked instead of throwing.
98
+ * Default: false (throws on unregistered dependencies)
21
99
  */
22
- toClass(target: ClassType): TestContainer;
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 the base Container with additional methods useful for testing.
26
- * It provides a simplified API for binding values and classes during test setup.
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
- constructor(registry?: Registry, logger?: Console | null, injectors?: Injectors);
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
- * This allows chaining binding operations like bind(Token).toValue(value).
33
- * @param token The injection token to bind
34
- * @returns A TestBindingBuilder for chaining binding operations
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
- bind<T>(token: ClassType): TestBindingBuilder<T>;
37
- bind<T>(token: InjectionToken<T, any>): TestBindingBuilder<T>;
372
+ getServiceStats(token: AnyToken): MockServiceStats;
38
373
  /**
39
- * Binds a value directly to a token.
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
- bindValue<T>(token: ClassType, value: T): TestContainer;
46
- bindValue<T>(token: InjectionToken<T, any>, value: T): TestContainer;
376
+ clearMethodCalls(): void;
47
377
  /**
48
- * Binds a class to a token.
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
- bindClass(token: ClassType, target: ClassType): TestContainer;
55
- bindClass<T>(token: InjectionToken<T, any>, target: ClassType): TestContainer;
380
+ getRegisteredTokenIds(): ReadonlySet<string>;
56
381
  /**
57
- * Creates a new TestContainer instance with the same configuration.
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
- createChild(): TestContainer;
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 { TestBindingBuilder, TestContainer };
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":";;;;;;;AAwBiB,cAXJ,kBAWI,CAAA,CAAA,CAAA,CAAA;EAAI,iBAAA,SAAA;EAoBH,iBAAA,KAAA;EAAY,WAAA,CAAA,SAAA,EA7BE,aA6BF,EAAA,KAAA,EA5BF,cA4BE,CA5Ba,CA4Bb,EAAA,GAAA,CAAA;EAAa;AAe3C;;;;EAgBiB,OAAA,CAAA,KAAA,EAnDA,CAmDA,CAAA,EAnDI,aAmDJ;EAA+B;;;;EACa,OAAA,CAAA,MAAA,EAhC3C,SAgC2C,CAAA,EAhC/B,aAgC+B;;;;;;AAiBvC,cAjCT,aAAA,SAAsB,SAAA,CAiCb;EAA+B,WAAA,CAAA,QAAA,CAAA,EA/BvC,QA+BuC,EAAA,MAAA,CAAA,EA9BzC,OA8ByC,GAAA,IAAA,EAAA,SAAA,CAAA,EA7BtC,SA6BsC;EAAI;;;;;;EAaH,IAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EA/BrC,SA+BqC,CAAA,EA/BzB,kBA+ByB,CA/BN,CA+BM,CAAA;EAAY,IAAA,CAAA,CAAA,CAAA,CAAA,KAAA,EA9BjD,cA8BiD,CA9BlC,CA8BkC,EAAA,GAAA,CAAA,CAAA,EA9BxB,kBA8BwB,CA9BL,CA8BK,CAAA;EAUjD;;;;;;;sBAxBK,kBAAkB,IAAI;sBACtB,eAAe,gBAAgB,IAAI;;;;;;;;mBAYtC,mBAAmB,YAAY;sBAC5B,eAAe,iBAAiB,YAAY;;;;;;iBAUjD"}
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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"}