UNPKG

nestjs-event-sourcing-lib

Version:

A comprehensive Event Sourcing and CQRS library for NestJS applications

75 lines 2.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.COMMAND_METADATA = exports.COMMAND_HANDLER_METADATA = void 0; exports.CommandHandler = CommandHandler; exports.Command = Command; exports.getCommandHandlerMetadata = getCommandHandlerMetadata; exports.getCommandMetadata = getCommandMetadata; exports.getCommandHandlers = getCommandHandlers; const common_1 = require("@nestjs/common"); /** * Key for command handler metadata */ exports.COMMAND_HANDLER_METADATA = Symbol('COMMAND_HANDLER_METADATA'); /** * Key for command metadata */ exports.COMMAND_METADATA = Symbol('COMMAND_METADATA'); /** * Decorator to mark method as command handler * * @param commandType - command type (command class) * @param metadata - additional metadata * @returns method decorator */ function CommandHandler(commandType, metadata) { return function (target, propertyKey, descriptor) { const handlerMetadata = { commandType: commandType.name, aggregateType: metadata === null || metadata === void 0 ? void 0 : metadata.aggregateType, async: (metadata === null || metadata === void 0 ? void 0 : metadata.async) !== false, timeout: (metadata === null || metadata === void 0 ? void 0 : metadata.timeout) || 30000, }; (0, common_1.SetMetadata)(exports.COMMAND_HANDLER_METADATA, handlerMetadata)(target, propertyKey, descriptor); }; } /** * Decorator to mark class as command * * @param metadata - command metadata * @returns class decorator */ function Command(metadata) { return function (constructor) { (0, common_1.SetMetadata)(exports.COMMAND_METADATA, metadata || {})(constructor); return constructor; }; } /** * Function to get command handler metadata */ function getCommandHandlerMetadata(target, propertyKey) { return Reflect.getMetadata(exports.COMMAND_HANDLER_METADATA, target, propertyKey); } /** * Function to get command metadata */ function getCommandMetadata(target) { return Reflect.getMetadata(exports.COMMAND_METADATA, target); } /** * Function to get all command handlers in class */ function getCommandHandlers(target) { const prototype = target.prototype || target; const propertyNames = Object.getOwnPropertyNames(prototype); const handlers = []; for (const propertyName of propertyNames) { const metadata = getCommandHandlerMetadata(prototype, propertyName); if (metadata) { handlers.push({ propertyKey: propertyName, metadata }); } } return handlers; } //# sourceMappingURL=command.decorator.js.map