UNPKG

clown

Version:
56 lines (46 loc) 1.47 kB
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); }); };