UNPKG

@glandjs/core

Version:

Glands is a web framework for Node.js (@core)

41 lines (40 loc) 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DiscoveryService = void 0; const toolkit_1 = require("@medishn/toolkit"); class DiscoveryService { constructor(modulesContainer, logger) { this.modulesContainer = modulesContainer; this.logger = logger?.child('Discovery'); } getByMetadata(metadataKey, metadataValue, selector, type) { const items = []; for (const [moduleName, moduleRef] of this.modulesContainer.entries()) { const wrappers = selector(moduleRef); this.logger?.debug(`Scanning module: ${moduleName} for ${type}s`); for (const [token, wrapper] of wrappers.entries()) { const meta = Reflect.getMetadata(metadataKey, wrapper.token); if ((0, toolkit_1.isUndefined)(meta)) { this.logger?.debug(` - Skipped ${type} (no ${metadataKey})`); continue; } if (!(0, toolkit_1.isUndefined)(metadataValue) && meta !== metadataValue) { this.logger?.debug(` - Skipped ${type} (metadata mismatch: expected "${metadataValue}", got "${meta}")`); continue; } this.logger?.debug(` - Matched ${type} with metadata "${meta}"`); items.push(wrapper); } } this.logger?.debug(`Found ${items.length} ${type}(s) matching criteria.`); this.logger?.debug(`- Done.`); return items; } getControllers(metadataKey, metadataValue) { return this.getByMetadata(metadataKey, metadataValue, (m) => m.controllers, 'controller'); } getChannels(metadataKey, metadataValue) { return this.getByMetadata(metadataKey, metadataValue, (m) => m.channels, 'channel'); } } exports.DiscoveryService = DiscoveryService;