const commandLineArgs = require('command-line-args') , logger = require("logops"); class Config { constructor() { this.options = {} // this.requires = ['env', 'gateway', 'quix24', 'mongo'] this.requires = ['env'] this.init() this.validate() this.finalize() } init() { try { this.options = commandLineArgs([ { name: 'env', alias: 'e', type: String, defaultValue: ['production'] }, { name: 'host', type: String }, { name: 'port', type: Number }, { name: 'database', alias: 'd', type: String }, { name: 'username', alias: 'u', type: String }, { name: 'password', alias: 'p', type: String }, { name: 'mongo', alias: 'm', type: String }, { name: 'redis', alias: 'r', type: String }, { name: 'level', alias: 'l', type: String }, { name: 'gateway', alias: 'g', type: String }, { name: 'quix24', alias: 'q', type: String } ]); } catch (e) { logger.debug('Command line arguments interpret failed :', e.message) logger.debug('expected arguments : ', JSON.stringify(this.requires)) process.exit(1) } } finalize() { if (this.options.env == 'development') { this.options.level = this.options.level ? this.options.level : "DEBUG" logger.formatters.dev.omit = ['pid', 'port', 'hostname', 'app']; // logger.format = logger.formatters.dev; } else { this.options.level = this.options.level ? this.options.level : "WARN" } logger.formatters.json.omit = ['pid', 'port', 'hostname', 'app']; logger.setLevel(this.options.level) logger.debug(this.options, 'Environment setting options') } validate() { for (let key in this.options) { if (this.options[key]) { delete this.requires[this.requires.indexOf(key)] } } this.requires = this.requires.filter(function (el) { return el != null; }) if (this.requires.length) { logger.debug('Process terminated invalid required arguments: ', JSON.stringify(this.requires)) process.exit(1) } } } let config = new Config; module.exports = config.options