apemanerror
Version:
Error parser for apeman.
87 lines (82 loc) • 2.36 kB
JavaScript
/**
* Convert errors from tv4
* @function fromTv4
* @see https://github.com/geraintluff/tv4
*/
;
var tv4 = require('tv4');
var ErrorCodes = require('./error_codes');
var create = require('./create');
/** @lends fromTv4 */
function fromTv4(error, options) {
options = options || {};
if (!error) {
return null;
}
if (Array.isArray(error)) {
return error.map(function (data) {
return fromTv4(data, options);
});
}
var code = fromTv4.parseCode(error.code);
var pointer = error.dataPath;
var params = error.params;
if (params.key) {
pointer += params.key;
}
return create(code, pointer, {
trigger: 'JSONSchema',
context: params,
namespace: options.namespace
});
}
Object.assign(fromTv4, {
parseCode: function parseCode(code) {
var a = ErrorCodes;
var t = tv4.errorCodes;
switch (code) {
case t.INVALID_TYPE:
return a.VALUE_TYPE_INVALID_ERROR;
case t.ENUM_MISMATCH:
case t.ANY_OF_MISSING:
case t.ONE_OF_MISSING:
case t.ONE_OF_MULTIPLE:
case t.NOT_PASSED:
return a.VALUE_ERROR;
case t.NUMBER_MULTIPLE_OF:
case t.NUMBER_NOT_A_NUMBER:
return a.VALUE_NUMBER_ERROR;
case t.NUMBER_MINIMUM:
case t.NUMBER_MINIMUM_EXCLUSIVE:
return a.VALUE_NUMBER_TOO_SMALL_ERROR;
case t.NUMBER_MAXIMUM:
case t.NUMBER_MAXIMUM_EXCLUSIVE:
return a.VALUE_NUMBER_TOO_LARGE_ERROR;
case t.STRING_LENGTH_SHORT:
return a.VALUE_STRING_TOO_SHORT_ERROR;
case t.STRING_LENGTH_LONG:
return a.VALUE_STRING_TOO_LONG_ERROR;
case t.STRING_PATTERN:
return a.VALUE_STRING_ERROR;
case t.OBJECT_REQUIRED:
return a.VALUE_MISSING_ERROR;
case t.OBJECT_PROPERTIES_MINIMUM:
case t.OBJECT_PROPERTIES_MAXIMUM:
case t.OBJECT_ADDITIONAL_PROPERTIES:
case t.OBJECT_DEPENDENCY_KEY:
case t.ARRAY_LENGTH_SHORT:
case t.ARRAY_LENGTH_LONG:
case t.ARRAY_UNIQUE:
case t.ARRAY_ADDITIONAL_ITEMS:
case t.FORMAT_CUSTOM:
case t.KEYWORD_CUSTOM:
case t.CIRCULAR_REFERENCE:
case t.UNKNOWN_PROPERTY:
return a.SOMETHING_WRONG_ERROR;
default:
console.warn('[apemanerror] Unknown tv4 error code : ' + code);
return a.SOMETHING_WRONG_ERROR;
}
}
});
module.exports = fromTv4;