@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
package/lib/index.d.mts CHANGED
@@ -1,35 +1,47 @@
1
- import { $ as InjectRequest, A as InjectableScope, B as ClassTypeWithoutArguments, C as InstanceStatus, D as Registry, E as FactoryRecord, F as ClassTypeWithArgument, G as OptionalInjectionTokenSchemaType, H as InjectionToken, I as ClassTypeWithInstance, J as Injectors, K as FactoryContext, L as ClassTypeWithInstanceAndArgument, M as BaseInjectionTokenSchemaType, N as BoundInjectionToken, O as globalRegistry, P as ClassType, Q as FactorableWithArgs, R as ClassTypeWithInstanceAndOptionalArgument, S as InstanceHolderError, T as DIErrorCode, U as InjectionTokenSchemaType, V as FactoryInjectionToken, W as InjectionTokenType, X as IContainer, Y as getInjectors, Z as Factorable, _ as InstanceEffect, a as HolderManager, at as UnionToIntersection, b as InstanceHolderCreating, c as DefaultRequestContext, d as createRequestContext, et as InjectState, f as BaseHolderManager, g as InstanceDestroyListener, h as IHolderStorage, i as Invalidator, it as UnionToArray, j as AnyInjectableType, k as InjectableType, l as RequestContext, m as HolderGetResult, n as ServiceLocator, nt as Join, o as LifecycleEventBus, ot as UnionToOvlds, p as HolderReadyResult, q as getInjectableToken, r as TokenProcessor, rt as PopUnion, s as ScopedContainer, t as Container, tt as IsUnion, u as RequestContextHolder, v as InstanceHolder, w as DIError, x as InstanceHolderDestroying, y as InstanceHolderCreated, z as ClassTypeWithOptionalArgument } from "./container-Bp1W-pWJ.mjs";
2
- import { ZodObject, ZodOptional, z } from "zod/v4";
1
+ import { $ as ClassTypeWithoutArguments, A as Injectors, B as PopUnion, C as NameResolver, D as Factorable, E as globalRegistry, F as IContainer, G as BaseInjectionTokenSchemaType, H as UnionToIntersection, I as InjectRequest, J as ClassTypeWithArgument, K as BoundInjectionToken, L as InjectState, M as ServiceInitializationContext, N as InjectableType, O as FactorableWithArgs, P as InjectableScope, Q as ClassTypeWithOptionalArgument, R as IsUnion, S as DIErrorCode, T as Registry, U as UnionToOvlds, V as UnionToArray, W as AnyInjectableType, X as ClassTypeWithInstanceAndArgument, Y as ClassTypeWithInstance, Z as ClassTypeWithInstanceAndOptionalArgument, _ as InstanceHolderCreating, a as ScopedContainer, b as InstanceStatus, c as ClearAllOptions, d as LifecycleEventBus, et as FactoryInjectionToken, f as HolderGetResult, g as InstanceHolderCreated, h as InstanceHolder, i as ScopeTracker, it as OptionalInjectionTokenSchemaType, j as getInjectors, k as FactoryContext, l as InvalidationOptions, m as InstanceDestroyListener, n as InstanceResolver, nt as InjectionTokenSchemaType, o as UnifiedStorage, p as IHolderStorage, q as ClassType, r as ServiceInitializer, rt as InjectionTokenType, s as TokenResolver, t as Container, tt as InjectionToken, u as ServiceInvalidator, v as InstanceHolderDestroying, w as FactoryRecord, x as DIError, y as InstanceHolderError, z as Join } from "./container-CNiqesCL.mjs";
2
+ import { z } from "zod/v4";
3
3
 
4
- //#region src/interfaces/on-service-init.interface.d.mts
5
- interface OnServiceInit {
6
- onServiceInit(): Promise<void> | void;
7
- }
4
+ //#region src/utils/default-injectors.d.mts
5
+ declare const defaultInjectors: Injectors;
6
+ declare const inject: Injectors['inject'];
7
+ declare const optional: Injectors['optional'];
8
+ declare const asyncInject: Injectors['asyncInject'];
9
+ declare const wrapSyncInit: Injectors['wrapSyncInit'];
10
+ declare const provideFactoryContext: Injectors['provideFactoryContext'];
11
+ //#endregion
12
+ //#region src/utils/get-injectable-token.d.mts
13
+ declare function getInjectableToken<R>(target: ClassType): R extends {
14
+ create(...args: any[]): infer V;
15
+ } ? InjectionToken<V> : InjectionToken<R>;
8
16
  //#endregion
9
17
  //#region src/interfaces/on-service-destroy.interface.d.mts
10
18
  interface OnServiceDestroy {
11
19
  onServiceDestroy(): Promise<void> | void;
12
20
  }
13
21
  //#endregion
22
+ //#region src/interfaces/on-service-init.interface.d.mts
23
+ interface OnServiceInit {
24
+ onServiceInit(): Promise<void> | void;
25
+ }
26
+ //#endregion
14
27
  //#region src/decorators/factory.decorator.d.mts
15
28
  interface FactoryOptions {
16
29
  scope?: InjectableScope;
17
30
  token?: InjectionToken<any, any>;
18
31
  registry?: Registry;
32
+ priority?: number;
19
33
  }
20
34
  declare function Factory<R>(options?: {
21
35
  scope?: InjectableScope;
22
36
  registry?: Registry;
37
+ priority?: number;
23
38
  }): <T extends ClassTypeWithInstance<Factorable<R>>>(target: T, context?: ClassDecoratorContext) => T;
24
39
  declare function Factory<R, S>(options: {
25
40
  scope?: InjectableScope;
26
41
  token: InjectionToken<R, S>;
27
42
  registry?: Registry;
28
- }): R extends undefined ? never : S extends InjectionTokenSchemaType ? <T extends ClassTypeWithInstance<FactorableWithArgs<R, S>>>(
29
- // #2.2.1 Token have a schema
30
- target: T, context?: ClassDecoratorContext) => T : S extends undefined ? <T extends ClassTypeWithInstance<Factorable<R>>>(
31
- // #2.3.1 Token without a schema
32
- target: T, context?: ClassDecoratorContext) => T : never;
43
+ priority?: number;
44
+ }): R extends undefined ? never : S extends InjectionTokenSchemaType ? <T extends ClassTypeWithInstance<FactorableWithArgs<R, S>>>(target: T, context?: ClassDecoratorContext) => T : S extends undefined ? <T extends ClassTypeWithInstance<Factorable<R>>>(target: T, context?: ClassDecoratorContext) => T : never;
33
45
  //#endregion
34
46
  //#region src/decorators/injectable.decorator.d.mts
35
47
  interface InjectableOptions {
@@ -37,62 +49,43 @@ interface InjectableOptions {
37
49
  token?: InjectionToken<any, any>;
38
50
  schema?: InjectionTokenSchemaType;
39
51
  registry?: Registry;
52
+ priority?: number;
40
53
  }
41
54
  declare function Injectable(): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
42
55
  declare function Injectable(options: {
43
56
  scope?: InjectableScope;
44
57
  registry: Registry;
58
+ priority?: number;
45
59
  }): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
46
60
  declare function Injectable(options: {
47
61
  scope: InjectableScope;
62
+ priority?: number;
48
63
  }): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
49
64
  declare function Injectable<Schema extends InjectionTokenSchemaType>(options: {
50
65
  scope?: InjectableScope;
51
66
  schema: Schema;
52
67
  registry?: Registry;
68
+ priority?: number;
53
69
  }): <T extends ClassTypeWithArgument<z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T;
54
70
  declare function Injectable<Type, Schema>(options: {
55
71
  scope?: InjectableScope;
56
72
  token: InjectionToken<Type, Schema>;
57
73
  registry?: Registry;
58
- }): Schema extends BaseInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithArgument<z.output<Schema>>>(
59
- // #3.1.1 Typeless token
60
- target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndArgument<Type, z.output<Schema>>>(
61
- // #3.1.2 Typed token
62
- target: T, context?: ClassDecoratorContext) => T : Schema extends OptionalInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithOptionalArgument<z.output<Schema>>>(
63
- // #3.2.1 Typeless token
64
- target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndOptionalArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends undefined ? <R extends ClassTypeWithInstance<Type>>(
65
- // #3.3.1 Token must have a type
66
- target: R, context?: ClassDecoratorContext) => R : never;
74
+ priority?: number;
75
+ }): Schema extends BaseInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithArgument<z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends OptionalInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithOptionalArgument<z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndOptionalArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends undefined ? <R extends ClassTypeWithInstance<Type>>(target: R, context?: ClassDecoratorContext) => R : never;
67
76
  //#endregion
68
- //#region src/symbols/injectable-token.d.mts
69
- declare const InjectableTokenMeta: unique symbol;
70
- //#endregion
71
- //#region src/event-emitter.d.mts
72
- type EventsConfig = {
73
- [event: string]: any[];
74
- };
75
- type EventsNames<Events extends EventsConfig> = Exclude<keyof Events, symbol | number>;
76
- type EventsArgs<Events extends EventsConfig, Name extends EventsNames<Events>> = Events[Name] extends any[] ? Events[Name] : [];
77
- interface EventEmitterInterface<Events extends EventsConfig> {
78
- on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
79
- emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): void | Promise<void>;
80
- }
81
- declare class EventEmitter<Events extends EventsConfig = {}> implements EventEmitterInterface<Events> {
82
- private listeners;
83
- on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
84
- off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): void;
85
- once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
86
- emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): Promise<any>;
77
+ //#region src/internal/context/async-local-storage.types.d.mts
78
+ /**
79
+ * Interface matching the subset of AsyncLocalStorage API we use.
80
+ */
81
+ interface IAsyncLocalStorage<T> {
82
+ run<R>(store: T, fn: () => R): R;
83
+ getStore(): T | undefined;
87
84
  }
88
85
  //#endregion
89
- //#region src/injectors.d.mts
90
- declare const defaultInjectors: Injectors;
91
- declare const asyncInject: Injectors['asyncInject'];
92
- declare const inject: Injectors['inject'];
93
- declare const optional: Injectors['optional'];
94
- declare const wrapSyncInit: Injectors['wrapSyncInit'];
95
- declare const provideFactoryContext: Injectors['provideFactoryContext'];
86
+ //#region src/internal/context/async-local-storage.d.mts
87
+ declare function createAsyncLocalStorage<T>(): IAsyncLocalStorage<T>;
88
+ declare function isUsingNativeAsyncLocalStorage(): boolean;
96
89
  //#endregion
97
90
  //#region src/internal/context/resolution-context.d.mts
98
91
  /**
@@ -132,53 +125,6 @@ declare function getCurrentResolutionContext(): ResolutionContextData | undefine
132
125
  */
133
126
  declare function withoutResolutionContext<T>(fn: () => T): T;
134
127
  //#endregion
135
- //#region src/internal/holder/singleton-storage.d.mts
136
- /**
137
- * Storage implementation for Singleton-scoped services.
138
- *
139
- * Wraps a HolderManager instance and provides the IHolderStorage interface.
140
- * This allows the InstanceResolver to work with singleton storage
141
- * using the same interface as request-scoped storage.
142
- */
143
- declare class SingletonStorage implements IHolderStorage {
144
- private readonly manager;
145
- readonly scope = InjectableScope.Singleton;
146
- constructor(manager: HolderManager);
147
- get<T = unknown>(instanceName: string): HolderGetResult<T>;
148
- set(instanceName: string, holder: InstanceHolder): void;
149
- delete(instanceName: string): boolean;
150
- createHolder<T>(instanceName: string, type: InjectableType, deps: Set<string>): [ReturnType<typeof Promise.withResolvers<[undefined, T]>>, InstanceHolder<T>];
151
- handles(scope: InjectableScope): boolean;
152
- getAllNames(): string[];
153
- forEach(callback: (name: string, holder: InstanceHolder) => void): void;
154
- findByInstance(instance: unknown): InstanceHolder | null;
155
- findDependents(instanceName: string): string[];
156
- }
157
- //#endregion
158
- //#region src/internal/holder/request-storage.d.mts
159
- /**
160
- * Storage implementation for Request-scoped services.
161
- *
162
- * Wraps a RequestContext instance from a ScopedContainer and provides
163
- * the IHolderStorage interface. This allows the InstanceResolver to work
164
- * with request-scoped storage using the same interface as singleton storage.
165
- */
166
- declare class RequestStorage implements IHolderStorage {
167
- private readonly contextHolder;
168
- private readonly holderManager;
169
- readonly scope = InjectableScope.Request;
170
- constructor(contextHolder: RequestContext, holderManager: BaseHolderManager);
171
- get<T = unknown>(instanceName: string): HolderGetResult<T>;
172
- set(instanceName: string, holder: InstanceHolder): void;
173
- delete(instanceName: string): boolean;
174
- createHolder<T>(instanceName: string, type: InjectableType, deps: Set<string>): [ReturnType<typeof Promise.withResolvers<[undefined, T]>>, InstanceHolder<T>];
175
- handles(scope: InjectableScope): boolean;
176
- getAllNames(): string[];
177
- forEach(callback: (name: string, holder: InstanceHolder) => void): void;
178
- findByInstance(instance: unknown): InstanceHolder | null;
179
- findDependents(instanceName: string): string[];
180
- }
181
- //#endregion
182
128
  //#region src/internal/lifecycle/circular-detector.d.mts
183
129
  /**
184
130
  * Detects circular dependencies by analyzing the waitingFor relationships
@@ -213,140 +159,34 @@ declare class CircularDetector {
213
159
  static formatCycle(cycle: string[]): string;
214
160
  }
215
161
  //#endregion
216
- //#region src/internal/core/instantiator.d.mts
162
+ //#region src/internal/stub-factory-class.d.mts
217
163
  /**
218
- * Creates service instances from registry records.
164
+ * Stub factory class used when registering InjectionTokens without a real class implementation.
165
+ * This is used in ScopedContainer.addInstance() to allow registering tokens that don't have
166
+ * a corresponding class, while preventing accidental instantiation.
219
167
  *
220
- * Handles both class-based (@Injectable) and factory-based (@Factory) services,
221
- * managing the instantiation lifecycle including sync initialization retries
222
- * and lifecycle hook invocation (onServiceInit, onServiceDestroy).
168
+ * @internal
223
169
  */
224
- declare class Instantiator {
225
- private readonly injectors;
226
- constructor(injectors: Injectors);
227
- /**
228
- * Instantiates a service based on its registry record.
229
- * @param ctx The factory context for dependency injection
230
- * @param record The factory record from the registry
231
- * @param args Optional arguments for the service
232
- * @returns Promise resolving to [undefined, instance] or [error]
233
- */
234
- instantiateService<T>(ctx: FactoryContext, record: FactoryRecord<T, any>, args?: any): Promise<[undefined, T] | [DIError]>;
235
- /**
236
- * Instantiates a class-based service (Injectable decorator).
237
- * @param ctx The factory context for dependency injection
238
- * @param record The factory record from the registry
239
- * @param args Optional arguments for the service constructor
240
- * @returns Promise resolving to [undefined, instance] or [error]
241
- */
242
- private instantiateClass;
243
- /**
244
- * Instantiates a factory-based service (Factory decorator).
245
- * @param ctx The factory context for dependency injection
246
- * @param record The factory record from the registry
247
- * @param args Optional arguments for the factory
248
- * @returns Promise resolving to [undefined, instance] or [error]
249
- */
250
- private instantiateFactory;
170
+ declare class StubFactoryClass {
171
+ constructor();
251
172
  }
252
173
  //#endregion
253
- //#region src/internal/core/instance-resolver.d.mts
254
- /**
255
- * Resolves instances from tokens, handling caching, creation, and scope rules.
256
- *
257
- * Uses the Storage Strategy pattern for unified singleton/request-scoped handling.
258
- * Coordinates with Instantiator for actual service creation.
259
- */
260
- declare class InstanceResolver {
261
- private readonly registry;
262
- private readonly manager;
263
- private readonly instantiator;
264
- private readonly tokenProcessor;
265
- private readonly logger;
266
- private readonly serviceLocator;
267
- private readonly singletonStorage;
268
- constructor(registry: Registry, manager: HolderManager, instantiator: Instantiator, tokenProcessor: TokenProcessor, logger: (Console | null) | undefined, serviceLocator: ServiceLocator);
269
- /**
270
- * Resolves an instance for the given token and arguments.
271
- * This method is used for singleton and transient services.
272
- *
273
- * @param token The injection token
274
- * @param args Optional arguments
275
- * @param contextContainer The container to use for creating FactoryContext
276
- */
277
- resolveInstance(token: AnyInjectableType, args: any, contextContainer: IContainer): Promise<[undefined, any] | [DIError]>;
278
- /**
279
- * Resolves a request-scoped instance for a ScopedContainer.
280
- * The service will be stored in the ScopedContainer's request context.
281
- *
282
- * @param token The injection token
283
- * @param args Optional arguments
284
- * @param scopedContainer The ScopedContainer that owns the request context
285
- */
286
- resolveRequestScopedInstance(token: AnyInjectableType, args: any, scopedContainer: ScopedContainer): Promise<[undefined, any] | [DIError]>;
287
- /**
288
- * Unified resolution method that works with any IHolderStorage.
289
- * This eliminates duplication between singleton and request-scoped resolution.
290
- *
291
- * IMPORTANT: The check-and-store logic is carefully designed to avoid race conditions.
292
- * The storage check and holder creation must happen synchronously (no awaits between).
293
- *
294
- * @param token The injection token
295
- * @param args Optional arguments
296
- * @param contextContainer The container for FactoryContext
297
- * @param storage The storage strategy to use
298
- * @param scopedContainer Optional scoped container for request-scoped services
299
- */
300
- private resolveWithStorage;
301
- /**
302
- * Handles storage error states (destroying, error, etc.).
303
- * Returns a result if handled, null if should proceed with creation.
304
- */
305
- private handleStorageError;
306
- /**
307
- * Creates a new instance and stores it using the provided storage strategy.
308
- * This unified method replaces instantiateServiceFromRegistry and createRequestScopedInstance.
309
- *
310
- * For transient services, the instance is created but not stored (no caching).
311
- */
312
- private createAndStoreInstance;
313
- /**
314
- * Creates a transient instance without storage or locking.
315
- * Each call creates a new instance.
316
- */
317
- private createTransientInstance;
318
- /**
319
- * Gets a synchronous instance (for sync operations).
320
- */
321
- getSyncInstance<Instance, Schema extends InjectionTokenSchemaType | undefined>(token: AnyInjectableType, args: Schema extends ZodObject ? z.input<Schema> : Schema extends ZodOptional<ZodObject> ? z.input<Schema> | undefined : undefined, contextContainer: IContainer): Instance | null;
322
- /**
323
- * Internal method to resolve token args and create instance name.
324
- * Handles factory token resolution and validation.
325
- */
326
- private resolveTokenAndPrepareInstanceName;
327
- /**
328
- * Waits for an instance holder to be ready and returns the appropriate result.
329
- * Uses the shared utility from BaseHolderManager.
330
- * Passes the current resolution context for circular dependency detection.
331
- */
332
- private waitForInstanceReady;
333
- /**
334
- * Handles the result of service instantiation.
335
- */
336
- private handleInstantiationResult;
337
- /**
338
- * Handles successful service instantiation.
339
- */
340
- private handleInstantiationSuccess;
341
- /**
342
- * Handles service instantiation errors.
343
- */
344
- private handleInstantiationError;
345
- /**
346
- * Creates a factory context for dependency injection during service instantiation.
347
- */
348
- private createFactoryContext;
174
+ //#region src/symbols/injectable-token.d.mts
175
+ declare const InjectableTokenMeta: unique symbol;
176
+ //#endregion
177
+ //#region src/event-emitter.d.mts
178
+ type EventsConfig = {
179
+ [event: string]: any[];
180
+ };
181
+ type EventsNames<Events extends EventsConfig> = Exclude<keyof Events, symbol | number>;
182
+ type EventsArgs<Events extends EventsConfig, Name extends EventsNames<Events>> = Events[Name] extends any[] ? Events[Name] : [];
183
+ declare class EventEmitter<Events extends EventsConfig = {}> {
184
+ private listeners;
185
+ on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
186
+ off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): void;
187
+ once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
188
+ emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): Promise<any>;
349
189
  }
350
190
  //#endregion
351
- export { type AnyInjectableType, BaseHolderManager, BoundInjectionToken, CircularDetector, type ClassType, type ClassTypeWithArgument, type ClassTypeWithInstance, type ClassTypeWithInstanceAndArgument, type ClassTypeWithInstanceAndOptionalArgument, type ClassTypeWithOptionalArgument, type ClassTypeWithoutArguments, Container, DIError, DIErrorCode, DefaultRequestContext, EventEmitter, Factorable, FactorableWithArgs, Factory, type FactoryContext, FactoryInjectionToken, FactoryOptions, type FactoryRecord, type HolderGetResult, HolderManager, type HolderReadyResult, IContainer, type IHolderStorage, InjectRequest, InjectState, Injectable, InjectableOptions, InjectableScope, InjectableTokenMeta, InjectableType, InjectionToken, type InjectionTokenSchemaType, type InjectionTokenType, Injectors, type InstanceDestroyListener, type InstanceEffect, type InstanceHolder, type InstanceHolderCreated, type InstanceHolderCreating, type InstanceHolderDestroying, type InstanceHolderError, InstanceResolver, InstanceStatus, Instantiator, Invalidator, IsUnion, Join, LifecycleEventBus, OnServiceDestroy, OnServiceInit, PopUnion, Registry, type RequestContext, type RequestContextHolder, RequestStorage, type ResolutionContextData, ScopedContainer, ServiceLocator, SingletonStorage, TokenProcessor, UnionToArray, UnionToIntersection, UnionToOvlds, asyncInject, createRequestContext, defaultInjectors, getCurrentResolutionContext, getInjectableToken, getInjectors, globalRegistry, inject, optional, provideFactoryContext, withResolutionContext, withoutResolutionContext, wrapSyncInit };
191
+ export { AnyInjectableType, BaseInjectionTokenSchemaType, BoundInjectionToken, CircularDetector, ClassType, ClassTypeWithArgument, ClassTypeWithInstance, ClassTypeWithInstanceAndArgument, ClassTypeWithInstanceAndOptionalArgument, ClassTypeWithOptionalArgument, ClassTypeWithoutArguments, ClearAllOptions, Container, DIError, DIErrorCode, EventEmitter, EventsArgs, EventsConfig, EventsNames, Factorable, FactorableWithArgs, Factory, FactoryContext, FactoryInjectionToken, FactoryOptions, FactoryRecord, HolderGetResult, type IAsyncLocalStorage, IContainer, IHolderStorage, InjectRequest, InjectState, Injectable, InjectableOptions, InjectableScope, InjectableTokenMeta, InjectableType, InjectionToken, InjectionTokenSchemaType, InjectionTokenType, Injectors, InstanceDestroyListener, InstanceHolder, InstanceHolderCreated, InstanceHolderCreating, InstanceHolderDestroying, InstanceHolderError, InstanceResolver, InstanceStatus, InvalidationOptions, IsUnion, Join, LifecycleEventBus, NameResolver, OnServiceDestroy, OnServiceInit, OptionalInjectionTokenSchemaType, PopUnion, Registry, ResolutionContextData, ScopeTracker, ScopedContainer, ServiceInitializationContext, ServiceInitializer, ServiceInvalidator, StubFactoryClass, TokenResolver, UnifiedStorage, UnionToArray, UnionToIntersection, UnionToOvlds, asyncInject, createAsyncLocalStorage, defaultInjectors, getCurrentResolutionContext, getInjectableToken, getInjectors, globalRegistry, inject, isUsingNativeAsyncLocalStorage, optional, provideFactoryContext, withResolutionContext, withoutResolutionContext, wrapSyncInit };
352
192
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/interfaces/on-service-init.interface.mts","../src/interfaces/on-service-destroy.interface.mts","../src/decorators/factory.decorator.mts","../src/decorators/injectable.decorator.mts","../src/symbols/injectable-token.mts","../src/event-emitter.mts","../src/injectors.mts","../src/internal/context/resolution-context.mts","../src/internal/holder/singleton-storage.mts","../src/internal/holder/request-storage.mts","../src/internal/lifecycle/circular-detector.mts","../src/internal/core/instantiator.mts","../src/internal/core/instance-resolver.mts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/utils/default-injectors.mts","../src/utils/get-injectable-token.mts","../src/interfaces/on-service-destroy.interface.mts","../src/interfaces/on-service-init.interface.mts","../src/decorators/factory.decorator.mts","../src/decorators/injectable.decorator.mts","../src/internal/context/async-local-storage.types.mts","../src/internal/context/async-local-storage.mts","../src/internal/context/resolution-context.mts","../src/internal/lifecycle/circular-detector.mts","../src/internal/stub-factory-class.mts","../src/symbols/injectable-token.mts","../src/event-emitter.mts"],"sourcesContent":[],"mappings":"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"}
package/lib/index.mjs CHANGED
@@ -1,12 +1,11 @@
1
- import { A as Injectable, C as getInjectableToken, D as withoutResolutionContext, E as withResolutionContext, F as FactoryInjectionToken, I as InjectionToken, L as InjectableType, M as Registry, N as globalRegistry, O as DIError, P as BoundInjectionToken, R as InjectableScope, S as wrapSyncInit, T as getCurrentResolutionContext, _ as asyncInject, a as LifecycleEventBus, b as optional, c as InstanceResolver, d as RequestStorage, f as DefaultRequestContext, g as CircularDetector, h as InstanceStatus, i as HolderManager, j as InjectableTokenMeta, k as DIErrorCode, l as SingletonStorage, m as BaseHolderManager, n as ServiceLocator, o as Invalidator, p as createRequestContext, r as TokenProcessor, s as Instantiator, t as _Container, u as ScopedContainer, v as defaultInjectors, w as getInjectors, x as provideFactoryContext, y as inject } from "./container-DAKOvAgr.mjs";
2
- import { z } from "zod/v4";
1
+ import { A as Registry, C as withResolutionContext, D as DIError, E as isUsingNativeAsyncLocalStorage, F as InjectableTokenMeta, I as InjectableType, L as InjectableScope, M as BoundInjectionToken, N as FactoryInjectionToken, O as DIErrorCode, P as InjectionToken, S as getCurrentResolutionContext, T as createAsyncLocalStorage, _ as ScopeTracker, a as UnifiedStorage, b as CircularDetector, c as asyncInject, d as optional, f as provideFactoryContext, g as ServiceInitializer, h as ServiceInvalidator, i as LifecycleEventBus, j as globalRegistry, k as Injectable, l as defaultInjectors, m as getInjectors, n as ScopedContainer, o as TokenResolver, p as wrapSyncInit, r as StubFactoryClass, s as getInjectableToken, t as _Container, u as inject, v as NameResolver, w as withoutResolutionContext, x as InstanceStatus, y as InstanceResolver } from "./container-8-z89TyQ.mjs";
3
2
 
4
3
  //#region src/decorators/factory.decorator.mts
5
- function Factory({ scope = InjectableScope.Singleton, token, registry = globalRegistry } = {}) {
4
+ function Factory({ scope = InjectableScope.Singleton, token, registry = globalRegistry, priority = 0 } = {}) {
6
5
  return (target, context) => {
7
- if (context && context.kind !== "class" || target instanceof Function && !context) throw new Error("[ServiceLocator] @Factory decorator can only be used on classes.");
6
+ if (context && context.kind !== "class" || target instanceof Function && !context) throw new Error("[DI] @Factory decorator can only be used on classes.");
8
7
  let injectableToken = token ?? InjectionToken.create(target);
9
- registry.set(injectableToken, scope, target, InjectableType.Factory);
8
+ registry.set(injectableToken, scope, target, InjectableType.Factory, priority);
10
9
  target[InjectableTokenMeta] = injectableToken;
11
10
  return target;
12
11
  };
@@ -328,5 +327,5 @@ var EventEmitter = class {
328
327
  };
329
328
 
330
329
  //#endregion
331
- export { BaseHolderManager, BoundInjectionToken, CircularDetector, _Container as Container, DIError, DIErrorCode, DefaultRequestContext, _EventEmitter as EventEmitter, Factory, FactoryInjectionToken, HolderManager, Injectable, InjectableScope, InjectableTokenMeta, InjectableType, InjectionToken, InstanceResolver, InstanceStatus, Instantiator, Invalidator, LifecycleEventBus, Registry, RequestStorage, ScopedContainer, ServiceLocator, SingletonStorage, TokenProcessor, asyncInject, createRequestContext, defaultInjectors, getCurrentResolutionContext, getInjectableToken, getInjectors, globalRegistry, inject, optional, provideFactoryContext, withResolutionContext, withoutResolutionContext, wrapSyncInit };
330
+ export { BoundInjectionToken, CircularDetector, _Container as Container, DIError, DIErrorCode, _EventEmitter as EventEmitter, Factory, FactoryInjectionToken, Injectable, InjectableScope, InjectableTokenMeta, InjectableType, InjectionToken, InstanceResolver, InstanceStatus, LifecycleEventBus, NameResolver, Registry, ScopeTracker, ScopedContainer, ServiceInitializer, ServiceInvalidator, StubFactoryClass, TokenResolver, UnifiedStorage, asyncInject, createAsyncLocalStorage, defaultInjectors, getCurrentResolutionContext, getInjectableToken, getInjectors, globalRegistry, inject, isUsingNativeAsyncLocalStorage, optional, provideFactoryContext, withResolutionContext, withoutResolutionContext, wrapSyncInit };
332
331
  //# sourceMappingURL=index.mjs.map
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["InjectableScope","InjectableType","InjectionToken","globalRegistry","InjectableTokenMeta","Factory","scope","Singleton","token","registry","target","context","kind","Function","Error","injectableToken","create","set","Injectable","InjectableScope","scope","Transient","EventEmitter","listeners","Map","on","event","listener","has","set","Set","get","add","off","delete","size","once","args","emit","Promise","all","Array","from","map"],"sources":["../src/decorators/factory.decorator.mts","../src/event-emitter.mts"],"sourcesContent":["import type {\n ClassTypeWithInstance,\n InjectionTokenSchemaType,\n} from '../token/injection-token.mjs'\nimport type { Factorable, FactorableWithArgs } from '../interfaces/index.mjs'\nimport type { Registry } from '../token/registry.mjs'\n\nimport { InjectableScope, InjectableType } from '../enums/index.mjs'\nimport { InjectionToken } from '../token/injection-token.mjs'\nimport { globalRegistry } from '../token/registry.mjs'\nimport { InjectableTokenMeta } from '../symbols/index.mjs'\n\nexport interface FactoryOptions {\n scope?: InjectableScope\n token?: InjectionToken<any, any>\n registry?: Registry\n}\n\n// #1 Factory without arguments\nexport function Factory<R>(options?: {\n scope?: InjectableScope\n registry?: Registry\n}): <T extends ClassTypeWithInstance<Factorable<R>>>(\n target: T,\n context?: ClassDecoratorContext,\n) => T\n\n// #2 Factory with typed token\nexport function Factory<R, S>(options: {\n scope?: InjectableScope\n token: InjectionToken<R, S>\n registry?: Registry\n}): R extends undefined // #2.1 Check that token has a type\n ? never // #2.1.1 Token must have a type\n : S extends InjectionTokenSchemaType // #2.2 Check that schema is an object or a record\n ? <T extends ClassTypeWithInstance<FactorableWithArgs<R, S>>>( // #2.2.1 Token have a schema\n target: T,\n context?: ClassDecoratorContext,\n ) => T\n : S extends undefined // #2.3 For a factory without schema\n ? <T extends ClassTypeWithInstance<Factorable<R>>>( // #2.3.1 Token without a schema\n target: T,\n context?: ClassDecoratorContext,\n ) => T\n : never // #2.4 Cannot use a token without a type and schema\n\nexport function Factory({\n scope = InjectableScope.Singleton,\n token,\n registry = globalRegistry,\n}: FactoryOptions = {}) {\n return <\n T extends ClassTypeWithInstance<\n Factorable<any> | FactorableWithArgs<any, any>\n >,\n >(\n target: T,\n context?: ClassDecoratorContext,\n ): T => {\n if (\n (context && context.kind !== 'class') ||\n (target instanceof Function && !context)\n ) {\n throw new Error(\n '[ServiceLocator] @Factory decorator can only be used on classes.',\n )\n }\n\n let injectableToken: InjectionToken<any, any> =\n token ?? InjectionToken.create(target)\n\n registry.set(injectableToken, scope, target, InjectableType.Factory)\n\n // @ts-expect-error\n target[InjectableTokenMeta] = injectableToken\n\n return target\n }\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/no-empty-object-type */\n/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport { Injectable, InjectableScope } from './index.mjs'\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type EventsConfig = {\n [event: string]: any[]\n}\nexport type EventsNames<Events extends EventsConfig> = Exclude<\n keyof Events,\n symbol | number\n>\nexport type EventsArgs<\n Events extends EventsConfig,\n Name extends EventsNames<Events>,\n> = Events[Name] extends any[] ? Events[Name] : []\n\nexport type ChannelEmitter<\n Events extends EventsConfig,\n Ns extends string,\n E extends EventsNames<Events>,\n> = {\n emit<Args extends EventsArgs<Events, E>>(\n ns: Ns,\n event: E,\n ...args: Args\n ): Promise<any>\n}\n\nexport interface EventEmitterInterface<Events extends EventsConfig> {\n on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ): () => void\n emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n ...args: Args\n ): void | Promise<void>\n}\n\n@Injectable({ scope: InjectableScope.Transient })\nexport class EventEmitter<Events extends EventsConfig = {}>\n implements EventEmitterInterface<Events>\n{\n private listeners: Map<EventsNames<Events>, Set<Function>> = new Map()\n\n on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set())\n }\n\n this.listeners.get(event)!.add(listener)\n\n return () => {\n this.off(event, listener)\n }\n }\n\n off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n if (!this.listeners.has(event)) {\n return\n }\n\n this.listeners.get(event)!.delete(listener)\n if (this.listeners.get(event)!.size === 0) {\n this.listeners.delete(event)\n }\n }\n\n once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n const off = this.on(event, (...args) => {\n off()\n // @ts-expect-error - This is a valid call\n listener(...args)\n })\n\n return off\n }\n\n async emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n ...args: Args\n ): Promise<any> {\n if (!this.listeners.has(event)) {\n return\n }\n\n return Promise.all(\n Array.from(this.listeners.get(event)!).map((listener) =>\n listener(...args),\n ),\n )\n }\n}\n"],"mappings":";;;;AA8CA,SAAgBK,QAAQ,EACtBC,QAAQN,gBAAgBO,WACxBC,OACAC,WAAWN,mBACO,EAAE,EAAA;AACpB,SAKEO,QACAC,YAAAA;AAEA,MACE,WAAYA,QAAQC,SAAS,WAC5BF,kBAAkBG,YAAY,CAACF,QAEhC,OAAM,IAAIG,MACR,mEAAA;EAIJ,IAAIC,kBACFP,SAASN,eAAec,OAAON,OAAAA;AAEjCD,WAASQ,IAAIF,iBAAiBT,OAAOI,QAAQT,eAAeI,QAAO;AAGnEK,SAAON,uBAAuBW;AAE9B,SAAOL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OClCVQ,WAAW,EAAEE,OAAOD,gBAAgBE,WAAU,CAAA;AACxC,IAAMC,eAAN,MAAMA;;;;CAGHC,4BAAqD,IAAIC,KAAAA;CAEjEC,GACEC,OACAC,UACA;AACA,MAAI,CAAC,KAAKJ,UAAUK,IAAIF,MAAAA,CACtB,MAAKH,UAAUM,IAAIH,uBAAO,IAAII,KAAAA,CAAAA;AAGhC,OAAKP,UAAUQ,IAAIL,MAAAA,CAAQM,IAAIL,SAAAA;AAE/B,eAAO;AACL,QAAKM,IAAIP,OAAOC,SAAAA;;;CAIpBM,IACEP,OACAC,UACA;AACA,MAAI,CAAC,KAAKJ,UAAUK,IAAIF,MAAAA,CACtB;AAGF,OAAKH,UAAUQ,IAAIL,MAAAA,CAAQQ,OAAOP,SAAAA;AAClC,MAAI,KAAKJ,UAAUQ,IAAIL,MAAAA,CAAQS,SAAS,EACtC,MAAKZ,UAAUW,OAAOR,MAAAA;;CAI1BU,KACEV,OACAC,UACA;EACA,MAAMM,MAAM,KAAKR,GAAGC,QAAQ,GAAGW,SAAAA;AAC7BJ,QAAAA;AAEAN,YAAAA,GAAYU,KAAAA;IACd;AAEA,SAAOJ;;CAGT,MAAMK,KACJZ,OACA,GAAGW,MACW;AACd,MAAI,CAAC,KAAKd,UAAUK,IAAIF,MAAAA,CACtB;AAGF,SAAOa,QAAQC,IACbC,MAAMC,KAAK,KAAKnB,UAAUQ,IAAIL,MAAAA,CAAAA,CAASiB,KAAKhB,aAC1CA,SAAAA,GAAYU,KAAAA,CAAAA,CAAAA"}
1
+ {"version":3,"file":"index.mjs","names":["InjectableScope","InjectableType","InjectableTokenMeta","InjectionToken","globalRegistry","Factory","scope","Singleton","token","registry","priority","target","context","kind","Function","Error","injectableToken","create","set","Injectable","InjectableScope","scope","Transient","EventEmitter","listeners","Map","on","event","listener","has","set","Set","get","add","off","delete","size","once","args","emit","Promise","all","Array","from","map"],"sources":["../src/decorators/factory.decorator.mts","../src/event-emitter.mts"],"sourcesContent":["import type { Factorable, FactorableWithArgs } from '../interfaces/index.mjs'\nimport type {\n ClassTypeWithInstance,\n InjectionTokenSchemaType,\n} from '../token/injection-token.mjs'\nimport type { Registry } from '../token/registry.mjs'\n\nimport { InjectableScope, InjectableType } from '../enums/index.mjs'\nimport { InjectableTokenMeta } from '../symbols/index.mjs'\nimport { InjectionToken } from '../token/injection-token.mjs'\nimport { globalRegistry } from '../token/registry.mjs'\n\nexport interface FactoryOptions {\n scope?: InjectableScope\n token?: InjectionToken<any, any>\n registry?: Registry\n priority?: number\n}\n\n// #1 Factory without arguments\nexport function Factory<R>(options?: {\n scope?: InjectableScope\n registry?: Registry\n priority?: number\n}): <T extends ClassTypeWithInstance<Factorable<R>>>(\n target: T,\n context?: ClassDecoratorContext,\n) => T\n\n// #2 Factory with typed token\nexport function Factory<R, S>(options: {\n scope?: InjectableScope\n token: InjectionToken<R, S>\n registry?: Registry\n priority?: number\n}): R extends undefined\n ? never\n : S extends InjectionTokenSchemaType\n ? <T extends ClassTypeWithInstance<FactorableWithArgs<R, S>>>(\n target: T,\n context?: ClassDecoratorContext,\n ) => T\n : S extends undefined\n ? <T extends ClassTypeWithInstance<Factorable<R>>>(\n target: T,\n context?: ClassDecoratorContext,\n ) => T\n : never\n\nexport function Factory({\n scope = InjectableScope.Singleton,\n token,\n registry = globalRegistry,\n priority = 0,\n}: FactoryOptions = {}) {\n return <\n T extends ClassTypeWithInstance<\n Factorable<any> | FactorableWithArgs<any, any>\n >,\n >(\n target: T,\n context?: ClassDecoratorContext,\n ): T => {\n if (\n (context && context.kind !== 'class') ||\n (target instanceof Function && !context)\n ) {\n throw new Error(\n '[DI] @Factory decorator can only be used on classes.',\n )\n }\n\n let injectableToken: InjectionToken<any, any> =\n token ?? InjectionToken.create(target)\n\n registry.set(injectableToken, scope, target, InjectableType.Factory, priority)\n\n // @ts-expect-error\n target[InjectableTokenMeta] = injectableToken\n\n return target\n }\n}\n\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/no-empty-object-type */\n/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport { Injectable } from './decorators/index.mjs'\nimport { InjectableScope } from './enums/index.mjs'\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type EventsConfig = {\n [event: string]: any[]\n}\nexport type EventsNames<Events extends EventsConfig> = Exclude<\n keyof Events,\n symbol | number\n>\nexport type EventsArgs<\n Events extends EventsConfig,\n Name extends EventsNames<Events>,\n> = Events[Name] extends any[] ? Events[Name] : []\n\n@Injectable({ scope: InjectableScope.Transient })\nexport class EventEmitter<Events extends EventsConfig = {}> {\n private listeners: Map<EventsNames<Events>, Set<Function>> = new Map()\n\n on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set())\n }\n\n this.listeners.get(event)!.add(listener)\n\n return () => {\n this.off(event, listener)\n }\n }\n\n off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n if (!this.listeners.has(event)) {\n return\n }\n\n this.listeners.get(event)!.delete(listener)\n if (this.listeners.get(event)!.size === 0) {\n this.listeners.delete(event)\n }\n }\n\n once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n listener: (...args: Args) => void | Promise<void>,\n ) {\n const off = this.on(event, (...args) => {\n off()\n // @ts-expect-error - This is a valid call\n listener(...args)\n })\n\n return off\n }\n\n async emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(\n event: E,\n ...args: Args\n ): Promise<any> {\n if (!this.listeners.has(event)) {\n return\n }\n\n return Promise.all(\n Array.from(this.listeners.get(event)!).map((listener) =>\n listener(...args),\n ),\n )\n }\n}\n"],"mappings":";;;AAiDA,SAAgBK,QAAQ,EACtBC,QAAQN,gBAAgBO,WACxBC,OACAC,WAAWL,gBACXM,WAAW,MACO,EAAE,EAAA;AACpB,SAKEC,QACAC,YAAAA;AAEA,MACE,WAAYA,QAAQC,SAAS,WAC5BF,kBAAkBG,YAAY,CAACF,QAEhC,OAAM,IAAIG,MACR,uDAAA;EAIJ,IAAIC,kBACFR,SAASL,eAAec,OAAON,OAAAA;AAEjCF,WAASS,IAAIF,iBAAiBV,OAAOK,QAAQV,eAAeI,SAASK,SAAAA;AAGrEC,SAAOT,uBAAuBc;AAE9B,SAAOL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OC5DVQ,WAAW,EAAEE,OAAOD,gBAAgBE,WAAU,CAAA;AACxC,IAAMC,eAAN,MAAMA;;;;CACHC,4BAAqD,IAAIC,KAAAA;CAEjEC,GACEC,OACAC,UACA;AACA,MAAI,CAAC,KAAKJ,UAAUK,IAAIF,MAAAA,CACtB,MAAKH,UAAUM,IAAIH,uBAAO,IAAII,KAAAA,CAAAA;AAGhC,OAAKP,UAAUQ,IAAIL,MAAAA,CAAQM,IAAIL,SAAAA;AAE/B,eAAO;AACL,QAAKM,IAAIP,OAAOC,SAAAA;;;CAIpBM,IACEP,OACAC,UACA;AACA,MAAI,CAAC,KAAKJ,UAAUK,IAAIF,MAAAA,CACtB;AAGF,OAAKH,UAAUQ,IAAIL,MAAAA,CAAQQ,OAAOP,SAAAA;AAClC,MAAI,KAAKJ,UAAUQ,IAAIL,MAAAA,CAAQS,SAAS,EACtC,MAAKZ,UAAUW,OAAOR,MAAAA;;CAI1BU,KACEV,OACAC,UACA;EACA,MAAMM,MAAM,KAAKR,GAAGC,QAAQ,GAAGW,SAAAA;AAC7BJ,QAAAA;AAEAN,YAAAA,GAAYU,KAAAA;IACd;AAEA,SAAOJ;;CAGT,MAAMK,KACJZ,OACA,GAAGW,MACW;AACd,MAAI,CAAC,KAAKd,UAAUK,IAAIF,MAAAA,CACtB;AAGF,SAAOa,QAAQC,IACbC,MAAMC,KAAK,KAAKnB,UAAUQ,IAAIL,MAAAA,CAAAA,CAASiB,KAAKhB,aAC1CA,SAAAA,GAAYU,KAAAA,CAAAA,CAAAA"}