@tsed/di 7.0.0-alpha.2 → 7.0.0-beta.11

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 (279) hide show
  1. package/lib/cjs/constants/constants.js +7 -0
  2. package/lib/cjs/constants/constants.js.map +1 -0
  3. package/lib/cjs/decorators/configuration.js +24 -0
  4. package/lib/cjs/decorators/configuration.js.map +1 -0
  5. package/lib/cjs/decorators/constant.js +55 -0
  6. package/lib/cjs/decorators/constant.js.map +1 -0
  7. package/lib/cjs/decorators/controller.js +53 -0
  8. package/lib/cjs/decorators/controller.js.map +1 -0
  9. package/lib/cjs/decorators/inject.js +104 -0
  10. package/lib/cjs/decorators/inject.js.map +1 -0
  11. package/lib/cjs/decorators/injectable.js +32 -0
  12. package/lib/cjs/decorators/injectable.js.map +1 -0
  13. package/lib/cjs/decorators/intercept.js +36 -0
  14. package/lib/cjs/decorators/intercept.js.map +1 -0
  15. package/lib/cjs/decorators/interceptor.js +21 -0
  16. package/lib/cjs/decorators/interceptor.js.map +1 -0
  17. package/lib/cjs/decorators/lazyInject.js +71 -0
  18. package/lib/cjs/decorators/lazyInject.js.map +1 -0
  19. package/lib/cjs/decorators/module.js +32 -0
  20. package/lib/cjs/decorators/module.js.map +1 -0
  21. package/lib/cjs/decorators/opts.js +54 -0
  22. package/lib/cjs/decorators/opts.js.map +1 -0
  23. package/lib/cjs/decorators/overrideProvider.js +17 -0
  24. package/lib/cjs/decorators/overrideProvider.js.map +1 -0
  25. package/lib/cjs/decorators/scope.js +16 -0
  26. package/lib/cjs/decorators/scope.js.map +1 -0
  27. package/lib/cjs/decorators/service.js +18 -0
  28. package/lib/cjs/decorators/service.js.map +1 -0
  29. package/lib/cjs/decorators/useOpts.js +65 -0
  30. package/lib/cjs/decorators/useOpts.js.map +1 -0
  31. package/lib/cjs/decorators/value.js +55 -0
  32. package/lib/cjs/decorators/value.js.map +1 -0
  33. package/lib/cjs/domain/Container.js +72 -0
  34. package/lib/cjs/domain/Container.js.map +1 -0
  35. package/lib/cjs/domain/ContextLogger.js +85 -0
  36. package/lib/cjs/domain/ContextLogger.js.map +1 -0
  37. package/lib/cjs/domain/DIContext.js +45 -0
  38. package/lib/cjs/domain/DIContext.js.map +1 -0
  39. package/lib/cjs/domain/InjectablePropertyType.js +12 -0
  40. package/lib/cjs/domain/InjectablePropertyType.js.map +1 -0
  41. package/lib/cjs/domain/LocalsContainer.js +55 -0
  42. package/lib/cjs/domain/LocalsContainer.js.map +1 -0
  43. package/lib/cjs/domain/Provider.js +122 -0
  44. package/lib/cjs/domain/Provider.js.map +1 -0
  45. package/lib/cjs/domain/ProviderScope.js +10 -0
  46. package/lib/cjs/domain/ProviderScope.js.map +1 -0
  47. package/lib/cjs/domain/ProviderType.js +15 -0
  48. package/lib/cjs/domain/ProviderType.js.map +1 -0
  49. package/lib/cjs/errors/InjectionError.js +58 -0
  50. package/lib/cjs/errors/InjectionError.js.map +1 -0
  51. package/lib/cjs/errors/UndefinedTokenError.js +11 -0
  52. package/lib/cjs/errors/UndefinedTokenError.js.map +1 -0
  53. package/lib/cjs/index.js +59 -0
  54. package/lib/cjs/index.js.map +1 -0
  55. package/lib/cjs/interfaces/DIConfigurationOptions.js +3 -0
  56. package/lib/cjs/interfaces/DIConfigurationOptions.js.map +1 -0
  57. package/lib/cjs/interfaces/DILogger.js +3 -0
  58. package/lib/cjs/interfaces/DILogger.js.map +1 -0
  59. package/lib/cjs/interfaces/DIResolver.js +3 -0
  60. package/lib/cjs/interfaces/DIResolver.js.map +1 -0
  61. package/lib/cjs/interfaces/InjectableProperties.js +3 -0
  62. package/lib/cjs/interfaces/InjectableProperties.js.map +1 -0
  63. package/lib/cjs/interfaces/InterceptorContext.js +3 -0
  64. package/lib/cjs/interfaces/InterceptorContext.js.map +1 -0
  65. package/lib/cjs/interfaces/InterceptorMethods.js +3 -0
  66. package/lib/cjs/interfaces/InterceptorMethods.js.map +1 -0
  67. package/lib/cjs/interfaces/InvokeOptions.js +3 -0
  68. package/lib/cjs/interfaces/InvokeOptions.js.map +1 -0
  69. package/lib/cjs/interfaces/OnDestroy.js +3 -0
  70. package/lib/cjs/interfaces/OnDestroy.js.map +1 -0
  71. package/lib/cjs/interfaces/OnInit.js +3 -0
  72. package/lib/cjs/interfaces/OnInit.js.map +1 -0
  73. package/lib/cjs/interfaces/ProviderOpts.js +3 -0
  74. package/lib/cjs/interfaces/ProviderOpts.js.map +1 -0
  75. package/lib/cjs/interfaces/RegistrySettings.js +3 -0
  76. package/lib/cjs/interfaces/RegistrySettings.js.map +1 -0
  77. package/lib/cjs/interfaces/ResolvedInvokeOptions.js +3 -0
  78. package/lib/cjs/interfaces/ResolvedInvokeOptions.js.map +1 -0
  79. package/lib/cjs/interfaces/TokenProvider.js +3 -0
  80. package/lib/cjs/interfaces/TokenProvider.js.map +1 -0
  81. package/lib/cjs/interfaces/TokenRoute.js +3 -0
  82. package/lib/cjs/interfaces/TokenRoute.js.map +1 -0
  83. package/lib/cjs/package.json +3 -0
  84. package/lib/cjs/registries/GlobalProviders.js +124 -0
  85. package/lib/cjs/registries/GlobalProviders.js.map +1 -0
  86. package/lib/cjs/registries/ProviderRegistry.js +86 -0
  87. package/lib/cjs/registries/ProviderRegistry.js.map +1 -0
  88. package/lib/cjs/services/DIConfiguration.js +136 -0
  89. package/lib/cjs/services/DIConfiguration.js.map +1 -0
  90. package/lib/cjs/services/DILogger.js +13 -0
  91. package/lib/cjs/services/DILogger.js.map +1 -0
  92. package/lib/cjs/services/DITest.js +116 -0
  93. package/lib/cjs/services/DITest.js.map +1 -0
  94. package/lib/cjs/services/InjectorService.js +589 -0
  95. package/lib/cjs/services/InjectorService.js.map +1 -0
  96. package/lib/cjs/utils/colors.js +10 -0
  97. package/lib/cjs/utils/colors.js.map +1 -0
  98. package/lib/cjs/utils/createContainer.js +14 -0
  99. package/lib/cjs/utils/createContainer.js.map +1 -0
  100. package/lib/cjs/utils/getConfiguration.js +29 -0
  101. package/lib/cjs/utils/getConfiguration.js.map +1 -0
  102. package/lib/cjs/utils/resolveControllers.js +47 -0
  103. package/lib/cjs/utils/resolveControllers.js.map +1 -0
  104. package/lib/cjs/utils/runInContext.js +19 -0
  105. package/lib/cjs/utils/runInContext.js.map +1 -0
  106. package/lib/cjs/utils/setLoggerLevel.js +16 -0
  107. package/lib/cjs/utils/setLoggerLevel.js.map +1 -0
  108. package/lib/esm/constants/constants.js +4 -0
  109. package/lib/esm/constants/constants.js.map +1 -0
  110. package/lib/esm/decorators/configuration.js +20 -0
  111. package/lib/esm/decorators/configuration.js.map +1 -0
  112. package/lib/esm/decorators/constant.js +51 -0
  113. package/lib/esm/decorators/constant.js.map +1 -0
  114. package/lib/esm/decorators/controller.js +49 -0
  115. package/lib/esm/decorators/controller.js.map +1 -0
  116. package/lib/esm/decorators/inject.js +98 -0
  117. package/lib/esm/decorators/inject.js.map +1 -0
  118. package/lib/esm/decorators/injectable.js +28 -0
  119. package/lib/esm/decorators/injectable.js.map +1 -0
  120. package/lib/esm/decorators/intercept.js +32 -0
  121. package/lib/esm/decorators/intercept.js.map +1 -0
  122. package/lib/esm/decorators/interceptor.js +17 -0
  123. package/lib/esm/decorators/interceptor.js.map +1 -0
  124. package/lib/esm/decorators/lazyInject.js +66 -0
  125. package/lib/esm/decorators/lazyInject.js.map +1 -0
  126. package/lib/esm/decorators/module.js +28 -0
  127. package/lib/esm/decorators/module.js.map +1 -0
  128. package/lib/esm/decorators/opts.js +50 -0
  129. package/lib/esm/decorators/opts.js.map +1 -0
  130. package/lib/esm/decorators/overrideProvider.js +13 -0
  131. package/lib/esm/decorators/overrideProvider.js.map +1 -0
  132. package/lib/esm/decorators/scope.js +12 -0
  133. package/lib/esm/decorators/scope.js.map +1 -0
  134. package/lib/esm/decorators/service.js +14 -0
  135. package/lib/esm/decorators/service.js.map +1 -0
  136. package/lib/esm/decorators/useOpts.js +61 -0
  137. package/lib/esm/decorators/useOpts.js.map +1 -0
  138. package/lib/esm/decorators/value.js +51 -0
  139. package/lib/esm/decorators/value.js.map +1 -0
  140. package/lib/esm/domain/Container.js +68 -0
  141. package/lib/esm/domain/Container.js.map +1 -0
  142. package/lib/esm/domain/ContextLogger.js +81 -0
  143. package/lib/esm/domain/ContextLogger.js.map +1 -0
  144. package/lib/esm/domain/DIContext.js +41 -0
  145. package/lib/esm/domain/DIContext.js.map +1 -0
  146. package/lib/esm/domain/InjectablePropertyType.js +9 -0
  147. package/lib/esm/domain/InjectablePropertyType.js.map +1 -0
  148. package/lib/esm/domain/LocalsContainer.js +51 -0
  149. package/lib/esm/domain/LocalsContainer.js.map +1 -0
  150. package/lib/esm/domain/Provider.js +118 -0
  151. package/lib/esm/domain/Provider.js.map +1 -0
  152. package/lib/esm/domain/ProviderScope.js +7 -0
  153. package/lib/esm/domain/ProviderScope.js.map +1 -0
  154. package/lib/esm/domain/ProviderType.js +12 -0
  155. package/lib/esm/domain/ProviderType.js.map +1 -0
  156. package/lib/esm/errors/InjectionError.js +54 -0
  157. package/lib/esm/errors/InjectionError.js.map +1 -0
  158. package/lib/esm/errors/UndefinedTokenError.js +7 -0
  159. package/lib/esm/errors/UndefinedTokenError.js.map +1 -0
  160. package/lib/esm/index.js +56 -0
  161. package/lib/esm/index.js.map +1 -0
  162. package/lib/esm/interfaces/DIConfigurationOptions.js +2 -0
  163. package/lib/esm/interfaces/DIConfigurationOptions.js.map +1 -0
  164. package/lib/esm/interfaces/DILogger.js +2 -0
  165. package/lib/esm/interfaces/DILogger.js.map +1 -0
  166. package/lib/esm/interfaces/DIResolver.js +2 -0
  167. package/lib/esm/interfaces/DIResolver.js.map +1 -0
  168. package/lib/esm/interfaces/InjectableProperties.js +2 -0
  169. package/lib/esm/interfaces/InjectableProperties.js.map +1 -0
  170. package/lib/esm/interfaces/InterceptorContext.js +2 -0
  171. package/lib/esm/interfaces/InterceptorContext.js.map +1 -0
  172. package/lib/esm/interfaces/InterceptorMethods.js +2 -0
  173. package/lib/esm/interfaces/InterceptorMethods.js.map +1 -0
  174. package/lib/esm/interfaces/InvokeOptions.js +2 -0
  175. package/lib/esm/interfaces/InvokeOptions.js.map +1 -0
  176. package/lib/esm/interfaces/OnDestroy.js +2 -0
  177. package/lib/esm/interfaces/OnDestroy.js.map +1 -0
  178. package/lib/esm/interfaces/OnInit.js +2 -0
  179. package/lib/esm/interfaces/OnInit.js.map +1 -0
  180. package/lib/esm/interfaces/ProviderOpts.js +2 -0
  181. package/lib/esm/interfaces/ProviderOpts.js.map +1 -0
  182. package/lib/esm/interfaces/RegistrySettings.js +2 -0
  183. package/lib/esm/interfaces/RegistrySettings.js.map +1 -0
  184. package/lib/esm/interfaces/ResolvedInvokeOptions.js +2 -0
  185. package/lib/esm/interfaces/ResolvedInvokeOptions.js.map +1 -0
  186. package/lib/esm/interfaces/TokenProvider.js +2 -0
  187. package/lib/esm/interfaces/TokenProvider.js.map +1 -0
  188. package/lib/esm/interfaces/TokenRoute.js +2 -0
  189. package/lib/esm/interfaces/TokenRoute.js.map +1 -0
  190. package/lib/esm/package.json +3 -0
  191. package/lib/esm/registries/GlobalProviders.js +120 -0
  192. package/lib/esm/registries/GlobalProviders.js.map +1 -0
  193. package/lib/esm/registries/ProviderRegistry.js +81 -0
  194. package/lib/esm/registries/ProviderRegistry.js.map +1 -0
  195. package/lib/esm/services/DIConfiguration.js +132 -0
  196. package/lib/esm/services/DIConfiguration.js.map +1 -0
  197. package/lib/esm/services/DILogger.js +11 -0
  198. package/lib/esm/services/DILogger.js.map +1 -0
  199. package/lib/esm/services/DITest.js +112 -0
  200. package/lib/esm/services/DITest.js.map +1 -0
  201. package/lib/esm/services/InjectorService.js +586 -0
  202. package/lib/esm/services/InjectorService.js.map +1 -0
  203. package/lib/esm/utils/colors.js +7 -0
  204. package/lib/esm/utils/colors.js.map +1 -0
  205. package/lib/esm/utils/createContainer.js +10 -0
  206. package/lib/esm/utils/createContainer.js.map +1 -0
  207. package/lib/esm/utils/getConfiguration.js +24 -0
  208. package/lib/esm/utils/getConfiguration.js.map +1 -0
  209. package/lib/esm/utils/resolveControllers.js +42 -0
  210. package/lib/esm/utils/resolveControllers.js.map +1 -0
  211. package/lib/esm/utils/runInContext.js +13 -0
  212. package/lib/esm/utils/runInContext.js.map +1 -0
  213. package/lib/esm/utils/setLoggerLevel.js +12 -0
  214. package/lib/esm/utils/setLoggerLevel.js.map +1 -0
  215. package/lib/{constants/index.d.ts → types/constants/constants.d.ts} +0 -0
  216. package/lib/{decorators → types/decorators}/configuration.d.ts +0 -0
  217. package/lib/{decorators → types/decorators}/constant.d.ts +0 -0
  218. package/lib/{decorators → types/decorators}/controller.d.ts +2 -2
  219. package/lib/types/decorators/inject.d.ts +36 -0
  220. package/lib/{decorators → types/decorators}/injectable.d.ts +4 -5
  221. package/lib/{decorators → types/decorators}/intercept.d.ts +2 -2
  222. package/lib/{decorators → types/decorators}/interceptor.d.ts +0 -0
  223. package/lib/types/decorators/lazyInject.d.ts +43 -0
  224. package/lib/{decorators → types/decorators}/module.d.ts +3 -2
  225. package/lib/{decorators → types/decorators}/opts.d.ts +0 -0
  226. package/lib/{decorators → types/decorators}/overrideProvider.d.ts +0 -0
  227. package/lib/{decorators → types/decorators}/scope.d.ts +0 -0
  228. package/lib/{decorators → types/decorators}/service.d.ts +0 -0
  229. package/lib/{decorators → types/decorators}/useOpts.d.ts +0 -0
  230. package/lib/{decorators → types/decorators}/value.d.ts +0 -0
  231. package/lib/{domain → types/domain}/Container.d.ts +5 -6
  232. package/lib/{domain → types/domain}/ContextLogger.d.ts +0 -0
  233. package/lib/{domain → types/domain}/DIContext.d.ts +0 -6
  234. package/lib/{domain → types/domain}/InjectablePropertyType.d.ts +0 -0
  235. package/lib/{domain → types/domain}/LocalsContainer.d.ts +0 -0
  236. package/lib/{domain → types/domain}/Provider.d.ts +17 -3
  237. package/lib/{domain → types/domain}/ProviderScope.d.ts +0 -0
  238. package/lib/{domain → types/domain}/ProviderType.d.ts +0 -0
  239. package/lib/{errors → types/errors}/InjectionError.d.ts +1 -1
  240. package/lib/{errors → types/errors}/UndefinedTokenError.d.ts +0 -0
  241. package/lib/types/index.d.ts +55 -0
  242. package/lib/{interfaces → types/interfaces}/DIConfigurationOptions.d.ts +4 -0
  243. package/lib/{interfaces → types/interfaces}/DILogger.d.ts +0 -0
  244. package/lib/{interfaces → types/interfaces}/DIResolver.d.ts +0 -0
  245. package/lib/{interfaces → types/interfaces}/InjectableProperties.d.ts +8 -4
  246. package/lib/{interfaces → types/interfaces}/InterceptorContext.d.ts +0 -0
  247. package/lib/{interfaces → types/interfaces}/InterceptorMethods.d.ts +0 -0
  248. package/lib/{interfaces → types/interfaces}/InvokeOptions.d.ts +0 -0
  249. package/lib/{interfaces → types/interfaces}/OnDestroy.d.ts +0 -0
  250. package/lib/{interfaces → types/interfaces}/OnInit.d.ts +0 -0
  251. package/lib/{interfaces/IProvider.d.ts → types/interfaces/ProviderOpts.d.ts} +5 -4
  252. package/lib/{interfaces → types/interfaces}/RegistrySettings.d.ts +7 -3
  253. package/lib/types/interfaces/ResolvedInvokeOptions.d.ts +12 -0
  254. package/lib/{interfaces → types/interfaces}/TokenProvider.d.ts +0 -0
  255. package/lib/types/interfaces/TokenRoute.d.ts +5 -0
  256. package/lib/{registries → types/registries}/GlobalProviders.d.ts +11 -5
  257. package/lib/{registries → types/registries}/ProviderRegistry.d.ts +4 -4
  258. package/lib/{services → types/services}/DIConfiguration.d.ts +6 -2
  259. package/lib/{services → types/services}/DILogger.d.ts +0 -0
  260. package/lib/{services → types/services}/DITest.d.ts +7 -1
  261. package/lib/{services → types/services}/InjectorService.d.ts +45 -22
  262. package/lib/types/utils/colors.d.ts +5 -0
  263. package/lib/{utils → types/utils}/createContainer.d.ts +0 -0
  264. package/lib/{utils → types/utils}/getConfiguration.d.ts +1 -0
  265. package/lib/types/utils/resolveControllers.d.ts +12 -0
  266. package/lib/types/utils/runInContext.d.ts +6 -0
  267. package/lib/{utils → types/utils}/setLoggerLevel.d.ts +0 -0
  268. package/package.json +32 -16
  269. package/readme.md +37 -41
  270. package/tsconfig.compile.esm.json +25 -0
  271. package/lib/decorators/index.d.ts +0 -14
  272. package/lib/decorators/inject.d.ts +0 -19
  273. package/lib/domain/index.d.ts +0 -8
  274. package/lib/index.d.ts +0 -16
  275. package/lib/index.js +0 -2269
  276. package/lib/index.js.map +0 -1
  277. package/lib/index.modern.js +0 -2232
  278. package/lib/index.modern.js.map +0 -1
  279. package/lib/interfaces/index.d.ts +0 -13
@@ -0,0 +1,81 @@
1
+ import { Provider } from "../domain/Provider.js";
2
+ import { ProviderScope } from "../domain/ProviderScope.js";
3
+ import { ProviderType } from "../domain/ProviderType.js";
4
+ import { GlobalProviders } from "./GlobalProviders.js";
5
+ /**
6
+ *
7
+ */
8
+ GlobalProviders.createRegistry(ProviderType.CONTROLLER, Provider);
9
+ /**
10
+ * Register a provider configuration.
11
+ * @param {ProviderOpts<any>} provider
12
+ */
13
+ export function registerProvider(provider) {
14
+ if (!provider.provide) {
15
+ throw new Error("Provider.provide is required");
16
+ }
17
+ GlobalProviders.merge(provider.provide, provider);
18
+ }
19
+ /**
20
+ * Add a new value in the `ProviderRegistry`.
21
+ *
22
+ * #### Example with symbol definition
23
+ *
24
+ *
25
+ * ```typescript
26
+ * import {registerValue, InjectorService} from "@tsed/di";
27
+ *
28
+ * const MyValue = Symbol.from("MyValue")
29
+ *
30
+ * registerValue({token: MyValue, useValue: "myValue"});
31
+ *
32
+ * @Service()
33
+ * export class OtherService {
34
+ * constructor(@Inject(MyValue) myValue: string){
35
+ * console.log(myValue); /// "myValue"
36
+ * }
37
+ * }
38
+ * ```
39
+ */
40
+ export const registerValue = (provider, value) => {
41
+ if (!provider.provide) {
42
+ provider = {
43
+ provide: provider
44
+ };
45
+ }
46
+ provider = Object.assign({
47
+ scope: ProviderScope.SINGLETON,
48
+ useValue: value
49
+ }, provider, { type: ProviderType.VALUE });
50
+ GlobalProviders.merge(provider.provide, provider);
51
+ };
52
+ /**
53
+ * Add a new controller in the `ProviderRegistry`. This controller will be built when `InjectorService` will be loaded.
54
+ *
55
+ * #### Example
56
+ *
57
+ * ```typescript
58
+ * import {registerController, InjectorService} from "@tsed/di";
59
+ *
60
+ * export default class MyController {
61
+ * constructor(){}
62
+ * transform() {
63
+ * return "test";
64
+ * }
65
+ * }
66
+ *
67
+ * registerController({provide: MyController});
68
+ * // or
69
+ * registerController(MyController);
70
+ *
71
+ * const injector = new InjectorService();
72
+ * injector.load();
73
+ *
74
+ * const myController = injector.get<MyController>(MyController);
75
+ * myController.getFoo(); // test
76
+ * ```
77
+ *
78
+ * @param provider Provider configuration.
79
+ */
80
+ export const registerController = GlobalProviders.createRegisterFn(ProviderType.CONTROLLER);
81
+ //# sourceMappingURL=ProviderRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderRegistry.js","sourceRoot":"","sources":["../../../src/registries/ProviderRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAC,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAa,QAAqC;IAChF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;KACjD;IAED,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAiC,EAAE,KAAW,EAAQ,EAAE;IACpF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACrB,QAAQ,GAAG;YACT,OAAO,EAAE,QAAQ;SAClB,CAAC;KACH;IAED,QAAQ,GAAG,MAAM,CAAC,MAAM,CACtB;QACE,KAAK,EAAE,aAAa,CAAC,SAAS;QAC9B,QAAQ,EAAE,KAAK;KAChB,EACD,QAAQ,EACR,EAAC,IAAI,EAAE,YAAY,CAAC,KAAK,EAAC,CAC3B,CAAC;IACF,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC","sourcesContent":["import {Provider} from \"../domain/Provider\";\nimport {ProviderScope} from \"../domain/ProviderScope\";\nimport {ProviderType} from \"../domain/ProviderType\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts\";\nimport {GlobalProviders} from \"./GlobalProviders\";\n\n/**\n *\n */\nGlobalProviders.createRegistry(ProviderType.CONTROLLER, Provider);\n\n/**\n * Register a provider configuration.\n * @param {ProviderOpts<any>} provider\n */\nexport function registerProvider<Type = any>(provider: Partial<ProviderOpts<Type>>): void {\n if (!provider.provide) {\n throw new Error(\"Provider.provide is required\");\n }\n\n GlobalProviders.merge(provider.provide, provider);\n}\n\n/**\n * Add a new value in the `ProviderRegistry`.\n *\n * #### Example with symbol definition\n *\n *\n * ```typescript\n * import {registerValue, InjectorService} from \"@tsed/di\";\n *\n * const MyValue = Symbol.from(\"MyValue\")\n *\n * registerValue({token: MyValue, useValue: \"myValue\"});\n *\n * @Service()\n * export class OtherService {\n * constructor(@Inject(MyValue) myValue: string){\n * console.log(myValue); /// \"myValue\"\n * }\n * }\n * ```\n */\nexport const registerValue = (provider: any | ProviderOpts<any>, value?: any): void => {\n if (!provider.provide) {\n provider = {\n provide: provider\n };\n }\n\n provider = Object.assign(\n {\n scope: ProviderScope.SINGLETON,\n useValue: value\n },\n provider,\n {type: ProviderType.VALUE}\n );\n GlobalProviders.merge(provider.provide, provider);\n};\n\n/**\n * Add a new controller in the `ProviderRegistry`. This controller will be built when `InjectorService` will be loaded.\n *\n * #### Example\n *\n * ```typescript\n * import {registerController, InjectorService} from \"@tsed/di\";\n *\n * export default class MyController {\n * constructor(){}\n * transform() {\n * return \"test\";\n * }\n * }\n *\n * registerController({provide: MyController});\n * // or\n * registerController(MyController);\n *\n * const injector = new InjectorService();\n * injector.load();\n *\n * const myController = injector.get<MyController>(MyController);\n * myController.getFoo(); // test\n * ```\n *\n * @param provider Provider configuration.\n */\nexport const registerController = GlobalProviders.createRegisterFn(ProviderType.CONTROLLER);\n"]}
@@ -0,0 +1,132 @@
1
+ import { classOf, deepMerge, getValue, proxyDelegation, setValue } from "@tsed/core";
2
+ export class DIConfiguration {
3
+ constructor(initialProps = {}) {
4
+ this.default = new Map();
5
+ this.map = new Map();
6
+ Object.entries({
7
+ scopes: {},
8
+ resolvers: [],
9
+ imports: [],
10
+ routes: [],
11
+ ...initialProps
12
+ }).forEach(([key, value]) => {
13
+ this.default.set(key, value);
14
+ });
15
+ return proxyDelegation(this, {
16
+ ownKeys(target) {
17
+ return [...target.default.keys(), ...target.map.keys()];
18
+ }
19
+ });
20
+ }
21
+ get scopes() {
22
+ return this.getRaw("scopes");
23
+ }
24
+ set scopes(value) {
25
+ this.setRaw("scopes", value);
26
+ }
27
+ get resolvers() {
28
+ return this.getRaw("resolvers");
29
+ }
30
+ set resolvers(resolvers) {
31
+ this.setRaw("resolvers", resolvers);
32
+ }
33
+ get imports() {
34
+ return this.getRaw("imports");
35
+ }
36
+ set imports(imports) {
37
+ this.setRaw("imports", imports);
38
+ }
39
+ get routes() {
40
+ return this.getRaw("routes");
41
+ }
42
+ set routes(routes) {
43
+ this.setRaw("routes", routes);
44
+ }
45
+ /**
46
+ *
47
+ * @param callbackfn
48
+ * @param thisArg
49
+ */
50
+ forEach(callbackfn, thisArg) {
51
+ return new Set([...Array.from(this.default.keys()), ...Array.from(this.map.keys())]).forEach((key) => {
52
+ callbackfn(this.getRaw(key), key, this.map);
53
+ }, thisArg);
54
+ }
55
+ /**
56
+ *
57
+ * @param propertyKey
58
+ * @param value
59
+ */
60
+ set(propertyKey, value) {
61
+ if (typeof propertyKey === "string") {
62
+ this.setRaw(propertyKey, value);
63
+ }
64
+ else {
65
+ Object.entries(propertyKey).forEach(([key, value]) => {
66
+ this[key] = value;
67
+ });
68
+ }
69
+ return this;
70
+ }
71
+ setRaw(propertyKey, value) {
72
+ setValue(this.map, propertyKey, value);
73
+ return this;
74
+ }
75
+ /**
76
+ *
77
+ * @param propertyKey
78
+ * @param defaultValue
79
+ * @returns {undefined|any}
80
+ */
81
+ get(propertyKey, defaultValue) {
82
+ return this.resolve(this.getRaw(propertyKey, defaultValue));
83
+ }
84
+ getRaw(propertyKey, defaultValue) {
85
+ const value = getValue(this.map, propertyKey);
86
+ if (value !== undefined) {
87
+ return value;
88
+ }
89
+ return getValue(this.default, propertyKey, defaultValue);
90
+ }
91
+ merge(obj) {
92
+ Object.entries(obj).forEach(([key, value]) => {
93
+ const descriptor = Object.getOwnPropertyDescriptor(DIConfiguration.prototype, key);
94
+ const originalValue = this.get(key);
95
+ value = deepMerge(value, originalValue);
96
+ if (descriptor && !["default", "set", "map", "get"].includes(key)) {
97
+ this[key] = value;
98
+ }
99
+ });
100
+ }
101
+ /**
102
+ *
103
+ * @param value
104
+ * @returns {any}
105
+ */
106
+ resolve(value) {
107
+ if (typeof value === "object" && value !== null) {
108
+ if (![Array, Object].includes(classOf(value))) {
109
+ return value;
110
+ }
111
+ return Object.entries(value).reduce((o, [k, v]) => {
112
+ // @ts-ignore
113
+ o[k] = this.resolve(v);
114
+ return o;
115
+ }, Array.isArray(value) ? [] : {});
116
+ }
117
+ if (typeof value === "string") {
118
+ const replacer = (match, key) => getValue(this.map, key);
119
+ return value
120
+ .replace(/\${([\w.]+)}/gi, replacer)
121
+ .replace(/<([\w.]+)>/gi, replacer)
122
+ .replace(/{{([\w.]+)}}/gi, replacer);
123
+ }
124
+ return value;
125
+ }
126
+ build() {
127
+ this.forEach((value, key) => this.map.set(key, this.resolve(value)));
128
+ this.set = this.setRaw;
129
+ this.get = this.getRaw = (propertyKey, defaultValue) => getValue(this.map, propertyKey, defaultValue);
130
+ }
131
+ }
132
+ //# sourceMappingURL=DIConfiguration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DIConfiguration.js","sourceRoot":"","sources":["../../../src/services/DIConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["import {classOf, deepMerge, getValue, proxyDelegation, setValue} from \"@tsed/core\";\nimport {ProviderScope} from \"../domain/ProviderScope\";\nimport type {DIResolver} from \"../interfaces/DIResolver\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider\";\nimport {TokenRoute} from \"../interfaces/TokenRoute\";\n\nexport class DIConfiguration {\n readonly default: Map<string, any> = new Map();\n protected map: Map<string, any> = new Map();\n\n [key: string]: any;\n\n constructor(initialProps = {}) {\n Object.entries({\n scopes: {},\n resolvers: [],\n imports: [],\n routes: [],\n ...initialProps\n }).forEach(([key, value]) => {\n this.default.set(key, value);\n });\n\n return proxyDelegation<DIConfiguration>(this, {\n ownKeys(target) {\n return [...target.default.keys(), ...target.map.keys()];\n }\n });\n }\n\n get scopes(): {[key: string]: ProviderScope} {\n return this.getRaw(\"scopes\");\n }\n\n set scopes(value: {[key: string]: ProviderScope}) {\n this.setRaw(\"scopes\", value);\n }\n\n get resolvers(): DIResolver[] {\n return this.getRaw(\"resolvers\");\n }\n\n set resolvers(resolvers: DIResolver[]) {\n this.setRaw(\"resolvers\", resolvers);\n }\n\n get imports(): TokenProvider[] {\n return this.getRaw(\"imports\");\n }\n\n set imports(imports: TokenProvider[]) {\n this.setRaw(\"imports\", imports);\n }\n\n get routes(): TokenRoute[] {\n return this.getRaw(\"routes\");\n }\n\n set routes(routes: TokenRoute[]) {\n this.setRaw(\"routes\", routes);\n }\n\n /**\n *\n * @param callbackfn\n * @param thisArg\n */\n forEach(callbackfn: (value: any, index: string, map: Map<string, any>) => void, thisArg?: any) {\n return new Set([...Array.from(this.default.keys()), ...Array.from(this.map.keys())]).forEach((key) => {\n callbackfn(this.getRaw(key), key, this.map);\n }, thisArg);\n }\n\n /**\n *\n * @param propertyKey\n * @param value\n */\n set(propertyKey: string | Partial<TsED.Configuration>, value?: any): this {\n if (typeof propertyKey === \"string\") {\n this.setRaw(propertyKey, value);\n } else {\n Object.entries(propertyKey).forEach(([key, value]) => {\n this[key] = value;\n });\n }\n\n return this;\n }\n\n setRaw(propertyKey: string, value: any) {\n setValue(this.map, propertyKey, value);\n\n return this;\n }\n\n /**\n *\n * @param propertyKey\n * @param defaultValue\n * @returns {undefined|any}\n */\n get<T = any>(propertyKey: string, defaultValue?: T): T {\n return this.resolve(this.getRaw(propertyKey, defaultValue));\n }\n\n getRaw(propertyKey: string, defaultValue?: any): any {\n const value = getValue(this.map, propertyKey);\n\n if (value !== undefined) {\n return value;\n }\n\n return getValue(this.default, propertyKey, defaultValue);\n }\n\n merge(obj: Partial<TsED.Configuration>) {\n Object.entries(obj).forEach(([key, value]) => {\n const descriptor = Object.getOwnPropertyDescriptor(DIConfiguration.prototype, key);\n const originalValue = this.get(key);\n value = deepMerge(value, originalValue);\n\n if (descriptor && ![\"default\", \"set\", \"map\", \"get\"].includes(key)) {\n this[key] = value;\n }\n });\n }\n\n /**\n *\n * @param value\n * @returns {any}\n */\n resolve(value: any) {\n if (typeof value === \"object\" && value !== null) {\n if (![Array, Object].includes(classOf(value))) {\n return value;\n }\n\n return Object.entries(value).reduce(\n (o, [k, v]) => {\n // @ts-ignore\n o[k] = this.resolve(v);\n\n return o;\n },\n Array.isArray(value) ? [] : {}\n );\n }\n\n if (typeof value === \"string\") {\n const replacer = (match: string, key: string) => getValue(this.map, key);\n return value\n .replace(/\\${([\\w.]+)}/gi, replacer)\n .replace(/<([\\w.]+)>/gi, replacer)\n .replace(/{{([\\w.]+)}}/gi, replacer);\n }\n\n return value;\n }\n\n build() {\n this.forEach((value, key) => this.map.set(key, this.resolve(value)));\n\n this.set = this.setRaw;\n this.get = this.getRaw = (propertyKey: string, defaultValue?: any) => getValue(this.map, propertyKey, defaultValue);\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { Logger } from "@tsed/logger";
2
+ import { registerProvider } from "../registries/ProviderRegistry.js";
3
+ import { InjectorService } from "./InjectorService.js";
4
+ registerProvider({
5
+ provide: Logger,
6
+ deps: [InjectorService],
7
+ useFactory(injector) {
8
+ return injector.logger;
9
+ }
10
+ });
11
+ //# sourceMappingURL=DILogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DILogger.js","sourceRoot":"","sources":["../../../src/services/DILogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD,gBAAgB,CAAC;IACf,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,CAAC,eAAe,CAAC;IACvB,UAAU,CAAC,QAAyB;QAClC,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;CACF,CAAC,CAAC","sourcesContent":["import {Logger} from \"@tsed/logger\";\nimport {registerProvider} from \"../registries/ProviderRegistry\";\nimport {InjectorService} from \"./InjectorService\";\n\nregisterProvider({\n provide: Logger,\n deps: [InjectorService],\n useFactory(injector: InjectorService) {\n return injector.logger;\n }\n});\n"]}
@@ -0,0 +1,112 @@
1
+ import { Env, getValue } from "@tsed/core";
2
+ import { $log } from "@tsed/logger";
3
+ import { createContainer } from "../utils/createContainer.js";
4
+ import { LocalsContainer } from "../domain/LocalsContainer.js";
5
+ import { setLoggerLevel } from "../utils/setLoggerLevel.js";
6
+ import { InjectorService } from "./InjectorService.js";
7
+ import { DIContext } from "../domain/DIContext.js";
8
+ /**
9
+ * Tool to run test with lightweight DI sandbox.
10
+ */
11
+ export class DITest {
12
+ static get injector() {
13
+ if (DITest._injector) {
14
+ return DITest._injector;
15
+ }
16
+ /* istanbul ignore next */
17
+ throw new Error("PlatformTest.injector is not initialized. Use PlatformTest.create(): Promise before PlatformTest.invoke() or PlatformTest.injector.\n" +
18
+ "Example:\n" +
19
+ "before(async () => {\n" +
20
+ " await PlatformTest.create()\n" +
21
+ " await PlatformTest.invoke(MyService, [])\n" +
22
+ "})");
23
+ }
24
+ static set injector(injector) {
25
+ DITest._injector = injector;
26
+ }
27
+ static hasInjector() {
28
+ return !!DITest._injector;
29
+ }
30
+ static async create(settings = {}) {
31
+ DITest.injector = DITest.createInjector(settings);
32
+ await this.createContainer(settings);
33
+ }
34
+ static async createContainer(settings = {}) {
35
+ var _a;
36
+ const container = createContainer();
37
+ (_a = settings.imports) === null || _a === void 0 ? void 0 : _a.forEach(({ token, use }) => {
38
+ container.addProvider(token, {
39
+ useValue: use
40
+ });
41
+ });
42
+ await DITest.injector.load(container);
43
+ }
44
+ /**
45
+ * Create a new injector with the right default services
46
+ */
47
+ static createInjector(settings = {}) {
48
+ const injector = new InjectorService();
49
+ injector.logger = $log;
50
+ // @ts-ignore
51
+ injector.settings.set(DITest.configure(settings));
52
+ setLoggerLevel(injector);
53
+ return injector;
54
+ }
55
+ /**
56
+ * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.
57
+ */
58
+ static async reset() {
59
+ if (DITest.hasInjector()) {
60
+ await DITest.injector.destroy();
61
+ DITest._injector = null;
62
+ }
63
+ }
64
+ /**
65
+ * Invoke a provider and return a fresh instance
66
+ * @param target
67
+ * @param providers
68
+ */
69
+ static invoke(target, providers = []) {
70
+ const locals = new LocalsContainer();
71
+ providers.forEach((p) => {
72
+ locals.set(p.token, p.use);
73
+ });
74
+ locals.set(InjectorService, DITest.injector);
75
+ const instance = DITest.injector.invoke(target, locals, { rebuild: true });
76
+ if (instance && instance.$onInit) {
77
+ // await instance.$onInit();
78
+ const result = instance.$onInit();
79
+ if (result instanceof Promise) {
80
+ return result.then(() => instance);
81
+ }
82
+ }
83
+ return instance;
84
+ }
85
+ /**
86
+ * Return the instance from injector registry
87
+ * @param target
88
+ * @param options
89
+ */
90
+ static get(target, options = {}) {
91
+ return DITest.injector.get(target, options);
92
+ }
93
+ static createDIContext() {
94
+ return new DIContext({
95
+ id: "id",
96
+ injector: DITest.injector,
97
+ logger: DITest.injector.logger
98
+ });
99
+ }
100
+ static configure(settings = {}) {
101
+ return {
102
+ ...settings,
103
+ env: getValue(settings, "env", Env.TEST),
104
+ logger: {
105
+ ...getValue(settings, "logger", {}),
106
+ level: getValue(settings, "logger.level", "off")
107
+ }
108
+ };
109
+ }
110
+ }
111
+ DITest._injector = null;
112
+ //# sourceMappingURL=DITest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DITest.js","sourceRoot":"","sources":["../../../src/services/DITest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,QAAQ,EAAC,MAAM,YAAY,CAAC;AACzC,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAW9C;;GAEG;AACH,MAAM,OAAO,MAAM;IAGjB,MAAM,KAAK,QAAQ;QACjB,IAAI,MAAM,CAAC,SAAS,EAAE;YACpB,OAAO,MAAM,CAAC,SAAU,CAAC;SAC1B;QAED,0BAA0B;QAC1B,MAAM,IAAI,KAAK,CACb,uIAAuI;YACrI,YAAY;YACZ,wBAAwB;YACxB,kCAAkC;YAClC,+CAA+C;YAC/C,IAAI,CACP,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,QAAQ,CAAC,QAAyB;QAC3C,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAA0B,EAAE;QAC9C,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAElD,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAA0B,EAAE;;QACvD,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;QAEpC,MAAA,QAAQ,CAAC,OAAO,0CAAE,OAAO,CAAC,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,EAAE,EAAE;YACzC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE;gBAC3B,QAAQ,EAAE,GAAG;aACd,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,WAAgB,EAAE;QACtC,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;QAEvB,aAAa;QACb,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAElD,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEzB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK;QAChB,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;YACxB,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAU,MAAqB,EAAE,YAAmC,EAAE;QACjF,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAW,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;QAEjF,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE;YAChC,4BAA4B;YAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,YAAY,OAAO,EAAE;gBAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAe,CAAC,CAAC;aAC3C;SACF;QAED,OAAO,QAAe,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAU,MAAqB,EAAE,UAAe,EAAE;QAC1D,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAI,MAAM,EAAE,OAAO,CAAE,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,eAAe;QACpB,OAAO,IAAI,SAAS,CAAC;YACnB,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;SAC/B,CAAC,CAAC;IACL,CAAC;IAES,MAAM,CAAC,SAAS,CAAC,WAAwC,EAAE;QACnE,OAAO;YACL,GAAG,QAAQ;YACX,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;YACxC,MAAM,EAAE;gBACN,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;gBACnC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC;aACjD;SACF,CAAC;IACJ,CAAC;;AAzHgB,gBAAS,GAA2B,IAAI,CAAC","sourcesContent":["import {Env, getValue} from \"@tsed/core\";\nimport {$log} from \"@tsed/logger\";\nimport {createContainer} from \"../utils/createContainer\";\nimport {LocalsContainer} from \"../domain/LocalsContainer\";\nimport {OnInit} from \"../interfaces/OnInit\";\nimport {TokenProvider} from \"../interfaces/TokenProvider\";\nimport {setLoggerLevel} from \"../utils/setLoggerLevel\";\nimport {InjectorService} from \"./InjectorService\";\nimport {DIContext} from \"../domain/DIContext\";\n\nexport interface DITestInvokeOptions {\n token?: TokenProvider;\n use: any;\n}\n\nexport interface DITestOptions extends Partial<TsED.Configuration> {\n imports?: DITestInvokeOptions[];\n}\n\n/**\n * Tool to run test with lightweight DI sandbox.\n */\nexport class DITest {\n protected static _injector: InjectorService | null = null;\n\n static get injector(): InjectorService {\n if (DITest._injector) {\n return DITest._injector!;\n }\n\n /* istanbul ignore next */\n throw new Error(\n \"PlatformTest.injector is not initialized. Use PlatformTest.create(): Promise before PlatformTest.invoke() or PlatformTest.injector.\\n\" +\n \"Example:\\n\" +\n \"before(async () => {\\n\" +\n \" await PlatformTest.create()\\n\" +\n \" await PlatformTest.invoke(MyService, [])\\n\" +\n \"})\"\n );\n }\n\n static set injector(injector: InjectorService) {\n DITest._injector = injector;\n }\n\n static hasInjector() {\n return !!DITest._injector;\n }\n\n static async create(settings: DITestOptions = {}) {\n DITest.injector = DITest.createInjector(settings);\n\n await this.createContainer(settings);\n }\n\n static async createContainer(settings: DITestOptions = {}) {\n const container = createContainer();\n\n settings.imports?.forEach(({token, use}) => {\n container.addProvider(token, {\n useValue: use\n });\n });\n\n await DITest.injector.load(container);\n }\n\n /**\n * Create a new injector with the right default services\n */\n static createInjector(settings: any = {}): InjectorService {\n const injector = new InjectorService();\n injector.logger = $log;\n\n // @ts-ignore\n injector.settings.set(DITest.configure(settings));\n\n setLoggerLevel(injector);\n\n return injector;\n }\n\n /**\n * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.\n */\n static async reset() {\n if (DITest.hasInjector()) {\n await DITest.injector.destroy();\n DITest._injector = null;\n }\n }\n\n /**\n * Invoke a provider and return a fresh instance\n * @param target\n * @param providers\n */\n static invoke<T = any>(target: TokenProvider, providers: DITestInvokeOptions[] = []): T | Promise<T> {\n const locals = new LocalsContainer();\n providers.forEach((p) => {\n locals.set(p.token, p.use);\n });\n\n locals.set(InjectorService, DITest.injector);\n\n const instance: OnInit = DITest.injector.invoke(target, locals, {rebuild: true});\n\n if (instance && instance.$onInit) {\n // await instance.$onInit();\n const result = instance.$onInit();\n if (result instanceof Promise) {\n return result.then(() => instance as any);\n }\n }\n\n return instance as any;\n }\n\n /**\n * Return the instance from injector registry\n * @param target\n * @param options\n */\n static get<T = any>(target: TokenProvider, options: any = {}): T {\n return DITest.injector.get<T>(target, options)!;\n }\n\n static createDIContext() {\n return new DIContext({\n id: \"id\",\n injector: DITest.injector,\n logger: DITest.injector.logger\n });\n }\n\n protected static configure(settings: Partial<TsED.Configuration> = {}): Partial<TsED.Configuration> {\n return {\n ...settings,\n env: getValue(settings, \"env\", Env.TEST),\n logger: {\n ...getValue(settings, \"logger\", {}),\n level: getValue(settings, \"logger.level\", \"off\")\n }\n };\n }\n}\n"]}