alpha-command-bus
Version:
Very simple command bus implementation
33 lines (32 loc) • 1.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CommandHandlerDescriptor = void 0;
const alpha_command_bus_command_factory_1 = require("alpha-command-bus-command-factory");
const matchesObject = require('lodash.matches');
class CommandHandlerDescriptor {
constructor(predicate, func) {
this.predicate = predicate;
this.func = func;
Object.freeze(this);
}
static fromFilter(filter, func) {
return new CommandHandlerDescriptor(CommandHandlerDescriptor.filterToPredicate(filter), func);
}
static filterToPredicate(filter) {
if (typeof filter === 'string') {
const commandName = filter;
return (c) => c.command === commandName;
}
if (alpha_command_bus_command_factory_1.ShapeCommand.isType(filter)) {
return (c) => c.command === filter.COMMAND_NAME;
}
if (filter instanceof Function) {
return filter;
}
if (typeof filter === 'object') {
return matchesObject(filter);
}
throw new Error('Command predicate has to be a function, a string, an object or class or ShapeCommand.Shape');
}
}
exports.CommandHandlerDescriptor = CommandHandlerDescriptor;