UNPKG

@tsclean/core

Version:

Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.

66 lines 10.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HandlersContextCreator = void 0; const iterare_1 = require("iterare"); const context_creator_1 = require("../../helpers/context-creator"); const constants_1 = require("../injector/constants"); const constants_2 = require("../../helpers/constants"); const shared_utils_1 = require("../../utils/shared.utils"); class HandlersContextCreator extends context_creator_1.ContextCreator { constructor(container, config) { super(); this.container = container; this.config = config; } create(instance, callback, moduleKey, contextId = constants_1.STATIC_CONTEXT, inquirerId) { this.moduleContext = moduleKey; return this.createContext(instance, callback, constants_2.HANDLER_METADATA, contextId, inquirerId); } createConcreteContext(metadata, contextId = constants_1.STATIC_CONTEXT, inquirerId) { if ((0, shared_utils_1.isEmpty)(metadata)) return []; return (0, iterare_1.iterate)(metadata) .filter((handler) => handler && (handler.name || handler.transform)) .map(handler => this.getHandlerInstance(handler, contextId, inquirerId)) .filter(handler => handler && handler.transform && (0, shared_utils_1.isFunction)(handler.transform)) .toArray(); } getHandlerInstance(handler, contextId = constants_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(contextId, 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 = constants_1.STATIC_CONTEXT, inquirerId) { if (!this.config) return []; const globalHandlers = this.config.getGlobalHandlers(); if (contextId === constants_1.STATIC_CONTEXT && !inquirerId) return globalHandlers; const scopedPipeWrappers = this.config.getGlobalRequestHandlers(); const scopedPipes = (0, iterare_1.iterate)(scopedPipeWrappers) .map(wrapper => wrapper.getInstanceByContextId(contextId, inquirerId)) .filter(host => !!host) .map(host => host.instance) .toArray(); return globalHandlers.concat(scopedPipes); } setModuleContext(context) { this.moduleContext = context; } } exports.HandlersContextCreator = HandlersContextCreator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMtY29udGV4dC1jcmVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvaGFuZGxlci9oYW5kbGVycy1jb250ZXh0LWNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQWdDO0FBRWhDLG1FQUE2RDtBQUM3RCxxREFBcUQ7QUFJckQsdURBQXlEO0FBQ3pELDJEQUE2RDtBQUc3RCxNQUFhLHNCQUF1QixTQUFRLGdDQUFjO0lBR3RELFlBQ3FCLFNBQXVCLEVBQ3ZCLE1BQTBCO1FBRTNDLEtBQUssRUFBRSxDQUFDO1FBSFMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFvQjtJQUcvQyxDQUFDO0lBRU0sTUFBTSxDQUNULFFBQXdCLEVBQUUsUUFBeUMsRUFDbkUsU0FBaUIsRUFBRSxTQUFTLEdBQUcsMEJBQWMsRUFBRSxVQUFtQjtRQUNsRSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQ3JCLFFBQVEsRUFBRSxRQUFRLEVBQUUsNEJBQWdCLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FDOUQsQ0FBQztJQUNOLENBQUM7SUFFTSxxQkFBcUIsQ0FDeEIsUUFBVyxFQUFFLFNBQVMsR0FBRywwQkFBYyxFQUFFLFVBQW1CO1FBQzVELElBQUksSUFBQSxzQkFBTyxFQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sRUFBTyxDQUFDO1FBRXRDLE9BQU8sSUFBQSxpQkFBTyxFQUFDLFFBQVEsQ0FBQzthQUNuQixNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3hFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUEseUJBQVUsRUFBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEYsT0FBTyxFQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVNLGtCQUFrQixDQUNyQixPQUFvQyxFQUFFLFNBQVMsR0FBRywwQkFBYyxFQUFFLFVBQW1CO1FBRXJGLE1BQU0sUUFBUSxHQUFJLE9BQTRCLENBQUMsU0FBUyxDQUFDO1FBQ3pELElBQUksUUFBUTtZQUFFLE9BQU8sT0FBMkIsQ0FBQztRQUVqRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBd0IsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFbEMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRixPQUFPLFlBQVksSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ2pELENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxRQUF1QjtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBRWhDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBRXZCLE9BQU8sU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLGlCQUFpQixDQUFzQixTQUFTLEdBQUcsMEJBQWMsRUFBRSxVQUFtQjtRQUN6RixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQU8sQ0FBQztRQUVqQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFPLENBQUM7UUFDNUQsSUFBSSxTQUFTLEtBQUssMEJBQWMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLGNBQWMsQ0FBQztRQUV2RSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQXVCLENBQUM7UUFDdkYsTUFBTSxXQUFXLEdBQUcsSUFBQSxpQkFBTyxFQUFDLGtCQUFrQixDQUFDO2FBQzFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUN0QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQzFCLE9BQU8sRUFBRSxDQUFDO1FBRWYsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBTSxDQUFDO0lBQ25ELENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO0lBQ2pDLENBQUM7Q0FDSjtBQXhFRCx3REF3RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2l0ZXJhdGV9IGZyb20gJ2l0ZXJhcmUnO1xuaW1wb3J0IHtBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnLi4vLi4vYXBwL2FwcGxpY2F0aW9uLWNvbmZpZyc7XG5pbXBvcnQge0NvbnRleHRDcmVhdG9yfSBmcm9tICcuLi8uLi9oZWxwZXJzL2NvbnRleHQtY3JlYXRvcic7XG5pbXBvcnQge1NUQVRJQ19DT05URVhUfSBmcm9tICcuLi9pbmplY3Rvci9jb25zdGFudHMnO1xuaW1wb3J0IHtDb250YWluZXJJb0N9IGZyb20gJy4uL2luamVjdG9yJztcbmltcG9ydCB7SW5zdGFuY2VXcmFwcGVyfSBmcm9tICcuLi9pbmplY3Rvci9pbnN0YW5jZS13cmFwcGVyJztcbmltcG9ydCB7SGFuZGxlclRyYW5zZm9ybSwgVHlwZX0gZnJvbSBcIi4uLy4uL2NvbnRyYWN0c1wiO1xuaW1wb3J0IHtIQU5ETEVSX01FVEFEQVRBfSBmcm9tIFwiLi4vLi4vaGVscGVycy9jb25zdGFudHNcIjtcbmltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3NoYXJlZC51dGlsc1wiO1xuaW1wb3J0IHtDb250cm9sbGVyVHlwZX0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBIYW5kbGVyc0NvbnRleHRDcmVhdG9yIGV4dGVuZHMgQ29udGV4dENyZWF0b3Ige1xuICAgIHByaXZhdGUgbW9kdWxlQ29udGV4dDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyOiBDb250YWluZXJJb0MsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnPzogQXBwbGljYXRpb25Db25maWcsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZShcbiAgICAgICAgaW5zdGFuY2U6IENvbnRyb2xsZXJUeXBlLCBjYWxsYmFjazogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bixcbiAgICAgICAgbW9kdWxlS2V5OiBzdHJpbmcsIGNvbnRleHRJZCA9IFNUQVRJQ19DT05URVhULCBpbnF1aXJlcklkPzogc3RyaW5nKTogSGFuZGxlclRyYW5zZm9ybVtdIHtcbiAgICAgICAgdGhpcy5tb2R1bGVDb250ZXh0ID0gbW9kdWxlS2V5O1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb250ZXh0KFxuICAgICAgICAgICAgaW5zdGFuY2UsIGNhbGxiYWNrLCBIQU5ETEVSX01FVEFEQVRBLCBjb250ZXh0SWQsIGlucXVpcmVySWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNvbmNyZXRlQ29udGV4dDxUIGV4dGVuZHMgYW55W10sIFIgZXh0ZW5kcyBhbnlbXT4oXG4gICAgICAgIG1ldGFkYXRhOiBULCBjb250ZXh0SWQgPSBTVEFUSUNfQ09OVEVYVCwgaW5xdWlyZXJJZD86IHN0cmluZyk6IFIge1xuICAgICAgICBpZiAoaXNFbXB0eShtZXRhZGF0YSkpIHJldHVybiBbXSBhcyBSO1xuXG4gICAgICAgIHJldHVybiBpdGVyYXRlKG1ldGFkYXRhKVxuICAgICAgICAgICAgLmZpbHRlcigoaGFuZGxlcjogYW55KSA9PiBoYW5kbGVyICYmIChoYW5kbGVyLm5hbWUgfHwgaGFuZGxlci50cmFuc2Zvcm0pKVxuICAgICAgICAgICAgLm1hcChoYW5kbGVyID0+IHRoaXMuZ2V0SGFuZGxlckluc3RhbmNlKGhhbmRsZXIsIGNvbnRleHRJZCwgaW5xdWlyZXJJZCkpXG4gICAgICAgICAgICAuZmlsdGVyKGhhbmRsZXIgPT4gaGFuZGxlciAmJiBoYW5kbGVyLnRyYW5zZm9ybSAmJiBpc0Z1bmN0aW9uKGhhbmRsZXIudHJhbnNmb3JtKSlcbiAgICAgICAgICAgIC50b0FycmF5KCkgYXMgUjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFuZGxlckluc3RhbmNlKFxuICAgICAgICBoYW5kbGVyOiBGdW5jdGlvbiB8IEhhbmRsZXJUcmFuc2Zvcm0sIGNvbnRleHRJZCA9IFNUQVRJQ19DT05URVhULCBpbnF1aXJlcklkPzogc3RyaW5nKTogSGFuZGxlclRyYW5zZm9ybSB8IG51bGwge1xuXG4gICAgICAgIGNvbnN0IGlzT2JqZWN0ID0gKGhhbmRsZXIgYXMgSGFuZGxlclRyYW5zZm9ybSkudHJhbnNmb3JtO1xuICAgICAgICBpZiAoaXNPYmplY3QpIHJldHVybiBoYW5kbGVyIGFzIEhhbmRsZXJUcmFuc2Zvcm07XG5cbiAgICAgICAgY29uc3QgaW5zdGFuY2VXcmFwcGVyID0gdGhpcy5nZXRJbnN0YW5jZUJ5TWV0YVR5cGUoaGFuZGxlciBhcyBUeXBlPHVua25vd24+KTtcbiAgICAgICAgaWYgKCFpbnN0YW5jZVdyYXBwZXIpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGluc3RhbmNlSG9zdCA9IGluc3RhbmNlV3JhcHBlci5nZXRJbnN0YW5jZUJ5Q29udGV4dElkKGNvbnRleHRJZCwgaW5xdWlyZXJJZCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZUhvc3QgJiYgaW5zdGFuY2VIb3N0Lmluc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJbnN0YW5jZUJ5TWV0YVR5cGUobWV0YVR5cGU6IFR5cGU8dW5rbm93bj4pOiBJbnN0YW5jZVdyYXBwZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMubW9kdWxlQ29udGV4dCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmNvbnRhaW5lci5nZXRNb2R1bGVzKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZVJlZiA9IGNvbGxlY3Rpb24uZ2V0KHRoaXMubW9kdWxlQ29udGV4dCk7XG4gICAgICAgIGlmICghbW9kdWxlUmVmKSByZXR1cm47XG5cbiAgICAgICAgcmV0dXJuIG1vZHVsZVJlZi5pbmplY3RhYmxlcy5nZXQobWV0YVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRHbG9iYWxNZXRhZGF0YTxUIGV4dGVuZHMgdW5rbm93bltdPihjb250ZXh0SWQgPSBTVEFUSUNfQ09OVEVYVCwgaW5xdWlyZXJJZD86IHN0cmluZyk6IFQge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnKSByZXR1cm4gW10gYXMgVDtcblxuICAgICAgICBjb25zdCBnbG9iYWxIYW5kbGVycyA9IHRoaXMuY29uZmlnLmdldEdsb2JhbEhhbmRsZXJzKCkgYXMgVDtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PT0gU1RBVElDX0NPTlRFWFQgJiYgIWlucXVpcmVySWQpIHJldHVybiBnbG9iYWxIYW5kbGVycztcblxuICAgICAgICBjb25zdCBzY29wZWRQaXBlV3JhcHBlcnMgPSB0aGlzLmNvbmZpZy5nZXRHbG9iYWxSZXF1ZXN0SGFuZGxlcnMoKSBhcyBJbnN0YW5jZVdyYXBwZXJbXTtcbiAgICAgICAgY29uc3Qgc2NvcGVkUGlwZXMgPSBpdGVyYXRlKHNjb3BlZFBpcGVXcmFwcGVycylcbiAgICAgICAgICAgIC5tYXAod3JhcHBlciA9PiB3cmFwcGVyLmdldEluc3RhbmNlQnlDb250ZXh0SWQoY29udGV4dElkLCBpbnF1aXJlcklkKSlcbiAgICAgICAgICAgIC5maWx0ZXIoaG9zdCA9PiAhIWhvc3QpXG4gICAgICAgICAgICAubWFwKGhvc3QgPT4gaG9zdC5pbnN0YW5jZSlcbiAgICAgICAgICAgIC50b0FycmF5KCk7XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbEhhbmRsZXJzLmNvbmNhdChzY29wZWRQaXBlcykgYXMgVDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TW9kdWxlQ29udGV4dChjb250ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVDb250ZXh0ID0gY29udGV4dDtcbiAgICB9XG59XG4iXX0=