@foblex/mediator
Version:
An Angular library that implements the mediator pattern, providing a centralized way to handle requests with optional validation and execution pipelines.
108 lines (97 loc) • 4.47 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core')) :
typeof define === 'function' && define.amd ? define('@foblex/mediator', ['exports', '@angular/core'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.foblex = global.foblex || {}, global.foblex.mediator = {}), global.ng.core));
})(this, (function (exports, i0) { 'use strict';
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
var Pipeline = /** @class */ (function () {
function Pipeline() {
}
Pipeline.prototype.handle = function (request, injector) {
var isValid = true;
if (this.validator) {
isValid = injector.get(this.validator).handle(request);
}
if (!isValid) {
return;
}
return injector.get(this.execution).handle(request);
};
Pipeline.prototype.execute = function (request, injector) {
return injector.get(this.execution).handle(request);
};
Pipeline.prototype.setValidator = function (validator) {
this.validator = validator;
};
Pipeline.prototype.setExecution = function (execution) {
this.execution = execution;
};
return Pipeline;
}());
var FMediator = /** @class */ (function () {
function FMediator(injector) {
this.injector = injector;
}
FMediator.registerPipeline = function (type, handler, isValidator) {
var pipeline = this.pipelines.get(type.name) || new Pipeline();
isValidator
? pipeline.setValidator(handler)
: pipeline.setExecution(handler);
this.pipelines.set(type.name, pipeline);
};
FMediator.prototype.send = function (request) {
var 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
FMediator.prototype.execute = function (request) {
return FMediator.pipelines.get(request.constructor.name).execute(request, this.injector);
};
return FMediator;
}());
FMediator.pipelines = new Map();
FMediator.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FMediator, deps: [{ token: i0__namespace.Injector }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
FMediator.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FMediator });
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FMediator, decorators: [{
type: i0.Injectable
}], ctorParameters: function () { return [{ type: i0__namespace.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.
*/
exports.FExecutionRegister = FExecutionRegister;
exports.FMediator = FMediator;
exports.FValidatorRegister = FValidatorRegister;
exports.Pipeline = Pipeline;
Object.defineProperty(exports, '__esModule', { value: true });
}));
//# sourceMappingURL=foblex-mediator.umd.js.map