UNPKG

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