UNPKG

moleculer-decorators

Version:
135 lines (134 loc) 5.24 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const _ = __importStar(require("./util")); const blacklist = [ "created", "started", "stopped", "actions", "methods", "events", "broker", "logger", ]; const blacklist2 = ["metadata", "settings", "mixins", "name", "version"].concat(blacklist); const defaultServiceOptions = { constructOverride: true, skipHandler: false, }; function Method(target, key, descriptor) { (target.methods || (target.methods = {}))[key] = descriptor.value; } exports.Method = Method; function Event(options) { return function (target, key, descriptor) { (target.events || (target.events = {}))[key] = options ? Object.assign(Object.assign({}, options), { handler: descriptor.value }) : descriptor.value; }; } exports.Event = Event; function Action(options = {}) { return function (target, key, descriptor) { if (!options.skipHandler) { options.handler = descriptor.value; } else { delete options.skipHandler; } (target.actions || (target.actions = {}))[key] = options ? Object.assign({}, options) : options.skipHandler ? "" : descriptor.value; }; } exports.Action = Action; const mockServiceBroker = new Object({ Promise }); function Service(opts = {}) { const options = opts || {}; return function (constructor) { let base = { name: "", }; const _options = Object.assign({}, defaultServiceOptions, options); Object.defineProperty(base, "name", { value: options.name || constructor.name, writable: false, enumerable: true, }); if (options.name) { delete options.name; } Object.assign(base, _.omit(options, Object.keys(defaultServiceOptions))); const parentService = constructor.prototype; const vars = []; Object.getOwnPropertyNames(parentService).forEach(function (key) { if (key === "constructor") { if (_options.constructOverride) { const ServiceClass = new parentService.constructor(mockServiceBroker); Object.getOwnPropertyNames(ServiceClass).forEach(function (key) { if (blacklist.indexOf(key) === -1 && !_.isFunction(ServiceClass[key])) { base[key] = Object.getOwnPropertyDescriptor(ServiceClass, key).value; if (blacklist2.indexOf(key) === -1) { vars[key] = Object.getOwnPropertyDescriptor(ServiceClass, key).value; } } }); const bypass = Object.defineProperty; const obj = {}; bypass(obj, "created", { value: function created(broker) { for (let key in vars) { this[key] = vars[key]; } if (Object.getOwnPropertyDescriptor(parentService, "created") != null) { Object.getOwnPropertyDescriptor(parentService, "created").value.call(this, broker); } }, writable: true, enumerable: true, configurable: true, }); base["created"] = obj.created; } return; } const descriptor = Object.getOwnPropertyDescriptor(parentService, key); if (key === "created" && !_options.constructOverride) { base[key] = descriptor.value; } if (key === "started" || key === "stopped") { base[key] = descriptor.value; return; } if (key === "events" || key === "methods" || key === "actions") { base[key] ? Object.assign(base[key], descriptor.value) : (base[key] = descriptor.value); return; } if (key === "afterConnected" || key === "entityCreated" || key === "entityUpdated" || key === "entityRemoved") { base[key] = descriptor.value; return; } }); return class extends parentService.constructor { constructor(broker, schema) { super(broker, schema); this.parseServiceSchema(base); } }; }; } exports.Service = Service;