question-cache
Version:
A wrapper around inquirer that makes it easy to create and selectively reuse questions.
117 lines (99 loc) • 2.42 kB
JavaScript
'use strict';
var utils = require('lazy-cache')(require);
var fn = require;
/**
* Lazily required module dependencies
*/
require = utils;
require('arr-flatten', 'flatten');
require('arr-union', 'union');
require('async-each-series', 'eachSeries');
require('clone-deep', 'clone');
require('define-property', 'define');
require('extend-shallow', 'extend');
require('get-value', 'get');
require('has-value', 'has');
require('inquirer2', 'inquirer');
require('is-answer');
require('isobject', 'isObject');
require('log-utils', 'log');
require('mixin-deep', 'merge');
require('omit-empty');
require('project-name', 'project');
require('set-value', 'set');
require('to-choices');
require = fn;
utils.decorate = function(opts) {
utils.define(opts, 'set', function(prop, val) {
utils.set(this, prop, val);
return this;
}.bind(opts));
utils.define(opts, 'get', function(prop) {
return utils.get(this, prop);
}.bind(opts));
utils.define(opts, 'enabled', function(prop) {
return this.get(prop) === true;
}.bind(opts));
utils.define(opts, 'disabled', function(prop) {
return this.get(prop) === false;
}.bind(opts));
};
utils.isEmpty = function(answer) {
return !utils.isAnswer(answer);
};
utils.matchesKey = function(prop, key) {
if (typeof key !== 'string' || typeof prop !== 'string') {
return false;
}
if (prop === key) {
return true;
}
var len = prop.length;
var ch = key.charAt(len);
return key.indexOf(prop) === 0 && ch === '.';
};
/**
* Cast val to an array
*/
utils.arrayify = function(val) {
if (!val) return [];
return Array.isArray(val) ? val : [val];
};
/**
* Returns true if a value is an object and appears to be a
* question object.
*/
utils.isQuestion = function(val) {
return utils.isObject(val) && (val.isQuestion || !utils.isOptions(val));
};
/**
* Returns true if a value is an object and appears to be an
* options object.
*/
utils.isOptions = function(val) {
if (!utils.isObject(val)) {
return false;
}
if (val.hasOwnProperty('locale')) {
return true;
}
if (val.hasOwnProperty('force')) {
return true;
}
if (val.hasOwnProperty('type')) {
return false;
}
if (val.hasOwnProperty('message')) {
return false;
}
if (val.hasOwnProperty('choices')) {
return false;
}
if (val.hasOwnProperty('name')) {
return false;
}
};
/**
* Expose `utils`
*/
module.exports = utils;