@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
75 lines • 11 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HandlerContextCreator = void 0;
const iterare_1 = __importDefault(require("iterare"));
const core_1 = require("../../core");
const helpers_1 = require("../../helpers");
const utils_1 = require("../../utils");
class HandlerContextCreator extends helpers_1.ContextCreator {
constructor(container, config) {
super();
this.container = container;
this.config = config;
}
create(instance, callback, moduleKey, contextId = core_1.STATIC_CONTEXT, inquirerId) {
this.moduleContext = moduleKey;
return this.createContext(instance, callback, helpers_1.HANDLER_METADATA, contextId, inquirerId);
}
createConcreteContext(metadata, contextId = core_1.STATIC_CONTEXT, inquirerId) {
if ((0, utils_1.isEmpty)(metadata)) {
return [];
}
return (0, iterare_1.default)(metadata)
.filter((pipe) => pipe && (pipe.name || pipe.transform))
.map(pipe => this.getPipeInstance(pipe, contextId, inquirerId))
.filter(pipe => pipe && pipe.transform && (0, utils_1.isFunction)(pipe.transform))
.toArray();
}
getPipeInstance(handler, contextId = core_1.STATIC_CONTEXT, inquirerId) {
const isObject = handler.transform;
if (isObject) {
return handler;
}
const instanceWrapper = this.getInstanceByMetatype(handler);
if (!instanceWrapper) {
return null;
}
const instanceHost = instanceWrapper.getInstanceByContextId(this.getContextId(contextId, instanceWrapper), inquirerId);
return instanceHost && instanceHost.instance;
}
getInstanceByMetatype(metatype) {
if (!this.moduleContext) {
return;
}
const collection = this.container.getModules();
const moduleRef = collection.get(this.moduleContext);
if (!moduleRef) {
return;
}
return moduleRef.injectables.get(metatype);
}
getGlobalMetadata(contextId = core_1.STATIC_CONTEXT, inquirerId) {
if (!this.config) {
return [];
}
const handlerPipes = this.config.getGlobalHandlers();
if (contextId === core_1.STATIC_CONTEXT && !inquirerId) {
return handlerPipes;
}
const scopedPipeWrappers = this.config.getGlobalRequestHandlers();
const scopedPipes = (0, iterare_1.default)(scopedPipeWrappers)
.map(wrapper => wrapper.getInstanceByContextId(this.getContextId(contextId, wrapper), inquirerId))
.filter(host => !!host)
.map(host => host.instance)
.toArray();
return handlerPipes.concat(scopedPipes);
}
setModuleContext(context) {
this.moduleContext = context;
}
}
exports.HandlerContextCreator = HandlerContextCreator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci1jb250ZXh0LWNyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2Vic29ja2V0cy9oYW5kbGVyL2hhbmRsZXItY29udGV4dC1jcmVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNEQUE2QjtBQUc3QixxQ0FBMEU7QUFDMUUsMkNBQWdFO0FBRWhFLHVDQUFpRDtBQUVqRCxNQUFhLHFCQUFzQixTQUFRLHdCQUFjO0lBR3ZELFlBQ21CLFNBQXVCLEVBQ3ZCLE1BQTBCO1FBRTNDLEtBQUssRUFBRSxDQUFBO1FBSFUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFvQjtJQUc3QyxDQUFDO0lBRU0sTUFBTSxDQUNYLFFBQXdCLEVBQ3hCLFFBQXlDLEVBQ3pDLFNBQWlCLEVBQ2pCLFNBQVMsR0FBRyxxQkFBYyxFQUMxQixVQUFtQjtRQUVuQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQTtRQUM5QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQ3ZCLFFBQVEsRUFDUixRQUFRLEVBQ1IsMEJBQWdCLEVBQ2hCLFNBQVMsRUFDVCxVQUFVLENBQ1gsQ0FBQTtJQUNILENBQUM7SUFFTSxxQkFBcUIsQ0FDMUIsUUFBVyxFQUNYLFNBQVMsR0FBRyxxQkFBYyxFQUMxQixVQUFtQjtRQUVuQixJQUFJLElBQUEsZUFBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxFQUFPLENBQUE7UUFDaEIsQ0FBQztRQUNELE9BQU8sSUFBQSxpQkFBTyxFQUFDLFFBQVEsQ0FBQzthQUNyQixNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzVELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFBLGtCQUFVLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3BFLE9BQU8sRUFBTyxDQUFBO0lBQ25CLENBQUM7SUFFTSxlQUFlLENBQ3BCLE9BQW9DLEVBQ3BDLFNBQVMsR0FBRyxxQkFBYyxFQUMxQixVQUFtQjtRQUVuQixNQUFNLFFBQVEsR0FBSSxPQUE0QixDQUFDLFNBQVMsQ0FBQTtRQUN4RCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxPQUEyQixDQUFBO1FBQ3BDLENBQUM7UUFDRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBd0IsQ0FBQyxDQUFBO1FBQzVFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsc0JBQXNCLENBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxFQUM3QyxVQUFVLENBQ1gsQ0FBQTtRQUNELE9BQU8sWUFBWSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUE7SUFDOUMsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixRQUF1QjtRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUM5QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFNO1FBQ1IsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVNLGlCQUFpQixDQUN0QixTQUFTLEdBQUcscUJBQWMsRUFDMUIsVUFBbUI7UUFFbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixPQUFPLEVBQU8sQ0FBQTtRQUNoQixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBTyxDQUFBO1FBQ3pELElBQUksU0FBUyxLQUFLLHFCQUFjLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoRCxPQUFPLFlBQVksQ0FBQTtRQUNyQixDQUFDO1FBQ0QsTUFBTSxrQkFBa0IsR0FDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsRUFBdUIsQ0FBQTtRQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFBLGlCQUFPLEVBQUMsa0JBQWtCLENBQUM7YUFDNUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQ2IsT0FBTyxDQUFDLHNCQUFzQixDQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFDckMsVUFBVSxDQUNYLENBQ0Y7YUFDQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDMUIsT0FBTyxFQUFFLENBQUE7UUFFWixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFNLENBQUE7SUFDOUMsQ0FBQztJQUVNLGdCQUFnQixDQUFFLE9BQWU7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUE7SUFDOUIsQ0FBQztDQUNGO0FBMUdELHNEQTBHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpdGVyYXRlIGZyb20gJ2l0ZXJhcmUnXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL2FwcCdcbmltcG9ydCB7IEhhbmRsZXJUcmFuc2Zvcm0sIFR5cGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMnXG5pbXBvcnQgeyBDb250YWluZXJJb0MsIEluc3RhbmNlV3JhcHBlciwgU1RBVElDX0NPTlRFWFQgfSBmcm9tICcuLi8uLi9jb3JlJ1xuaW1wb3J0IHsgQ29udGV4dENyZWF0b3IsIEhBTkRMRVJfTUVUQURBVEEgfSBmcm9tICcuLi8uLi9oZWxwZXJzJ1xuaW1wb3J0IHsgQ29udHJvbGxlclR5cGUgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IGlzRW1wdHksIGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi91dGlscydcblxuZXhwb3J0IGNsYXNzIEhhbmRsZXJDb250ZXh0Q3JlYXRvciBleHRlbmRzIENvbnRleHRDcmVhdG9yIHtcbiAgcHJpdmF0ZSBtb2R1bGVDb250ZXh0OiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvciAoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXI6IENvbnRhaW5lcklvQyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZz86IEFwcGxpY2F0aW9uQ29uZmlnXG4gICkge1xuICAgIHN1cGVyKClcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGUgKFxuICAgIGluc3RhbmNlOiBDb250cm9sbGVyVHlwZSxcbiAgICBjYWxsYmFjazogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bixcbiAgICBtb2R1bGVLZXk6IHN0cmluZyxcbiAgICBjb250ZXh0SWQgPSBTVEFUSUNfQ09OVEVYVCxcbiAgICBpbnF1aXJlcklkPzogc3RyaW5nXG4gICk6IEhhbmRsZXJUcmFuc2Zvcm1bXSB7XG4gICAgdGhpcy5tb2R1bGVDb250ZXh0ID0gbW9kdWxlS2V5XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQ29udGV4dChcbiAgICAgIGluc3RhbmNlLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBIQU5ETEVSX01FVEFEQVRBLFxuICAgICAgY29udGV4dElkLFxuICAgICAgaW5xdWlyZXJJZFxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDb25jcmV0ZUNvbnRleHQ8VCBleHRlbmRzIGFueVtdLCBSIGV4dGVuZHMgYW55W10+IChcbiAgICBtZXRhZGF0YTogVCxcbiAgICBjb250ZXh0SWQgPSBTVEFUSUNfQ09OVEVYVCxcbiAgICBpbnF1aXJlcklkPzogc3RyaW5nXG4gICk6IFIge1xuICAgIGlmIChpc0VtcHR5KG1ldGFkYXRhKSkge1xuICAgICAgcmV0dXJuIFtdIGFzIFJcbiAgICB9XG4gICAgcmV0dXJuIGl0ZXJhdGUobWV0YWRhdGEpXG4gICAgICAuZmlsdGVyKChwaXBlOiBhbnkpID0+IHBpcGUgJiYgKHBpcGUubmFtZSB8fCBwaXBlLnRyYW5zZm9ybSkpXG4gICAgICAubWFwKHBpcGUgPT4gdGhpcy5nZXRQaXBlSW5zdGFuY2UocGlwZSwgY29udGV4dElkLCBpbnF1aXJlcklkKSlcbiAgICAgIC5maWx0ZXIocGlwZSA9PiBwaXBlICYmIHBpcGUudHJhbnNmb3JtICYmIGlzRnVuY3Rpb24ocGlwZS50cmFuc2Zvcm0pKVxuICAgICAgLnRvQXJyYXkoKSBhcyBSXG4gIH1cblxuICBwdWJsaWMgZ2V0UGlwZUluc3RhbmNlIChcbiAgICBoYW5kbGVyOiBGdW5jdGlvbiB8IEhhbmRsZXJUcmFuc2Zvcm0sXG4gICAgY29udGV4dElkID0gU1RBVElDX0NPTlRFWFQsXG4gICAgaW5xdWlyZXJJZD86IHN0cmluZ1xuICApOiBIYW5kbGVyVHJhbnNmb3JtIHwgbnVsbCB7XG4gICAgY29uc3QgaXNPYmplY3QgPSAoaGFuZGxlciBhcyBIYW5kbGVyVHJhbnNmb3JtKS50cmFuc2Zvcm1cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHJldHVybiBoYW5kbGVyIGFzIEhhbmRsZXJUcmFuc2Zvcm1cbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VXcmFwcGVyID0gdGhpcy5nZXRJbnN0YW5jZUJ5TWV0YXR5cGUoaGFuZGxlciBhcyBUeXBlPHVua25vd24+KVxuICAgIGlmICghaW5zdGFuY2VXcmFwcGVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZUhvc3QgPSBpbnN0YW5jZVdyYXBwZXIuZ2V0SW5zdGFuY2VCeUNvbnRleHRJZChcbiAgICAgIHRoaXMuZ2V0Q29udGV4dElkKGNvbnRleHRJZCwgaW5zdGFuY2VXcmFwcGVyKSxcbiAgICAgIGlucXVpcmVySWRcbiAgICApXG4gICAgcmV0dXJuIGluc3RhbmNlSG9zdCAmJiBpbnN0YW5jZUhvc3QuaW5zdGFuY2VcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbnN0YW5jZUJ5TWV0YXR5cGUgKFxuICAgIG1ldGF0eXBlOiBUeXBlPHVua25vd24+XG4gICk6IEluc3RhbmNlV3JhcHBlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLm1vZHVsZUNvbnRleHQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5jb250YWluZXIuZ2V0TW9kdWxlcygpXG4gICAgY29uc3QgbW9kdWxlUmVmID0gY29sbGVjdGlvbi5nZXQodGhpcy5tb2R1bGVDb250ZXh0KVxuICAgIGlmICghbW9kdWxlUmVmKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcmV0dXJuIG1vZHVsZVJlZi5pbmplY3RhYmxlcy5nZXQobWV0YXR5cGUpXG4gIH1cblxuICBwdWJsaWMgZ2V0R2xvYmFsTWV0YWRhdGE8VCBleHRlbmRzIHVua25vd25bXT4gKFxuICAgIGNvbnRleHRJZCA9IFNUQVRJQ19DT05URVhULFxuICAgIGlucXVpcmVySWQ/OiBzdHJpbmdcbiAgKTogVCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xuICAgICAgcmV0dXJuIFtdIGFzIFRcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlclBpcGVzID0gdGhpcy5jb25maWcuZ2V0R2xvYmFsSGFuZGxlcnMoKSBhcyBUXG4gICAgaWYgKGNvbnRleHRJZCA9PT0gU1RBVElDX0NPTlRFWFQgJiYgIWlucXVpcmVySWQpIHtcbiAgICAgIHJldHVybiBoYW5kbGVyUGlwZXNcbiAgICB9XG4gICAgY29uc3Qgc2NvcGVkUGlwZVdyYXBwZXJzID1cbiAgICAgIHRoaXMuY29uZmlnLmdldEdsb2JhbFJlcXVlc3RIYW5kbGVycygpIGFzIEluc3RhbmNlV3JhcHBlcltdXG4gICAgY29uc3Qgc2NvcGVkUGlwZXMgPSBpdGVyYXRlKHNjb3BlZFBpcGVXcmFwcGVycylcbiAgICAgIC5tYXAod3JhcHBlciA9PlxuICAgICAgICB3cmFwcGVyLmdldEluc3RhbmNlQnlDb250ZXh0SWQoXG4gICAgICAgICAgdGhpcy5nZXRDb250ZXh0SWQoY29udGV4dElkLCB3cmFwcGVyKSxcbiAgICAgICAgICBpbnF1aXJlcklkXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoaG9zdCA9PiAhIWhvc3QpXG4gICAgICAubWFwKGhvc3QgPT4gaG9zdC5pbnN0YW5jZSlcbiAgICAgIC50b0FycmF5KClcblxuICAgIHJldHVybiBoYW5kbGVyUGlwZXMuY29uY2F0KHNjb3BlZFBpcGVzKSBhcyBUXG4gIH1cblxuICBwdWJsaWMgc2V0TW9kdWxlQ29udGV4dCAoY29udGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5tb2R1bGVDb250ZXh0ID0gY29udGV4dFxuICB9XG59XG4iXX0=