@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
JavaScript
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