@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,6 @@
1
+ import { Module } from "./module";
2
+ export declare class ModulesContainer extends Map<string, Module> {
3
+ #private;
4
+ get applicationId(): string;
5
+ getById(id: string): Module | undefined;
6
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var _ModulesContainer_applicationId;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ModulesContainer = void 0;
10
+ const uid_1 = require("uid");
11
+ class ModulesContainer extends Map {
12
+ constructor() {
13
+ super(...arguments);
14
+ _ModulesContainer_applicationId.set(this, (0, uid_1.uid)(21));
15
+ }
16
+ get applicationId() {
17
+ return __classPrivateFieldGet(this, _ModulesContainer_applicationId, "f");
18
+ }
19
+ getById(id) {
20
+ return Array.from(this.values()).find((moduleRef) => moduleRef.id === id);
21
+ }
22
+ }
23
+ exports.ModulesContainer = ModulesContainer;
24
+ _ModulesContainer_applicationId = new WeakMap();
@@ -0,0 +1,21 @@
1
+ import { InstanceLoader } from "@venok/core/injector/instance/loader";
2
+ import { ModuleCompiler } from "@venok/core/injector/module/compiler";
3
+ import { ModulesContainer } from "@venok/core/injector/module/container";
4
+ import { DynamicModule } from "@venok/core/interfaces/modules";
5
+ import { Type } from "@venok/core/interfaces";
6
+ import { ModuleRef } from "@venok/core/injector/module/ref";
7
+ import { LazyModuleLoaderLoadOptions } from "@venok/core/injector/module/lazy/options";
8
+ import { ModuleOverride } from "@venok/core/interfaces/modules/override.interface";
9
+ import { DependenciesScanner } from "@venok/core/scanner";
10
+ export declare class LazyModuleLoader {
11
+ private readonly dependenciesScanner;
12
+ private readonly instanceLoader;
13
+ private readonly moduleCompiler;
14
+ private readonly modulesContainer;
15
+ private readonly moduleOverrides?;
16
+ constructor(dependenciesScanner: DependenciesScanner, instanceLoader: InstanceLoader, moduleCompiler: ModuleCompiler, modulesContainer: ModulesContainer, moduleOverrides?: ModuleOverride[] | undefined);
17
+ load(loaderFn: () => Promise<Type<unknown> | DynamicModule> | Type<unknown> | DynamicModule, loadOpts?: LazyModuleLoaderLoadOptions): Promise<ModuleRef>;
18
+ private registerLoggerConfiguration;
19
+ private createLazyModulesContainer;
20
+ private getTargetModuleRef;
21
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LazyModuleLoader = void 0;
4
+ const ref_1 = require("@venok/core/injector/module/ref");
5
+ const silent_helper_1 = require("@venok/core/helpers/silent.helper");
6
+ class LazyModuleLoader {
7
+ constructor(dependenciesScanner, instanceLoader, moduleCompiler, modulesContainer, moduleOverrides) {
8
+ this.dependenciesScanner = dependenciesScanner;
9
+ this.instanceLoader = instanceLoader;
10
+ this.moduleCompiler = moduleCompiler;
11
+ this.modulesContainer = modulesContainer;
12
+ this.moduleOverrides = moduleOverrides;
13
+ }
14
+ async load(loaderFn, loadOpts) {
15
+ this.registerLoggerConfiguration(loadOpts);
16
+ const moduleClassOrDynamicDefinition = await loaderFn();
17
+ const moduleInstances = await this.dependenciesScanner.scanForModules({
18
+ moduleDefinition: moduleClassOrDynamicDefinition,
19
+ overrides: this.moduleOverrides,
20
+ lazy: true,
21
+ });
22
+ if (moduleInstances.length === 0) {
23
+ // The module has been loaded already. In this case, we must
24
+ // retrieve a module reference from the existing container.
25
+ const { token } = await this.moduleCompiler.compile(moduleClassOrDynamicDefinition);
26
+ const moduleInstance = this.modulesContainer.get(token);
27
+ return moduleInstance && this.getTargetModuleRef(moduleInstance);
28
+ }
29
+ const lazyModulesContainer = this.createLazyModulesContainer(moduleInstances);
30
+ await this.dependenciesScanner.scanModulesForDependencies(lazyModulesContainer);
31
+ await this.instanceLoader.createInstancesOfDependencies(lazyModulesContainer);
32
+ const [targetModule] = moduleInstances;
33
+ return this.getTargetModuleRef(targetModule);
34
+ }
35
+ registerLoggerConfiguration(loadOpts) {
36
+ if (loadOpts?.logger === false) {
37
+ this.instanceLoader.setLogger(new silent_helper_1.SilentLogger());
38
+ }
39
+ }
40
+ createLazyModulesContainer(moduleInstances) {
41
+ moduleInstances = Array.from(new Set(moduleInstances));
42
+ return new Map(moduleInstances.map((ref) => [ref.token, ref]));
43
+ }
44
+ getTargetModuleRef(moduleInstance) {
45
+ const moduleRefInstanceWrapper = moduleInstance.getProviderByKey(ref_1.ModuleRef);
46
+ return moduleRefInstanceWrapper.instance;
47
+ }
48
+ }
49
+ exports.LazyModuleLoader = LazyModuleLoader;
@@ -0,0 +1,6 @@
1
+ export interface LazyModuleLoaderLoadOptions {
2
+ /**
3
+ * If `false`, no logs will be generated when loading some module lazily.
4
+ */
5
+ logger?: boolean;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,74 @@
1
+ import { InstanceWrapper } from "@venok/core/injector/instance/wrapper";
2
+ import { ClassProvider, DynamicModule, ExistingProvider, FactoryProvider, InjectionToken, Provider, ValueProvider, VenokModule } from "@venok/core/interfaces/modules";
3
+ import { Type } from "@venok/core/interfaces";
4
+ import { EnhancerSubtype } from "@venok/core/constants";
5
+ import { ModuleRef } from "@venok/core/injector/module/ref";
6
+ import { VenokContainer } from "@venok/core/injector/container";
7
+ import { Injectable } from "@venok/core/interfaces/injectable.interface";
8
+ export declare class Module {
9
+ private readonly _metatype;
10
+ private readonly container;
11
+ private readonly _id;
12
+ private readonly _imports;
13
+ private readonly _providers;
14
+ private readonly _injectables;
15
+ private readonly _entryProviderKeys;
16
+ private readonly _exports;
17
+ private _distance;
18
+ private _initOnPreview;
19
+ private _isGlobal;
20
+ private _token;
21
+ constructor(_metatype: Type<any>, container: VenokContainer);
22
+ get id(): string;
23
+ get token(): string;
24
+ set token(token: string);
25
+ get name(): string;
26
+ get isGlobal(): boolean;
27
+ set isGlobal(global: boolean);
28
+ get initOnPreview(): boolean;
29
+ set initOnPreview(initOnPreview: boolean);
30
+ get providers(): Map<InjectionToken, InstanceWrapper<Injectable>>;
31
+ get imports(): Set<Module>;
32
+ get injectables(): Map<InjectionToken, InstanceWrapper<Injectable>>;
33
+ get entryProviders(): Array<InstanceWrapper<Injectable>>;
34
+ get exports(): Set<InjectionToken>;
35
+ get instance(): VenokModule;
36
+ get metatype(): Type<any>;
37
+ get distance(): number;
38
+ set distance(value: number);
39
+ addCoreProviders(): void;
40
+ addModuleRef(): void;
41
+ addModuleAsProvider(): void;
42
+ addApplicationConfig(): void;
43
+ addInjectable<T extends Injectable>(injectable: Provider, enhancerSubtype: EnhancerSubtype, host?: Type<T>): string | symbol | Function | InstanceWrapper<unknown>;
44
+ addProvider(provider: Provider, enhancerSubtype?: EnhancerSubtype): InjectionToken;
45
+ isCustomProvider(provider: Provider): provider is ClassProvider | FactoryProvider | ValueProvider | ExistingProvider;
46
+ addCustomProvider(provider: ClassProvider | FactoryProvider | ValueProvider | ExistingProvider, collection: Map<Function | string | symbol, any>, enhancerSubtype?: EnhancerSubtype): InjectionToken;
47
+ isCustomClass(provider: any): provider is ClassProvider;
48
+ isCustomValue(provider: any): provider is ValueProvider;
49
+ isCustomFactory(provider: any): provider is FactoryProvider;
50
+ isCustomUseExisting(provider: any): provider is ExistingProvider;
51
+ isDynamicModule(exported: any): exported is DynamicModule;
52
+ addCustomClass(provider: ClassProvider, collection: Map<InjectionToken, InstanceWrapper>, enhancerSubtype?: EnhancerSubtype): void;
53
+ addCustomValue(provider: ValueProvider, collection: Map<Function | string | symbol, InstanceWrapper>, enhancerSubtype?: EnhancerSubtype): void;
54
+ addCustomFactory(provider: FactoryProvider, collection: Map<Function | string | symbol, InstanceWrapper>, enhancerSubtype?: EnhancerSubtype): void;
55
+ addCustomUseExisting(provider: ExistingProvider, collection: Map<Function | string | symbol, InstanceWrapper>, enhancerSubtype?: EnhancerSubtype): void;
56
+ addExportedProvider(provider: Provider | string | symbol | DynamicModule): Set<InjectionToken> | undefined;
57
+ addCustomExportedProvider(provider: FactoryProvider | ValueProvider | ClassProvider | ExistingProvider): Set<InjectionToken> | undefined;
58
+ validateExportedProvider(token: InjectionToken): InjectionToken;
59
+ addImport(moduleRef: Module): void;
60
+ /**
61
+ * @deprecated
62
+ */
63
+ addRelatedModule(module: Module): void;
64
+ replace(toReplace: InjectionToken, options: any): void;
65
+ hasProvider(token: InjectionToken): boolean;
66
+ hasInjectable(token: InjectionToken): boolean;
67
+ getProviderByKey<T = any>(name: InjectionToken): InstanceWrapper<T>;
68
+ getProviderById<T = any>(id: string): InstanceWrapper<T> | undefined;
69
+ getInjectableById<T = any>(id: string): InstanceWrapper<T> | undefined;
70
+ getNonAliasProviders(): Array<[InjectionToken, InstanceWrapper<Injectable>]>;
71
+ createModuleReferenceType(): Type<ModuleRef>;
72
+ private isEntryProvider;
73
+ private generateUuid;
74
+ }
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Module = void 0;
4
+ const wrapper_1 = require("@venok/core/injector/instance/wrapper");
5
+ const exceptions_1 = require("@venok/core/errors/exceptions");
6
+ const constants_1 = require("@venok/core/constants");
7
+ const shared_helper_1 = require("@venok/core/helpers/shared.helper");
8
+ const uuid_helper_1 = require("@venok/core/helpers/uuid.helper");
9
+ const random_string_generator_helper_1 = require("@venok/core/helpers/random-string-generator.helper");
10
+ const ref_1 = require("@venok/core/injector/module/ref");
11
+ const class_scope_helper_1 = require("@venok/core/injector/helpers/class-scope.helper");
12
+ const is_durable_helper_1 = require("@venok/core/injector/helpers/is-durable.helper");
13
+ const config_1 = require("@venok/core/application/config");
14
+ const context_id_factory_helper_1 = require("@venok/core/helpers/context-id-factory.helper");
15
+ class Module {
16
+ constructor(_metatype, container) {
17
+ this._metatype = _metatype;
18
+ this.container = container;
19
+ this._imports = new Set();
20
+ this._providers = new Map();
21
+ this._injectables = new Map();
22
+ this._entryProviderKeys = new Set();
23
+ this._exports = new Set();
24
+ this._distance = 0;
25
+ this._initOnPreview = false;
26
+ this._isGlobal = false;
27
+ this.addCoreProviders();
28
+ this._id = this.generateUuid();
29
+ }
30
+ get id() {
31
+ return this._id;
32
+ }
33
+ get token() {
34
+ return this._token;
35
+ }
36
+ set token(token) {
37
+ this._token = token;
38
+ }
39
+ get name() {
40
+ return this.metatype.name;
41
+ }
42
+ get isGlobal() {
43
+ return this._isGlobal;
44
+ }
45
+ set isGlobal(global) {
46
+ this._isGlobal = global;
47
+ }
48
+ get initOnPreview() {
49
+ return this._initOnPreview;
50
+ }
51
+ set initOnPreview(initOnPreview) {
52
+ this._initOnPreview = initOnPreview;
53
+ }
54
+ get providers() {
55
+ return this._providers;
56
+ }
57
+ get imports() {
58
+ return this._imports;
59
+ }
60
+ get injectables() {
61
+ return this._injectables;
62
+ }
63
+ get entryProviders() {
64
+ return Array.from(this._entryProviderKeys)
65
+ .map((token) => this.providers.get(token))
66
+ .filter(Boolean);
67
+ }
68
+ get exports() {
69
+ return this._exports;
70
+ }
71
+ get instance() {
72
+ if (!this._providers.has(this._metatype)) {
73
+ throw new exceptions_1.RuntimeException();
74
+ }
75
+ const module = this._providers.get(this._metatype);
76
+ return module.instance;
77
+ }
78
+ get metatype() {
79
+ return this._metatype;
80
+ }
81
+ get distance() {
82
+ return this._distance;
83
+ }
84
+ set distance(value) {
85
+ this._distance = value;
86
+ }
87
+ addCoreProviders() {
88
+ this.addModuleAsProvider();
89
+ this.addModuleRef();
90
+ this.addApplicationConfig();
91
+ }
92
+ addModuleRef() {
93
+ const moduleRef = this.createModuleReferenceType();
94
+ this._providers.set(ref_1.ModuleRef, new wrapper_1.InstanceWrapper({
95
+ token: ref_1.ModuleRef,
96
+ name: ref_1.ModuleRef.name,
97
+ metatype: ref_1.ModuleRef,
98
+ isResolved: true,
99
+ instance: new moduleRef(),
100
+ host: this,
101
+ }));
102
+ }
103
+ addModuleAsProvider() {
104
+ this._providers.set(this._metatype, new wrapper_1.InstanceWrapper({
105
+ token: this._metatype,
106
+ name: this._metatype.name,
107
+ metatype: this._metatype,
108
+ isResolved: false,
109
+ instance: null,
110
+ host: this,
111
+ }));
112
+ }
113
+ addApplicationConfig() {
114
+ this._providers.set(config_1.ApplicationConfig, new wrapper_1.InstanceWrapper({
115
+ token: config_1.ApplicationConfig,
116
+ name: config_1.ApplicationConfig.name,
117
+ isResolved: true,
118
+ instance: this.container.applicationConfig,
119
+ host: this,
120
+ }));
121
+ }
122
+ addInjectable(injectable, enhancerSubtype, host) {
123
+ if (this.isCustomProvider(injectable)) {
124
+ return this.addCustomProvider(injectable, this._injectables, enhancerSubtype);
125
+ }
126
+ let instanceWrapper = this.injectables.get(injectable);
127
+ if (!instanceWrapper) {
128
+ instanceWrapper = new wrapper_1.InstanceWrapper({
129
+ token: injectable,
130
+ name: injectable.name,
131
+ metatype: injectable,
132
+ instance: null,
133
+ isResolved: false,
134
+ scope: (0, class_scope_helper_1.getClassScope)(injectable),
135
+ durable: (0, is_durable_helper_1.isDurable)(injectable),
136
+ subtype: enhancerSubtype,
137
+ host: this,
138
+ });
139
+ this._injectables.set(injectable, instanceWrapper);
140
+ }
141
+ if (host) {
142
+ const hostWrapper = this._providers.get(host);
143
+ hostWrapper && hostWrapper.addEnhancerMetadata(instanceWrapper);
144
+ }
145
+ return instanceWrapper;
146
+ }
147
+ // public addProvider(provider: Provider): InjectionToken;
148
+ // public addProvider(provider: Provider, enhancerSubtype: EnhancerSubtype): InjectionToken;
149
+ addProvider(provider, enhancerSubtype) {
150
+ if (this.isCustomProvider(provider)) {
151
+ if (this.isEntryProvider(provider.provide)) {
152
+ this._entryProviderKeys.add(provider.provide);
153
+ }
154
+ return this.addCustomProvider(provider, this._providers, enhancerSubtype);
155
+ }
156
+ this._providers.set(provider, new wrapper_1.InstanceWrapper({
157
+ token: provider,
158
+ name: provider.name,
159
+ metatype: provider,
160
+ instance: null,
161
+ isResolved: false,
162
+ scope: (0, class_scope_helper_1.getClassScope)(provider),
163
+ durable: (0, is_durable_helper_1.isDurable)(provider),
164
+ host: this,
165
+ }));
166
+ if (this.isEntryProvider(provider)) {
167
+ this._entryProviderKeys.add(provider);
168
+ }
169
+ return provider;
170
+ }
171
+ isCustomProvider(provider) {
172
+ return !(0, shared_helper_1.isNull)(provider.provide);
173
+ }
174
+ addCustomProvider(provider, collection, enhancerSubtype) {
175
+ if (this.isCustomClass(provider)) {
176
+ this.addCustomClass(provider, collection, enhancerSubtype);
177
+ }
178
+ else if (this.isCustomValue(provider)) {
179
+ this.addCustomValue(provider, collection, enhancerSubtype);
180
+ }
181
+ else if (this.isCustomFactory(provider)) {
182
+ this.addCustomFactory(provider, collection, enhancerSubtype);
183
+ }
184
+ else if (this.isCustomUseExisting(provider)) {
185
+ this.addCustomUseExisting(provider, collection, enhancerSubtype);
186
+ }
187
+ return provider.provide;
188
+ }
189
+ isCustomClass(provider) {
190
+ return !(0, shared_helper_1.isUndefined)(provider.useClass);
191
+ }
192
+ isCustomValue(provider) {
193
+ return (0, shared_helper_1.isObject)(provider) && Object.prototype.hasOwnProperty.call(provider, "useValue");
194
+ }
195
+ isCustomFactory(provider) {
196
+ return !(0, shared_helper_1.isUndefined)(provider.useFactory);
197
+ }
198
+ isCustomUseExisting(provider) {
199
+ return !(0, shared_helper_1.isUndefined)(provider.useExisting);
200
+ }
201
+ isDynamicModule(exported) {
202
+ return exported && exported.module;
203
+ }
204
+ addCustomClass(provider, collection, enhancerSubtype) {
205
+ let { scope, durable } = provider;
206
+ const { useClass } = provider;
207
+ if ((0, shared_helper_1.isUndefined)(scope)) {
208
+ scope = (0, class_scope_helper_1.getClassScope)(useClass);
209
+ }
210
+ if ((0, shared_helper_1.isUndefined)(durable)) {
211
+ durable = (0, is_durable_helper_1.isDurable)(useClass);
212
+ }
213
+ const token = provider.provide;
214
+ collection.set(token, new wrapper_1.InstanceWrapper({
215
+ token,
216
+ name: useClass?.name ?? useClass,
217
+ metatype: useClass,
218
+ instance: null,
219
+ isResolved: false,
220
+ scope,
221
+ durable,
222
+ host: this,
223
+ subtype: enhancerSubtype,
224
+ }));
225
+ }
226
+ addCustomValue(provider, collection, enhancerSubtype) {
227
+ const { useValue: value, provide: providerToken } = provider;
228
+ collection.set(providerToken, new wrapper_1.InstanceWrapper({
229
+ token: providerToken,
230
+ name: providerToken?.name ?? providerToken,
231
+ metatype: null,
232
+ instance: value,
233
+ isResolved: true,
234
+ async: value instanceof Promise,
235
+ host: this,
236
+ subtype: enhancerSubtype,
237
+ }));
238
+ }
239
+ addCustomFactory(provider, collection, enhancerSubtype) {
240
+ const { useFactory: factory, inject, scope, durable, provide: providerToken } = provider;
241
+ collection.set(providerToken, new wrapper_1.InstanceWrapper({
242
+ token: providerToken,
243
+ name: providerToken?.name ?? providerToken,
244
+ metatype: factory,
245
+ instance: null,
246
+ isResolved: false,
247
+ inject: inject || [],
248
+ scope,
249
+ durable,
250
+ host: this,
251
+ subtype: enhancerSubtype,
252
+ }));
253
+ }
254
+ addCustomUseExisting(provider, collection, enhancerSubtype) {
255
+ const { useExisting, provide: providerToken } = provider;
256
+ collection.set(providerToken, new wrapper_1.InstanceWrapper({
257
+ token: providerToken,
258
+ name: providerToken?.name ?? providerToken,
259
+ metatype: ((instance) => instance),
260
+ instance: null,
261
+ isResolved: false,
262
+ inject: [useExisting],
263
+ host: this,
264
+ isAlias: true,
265
+ subtype: enhancerSubtype,
266
+ }));
267
+ }
268
+ addExportedProvider(provider) {
269
+ const addExportedUnit = (token) => this._exports.add(this.validateExportedProvider(token));
270
+ if (this.isCustomProvider(provider)) {
271
+ return this.addCustomExportedProvider(provider);
272
+ }
273
+ else if ((0, shared_helper_1.isString)(provider) || (0, shared_helper_1.isSymbol)(provider)) {
274
+ return addExportedUnit(provider);
275
+ }
276
+ else if (this.isDynamicModule(provider)) {
277
+ const { module: moduleClassRef } = provider;
278
+ return addExportedUnit(moduleClassRef);
279
+ }
280
+ addExportedUnit(provider);
281
+ }
282
+ addCustomExportedProvider(provider) {
283
+ const provide = provider.provide;
284
+ if ((0, shared_helper_1.isString)(provide) || (0, shared_helper_1.isSymbol)(provide)) {
285
+ return this._exports.add(this.validateExportedProvider(provide));
286
+ }
287
+ this._exports.add(this.validateExportedProvider(provide));
288
+ }
289
+ validateExportedProvider(token) {
290
+ if (this._providers.has(token)) {
291
+ return token;
292
+ }
293
+ const imports = Array.from(this._imports.values())
294
+ .filter(Boolean)
295
+ .map(({ metatype }) => metatype)
296
+ .filter(Boolean);
297
+ if (!imports.includes(token)) {
298
+ const { name } = this.metatype;
299
+ const providerName = (0, shared_helper_1.isFunction)(token) ? token.name : token;
300
+ throw new exceptions_1.UnknownExportException(providerName, name);
301
+ }
302
+ return token;
303
+ }
304
+ addImport(moduleRef) {
305
+ this._imports.add(moduleRef);
306
+ }
307
+ /**
308
+ * @deprecated
309
+ */
310
+ addRelatedModule(module) {
311
+ this._imports.add(module);
312
+ }
313
+ replace(toReplace, options) {
314
+ if (options.isProvider && this.hasProvider(toReplace)) {
315
+ const originalProvider = this._providers.get(toReplace);
316
+ return originalProvider.mergeWith({ provide: toReplace, ...options });
317
+ }
318
+ else if (!options.isProvider && this.hasInjectable(toReplace)) {
319
+ const originalInjectable = this._injectables.get(toReplace);
320
+ return originalInjectable.mergeWith({
321
+ provide: toReplace,
322
+ ...options,
323
+ });
324
+ }
325
+ }
326
+ hasProvider(token) {
327
+ return this._providers.has(token);
328
+ }
329
+ hasInjectable(token) {
330
+ return this._injectables.has(token);
331
+ }
332
+ getProviderByKey(name) {
333
+ return this._providers.get(name);
334
+ }
335
+ getProviderById(id) {
336
+ return Array.from(this._providers.values()).find((item) => item.id === id);
337
+ }
338
+ getInjectableById(id) {
339
+ return Array.from(this._injectables.values()).find((item) => item.id === id);
340
+ }
341
+ getNonAliasProviders() {
342
+ return [...this._providers].filter(([_, wrapper]) => !wrapper.isAlias);
343
+ }
344
+ createModuleReferenceType() {
345
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
346
+ const self = this;
347
+ return class extends ref_1.ModuleRef {
348
+ constructor() {
349
+ super(self.container);
350
+ }
351
+ get(typeOrToken, options = {}) {
352
+ options.strict ??= true;
353
+ options.each ??= false;
354
+ return this.find(typeOrToken, options.strict
355
+ ? {
356
+ moduleId: self.id,
357
+ each: options.each,
358
+ }
359
+ : options);
360
+ }
361
+ resolve(typeOrToken, contextId = (0, context_id_factory_helper_1.createContextId)(), options = {}) {
362
+ options.strict ??= true;
363
+ options.each ??= false;
364
+ return this.resolvePerContext(typeOrToken, self, contextId, options);
365
+ }
366
+ async create(type, contextId) {
367
+ if (!(type && (0, shared_helper_1.isFunction)(type) && type.prototype)) {
368
+ throw new exceptions_1.InvalidClassException(type);
369
+ }
370
+ return this.instantiateClass(type, self, contextId);
371
+ }
372
+ };
373
+ }
374
+ isEntryProvider(metatype) {
375
+ return typeof metatype === "function" ? !!Reflect.getMetadata(constants_1.ENTRY_PROVIDER_WATERMARK, metatype) : false;
376
+ }
377
+ generateUuid() {
378
+ const prefix = "M_";
379
+ const key = this.name?.toString() ?? this.token?.toString();
380
+ return key ? uuid_helper_1.UuidFactory.get(`${prefix}_${key}`) : (0, random_string_generator_helper_1.randomStringGenerator)();
381
+ }
382
+ }
383
+ exports.Module = Module;
@@ -0,0 +1,106 @@
1
+ import { Injector } from "@venok/core/injector/injector";
2
+ import { Type } from "@venok/core/interfaces";
3
+ import { ContextId } from "@venok/core/injector/instance/wrapper";
4
+ import { IntrospectionResult } from "@venok/core/interfaces/modules";
5
+ import { Module } from "@venok/core/injector/module/module";
6
+ import { AbstractInstanceResolver } from "@venok/core/injector/instance/resolver";
7
+ import { InstanceLinksHost } from "@venok/core/injector/instance/links-host";
8
+ import { VenokContainer } from "@venok/core/injector/container";
9
+ export interface ModuleRefGetOrResolveOpts {
10
+ /**
11
+ * If enabled, lookup will only be performed in the host module.
12
+ * @default true
13
+ */
14
+ strict?: boolean;
15
+ /**
16
+ * If enabled, instead of returning a first instance registered under a given token,
17
+ * a list of instances will be returned.
18
+ * @default false
19
+ */
20
+ each?: boolean;
21
+ }
22
+ export declare abstract class ModuleRef extends AbstractInstanceResolver {
23
+ protected readonly container: VenokContainer;
24
+ protected readonly injector: Injector;
25
+ private _instanceLinksHost;
26
+ protected get instanceLinksHost(): InstanceLinksHost;
27
+ constructor(container: VenokContainer);
28
+ /**
29
+ * Retrieves an instance of either injectable or controller, otherwise, throws exception.
30
+ * @returns {TResult}
31
+ */
32
+ abstract get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol): TResult;
33
+ /**
34
+ * Retrieves an instance of either injectable or controller, otherwise, throws exception.
35
+ * @returns {TResult}
36
+ */
37
+ abstract get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol, options: {
38
+ /**
39
+ * If enabled, lookup will only be performed in the host module.
40
+ * @default true
41
+ */
42
+ strict?: boolean;
43
+ /** This indicates that only the first instance registered will be returned. */
44
+ each?: undefined | false;
45
+ }): TResult;
46
+ /**
47
+ * Retrieves a list of instances of either injectables or controllers, otherwise, throws exception.
48
+ * @returns {Array<TResult>}
49
+ */
50
+ abstract get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol, options: {
51
+ /**
52
+ * If enabled, lookup will only be performed in the host module.
53
+ * @default true
54
+ */
55
+ strict?: boolean;
56
+ /** This indicates that a list of instances will be returned. */
57
+ each: true;
58
+ }): Array<TResult>;
59
+ /**
60
+ * Retrieves an instance (or a list of instances) of either injectable or controller, otherwise, throws exception.
61
+ * @returns {TResult | Array<TResult>}
62
+ */
63
+ abstract get<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol, options?: ModuleRefGetOrResolveOpts): TResult | Array<TResult>;
64
+ /**
65
+ * Resolves transient or request-scoped instance of either injectable or controller, otherwise, throws exception.
66
+ * @returns {Array<TResult>}
67
+ */
68
+ abstract resolve<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol): Promise<TResult>;
69
+ /**
70
+ * Resolves transient or request-scoped instance of either injectable or controller, otherwise, throws exception.
71
+ * @returns {Array<TResult>}
72
+ */
73
+ abstract resolve<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol, contextId?: {
74
+ id: number;
75
+ }): Promise<TResult>;
76
+ /**
77
+ * Resolves transient or request-scoped instance of either injectable or controller, otherwise, throws exception.
78
+ * @returns {Array<TResult>}
79
+ */
80
+ abstract resolve<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol, contextId?: {
81
+ id: number;
82
+ }, options?: {
83
+ strict?: boolean;
84
+ each?: undefined | false;
85
+ }): Promise<TResult>;
86
+ /**
87
+ * Resolves transient or request-scoped instances of either injectables or controllers, otherwise, throws exception.
88
+ * @returns {Array<TResult>}
89
+ */
90
+ abstract resolve<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol, contextId?: {
91
+ id: number;
92
+ }, options?: {
93
+ strict?: boolean;
94
+ each: true;
95
+ }): Promise<Array<TResult>>;
96
+ /**
97
+ * Resolves transient or request-scoped instance (or a list of instances) of either injectable or controller, otherwise, throws exception.
98
+ * @returns {Promise<TResult | Array<TResult>>}
99
+ */
100
+ abstract resolve<TInput = any, TResult = TInput>(typeOrToken: Type<TInput> | Function | string | symbol, contextId?: {
101
+ id: number;
102
+ }, options?: ModuleRefGetOrResolveOpts): Promise<TResult | Array<TResult>>;
103
+ abstract create<T = any>(type: Type<T>, contextId?: ContextId): Promise<T>;
104
+ introspect<T = any>(token: Type<T> | string | symbol): IntrospectionResult;
105
+ protected instantiateClass<T = any>(type: Type<T>, moduleRef: Module, contextId?: ContextId): Promise<T>;
106
+ }