UNPKG

alpha-command-bus

Version:
41 lines (40 loc) 1.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCommandHandlersFromObject = exports.CommandHandler = void 0; require("reflect-metadata"); const CommandHandlerDescriptor_1 = require("./CommandHandlerDescriptor"); const is = require("predicates"); const COMMAND_METADATA = Symbol('alpha-command-bus'); // eslint-disable-next-line @typescript-eslint/naming-convention function CommandHandler(filter) { return (target, methodName, descriptor) => { ensureMetadata(target).push({ predicate: CommandHandlerDescriptor_1.CommandHandlerDescriptor.filterToPredicate(filter), methodName }); }; } exports.CommandHandler = CommandHandler; function ensureMetadata(target) { if (Reflect.hasMetadata(COMMAND_METADATA, target)) { return Reflect.getMetadata(COMMAND_METADATA, target); } const metadata = []; Reflect.defineMetadata(COMMAND_METADATA, metadata, target); return metadata; } /** * Returns command handlers registered with decorator in given object */ function getCommandHandlersFromObject(object) { const references = Reflect.getMetadata(COMMAND_METADATA, object); if (!references || references.length === 0) { return []; } return references.map(entry => { const method = object[entry.methodName]; is.assert(Function, `Property "${entry.methodName}" has to be a method`)(method); return new CommandHandlerDescriptor_1.CommandHandlerDescriptor(entry.predicate, method.bind(object)); }); } exports.getCommandHandlersFromObject = getCommandHandlersFromObject;