UNPKG

@foblex/mediator

Version:

An Angular library that implements the mediator pattern, providing a centralized way to handle requests with optional validation and execution pipelines.

74 lines (67 loc) 2.53 kB
import * as i0 from '@angular/core'; import { Injectable } from '@angular/core'; class Pipeline { handle(request, injector) { let isValid = true; if (this.validator) { isValid = injector.get(this.validator).handle(request); } if (!isValid) { return; } return injector.get(this.execution).handle(request); } execute(request, injector) { return injector.get(this.execution).handle(request); } setValidator(validator) { this.validator = validator; } setExecution(execution) { this.execution = execution; } } class FMediator { constructor(injector) { this.injector = injector; } static registerPipeline(type, handler, isValidator) { const pipeline = this.pipelines.get(type.name) || new Pipeline(); isValidator ? pipeline.setValidator(handler) : pipeline.setExecution(handler); this.pipelines.set(type.name, pipeline); } send(request) { const pipeline = FMediator.pipelines.get(request.constructor.name); if (pipeline) { return pipeline.handle(request, this.injector); } throw new Error('Handler not registered for request type.'); } // run pipeline without validation and error handling execute(request) { return FMediator.pipelines.get(request.constructor.name).execute(request, this.injector); } } FMediator.pipelines = new Map(); FMediator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FMediator, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); FMediator.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FMediator }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FMediator, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i0.Injector }]; } }); function FExecutionRegister(requestType) { return function (constructor) { FMediator.registerPipeline(requestType, constructor, false); }; } function FValidatorRegister(requestType) { return function (constructor) { FMediator.registerPipeline(requestType, constructor, true); }; } /** * Generated bundle index. Do not edit. */ export { FExecutionRegister, FMediator, FValidatorRegister, Pipeline }; //# sourceMappingURL=foblex-mediator.js.map