slf4ts-api
Version:
Simple logging facade for nodejs
67 lines • 2.61 kB
JavaScript
;
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