@foblex/mediator
Version:
An Angular library that implements the mediator pattern, providing a centralized way to handle requests with optional validation and execution pipelines.
33 lines • 5 kB
JavaScript
import { Injectable } from '@angular/core';
import { Pipeline } from './pipeline';
import * as i0 from "@angular/core";
export 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 }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1tZWRpYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2YtbWVkaWF0b3Ivc3JjL2YtbWVkaWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFHM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFHdEMsTUFBTSxPQUFPLFNBQVM7SUFFcEIsWUFDVSxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBRTVCLENBQUM7SUFJTSxNQUFNLENBQUMsZ0JBQWdCLENBQzVCLElBQW9CLEVBQ3BCLE9BQTJFLEVBQzNFLFdBQW9CO1FBRXBCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBdUIsQ0FBQztRQUN0RixXQUFXO1lBQ1QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsT0FBcUMsQ0FBQztZQUM5RCxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFnRCxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sSUFBSSxDQUFZLE9BQVk7UUFDakMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRSxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxxREFBcUQ7SUFDOUMsT0FBTyxDQUFZLE9BQVk7UUFDcEMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVGLENBQUM7O0FBM0JhLG1CQUFTLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7dUdBUHJELFNBQVM7MkdBQVQsU0FBUzs0RkFBVCxTQUFTO2tCQURyQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElFeGVjdXRpb24gfSBmcm9tICcuL2ktZXhlY3V0aW9uJztcbmltcG9ydCB7IElWYWxpZGF0b3IgfSBmcm9tICcuL2ktdmFsaWRhdG9yJztcbmltcG9ydCB7IFBpcGVsaW5lIH0gZnJvbSAnLi9waXBlbGluZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGTWVkaWF0b3Ige1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGlwZWxpbmVzID0gbmV3IE1hcDxzdHJpbmcsIFBpcGVsaW5lPGFueSwgYW55Pj4oKTtcblxuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyUGlwZWxpbmU8VFJlcXVlc3QsIFRSZXNwb25zZT4oXG4gICAgdHlwZTogVHlwZTxUUmVxdWVzdD4sXG4gICAgaGFuZGxlcjogVHlwZTxJVmFsaWRhdG9yPFRSZXF1ZXN0Pj4gfCBUeXBlPElFeGVjdXRpb248VFJlcXVlc3QsIFRSZXNwb25zZT4+LFxuICAgIGlzVmFsaWRhdG9yOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBpcGVsaW5lID0gdGhpcy5waXBlbGluZXMuZ2V0KHR5cGUubmFtZSkgfHwgbmV3IFBpcGVsaW5lPFRSZXF1ZXN0LCBUUmVzcG9uc2U+KCk7XG4gICAgaXNWYWxpZGF0b3JcbiAgICAgID8gcGlwZWxpbmUuc2V0VmFsaWRhdG9yKGhhbmRsZXIgYXMgVHlwZTxJVmFsaWRhdG9yPFRSZXF1ZXN0Pj4pXG4gICAgICA6IHBpcGVsaW5lLnNldEV4ZWN1dGlvbihoYW5kbGVyIGFzIFR5cGU8SUV4ZWN1dGlvbjxUUmVxdWVzdCwgVFJlc3BvbnNlPj4pO1xuXG4gICAgdGhpcy5waXBlbGluZXMuc2V0KHR5cGUubmFtZSwgcGlwZWxpbmUpO1xuICB9XG5cbiAgcHVibGljIHNlbmQ8VFJlc3BvbnNlPihyZXF1ZXN0OiBhbnkpOiBUUmVzcG9uc2Uge1xuICAgIGNvbnN0IHBpcGVsaW5lID0gRk1lZGlhdG9yLnBpcGVsaW5lcy5nZXQocmVxdWVzdC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICBpZiAocGlwZWxpbmUpIHtcbiAgICAgIHJldHVybiBwaXBlbGluZS5oYW5kbGUocmVxdWVzdCwgdGhpcy5pbmplY3Rvcik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdIYW5kbGVyIG5vdCByZWdpc3RlcmVkIGZvciByZXF1ZXN0IHR5cGUuJyk7XG4gIH1cblxuICAvLyBydW4gcGlwZWxpbmUgd2l0aG91dCB2YWxpZGF0aW9uIGFuZCBlcnJvciBoYW5kbGluZ1xuICBwdWJsaWMgZXhlY3V0ZTxUUmVzcG9uc2U+KHJlcXVlc3Q6IGFueSk6IFRSZXNwb25zZSB7XG4gICAgcmV0dXJuIEZNZWRpYXRvci5waXBlbGluZXMuZ2V0KHJlcXVlc3QuY29uc3RydWN0b3IubmFtZSkhLmV4ZWN1dGUocmVxdWVzdCwgdGhpcy5pbmplY3Rvcik7XG4gIH1cbn1cbiJdfQ==