UNPKG

3.03 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/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 setLogger(logger) {
17 this.logger = logger;
18 }
19 async createInstancesOfDependencies(modules = this.container.getModules()) {
20 this.createPrototypes(modules);
21 await this.createInstances(modules);
22 }
23 createPrototypes(modules) {
24 modules.forEach(moduleRef => {
25 this.createPrototypesOfProviders(moduleRef);
26 this.createPrototypesOfInjectables(moduleRef);
27 this.createPrototypesOfControllers(moduleRef);
28 });
29 }
30 async createInstances(modules) {
31 await Promise.all([...modules.values()].map(async (moduleRef) => {
32 await this.createInstancesOfProviders(moduleRef);
33 await this.createInstancesOfInjectables(moduleRef);
34 await this.createInstancesOfControllers(moduleRef);
35 const { name } = moduleRef.metatype;
36 this.isModuleWhitelisted(name) &&
37 this.logger.log((0, messages_1.MODULE_INIT_MESSAGE) `${name}`);
38 }));
39 }
40 createPrototypesOfProviders(moduleRef) {
41 const { providers } = moduleRef;
42 providers.forEach(wrapper => this.injector.loadPrototype(wrapper, providers));
43 }
44 async createInstancesOfProviders(moduleRef) {
45 const { providers } = moduleRef;
46 const wrappers = [...providers.values()];
47 await Promise.all(wrappers.map(item => this.injector.loadProvider(item, moduleRef)));
48 }
49 createPrototypesOfControllers(moduleRef) {
50 const { controllers } = moduleRef;
51 controllers.forEach(wrapper => this.injector.loadPrototype(wrapper, controllers));
52 }
53 async createInstancesOfControllers(moduleRef) {
54 const { controllers } = moduleRef;
55 const wrappers = [...controllers.values()];
56 await Promise.all(wrappers.map(item => this.injector.loadController(item, moduleRef)));
57 }
58 createPrototypesOfInjectables(moduleRef) {
59 const { injectables } = moduleRef;
60 injectables.forEach(wrapper => this.injector.loadPrototype(wrapper, injectables));
61 }
62 async createInstancesOfInjectables(moduleRef) {
63 const { injectables } = moduleRef;
64 const wrappers = [...injectables.values()];
65 await Promise.all(wrappers.map(item => this.injector.loadInjectable(item, moduleRef)));
66 }
67 isModuleWhitelisted(name) {
68 return name !== internal_core_module_1.InternalCoreModule.name;
69 }
70}
71exports.InstanceLoader = InstanceLoader;