UNPKG

@tsclean/core

Version:

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

70 lines 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GuardsContextCreator = void 0; const iterare_1 = require("iterare"); const constants_1 = require("../injector/constants"); const helpers_1 = require("../../helpers"); const utils_1 = require("../../utils"); class GuardsContextCreator extends helpers_1.ContextCreator { constructor(container, config) { super(); this.container = container; this.config = config; } create(instance, callback, module, contextId = constants_1.STATIC_CONTEXT, inquirerId) { this.moduleContext = module; return this.createContext(instance, callback, helpers_1.GUARDS_METADATA, contextId, inquirerId); } createConcreteContext(metadata, contextId = constants_1.STATIC_CONTEXT, inquirerId) { if ((0, utils_1.isEmpty)(metadata)) { return []; } return (0, iterare_1.iterate)(metadata) .filter((guard) => guard && (guard.name || guard.canActivate)) .map(guard => this.getGuardInstance(guard, contextId, inquirerId)) .filter((guard) => !!guard && (0, utils_1.isFunction)(guard.canActivate)) .toArray(); } getGuardInstance(metatype, contextId = constants_1.STATIC_CONTEXT, inquirerId) { const isObject = !!metatype.canActivate; if (isObject) { return metatype; } const instanceWrapper = this.getInstanceByMetatype(metatype); 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; } const injectables = moduleRef.injectables; return injectables.get(metatype); } getGlobalMetadata(contextId = constants_1.STATIC_CONTEXT, inquirerId) { if (!this.config) { return []; } const globalGuards = this.config.getGlobalGuards(); if (contextId === constants_1.STATIC_CONTEXT && !inquirerId) { return globalGuards; } const scopedGuardWrappers = this.config.getGlobalRequestGuards(); const scopedGuards = (0, iterare_1.iterate)(scopedGuardWrappers) .map(wrapper => wrapper.getInstanceByContextId(this.getContextId(contextId, wrapper), inquirerId)) .filter(host => !!host) .map(host => host.instance) .toArray(); return globalGuards.concat(scopedGuards); } } exports.GuardsContextCreator = GuardsContextCreator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLWNvbnRleHQtY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL2d1YXJkcy9ndWFyZHMtY29udGV4dC1jcmVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUFrQztBQUNsQyxxREFBdUQ7QUFFdkQsMkNBQWdFO0FBSWhFLHVDQUFrRDtBQUlsRCxNQUFhLG9CQUFxQixTQUFRLHdCQUFjO0lBR3RELFlBQ21CLFNBQXVCLEVBQ3ZCLE1BQTBCO1FBRTNDLEtBQUssRUFBRSxDQUFDO1FBSFMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFvQjtJQUc3QyxDQUFDO0lBRU0sTUFBTSxDQUNYLFFBQXdCLEVBQ3hCLFFBQXlDLEVBQ3pDLE1BQWMsRUFDZCxTQUFTLEdBQUcsMEJBQWMsRUFDMUIsVUFBbUI7UUFFbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUN2QixRQUFRLEVBQ1IsUUFBUSxFQUNSLHlCQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVNLHFCQUFxQixDQUMxQixRQUFXLEVBQ1gsU0FBUyxHQUFHLDBCQUFjLEVBQzFCLFVBQW1CO1FBRW5CLElBQUksSUFBQSxlQUFPLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLEVBQW9CLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sSUFBQSxpQkFBTyxFQUFDLFFBQVEsQ0FBQzthQUNyQixNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FDaEU7YUFDQSxNQUFNLENBQ0wsQ0FBQyxLQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUEsa0JBQVUsRUFBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQ3hFO2FBQ0EsT0FBTyxFQUFPLENBQUM7SUFDcEIsQ0FBQztJQUVNLGdCQUFnQixDQUNyQixRQUFnQyxFQUNoQyxTQUFTLEdBQUcsMEJBQWMsRUFDMUIsVUFBbUI7UUFFbkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFFLFFBQXdCLENBQUMsV0FBVyxDQUFDO1FBQ3pELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixPQUFPLFFBQXVCLENBQUM7UUFDakMsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDaEQsUUFBeUIsQ0FDMUIsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsc0JBQXNCLENBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxFQUM3QyxVQUFVLENBQ1gsQ0FBQztRQUNGLE9BQU8sWUFBWSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDL0MsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixRQUF1QjtRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7UUFDMUMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxpQkFBaUIsQ0FDdEIsU0FBUyxHQUFHLDBCQUFjLEVBQzFCLFVBQW1CO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTyxFQUFvQixDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBTyxDQUFDO1FBQ3hELElBQUksU0FBUyxLQUFLLDBCQUFjLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBdUIsQ0FBQztRQUM1RCxNQUFNLFlBQVksR0FBRyxJQUFBLGlCQUFPLEVBQUMsbUJBQW1CLENBQUM7YUFDOUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQ2IsT0FBTyxDQUFDLHNCQUFzQixDQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFDckMsVUFBVSxDQUNYLENBQ0Y7YUFDQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDMUIsT0FBTyxFQUFFLENBQUM7UUFFYixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFNLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBN0dELG9EQTZHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGl0ZXJhdGUgfSBmcm9tICdpdGVyYXJlJztcbmltcG9ydCB7IFNUQVRJQ19DT05URVhUIH0gZnJvbSAnLi4vaW5qZWN0b3IvY29uc3RhbnRzJztcbmltcG9ydCB7IEluc3RhbmNlV3JhcHBlciB9IGZyb20gJy4uL2luamVjdG9yL2luc3RhbmNlLXdyYXBwZXInO1xuaW1wb3J0IHsgQ29udGV4dENyZWF0b3IsIEdVQVJEU19NRVRBREFUQSB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgQ29udGFpbmVySW9DIH0gZnJvbSAnLi4vLi4vY29yZS9pbmplY3Rvcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL2FwcCc7XG5pbXBvcnQgeyBDb250cm9sbGVyVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzRW1wdHksIGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzJztcbmltcG9ydCB7IENhbkFjdGl2YXRlIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Nhbi1hY3RpdmF0ZSc7XG5cbmV4cG9ydCBjbGFzcyBHdWFyZHNDb250ZXh0Q3JlYXRvciBleHRlbmRzIENvbnRleHRDcmVhdG9yIHtcbiAgcHJpdmF0ZSBtb2R1bGVDb250ZXh0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXI6IENvbnRhaW5lcklvQyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZz86IEFwcGxpY2F0aW9uQ29uZmlnLFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZShcbiAgICBpbnN0YW5jZTogQ29udHJvbGxlclR5cGUsXG4gICAgY2FsbGJhY2s6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24sXG4gICAgbW9kdWxlOiBzdHJpbmcsXG4gICAgY29udGV4dElkID0gU1RBVElDX0NPTlRFWFQsXG4gICAgaW5xdWlyZXJJZD86IHN0cmluZyxcbiAgKTogQ2FuQWN0aXZhdGVbXSB7XG4gICAgdGhpcy5tb2R1bGVDb250ZXh0ID0gbW9kdWxlO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbnRleHQoXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgR1VBUkRTX01FVEFEQVRBLFxuICAgICAgY29udGV4dElkLFxuICAgICAgaW5xdWlyZXJJZCxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUNvbmNyZXRlQ29udGV4dDxUIGV4dGVuZHMgdW5rbm93bltdLCBSIGV4dGVuZHMgdW5rbm93bltdPihcbiAgICBtZXRhZGF0YTogVCxcbiAgICBjb250ZXh0SWQgPSBTVEFUSUNfQ09OVEVYVCxcbiAgICBpbnF1aXJlcklkPzogc3RyaW5nLFxuICApOiBSIHtcbiAgICBpZiAoaXNFbXB0eShtZXRhZGF0YSkpIHtcbiAgICAgIHJldHVybiBbXSBhcyB1bmtub3duW10gYXMgUjtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZXJhdGUobWV0YWRhdGEpXG4gICAgICAuZmlsdGVyKChndWFyZDogYW55KSA9PiBndWFyZCAmJiAoZ3VhcmQubmFtZSB8fCBndWFyZC5jYW5BY3RpdmF0ZSkpXG4gICAgICAubWFwKGd1YXJkID0+XG4gICAgICAgIHRoaXMuZ2V0R3VhcmRJbnN0YW5jZShndWFyZCBhcyBGdW5jdGlvbiwgY29udGV4dElkLCBpbnF1aXJlcklkKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChndWFyZDogQ2FuQWN0aXZhdGUgfCBudWxsKSA9PiAhIWd1YXJkICYmIGlzRnVuY3Rpb24oZ3VhcmQuY2FuQWN0aXZhdGUpLFxuICAgICAgKVxuICAgICAgLnRvQXJyYXkoKSBhcyBSO1xuICB9XG5cbiAgcHVibGljIGdldEd1YXJkSW5zdGFuY2UoXG4gICAgbWV0YXR5cGU6IEZ1bmN0aW9uIHwgQ2FuQWN0aXZhdGUsXG4gICAgY29udGV4dElkID0gU1RBVElDX0NPTlRFWFQsXG4gICAgaW5xdWlyZXJJZD86IHN0cmluZyxcbiAgKTogQ2FuQWN0aXZhdGUgfCBudWxsIHtcbiAgICBjb25zdCBpc09iamVjdCA9ICEhKG1ldGF0eXBlIGFzIENhbkFjdGl2YXRlKS5jYW5BY3RpdmF0ZTtcbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHJldHVybiBtZXRhdHlwZSBhcyBDYW5BY3RpdmF0ZTtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VXcmFwcGVyID0gdGhpcy5nZXRJbnN0YW5jZUJ5TWV0YXR5cGUoXG4gICAgICBtZXRhdHlwZSBhcyBUeXBlPHVua25vd24+LFxuICAgICk7XG4gICAgaWYgKCFpbnN0YW5jZVdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZUhvc3QgPSBpbnN0YW5jZVdyYXBwZXIuZ2V0SW5zdGFuY2VCeUNvbnRleHRJZChcbiAgICAgIHRoaXMuZ2V0Q29udGV4dElkKGNvbnRleHRJZCwgaW5zdGFuY2VXcmFwcGVyKSxcbiAgICAgIGlucXVpcmVySWQsXG4gICAgKTtcbiAgICByZXR1cm4gaW5zdGFuY2VIb3N0ICYmIGluc3RhbmNlSG9zdC5pbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbnN0YW5jZUJ5TWV0YXR5cGUoXG4gICAgbWV0YXR5cGU6IFR5cGU8dW5rbm93bj4sXG4gICk6IEluc3RhbmNlV3JhcHBlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLm1vZHVsZUNvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuY29udGFpbmVyLmdldE1vZHVsZXMoKTtcbiAgICBjb25zdCBtb2R1bGVSZWYgPSBjb2xsZWN0aW9uLmdldCh0aGlzLm1vZHVsZUNvbnRleHQpO1xuICAgIGlmICghbW9kdWxlUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluamVjdGFibGVzID0gbW9kdWxlUmVmLmluamVjdGFibGVzO1xuICAgIHJldHVybiBpbmplY3RhYmxlcy5nZXQobWV0YXR5cGUpO1xuICB9XG5cbiAgcHVibGljIGdldEdsb2JhbE1ldGFkYXRhPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuICAgIGNvbnRleHRJZCA9IFNUQVRJQ19DT05URVhULFxuICAgIGlucXVpcmVySWQ/OiBzdHJpbmcsXG4gICk6IFQge1xuICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgIHJldHVybiBbXSBhcyB1bmtub3duW10gYXMgVDtcbiAgICB9XG4gICAgY29uc3QgZ2xvYmFsR3VhcmRzID0gdGhpcy5jb25maWcuZ2V0R2xvYmFsR3VhcmRzKCkgYXMgVDtcbiAgICBpZiAoY29udGV4dElkID09PSBTVEFUSUNfQ09OVEVYVCAmJiAhaW5xdWlyZXJJZCkge1xuICAgICAgcmV0dXJuIGdsb2JhbEd1YXJkcztcbiAgICB9XG4gICAgY29uc3Qgc2NvcGVkR3VhcmRXcmFwcGVycyA9XG4gICAgICB0aGlzLmNvbmZpZy5nZXRHbG9iYWxSZXF1ZXN0R3VhcmRzKCkgYXMgSW5zdGFuY2VXcmFwcGVyW107XG4gICAgY29uc3Qgc2NvcGVkR3VhcmRzID0gaXRlcmF0ZShzY29wZWRHdWFyZFdyYXBwZXJzKVxuICAgICAgLm1hcCh3cmFwcGVyID0+XG4gICAgICAgIHdyYXBwZXIuZ2V0SW5zdGFuY2VCeUNvbnRleHRJZChcbiAgICAgICAgICB0aGlzLmdldENvbnRleHRJZChjb250ZXh0SWQsIHdyYXBwZXIpLFxuICAgICAgICAgIGlucXVpcmVySWQsXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuZmlsdGVyKGhvc3QgPT4gISFob3N0KVxuICAgICAgLm1hcChob3N0ID0+IGhvc3QuaW5zdGFuY2UpXG4gICAgICAudG9BcnJheSgpO1xuXG4gICAgcmV0dXJuIGdsb2JhbEd1YXJkcy5jb25jYXQoc2NvcGVkR3VhcmRzKSBhcyBUO1xuICB9XG59XG4iXX0=