gambit-decorators
Version:
Decorators used in gambit plugins
79 lines (78 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Module = exports.Controller = exports.Service = exports.Message = exports.Event = void 0;
const common_1 = require("@nestjs/common");
const microservices_1 = require("@nestjs/microservices");
const microservices_2 = require("@nestjs/microservices");
const common_2 = require("@nestjs/common");
const microservices_3 = require("@nestjs/microservices");
/**
* Decorator used to dynamically set the message queue pattern based on the class and method name
* @param target
* @param propertyKey
* @param descriptor
* @returns
*/
const Event = (target, propertyKey, descriptor) => {
let pattern = { provider: target.constructor.name, cmd: propertyKey };
return (0, microservices_1.EventPattern)(pattern)(target, propertyKey, descriptor);
};
exports.Event = Event;
/**
* Decorator used to dynamically set the message queue pattern based on the class and method name
* @returns
*/
const Message = (target, propertyKey, descriptor) => {
let pattern = { provider: target.constructor.name, cmd: propertyKey };
return (0, microservices_1.MessagePattern)(pattern)(target, propertyKey, descriptor);
};
exports.Message = Message;
class BaseLogger {
// TODO: Add logic to log externally
constructor() {
this.logger = new common_2.Logger(this.constructor.name);
}
}
class Service extends BaseLogger {
constructor() {
super();
this.logger = new common_2.Logger(this.constructor.name);
this.emitter = microservices_3.ClientProxyFactory.create({
transport: microservices_2.Transport.RMQ,
options: {
urls: ['amqp://admin:admin@localhost:5672'],
queue: 'action_queue',
queueOptions: {
durable: false
},
},
});
}
}
exports.Service = Service;
const Controller = (constructor) => {
return (0, common_1.Controller)(constructor.name)(constructor);
};
exports.Controller = Controller;
const Module = (params) => {
return function (constructor) {
constructor.prototype.name = constructor.name;
constructor.prototype.metadata = params.metadata;
constructor.prototype.functions = [];
for (const controller of (params.controllers || [])) {
let functionsArr = Object.getOwnPropertyNames(controller.prototype)
.filter(func => func !== 'constructor')
.map(func => ({
service: constructor.name,
cmd: func,
parameters: ''
}));
constructor.prototype.functions.push(...functionsArr);
}
return (0, common_1.Module)({
controllers: params.controllers,
providers: params.providers
})(constructor);
};
};
exports.Module = Module;