nestjs-event-sourcing-lib
Version:
A comprehensive Event Sourcing and CQRS library for NestJS applications
75 lines • 2.62 kB
JavaScript
;
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