@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
72 lines • 11.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InstanceLoader = void 0;
const internal_core_module_1 = require("./internal-core-module");
const services_1 = require("../../services");
const helpers_1 = require("../../helpers");
class InstanceLoader {
constructor(container, injector, graphInspector, logger = new services_1.Logger(InstanceLoader.name, {
timestamp: true
})) {
this.container = container;
this.injector = injector;
this.graphInspector = graphInspector;
this.logger = logger;
}
setLogger(logger) {
this.logger = logger;
}
async createInstancesOfDependencies(modules = this.container.getModules()) {
this.createPrototypes(modules);
await this.createInstances(modules);
}
createPrototypes(modules) {
modules.forEach(moduleRef => {
this.createPrototypesOfProviders(moduleRef);
this.createPrototypesOfInjectables(moduleRef);
this.createPrototypesOfControllers(moduleRef);
});
}
async createInstances(modules) {
await Promise.all([...modules.values()].map(async (moduleRef) => {
await this.createInstancesOfProviders(moduleRef);
await this.createInstancesOfInjectables(moduleRef);
await this.createInstancesOfControllers(moduleRef);
const { name } = moduleRef.metaType;
this.isModuleWhitelisted(name) &&
this.logger.log((0, helpers_1.MODULE_INIT_MESSAGE) `${name}`);
}));
}
createPrototypesOfProviders(moduleRef) {
const { providers } = moduleRef;
providers.forEach(wrapper => this.injector.loadPrototype(wrapper, providers));
}
async createInstancesOfProviders(moduleRef) {
const { providers } = moduleRef;
const wrappers = [...providers.values()];
await Promise.all(wrappers.map(item => this.injector.loadProvider(item, moduleRef)));
}
createPrototypesOfControllers(moduleRef) {
const { controllers } = moduleRef;
controllers.forEach(wrapper => this.injector.loadPrototype(wrapper, controllers));
}
async createInstancesOfControllers(moduleRef) {
const { controllers } = moduleRef;
const wrappers = [...controllers.values()];
await Promise.all(wrappers.map(item => this.injector.loadController(item, moduleRef)));
}
createPrototypesOfInjectables(moduleRef) {
const { injectables } = moduleRef;
injectables.forEach(wrapper => this.injector.loadPrototype(wrapper, injectables));
}
async createInstancesOfInjectables(moduleRef) {
const { injectables } = moduleRef;
const wrappers = [...injectables.values()];
await Promise.all(wrappers.map(item => this.injector.loadInjectable(item, moduleRef)));
}
isModuleWhitelisted(name) {
return name !== internal_core_module_1.InternalCoreModule.name;
}
}
exports.InstanceLoader = InstanceLoader;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UtbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvaW5qZWN0b3IvaW5zdGFuY2UtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGlFQUEyRDtBQUkzRCw2Q0FBc0Q7QUFDdEQsMkNBQW1EO0FBRW5ELE1BQWEsY0FBYztJQUN6QixZQUNtQixTQUF1QixFQUNyQixRQUFtQixFQUNuQixjQUE4QixFQUN6QyxTQUF3QixJQUFJLGlCQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtRQUM5RCxTQUFTLEVBQUUsSUFBSTtLQUNoQixDQUFDO1FBTGUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUN6QyxXQUFNLEdBQU4sTUFBTSxDQUVaO0lBQ0QsQ0FBQztJQUVHLFNBQVMsQ0FBRSxNQUFjO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ3RCLENBQUM7SUFFTSxLQUFLLENBQUMsNkJBQTZCLENBQ3hDLFVBQStCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFO1FBRTFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM5QixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVPLGdCQUFnQixDQUFFLE9BQTRCO1FBQ3BELE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzNDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUM3QyxJQUFJLENBQUMsNkJBQTZCLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDL0MsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sS0FBSyxD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QyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUNwRSxDQUFBO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFFLElBQVk7UUFDdkMsT0FBTyxJQUFJLEtBQUsseUNBQWtCLENBQUMsSUFBSSxDQUFBO0lBQ3pDLENBQUM7Q0FDRjtBQTNGRCx3Q0EyRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250YWluZXJJb0MgfSBmcm9tICcuL2NvbnRhaW5lcidcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnLi9pbmplY3RvcidcbmltcG9ydCB7IEludGVybmFsQ29yZU1vZHVsZSB9IGZyb20gJy4vaW50ZXJuYWwtY29yZS1tb2R1bGUnXG5pbXBvcnQgeyBNb2R1bGUgfSBmcm9tICcuL21vZHVsZSdcbmltcG9ydCB7IENvbnRyb2xsZXJUeXBlLCBJbmplY3RhYmxlVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgR3JhcGhJbnNwZWN0b3IgfSBmcm9tICcuLi8uLi9pbnNwZWN0b3InXG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcydcbmltcG9ydCB7IE1PRFVMRV9JTklUX01FU1NBR0UgfSBmcm9tICcuLi8uLi9oZWxwZXJzJ1xuXG5leHBvcnQgY2xhc3MgSW5zdGFuY2VMb2FkZXI8VEluamVjdG9yIGV4dGVuZHMgSW5qZWN0b3IgPSBJbmplY3Rvcj4ge1xuICBjb25zdHJ1Y3RvciAoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXI6IENvbnRhaW5lcklvQyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5qZWN0b3I6IFRJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ3JhcGhJbnNwZWN0b3I6IEdyYXBoSW5zcGVjdG9yLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlID0gbmV3IExvZ2dlcihJbnN0YW5jZUxvYWRlci5uYW1lLCB7XG4gICAgICB0aW1lc3RhbXA6IHRydWVcbiAgICB9KVxuICApIHt9XG5cbiAgcHVibGljIHNldExvZ2dlciAobG9nZ2VyOiBMb2dnZXIpIHtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlclxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUluc3RhbmNlc09mRGVwZW5kZW5jaWVzIChcbiAgICBtb2R1bGVzOiBNYXA8c3RyaW5nLCBNb2R1bGU+ID0gdGhpcy5jb250YWluZXIuZ2V0TW9kdWxlcygpXG4gICkge1xuICAgIHRoaXMuY3JlYXRlUHJvdG90eXBlcyhtb2R1bGVzKVxuICAgIGF3YWl0IHRoaXMuY3JlYXRlSW5zdGFuY2VzKG1vZHVsZXMpXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVByb3RvdHlwZXMgKG1vZHVsZXM6IE1hcDxzdHJpbmcsIE1vZHVsZT4pIHtcbiAgICBtb2R1bGVzLmZvckVhY2gobW9kdWxlUmVmID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlUHJvdG90eXBlc09mUHJvdmlkZXJzKG1vZHVsZVJlZilcbiAgICAgIHRoaXMuY3JlYXRlUHJvdG90eXBlc09mSW5qZWN0YWJsZXMobW9kdWxlUmVmKVxuICAgICAgdGhpcy5jcmVhdGVQcm90b3R5cGVzT2ZDb250cm9sbGVycyhtb2R1bGVSZWYpXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlSW5zdGFuY2VzIChtb2R1bGVzOiBNYXA8c3RyaW5nLCBNb2R1bGU+KSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBbLi4ubW9kdWxlcy52YWx1ZXMoKV0ubWFwKGFzeW5jIG1vZHVsZVJlZiA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlSW5zdGFuY2VzT2ZQcm92aWRlcnMobW9kdWxlUmVmKVxuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUluc3RhbmNlc09mSW5qZWN0YWJsZXMobW9kdWxlUmVmKVxuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUluc3RhbmNlc09mQ29udHJvbGxlcnMobW9kdWxlUmVmKVxuXG4gICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gbW9kdWxlUmVmLm1ldGFUeXBlXG4gICAgICAgIHRoaXMuaXNNb2R1bGVXaGl0ZWxpc3RlZChuYW1lKSAmJlxuICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhNT0RVTEVfSU5JVF9NRVNTQUdFYCR7bmFtZX1gKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVByb3RvdHlwZXNPZlByb3ZpZGVycyAobW9kdWxlUmVmOiBNb2R1bGUpIHtcbiAgICBjb25zdCB7IHByb3ZpZGVycyB9ID0gbW9kdWxlUmVmXG4gICAgcHJvdmlkZXJzLmZvckVhY2god3JhcHBlciA9PlxuICAgICAgdGhpcy5pbmplY3Rvci5sb2FkUHJvdG90eXBlPEluamVjdGFibGVUeXBlPih3cmFwcGVyLCBwcm92aWRlcnMpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVJbnN0YW5jZXNPZlByb3ZpZGVycyAobW9kdWxlUmVmOiBNb2R1bGUpIHtcbiAgICBjb25zdCB7IHByb3ZpZGVycyB9ID0gbW9kdWxlUmVmXG4gICAgY29uc3Qgd3JhcHBlcnMgPSBbLi4ucHJvdmlkZXJzLnZhbHVlcygpXVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgd3JhcHBlcnMubWFwKGl0ZW0gPT4gdGhpcy5pbmplY3Rvci5sb2FkUHJvdmlkZXIoaXRlbSwgbW9kdWxlUmVmKSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVByb3RvdHlwZXNPZkNvbnRyb2xsZXJzIChtb2R1bGVSZWY6IE1vZHVsZSkge1xuICAgIGNvbnN0IHsgY29udHJvbGxlcnMgfSA9IG1vZHVsZVJlZlxuICAgIGNvbnRyb2xsZXJzLmZvckVhY2god3JhcHBlciA9PlxuICAgICAgdGhpcy5pbmplY3Rvci5sb2FkUHJvdG90eXBlPENvbnRyb2xsZXJUeXBlPih3cmFwcGVyLCBjb250cm9sbGVycylcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUluc3RhbmNlc09mQ29udHJvbGxlcnMgKG1vZHVsZVJlZjogTW9kdWxlKSB7XG4gICAgY29uc3QgeyBjb250cm9sbGVycyB9ID0gbW9kdWxlUmVmXG4gICAgY29uc3Qgd3JhcHBlcnMgPSBbLi4uY29udHJvbGxlcnMudmFsdWVzKCldXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB3cmFwcGVycy5tYXAoaXRlbSA9PiB0aGlzLmluamVjdG9yLmxvYWRDb250cm9sbGVyKGl0ZW0sIG1vZHVsZVJlZikpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQcm90b3R5cGVzT2ZJbmplY3RhYmxlcyAobW9kdWxlUmVmOiBNb2R1bGUpIHtcbiAgICBjb25zdCB7IGluamVjdGFibGVzIH0gPSBtb2R1bGVSZWZcbiAgICBpbmplY3RhYmxlcy5mb3JFYWNoKHdyYXBwZXIgPT5cbiAgICAgIHRoaXMuaW5qZWN0b3IubG9hZFByb3RvdHlwZSh3cmFwcGVyLCBpbmplY3RhYmxlcylcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUluc3RhbmNlc09mSW5qZWN0YWJsZXMgKG1vZHVsZVJlZjogTW9kdWxlKSB7XG4gICAgY29uc3QgeyBpbmplY3RhYmxlcyB9ID0gbW9kdWxlUmVmXG4gICAgY29uc3Qgd3JhcHBlcnMgPSBbLi4uaW5qZWN0YWJsZXMudmFsdWVzKCldXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB3cmFwcGVycy5tYXAoaXRlbSA9PiB0aGlzLmluamVjdG9yLmxvYWRJbmplY3RhYmxlKGl0ZW0sIG1vZHVsZVJlZikpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBpc01vZHVsZVdoaXRlbGlzdGVkIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmFtZSAhPT0gSW50ZXJuYWxDb3JlTW9kdWxlLm5hbWVcbiAgfVxufVxuIl19