UNPKG

2.75 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const common_1 = require("@nestjs/common");
4const messages_1 = require("../helpers/messages");
5const injector_1 = require("./injector");
6const internal_core_module_1 = require("./internal-core-module");
7class 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}
63exports.InstanceLoader = InstanceLoader;