UNPKG

@cmmv/core

Version:

CMMV core module for contract and application management

140 lines (139 loc) 5.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GenericRegistry = void 0; const META_OPTIONS = Symbol('controller_options'); class GenericRegistry { static registerController(target, options) { if (!this.controllers.has(target)) { this.controllers.set(target, { handlers: [], properties: {}, metadata: {}, options, }); } else { const existingController = this.controllers.get(target); this.controllers.set(target, { ...existingController, options }); } } static controllerMetadata(target, metadata) { let controller = this.controllers.get(target.constructor); if (!controller) { const options = Reflect.getMetadata(META_OPTIONS, target.constructor) || {}; this.registerController(target.constructor, options); controller = this.controllers.get(target.constructor); } if (controller) { controller.metadata = { ...controller.metadata, ...metadata }; this.controllers.set(target.constructor, controller); } } static registerHandler(target, handlerName) { let controller = this.controllers.get(target.constructor); if (!controller) { const options = Reflect.getMetadata(META_OPTIONS, target.constructor) || {}; this.registerController(target.constructor, options); controller = this.controllers.get(target.constructor); } if (controller) { const handlerExists = controller.handlers.some((msg) => msg.handlerName === handlerName); if (!handlerExists) { controller.handlers.push({ handlerName, params: [], metadata: {}, }); } } } static registerProperty(target, propertyName, options, overrideExisting = true) { let controller = this.controllers.get(target.constructor); if (!controller) { const options = Reflect.getMetadata(META_OPTIONS, target.constructor) || {}; this.registerController(target.constructor, options); controller = this.controllers.get(target.constructor); } if (controller) { if (!controller.properties[propertyName] || overrideExisting) { controller.properties[propertyName] = { ...options }; } else { controller.properties[propertyName] = { ...controller.properties[propertyName], ...options, }; } } } static registerParam(target, handlerName, paramType, index) { let controller = this.controllers.get(target.constructor); if (!controller) { const options = Reflect.getMetadata(META_OPTIONS, target.constructor) || {}; this.registerController(target.constructor, options); controller = this.controllers.get(target.constructor); } if (controller) { let handler = controller.handlers.find((msg) => msg.handlerName === handlerName); if (!handler) { handler = { handlerName, params: [], metadata: {} }; controller.handlers.push(handler); } handler.params.push({ paramType, index }); } } static addHandlerMetadata(target, handlerName, metadata) { let controller = this.controllers.get(target.constructor); if (!controller) { const options = Reflect.getMetadata(META_OPTIONS, target.constructor) || {}; this.registerController(target.constructor, options); controller = this.controllers.get(target.constructor); } if (controller) { let handler = controller.handlers.find((msg) => msg.handlerName === handlerName); if (!handler) { handler = { handlerName, params: [], metadata: {} }; controller.handlers.push(handler); } handler.metadata = { ...handler.metadata, ...metadata }; } } static addHandlerMetadataArray(target, handlerName, key, value) { let controller = this.controllers.get(target.constructor); if (!controller) { const options = Reflect.getMetadata(META_OPTIONS, target.constructor) || {}; this.registerController(target.constructor, options); controller = this.controllers.get(target.constructor); } if (controller) { let handler = controller.handlers.find((msg) => msg.handlerName === handlerName); if (!handler) { handler = { handlerName, params: [], metadata: {} }; controller.handlers.push(handler); } if (!handler.metadata[key]) handler.metadata[key] = []; if (Array.isArray(handler.metadata[key])) handler.metadata[key].push(value); } } static getControllers() { return Array.from(this.controllers.entries()); } static getHandlers(target) { const controller = this.controllers.get(target.constructor); return controller ? controller.handlers : []; } static getParams(target, handlerName) { const queues = this.controllers.get(target.constructor); if (!queues) return []; const handler = queues.handlers.find((handler) => handler.handlerName === handlerName); return handler ? handler.params : []; } static clear() { this.controllers.clear(); } } exports.GenericRegistry = GenericRegistry; GenericRegistry.controllers = new Map();