dlmoody/config-merger

View on GitHub
lib/config-merger.js

Summary

Maintainability
A
35 mins
Test Coverage
var utils = require('./utils.js');

var NAME = 0;
var ENV = 2;

function ConfigMerger(fs, path, nconf, reader, options) {

    if(!options) {
      throw Error("there is no configuration in your package.json file. Please see Documentation for help.")
    }
    this.fs = fs;
    this.path = path;
    this.filter = utils.noDotFiles;
    this.reader = reader;
    this.options = Object.assign({
        environment: ''
    }, options);
    this.baseDir = path.join(process.cwd(), this.settings().srcFolder);
    this.outputFile = this.settings().output;
    this.provider = new nconf.Provider().use('file', {file: path.join(process.cwd(), this.outputFile)});
    this.provider.load();

}

ConfigMerger.prototype.getProp = function (filename, type) {
    var names = filename.split('.');
    if (type === NAME) {
        return names[NAME];
    }
    if (type === ENV && names.length > 3) {
        return names[ENV]
    } else {
        return ''
    }
};

ConfigMerger.prototype.getConfigs = function (files, environment) {
    var self = this;
    return files.filter(function (file) {
        return ((file !== self.outputFile) && (self.getProp(file, ENV) === environment))
    });
};

ConfigMerger.prototype.settings = function () {
    return this.options.config[this.options.configName];
};

ConfigMerger.prototype.mergeFile = function(file) {
  var self = this;
  var filePath = self.path.join(self.baseDir.file);
  console.log('merging %s into output config', filePath);
  self.provider.merge(self.getProp(file, NAME), JSON.parse(self.fs.readFileSync(filePath, 'utf8')));
};

ConfigMerger.prototype.mergeFiles = function(files, env){
    self.getConfigs(files, env).forEach(function (file) {
      self.mergeFile(file);
    })
};

ConfigMerger.prototype.loadConfigs = function(files){
    var self = this;
    self.mergeFiles(files,'');
    self.mergeFiles(files, process.env.NODE_ENV);
};

ConfigMerger.prototype.save = function () {
    var self = this;
    var files =self.reader(self.baseDir, self.filter);
    self.loadConfigs(files);
    self.provider.save();
};



function format(time) {
  return time.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1');
}


module.exports = ConfigMerger;