UNPKG

@ui-tool/core

Version:
54 lines 10.1 kB
import { of, ReplaySubject } from 'rxjs'; import { InjectFlags } from '@angular/core'; import { REQUIREMENT_HANDLER, REQUIREMENT_SENTINEL_EXCEPTION_PROCESSOR } from '../../../constants/injectors/injectors'; import { catchError, map } from 'rxjs/operators'; import { InternalRequirementSentinelException } from './interfaces/internal-requirement-sentinel.exception'; import { RequirementSentinelExceptionCodes } from './constants/requirement-sentinel-exception-codes'; import { ExternalRequirementSentinelException } from './interfaces/external-requirement-sentinel.exception'; export class RequirementSentinelService { //#endregion //#region Constructor constructor(injector) { this._requirementHandlers = injector .get(REQUIREMENT_HANDLER, null, InjectFlags.Optional); this._exceptionProcessor = injector.get(REQUIREMENT_SENTINEL_EXCEPTION_PROCESSOR, null, InjectFlags.Optional); this._doValidationEvent = new ReplaySubject(1); } //#endregion //#region Methods shouldRequirementMetAsync(name, context) { // No requirement is found. if (!this._requirementHandlers || !this._requirementHandlers.length) { return this.__processExceptionAsync(new InternalRequirementSentinelException(name, RequirementSentinelExceptionCodes.NO_REQUIREMENT_HANDLER_AT_ALL)); } // Find the requirement which has the exact name with the passed one. const requirementHandler = this._requirementHandlers.find(item => item.name === name); if (!requirementHandler) { return this.__processExceptionAsync(new InternalRequirementSentinelException(name, RequirementSentinelExceptionCodes.REQUIREMENT_NOT_FOUND_FOR_SPECIFIC_NAME, { name })); } return requirementHandler.shouldRequirementMetAsync(context) .pipe(catchError(exception => { return this.__processExceptionAsync(new ExternalRequirementSentinelException(name, RequirementSentinelExceptionCodes.FAILED_WHILE_HANDLING_EXTERNAL_BUSINESS, { exception })); })); } doValidation() { this._doValidationEvent.next(); } hookValidationEventAsync() { return this._doValidationEvent.asObservable(); } //#endregion //#region Internal methods __processExceptionAsync(exceptionInstance) { if (!this._exceptionProcessor) { return of(false); } return this._exceptionProcessor.processExceptionAsync(exceptionInstance) .pipe(map(() => false)); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZW1lbnQtc2VudGluZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbW9kdWxlcy9zZW50aW5lbC9yZXF1aXJlbWVudC1zZW50aW5lbC9yZXF1aXJlbWVudC1zZW50aW5lbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYSxFQUFFLEVBQUUsYUFBYSxFQUFVLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBQyxXQUFXLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFDLG1CQUFtQixFQUFFLHdDQUF3QyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFHckgsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsb0NBQW9DLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUMxRyxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUNuRyxPQUFPLEVBQUMsb0NBQW9DLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUUxRyxNQUFNLE9BQU8sMEJBQTBCO0lBVXJDLFlBQVk7SUFFWixxQkFBcUI7SUFFckIsWUFBbUIsUUFBa0I7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVE7YUFDakMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFxQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxFQUFFLElBQUksRUFDbEYsV0FBVyxDQUFDLFFBQVEsQ0FBc0QsQ0FBQztRQUMvRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFlBQVk7SUFFWixpQkFBaUI7SUFFVix5QkFBeUIsQ0FBVyxJQUFZLEVBQUUsT0FBZ0I7UUFFdkUsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFO1lBQ25FLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUNqQyxJQUFJLG9DQUFvQyxDQUFDLElBQUksRUFBRSxpQ0FBaUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7U0FDcEg7UUFDRCxzRUFBc0U7UUFDdEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQ2pDLElBQUksb0NBQW9DLENBQUMsSUFBSSxFQUFFLGlDQUFpQyxDQUFDLHVDQUF1QyxFQUFFO2dCQUN4SCxJQUFJO2FBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDUDtRQUVELE9BQU8sa0JBQWtCLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDO2FBQ3pELElBQUksQ0FDSCxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQ2pDLElBQUksb0NBQW9DLENBQUMsSUFBSSxFQUFFLGlDQUFpQyxDQUFDLHVDQUF1QyxFQUFFO2dCQUN4SCxTQUFTO2FBQ1YsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELFlBQVk7SUFFWiwwQkFBMEI7SUFFbEIsdUJBQXVCLENBQUksaUJBQW1EO1FBQ3BGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEI7UUFFRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQzthQUNyRSxJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUNqQixDQUFDO0lBQ04sQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJTWVldFJlcXVpcmVtZW50U2VydmljZX0gZnJvbSAnLi9yZXF1aXJlbWVudC1zZW50aW5lbC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7SW5qZWN0RmxhZ3MsIEluamVjdG9yfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SVJlcXVpcmVtZW50SGFuZGxlcn0gZnJvbSAnLi9yZXF1aXJlbWVudC1oYW5kbGVyLmludGVyZmFjZSc7XG5pbXBvcnQge1JFUVVJUkVNRU5UX0hBTkRMRVIsIFJFUVVJUkVNRU5UX1NFTlRJTkVMX0VYQ0VQVElPTl9QUk9DRVNTT1J9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9pbmplY3RvcnMvaW5qZWN0b3JzJztcbmltcG9ydCB7SVJlcXVpcmVtZW50U2VudGluZWxFeGNlcHRpb259IGZyb20gJy4vaW50ZXJmYWNlcy9yZXF1aXJlbWVudC1zZW50aW5lbC1leGNlcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7SVJlcXVpcmVtZW50U2VudGluZWxFeGNlcHRpb25Qcm9jZXNzb3J9IGZyb20gJy4vcmVxdWlyZW1lbnQtc2VudGluZWwtZXhjZXB0aW9uLXByb2Nlc3Nvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW50ZXJuYWxSZXF1aXJlbWVudFNlbnRpbmVsRXhjZXB0aW9ufSBmcm9tICcuL2ludGVyZmFjZXMvaW50ZXJuYWwtcmVxdWlyZW1lbnQtc2VudGluZWwuZXhjZXB0aW9uJztcbmltcG9ydCB7UmVxdWlyZW1lbnRTZW50aW5lbEV4Y2VwdGlvbkNvZGVzfSBmcm9tICcuL2NvbnN0YW50cy9yZXF1aXJlbWVudC1zZW50aW5lbC1leGNlcHRpb24tY29kZXMnO1xuaW1wb3J0IHtFeHRlcm5hbFJlcXVpcmVtZW50U2VudGluZWxFeGNlcHRpb259IGZyb20gJy4vaW50ZXJmYWNlcy9leHRlcm5hbC1yZXF1aXJlbWVudC1zZW50aW5lbC5leGNlcHRpb24nO1xuXG5leHBvcnQgY2xhc3MgUmVxdWlyZW1lbnRTZW50aW5lbFNlcnZpY2UgaW1wbGVtZW50cyBJTWVldFJlcXVpcmVtZW50U2VydmljZSB7XG5cbiAgLy8jcmVnaW9uIFByb3BlcnRpZXNcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3JlcXVpcmVtZW50SGFuZGxlcnM6IElSZXF1aXJlbWVudEhhbmRsZXJbXTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2V4Y2VwdGlvblByb2Nlc3Nvcj86IElSZXF1aXJlbWVudFNlbnRpbmVsRXhjZXB0aW9uUHJvY2Vzc29yO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfZG9WYWxpZGF0aW9uRXZlbnQ6IFN1YmplY3Q8dm9pZD47XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIENvbnN0cnVjdG9yXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHRoaXMuX3JlcXVpcmVtZW50SGFuZGxlcnMgPSBpbmplY3RvclxuICAgICAgLmdldChSRVFVSVJFTUVOVF9IQU5ETEVSLCBudWxsLCBJbmplY3RGbGFncy5PcHRpb25hbCkgYXMgdW5rbm93biBhcyBJUmVxdWlyZW1lbnRIYW5kbGVyW107XG4gICAgdGhpcy5fZXhjZXB0aW9uUHJvY2Vzc29yID0gaW5qZWN0b3IuZ2V0KFJFUVVJUkVNRU5UX1NFTlRJTkVMX0VYQ0VQVElPTl9QUk9DRVNTT1IsIG51bGxcbiAgICAgICwgSW5qZWN0RmxhZ3MuT3B0aW9uYWwpIGFzIHVua25vd24gYXMgSVJlcXVpcmVtZW50U2VudGluZWxFeGNlcHRpb25Qcm9jZXNzb3I7XG4gICAgdGhpcy5fZG9WYWxpZGF0aW9uRXZlbnQgPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBNZXRob2RzXG5cbiAgcHVibGljIHNob3VsZFJlcXVpcmVtZW50TWV0QXN5bmM8VENvbnRleHQ+KG5hbWU6IHN0cmluZywgY29udGV4dD86IG9iamVjdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgLy8gTm8gcmVxdWlyZW1lbnQgaXMgZm91bmQuXG4gICAgaWYgKCF0aGlzLl9yZXF1aXJlbWVudEhhbmRsZXJzIHx8ICF0aGlzLl9yZXF1aXJlbWVudEhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX19wcm9jZXNzRXhjZXB0aW9uQXN5bmMoXG4gICAgICAgIG5ldyBJbnRlcm5hbFJlcXVpcmVtZW50U2VudGluZWxFeGNlcHRpb24obmFtZSwgUmVxdWlyZW1lbnRTZW50aW5lbEV4Y2VwdGlvbkNvZGVzLk5PX1JFUVVJUkVNRU5UX0hBTkRMRVJfQVRfQUxMKSk7XG4gICAgfVxuICAgIC8vIEZpbmQgdGhlIHJlcXVpcmVtZW50IHdoaWNoIGhhcyB0aGUgZXhhY3QgbmFtZSAgd2l0aCB0aGUgcGFzc2VkIG9uZS5cbiAgICBjb25zdCByZXF1aXJlbWVudEhhbmRsZXIgPSB0aGlzLl9yZXF1aXJlbWVudEhhbmRsZXJzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IG5hbWUpO1xuICAgIGlmICghcmVxdWlyZW1lbnRIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fX3Byb2Nlc3NFeGNlcHRpb25Bc3luYyhcbiAgICAgICAgbmV3IEludGVybmFsUmVxdWlyZW1lbnRTZW50aW5lbEV4Y2VwdGlvbihuYW1lLCBSZXF1aXJlbWVudFNlbnRpbmVsRXhjZXB0aW9uQ29kZXMuUkVRVUlSRU1FTlRfTk9UX0ZPVU5EX0ZPUl9TUEVDSUZJQ19OQU1FLCB7XG4gICAgICAgICAgbmFtZVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVpcmVtZW50SGFuZGxlci5zaG91bGRSZXF1aXJlbWVudE1ldEFzeW5jKGNvbnRleHQpXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihleGNlcHRpb24gPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9fcHJvY2Vzc0V4Y2VwdGlvbkFzeW5jKFxuICAgICAgICAgICAgbmV3IEV4dGVybmFsUmVxdWlyZW1lbnRTZW50aW5lbEV4Y2VwdGlvbihuYW1lLCBSZXF1aXJlbWVudFNlbnRpbmVsRXhjZXB0aW9uQ29kZXMuRkFJTEVEX1dISUxFX0hBTkRMSU5HX0VYVEVSTkFMX0JVU0lORVNTLCB7XG4gICAgICAgICAgICAgIGV4Y2VwdGlvblxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBkb1ZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZG9WYWxpZGF0aW9uRXZlbnQubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIGhvb2tWYWxpZGF0aW9uRXZlbnRBc3luYygpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZG9WYWxpZGF0aW9uRXZlbnQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSW50ZXJuYWwgbWV0aG9kc1xuXG4gIHByaXZhdGUgX19wcm9jZXNzRXhjZXB0aW9uQXN5bmM8VD4oZXhjZXB0aW9uSW5zdGFuY2U6IElSZXF1aXJlbWVudFNlbnRpbmVsRXhjZXB0aW9uPFQ+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLl9leGNlcHRpb25Qcm9jZXNzb3IpIHtcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2V4Y2VwdGlvblByb2Nlc3Nvci5wcm9jZXNzRXhjZXB0aW9uQXN5bmMoZXhjZXB0aW9uSW5zdGFuY2UpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpID0+IGZhbHNlKVxuICAgICAgKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19