@glandjs/core
Version:
Glands is a web framework for Node.js (@core)
41 lines (40 loc) • 1.87 kB
JavaScript
;
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;