config.js 1.56 KiB
import fs from 'fs';
import debug from 'debug';
import path from 'path';
import env2obj from 'env2obj';
import _ from 'lodash';
const log = debug('helper:config:info');
const error = debug('helper:config:error');
const debg = debug('helper:config:debug');
export class Config {
/**
* Create a config.
* @param {String} basedir path of config file - default = PWD
* @param {prefix} prefix - of env config variables
* e.g. APP_TITLE="hi" will be config.title
*/
constructor(basedir = process.env.PWD, prefix = 'APP') {
let env = process.env.NODE_ENV || 'development';
process.env.NODE_ENV = env;
/**
*@object
*the file config.js
*/
this.file = {};
if (fs.existsSync(path.join(basedir, 'config.js'))) {
this.file = require(path.join(basedir, 'config.js'), 'utf-8')[env];
} else {
debg('file', 'did not use ', path.join(basedir, 'config.js'))
}
/**
the config.default.js config
@object
*/
this.fileDefault = {};
if (fs.existsSync(path.join(basedir, 'config.default.js'))) {
this.fileDefault =
require(path.join(basedir, 'config.default.js'), 'utf-8')[env]
} else {
debg('file', 'did not use ', path.join(basedir, 'config.default.js'))
}
/**
*@object
*the config.env config
*/
this.env = env2obj(prefix);
this.config = _.merge(this.fileDefault, this.file, this.env);
// todo: lowwercase every key
debg('used config', this.config)
}
}
/**
default config loaded with PWD,APP
*/
const config = new Config();
exports.default = config.config;