UNPKG

@foblex/ng-mediator

Version:

A mediator library for Angular facilitating a clean architecture with a better command-query separation.

31 lines 4.07 kB
import { Injectable, Inject, InjectionToken } from '@angular/core'; import { throwError } from 'rxjs'; import * as i0 from "@angular/core"; export const F_FEATURE_TOKEN = new InjectionToken('F_FEATURE_TOKEN'); export class FMediator { constructor(featureProviders) { this.features = new Map(); for (const feature of featureProviders) { this.features.set(feature.requestType, feature); } } send(requestType, request) { const feature = this.features.get(requestType.name); if (!feature) { return throwError(() => Error('Pipeline not registered for request type.')); } return feature.execute(request); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: FMediator, deps: [{ token: F_FEATURE_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: FMediator, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: FMediator, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [F_FEATURE_TOKEN] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1tZWRpYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1lZGlhdG9yL3NyYy9saWIvbWVkaWF0b3IvZi1tZWRpYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFJOUMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFLckUsTUFBTSxPQUFPLFNBQVM7SUFJcEIsWUFBcUMsZ0JBQXNDO1FBRm5FLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUd2RCxLQUFLLE1BQU0sT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVNLElBQUksQ0FBa0QsV0FBMkIsRUFBRSxPQUFpQjtRQUN6RyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OEdBaEJVLFNBQVMsa0JBSUEsZUFBZTtrSEFKeEIsU0FBUyxjQUZSLE1BQU07OzJGQUVQLFNBQVM7a0JBSHJCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFLYyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIEluamVjdGlvblRva2VuLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQaXBlbGluZSB9IGZyb20gJy4vcGlwZWxpbmUnO1xuaW1wb3J0IHsgSVJlcXVlc3QgfSBmcm9tICcuLi9jcXJzJztcblxuZXhwb3J0IGNvbnN0IEZfRkVBVFVSRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbignRl9GRUFUVVJFX1RPS0VOJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBGTWVkaWF0b3Ige1xuXG4gIHByaXZhdGUgZmVhdHVyZXMgPSBuZXcgTWFwPHN0cmluZywgUGlwZWxpbmU8YW55LCBhbnk+PigpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRl9GRUFUVVJFX1RPS0VOKSBmZWF0dXJlUHJvdmlkZXJzOiBQaXBlbGluZTxhbnksIGFueT5bXSkge1xuICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlUHJvdmlkZXJzKSB7XG4gICAgICB0aGlzLmZlYXR1cmVzLnNldChmZWF0dXJlLnJlcXVlc3RUeXBlLCBmZWF0dXJlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VuZDxUUmVxdWVzdCBleHRlbmRzIElSZXF1ZXN0PFRSZXNwb25zZT4sIFRSZXNwb25zZT4ocmVxdWVzdFR5cGU6IFR5cGU8VFJlcXVlc3Q+LCByZXF1ZXN0OiBUUmVxdWVzdCk6IE9ic2VydmFibGU8VFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZmVhdHVyZXMuZ2V0KHJlcXVlc3RUeXBlLm5hbWUpO1xuICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gRXJyb3IoJ1BpcGVsaW5lIG5vdCByZWdpc3RlcmVkIGZvciByZXF1ZXN0IHR5cGUuJykpO1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZS5leGVjdXRlKHJlcXVlc3QpO1xuICB9XG59XG4iXX0=