blob: 3a494117104384e99d18452e25d0f01500cebbb6 [file] [log] [blame]
import cc from 'config-chain';
import ini from 'ini';
import xtend from 'xtend';
import Promise from 'bluebird';
let cfg;
export function cli (cmd, ...args) {
if (!cmd) {
return cliGet();
}
if (cmd === 'get') {
cmd = 'cliGet';
}
if (!exports[cmd]) {
const msg = [
'Usage:',
'',
'nmo config get [<section>], [<key>] [--json]',
'nmo config set <section>, <key>, <value>'
].join('\n');
const err = new Error(msg);
err.type = 'EUSAGE';
throw err;
}
return exports[cmd].apply(exports[cmd], args);
}
export const load = function load (nopts = {nmoconf: '.nmorc'}) {
return new Promise((resolve, reject) => {
cfg = cc(nopts)
.addFile(nopts.nmoconf, 'ini', 'config')
.on('load', () => {
resolve(cfg);
}).on('error', reject);
});
};
export const set = function set (section, key, value) {
return new Promise((resolve, reject) => {
if (!section || !key || !value) {
const err = new Error('please provide a section, key and value');
err.type = 'EUSAGE';
return reject(err);
}
const newValue = xtend(cfg.get(section, 'config'), {[key]: value});
cfg.set(section, newValue, 'config');
cfg.save('config', 'ini', () => {
resolve();
});
});
};
export function get (section, key) {
let res;
if (!section && !key) {
res = cfg.sources.config.data;
}
if (section && !key) {
res = cfg.sources.config.data[section];
}
if (section && key) {
res = cfg.sources.config.data[section][key];
}
return res;
}
export function cliGet (section, key) {
return new Promise((resolve, reject) => {
const data = get(section, key),
res = handleResult(data, key);
return resolve(res);
});
}
export function handleResult (data, key) {
let jsonOut = cfg.get('json');
if (typeof data === 'string') {
if (jsonOut) {
data = {[key]: data};
}
return data;
}
if (jsonOut) {
console.log(data);
return data;
}
if (!data) {
return console.log(data);
}
const parsed = ini.stringify(data);
console.log(parsed);
return data;
}