@navios/di 0.8.0 → 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 (264) hide show
  1. package/CHANGELOG.md +87 -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 -1558
  40. package/lib/browser/index.mjs +29 -2749
  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-DAKOvAgr.mjs → container-8-z89TyQ.mjs} +1325 -1462
  138. package/lib/container-8-z89TyQ.mjs.map +1 -0
  139. package/lib/{container-Bp1W-pWJ.d.mts → container-CNiqesCL.d.mts} +598 -617
  140. package/lib/container-CNiqesCL.d.mts.map +1 -0
  141. package/lib/{container-DENMeJ87.cjs → container-CaY2fDuk.cjs} +1369 -1512
  142. package/lib/container-CaY2fDuk.cjs.map +1 -0
  143. package/lib/{container-YPwvmlK2.d.cts → container-D-0Ho3qL.d.cts} +598 -612
  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 +460 -302
  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-resolver.mts +122 -0
  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-Bp1W-pWJ.d.mts.map +0 -1
  239. package/lib/container-DAKOvAgr.mjs.map +0 -1
  240. package/lib/container-DENMeJ87.cjs.map +0 -1
  241. package/lib/container-YPwvmlK2.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 -225
  256. package/src/internal/core/invalidator.mts +0 -437
  257. package/src/internal/core/service-locator.mts +0 -202
  258. package/src/internal/core/token-processor.mts +0 -252
  259. package/src/internal/holder/base-holder-manager.mts +0 -334
  260. package/src/internal/holder/holder-manager.mts +0 -85
  261. package/src/internal/holder/request-storage.mts +0 -127
  262. package/src/internal/holder/singleton-storage.mts +0 -92
  263. package/src/testing/README.md +0 -80
  264. package/src/testing/__tests__/test-container.spec.mts +0 -173
@@ -1,9 +1,20 @@
1
+ import type { InjectionTokenSchemaType } from '../token/injection-token.mjs'
2
+ import type { FactoryRecord } from '../token/registry.mjs'
3
+
1
4
  export enum DIErrorCode {
2
5
  FactoryNotFound = 'FactoryNotFound',
3
6
  FactoryTokenNotResolved = 'FactoryTokenNotResolved',
4
7
  InstanceNotFound = 'InstanceNotFound',
5
8
  InstanceDestroying = 'InstanceDestroying',
6
9
  CircularDependency = 'CircularDependency',
10
+ TokenValidationError = 'TokenValidationError',
11
+ TokenSchemaRequiredError = 'TokenSchemaRequiredError',
12
+ ClassNotInjectable = 'ClassNotInjectable',
13
+ ScopeMismatchError = 'ScopeMismatchError',
14
+ PriorityConflictError = 'PriorityConflictError',
15
+ StorageError = 'StorageError',
16
+ InitializationError = 'InitializationError',
17
+ DependencyResolutionError = 'DependencyResolutionError',
7
18
  UnknownError = 'UnknownError',
8
19
  }
9
20
 
@@ -17,6 +28,7 @@ export class DIError extends Error {
17
28
  ) {
18
29
  super(message)
19
30
  this.context = context
31
+ this.name = 'DIError'
20
32
  }
21
33
 
22
34
  // Static factory methods for common error types
@@ -73,4 +85,88 @@ export class DIError extends Error {
73
85
  { cycle },
74
86
  )
75
87
  }
88
+
89
+ static tokenValidationError(
90
+ message: string,
91
+ schema: InjectionTokenSchemaType | undefined,
92
+ value: unknown,
93
+ ): DIError {
94
+ return new DIError(DIErrorCode.TokenValidationError, message, {
95
+ schema,
96
+ value,
97
+ })
98
+ }
99
+
100
+ static tokenSchemaRequiredError(token: string | symbol | unknown): DIError {
101
+ return new DIError(
102
+ DIErrorCode.TokenSchemaRequiredError,
103
+ `Token ${token?.toString() ?? 'unknown'} requires schema arguments and cannot be used with addInstance. Use BoundInjectionToken or provide arguments when resolving.`,
104
+ { token },
105
+ )
106
+ }
107
+
108
+ static classNotInjectable(className: string): DIError {
109
+ return new DIError(
110
+ DIErrorCode.ClassNotInjectable,
111
+ `Class ${className} is not decorated with @Injectable.`,
112
+ { className },
113
+ )
114
+ }
115
+
116
+ static scopeMismatchError(
117
+ token: string | symbol | unknown,
118
+ expectedScope: string,
119
+ actualScope: string,
120
+ ): DIError {
121
+ return new DIError(
122
+ DIErrorCode.ScopeMismatchError,
123
+ `Scope mismatch for ${token?.toString() ?? 'unknown'}: expected ${expectedScope}, got ${actualScope}`,
124
+ { token, expectedScope, actualScope },
125
+ )
126
+ }
127
+
128
+ static priorityConflictError(
129
+ token: string | symbol | unknown,
130
+ records: FactoryRecord[],
131
+ ): DIError {
132
+ return new DIError(
133
+ DIErrorCode.PriorityConflictError,
134
+ `Priority conflict for ${token?.toString() ?? 'unknown'}: multiple bindings with same priority`,
135
+ { token, records },
136
+ )
137
+ }
138
+
139
+ static storageError(
140
+ message: string,
141
+ operation: string,
142
+ instanceName?: string,
143
+ ): DIError {
144
+ return new DIError(DIErrorCode.StorageError, `Storage error: ${message}`, {
145
+ operation,
146
+ instanceName,
147
+ })
148
+ }
149
+
150
+ static initializationError(
151
+ serviceName: string,
152
+ error: Error | string,
153
+ ): DIError {
154
+ return new DIError(
155
+ DIErrorCode.InitializationError,
156
+ `Service ${serviceName} initialization failed: ${error instanceof Error ? error.message : error}`,
157
+ { serviceName, error },
158
+ )
159
+ }
160
+
161
+ static dependencyResolutionError(
162
+ serviceName: string,
163
+ dependencyName: string,
164
+ error: Error | string,
165
+ ): DIError {
166
+ return new DIError(
167
+ DIErrorCode.DependencyResolutionError,
168
+ `Failed to resolve dependency ${dependencyName} for service ${serviceName}: ${error instanceof Error ? error.message : error}`,
169
+ { serviceName, dependencyName, error },
170
+ )
171
+ }
76
172
  }
@@ -2,7 +2,8 @@
2
2
  /* eslint-disable @typescript-eslint/no-empty-object-type */
3
3
  /* eslint-disable @typescript-eslint/no-unsafe-function-type */
4
4
 
5
- import { Injectable, InjectableScope } from './index.mjs'
5
+ import { Injectable } from './decorators/index.mjs'
6
+ import { InjectableScope } from './enums/index.mjs'
6
7
 
7
8
  /* eslint-disable @typescript-eslint/no-explicit-any */
8
9
  export type EventsConfig = {
@@ -17,33 +18,8 @@ export type EventsArgs<
17
18
  Name extends EventsNames<Events>,
18
19
  > = Events[Name] extends any[] ? Events[Name] : []
19
20
 
20
- export type ChannelEmitter<
21
- Events extends EventsConfig,
22
- Ns extends string,
23
- E extends EventsNames<Events>,
24
- > = {
25
- emit<Args extends EventsArgs<Events, E>>(
26
- ns: Ns,
27
- event: E,
28
- ...args: Args
29
- ): Promise<any>
30
- }
31
-
32
- export interface EventEmitterInterface<Events extends EventsConfig> {
33
- on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(
34
- event: E,
35
- listener: (...args: Args) => void | Promise<void>,
36
- ): () => void
37
- emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(
38
- event: E,
39
- ...args: Args
40
- ): void | Promise<void>
41
- }
42
-
43
21
  @Injectable({ scope: InjectableScope.Transient })
44
- export class EventEmitter<Events extends EventsConfig = {}>
45
- implements EventEmitterInterface<Events>
46
- {
22
+ export class EventEmitter<Events extends EventsConfig = {}> {
47
23
  private listeners: Map<EventsNames<Events>, Set<Function>> = new Map()
48
24
 
49
25
  on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(
package/src/index.mts CHANGED
@@ -1,157 +1,10 @@
1
- /**
2
- * @navios/di - Dependency Injection Library
3
- *
4
- * This library provides a flexible dependency injection system with support for:
5
- * - Singleton and request-scoped services
6
- * - Factory-based and class-based service instantiation
7
- * - Circular dependency detection
8
- * - Schema validation for service arguments
9
- * - Lifecycle hooks (onServiceInit, onServiceDestroy)
10
- */
11
-
12
- // ============================================================================
13
- // PUBLIC API - Container
14
- // ============================================================================
15
-
16
- export { Container } from './container/container.mjs'
17
- export { ScopedContainer } from './container/scoped-container.mjs'
18
-
19
- // ============================================================================
20
- // PUBLIC API - Tokens
21
- // ============================================================================
22
-
23
- export {
24
- InjectionToken,
25
- BoundInjectionToken,
26
- FactoryInjectionToken,
27
- type ClassType,
28
- type ClassTypeWithoutArguments,
29
- type ClassTypeWithArgument,
30
- type ClassTypeWithOptionalArgument,
31
- type ClassTypeWithInstance,
32
- type ClassTypeWithInstanceAndArgument,
33
- type ClassTypeWithInstanceAndOptionalArgument,
34
- type AnyInjectableType,
35
- type InjectionTokenType,
36
- type InjectionTokenSchemaType,
37
- } from './token/injection-token.mjs'
38
-
39
- export {
40
- Registry,
41
- globalRegistry,
42
- type FactoryRecord,
43
- } from './token/registry.mjs'
44
-
45
- // ============================================================================
46
- // PUBLIC API - Decorators
47
- // ============================================================================
48
-
1
+ export * from './container/index.mjs'
49
2
  export * from './decorators/index.mjs'
50
-
51
- // ============================================================================
52
- // PUBLIC API - Enums
53
- // ============================================================================
54
-
55
3
  export * from './enums/index.mjs'
56
-
57
- // ============================================================================
58
- // PUBLIC API - Interfaces
59
- // ============================================================================
60
-
61
- export * from './interfaces/index.mjs'
62
-
63
- // ============================================================================
64
- // PUBLIC API - Errors
65
- // ============================================================================
66
-
67
4
  export * from './errors/index.mjs'
68
-
69
- // ============================================================================
70
- // PUBLIC API - Utilities
71
- // ============================================================================
72
-
73
- export * from './utils/index.mjs'
74
-
75
- // ============================================================================
76
- // PUBLIC API - Symbols
77
- // ============================================================================
78
-
5
+ export * from './interfaces/index.mjs'
6
+ export * from './internal/index.mjs'
79
7
  export * from './symbols/index.mjs'
80
-
81
- // ============================================================================
82
- // PUBLIC API - Event Emitter
83
- // ============================================================================
84
-
85
- export { EventEmitter } from './event-emitter.mjs'
86
-
87
- // ============================================================================
88
- // PUBLIC API - Injectors
89
- // ============================================================================
90
-
91
- export {
92
- defaultInjectors,
93
- asyncInject,
94
- inject,
95
- optional,
96
- wrapSyncInit,
97
- provideFactoryContext,
98
- } from './injectors.mjs'
99
-
100
- // ============================================================================
101
- // INTERNAL API (exported for advanced use cases)
102
- // ============================================================================
103
-
104
- // Context types
105
- export type { FactoryContext } from './internal/context/factory-context.mjs'
106
- export {
107
- type RequestContext,
108
- type RequestContextHolder,
109
- DefaultRequestContext,
110
- createRequestContext,
111
- } from './internal/context/request-context.mjs'
112
- export {
113
- type ResolutionContextData,
114
- withResolutionContext,
115
- getCurrentResolutionContext,
116
- withoutResolutionContext,
117
- } from './internal/context/resolution-context.mjs'
118
-
119
- // Holder types
120
- export {
121
- InstanceStatus,
122
- type InstanceHolder,
123
- type InstanceEffect,
124
- type InstanceDestroyListener,
125
- type InstanceHolderCreating,
126
- type InstanceHolderCreated,
127
- type InstanceHolderDestroying,
128
- type InstanceHolderError,
129
- } from './internal/holder/instance-holder.mjs'
130
-
131
- export {
132
- BaseHolderManager,
133
- type HolderReadyResult,
134
- } from './internal/holder/base-holder-manager.mjs'
135
-
136
- export { HolderManager } from './internal/holder/holder-manager.mjs'
137
-
138
- export {
139
- type HolderGetResult,
140
- type IHolderStorage,
141
- } from './internal/holder/holder-storage.interface.mjs'
142
-
143
- export { SingletonStorage } from './internal/holder/singleton-storage.mjs'
144
-
145
- export { RequestStorage } from './internal/holder/request-storage.mjs'
146
-
147
- // Lifecycle
148
- export { LifecycleEventBus } from './internal/lifecycle/lifecycle-event-bus.mjs'
149
-
150
- export { CircularDetector } from './internal/lifecycle/circular-detector.mjs'
151
-
152
- // Core engine
153
- export { ServiceLocator } from './internal/core/service-locator.mjs'
154
- export { InstanceResolver } from './internal/core/instance-resolver.mjs'
155
- export { Instantiator } from './internal/core/instantiator.mjs'
156
- export { Invalidator } from './internal/core/invalidator.mjs'
157
- export { TokenProcessor } from './internal/core/token-processor.mjs'
8
+ export * from './token/index.mjs'
9
+ export * from './utils/index.mjs'
10
+ export * from './event-emitter.mjs'
@@ -62,6 +62,19 @@ export interface IContainer {
62
62
  */
63
63
  isRegistered(token: any): boolean
64
64
 
65
+ /**
66
+ * Adds an instance to the container.
67
+ * Accepts class types, InjectionTokens, and BoundInjectionTokens.
68
+ * Rejects InjectionTokens with required schemas (use BoundInjectionToken instead).
69
+ *
70
+ * @param token The class type, InjectionToken, or BoundInjectionToken to register the instance for
71
+ * @param instance The instance to store
72
+ */
73
+ addInstance<T>(
74
+ token: ClassType | InjectionToken<T, any> | BoundInjectionToken<T, any>,
75
+ instance: T,
76
+ ): void
77
+
65
78
  /**
66
79
  * Disposes the container and cleans up all resources.
67
80
  */
@@ -1,4 +1,4 @@
1
- import { z } from 'zod/v4'
1
+ import type { z } from 'zod/v4'
2
2
 
3
3
  import type { FactoryContext } from '../internal/context/factory-context.mjs'
4
4
  import type { InjectionTokenSchemaType } from '../token/injection-token.mjs'
@@ -1,4 +1,4 @@
1
1
  export * from './container.interface.mjs'
2
2
  export * from './factory.interface.mjs'
3
- export * from './on-service-init.interface.mjs'
4
3
  export * from './on-service-destroy.interface.mjs'
4
+ export * from './on-service-init.interface.mjs'
@@ -1,3 +1,5 @@
1
+ import type { IAsyncLocalStorage } from './async-local-storage.types.mjs'
2
+
1
3
  import { AsyncLocalStorage } from 'node:async_hooks'
2
4
 
3
5
  /**
@@ -14,8 +16,6 @@ import { AsyncLocalStorage } from 'node:async_hooks'
14
16
  * and works with both ESM and CJS builds.
15
17
  */
16
18
 
17
- import type { IAsyncLocalStorage } from './async-local-storage.types.mjs'
18
-
19
19
  export type { IAsyncLocalStorage }
20
20
 
21
21
  const isProduction = process.env.NODE_ENV === 'production'
@@ -66,3 +66,4 @@ export function createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {
66
66
  export function isUsingNativeAsyncLocalStorage(): boolean {
67
67
  return getModule().isUsingNativeAsyncLocalStorage()
68
68
  }
69
+
@@ -5,3 +5,4 @@ export interface IAsyncLocalStorage<T> {
5
5
  run<R>(store: T, fn: () => R): R
6
6
  getStore(): T | undefined
7
7
  }
8
+
@@ -16,3 +16,4 @@ export interface FactoryContext {
16
16
  container: IContainer
17
17
  addDestroyListener: (listener: () => void) => void
18
18
  }
19
+
@@ -1,3 +1,5 @@
1
+ export * from './async-local-storage.mjs'
2
+ export * from './async-local-storage.types.mjs'
1
3
  export * from './factory-context.mjs'
2
4
  export * from './resolution-context.mjs'
3
- export * from './request-context.mjs'
5
+ export * from './service-initialization-context.mjs'
@@ -79,3 +79,4 @@ export function withoutResolutionContext<T>(fn: () => T): T {
79
79
  fn,
80
80
  )
81
81
  }
82
+
@@ -0,0 +1,43 @@
1
+ import type { InjectableScope } from '../../enums/index.mjs'
2
+ import type { IContainer } from '../../interfaces/container.interface.mjs'
3
+ import type { Injectors } from '../../utils/index.mjs'
4
+
5
+ /**
6
+ * Context provided to injectors during service initialization.
7
+ *
8
+ * Extends FactoryContext with additional tracking information about
9
+ * the service being initialized, its dependencies, and scope.
10
+ * Used for scope upgrade tracking and dependency management.
11
+ */
12
+ export interface ServiceInitializationContext {
13
+ inject: Injectors['asyncInject']
14
+ /**
15
+ * The container instance for dependency resolution.
16
+ * This may be either a Container or ScopedContainer.
17
+ */
18
+ container: IContainer
19
+ addDestroyListener: (listener: () => void) => void
20
+ getDestroyListeners: () => (() => void)[]
21
+ /**
22
+ * The name of the service being initialized.
23
+ */
24
+ serviceName: string
25
+ /**
26
+ * Set of dependency names that this service depends on.
27
+ * Automatically populated as dependencies are resolved.
28
+ */
29
+ dependencies: Set<string>
30
+ /**
31
+ * The scope of the service being initialized.
32
+ */
33
+ scope: InjectableScope
34
+ /**
35
+ * Track a dependency that was resolved.
36
+ * Used for scope upgrade tracking - if a Singleton service
37
+ * resolves a Request dependency, the scope can be upgraded.
38
+ *
39
+ * @param name The name of the dependency
40
+ * @param scope The scope of the dependency
41
+ */
42
+ trackDependency(name: string, scope: InjectableScope): void
43
+ }
@@ -1,5 +1,6 @@
1
- export * from './service-locator.mjs'
2
1
  export * from './instance-resolver.mjs'
3
- export * from './instantiator.mjs'
4
- export * from './invalidator.mjs'
5
- export * from './token-processor.mjs'
2
+ export * from './name-resolver.mjs'
3
+ export * from './scope-tracker.mjs'
4
+ export * from './service-initializer.mjs'
5
+ export * from './service-invalidator.mjs'
6
+ export * from './token-resolver.mjs'