UNPKG

slf4ts-api

Version:

Simple logging facade for nodejs

67 lines 2.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("source-map-support/register"); const fs = require("fs"); const path = require("path"); class LoggerBindings { constructor(additionalPaths = []) { this.bindings = []; if ('LOGGER_BINDING_ADDITIONAL_PATH' in process.env) { additionalPaths.push(process.env.LOGGER_BINDING_ADDITIONAL_PATH); } if ('mainModule' in process && 'paths' in process.mainModule) { process.mainModule.paths .forEach((mainPath) => additionalPaths.push(mainPath)); } const moduleFolders = this.getAllModuleFolders(additionalPaths); const loggerBindings = this.getAllLoggerBindings(moduleFolders); loggerBindings.forEach((binding) => { const registerFunc = require.main.require(binding); registerFunc(this); }); } registerBinding(binding) { const exists = this.bindings.filter((b) => { const vendorEquals = b.getVendor() === binding.getVendor(); const versionEquals = b.getVersion() === binding.getVersion(); return vendorEquals && versionEquals; }).length > 0; if (exists) { return; } this.bindings.push(binding); } getBindings() { return [].concat(this.bindings); } getAllModuleFolders(additionalPaths) { const rootPaths = module.paths; const moduleFolders = []; rootPaths.concat(additionalPaths).forEach((rootPath) => this.visitNodeModules(rootPath).forEach((folder) => moduleFolders.push(folder))); return moduleFolders; } visitNodeModules(rootPath) { const moduleFolders = []; if (fs.existsSync(rootPath)) { const files = fs.readdirSync(rootPath); files.forEach((folder) => { const absolutePath = path.join(rootPath, folder); moduleFolders.push(absolutePath); this.visitNodeModules(path.join(absolutePath, 'node_modules')) .forEach((subfolder) => moduleFolders.push(subfolder)); }); } return moduleFolders; } getAllLoggerBindings(moduleFolders) { const bindings = []; moduleFolders.forEach((moduleFolder) => { if (fs.existsSync(path.join(moduleFolder, '.slf4ts-binding'))) { bindings.push(path.basename(moduleFolder)); } }); return bindings; } } exports.LoggerBindings = LoggerBindings; //# sourceMappingURL=LoggerBindings.js.map