@tsed/di 6.88.1 → 6.89.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 (336) hide show
  1. package/lib/{constants → cjs/constants}/index.d.ts +0 -0
  2. package/lib/cjs/constants/index.js +7 -0
  3. package/lib/cjs/constants/index.js.map +1 -0
  4. package/lib/{decorators → cjs/decorators}/configuration.d.ts +0 -0
  5. package/lib/cjs/decorators/configuration.js +24 -0
  6. package/lib/cjs/decorators/configuration.js.map +1 -0
  7. package/lib/{decorators → cjs/decorators}/constant.d.ts +0 -0
  8. package/lib/cjs/decorators/constant.js +55 -0
  9. package/lib/cjs/decorators/constant.js.map +1 -0
  10. package/lib/{decorators → cjs/decorators}/controller.d.ts +0 -0
  11. package/lib/cjs/decorators/controller.js +53 -0
  12. package/lib/cjs/decorators/controller.js.map +1 -0
  13. package/lib/{decorators → cjs/decorators}/index.d.ts +0 -0
  14. package/lib/cjs/decorators/index.js +19 -0
  15. package/lib/cjs/decorators/index.js.map +1 -0
  16. package/lib/{decorators → cjs/decorators}/inject.d.ts +0 -0
  17. package/lib/cjs/decorators/inject.js +79 -0
  18. package/lib/cjs/decorators/inject.js.map +1 -0
  19. package/lib/{decorators → cjs/decorators}/injectable.d.ts +0 -0
  20. package/lib/cjs/decorators/injectable.js +33 -0
  21. package/lib/cjs/decorators/injectable.js.map +1 -0
  22. package/lib/{decorators → cjs/decorators}/intercept.d.ts +0 -0
  23. package/lib/cjs/decorators/intercept.js +28 -0
  24. package/lib/cjs/decorators/intercept.js.map +1 -0
  25. package/lib/{decorators → cjs/decorators}/interceptor.d.ts +0 -0
  26. package/lib/cjs/decorators/interceptor.js +21 -0
  27. package/lib/cjs/decorators/interceptor.js.map +1 -0
  28. package/lib/{decorators → cjs/decorators}/lazyInject.d.ts +0 -0
  29. package/lib/cjs/decorators/lazyInject.js +71 -0
  30. package/lib/cjs/decorators/lazyInject.js.map +1 -0
  31. package/lib/{decorators → cjs/decorators}/module.d.ts +0 -0
  32. package/lib/cjs/decorators/module.js +31 -0
  33. package/lib/cjs/decorators/module.js.map +1 -0
  34. package/lib/{decorators → cjs/decorators}/opts.d.ts +0 -0
  35. package/lib/cjs/decorators/opts.js +54 -0
  36. package/lib/cjs/decorators/opts.js.map +1 -0
  37. package/lib/{decorators → cjs/decorators}/overrideProvider.d.ts +0 -0
  38. package/lib/cjs/decorators/overrideProvider.js +17 -0
  39. package/lib/cjs/decorators/overrideProvider.js.map +1 -0
  40. package/lib/{decorators → cjs/decorators}/scope.d.ts +0 -0
  41. package/lib/cjs/decorators/scope.js +16 -0
  42. package/lib/cjs/decorators/scope.js.map +1 -0
  43. package/lib/{decorators → cjs/decorators}/service.d.ts +0 -0
  44. package/lib/cjs/decorators/service.js +18 -0
  45. package/lib/cjs/decorators/service.js.map +1 -0
  46. package/lib/{decorators → cjs/decorators}/useOpts.d.ts +0 -0
  47. package/lib/cjs/decorators/useOpts.js +65 -0
  48. package/lib/cjs/decorators/useOpts.js.map +1 -0
  49. package/lib/{decorators → cjs/decorators}/value.d.ts +0 -0
  50. package/lib/cjs/decorators/value.js +55 -0
  51. package/lib/cjs/decorators/value.js.map +1 -0
  52. package/lib/{domain → cjs/domain}/Container.d.ts +0 -0
  53. package/lib/cjs/domain/Container.js +72 -0
  54. package/lib/cjs/domain/Container.js.map +1 -0
  55. package/lib/{domain → cjs/domain}/ContextLogger.d.ts +0 -0
  56. package/lib/cjs/domain/ContextLogger.js +85 -0
  57. package/lib/cjs/domain/ContextLogger.js.map +1 -0
  58. package/lib/{domain → cjs/domain}/DIContext.d.ts +0 -0
  59. package/lib/cjs/domain/DIContext.js +45 -0
  60. package/lib/cjs/domain/DIContext.js.map +1 -0
  61. package/lib/{domain → cjs/domain}/InjectablePropertyType.d.ts +0 -0
  62. package/lib/cjs/domain/InjectablePropertyType.js +12 -0
  63. package/lib/cjs/domain/InjectablePropertyType.js.map +1 -0
  64. package/lib/{domain → cjs/domain}/LocalsContainer.d.ts +0 -0
  65. package/lib/cjs/domain/LocalsContainer.js +55 -0
  66. package/lib/cjs/domain/LocalsContainer.js.map +1 -0
  67. package/lib/{domain → cjs/domain}/Provider.d.ts +0 -0
  68. package/lib/cjs/domain/Provider.js +122 -0
  69. package/lib/cjs/domain/Provider.js.map +1 -0
  70. package/lib/{domain → cjs/domain}/ProviderScope.d.ts +0 -0
  71. package/lib/cjs/domain/ProviderScope.js +10 -0
  72. package/lib/cjs/domain/ProviderScope.js.map +1 -0
  73. package/lib/{domain → cjs/domain}/ProviderType.d.ts +0 -0
  74. package/lib/cjs/domain/ProviderType.js +15 -0
  75. package/lib/cjs/domain/ProviderType.js.map +1 -0
  76. package/lib/{domain → cjs/domain}/index.d.ts +0 -0
  77. package/lib/cjs/domain/index.js +12 -0
  78. package/lib/cjs/domain/index.js.map +1 -0
  79. package/lib/{errors → cjs/errors}/InjectionError.d.ts +0 -0
  80. package/lib/cjs/errors/InjectionError.js +58 -0
  81. package/lib/cjs/errors/InjectionError.js.map +1 -0
  82. package/lib/{errors → cjs/errors}/UndefinedTokenError.d.ts +0 -0
  83. package/lib/cjs/errors/UndefinedTokenError.js +11 -0
  84. package/lib/cjs/errors/UndefinedTokenError.js.map +1 -0
  85. package/lib/{index.d.ts → cjs/index.d.ts} +0 -0
  86. package/lib/cjs/index.js +21 -0
  87. package/lib/cjs/index.js.map +1 -0
  88. package/lib/{interfaces → cjs/interfaces}/DIConfigurationOptions.d.ts +0 -0
  89. package/lib/cjs/interfaces/DIConfigurationOptions.js +3 -0
  90. package/lib/cjs/interfaces/DIConfigurationOptions.js.map +1 -0
  91. package/lib/{interfaces → cjs/interfaces}/DILogger.d.ts +0 -0
  92. package/lib/cjs/interfaces/DILogger.js +3 -0
  93. package/lib/cjs/interfaces/DILogger.js.map +1 -0
  94. package/lib/{interfaces → cjs/interfaces}/DIResolver.d.ts +0 -0
  95. package/lib/cjs/interfaces/DIResolver.js +3 -0
  96. package/lib/cjs/interfaces/DIResolver.js.map +1 -0
  97. package/lib/{interfaces → cjs/interfaces}/IProvider.d.ts +0 -0
  98. package/lib/cjs/interfaces/IProvider.js +3 -0
  99. package/lib/cjs/interfaces/IProvider.js.map +1 -0
  100. package/lib/{interfaces → cjs/interfaces}/InjectableProperties.d.ts +0 -0
  101. package/lib/cjs/interfaces/InjectableProperties.js +3 -0
  102. package/lib/cjs/interfaces/InjectableProperties.js.map +1 -0
  103. package/lib/{interfaces → cjs/interfaces}/InterceptorContext.d.ts +0 -0
  104. package/lib/cjs/interfaces/InterceptorContext.js +3 -0
  105. package/lib/cjs/interfaces/InterceptorContext.js.map +1 -0
  106. package/lib/{interfaces → cjs/interfaces}/InterceptorMethods.d.ts +0 -0
  107. package/lib/cjs/interfaces/InterceptorMethods.js +3 -0
  108. package/lib/cjs/interfaces/InterceptorMethods.js.map +1 -0
  109. package/lib/{interfaces → cjs/interfaces}/InvokeOptions.d.ts +0 -0
  110. package/lib/cjs/interfaces/InvokeOptions.js +3 -0
  111. package/lib/cjs/interfaces/InvokeOptions.js.map +1 -0
  112. package/lib/{interfaces → cjs/interfaces}/OnDestroy.d.ts +0 -0
  113. package/lib/cjs/interfaces/OnDestroy.js +3 -0
  114. package/lib/cjs/interfaces/OnDestroy.js.map +1 -0
  115. package/lib/{interfaces → cjs/interfaces}/OnInit.d.ts +0 -0
  116. package/lib/cjs/interfaces/OnInit.js +3 -0
  117. package/lib/cjs/interfaces/OnInit.js.map +1 -0
  118. package/lib/{interfaces → cjs/interfaces}/RegistrySettings.d.ts +0 -0
  119. package/lib/cjs/interfaces/RegistrySettings.js +3 -0
  120. package/lib/cjs/interfaces/RegistrySettings.js.map +1 -0
  121. package/lib/{interfaces → cjs/interfaces}/ResolvedInvokeOptions.d.ts +0 -0
  122. package/lib/cjs/interfaces/ResolvedInvokeOptions.js +3 -0
  123. package/lib/cjs/interfaces/ResolvedInvokeOptions.js.map +1 -0
  124. package/lib/{interfaces → cjs/interfaces}/TokenProvider.d.ts +0 -0
  125. package/lib/cjs/interfaces/TokenProvider.js +3 -0
  126. package/lib/cjs/interfaces/TokenProvider.js.map +1 -0
  127. package/lib/{interfaces → cjs/interfaces}/index.d.ts +0 -0
  128. package/lib/cjs/interfaces/index.js +18 -0
  129. package/lib/cjs/interfaces/index.js.map +1 -0
  130. package/lib/{registries → cjs/registries}/GlobalProviders.d.ts +0 -0
  131. package/lib/cjs/registries/GlobalProviders.js +124 -0
  132. package/lib/cjs/registries/GlobalProviders.js.map +1 -0
  133. package/lib/{registries → cjs/registries}/ProviderRegistry.d.ts +0 -0
  134. package/lib/cjs/registries/ProviderRegistry.js +149 -0
  135. package/lib/cjs/registries/ProviderRegistry.js.map +1 -0
  136. package/lib/{services → cjs/services}/DIConfiguration.d.ts +0 -0
  137. package/lib/cjs/services/DIConfiguration.js +129 -0
  138. package/lib/cjs/services/DIConfiguration.js.map +1 -0
  139. package/lib/{services → cjs/services}/DILogger.d.ts +0 -0
  140. package/lib/cjs/services/DILogger.js +13 -0
  141. package/lib/cjs/services/DILogger.js.map +1 -0
  142. package/lib/{services → cjs/services}/DITest.d.ts +0 -0
  143. package/lib/cjs/services/DITest.js +100 -0
  144. package/lib/cjs/services/DITest.js.map +1 -0
  145. package/lib/{services → cjs/services}/InjectorService.d.ts +0 -0
  146. package/lib/cjs/services/InjectorService.js +581 -0
  147. package/lib/cjs/services/InjectorService.js.map +1 -0
  148. package/lib/{utils → cjs/utils}/colors.d.ts +0 -0
  149. package/lib/cjs/utils/colors.js +10 -0
  150. package/lib/cjs/utils/colors.js.map +1 -0
  151. package/lib/{utils → cjs/utils}/createContainer.d.ts +0 -0
  152. package/lib/cjs/utils/createContainer.js +14 -0
  153. package/lib/cjs/utils/createContainer.js.map +1 -0
  154. package/lib/cjs/utils/data/Test1.d.ts +3 -0
  155. package/lib/cjs/utils/data/Test1.js +8 -0
  156. package/lib/cjs/utils/data/Test1.js.map +1 -0
  157. package/lib/cjs/utils/data/Test2.d.ts +3 -0
  158. package/lib/cjs/utils/data/Test2.js +8 -0
  159. package/lib/cjs/utils/data/Test2.js.map +1 -0
  160. package/lib/{utils → cjs/utils}/getConfiguration.d.ts +0 -0
  161. package/lib/cjs/utils/getConfiguration.js +20 -0
  162. package/lib/cjs/utils/getConfiguration.js.map +1 -0
  163. package/lib/{utils → cjs/utils}/setLoggerLevel.d.ts +0 -0
  164. package/lib/cjs/utils/setLoggerLevel.js +16 -0
  165. package/lib/cjs/utils/setLoggerLevel.js.map +1 -0
  166. package/lib/esm/constants/index.js +4 -0
  167. package/lib/esm/constants/index.js.map +1 -0
  168. package/lib/esm/decorators/configuration.js +20 -0
  169. package/lib/esm/decorators/configuration.js.map +1 -0
  170. package/lib/esm/decorators/constant.js +51 -0
  171. package/lib/esm/decorators/constant.js.map +1 -0
  172. package/lib/esm/decorators/controller.js +49 -0
  173. package/lib/esm/decorators/controller.js.map +1 -0
  174. package/lib/esm/decorators/index.js +16 -0
  175. package/lib/esm/decorators/index.js.map +1 -0
  176. package/lib/esm/decorators/inject.js +74 -0
  177. package/lib/esm/decorators/inject.js.map +1 -0
  178. package/lib/esm/decorators/injectable.js +29 -0
  179. package/lib/esm/decorators/injectable.js.map +1 -0
  180. package/lib/esm/decorators/intercept.js +24 -0
  181. package/lib/esm/decorators/intercept.js.map +1 -0
  182. package/lib/esm/decorators/interceptor.js +17 -0
  183. package/lib/esm/decorators/interceptor.js.map +1 -0
  184. package/lib/esm/decorators/lazyInject.js +66 -0
  185. package/lib/esm/decorators/lazyInject.js.map +1 -0
  186. package/lib/esm/decorators/module.js +27 -0
  187. package/lib/esm/decorators/module.js.map +1 -0
  188. package/lib/esm/decorators/opts.js +50 -0
  189. package/lib/esm/decorators/opts.js.map +1 -0
  190. package/lib/esm/decorators/overrideProvider.js +13 -0
  191. package/lib/esm/decorators/overrideProvider.js.map +1 -0
  192. package/lib/esm/decorators/scope.js +12 -0
  193. package/lib/esm/decorators/scope.js.map +1 -0
  194. package/lib/esm/decorators/service.js +14 -0
  195. package/lib/esm/decorators/service.js.map +1 -0
  196. package/lib/esm/decorators/useOpts.js +61 -0
  197. package/lib/esm/decorators/useOpts.js.map +1 -0
  198. package/lib/esm/decorators/value.js +51 -0
  199. package/lib/esm/decorators/value.js.map +1 -0
  200. package/lib/esm/domain/Container.js +68 -0
  201. package/lib/esm/domain/Container.js.map +1 -0
  202. package/lib/esm/domain/ContextLogger.js +81 -0
  203. package/lib/esm/domain/ContextLogger.js.map +1 -0
  204. package/lib/esm/domain/DIContext.js +41 -0
  205. package/lib/esm/domain/DIContext.js.map +1 -0
  206. package/lib/esm/domain/InjectablePropertyType.js +9 -0
  207. package/lib/esm/domain/InjectablePropertyType.js.map +1 -0
  208. package/lib/esm/domain/LocalsContainer.js +51 -0
  209. package/lib/esm/domain/LocalsContainer.js.map +1 -0
  210. package/lib/esm/domain/Provider.js +118 -0
  211. package/lib/esm/domain/Provider.js.map +1 -0
  212. package/lib/esm/domain/ProviderScope.js +7 -0
  213. package/lib/esm/domain/ProviderScope.js.map +1 -0
  214. package/lib/esm/domain/ProviderType.js +12 -0
  215. package/lib/esm/domain/ProviderType.js.map +1 -0
  216. package/lib/esm/domain/index.js +9 -0
  217. package/lib/esm/domain/index.js.map +1 -0
  218. package/lib/esm/errors/InjectionError.js +54 -0
  219. package/lib/esm/errors/InjectionError.js.map +1 -0
  220. package/lib/esm/errors/UndefinedTokenError.js +7 -0
  221. package/lib/esm/errors/UndefinedTokenError.js.map +1 -0
  222. package/lib/esm/index.js +18 -0
  223. package/lib/esm/index.js.map +1 -0
  224. package/lib/esm/interfaces/DIConfigurationOptions.js +2 -0
  225. package/lib/esm/interfaces/DIConfigurationOptions.js.map +1 -0
  226. package/lib/esm/interfaces/DILogger.js +2 -0
  227. package/lib/esm/interfaces/DILogger.js.map +1 -0
  228. package/lib/esm/interfaces/DIResolver.js +2 -0
  229. package/lib/esm/interfaces/DIResolver.js.map +1 -0
  230. package/lib/esm/interfaces/IProvider.js +2 -0
  231. package/lib/esm/interfaces/IProvider.js.map +1 -0
  232. package/lib/esm/interfaces/InjectableProperties.js +2 -0
  233. package/lib/esm/interfaces/InjectableProperties.js.map +1 -0
  234. package/lib/esm/interfaces/InterceptorContext.js +2 -0
  235. package/lib/esm/interfaces/InterceptorContext.js.map +1 -0
  236. package/lib/esm/interfaces/InterceptorMethods.js +2 -0
  237. package/lib/esm/interfaces/InterceptorMethods.js.map +1 -0
  238. package/lib/esm/interfaces/InvokeOptions.js +2 -0
  239. package/lib/esm/interfaces/InvokeOptions.js.map +1 -0
  240. package/lib/esm/interfaces/OnDestroy.js +2 -0
  241. package/lib/esm/interfaces/OnDestroy.js.map +1 -0
  242. package/lib/esm/interfaces/OnInit.js +2 -0
  243. package/lib/esm/interfaces/OnInit.js.map +1 -0
  244. package/lib/esm/interfaces/RegistrySettings.js +2 -0
  245. package/lib/esm/interfaces/RegistrySettings.js.map +1 -0
  246. package/lib/esm/interfaces/ResolvedInvokeOptions.js +2 -0
  247. package/lib/esm/interfaces/ResolvedInvokeOptions.js.map +1 -0
  248. package/lib/esm/interfaces/TokenProvider.js +2 -0
  249. package/lib/esm/interfaces/TokenProvider.js.map +1 -0
  250. package/lib/esm/interfaces/index.js +15 -0
  251. package/lib/esm/interfaces/index.js.map +1 -0
  252. package/lib/esm/registries/GlobalProviders.js +120 -0
  253. package/lib/esm/registries/GlobalProviders.js.map +1 -0
  254. package/lib/esm/registries/ProviderRegistry.js +144 -0
  255. package/lib/esm/registries/ProviderRegistry.js.map +1 -0
  256. package/lib/esm/services/DIConfiguration.js +125 -0
  257. package/lib/esm/services/DIConfiguration.js.map +1 -0
  258. package/lib/esm/services/DILogger.js +11 -0
  259. package/lib/esm/services/DILogger.js.map +1 -0
  260. package/lib/esm/services/DITest.js +96 -0
  261. package/lib/esm/services/DITest.js.map +1 -0
  262. package/lib/esm/services/InjectorService.js +578 -0
  263. package/lib/esm/services/InjectorService.js.map +1 -0
  264. package/lib/esm/utils/colors.js +7 -0
  265. package/lib/esm/utils/colors.js.map +1 -0
  266. package/lib/esm/utils/createContainer.js +10 -0
  267. package/lib/esm/utils/createContainer.js.map +1 -0
  268. package/lib/esm/utils/data/Test1.js +4 -0
  269. package/lib/esm/utils/data/Test1.js.map +1 -0
  270. package/lib/esm/utils/data/Test2.js +4 -0
  271. package/lib/esm/utils/data/Test2.js.map +1 -0
  272. package/lib/esm/utils/getConfiguration.js +16 -0
  273. package/lib/esm/utils/getConfiguration.js.map +1 -0
  274. package/lib/esm/utils/setLoggerLevel.js +12 -0
  275. package/lib/esm/utils/setLoggerLevel.js.map +1 -0
  276. package/lib/types/constants/index.d.ts +3 -0
  277. package/lib/types/decorators/configuration.d.ts +8 -0
  278. package/lib/types/decorators/constant.d.ts +36 -0
  279. package/lib/types/decorators/controller.d.ts +43 -0
  280. package/lib/types/decorators/index.d.ts +15 -0
  281. package/lib/types/decorators/inject.d.ts +21 -0
  282. package/lib/types/decorators/injectable.d.ts +21 -0
  283. package/lib/types/decorators/intercept.d.ts +10 -0
  284. package/lib/types/decorators/interceptor.d.ts +10 -0
  285. package/lib/types/decorators/lazyInject.d.ts +43 -0
  286. package/lib/types/decorators/module.d.ts +36 -0
  287. package/lib/types/decorators/opts.d.ts +41 -0
  288. package/lib/types/decorators/overrideProvider.d.ts +8 -0
  289. package/lib/types/decorators/scope.d.ts +8 -0
  290. package/lib/types/decorators/service.d.ts +10 -0
  291. package/lib/types/decorators/useOpts.d.ts +42 -0
  292. package/lib/types/decorators/value.d.ts +36 -0
  293. package/lib/types/domain/Container.d.ts +43 -0
  294. package/lib/types/domain/ContextLogger.d.ts +41 -0
  295. package/lib/types/domain/DIContext.d.ts +72 -0
  296. package/lib/types/domain/InjectablePropertyType.d.ts +7 -0
  297. package/lib/types/domain/LocalsContainer.d.ts +25 -0
  298. package/lib/types/domain/Provider.d.ts +68 -0
  299. package/lib/types/domain/ProviderScope.d.ts +5 -0
  300. package/lib/types/domain/ProviderType.d.ts +10 -0
  301. package/lib/types/domain/index.d.ts +8 -0
  302. package/lib/types/errors/InjectionError.d.ts +8 -0
  303. package/lib/types/errors/UndefinedTokenError.d.ts +4 -0
  304. package/lib/types/index.d.ts +17 -0
  305. package/lib/types/interfaces/DIConfigurationOptions.d.ts +25 -0
  306. package/lib/types/interfaces/DILogger.d.ts +8 -0
  307. package/lib/types/interfaces/DIResolver.d.ts +5 -0
  308. package/lib/types/interfaces/IProvider.d.ts +54 -0
  309. package/lib/types/interfaces/InjectableProperties.d.ts +24 -0
  310. package/lib/types/interfaces/InterceptorContext.d.ts +11 -0
  311. package/lib/types/interfaces/InterceptorMethods.d.ts +4 -0
  312. package/lib/types/interfaces/InvokeOptions.d.ts +10 -0
  313. package/lib/types/interfaces/OnDestroy.d.ts +3 -0
  314. package/lib/types/interfaces/OnInit.d.ts +3 -0
  315. package/lib/types/interfaces/RegistrySettings.d.ts +20 -0
  316. package/lib/types/interfaces/ResolvedInvokeOptions.d.ts +12 -0
  317. package/lib/types/interfaces/TokenProvider.d.ts +2 -0
  318. package/lib/types/interfaces/index.d.ts +14 -0
  319. package/lib/types/registries/GlobalProviders.d.ts +55 -0
  320. package/lib/types/registries/ProviderRegistry.d.ts +121 -0
  321. package/lib/types/services/DIConfiguration.d.ts +47 -0
  322. package/lib/types/services/DILogger.d.ts +1 -0
  323. package/lib/types/services/DITest.d.ts +37 -0
  324. package/lib/types/services/InjectorService.d.ts +229 -0
  325. package/lib/types/utils/colors.d.ts +5 -0
  326. package/lib/types/utils/createContainer.d.ts +3 -0
  327. package/lib/types/utils/data/Test1.d.ts +3 -0
  328. package/lib/types/utils/data/Test2.d.ts +3 -0
  329. package/lib/types/utils/getConfiguration.d.ts +2 -0
  330. package/lib/types/utils/setLoggerLevel.d.ts +6 -0
  331. package/package.json +12 -8
  332. package/tsconfig.compile.esm.json +24 -0
  333. package/lib/index.js +0 -2546
  334. package/lib/index.js.map +0 -1
  335. package/lib/index.modern.js +0 -2508
  336. package/lib/index.modern.js.map +0 -1
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerController = exports.registerValue = exports.registerFactory = exports.registerProvider = void 0;
4
+ const Provider_1 = require("../domain/Provider");
5
+ const domain_1 = require("../domain");
6
+ const GlobalProviders_1 = require("./GlobalProviders");
7
+ /**
8
+ *
9
+ */
10
+ GlobalProviders_1.GlobalProviders.createRegistry(domain_1.ProviderType.CONTROLLER, Provider_1.Provider);
11
+ /**
12
+ * Register a provider configuration.
13
+ * @param {IProvider<any>} provider
14
+ */
15
+ function registerProvider(provider) {
16
+ if (!provider.provide) {
17
+ throw new Error("Provider.provide is required");
18
+ }
19
+ GlobalProviders_1.GlobalProviders.merge(provider.provide, provider);
20
+ }
21
+ exports.registerProvider = registerProvider;
22
+ /**
23
+ * Add a new factory in the `ProviderRegistry`.
24
+ *
25
+ * #### Example with symbol definition
26
+ *
27
+ *
28
+ * ```typescript
29
+ * import {registerFactory, InjectorService} from "@tsed/di";
30
+ *
31
+ * export interface IMyFooFactory {
32
+ * getFoo(): string;
33
+ * }
34
+ *
35
+ * export type MyFooFactory = IMyFooFactory;
36
+ * export const MyFooFactory = Symbol("MyFooFactory");
37
+ *
38
+ * registerFactory(MyFooFactory, {
39
+ * getFoo: () => "test"
40
+ * });
41
+ *
42
+ * // or
43
+ *
44
+ * registerFactory({provide: MyFooFactory, instance: {
45
+ * getFoo: () => "test"
46
+ * }});
47
+ *
48
+ * @Service()
49
+ * export class OtherService {
50
+ * constructor(@Inject(MyFooFactory) myFooFactory: MyFooFactory){
51
+ * console.log(myFooFactory.getFoo()); /// "test"
52
+ * }
53
+ * }
54
+ * ```
55
+ *
56
+ * > Note: When you use the factory method with Symbol definition, you must use the `@Inject()`
57
+ * decorator to retrieve your factory in another Service. Advice: By convention all factory class name will be prefixed by
58
+ * `Factory`.
59
+ *
60
+ * #### Example with class
61
+ *
62
+ * ```typescript
63
+ * import {InjectorService, registerFactory} from "@tsed/di";
64
+ *
65
+ * export class MyFooService {
66
+ * constructor(){}
67
+ * getFoo() {
68
+ * return "test";
69
+ * }
70
+ * }
71
+ *
72
+ * registerFactory(MyFooService, new MyFooService());
73
+ * // or
74
+ * registerFactory({provider: MyFooService, instance: new MyFooService()});
75
+ *
76
+ * @Service()
77
+ * export class OtherService {
78
+ * constructor(myFooService: MyFooService){
79
+ * console.log(myFooFactory.getFoo()); /// "test"
80
+ * }
81
+ * }
82
+ * ```
83
+ * @deprecated Since 2021-05-15. Use registerProvider instead.
84
+ */
85
+ exports.registerFactory = registerProvider;
86
+ /**
87
+ * Add a new value in the `ProviderRegistry`.
88
+ *
89
+ * #### Example with symbol definition
90
+ *
91
+ *
92
+ * ```typescript
93
+ * import {registerValue, InjectorService} from "@tsed/di";
94
+ *
95
+ * const MyValue = Symbol.from("MyValue")
96
+ *
97
+ * registerValue({token: MyValue, useValue: "myValue"});
98
+ *
99
+ * @Service()
100
+ * export class OtherService {
101
+ * constructor(@Inject(MyValue) myValue: string){
102
+ * console.log(myValue); /// "myValue"
103
+ * }
104
+ * }
105
+ * ```
106
+ */
107
+ const registerValue = (provider, value) => {
108
+ if (!provider.provide) {
109
+ provider = {
110
+ provide: provider
111
+ };
112
+ }
113
+ provider = Object.assign({
114
+ scope: domain_1.ProviderScope.SINGLETON,
115
+ useValue: value
116
+ }, provider, { type: domain_1.ProviderType.VALUE });
117
+ GlobalProviders_1.GlobalProviders.merge(provider.provide, provider);
118
+ };
119
+ exports.registerValue = registerValue;
120
+ /**
121
+ * Add a new controller in the `ProviderRegistry`. This controller will be built when `InjectorService` will be loaded.
122
+ *
123
+ * #### Example
124
+ *
125
+ * ```typescript
126
+ * import {registerController, InjectorService} from "@tsed/di";
127
+ *
128
+ * export default class MyController {
129
+ * constructor(){}
130
+ * transform() {
131
+ * return "test";
132
+ * }
133
+ * }
134
+ *
135
+ * registerController({provide: MyController});
136
+ * // or
137
+ * registerController(MyController);
138
+ *
139
+ * const injector = new InjectorService();
140
+ * injector.load();
141
+ *
142
+ * const myController = injector.get<MyController>(MyController);
143
+ * myController.getFoo(); // test
144
+ * ```
145
+ *
146
+ * @param provider Provider configuration.
147
+ */
148
+ exports.registerController = GlobalProviders_1.GlobalProviders.createRegisterFn(domain_1.ProviderType.CONTROLLER);
149
+ //# sourceMappingURL=ProviderRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderRegistry.js","sourceRoot":"","sources":["../../../src/registries/ProviderRegistry.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAE5C,sCAAsD;AACtD,uDAAkD;AAElD;;GAEG;AACH,iCAAe,CAAC,cAAc,CAAC,qBAAY,CAAC,UAAU,EAAE,mBAAQ,CAAC,CAAC;AAElE;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,QAA4B;IAC3D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;KACjD;IAED,iCAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC;AAND,4CAMC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACU,QAAA,eAAe,GAAG,gBAAgB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,MAAM,aAAa,GAAG,CAAC,QAA8B,EAAE,KAAW,EAAQ,EAAE;IACjF,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,sBAAa,CAAC,SAAS;QAC9B,QAAQ,EAAE,KAAK;KAChB,EACD,QAAQ,EACR,EAAC,IAAI,EAAE,qBAAY,CAAC,KAAK,EAAC,CAC3B,CAAC;IACF,iCAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACU,QAAA,kBAAkB,GAAG,iCAAe,CAAC,gBAAgB,CAAC,qBAAY,CAAC,UAAU,CAAC,CAAC","sourcesContent":["import {Provider} from \"../domain/Provider\";\nimport type {IProvider} from \"../interfaces\";\nimport {ProviderScope, ProviderType} from \"../domain\";\nimport {GlobalProviders} from \"./GlobalProviders\";\n\n/**\n *\n */\nGlobalProviders.createRegistry(ProviderType.CONTROLLER, Provider);\n\n/**\n * Register a provider configuration.\n * @param {IProvider<any>} provider\n */\nexport function registerProvider(provider: Partial<IProvider>): 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 factory in the `ProviderRegistry`.\n *\n * #### Example with symbol definition\n *\n *\n * ```typescript\n * import {registerFactory, InjectorService} from \"@tsed/di\";\n *\n * export interface IMyFooFactory {\n * getFoo(): string;\n * }\n *\n * export type MyFooFactory = IMyFooFactory;\n * export const MyFooFactory = Symbol(\"MyFooFactory\");\n *\n * registerFactory(MyFooFactory, {\n * getFoo: () => \"test\"\n * });\n *\n * // or\n *\n * registerFactory({provide: MyFooFactory, instance: {\n * getFoo: () => \"test\"\n * }});\n *\n * @Service()\n * export class OtherService {\n * constructor(@Inject(MyFooFactory) myFooFactory: MyFooFactory){\n * console.log(myFooFactory.getFoo()); /// \"test\"\n * }\n * }\n * ```\n *\n * > Note: When you use the factory method with Symbol definition, you must use the `@Inject()`\n * decorator to retrieve your factory in another Service. Advice: By convention all factory class name will be prefixed by\n * `Factory`.\n *\n * #### Example with class\n *\n * ```typescript\n * import {InjectorService, registerFactory} from \"@tsed/di\";\n *\n * export class MyFooService {\n * constructor(){}\n * getFoo() {\n * return \"test\";\n * }\n * }\n *\n * registerFactory(MyFooService, new MyFooService());\n * // or\n * registerFactory({provider: MyFooService, instance: new MyFooService()});\n *\n * @Service()\n * export class OtherService {\n * constructor(myFooService: MyFooService){\n * console.log(myFooFactory.getFoo()); /// \"test\"\n * }\n * }\n * ```\n * @deprecated Since 2021-05-15. Use registerProvider instead.\n */\nexport const registerFactory = registerProvider;\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 | IProvider<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,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DIConfiguration = void 0;
4
+ const core_1 = require("@tsed/core");
5
+ class DIConfiguration {
6
+ constructor(initialProps = {}) {
7
+ this.default = new Map();
8
+ this.map = new Map();
9
+ Object.entries({
10
+ scopes: {},
11
+ resolvers: [],
12
+ imports: [],
13
+ ...initialProps
14
+ }).forEach(([key, value]) => {
15
+ this.default.set(key, value);
16
+ });
17
+ return (0, core_1.proxyDelegation)(this, {
18
+ ownKeys(target) {
19
+ return [...target.default.keys(), ...target.map.keys()];
20
+ }
21
+ });
22
+ }
23
+ get scopes() {
24
+ return this.getRaw("scopes");
25
+ }
26
+ set scopes(value) {
27
+ this.setRaw("scopes", value);
28
+ }
29
+ get resolvers() {
30
+ return this.getRaw("resolvers");
31
+ }
32
+ set resolvers(resolvers) {
33
+ this.setRaw("resolvers", resolvers);
34
+ }
35
+ get imports() {
36
+ return this.getRaw("imports");
37
+ }
38
+ set imports(imports) {
39
+ this.setRaw("imports", imports);
40
+ }
41
+ /**
42
+ *
43
+ * @param callbackfn
44
+ * @param thisArg
45
+ */
46
+ forEach(callbackfn, thisArg) {
47
+ return new Set([...Array.from(this.default.keys()), ...Array.from(this.map.keys())]).forEach((key) => {
48
+ callbackfn(this.getRaw(key), key, this.map);
49
+ }, thisArg);
50
+ }
51
+ /**
52
+ *
53
+ * @param propertyKey
54
+ * @param value
55
+ */
56
+ set(propertyKey, value) {
57
+ if (typeof propertyKey === "string") {
58
+ this.setRaw(propertyKey, value);
59
+ }
60
+ else {
61
+ Object.entries(propertyKey).forEach(([key, value]) => {
62
+ this[key] = value;
63
+ });
64
+ }
65
+ return this;
66
+ }
67
+ setRaw(propertyKey, value) {
68
+ (0, core_1.setValue)(this.map, propertyKey, value);
69
+ return this;
70
+ }
71
+ /**
72
+ *
73
+ * @param propertyKey
74
+ * @param defaultValue
75
+ * @returns {undefined|any}
76
+ */
77
+ get(propertyKey, defaultValue) {
78
+ return this.resolve(this.getRaw(propertyKey, defaultValue));
79
+ }
80
+ getRaw(propertyKey, defaultValue) {
81
+ const value = (0, core_1.getValue)(this.map, propertyKey);
82
+ if (value !== undefined) {
83
+ return value;
84
+ }
85
+ return (0, core_1.getValue)(this.default, propertyKey, defaultValue);
86
+ }
87
+ merge(obj) {
88
+ Object.entries(obj).forEach(([key, value]) => {
89
+ const descriptor = Object.getOwnPropertyDescriptor(DIConfiguration.prototype, key);
90
+ const originalValue = this.get(key);
91
+ value = (0, core_1.deepMerge)(value, originalValue);
92
+ if (descriptor && !["default", "set", "map", "get"].includes(key)) {
93
+ this[key] = value;
94
+ }
95
+ });
96
+ }
97
+ /**
98
+ *
99
+ * @param value
100
+ * @returns {any}
101
+ */
102
+ resolve(value) {
103
+ if (typeof value === "object" && value !== null) {
104
+ if (![Array, Object].includes((0, core_1.classOf)(value))) {
105
+ return value;
106
+ }
107
+ return Object.entries(value).reduce((o, [k, v]) => {
108
+ // @ts-ignore
109
+ o[k] = this.resolve(v);
110
+ return o;
111
+ }, Array.isArray(value) ? [] : {});
112
+ }
113
+ if (typeof value === "string") {
114
+ const replacer = (match, key) => (0, core_1.getValue)(this.map, key);
115
+ return value
116
+ .replace(/\${([\w.]+)}/gi, replacer)
117
+ .replace(/<([\w.]+)>/gi, replacer)
118
+ .replace(/{{([\w.]+)}}/gi, replacer);
119
+ }
120
+ return value;
121
+ }
122
+ build() {
123
+ this.forEach((value, key) => this.map.set(key, this.resolve(value)));
124
+ this.set = this.setRaw;
125
+ this.get = this.getRaw = (propertyKey, defaultValue) => (0, core_1.getValue)(this.map, propertyKey, defaultValue);
126
+ }
127
+ }
128
+ exports.DIConfiguration = DIConfiguration;
129
+ //# 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\";\nimport type {DIResolver, TokenProvider} from \"../interfaces\";\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 ...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 /**\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"]}
File without changes
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const logger_1 = require("@tsed/logger");
4
+ const ProviderRegistry_1 = require("../registries/ProviderRegistry");
5
+ const InjectorService_1 = require("./InjectorService");
6
+ (0, ProviderRegistry_1.registerProvider)({
7
+ provide: logger_1.Logger,
8
+ deps: [InjectorService_1.InjectorService],
9
+ useFactory(injector) {
10
+ return injector.logger;
11
+ }
12
+ });
13
+ //# sourceMappingURL=DILogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DILogger.js","sourceRoot":"","sources":["../../../src/services/DILogger.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,qEAAgE;AAChE,uDAAkD;AAElD,IAAA,mCAAgB,EAAC;IACf,OAAO,EAAE,eAAM;IACf,IAAI,EAAE,CAAC,iCAAe,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"]}
File without changes
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DITest = void 0;
4
+ const core_1 = require("@tsed/core");
5
+ const logger_1 = require("@tsed/logger");
6
+ const Container_1 = require("../domain/Container");
7
+ const LocalsContainer_1 = require("../domain/LocalsContainer");
8
+ const setLoggerLevel_1 = require("../utils/setLoggerLevel");
9
+ const InjectorService_1 = require("./InjectorService");
10
+ /**
11
+ * Tool to run test with lightweight DI sandbox.
12
+ */
13
+ class DITest {
14
+ static get injector() {
15
+ if (DITest._injector) {
16
+ return DITest._injector;
17
+ }
18
+ /* istanbul ignore next */
19
+ throw new Error("PlatformTest.injector is not initialized. Use PlatformTest.create(): Promise before PlatformTest.invoke() or PlatformTest.injector.\n" +
20
+ "Example:\n" +
21
+ "before(async () => {\n" +
22
+ " await PlatformTest.create()\n" +
23
+ " await PlatformTest.invoke(MyService, [])\n" +
24
+ "})");
25
+ }
26
+ static set injector(injector) {
27
+ DITest._injector = injector;
28
+ }
29
+ static hasInjector() {
30
+ return !!DITest._injector;
31
+ }
32
+ static async create(settings = {}) {
33
+ DITest.injector = DITest.createInjector(settings);
34
+ const container = new Container_1.Container();
35
+ DITest.injector.bootstrap(container);
36
+ await DITest.injector.load(container);
37
+ }
38
+ /**
39
+ * Create a new injector with the right default services
40
+ */
41
+ static createInjector(settings = {}) {
42
+ const injector = new InjectorService_1.InjectorService();
43
+ injector.logger = logger_1.$log;
44
+ // @ts-ignore
45
+ injector.settings.set(DITest.configure(settings));
46
+ (0, setLoggerLevel_1.setLoggerLevel)(injector);
47
+ return injector;
48
+ }
49
+ /**
50
+ * Resets the test injector of the test context, so it won't pollute your next test. Call this in your `tearDown` logic.
51
+ */
52
+ static async reset() {
53
+ if (DITest.hasInjector()) {
54
+ await DITest.injector.destroy();
55
+ DITest._injector = null;
56
+ }
57
+ }
58
+ /**
59
+ * Invoke a provider and return a fresh instance
60
+ * @param target
61
+ * @param providers
62
+ */
63
+ static invoke(target, providers = []) {
64
+ const locals = new LocalsContainer_1.LocalsContainer();
65
+ providers.forEach((p) => {
66
+ locals.set(p.token, p.use);
67
+ });
68
+ locals.set(InjectorService_1.InjectorService, DITest.injector);
69
+ const instance = DITest.injector.invoke(target, locals, { rebuild: true });
70
+ if (instance && instance.$onInit) {
71
+ // await instance.$onInit();
72
+ const result = instance.$onInit();
73
+ if (result instanceof Promise) {
74
+ return result.then(() => instance);
75
+ }
76
+ }
77
+ return instance;
78
+ }
79
+ /**
80
+ * Return the instance from injector registry
81
+ * @param target
82
+ * @param options
83
+ */
84
+ static get(target, options = {}) {
85
+ return DITest.injector.get(target, options);
86
+ }
87
+ static configure(settings = {}) {
88
+ return {
89
+ ...settings,
90
+ env: (0, core_1.getValue)(settings, "env", core_1.Env.TEST),
91
+ logger: {
92
+ ...(0, core_1.getValue)(settings, "logger", {}),
93
+ level: (0, core_1.getValue)(settings, "logger.level", "off")
94
+ }
95
+ };
96
+ }
97
+ }
98
+ exports.DITest = DITest;
99
+ DITest._injector = null;
100
+ //# sourceMappingURL=DITest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DITest.js","sourceRoot":"","sources":["../../../src/services/DITest.ts"],"names":[],"mappings":"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","sourcesContent":["import {Env, getValue} from \"@tsed/core\";\nimport {$log} from \"@tsed/logger\";\nimport {Container} from \"../domain/Container\";\nimport {LocalsContainer} from \"../domain/LocalsContainer\";\nimport {OnInit} from \"../interfaces/OnInit\";\nimport {TokenProvider} from \"../interfaces/TokenProvider\";\nimport {setLoggerLevel} from \"../utils/setLoggerLevel\";\nimport {InjectorService} from \"./InjectorService\";\n\nexport interface DITestInvokeOptions {\n token?: TokenProvider;\n use: any;\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: Partial<TsED.Configuration> = {}) {\n DITest.injector = DITest.createInjector(settings);\n\n const container = new Container();\n DITest.injector.bootstrap(container);\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 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"]}