@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,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./configurable-module.builder"), exports);
18
+ __exportStar(require("../interfaces/modules/configurable"), exports);
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@venok/core",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "author": "0x303133",
6
+ "homepage": "",
7
+ "main": "index.ts",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/venokjs/venok.git",
14
+ "directory": "packages/core"
15
+ },
16
+ "scripts": {
17
+ "build": "venok build",
18
+ "postbuild": "ts-node ../../tools/move.ts core",
19
+ "test": "mocha test/**/*.spec.ts"
20
+ },
21
+ "dependencies": {
22
+ "fast-safe-stringify": "^2.1.1",
23
+ "uid": "^2.0.2",
24
+ "uuid": "^9.0.1"
25
+ },
26
+ "mocha": {
27
+ "require": [
28
+ "ts-node/register",
29
+ "tsconfig-paths/register",
30
+ "../../node_modules/reflect-metadata/Reflect.js",
31
+ "../../hooks/mocha-init-hook.ts"
32
+ ],
33
+ "exit": true
34
+ }
35
+ }
@@ -0,0 +1,9 @@
1
+ import { ArgumentMetadata, PipeTransform } from "@venok/core/interfaces/features/pipes.interface";
2
+ export declare class PipesConsumer {
3
+ apply<TInput = unknown>(value: TInput, { metatype, type, data }: ArgumentMetadata, pipes: PipeTransform[]): Promise<TInput>;
4
+ applyPipes<TInput = unknown>(value: TInput, { metatype, type, data }: {
5
+ metatype: any;
6
+ type?: any;
7
+ data?: any;
8
+ }, transforms: PipeTransform[]): Promise<TInput>;
9
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PipesConsumer = void 0;
4
+ class PipesConsumer {
5
+ async apply(value, { metatype, type, data }, pipes) {
6
+ return this.applyPipes(value, { metatype, type, data }, pipes);
7
+ }
8
+ async applyPipes(value, { metatype, type, data }, transforms) {
9
+ return transforms.reduce(async (deferredValue, pipe) => {
10
+ const val = await deferredValue;
11
+ return pipe.transform(val, { metatype, type, data });
12
+ }, Promise.resolve(value));
13
+ }
14
+ }
15
+ exports.PipesConsumer = PipesConsumer;
@@ -0,0 +1,18 @@
1
+ import { VenokContainer } from "@venok/core/injector/container";
2
+ import { ContextCreator } from "@venok/core/context/creator";
3
+ import { ApplicationConfig } from "@venok/core/application/config";
4
+ import { InstanceWrapper } from "@venok/core/injector/instance/wrapper";
5
+ import { PipeTransform } from "@venok/core/interfaces/features/pipes.interface";
6
+ import { Type } from "@venok/core/interfaces";
7
+ export declare class PipesContextCreator extends ContextCreator {
8
+ private readonly container;
9
+ private readonly config?;
10
+ private moduleContext;
11
+ constructor(container: VenokContainer, config?: ApplicationConfig | undefined);
12
+ create(instance: object, callback: (...args: unknown[]) => unknown, moduleKey: string, contextId?: import("@venok/core/injector/instance/wrapper").ContextId, inquirerId?: string): PipeTransform[];
13
+ createConcreteContext<T extends any[], R extends any[]>(metadata: T, contextId?: import("@venok/core/injector/instance/wrapper").ContextId, inquirerId?: string): R;
14
+ getPipeInstance(pipe: Function | PipeTransform, contextId?: import("@venok/core/injector/instance/wrapper").ContextId, inquirerId?: string): PipeTransform | null;
15
+ getInstanceByMetatype(metatype: Type<unknown>): InstanceWrapper | undefined;
16
+ getGlobalMetadata<T extends unknown[]>(contextId?: import("@venok/core/injector/instance/wrapper").ContextId, inquirerId?: string): T;
17
+ setModuleContext(context: string): void;
18
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PipesContextCreator = void 0;
4
+ const creator_1 = require("@venok/core/context/creator");
5
+ const constants_1 = require("@venok/core/injector/constants");
6
+ const constants_2 = require("@venok/core/constants");
7
+ const shared_helper_1 = require("@venok/core/helpers/shared.helper");
8
+ class PipesContextCreator extends creator_1.ContextCreator {
9
+ constructor(container, config) {
10
+ super();
11
+ this.container = container;
12
+ this.config = config;
13
+ }
14
+ create(instance, callback, moduleKey, contextId = constants_1.STATIC_CONTEXT, inquirerId) {
15
+ this.moduleContext = moduleKey;
16
+ return this.createContext(instance, callback, constants_2.PIPES_METADATA, contextId, inquirerId);
17
+ }
18
+ createConcreteContext(metadata, contextId = constants_1.STATIC_CONTEXT, inquirerId) {
19
+ if ((0, shared_helper_1.isEmpty)(metadata)) {
20
+ return [];
21
+ }
22
+ return metadata
23
+ .filter((pipe) => pipe && (pipe.name || pipe.transform))
24
+ .map((pipe) => this.getPipeInstance(pipe, contextId, inquirerId))
25
+ .filter((pipe) => pipe && pipe.transform && (0, shared_helper_1.isFunction)(pipe.transform));
26
+ }
27
+ getPipeInstance(pipe, contextId = constants_1.STATIC_CONTEXT, inquirerId) {
28
+ const isObject = pipe.transform;
29
+ // @ts-ignore
30
+ if (isObject) {
31
+ return pipe;
32
+ }
33
+ const instanceWrapper = this.getInstanceByMetatype(pipe);
34
+ if (!instanceWrapper) {
35
+ return null;
36
+ }
37
+ const instanceHost = instanceWrapper.getInstanceByContextId(this.getContextId(contextId, instanceWrapper), inquirerId);
38
+ return instanceHost && instanceHost.instance;
39
+ }
40
+ getInstanceByMetatype(metatype) {
41
+ if (!this.moduleContext) {
42
+ return;
43
+ }
44
+ const collection = this.container.getModules();
45
+ const moduleRef = collection.get(this.moduleContext);
46
+ if (!moduleRef) {
47
+ return;
48
+ }
49
+ return moduleRef.injectables.get(metatype);
50
+ }
51
+ getGlobalMetadata(contextId = constants_1.STATIC_CONTEXT, inquirerId) {
52
+ if (!this.config) {
53
+ return [];
54
+ }
55
+ const globalPipes = this.config.getGlobalPipes();
56
+ if (contextId === constants_1.STATIC_CONTEXT && !inquirerId) {
57
+ return globalPipes;
58
+ }
59
+ const scopedPipeWrappers = this.config.getGlobalRequestPipes();
60
+ const scopedPipes = scopedPipeWrappers
61
+ .map((wrapper) => wrapper.getInstanceByContextId(this.getContextId(contextId, wrapper), inquirerId))
62
+ .filter((host) => !!host)
63
+ .map((host) => host.instance);
64
+ return globalPipes.concat(scopedPipes);
65
+ }
66
+ setModuleContext(context) {
67
+ this.moduleContext = context;
68
+ }
69
+ }
70
+ exports.PipesContextCreator = PipesContextCreator;
@@ -0,0 +1,2 @@
1
+ export * from "./consumer";
2
+ export * from "./context-creator";
package/pipes/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./consumer"), exports);
18
+ __exportStar(require("./context-creator"), exports);
package/scanner.d.ts ADDED
@@ -0,0 +1,81 @@
1
+ import { ClassProvider, DynamicModule, ExistingProvider, FactoryProvider, ForwardReference, ModuleDefinition, Provider, Type, ValueProvider } from "@venok/core/interfaces";
2
+ import { ModuleOverride } from "@venok/core/interfaces/modules/override.interface";
3
+ import { MetadataScanner } from "@venok/core/metadata-scanner";
4
+ import { GraphInspector } from "@venok/core/inspector/graph-inspector";
5
+ import { ApplicationConfig } from "@venok/core/application/config";
6
+ import { VenokContainer } from "@venok/core/injector/container";
7
+ import { Module } from "@venok/core/injector/module/module";
8
+ import { ENHANCER_KEY_TO_SUBTYPE_MAP, EnhancerSubtype } from "@venok/core/constants";
9
+ import { InstanceWrapper } from "@venok/core/injector/instance/wrapper";
10
+ import { Injectable } from "@venok/core/interfaces/injectable.interface";
11
+ interface ModulesScanParameters {
12
+ moduleDefinition: ModuleDefinition;
13
+ scope?: Type<unknown>[];
14
+ ctxRegistry?: (ForwardReference | DynamicModule | Type<unknown>)[];
15
+ overrides?: ModuleOverride[];
16
+ lazy?: boolean;
17
+ }
18
+ export declare class DependenciesScanner {
19
+ private readonly container;
20
+ private readonly metadataScanner;
21
+ private readonly graphInspector;
22
+ private readonly applicationConfig;
23
+ private readonly applicationProvidersApplyMap;
24
+ constructor(container: VenokContainer, metadataScanner: MetadataScanner, graphInspector: GraphInspector, applicationConfig?: ApplicationConfig);
25
+ scan(module: Type<any>, options?: {
26
+ overrides?: ModuleOverride[];
27
+ }): Promise<void>;
28
+ scanForModules({ moduleDefinition, lazy, scope, ctxRegistry, overrides, }: ModulesScanParameters): Promise<Module[]>;
29
+ insertModule(moduleDefinition: any, scope: Type<unknown>[]): Promise<{
30
+ moduleRef: Module;
31
+ inserted: boolean;
32
+ } | undefined>;
33
+ scanModulesForDependencies(modules?: Map<string, Module>): Promise<void>;
34
+ reflectImports(module: Type<unknown>, token: string, context: string): Promise<void>;
35
+ reflectProviders(module: Type<any>, token: string): void;
36
+ reflectDynamicMetadata(cls: Type<Injectable>, token: string): void;
37
+ reflectExports(module: Type<unknown>, token: string): void;
38
+ reflectInjectables(component: Type<Injectable>, token: string, metadataKey: keyof typeof ENHANCER_KEY_TO_SUBTYPE_MAP): void;
39
+ reflectParamInjectables(component: Type<Injectable>, token: string, metadataKey: string): void;
40
+ reflectKeyMetadata(component: Type<Injectable>, key: string, methodKey: string): {
41
+ methodKey: string;
42
+ metadata: any;
43
+ } | undefined;
44
+ calculateModulesDistance(): void;
45
+ insertImport(related: any, token: string, context: string): Promise<void>;
46
+ isCustomProvider(provider: Provider): provider is ClassProvider | ValueProvider | FactoryProvider | ExistingProvider;
47
+ insertProvider(provider: Provider, token: string): string | symbol | Function | InstanceWrapper<unknown> | undefined;
48
+ insertInjectable(injectable: Type<Injectable> | object, token: string, host: Type<Injectable>, subtype: EnhancerSubtype, methodKey?: string): InstanceWrapper<any> | undefined;
49
+ insertExportedProvider(exportedProvider: Type<Injectable>, token: string): void;
50
+ private insertOrOverrideModule;
51
+ private getOverrideModuleByModule;
52
+ private overrideModule;
53
+ reflectMetadata<T = any>(metadataKey: string, metatype: Type<any>): T[];
54
+ registerCoreModule(overrides?: ModuleOverride[]): Promise<void>;
55
+ /**
56
+ * Add either request or transient globally scoped enhancers
57
+ * to all controllers metadata storage
58
+ */
59
+ addScopedEnhancersMetadata(): void;
60
+ applyApplicationProviders(): void;
61
+ getApplyProvidersMap(): {
62
+ [type: string]: Function;
63
+ };
64
+ getApplyRequestProvidersMap(): {
65
+ [type: string]: Function;
66
+ };
67
+ isDynamicModule(module: Type<any> | DynamicModule): module is DynamicModule;
68
+ /**
69
+ * @param metatype
70
+ * @returns `true` if `metatype` is annotated with the `@Injectable()` decorator.
71
+ */
72
+ private isInjectable;
73
+ /**
74
+ * @param metatype
75
+ * @returns `true` if `metatype` is annotated with the `@Catch()` decorator.
76
+ */
77
+ private isExceptionFilter;
78
+ private isForwardReference;
79
+ private isRequestOrTransient;
80
+ }
81
+ export {};
package/scanner.js ADDED
@@ -0,0 +1,374 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DependenciesScanner = void 0;
4
+ const interfaces_1 = require("@venok/core/interfaces");
5
+ const config_1 = require("@venok/core/application/config");
6
+ const constants_1 = require("@venok/core/constants");
7
+ const undefined_module_exception_1 = require("@venok/core/errors/exceptions/undefined-module.exception");
8
+ const invalid_module_exception_1 = require("@venok/core/errors/exceptions/invalid-module.exception");
9
+ const invalid_class_module_exception_1 = require("@venok/core/errors/exceptions/invalid-class-module.exception");
10
+ const shared_helper_1 = require("@venok/core/helpers/shared.helper");
11
+ const exceptions_1 = require("@venok/core/errors/exceptions");
12
+ const uuid_helper_1 = require("@venok/core/helpers/uuid.helper");
13
+ const class_scope_helper_1 = require("@venok/core/injector/helpers/class-scope.helper");
14
+ const internal_core_module_factory_1 = require("@venok/core/injector/internal-core-module/internal-core-module-factory");
15
+ const flatten_helper_1 = require("@venok/core/helpers/flatten.helper");
16
+ class DependenciesScanner {
17
+ constructor(container, metadataScanner, graphInspector, applicationConfig = new config_1.ApplicationConfig()) {
18
+ this.container = container;
19
+ this.metadataScanner = metadataScanner;
20
+ this.graphInspector = graphInspector;
21
+ this.applicationConfig = applicationConfig;
22
+ this.applicationProvidersApplyMap = [];
23
+ }
24
+ async scan(module, options) {
25
+ await this.registerCoreModule(options?.overrides);
26
+ await this.scanForModules({
27
+ moduleDefinition: module,
28
+ overrides: options?.overrides,
29
+ });
30
+ await this.scanModulesForDependencies();
31
+ this.calculateModulesDistance();
32
+ this.addScopedEnhancersMetadata();
33
+ this.container.bindGlobalScope();
34
+ }
35
+ async scanForModules({ moduleDefinition, lazy, scope = [], ctxRegistry = [], overrides = [], }) {
36
+ const { moduleRef: moduleInstance, inserted: moduleInserted } = (await this.insertOrOverrideModule(moduleDefinition, overrides, scope)) ?? {};
37
+ moduleDefinition = this.getOverrideModuleByModule(moduleDefinition, overrides)?.newModule ?? moduleDefinition;
38
+ moduleDefinition = moduleDefinition instanceof Promise ? await moduleDefinition : moduleDefinition;
39
+ ctxRegistry.push(moduleDefinition);
40
+ if (this.isForwardReference(moduleDefinition)) {
41
+ moduleDefinition = moduleDefinition.forwardRef();
42
+ }
43
+ const modules = !this.isDynamicModule(moduleDefinition)
44
+ ? this.reflectMetadata(constants_1.MODULE_METADATA.IMPORTS, moduleDefinition)
45
+ : [
46
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.IMPORTS, moduleDefinition.module),
47
+ ...(moduleDefinition.imports || []),
48
+ ];
49
+ let registeredModuleRefs = [];
50
+ for (const [index, innerModule] of modules.entries()) {
51
+ // In case of a circular dependency (ES module system), JavaScript will resolve the type to `undefined`.
52
+ if (innerModule === undefined) {
53
+ throw new undefined_module_exception_1.UndefinedModuleException(moduleDefinition, index, scope);
54
+ }
55
+ if (!innerModule) {
56
+ throw new invalid_module_exception_1.InvalidModuleException(moduleDefinition, index, scope);
57
+ }
58
+ if (ctxRegistry.includes(innerModule)) {
59
+ continue;
60
+ }
61
+ const moduleRefs = await this.scanForModules({
62
+ moduleDefinition: innerModule,
63
+ // Maybe Error
64
+ scope: scope.concat(moduleDefinition),
65
+ ctxRegistry,
66
+ overrides,
67
+ lazy,
68
+ });
69
+ registeredModuleRefs = registeredModuleRefs.concat(moduleRefs);
70
+ }
71
+ if (!moduleInstance) {
72
+ return registeredModuleRefs;
73
+ }
74
+ if (lazy && moduleInserted) {
75
+ this.container.bindGlobalsToImports(moduleInstance);
76
+ }
77
+ return [moduleInstance].concat(registeredModuleRefs);
78
+ }
79
+ async insertModule(moduleDefinition, scope) {
80
+ const moduleToAdd = this.isForwardReference(moduleDefinition) ? moduleDefinition.forwardRef() : moduleDefinition;
81
+ if (this.isInjectable(moduleToAdd) || this.isExceptionFilter(moduleToAdd)) {
82
+ throw new invalid_class_module_exception_1.InvalidClassModuleException(moduleDefinition, scope);
83
+ }
84
+ return this.container.addModule(moduleToAdd, scope);
85
+ }
86
+ async scanModulesForDependencies(modules = this.container.getModules()) {
87
+ for (const [token, { metatype }] of modules) {
88
+ await this.reflectImports(metatype, token, metatype.name);
89
+ this.reflectProviders(metatype, token);
90
+ this.reflectExports(metatype, token);
91
+ }
92
+ }
93
+ async reflectImports(module, token, context) {
94
+ const modules = [
95
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.IMPORTS, module),
96
+ ...this.container.getDynamicMetadataByToken(token, constants_1.MODULE_METADATA.IMPORTS),
97
+ ];
98
+ for (const related of modules) {
99
+ await this.insertImport(related, token, context);
100
+ }
101
+ }
102
+ reflectProviders(module, token) {
103
+ const providers = [
104
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.PROVIDERS, module),
105
+ ...this.container.getDynamicMetadataByToken(token, constants_1.MODULE_METADATA.PROVIDERS),
106
+ ];
107
+ providers.forEach((provider) => {
108
+ this.insertProvider(provider, token);
109
+ this.reflectDynamicMetadata(provider, token);
110
+ });
111
+ }
112
+ reflectDynamicMetadata(cls, token) {
113
+ if (!cls || !cls.prototype) {
114
+ return;
115
+ }
116
+ this.reflectInjectables(cls, token, constants_1.GUARDS_METADATA);
117
+ this.reflectInjectables(cls, token, constants_1.INTERCEPTORS_METADATA);
118
+ this.reflectInjectables(cls, token, constants_1.EXCEPTION_FILTERS_METADATA);
119
+ this.reflectInjectables(cls, token, constants_1.PIPES_METADATA);
120
+ this.reflectParamInjectables(cls, token, constants_1.ROUTE_ARGS_METADATA);
121
+ }
122
+ reflectExports(module, token) {
123
+ const exports = [
124
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.EXPORTS, module),
125
+ ...this.container.getDynamicMetadataByToken(token, constants_1.MODULE_METADATA.EXPORTS),
126
+ ];
127
+ exports.forEach((exportedProvider) => this.insertExportedProvider(exportedProvider, token));
128
+ }
129
+ reflectInjectables(component, token, metadataKey) {
130
+ const Injectables = this.reflectMetadata(metadataKey, component);
131
+ const methodInjectables = this.metadataScanner.getAllMethodNames(component.prototype).reduce((acc, method) => {
132
+ const methodInjectable = this.reflectKeyMetadata(component, metadataKey, method);
133
+ if (methodInjectable) {
134
+ acc.push(methodInjectable);
135
+ }
136
+ return acc;
137
+ }, []);
138
+ Injectables.forEach((injectable) => this.insertInjectable(injectable, token, component, constants_1.ENHANCER_KEY_TO_SUBTYPE_MAP[metadataKey]));
139
+ methodInjectables.forEach((methodInjectable) => {
140
+ methodInjectable.metadata.forEach((injectable) => this.insertInjectable(injectable, token, component, constants_1.ENHANCER_KEY_TO_SUBTYPE_MAP[metadataKey], methodInjectable.methodKey));
141
+ });
142
+ }
143
+ reflectParamInjectables(component, token, metadataKey) {
144
+ const paramsMethods = this.metadataScanner.getAllMethodNames(component.prototype);
145
+ paramsMethods.forEach((methodKey) => {
146
+ const metadata = Reflect.getMetadata(metadataKey, component, methodKey);
147
+ if (!metadata) {
148
+ return;
149
+ }
150
+ const params = Object.values(metadata);
151
+ params
152
+ .map((item) => item.pipes)
153
+ .flat(1)
154
+ .forEach((injectable) => this.insertInjectable(injectable, token, component, "pipe", methodKey));
155
+ });
156
+ }
157
+ reflectKeyMetadata(component, key, methodKey) {
158
+ let prototype = component.prototype;
159
+ do {
160
+ const descriptor = Reflect.getOwnPropertyDescriptor(prototype, methodKey);
161
+ if (!descriptor) {
162
+ continue;
163
+ }
164
+ const metadata = Reflect.getMetadata(key, descriptor.value);
165
+ if (!metadata) {
166
+ return;
167
+ }
168
+ return { methodKey, metadata };
169
+ } while ((prototype = Reflect.getPrototypeOf(prototype)) && prototype !== Object.prototype && prototype);
170
+ return undefined;
171
+ }
172
+ calculateModulesDistance() {
173
+ const modulesGenerator = this.container.getModules().values();
174
+ // Skip "InternalCoreModule" from calculating distance
175
+ modulesGenerator.next();
176
+ const modulesStack = [];
177
+ const calculateDistance = (moduleRef, distance = 1) => {
178
+ if (!moduleRef || modulesStack.includes(moduleRef)) {
179
+ return;
180
+ }
181
+ modulesStack.push(moduleRef);
182
+ const moduleImports = moduleRef.imports;
183
+ moduleImports.forEach((importedModuleRef) => {
184
+ if (importedModuleRef) {
185
+ if (distance > importedModuleRef.distance) {
186
+ importedModuleRef.distance = distance;
187
+ }
188
+ calculateDistance(importedModuleRef, distance + 1);
189
+ }
190
+ });
191
+ };
192
+ const rootModule = modulesGenerator.next().value;
193
+ calculateDistance(rootModule);
194
+ }
195
+ async insertImport(related, token, context) {
196
+ if ((0, shared_helper_1.isUndefined)(related)) {
197
+ throw new exceptions_1.CircularDependencyException(context);
198
+ }
199
+ if (this.isForwardReference(related)) {
200
+ return this.container.addImport(related.forwardRef(), token);
201
+ }
202
+ await this.container.addImport(related, token);
203
+ }
204
+ isCustomProvider(provider) {
205
+ return provider && !(0, shared_helper_1.isNull)(provider.provide);
206
+ }
207
+ insertProvider(provider, token) {
208
+ const isCustomProvider = this.isCustomProvider(provider);
209
+ if (!isCustomProvider) {
210
+ return this.container.addProvider(provider, token);
211
+ }
212
+ const applyProvidersMap = this.getApplyProvidersMap();
213
+ const providersKeys = Object.keys(applyProvidersMap);
214
+ const type = provider.provide;
215
+ if (!providersKeys.includes(type)) {
216
+ return this.container.addProvider(provider, token);
217
+ }
218
+ const uuid = uuid_helper_1.UuidFactory.get(type.toString());
219
+ const providerToken = `${type} (UUID: ${uuid})`;
220
+ let scope = provider.scope;
221
+ if ((0, shared_helper_1.isNull)(scope) && provider.useClass) {
222
+ scope = (0, class_scope_helper_1.getClassScope)(provider.useClass);
223
+ }
224
+ this.applicationProvidersApplyMap.push({
225
+ type,
226
+ moduleKey: token,
227
+ providerKey: providerToken,
228
+ scope,
229
+ });
230
+ const newProvider = {
231
+ ...provider,
232
+ provide: providerToken,
233
+ scope,
234
+ };
235
+ const enhancerSubtype = constants_1.ENHANCER_TOKEN_TO_SUBTYPE_MAP[type];
236
+ const factoryOrClassProvider = newProvider;
237
+ if (this.isRequestOrTransient(factoryOrClassProvider.scope)) {
238
+ return this.container.addInjectable(newProvider, token, enhancerSubtype);
239
+ }
240
+ this.container.addProvider(newProvider, token, enhancerSubtype);
241
+ }
242
+ insertInjectable(injectable, token, host, subtype, methodKey) {
243
+ if ((0, shared_helper_1.isFunction)(injectable)) {
244
+ const instanceWrapper = this.container.addInjectable(injectable, token, subtype, host);
245
+ this.graphInspector.insertEnhancerMetadataCache({
246
+ moduleToken: token,
247
+ classRef: host,
248
+ enhancerInstanceWrapper: instanceWrapper,
249
+ targetNodeId: instanceWrapper.id,
250
+ subtype,
251
+ methodKey,
252
+ });
253
+ return instanceWrapper;
254
+ }
255
+ else {
256
+ this.graphInspector.insertEnhancerMetadataCache({
257
+ moduleToken: token,
258
+ classRef: host,
259
+ enhancerRef: injectable,
260
+ methodKey,
261
+ subtype,
262
+ });
263
+ }
264
+ }
265
+ insertExportedProvider(exportedProvider, token) {
266
+ this.container.addExportedProvider(exportedProvider, token);
267
+ }
268
+ insertOrOverrideModule(moduleDefinition, overrides, scope) {
269
+ const overrideModule = this.getOverrideModuleByModule(moduleDefinition, overrides);
270
+ if (overrideModule !== undefined) {
271
+ return this.overrideModule(moduleDefinition, overrideModule.newModule, scope);
272
+ }
273
+ return this.insertModule(moduleDefinition, scope);
274
+ }
275
+ getOverrideModuleByModule(module, overrides) {
276
+ if (this.isForwardReference(module)) {
277
+ return overrides.find((moduleToOverride) => {
278
+ return (moduleToOverride.moduleToReplace === module.forwardRef() ||
279
+ moduleToOverride.moduleToReplace.forwardRef?.() === module.forwardRef());
280
+ });
281
+ }
282
+ return overrides.find((moduleToOverride) => moduleToOverride.moduleToReplace === module);
283
+ }
284
+ async overrideModule(moduleToOverride, newModule, scope) {
285
+ return this.container.replaceModule(this.isForwardReference(moduleToOverride) ? moduleToOverride.forwardRef() : moduleToOverride, this.isForwardReference(newModule) ? newModule.forwardRef() : newModule, scope);
286
+ }
287
+ reflectMetadata(metadataKey, metatype) {
288
+ return Reflect.getMetadata(metadataKey, metatype) || [];
289
+ }
290
+ async registerCoreModule(overrides) {
291
+ const moduleDefinition = internal_core_module_factory_1.InternalCoreModuleFactory.create(this.container, this, this.container.getModuleCompiler(), this.graphInspector, overrides);
292
+ const [instance] = await this.scanForModules({
293
+ moduleDefinition,
294
+ overrides,
295
+ });
296
+ this.container.registerCoreModuleRef(instance);
297
+ }
298
+ /**
299
+ * Add either request or transient globally scoped enhancers
300
+ * to all controllers metadata storage
301
+ */
302
+ addScopedEnhancersMetadata() {
303
+ this.applicationProvidersApplyMap
304
+ .filter((wrapper) => this.isRequestOrTransient(wrapper.scope))
305
+ .forEach(({ moduleKey, providerKey }) => {
306
+ const modulesContainer = this.container.getModules();
307
+ const { injectables } = modulesContainer.get(moduleKey);
308
+ const instanceWrapper = injectables.get(providerKey);
309
+ const iterableIterator = modulesContainer.values();
310
+ (0, flatten_helper_1.flatten)([...iterableIterator].map((moduleRef) => moduleRef.entryProviders)).forEach((EntryProvider) => EntryProvider.addEnhancerMetadata(instanceWrapper));
311
+ });
312
+ }
313
+ applyApplicationProviders() {
314
+ const applyProvidersMap = this.getApplyProvidersMap();
315
+ const applyRequestProvidersMap = this.getApplyRequestProvidersMap();
316
+ const getInstanceWrapper = (moduleKey, providerKey, collectionKey) => {
317
+ const modules = this.container.getModules();
318
+ const collection = modules.get(moduleKey)[collectionKey];
319
+ return collection.get(providerKey);
320
+ };
321
+ // Add global enhancers to the application config
322
+ this.applicationProvidersApplyMap.forEach(({ moduleKey, providerKey, type, scope }) => {
323
+ let instanceWrapper;
324
+ if (this.isRequestOrTransient(scope)) {
325
+ instanceWrapper = getInstanceWrapper(moduleKey, providerKey, "injectables");
326
+ this.graphInspector.insertAttachedEnhancer(instanceWrapper);
327
+ return applyRequestProvidersMap[type](instanceWrapper);
328
+ }
329
+ instanceWrapper = getInstanceWrapper(moduleKey, providerKey, "providers");
330
+ this.graphInspector.insertAttachedEnhancer(instanceWrapper);
331
+ applyProvidersMap[type](instanceWrapper.instance);
332
+ });
333
+ }
334
+ getApplyProvidersMap() {
335
+ return {
336
+ [constants_1.APP_INTERCEPTOR]: (interceptor) => this.applicationConfig.addGlobalInterceptor(interceptor),
337
+ [constants_1.APP_PIPE]: (pipe) => this.applicationConfig.addGlobalPipe(pipe),
338
+ [constants_1.APP_GUARD]: (guard) => this.applicationConfig.addGlobalGuard(guard),
339
+ [constants_1.APP_FILTER]: (filter) => this.applicationConfig.addGlobalFilter(filter),
340
+ };
341
+ }
342
+ getApplyRequestProvidersMap() {
343
+ return {
344
+ [constants_1.APP_INTERCEPTOR]: (interceptor) => this.applicationConfig.addGlobalRequestInterceptor(interceptor),
345
+ [constants_1.APP_PIPE]: (pipe) => this.applicationConfig.addGlobalRequestPipe(pipe),
346
+ [constants_1.APP_GUARD]: (guard) => this.applicationConfig.addGlobalRequestGuard(guard),
347
+ [constants_1.APP_FILTER]: (filter) => this.applicationConfig.addGlobalRequestFilter(filter),
348
+ };
349
+ }
350
+ isDynamicModule(module) {
351
+ return module && !!module.module;
352
+ }
353
+ /**
354
+ * @param metatype
355
+ * @returns `true` if `metatype` is annotated with the `@Injectable()` decorator.
356
+ */
357
+ isInjectable(metatype) {
358
+ return !!Reflect.getMetadata(constants_1.INJECTABLE_WATERMARK, metatype);
359
+ }
360
+ /**
361
+ * @param metatype
362
+ * @returns `true` if `metatype` is annotated with the `@Catch()` decorator.
363
+ */
364
+ isExceptionFilter(metatype) {
365
+ return !!Reflect.getMetadata(constants_1.CATCH_WATERMARK, metatype);
366
+ }
367
+ isForwardReference(module) {
368
+ return module && !!module.forwardRef;
369
+ }
370
+ isRequestOrTransient(scope) {
371
+ return scope === interfaces_1.Scope.REQUEST || scope === interfaces_1.Scope.TRANSIENT;
372
+ }
373
+ }
374
+ exports.DependenciesScanner = DependenciesScanner;