+ validateConfigFields() for 'config' block validation

This commit is contained in:
Bryan Ashby 2018-12-02 19:30:50 -07:00
parent 36d55a409e
commit 5dea13e652
1 changed files with 51 additions and 0 deletions

View File

@ -567,4 +567,55 @@ exports.MenuModule = class MenuModule extends PluginModule {
}
return cb(null);
}
validateConfigFields(fields, cb) {
//
// fields is expected to be { key : type || validator(key, config) }
// where |type| is 'string', 'array', object', 'number'
//
if(!_.isObject(fields)) {
return cb(Errors.Invalid('Invalid validator!'));
}
const config = this.config || this.menuConfig.config;
let firstBadKey;
let badReason;
const good = _.every(fields, (type, key) => {
if(_.isFunction(type)) {
if(!type(key, config)) {
firstBadKey = key;
badReason = 'Validate failure';
return false;
}
return true;
}
const c = config[key];
let typeOk;
if(_.isUndefined(c)) {
typeOk = false;
badReason = `Missing "${key}", expected ${type}`;
} else {
switch(type) {
case 'string' : typeOk = _.isString(c); break;
case 'object' : typeOk = _.isObject(c); break;
case 'array' : typeOk = Array.isArray(c); break;
case 'number' : typeOk = !isNaN(parseInt(c)); break;
default :
typeOk = false;
badReason = `Don't know how to validate ${type}`;
break;
}
}
if(!typeOk) {
firstBadKey = key;
if(!badReason) {
badReason = `Expected ${type}`;
}
}
return typeOk;
});
return cb(good ? null : Errors.Invalid(`Invalid or missing config option "${firstBadKey}" (${badReason})`));
}
};