@foblex/ng-mediator
Version:
A mediator library for Angular facilitating a clean architecture with a better command-query separation.
31 lines • 4.07 kB
JavaScript
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=