1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const common_1 = require("@nestjs/common");
|
4 | const messages_1 = require("../helpers/messages");
|
5 | const injector_1 = require("./injector");
|
6 | const internal_core_module_1 = require("./internal-core-module");
|
7 | class InstanceLoader {
|
8 | constructor(container) {
|
9 | this.container = container;
|
10 | this.injector = new injector_1.Injector();
|
11 | this.logger = new common_1.Logger(InstanceLoader.name, true);
|
12 | }
|
13 | async createInstancesOfDependencies() {
|
14 | const modules = this.container.getModules();
|
15 | this.createPrototypes(modules);
|
16 | await this.createInstances(modules);
|
17 | }
|
18 | createPrototypes(modules) {
|
19 | modules.forEach(module => {
|
20 | this.createPrototypesOfProviders(module);
|
21 | this.createPrototypesOfInjectables(module);
|
22 | this.createPrototypesOfControllers(module);
|
23 | });
|
24 | }
|
25 | async createInstances(modules) {
|
26 | await Promise.all([...modules.values()].map(async (module) => {
|
27 | await this.createInstancesOfProviders(module);
|
28 | await this.createInstancesOfInjectables(module);
|
29 | await this.createInstancesOfControllers(module);
|
30 | const { name } = module.metatype;
|
31 | this.isModuleWhitelisted(name) &&
|
32 | this.logger.log(messages_1.MODULE_INIT_MESSAGE `${name}`);
|
33 | }));
|
34 | }
|
35 | createPrototypesOfProviders(module) {
|
36 | const { providers } = module;
|
37 | providers.forEach(wrapper => this.injector.loadPrototype(wrapper, providers));
|
38 | }
|
39 | async createInstancesOfProviders(module) {
|
40 | const { providers } = module;
|
41 | await Promise.all([...providers.values()].map(async (wrapper) => this.injector.loadProvider(wrapper, module)));
|
42 | }
|
43 | createPrototypesOfControllers(module) {
|
44 | const { controllers } = module;
|
45 | controllers.forEach(wrapper => this.injector.loadPrototype(wrapper, controllers));
|
46 | }
|
47 | async createInstancesOfControllers(module) {
|
48 | const { controllers } = module;
|
49 | await Promise.all([...controllers.values()].map(async (wrapper) => this.injector.loadController(wrapper, module)));
|
50 | }
|
51 | createPrototypesOfInjectables(module) {
|
52 | const { injectables } = module;
|
53 | injectables.forEach(wrapper => this.injector.loadPrototype(wrapper, injectables));
|
54 | }
|
55 | async createInstancesOfInjectables(module) {
|
56 | const { injectables } = module;
|
57 | await Promise.all([...injectables.values()].map(async (wrapper) => this.injector.loadInjectable(wrapper, module)));
|
58 | }
|
59 | isModuleWhitelisted(name) {
|
60 | return name !== internal_core_module_1.InternalCoreModule.name;
|
61 | }
|
62 | }
|
63 | exports.InstanceLoader = InstanceLoader;
|