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.

36 lines 5.35 kB
import { inject, Injectable, Injector } from '@angular/core'; import { Pipeline } from './pipeline'; import * as i0 from "@angular/core"; export class FMediator { constructor() { this._injector = inject(Injector); } static registerPipeline(type, handler, isValidator) { if (!type || !type.fToken) { throw new Error('Type must have a fToken static property.'); } const pipeline = this.pipelines.get(type.fToken) || new Pipeline(); isValidator ? pipeline.setValidator(handler) : pipeline.setExecution(handler); this.pipelines.set(type.fToken, pipeline); } send(request) { const pipeline = FMediator.pipelines.get(request.constructor.fToken); 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.fToken).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: [], 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 }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1tZWRpYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2YtbWVkaWF0b3Ivc3JjL2YtbWVkaWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFPLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBR3RDLE1BQU0sT0FBTyxTQUFTO0lBRHRCO1FBR21CLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7S0FpQy9DO0lBN0JRLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDNUIsSUFBUyxFQUNULE9BQTJFLEVBQzNFLFdBQW9CO1FBRXBCLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztTQUM3RDtRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBdUIsQ0FBQztRQUN4RixXQUFXO1lBQ1QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsT0FBcUMsQ0FBQztZQUM5RCxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFnRCxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sSUFBSSxDQUFZLE9BQVk7UUFDakMsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRSxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxxREFBcUQ7SUFDOUMsT0FBTyxDQUFZLE9BQVk7UUFDcEMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7O0FBOUJhLG1CQUFTLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7dUdBSnJELFNBQVM7MkdBQVQsU0FBUzs0RkFBVCxTQUFTO2tCQURyQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElFeGVjdXRpb24gfSBmcm9tICcuL2ktZXhlY3V0aW9uJztcbmltcG9ydCB7IElWYWxpZGF0b3IgfSBmcm9tICcuL2ktdmFsaWRhdG9yJztcbmltcG9ydCB7IFBpcGVsaW5lIH0gZnJvbSAnLi9waXBlbGluZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGTWVkaWF0b3Ige1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBwdWJsaWMgc3RhdGljIHBpcGVsaW5lcyA9IG5ldyBNYXA8c3RyaW5nLCBQaXBlbGluZTxhbnksIGFueT4+KCk7XG5cbiAgcHVibGljIHN0YXRpYyByZWdpc3RlclBpcGVsaW5lPFRSZXF1ZXN0LCBUUmVzcG9uc2U+KFxuICAgIHR5cGU6IGFueSxcbiAgICBoYW5kbGVyOiBUeXBlPElWYWxpZGF0b3I8VFJlcXVlc3Q+PiB8IFR5cGU8SUV4ZWN1dGlvbjxUUmVxdWVzdCwgVFJlc3BvbnNlPj4sXG4gICAgaXNWYWxpZGF0b3I6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0eXBlIHx8ICF0eXBlLmZUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeXBlIG11c3QgaGF2ZSBhIGZUb2tlbiBzdGF0aWMgcHJvcGVydHkuJyk7XG4gICAgfVxuICAgIGNvbnN0IHBpcGVsaW5lID0gdGhpcy5waXBlbGluZXMuZ2V0KHR5cGUuZlRva2VuKSB8fCBuZXcgUGlwZWxpbmU8VFJlcXVlc3QsIFRSZXNwb25zZT4oKTtcbiAgICBpc1ZhbGlkYXRvclxuICAgICAgPyBwaXBlbGluZS5zZXRWYWxpZGF0b3IoaGFuZGxlciBhcyBUeXBlPElWYWxpZGF0b3I8VFJlcXVlc3Q+PilcbiAgICAgIDogcGlwZWxpbmUuc2V0RXhlY3V0aW9uKGhhbmRsZXIgYXMgVHlwZTxJRXhlY3V0aW9uPFRSZXF1ZXN0LCBUUmVzcG9uc2U+Pik7XG5cbiAgICB0aGlzLnBpcGVsaW5lcy5zZXQodHlwZS5mVG9rZW4sIHBpcGVsaW5lKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kPFRSZXNwb25zZT4ocmVxdWVzdDogYW55KTogVFJlc3BvbnNlIHtcbiAgICBjb25zdCBwaXBlbGluZSA9IEZNZWRpYXRvci5waXBlbGluZXMuZ2V0KHJlcXVlc3QuY29uc3RydWN0b3IuZlRva2VuKTtcbiAgICBpZiAocGlwZWxpbmUpIHtcbiAgICAgIHJldHVybiBwaXBlbGluZS5oYW5kbGUocmVxdWVzdCwgdGhpcy5faW5qZWN0b3IpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignSGFuZGxlciBub3QgcmVnaXN0ZXJlZCBmb3IgcmVxdWVzdCB0eXBlLicpO1xuICB9XG5cbiAgLy8gcnVuIHBpcGVsaW5lIHdpdGhvdXQgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmdcbiAgcHVibGljIGV4ZWN1dGU8VFJlc3BvbnNlPihyZXF1ZXN0OiBhbnkpOiBUUmVzcG9uc2Uge1xuICAgIHJldHVybiBGTWVkaWF0b3IucGlwZWxpbmVzLmdldChyZXF1ZXN0LmNvbnN0cnVjdG9yLmZUb2tlbikhLmV4ZWN1dGUocmVxdWVzdCwgdGhpcy5faW5qZWN0b3IpO1xuICB9XG59XG4iXX0=