@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
63 lines • 10.5 kB
JavaScript
;
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=