clown
Version:
clown computing with pkgcloud
56 lines (46 loc) • 1.47 kB
JavaScript
var _ = require('lodash'),
async = require('async'),
joi = require('joi'),
traverse = require('traverse');
var log = require('./log'),
prompt = require('./prompt'),
traverseSchema = require('./traverse');
module.exports = function params(about, argv, callback) {
var args = [];
async.each(about.signature, function (schema, callback) {
var name = Object.keys(schema).shift(),
body = {},
prompts = [];
body[name] = _.cloneDeep(argv[name]);
log.silly('params', 'Argument name `%s`', name);
traverseSchema(schema, function(node) {
var self = this;
if (node._type !== 'object') {
var property = traverse(body).get(self.path);
log.silly('params', '`%s.%s == %j', name, self.path.join('.'), property);
if (!property) {
prompts.push(function(cb) {
prompt(self.path, schema, function(err, res) {
if (err) return cb(err);
traverse(body).set(self.path, res);
cb(null);
});
});
}
}
});
async.series(prompts, function(err) {
if (err) return callback(err);
var aintValid = joi.validate(body, schema);
if (aintValid) {
return callback(err);
}
args.push(body[name]);
callback(null);
});
}, function (err) {
if (err) return callback(err);
log.silly('params', 'Arguments %j', args);
callback(null, args);
});
};