base-cli-process
Version:
Normalizers for common argv commands handled by the base-cli plugin. Also pre-processes the given object with base-cli-schema before calling `.process()`
113 lines (103 loc) • 2.29 kB
JavaScript
;
var utils = require('../utils');
/**
* Set the given value, or a value was previously cached by `--get`.
*
* ```json
* $ app --set=pkg.name:foo
* # example: persist `pkg.name` to `store.data.name`
* $ app --get=pkg.name --set=store.name
* ```
* @name set
* @api public
*/
module.exports = function(app) {
return function(prop, key, config, next) {
if (typeof prop === 'undefined') {
next();
return;
}
if (utils.isObject(prop)) {
var temp = prop;
for (var k in temp) {
if (temp.hasOwnProperty(k)) {
prop = k + ':' + temp[k];
}
}
}
var cached = app.get('cache.get');
var name, rest, val;
var keys = [];
if (utils.isObject(prop)) {
keys = [];
name = Object.keys(prop)[0];
val = prop[name];
} else {
keys = String(prop).split('.');
name = keys.shift();
rest = keys.join('.');
if (typeof cached !== 'undefined') {
val = cached;
} else {
keys = [];
val = {};
val[rest] = true;
}
}
utils.assertPlugins(app, name);
switch(name) {
case 'pkg':
if (keys.length) {
app.pkg.set(rest, val);
} else {
app.pkg.set(val);
}
app.pkg.save();
break;
case 'config':
if (keys.length) {
app.pkg.set([app._name, rest], val);
} else {
app.pkg.set(app._name, val);
}
app.pkg.save();
break;
case 'globals':
if (keys.length) {
app.globals.set(rest, val);
} else {
app.globals.set(val);
}
break;
case 'store':
if (keys.length) {
app.store.set(rest, val);
} else {
app.store.set(val);
}
break;
case 'option':
if (keys.length) {
app.option(rest, val);
} else {
app.option(val);
}
break;
case 'data':
if (keys.length) {
app.data(rest, val);
} else {
app.data(val);
}
break;
default:
if (keys.length) {
app.set(prop, val);
} else {
app.set(val);
}
break;
}
next();
};
};