UNPKG

@tsclean/core

Version:

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

63 lines 10.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AccessResourceContextCreator = void 0; const iterare_1 = require("iterare"); const utils_1 = require("../utils"); const helpers_1 = require("../helpers"); const core_1 = require("../core"); class AccessResourceContextCreator extends helpers_1.ContextCreator { constructor(container, config) { super(); this.container = container; this.config = config; } create(instance, callback, module, contextId = core_1.STATIC_CONTEXT, inquirerId) { this.moduleContext = module; return this.createContext(instance, callback, helpers_1.RESOURCES_METADATA, contextId, inquirerId); } createConcreteContext(metadata, contextId = core_1.STATIC_CONTEXT, inquirerId) { if ((0, utils_1.isEmpty)(metadata)) return []; return (0, iterare_1.iterate)(metadata) .filter((resource) => resource && (resource.name || resource.accessResource)) .map(resource => this.getGuardInstance(resource, contextId, inquirerId)) .filter((resource) => resource && (0, utils_1.isFunction)(resource.accessResource)) .toArray(); } getGuardInstance(metaType, contextId = core_1.STATIC_CONTEXT, inquirerId) { const isObject = metaType.accessResource; if (isObject) return metaType; const instanceWrapper = this.getInstanceByMetaType(metaType); 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; const injectables = moduleRef.injectables; return injectables.get(metaType); } getGlobalMetadata(contextId = core_1.STATIC_CONTEXT, inquirerId) { if (!this.config) return []; const globalAccessResources = this.config.getGlobalAccessResources(); if (contextId === core_1.STATIC_CONTEXT && !inquirerId) return globalAccessResources; const scopedResourceWrappers = this.config.getGlobalRequestAccessResource(); const scopedResources = (0, iterare_1.iterate)(scopedResourceWrappers) .map(wrapper => wrapper.getInstanceByContextId(contextId, inquirerId)) .filter(host => !!host) .map(host => host.instance) .toArray(); return globalAccessResources.concat(scopedResources); } } exports.AccessResourceContextCreator = AccessResourceContextCreator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLXJlc291cmNlLWNvbnRleHQtY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY2Nlc3MvYWNjZXNzLXJlc291cmNlLWNvbnRleHQtY3JlYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBZ0M7QUFFaEMsb0NBQTZDO0FBQzdDLHdDQUE4RDtBQUM5RCxrQ0FBc0U7QUFJdEUsTUFBYSw0QkFBNkIsU0FBUSx3QkFBYztJQUc1RCxZQUNxQixTQUF1QixFQUN2QixNQUEwQjtRQUUzQyxLQUFLLEVBQUUsQ0FBQztRQUhTLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7SUFHL0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxRQUF3QixFQUFFLFFBQXlDLEVBQUUsTUFBYyxFQUNuRixTQUFTLEdBQUcscUJBQWMsRUFBRSxVQUFtQjtRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSw0QkFBa0IsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVNLHFCQUFxQixDQUN4QixRQUFXLEVBQUUsU0FBUyxHQUFHLHFCQUFjLEVBQUUsVUFBbUI7UUFFNUQsSUFBSSxJQUFBLGVBQU8sRUFBQyxRQUFRLENBQUM7WUFBRSxPQUFPLEVBQU8sQ0FBQztRQUV0QyxPQUFPLElBQUEsaUJBQU8sRUFBQyxRQUFRLENBQUM7YUFDbkIsTUFBTSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNqRixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBb0IsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDbkYsTUFBTSxDQUFDLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLElBQUEsa0JBQVUsRUFBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDOUYsT0FBTyxFQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFFBQTRDLEVBQUUsU0FBUyxHQUFHLHFCQUFjLEVBQ3hFLFVBQW1CO1FBRXZDLE1BQU0sUUFBUSxHQUFJLFFBQW9DLENBQUMsY0FBYyxDQUFDO1FBQ3RFLElBQUksUUFBUTtZQUFFLE9BQU8sUUFBbUMsQ0FBQztRQUV6RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBeUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFbEMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRixPQUFPLFlBQVksSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ2pELENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxRQUF1QjtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBRXZCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7UUFDMUMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxpQkFBaUIsQ0FDcEIsU0FBUyxHQUFHLHFCQUFjLEVBQUUsVUFBbUI7UUFFL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFPLENBQUM7UUFFakMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixFQUFPLENBQUM7UUFDMUUsSUFBSSxTQUFTLEtBQUsscUJBQWMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLHFCQUFxQixDQUFDO1FBRTlFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsRUFBdUIsQ0FBQztRQUNqRyxNQUFNLGVBQWUsR0FBRyxJQUFBLGlCQUFPLEVBQUMsc0JBQXNCLENBQUM7YUFDbEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNyRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDMUIsT0FBTyxFQUFFLENBQUM7UUFFZixPQUFPLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQU0sQ0FBQztJQUM5RCxDQUFDO0NBQ0o7QUFwRUQsb0VBb0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpdGVyYXRlfSBmcm9tICdpdGVyYXJlJztcbmltcG9ydCB7QXBwbGljYXRpb25Db25maWd9IGZyb20gJy4uL2FwcCc7XG5pbXBvcnQge2lzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtDb250ZXh0Q3JlYXRvciwgUkVTT1VSQ0VTX01FVEFEQVRBfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7SW5zdGFuY2VXcmFwcGVyLCBDb250YWluZXJJb0MsIFNUQVRJQ19DT05URVhUfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7QWNjZXNzUmVzb3VyY2VJbnRlcmZhY2UsIFR5cGV9IGZyb20gXCIuLi9jb250cmFjdHNcIjtcbmltcG9ydCB7Q29udHJvbGxlclR5cGV9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5leHBvcnQgY2xhc3MgQWNjZXNzUmVzb3VyY2VDb250ZXh0Q3JlYXRvciBleHRlbmRzIENvbnRleHRDcmVhdG9yIHtcbiAgICBwcml2YXRlIG1vZHVsZUNvbnRleHQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lcjogQ29udGFpbmVySW9DLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZz86IEFwcGxpY2F0aW9uQ29uZmlnLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGUoaW5zdGFuY2U6IENvbnRyb2xsZXJUeXBlLCBjYWxsYmFjazogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biwgbW9kdWxlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICBjb250ZXh0SWQgPSBTVEFUSUNfQ09OVEVYVCwgaW5xdWlyZXJJZD86IHN0cmluZyk6IEFjY2Vzc1Jlc291cmNlSW50ZXJmYWNlW10ge1xuICAgICAgICB0aGlzLm1vZHVsZUNvbnRleHQgPSBtb2R1bGU7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbnRleHQoaW5zdGFuY2UsIGNhbGxiYWNrLCBSRVNPVVJDRVNfTUVUQURBVEEsIGNvbnRleHRJZCwgaW5xdWlyZXJJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUNvbmNyZXRlQ29udGV4dDxUIGV4dGVuZHMgdW5rbm93bltdLCBSIGV4dGVuZHMgdW5rbm93bltdPihcbiAgICAgICAgbWV0YWRhdGE6IFQsIGNvbnRleHRJZCA9IFNUQVRJQ19DT05URVhULCBpbnF1aXJlcklkPzogc3RyaW5nKTogUiB7XG5cbiAgICAgICAgaWYgKGlzRW1wdHkobWV0YWRhdGEpKSByZXR1cm4gW10gYXMgUjtcblxuICAgICAgICByZXR1cm4gaXRlcmF0ZShtZXRhZGF0YSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc291cmNlOiBhbnkpID0+IHJlc291cmNlICYmIChyZXNvdXJjZS5uYW1lIHx8IHJlc291cmNlLmFjY2Vzc1Jlc291cmNlKSlcbiAgICAgICAgICAgIC5tYXAocmVzb3VyY2UgPT4gdGhpcy5nZXRHdWFyZEluc3RhbmNlKHJlc291cmNlIGFzIEZ1bmN0aW9uLCBjb250ZXh0SWQsIGlucXVpcmVySWQpKVxuICAgICAgICAgICAgLmZpbHRlcigocmVzb3VyY2U6IEFjY2Vzc1Jlc291cmNlSW50ZXJmYWNlKSA9PiByZXNvdXJjZSAmJiBpc0Z1bmN0aW9uKHJlc291cmNlLmFjY2Vzc1Jlc291cmNlKSlcbiAgICAgICAgICAgIC50b0FycmF5KCkgYXMgUjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0R3VhcmRJbnN0YW5jZShtZXRhVHlwZTogRnVuY3Rpb24gfCBBY2Nlc3NSZXNvdXJjZUludGVyZmFjZSwgY29udGV4dElkID0gU1RBVElDX0NPTlRFWFQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5xdWlyZXJJZD86IHN0cmluZyk6IEFjY2Vzc1Jlc291cmNlSW50ZXJmYWNlIHwgbnVsbCB7XG5cbiAgICAgICAgY29uc3QgaXNPYmplY3QgPSAobWV0YVR5cGUgYXMgQWNjZXNzUmVzb3VyY2VJbnRlcmZhY2UpLmFjY2Vzc1Jlc291cmNlO1xuICAgICAgICBpZiAoaXNPYmplY3QpIHJldHVybiBtZXRhVHlwZSBhcyBBY2Nlc3NSZXNvdXJjZUludGVyZmFjZTtcblxuICAgICAgICBjb25zdCBpbnN0YW5jZVdyYXBwZXIgPSB0aGlzLmdldEluc3RhbmNlQnlNZXRhVHlwZShtZXRhVHlwZSBhcyBUeXBlPHVua25vd24+KTtcbiAgICAgICAgaWYgKCFpbnN0YW5jZVdyYXBwZXIpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGluc3RhbmNlSG9zdCA9IGluc3RhbmNlV3JhcHBlci5nZXRJbnN0YW5jZUJ5Q29udGV4dElkKGNvbnRleHRJZCwgaW5xdWlyZXJJZCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZUhvc3QgJiYgaW5zdGFuY2VIb3N0Lmluc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJbnN0YW5jZUJ5TWV0YVR5cGUobWV0YVR5cGU6IFR5cGU8dW5rbm93bj4pOiBJbnN0YW5jZVdyYXBwZXIgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMubW9kdWxlQ29udGV4dCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5jb250YWluZXIuZ2V0TW9kdWxlcygpO1xuICAgICAgICBjb25zdCBtb2R1bGVSZWYgPSBjb2xsZWN0aW9uLmdldCh0aGlzLm1vZHVsZUNvbnRleHQpO1xuICAgICAgICBpZiAoIW1vZHVsZVJlZikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGluamVjdGFibGVzID0gbW9kdWxlUmVmLmluamVjdGFibGVzO1xuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZXMuZ2V0KG1ldGFUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0R2xvYmFsTWV0YWRhdGE8VCBleHRlbmRzIHVua25vd25bXT4oXG4gICAgICAgIGNvbnRleHRJZCA9IFNUQVRJQ19DT05URVhULCBpbnF1aXJlcklkPzogc3RyaW5nKTogVCB7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZykgcmV0dXJuIFtdIGFzIFQ7XG5cbiAgICAgICAgY29uc3QgZ2xvYmFsQWNjZXNzUmVzb3VyY2VzID0gdGhpcy5jb25maWcuZ2V0R2xvYmFsQWNjZXNzUmVzb3VyY2VzKCkgYXMgVDtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PT0gU1RBVElDX0NPTlRFWFQgJiYgIWlucXVpcmVySWQpIHJldHVybiBnbG9iYWxBY2Nlc3NSZXNvdXJjZXM7XG5cbiAgICAgICAgY29uc3Qgc2NvcGVkUmVzb3VyY2VXcmFwcGVycyA9IHRoaXMuY29uZmlnLmdldEdsb2JhbFJlcXVlc3RBY2Nlc3NSZXNvdXJjZSgpIGFzIEluc3RhbmNlV3JhcHBlcltdO1xuICAgICAgICBjb25zdCBzY29wZWRSZXNvdXJjZXMgPSBpdGVyYXRlKHNjb3BlZFJlc291cmNlV3JhcHBlcnMpXG4gICAgICAgICAgICAubWFwKHdyYXBwZXIgPT4gd3JhcHBlci5nZXRJbnN0YW5jZUJ5Q29udGV4dElkKGNvbnRleHRJZCwgaW5xdWlyZXJJZCkpXG4gICAgICAgICAgICAuZmlsdGVyKGhvc3QgPT4gISFob3N0KVxuICAgICAgICAgICAgLm1hcChob3N0ID0+IGhvc3QuaW5zdGFuY2UpXG4gICAgICAgICAgICAudG9BcnJheSgpO1xuXG4gICAgICAgIHJldHVybiBnbG9iYWxBY2Nlc3NSZXNvdXJjZXMuY29uY2F0KHNjb3BlZFJlc291cmNlcykgYXMgVDtcbiAgICB9XG59XG4iXX0=