muffin
Version:
The 21st century way of building websites
112 lines (83 loc) • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _dotenv = require('dotenv');
var _dotenv2 = _interopRequireDefault(_dotenv);
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _ = require('./');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class Config {
constructor() {
this.envFile = process.cwd() + '/.env';
this.config = {
port: 3000,
db: {
host: 'localhost',
user: 'admin',
password: 1234,
name: 'muffin'
},
// This is fine, since it's just the default
session_secret: 'random'
};
if ((0, _.exists)(this.envFile)) {
const fileContent = this.loadConfig();
for (let property in fileContent) {
let whole = fileContent[property];
property = property.toLowerCase();
if (property.indexOf('_') > -1 && this.config.hasOwnProperty(property.split('_')[0])) {
this.assignProperty(this.config, property, whole);
continue;
}
this.config[property] = whole;
}
}
this.setupEnv();
}
setVariable(name, value) {
name = name.toUpperCase();
if (!process.env[name]) {
process.env[name] = value;
}
}
loadConfig() {
let fileContent = false;
try {
fileContent = _fsExtra2.default.readFileSync(this.envFile, {
encoding: 'utf8'
});
fileContent = _dotenv2.default.parse(fileContent);
} catch (err) {
(0, _.log)(err);
return false;
}
return fileContent;
}
setupEnv() {
const properties = this.config;
for (let property in properties) {
let whole = properties[property];
if (typeof whole === 'object') {
for (let subProp in whole) {
this.setVariable(property + '_' + subProp, whole[subProp]);
}
continue;
}
this.setVariable(property, whole);
}
}
assignProperty(obj, path, value) {
let props = path.split('_'),
i = 0,
prop;
for (; i < props.length - 1; i++) {
prop = props[i];
obj = obj[prop];
}
obj[props[i]] = value;
}
}
exports.default = Config;
module.exports = exports['default'];