@venok/core 1.0.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 (400) hide show
  1. package/application/config.d.ts +35 -0
  2. package/application/config.js +85 -0
  3. package/application/context.d.ts +198 -0
  4. package/application/context.js +325 -0
  5. package/application/factory.d.ts +43 -0
  6. package/application/factory.js +147 -0
  7. package/constants.d.ts +46 -0
  8. package/constants.js +53 -0
  9. package/context/creator.d.ts +9 -0
  10. package/context/creator.js +32 -0
  11. package/context/execution-host.d.ts +16 -0
  12. package/context/execution-host.js +30 -0
  13. package/context/external/creator.d.ts +63 -0
  14. package/context/external/creator.js +159 -0
  15. package/context/external/proxy.d.ts +5 -0
  16. package/context/external/proxy.js +19 -0
  17. package/decorators/apply.decorator.d.ts +10 -0
  18. package/decorators/apply.decorator.js +24 -0
  19. package/decorators/bind.decorator.d.ts +11 -0
  20. package/decorators/bind.decorator.js +20 -0
  21. package/decorators/catch.decorator.d.ts +17 -0
  22. package/decorators/catch.decorator.js +26 -0
  23. package/decorators/create-param.decorator.d.ts +29 -0
  24. package/decorators/create-param.decorator.js +51 -0
  25. package/decorators/dependencies.decorator.d.ts +6 -0
  26. package/decorators/dependencies.decorator.js +17 -0
  27. package/decorators/exception-filters.decorator.d.ts +21 -0
  28. package/decorators/exception-filters.decorator.js +41 -0
  29. package/decorators/global.decorator.d.ts +10 -0
  30. package/decorators/global.decorator.js +19 -0
  31. package/decorators/index.d.ts +15 -0
  32. package/decorators/index.js +31 -0
  33. package/decorators/inject.decorator.d.ts +26 -0
  34. package/decorators/inject.decorator.js +45 -0
  35. package/decorators/injectable.decorator.d.ts +40 -0
  36. package/decorators/injectable.decorator.js +51 -0
  37. package/decorators/module.decorator.d.ts +14 -0
  38. package/decorators/module.decorator.js +38 -0
  39. package/decorators/optional.decorator.d.ts +14 -0
  40. package/decorators/optional.decorator.js +30 -0
  41. package/decorators/set-metadata.decorator.d.ts +18 -0
  42. package/decorators/set-metadata.decorator.js +30 -0
  43. package/decorators/use-guards.decorator.d.ts +21 -0
  44. package/decorators/use-guards.decorator.js +40 -0
  45. package/decorators/use-interceptors.decorator.d.ts +21 -0
  46. package/decorators/use-interceptors.decorator.js +40 -0
  47. package/decorators/use-pipes.decorator.d.ts +21 -0
  48. package/decorators/use-pipes.decorator.js +39 -0
  49. package/discovery/meta-host-collection.d.ts +32 -0
  50. package/discovery/meta-host-collection.js +79 -0
  51. package/discovery/module.d.ts +5 -0
  52. package/discovery/module.js +24 -0
  53. package/discovery/service.d.ts +68 -0
  54. package/discovery/service.js +90 -0
  55. package/errors/exceptions/circular-dependency.exception.d.ts +4 -0
  56. package/errors/exceptions/circular-dependency.exception.js +11 -0
  57. package/errors/exceptions/index.d.ts +8 -0
  58. package/errors/exceptions/index.js +24 -0
  59. package/errors/exceptions/invalid-class-module.exception.d.ts +4 -0
  60. package/errors/exceptions/invalid-class-module.exception.js +11 -0
  61. package/errors/exceptions/invalid-class-scope.exception.d.ts +5 -0
  62. package/errors/exceptions/invalid-class-scope.exception.js +14 -0
  63. package/errors/exceptions/invalid-class.exception.d.ts +4 -0
  64. package/errors/exceptions/invalid-class.exception.js +11 -0
  65. package/errors/exceptions/invalid-exception-filter.exception.d.ts +4 -0
  66. package/errors/exceptions/invalid-exception-filter.exception.js +11 -0
  67. package/errors/exceptions/invalid-module.exception.d.ts +4 -0
  68. package/errors/exceptions/invalid-module.exception.js +11 -0
  69. package/errors/exceptions/runtime.exception.d.ts +4 -0
  70. package/errors/exceptions/runtime.exception.js +12 -0
  71. package/errors/exceptions/undefined-dependency.exception.d.ts +6 -0
  72. package/errors/exceptions/undefined-dependency.exception.js +11 -0
  73. package/errors/exceptions/undefined-forwardref.exception.d.ts +5 -0
  74. package/errors/exceptions/undefined-forwardref.exception.js +11 -0
  75. package/errors/exceptions/undefined-module.exception.d.ts +4 -0
  76. package/errors/exceptions/undefined-module.exception.js +11 -0
  77. package/errors/exceptions/unknown-dependencies.exception.d.ts +16 -0
  78. package/errors/exceptions/unknown-dependencies.exception.js +15 -0
  79. package/errors/exceptions/unknown-element.exception.d.ts +4 -0
  80. package/errors/exceptions/unknown-element.exception.js +12 -0
  81. package/errors/exceptions/unknown-export.exception.d.ts +4 -0
  82. package/errors/exceptions/unknown-export.exception.js +11 -0
  83. package/errors/exceptions/unknown-module.exception.d.ts +4 -0
  84. package/errors/exceptions/unknown-module.exception.js +10 -0
  85. package/errors/messages.d.ts +15 -0
  86. package/errors/messages.js +126 -0
  87. package/exceptions/external/filter-context.d.ts +10 -0
  88. package/exceptions/external/filter-context.js +37 -0
  89. package/exceptions/external/filter.d.ts +5 -0
  90. package/exceptions/external/filter.js +16 -0
  91. package/exceptions/external/handler.d.ts +9 -0
  92. package/exceptions/external/handler.js +31 -0
  93. package/exceptions/filter-context.d.ts +14 -0
  94. package/exceptions/filter-context.js +55 -0
  95. package/exceptions/select-exception-filter-metadata.d.ts +2 -0
  96. package/exceptions/select-exception-filter-metadata.js +6 -0
  97. package/exceptions/zone/handler.d.ts +5 -0
  98. package/exceptions/zone/handler.js +15 -0
  99. package/exceptions/zone/zone.d.ts +5 -0
  100. package/exceptions/zone/zone.js +32 -0
  101. package/guards/consumer.d.ts +9 -0
  102. package/guards/consumer.js +33 -0
  103. package/guards/context-creator.d.ts +17 -0
  104. package/guards/context-creator.js +69 -0
  105. package/guards/index.d.ts +2 -0
  106. package/guards/index.js +18 -0
  107. package/helpers/color.helper.d.ts +9 -0
  108. package/helpers/color.helper.js +14 -0
  109. package/helpers/context-id-factory.helper.d.ts +2 -0
  110. package/helpers/context-id-factory.helper.js +15 -0
  111. package/helpers/context.helper.d.ts +23 -0
  112. package/helpers/context.helper.js +49 -0
  113. package/helpers/extends-metadata.helper.d.ts +1 -0
  114. package/helpers/extends-metadata.helper.js +9 -0
  115. package/helpers/flatten.helper.d.ts +1 -0
  116. package/helpers/flatten.helper.js +9 -0
  117. package/helpers/messages.helper.d.ts +2 -0
  118. package/helpers/messages.helper.js +7 -0
  119. package/helpers/noop.helper.d.ts +1 -0
  120. package/helpers/noop.helper.js +5 -0
  121. package/helpers/random-string-generator.helper.d.ts +1 -0
  122. package/helpers/random-string-generator.helper.js +6 -0
  123. package/helpers/rethrow.helper.d.ts +1 -0
  124. package/helpers/rethrow.helper.js +7 -0
  125. package/helpers/shared.helper.d.ts +10 -0
  126. package/helpers/shared.helper.js +33 -0
  127. package/helpers/silent.helper.d.ts +10 -0
  128. package/helpers/silent.helper.js +18 -0
  129. package/helpers/transient.helper.d.ts +12 -0
  130. package/helpers/transient.helper.js +26 -0
  131. package/helpers/uuid.helper.d.ts +15 -0
  132. package/helpers/uuid.helper.js +54 -0
  133. package/helpers/validate-each.helper.d.ts +8 -0
  134. package/helpers/validate-each.helper.js +25 -0
  135. package/hooks/before-app-shutdown.hook.d.ts +9 -0
  136. package/hooks/before-app-shutdown.hook.js +45 -0
  137. package/hooks/index.d.ts +5 -0
  138. package/hooks/index.js +21 -0
  139. package/hooks/on-app-bootstrap.hook.d.ts +8 -0
  140. package/hooks/on-app-bootstrap.hook.js +45 -0
  141. package/hooks/on-app-shutdown.hook.d.ts +9 -0
  142. package/hooks/on-app-shutdown.hook.js +46 -0
  143. package/hooks/on-module-destroy.hook.d.ts +8 -0
  144. package/hooks/on-module-destroy.hook.js +45 -0
  145. package/hooks/on-module-init.hook.d.ts +8 -0
  146. package/hooks/on-module-init.hook.js +45 -0
  147. package/index.d.ts +10 -0
  148. package/index.js +32 -0
  149. package/injector/constants.d.ts +2 -0
  150. package/injector/constants.js +7 -0
  151. package/injector/container.d.ts +61 -0
  152. package/injector/container.js +194 -0
  153. package/injector/helpers/class-scope.helper.d.ts +2 -0
  154. package/injector/helpers/class-scope.helper.js +9 -0
  155. package/injector/helpers/classifier.helper.d.ts +4 -0
  156. package/injector/helpers/classifier.helper.js +17 -0
  157. package/injector/helpers/is-durable.helper.d.ts +2 -0
  158. package/injector/helpers/is-durable.helper.js +9 -0
  159. package/injector/index.d.ts +5 -0
  160. package/injector/index.js +20 -0
  161. package/injector/injector.d.ts +87 -0
  162. package/injector/injector.js +452 -0
  163. package/injector/instance/links-host.d.ts +22 -0
  164. package/injector/instance/links-host.js +50 -0
  165. package/injector/instance/loader.d.ts +21 -0
  166. package/injector/instance/loader.js +73 -0
  167. package/injector/instance/resolver.d.ts +16 -0
  168. package/injector/instance/resolver.js +43 -0
  169. package/injector/instance/wrapper.d.ts +90 -0
  170. package/injector/instance/wrapper.js +272 -0
  171. package/injector/internal-core-module/core-providers.d.ts +4 -0
  172. package/injector/internal-core-module/core-providers.js +21 -0
  173. package/injector/internal-core-module/internal-core-module-factory.d.ts +8 -0
  174. package/injector/internal-core-module/internal-core-module-factory.js +42 -0
  175. package/injector/internal-core-module/internal-core-module.d.ts +4 -0
  176. package/injector/internal-core-module/internal-core-module.js +31 -0
  177. package/injector/module/compiler.d.ts +19 -0
  178. package/injector/module/compiler.js +27 -0
  179. package/injector/module/container.d.ts +6 -0
  180. package/injector/module/container.js +24 -0
  181. package/injector/module/lazy/loader.d.ts +21 -0
  182. package/injector/module/lazy/loader.js +49 -0
  183. package/injector/module/lazy/options.d.ts +6 -0
  184. package/injector/module/lazy/options.js +2 -0
  185. package/injector/module/module.d.ts +74 -0
  186. package/injector/module/module.js +383 -0
  187. package/injector/module/ref.d.ts +106 -0
  188. package/injector/module/ref.js +62 -0
  189. package/injector/module/token-factory.d.ts +13 -0
  190. package/injector/module/token-factory.js +71 -0
  191. package/injector/settlement-signal.d.ts +37 -0
  192. package/injector/settlement-signal.js +55 -0
  193. package/inspector/graph-inspector.d.ts +26 -0
  194. package/inspector/graph-inspector.js +163 -0
  195. package/inspector/initialize-on-preview.allowlist.d.ts +6 -0
  196. package/inspector/initialize-on-preview.allowlist.js +13 -0
  197. package/inspector/interfaces/edge.interface.d.ts +28 -0
  198. package/inspector/interfaces/edge.interface.js +2 -0
  199. package/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts +12 -0
  200. package/inspector/interfaces/enhancer-metadata-cache-entry.interface.js +2 -0
  201. package/inspector/interfaces/entrypoint.interface.d.ts +10 -0
  202. package/inspector/interfaces/entrypoint.interface.js +2 -0
  203. package/inspector/interfaces/extras.interface.d.ts +18 -0
  204. package/inspector/interfaces/extras.interface.js +2 -0
  205. package/inspector/interfaces/node.interface.d.ts +49 -0
  206. package/inspector/interfaces/node.interface.js +2 -0
  207. package/inspector/interfaces/serialized-graph-json.interface.d.ts +14 -0
  208. package/inspector/interfaces/serialized-graph-json.interface.js +2 -0
  209. package/inspector/interfaces/serialized-graph-metadata.interface.d.ts +10 -0
  210. package/inspector/interfaces/serialized-graph-metadata.interface.js +2 -0
  211. package/inspector/noop-graph-inspector.d.ts +2 -0
  212. package/inspector/noop-graph-inspector.js +8 -0
  213. package/inspector/partial-graph.host.d.ts +7 -0
  214. package/inspector/partial-graph.host.js +15 -0
  215. package/inspector/serialized-graph.d.ts +52 -0
  216. package/inspector/serialized-graph.js +121 -0
  217. package/interceptors/consumer.d.ts +9 -0
  218. package/interceptors/consumer.js +37 -0
  219. package/interceptors/context-creator.d.ts +17 -0
  220. package/interceptors/context-creator.js +67 -0
  221. package/interceptors/index.d.ts +2 -0
  222. package/interceptors/index.js +18 -0
  223. package/interfaces/abstract.interface.d.ts +3 -0
  224. package/interfaces/abstract.interface.js +2 -0
  225. package/interfaces/application/context-options.interface.d.ts +41 -0
  226. package/interfaces/application/context-options.interface.js +9 -0
  227. package/interfaces/application/context.interface.d.ts +162 -0
  228. package/interfaces/application/context.interface.js +2 -0
  229. package/interfaces/application/index.d.ts +1 -0
  230. package/interfaces/application/index.js +17 -0
  231. package/interfaces/context/arguments-host.interface.d.ts +22 -0
  232. package/interfaces/context/arguments-host.interface.js +2 -0
  233. package/interfaces/context/execution.interface.d.ts +18 -0
  234. package/interfaces/context/execution.interface.js +2 -0
  235. package/interfaces/features/exception-filter.interface.d.ts +21 -0
  236. package/interfaces/features/exception-filter.interface.js +2 -0
  237. package/interfaces/features/guards.interface.d.ts +20 -0
  238. package/interfaces/features/guards.interface.js +2 -0
  239. package/interfaces/features/interceptor.interface.d.ts +30 -0
  240. package/interfaces/features/interceptor.interface.js +2 -0
  241. package/interfaces/features/pipes.interface.d.ts +37 -0
  242. package/interfaces/features/pipes.interface.js +2 -0
  243. package/interfaces/helper.interface.d.ts +3 -0
  244. package/interfaces/helper.interface.js +2 -0
  245. package/interfaces/hooks/before-application-shutdown.interface.d.ts +3 -0
  246. package/interfaces/hooks/before-application-shutdown.interface.js +2 -0
  247. package/interfaces/hooks/index.d.ts +5 -0
  248. package/interfaces/hooks/index.js +21 -0
  249. package/interfaces/hooks/on-application-bootstrap.interface.d.ts +9 -0
  250. package/interfaces/hooks/on-application-bootstrap.interface.js +2 -0
  251. package/interfaces/hooks/on-application-shutdown.interface.d.ts +9 -0
  252. package/interfaces/hooks/on-application-shutdown.interface.js +2 -0
  253. package/interfaces/hooks/on-destroy.interface.d.ts +10 -0
  254. package/interfaces/hooks/on-destroy.interface.js +2 -0
  255. package/interfaces/hooks/on-init.interface.d.ts +8 -0
  256. package/interfaces/hooks/on-init.interface.js +2 -0
  257. package/interfaces/index.d.ts +6 -0
  258. package/interfaces/index.js +22 -0
  259. package/interfaces/injectable.interface.d.ts +1 -0
  260. package/interfaces/injectable.interface.js +2 -0
  261. package/interfaces/modules/configurable/async-options.interface.d.ts +42 -0
  262. package/interfaces/modules/configurable/async-options.interface.js +2 -0
  263. package/interfaces/modules/configurable/cls.interface.d.ts +13 -0
  264. package/interfaces/modules/configurable/cls.interface.js +2 -0
  265. package/interfaces/modules/configurable/host.interface.d.ts +62 -0
  266. package/interfaces/modules/configurable/host.interface.js +2 -0
  267. package/interfaces/modules/configurable/index.d.ts +3 -0
  268. package/interfaces/modules/configurable/index.js +19 -0
  269. package/interfaces/modules/definition.interface.d.ts +4 -0
  270. package/interfaces/modules/definition.interface.js +2 -0
  271. package/interfaces/modules/dynamic-module.interface.d.ts +23 -0
  272. package/interfaces/modules/dynamic-module.interface.js +2 -0
  273. package/interfaces/modules/forward-reference.interface.d.ts +3 -0
  274. package/interfaces/modules/forward-reference.interface.js +2 -0
  275. package/interfaces/modules/index.d.ts +9 -0
  276. package/interfaces/modules/index.js +25 -0
  277. package/interfaces/modules/injection-token.interface.d.ts +5 -0
  278. package/interfaces/modules/injection-token.interface.js +2 -0
  279. package/interfaces/modules/introspection-result.interface.d.ts +10 -0
  280. package/interfaces/modules/introspection-result.interface.js +2 -0
  281. package/interfaces/modules/module-metadata.interface.d.ts +24 -0
  282. package/interfaces/modules/module-metadata.interface.js +2 -0
  283. package/interfaces/modules/module.interface.d.ts +2 -0
  284. package/interfaces/modules/module.interface.js +2 -0
  285. package/interfaces/modules/optional-factory-dependency.interface.d.ts +8 -0
  286. package/interfaces/modules/optional-factory-dependency.interface.js +2 -0
  287. package/interfaces/modules/override.interface.d.ts +5 -0
  288. package/interfaces/modules/override.interface.js +2 -0
  289. package/interfaces/modules/provider.interface.d.ts +142 -0
  290. package/interfaces/modules/provider.interface.js +2 -0
  291. package/interfaces/scope.interface.d.ts +35 -0
  292. package/interfaces/scope.interface.js +23 -0
  293. package/interfaces/type.interface.d.ts +3 -0
  294. package/interfaces/type.interface.js +2 -0
  295. package/metadata-scanner.d.ts +4 -0
  296. package/metadata-scanner.js +34 -0
  297. package/module/configurable-module.builder.d.ts +93 -0
  298. package/module/configurable-module.builder.js +204 -0
  299. package/module/constants.d.ts +4 -0
  300. package/module/constants.js +7 -0
  301. package/module/helpers/generate-options-injection-token.helper.d.ts +1 -0
  302. package/module/helpers/generate-options-injection-token.helper.js +9 -0
  303. package/module/helpers/get-injection-providers.helper.d.ts +8 -0
  304. package/module/helpers/get-injection-providers.helper.js +36 -0
  305. package/module/helpers/index.d.ts +2 -0
  306. package/module/helpers/index.js +18 -0
  307. package/module/index.d.ts +2 -0
  308. package/module/index.js +18 -0
  309. package/package.json +35 -0
  310. package/pipes/consumer.d.ts +9 -0
  311. package/pipes/consumer.js +15 -0
  312. package/pipes/context-creator.d.ts +18 -0
  313. package/pipes/context-creator.js +70 -0
  314. package/pipes/index.d.ts +2 -0
  315. package/pipes/index.js +18 -0
  316. package/scanner.d.ts +81 -0
  317. package/scanner.js +374 -0
  318. package/services/console.service.d.ts +86 -0
  319. package/services/console.service.js +233 -0
  320. package/services/index.d.ts +1 -0
  321. package/services/index.js +17 -0
  322. package/services/logger.service.d.ts +157 -0
  323. package/services/logger.service.js +269 -0
  324. package/services/reflector.service.d.ts +110 -0
  325. package/services/reflector.service.js +87 -0
  326. package/test/context/execution-host.spec.d.ts +1 -0
  327. package/test/context/execution-host.spec.js +31 -0
  328. package/test/context/external/creator.spec.d.ts +1 -0
  329. package/test/context/external/creator.spec.js +149 -0
  330. package/test/context/external/proxy.spec.d.ts +1 -0
  331. package/test/context/external/proxy.spec.js +45 -0
  332. package/test/exceptions/external/handler.spec.d.ts +1 -0
  333. package/test/exceptions/external/handler.spec.js +89 -0
  334. package/test/exceptions/filter-context.spec.d.ts +2 -0
  335. package/test/exceptions/filter-context.spec.js +91 -0
  336. package/test/exceptions/messages.spec.d.ts +0 -0
  337. package/test/exceptions/messages.spec.js +201 -0
  338. package/test/exceptions/zona/handler.spec.d.ts +1 -0
  339. package/test/exceptions/zona/handler.spec.js +51 -0
  340. package/test/exceptions/zona/zone.spec.d.ts +1 -0
  341. package/test/exceptions/zona/zone.spec.js +66 -0
  342. package/test/guards/consumer.spec.d.ts +1 -0
  343. package/test/guards/consumer.spec.js +47 -0
  344. package/test/guards/context-creator.spec.d.ts +1 -0
  345. package/test/guards/context-creator.spec.js +138 -0
  346. package/test/helpers/context-id-factory.spec.d.ts +1 -0
  347. package/test/helpers/context-id-factory.spec.js +9 -0
  348. package/test/helpers/shared.spec.d.ts +1 -0
  349. package/test/helpers/shared.spec.js +122 -0
  350. package/test/hooks/before-app-shutdown.hook.spec.d.ts +1 -0
  351. package/test/hooks/before-app-shutdown.hook.spec.js +44 -0
  352. package/test/hooks/on-app-bootstrap.hook.spec.d.ts +1 -0
  353. package/test/hooks/on-app-bootstrap.hook.spec.js +43 -0
  354. package/test/hooks/on-app-shutdown.hook.spec.d.ts +1 -0
  355. package/test/hooks/on-app-shutdown.hook.spec.js +43 -0
  356. package/test/hooks/on-module-destroy.hook.spec.d.ts +1 -0
  357. package/test/hooks/on-module-destroy.hook.spec.js +43 -0
  358. package/test/hooks/on-module-init.hook.spec.d.ts +1 -0
  359. package/test/hooks/on-module-init.hook.spec.js +43 -0
  360. package/test/injector/compiler.spec.d.ts +1 -0
  361. package/test/injector/compiler.spec.js +42 -0
  362. package/test/injector/container.spec.d.ts +1 -0
  363. package/test/injector/container.spec.js +203 -0
  364. package/test/injector/helpers/classifier.spec.d.ts +1 -0
  365. package/test/injector/helpers/classifier.spec.js +102 -0
  366. package/test/injector/injector.spec.d.ts +1 -0
  367. package/test/injector/injector.spec.js +678 -0
  368. package/test/injector/instance/loader.spec.d.ts +1 -0
  369. package/test/injector/instance/loader.spec.js +108 -0
  370. package/test/injector/instance/wrapper.spec.d.ts +1 -0
  371. package/test/injector/instance/wrapper.spec.js +772 -0
  372. package/test/injector/internal-core-module/internal-core-module-factory.spec.d.ts +1 -0
  373. package/test/injector/internal-core-module/internal-core-module-factory.spec.js +27 -0
  374. package/test/injector/module/lazy/loader.spec.d.ts +1 -0
  375. package/test/injector/module/lazy/loader.spec.js +71 -0
  376. package/test/injector/module/module.spec.d.ts +1 -0
  377. package/test/injector/module/module.spec.js +410 -0
  378. package/test/injector/module/token-factory.spec.d.ts +1 -0
  379. package/test/injector/module/token-factory.spec.js +84 -0
  380. package/test/interceptors/consumer.spec.d.ts +1 -0
  381. package/test/interceptors/consumer.spec.js +136 -0
  382. package/test/interceptors/context-creator.spec.d.ts +1 -0
  383. package/test/interceptors/context-creator.spec.js +139 -0
  384. package/test/metadata-scanner.spec.d.ts +1 -0
  385. package/test/metadata-scanner.spec.js +41 -0
  386. package/test/module/configurable-module.builder.spec.d.ts +1 -0
  387. package/test/module/configurable-module.builder.spec.js +102 -0
  388. package/test/module/helpers/get-injection-providers.helper.spec.d.ts +1 -0
  389. package/test/module/helpers/get-injection-providers.helper.spec.js +49 -0
  390. package/test/pipes/consumer.spec.d.ts +1 -0
  391. package/test/pipes/consumer.spec.js +42 -0
  392. package/test/pipes/context-creator.spec.d.ts +1 -0
  393. package/test/pipes/context-creator.spec.js +108 -0
  394. package/test/scanner.spec.d.ts +1 -0
  395. package/test/scanner.spec.js +620 -0
  396. package/test/services/logger.service.spec.d.ts +1 -0
  397. package/test/services/logger.service.spec.js +487 -0
  398. package/test/services/reflector.service.spec.d.ts +1 -0
  399. package/test/services/reflector.service.spec.js +105 -0
  400. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,87 @@
1
+ import { InjectionToken } from "@venok/core/interfaces/modules";
2
+ import { ContextId, InstancePerContext, InstanceWrapper, PropertyMetadata } from "@venok/core/injector/instance/wrapper";
3
+ import { Module } from "@venok/core/injector/module/module";
4
+ import { Type } from "@venok/core/interfaces";
5
+ import { SettlementSignal } from "@venok/core/injector/settlement-signal";
6
+ import { Injectable } from "@venok/core/interfaces/injectable.interface";
7
+ /**
8
+ * The type of injectable dependency
9
+ */
10
+ export type InjectorDependency = InjectionToken;
11
+ /**
12
+ * The property-based dependency
13
+ */
14
+ export interface PropertyDependency {
15
+ key: symbol | string;
16
+ name: InjectorDependency;
17
+ isOptional?: boolean;
18
+ instance?: any;
19
+ }
20
+ /**
21
+ * Context of a dependency which gets injected by
22
+ * the injector
23
+ */
24
+ export interface InjectorDependencyContext {
25
+ /**
26
+ * The name of the property key (property-based injection)
27
+ */
28
+ key?: string | symbol;
29
+ /**
30
+ * The function itself, the name of the function, or injection token.
31
+ */
32
+ name?: Function | string | symbol;
33
+ /**
34
+ * The index of the dependency which gets injected
35
+ * from the dependencies array
36
+ */
37
+ index?: number;
38
+ /**
39
+ * The dependency array which gets injected
40
+ */
41
+ dependencies?: InjectorDependency[];
42
+ }
43
+ export declare class Injector {
44
+ private readonly options?;
45
+ private logger;
46
+ constructor(options?: {
47
+ preview: boolean;
48
+ } | undefined);
49
+ loadPrototype<T>({ token }: InstanceWrapper<T>, collection: Map<InjectionToken, InstanceWrapper<T>>, contextId?: ContextId): void;
50
+ loadInstance<T>(wrapper: InstanceWrapper<T>, collection: Map<InjectionToken, InstanceWrapper>, moduleRef: Module, contextId?: ContextId, inquirer?: InstanceWrapper): Promise<void>;
51
+ loadInjectable<T = any>(wrapper: InstanceWrapper<T>, moduleRef: Module, contextId?: ContextId, inquirer?: InstanceWrapper): Promise<void>;
52
+ loadProvider(wrapper: InstanceWrapper<Injectable>, moduleRef: Module, contextId?: ContextId, inquirer?: InstanceWrapper): Promise<void>;
53
+ applySettlementSignal<T>(instancePerContext: InstancePerContext<T>, host: InstanceWrapper<T>): SettlementSignal;
54
+ resolveConstructorParams<T>(wrapper: InstanceWrapper<T>, moduleRef: Module, inject: InjectorDependency[] | null, callback: (args: unknown[]) => void | Promise<void>, contextId?: ContextId, inquirer?: InstanceWrapper, parentInquirer?: InstanceWrapper): Promise<void>;
55
+ getClassDependencies<T>(wrapper: InstanceWrapper<T>): [InjectorDependency[], number[]];
56
+ getFactoryProviderDependencies<T>(wrapper: InstanceWrapper<T>): [InjectorDependency[], number[]];
57
+ reflectConstructorParams<T>(type: Type<T>): any[];
58
+ reflectOptionalParams<T>(type: Type<T>): any[];
59
+ reflectSelfParams<T>(type: Type<T>): any[];
60
+ resolveSingleParam<T>(wrapper: InstanceWrapper<T>, param: Type<any> | string | symbol | any, dependencyContext: InjectorDependencyContext, moduleRef: Module, contextId?: ContextId, inquirer?: InstanceWrapper, keyOrIndex?: symbol | string | number): Promise<InstanceWrapper<any>>;
61
+ resolveParamToken<T>(wrapper: InstanceWrapper<T>, param: Type<any> | string | symbol | any): any;
62
+ resolveComponentInstance<T>(moduleRef: Module, token: InjectionToken, dependencyContext: InjectorDependencyContext, wrapper: InstanceWrapper<T>, contextId?: ContextId, inquirer?: InstanceWrapper, keyOrIndex?: symbol | string | number): Promise<InstanceWrapper>;
63
+ resolveComponentHost<T>(moduleRef: Module, instanceWrapper: InstanceWrapper<T | Promise<T>>, contextId?: ContextId, inquirer?: InstanceWrapper): Promise<InstanceWrapper>;
64
+ lookupComponent<T = any>(providers: Map<Function | string | symbol, InstanceWrapper>, moduleRef: Module, dependencyContext: InjectorDependencyContext, wrapper: InstanceWrapper<T>, contextId?: ContextId, inquirer?: InstanceWrapper, keyOrIndex?: symbol | string | number): Promise<InstanceWrapper<T>>;
65
+ lookupComponentInParentModules<T = any>(dependencyContext: InjectorDependencyContext, moduleRef: Module, wrapper: InstanceWrapper<T>, contextId?: ContextId, inquirer?: InstanceWrapper, keyOrIndex?: symbol | string | number): Promise<any>;
66
+ lookupComponentInImports(moduleRef: Module, name: InjectionToken, wrapper: InstanceWrapper, moduleRegistry?: any[], contextId?: ContextId, inquirer?: InstanceWrapper, keyOrIndex?: symbol | string | number, isTraversing?: boolean): Promise<any>;
67
+ resolveProperties<T>(wrapper: InstanceWrapper<T>, moduleRef: Module, inject?: InjectorDependency[], contextId?: ContextId, inquirer?: InstanceWrapper, parentInquirer?: InstanceWrapper): Promise<PropertyDependency[]>;
68
+ reflectProperties<T>(type: Type<T>): PropertyDependency[];
69
+ applyProperties<T = any>(instance: T, properties: PropertyDependency[]): void;
70
+ instantiateClass<T = any>(instances: any[], wrapper: InstanceWrapper, targetMetatype: InstanceWrapper, contextId?: ContextId, inquirer?: InstanceWrapper): Promise<T>;
71
+ loadPerContext<T = any>(instance: T, moduleRef: Module, collection: Map<InjectionToken, InstanceWrapper>, ctx: ContextId, wrapper?: InstanceWrapper): Promise<T>;
72
+ loadEnhancersPerContext(wrapper: InstanceWrapper, ctx: ContextId, inquirer?: InstanceWrapper): Promise<void>;
73
+ loadCtorMetadata(metadata: InstanceWrapper<any>[], contextId: ContextId, inquirer?: InstanceWrapper, parentInquirer?: InstanceWrapper): Promise<any[]>;
74
+ loadPropertiesMetadata(metadata: PropertyMetadata[], contextId: ContextId, inquirer?: InstanceWrapper): Promise<PropertyDependency[]>;
75
+ private getInquirerId;
76
+ private resolveScopedComponentHost;
77
+ private isInquirerRequest;
78
+ private isInquirer;
79
+ protected addDependencyMetadata(keyOrIndex: symbol | string | number, hostWrapper: InstanceWrapper, instanceWrapper: InstanceWrapper): void;
80
+ private getTokenName;
81
+ private printResolvingDependenciesLog;
82
+ private printLookingForProviderLog;
83
+ private printFoundInModuleLog;
84
+ private isDebugMode;
85
+ private getContextId;
86
+ private getNowTimestamp;
87
+ }
@@ -0,0 +1,452 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Injector = void 0;
4
+ const wrapper_1 = require("@venok/core/injector/instance/wrapper");
5
+ const constants_1 = require("@venok/core/injector/constants");
6
+ const logger_service_1 = require("@venok/core/services/logger.service");
7
+ const exceptions_1 = require("@venok/core/errors/exceptions");
8
+ const shared_helper_1 = require("@venok/core/helpers/shared.helper");
9
+ const settlement_signal_1 = require("@venok/core/injector/settlement-signal");
10
+ const constants_2 = require("@venok/core/constants");
11
+ const undefined_dependency_exception_1 = require("@venok/core/errors/exceptions/undefined-dependency.exception");
12
+ const unknown_dependencies_exception_1 = require("@venok/core/errors/exceptions/unknown-dependencies.exception");
13
+ const color_helper_1 = require("@venok/core/helpers/color.helper");
14
+ class Injector {
15
+ constructor(options) {
16
+ this.options = options;
17
+ this.logger = new logger_service_1.Logger("InjectorLogger");
18
+ }
19
+ loadPrototype({ token }, collection, contextId = constants_1.STATIC_CONTEXT) {
20
+ if (!collection) {
21
+ return;
22
+ }
23
+ const target = collection.get(token);
24
+ const instance = target.createPrototype(contextId);
25
+ if (instance) {
26
+ const wrapper = new wrapper_1.InstanceWrapper({
27
+ ...target,
28
+ instance,
29
+ });
30
+ collection.set(token, wrapper);
31
+ }
32
+ }
33
+ async loadInstance(wrapper, collection, moduleRef, contextId = constants_1.STATIC_CONTEXT, inquirer) {
34
+ const inquirerId = this.getInquirerId(inquirer);
35
+ const instanceHost = wrapper.getInstanceByContextId(this.getContextId(contextId, wrapper), inquirerId);
36
+ // Maybe Error
37
+ if (instanceHost.isPending && instanceHost.donePromise) {
38
+ const settlementSignal = wrapper.settlementSignal;
39
+ if (inquirer && settlementSignal?.isCycle(inquirer.id))
40
+ throw new exceptions_1.CircularDependencyException(`"${wrapper.name}"`);
41
+ return instanceHost.donePromise.then((err) => {
42
+ if (err)
43
+ throw err;
44
+ });
45
+ }
46
+ const settlementSignal = this.applySettlementSignal(instanceHost, wrapper);
47
+ const token = wrapper.token || wrapper.name;
48
+ const { inject } = wrapper;
49
+ const targetWrapper = collection.get(token);
50
+ if ((0, shared_helper_1.isUndefined)(targetWrapper)) {
51
+ throw new exceptions_1.RuntimeException();
52
+ }
53
+ if (instanceHost.isResolved) {
54
+ return settlementSignal.complete();
55
+ }
56
+ try {
57
+ const t0 = this.getNowTimestamp();
58
+ const callback = async (instances) => {
59
+ const properties = await this.resolveProperties(wrapper, moduleRef, inject, contextId, wrapper, inquirer);
60
+ const instance = await this.instantiateClass(instances, wrapper, targetWrapper, contextId, inquirer);
61
+ this.applyProperties(instance, properties);
62
+ wrapper.initTime = this.getNowTimestamp() - t0;
63
+ settlementSignal.complete();
64
+ };
65
+ await this.resolveConstructorParams(wrapper, moduleRef, inject, callback, contextId, wrapper, inquirer);
66
+ }
67
+ catch (err) {
68
+ settlementSignal.error(err);
69
+ throw err;
70
+ }
71
+ }
72
+ async loadInjectable(wrapper, moduleRef, contextId = constants_1.STATIC_CONTEXT, inquirer) {
73
+ const injectables = moduleRef.injectables;
74
+ await this.loadInstance(wrapper, injectables, moduleRef, contextId, inquirer);
75
+ }
76
+ async loadProvider(wrapper, moduleRef, contextId = constants_1.STATIC_CONTEXT, inquirer) {
77
+ const providers = moduleRef.providers;
78
+ await this.loadInstance(wrapper, providers, moduleRef, contextId, inquirer);
79
+ await this.loadEnhancersPerContext(wrapper, contextId, wrapper);
80
+ }
81
+ applySettlementSignal(instancePerContext, host) {
82
+ const settlementSignal = new settlement_signal_1.SettlementSignal();
83
+ instancePerContext.donePromise = settlementSignal.asPromise();
84
+ instancePerContext.isPending = true;
85
+ host.settlementSignal = settlementSignal;
86
+ return settlementSignal;
87
+ }
88
+ async resolveConstructorParams(wrapper, moduleRef, inject, callback, contextId = constants_1.STATIC_CONTEXT, inquirer, parentInquirer) {
89
+ let inquirerId = this.getInquirerId(inquirer);
90
+ const metadata = wrapper.getCtorMetadata();
91
+ if (metadata && contextId !== constants_1.STATIC_CONTEXT) {
92
+ const deps = await this.loadCtorMetadata(metadata, contextId, inquirer, parentInquirer);
93
+ return callback(deps);
94
+ }
95
+ const isFactoryProvider = !(0, shared_helper_1.isNull)(inject);
96
+ const [dependencies, optionalDependenciesIds] = isFactoryProvider
97
+ ? this.getFactoryProviderDependencies(wrapper)
98
+ : this.getClassDependencies(wrapper);
99
+ let isResolved = true;
100
+ const resolveParam = async (param, index) => {
101
+ try {
102
+ if (this.isInquirer(param, parentInquirer)) {
103
+ return parentInquirer && parentInquirer.instance;
104
+ }
105
+ if (inquirer?.isTransient && parentInquirer) {
106
+ inquirer = parentInquirer;
107
+ inquirerId = this.getInquirerId(parentInquirer);
108
+ }
109
+ const paramWrapper = await this.resolveSingleParam(wrapper, param, { index, dependencies }, moduleRef, contextId, inquirer, index);
110
+ const instanceHost = paramWrapper.getInstanceByContextId(this.getContextId(contextId, paramWrapper), inquirerId);
111
+ if (!instanceHost.isResolved && !paramWrapper.forwardRef) {
112
+ isResolved = false;
113
+ }
114
+ return instanceHost?.instance;
115
+ }
116
+ catch (err) {
117
+ const isOptional = optionalDependenciesIds.includes(index);
118
+ if (!isOptional) {
119
+ throw err;
120
+ }
121
+ return undefined;
122
+ }
123
+ };
124
+ const instances = await Promise.all(dependencies.map(resolveParam));
125
+ isResolved && (await callback(instances));
126
+ }
127
+ getClassDependencies(wrapper) {
128
+ const ctorRef = wrapper.metatype;
129
+ return [this.reflectConstructorParams(ctorRef), this.reflectOptionalParams(ctorRef)];
130
+ }
131
+ getFactoryProviderDependencies(wrapper) {
132
+ const optionalDependenciesIds = [];
133
+ const isOptionalFactoryDep = (item) => !(0, shared_helper_1.isUndefined)(item.token) &&
134
+ !(0, shared_helper_1.isUndefined)(item.optional);
135
+ const mapFactoryProviderInjectArray = (item, index) => {
136
+ if (typeof item !== "object") {
137
+ return item;
138
+ }
139
+ if (isOptionalFactoryDep(item)) {
140
+ if (item.optional)
141
+ optionalDependenciesIds.push(index);
142
+ return item?.token;
143
+ }
144
+ return item;
145
+ };
146
+ return [wrapper.inject?.map?.(mapFactoryProviderInjectArray), optionalDependenciesIds];
147
+ }
148
+ reflectConstructorParams(type) {
149
+ const paramtypes = [...(Reflect.getMetadata(constants_2.PARAMTYPES_METADATA, type) || [])];
150
+ const selfParams = this.reflectSelfParams(type);
151
+ selfParams.forEach(({ index, param }) => (paramtypes[index] = param));
152
+ return paramtypes;
153
+ }
154
+ reflectOptionalParams(type) {
155
+ return Reflect.getMetadata(constants_2.OPTIONAL_DEPS_METADATA, type) || [];
156
+ }
157
+ reflectSelfParams(type) {
158
+ return Reflect.getMetadata(constants_2.SELF_DECLARED_DEPS_METADATA, type) || [];
159
+ }
160
+ async resolveSingleParam(wrapper, param, dependencyContext, moduleRef, contextId = constants_1.STATIC_CONTEXT, inquirer, keyOrIndex) {
161
+ if ((0, shared_helper_1.isUndefined)(param)) {
162
+ this.logger.log("Venok encountered an undefined dependency. This may be due to a circular import or a missing dependency declaration.");
163
+ throw new undefined_dependency_exception_1.UndefinedDependencyException(wrapper.name, dependencyContext, moduleRef);
164
+ }
165
+ const token = this.resolveParamToken(wrapper, param);
166
+ return this.resolveComponentInstance(moduleRef, token, dependencyContext, wrapper, contextId, inquirer, keyOrIndex);
167
+ }
168
+ resolveParamToken(wrapper, param) {
169
+ if (!param.forwardRef) {
170
+ return param;
171
+ }
172
+ wrapper.forwardRef = true;
173
+ return param.forwardRef();
174
+ }
175
+ async resolveComponentInstance(moduleRef, token, dependencyContext, wrapper, contextId = constants_1.STATIC_CONTEXT, inquirer, keyOrIndex) {
176
+ this.printResolvingDependenciesLog(token, inquirer);
177
+ this.printLookingForProviderLog(token, moduleRef);
178
+ const providers = moduleRef.providers;
179
+ const instanceWrapper = await this.lookupComponent(providers, moduleRef, { ...dependencyContext, name: token }, wrapper, contextId, inquirer, keyOrIndex);
180
+ return this.resolveComponentHost(moduleRef, instanceWrapper, contextId, inquirer);
181
+ }
182
+ async resolveComponentHost(moduleRef, instanceWrapper, contextId = constants_1.STATIC_CONTEXT, inquirer) {
183
+ const inquirerId = this.getInquirerId(inquirer);
184
+ const instanceHost = instanceWrapper.getInstanceByContextId(this.getContextId(contextId, instanceWrapper), inquirerId);
185
+ if (!instanceHost.isResolved && !instanceWrapper.forwardRef) {
186
+ inquirer?.settlementSignal?.insertRef(instanceWrapper.id);
187
+ await this.loadProvider(instanceWrapper, instanceWrapper.host ?? moduleRef, contextId, inquirer);
188
+ }
189
+ else if (!instanceHost.isResolved &&
190
+ instanceWrapper.forwardRef &&
191
+ (contextId !== constants_1.STATIC_CONTEXT || !!inquirerId)) {
192
+ /**
193
+ * When circular dependency has been detected between
194
+ * either request/transient providers, we have to asynchronously
195
+ * resolve instance host for a specific contextId or inquirer, to ensure
196
+ * that eventual lazily created instance will be merged with the prototype
197
+ * instantiated beforehand.
198
+ */
199
+ instanceHost.donePromise &&
200
+ instanceHost.donePromise.then(() => this.loadProvider(instanceWrapper, moduleRef, contextId, inquirer));
201
+ }
202
+ if (instanceWrapper.async) {
203
+ const host = instanceWrapper.getInstanceByContextId(this.getContextId(contextId, instanceWrapper), inquirerId);
204
+ host.instance = await host.instance;
205
+ instanceWrapper.setInstanceByContextId(contextId, host, inquirerId);
206
+ }
207
+ return instanceWrapper;
208
+ }
209
+ async lookupComponent(providers, moduleRef, dependencyContext, wrapper, contextId = constants_1.STATIC_CONTEXT, inquirer, keyOrIndex) {
210
+ const token = wrapper.token || wrapper.name;
211
+ const { name } = dependencyContext;
212
+ if (wrapper && token === name) {
213
+ throw new unknown_dependencies_exception_1.UnknownDependenciesException(wrapper.name, dependencyContext, moduleRef, { id: wrapper.id });
214
+ }
215
+ if (name && providers.has(name)) {
216
+ const instanceWrapper = providers.get(name);
217
+ this.printFoundInModuleLog(name, moduleRef);
218
+ this.addDependencyMetadata(keyOrIndex ?? "", wrapper, instanceWrapper);
219
+ return instanceWrapper;
220
+ }
221
+ return this.lookupComponentInParentModules(dependencyContext, moduleRef, wrapper, contextId, inquirer, keyOrIndex);
222
+ }
223
+ async lookupComponentInParentModules(dependencyContext, moduleRef, wrapper, contextId = constants_1.STATIC_CONTEXT, inquirer, keyOrIndex) {
224
+ const instanceWrapper = await this.lookupComponentInImports(moduleRef, dependencyContext.name, wrapper, [], contextId, inquirer, keyOrIndex);
225
+ if ((0, shared_helper_1.isNull)(instanceWrapper)) {
226
+ throw new unknown_dependencies_exception_1.UnknownDependenciesException(wrapper.name, dependencyContext, moduleRef, { id: wrapper.id });
227
+ }
228
+ return instanceWrapper;
229
+ }
230
+ async lookupComponentInImports(moduleRef, name, wrapper, moduleRegistry = [], contextId = constants_1.STATIC_CONTEXT, inquirer, keyOrIndex, isTraversing) {
231
+ let instanceWrapperRef = null;
232
+ const imports = moduleRef.imports || new Set();
233
+ const identity = (item) => item;
234
+ let children = [...imports.values()].filter(identity);
235
+ if (isTraversing) {
236
+ const contextModuleExports = moduleRef.exports;
237
+ children = children.filter((child) => contextModuleExports.has(child.metatype));
238
+ }
239
+ for (const relatedModule of children) {
240
+ if (moduleRegistry.includes(relatedModule.id)) {
241
+ continue;
242
+ }
243
+ this.printLookingForProviderLog(name, relatedModule);
244
+ moduleRegistry.push(relatedModule.id);
245
+ const { providers, exports } = relatedModule;
246
+ if (!exports.has(name) || !providers.has(name)) {
247
+ const instanceRef = await this.lookupComponentInImports(relatedModule, name, wrapper, moduleRegistry, contextId, inquirer, keyOrIndex, true);
248
+ // Maybe Error
249
+ if (instanceRef && keyOrIndex) {
250
+ this.addDependencyMetadata(keyOrIndex, wrapper, instanceRef);
251
+ return instanceRef;
252
+ }
253
+ continue;
254
+ }
255
+ this.printFoundInModuleLog(name, relatedModule);
256
+ instanceWrapperRef = providers.get(name);
257
+ this.addDependencyMetadata(keyOrIndex ?? "", wrapper, instanceWrapperRef);
258
+ const inquirerId = this.getInquirerId(inquirer);
259
+ const instanceHost = instanceWrapperRef.getInstanceByContextId(this.getContextId(contextId, instanceWrapperRef), inquirerId);
260
+ if (!instanceHost.isResolved && !instanceWrapperRef.forwardRef) {
261
+ wrapper.settlementSignal?.insertRef(instanceWrapperRef.id);
262
+ await this.loadProvider(instanceWrapperRef, relatedModule, contextId, wrapper);
263
+ break;
264
+ }
265
+ }
266
+ return instanceWrapperRef;
267
+ }
268
+ async resolveProperties(wrapper, moduleRef, inject, contextId = constants_1.STATIC_CONTEXT, inquirer, parentInquirer) {
269
+ if (!(0, shared_helper_1.isNull)(inject)) {
270
+ return [];
271
+ }
272
+ const metadata = wrapper.getPropertiesMetadata();
273
+ if (metadata && contextId !== constants_1.STATIC_CONTEXT) {
274
+ return this.loadPropertiesMetadata(metadata, contextId, inquirer);
275
+ }
276
+ const properties = this.reflectProperties(wrapper.metatype);
277
+ const instances = await Promise.all(properties.map(async (item) => {
278
+ try {
279
+ const dependencyContext = {
280
+ key: item.key,
281
+ name: item.name,
282
+ };
283
+ if (this.isInquirer(item.name, parentInquirer)) {
284
+ return parentInquirer && parentInquirer.instance;
285
+ }
286
+ const paramWrapper = await this.resolveSingleParam(wrapper, item.name, dependencyContext, moduleRef, contextId, inquirer, item.key);
287
+ if (!paramWrapper) {
288
+ return undefined;
289
+ }
290
+ const inquirerId = this.getInquirerId(inquirer);
291
+ const instanceHost = paramWrapper.getInstanceByContextId(this.getContextId(contextId, paramWrapper), inquirerId);
292
+ return instanceHost.instance;
293
+ }
294
+ catch (err) {
295
+ if (!item.isOptional) {
296
+ throw err;
297
+ }
298
+ return undefined;
299
+ }
300
+ }));
301
+ return properties.map((item, index) => ({
302
+ ...item,
303
+ instance: instances[index],
304
+ }));
305
+ }
306
+ reflectProperties(type) {
307
+ const properties = Reflect.getMetadata(constants_2.PROPERTY_DEPS_METADATA, type) || [];
308
+ const optionalKeys = Reflect.getMetadata(constants_2.OPTIONAL_PROPERTY_DEPS_METADATA, type) || [];
309
+ return properties.map((item) => ({
310
+ ...item,
311
+ name: item.type,
312
+ isOptional: optionalKeys.includes(item.key),
313
+ }));
314
+ }
315
+ applyProperties(instance, properties) {
316
+ if (!(0, shared_helper_1.isObject)(instance)) {
317
+ return undefined;
318
+ }
319
+ properties
320
+ .filter((item) => !(0, shared_helper_1.isNull)(item.instance))
321
+ .forEach((item) => {
322
+ // Maybe Error
323
+ // @ts-ignore
324
+ instance[item.key] = item.instance;
325
+ });
326
+ }
327
+ async instantiateClass(instances, wrapper, targetMetatype, contextId = constants_1.STATIC_CONTEXT, inquirer) {
328
+ const { metatype, inject } = wrapper;
329
+ const inquirerId = this.getInquirerId(inquirer);
330
+ const instanceHost = targetMetatype.getInstanceByContextId(this.getContextId(contextId, targetMetatype), inquirerId);
331
+ const isInContext = wrapper.isStatic(contextId, inquirer) ||
332
+ wrapper.isInRequestScope(contextId, inquirer) ||
333
+ wrapper.isLazyTransient(contextId, inquirer) ||
334
+ wrapper.isExplicitlyRequested(contextId, inquirer);
335
+ if (this.options?.preview && !wrapper.host?.initOnPreview) {
336
+ instanceHost.isResolved = true;
337
+ return instanceHost.instance;
338
+ }
339
+ if ((0, shared_helper_1.isNull)(inject) && isInContext) {
340
+ instanceHost.instance = wrapper.forwardRef
341
+ ? Object.assign(instanceHost.instance, new metatype(...instances))
342
+ : new metatype(...instances);
343
+ }
344
+ else if (isInContext) {
345
+ const factoryReturnValue = targetMetatype.metatype(...instances);
346
+ instanceHost.instance = await factoryReturnValue;
347
+ }
348
+ instanceHost.isResolved = true;
349
+ return instanceHost.instance;
350
+ }
351
+ async loadPerContext(instance, moduleRef, collection, ctx, wrapper) {
352
+ if (!wrapper) {
353
+ const injectionToken = instance.constructor;
354
+ wrapper = collection.get(injectionToken);
355
+ }
356
+ await this.loadInstance(wrapper, collection, moduleRef, ctx, wrapper);
357
+ await this.loadEnhancersPerContext(wrapper, ctx, wrapper);
358
+ const host = wrapper.getInstanceByContextId(this.getContextId(ctx, wrapper), wrapper.id);
359
+ return host && host.instance;
360
+ }
361
+ async loadEnhancersPerContext(wrapper, ctx, inquirer) {
362
+ const enhancers = wrapper.getEnhancersMetadata() || [];
363
+ const loadEnhancer = (item) => {
364
+ const hostModule = item.host;
365
+ return this.loadInstance(item, hostModule.injectables, hostModule, ctx, inquirer);
366
+ };
367
+ await Promise.all(enhancers.map(loadEnhancer));
368
+ }
369
+ async loadCtorMetadata(metadata, contextId, inquirer, parentInquirer) {
370
+ const hosts = await Promise.all(metadata.map(async (item) => this.resolveScopedComponentHost(item, contextId, inquirer, parentInquirer)));
371
+ const inquirerId = this.getInquirerId(inquirer);
372
+ return hosts.map((item) => item?.getInstanceByContextId(this.getContextId(contextId, item), inquirerId).instance);
373
+ }
374
+ async loadPropertiesMetadata(metadata, contextId, inquirer) {
375
+ const dependenciesHosts = await Promise.all(metadata.map(async ({ wrapper: item, key }) => ({
376
+ key,
377
+ host: await this.resolveComponentHost(item.host, item, contextId, inquirer),
378
+ })));
379
+ const inquirerId = this.getInquirerId(inquirer);
380
+ return dependenciesHosts.map(({ key, host }) => ({
381
+ key,
382
+ name: key,
383
+ instance: host.getInstanceByContextId(this.getContextId(contextId, host), inquirerId).instance,
384
+ }));
385
+ }
386
+ getInquirerId(inquirer) {
387
+ return inquirer && inquirer.id;
388
+ }
389
+ resolveScopedComponentHost(item, contextId, inquirer, parentInquirer) {
390
+ return this.isInquirerRequest(item, parentInquirer)
391
+ ? parentInquirer
392
+ : this.resolveComponentHost(item.host, item, contextId, inquirer);
393
+ }
394
+ isInquirerRequest(item, parentInquirer) {
395
+ return item.isTransient && item.name === constants_2.INQUIRER && parentInquirer;
396
+ }
397
+ isInquirer(param, parentInquirer) {
398
+ return param === constants_2.INQUIRER && parentInquirer;
399
+ }
400
+ addDependencyMetadata(keyOrIndex, hostWrapper, instanceWrapper) {
401
+ if ((0, shared_helper_1.isSymbol)(keyOrIndex) || (0, shared_helper_1.isString)(keyOrIndex)) {
402
+ hostWrapper.addPropertiesMetadata(keyOrIndex, instanceWrapper);
403
+ }
404
+ else {
405
+ hostWrapper.addCtorMetadata(keyOrIndex, instanceWrapper);
406
+ }
407
+ }
408
+ getTokenName(token) {
409
+ return (0, shared_helper_1.isFunction)(token) ? token.name : token.toString();
410
+ }
411
+ printResolvingDependenciesLog(token, inquirer) {
412
+ if (!this.isDebugMode()) {
413
+ return;
414
+ }
415
+ const tokenName = this.getTokenName(token);
416
+ const dependentName = (inquirer?.name && inquirer.name.toString?.()) ?? "unknown";
417
+ const isAlias = dependentName === tokenName;
418
+ const messageToPrint = `Resolving dependency ${color_helper_1.colors.cyanBright(tokenName)}${color_helper_1.colors.green(" in the ")}${color_helper_1.colors.yellow(dependentName)}${color_helper_1.colors.green(` provider ${isAlias ? "(alias)" : ""}`)}`;
419
+ this.logger.log(messageToPrint);
420
+ }
421
+ printLookingForProviderLog(token, moduleRef) {
422
+ if (!this.isDebugMode()) {
423
+ return;
424
+ }
425
+ const tokenName = this.getTokenName(token);
426
+ const moduleRefName = moduleRef?.metatype?.name ?? "unknown";
427
+ this.logger.log(`Looking for ${color_helper_1.colors.cyanBright(tokenName)}${color_helper_1.colors.green(" in ")}${color_helper_1.colors.magentaBright(moduleRefName)}`);
428
+ }
429
+ printFoundInModuleLog(token, moduleRef) {
430
+ if (!this.isDebugMode()) {
431
+ return;
432
+ }
433
+ const tokenName = this.getTokenName(token);
434
+ const moduleRefName = moduleRef?.metatype?.name ?? "unknown";
435
+ this.logger.log(`Found ${color_helper_1.colors.cyanBright(tokenName)}${color_helper_1.colors.green(" in ")}${color_helper_1.colors.magentaBright(moduleRefName)}`);
436
+ }
437
+ isDebugMode() {
438
+ return !!process.env.VENOK_DEBUG;
439
+ }
440
+ getContextId(contextId, instanceWrapper) {
441
+ return contextId.getParent
442
+ ? contextId.getParent({
443
+ token: instanceWrapper.token,
444
+ isTreeDurable: instanceWrapper.isDependencyTreeDurable(),
445
+ })
446
+ : contextId;
447
+ }
448
+ getNowTimestamp() {
449
+ return performance.now();
450
+ }
451
+ }
452
+ exports.Injector = Injector;
@@ -0,0 +1,22 @@
1
+ import { InstanceWrapper } from "@venok/core/injector/instance/wrapper";
2
+ import { InjectionToken } from "@venok/core/interfaces/modules";
3
+ import { VenokContainer } from "@venok/core/injector/container";
4
+ export interface InstanceLink<T = any> {
5
+ token: InjectionToken;
6
+ wrapperRef: InstanceWrapper<T>;
7
+ collection: Map<any, InstanceWrapper>;
8
+ moduleId: string;
9
+ }
10
+ export declare class InstanceLinksHost {
11
+ private readonly container;
12
+ private readonly instanceLinks;
13
+ constructor(container: VenokContainer);
14
+ get<T = any>(token: InjectionToken): InstanceLink<T>;
15
+ get<T = any>(token: InjectionToken, options?: {
16
+ moduleId?: string;
17
+ each?: boolean;
18
+ }): InstanceLink<T> | Array<InstanceLink<T>>;
19
+ private initialize;
20
+ private addLink;
21
+ private getInstanceNameByToken;
22
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InstanceLinksHost = void 0;
4
+ const exceptions_1 = require("@venok/core/errors/exceptions");
5
+ const shared_helper_1 = require("@venok/core/helpers/shared.helper");
6
+ class InstanceLinksHost {
7
+ constructor(container) {
8
+ this.container = container;
9
+ this.instanceLinks = new Map();
10
+ this.initialize();
11
+ }
12
+ get(token, options = {}) {
13
+ const instanceLinksForGivenToken = this.instanceLinks.get(token);
14
+ if (!instanceLinksForGivenToken)
15
+ throw new exceptions_1.UnknownElementException(this.getInstanceNameByToken(token));
16
+ if (options.each)
17
+ return instanceLinksForGivenToken;
18
+ const instanceLink = options.moduleId
19
+ ? instanceLinksForGivenToken.find((item) => item.moduleId === options.moduleId)
20
+ : instanceLinksForGivenToken[instanceLinksForGivenToken.length - 1];
21
+ if (!instanceLink)
22
+ throw new exceptions_1.UnknownElementException(this.getInstanceNameByToken(token));
23
+ return instanceLink;
24
+ }
25
+ initialize() {
26
+ const modules = this.container.getModules();
27
+ modules.forEach((moduleRef) => {
28
+ const { providers, injectables } = moduleRef;
29
+ providers.forEach((wrapper, token) => this.addLink(wrapper, token, moduleRef, "providers"));
30
+ injectables.forEach((wrapper, token) => this.addLink(wrapper, token, moduleRef, "injectables"));
31
+ });
32
+ }
33
+ addLink(wrapper, token, moduleRef, collectionName) {
34
+ const instanceLink = {
35
+ moduleId: moduleRef.id,
36
+ wrapperRef: wrapper,
37
+ collection: moduleRef[collectionName],
38
+ token,
39
+ };
40
+ const existingLinks = this.instanceLinks.get(token);
41
+ if (!existingLinks)
42
+ this.instanceLinks.set(token, [instanceLink]);
43
+ else
44
+ existingLinks.push(instanceLink);
45
+ }
46
+ getInstanceNameByToken(token) {
47
+ return (0, shared_helper_1.isFunction)(token) ? token?.name : token;
48
+ }
49
+ }
50
+ exports.InstanceLinksHost = InstanceLinksHost;
@@ -0,0 +1,21 @@
1
+ import { VenokContainer } from "@venok/core/injector/container";
2
+ import { Injector } from "@venok/core/injector/injector";
3
+ import { Logger, LoggerService } from "@venok/core/services/logger.service";
4
+ import { Module } from "@venok/core/injector/module/module";
5
+ import { GraphInspector } from "@venok/core/inspector/graph-inspector";
6
+ export declare class InstanceLoader<TInjector extends Injector = Injector> {
7
+ protected readonly container: VenokContainer;
8
+ protected readonly injector: TInjector;
9
+ protected readonly graphInspector: GraphInspector;
10
+ private logger;
11
+ constructor(container: VenokContainer, injector: TInjector, graphInspector: GraphInspector, logger?: LoggerService);
12
+ setLogger(logger: Logger): void;
13
+ createInstancesOfDependencies(modules?: Map<string, Module>): Promise<void>;
14
+ private createPrototypes;
15
+ private createInstances;
16
+ private createPrototypesOfProviders;
17
+ private createInstancesOfProviders;
18
+ private createPrototypesOfInjectables;
19
+ private createInstancesOfInjectables;
20
+ private isModuleWhitelisted;
21
+ }