apemanerror
Version:
Error parser for apeman.
90 lines (83 loc) • 2.32 kB
JavaScript
/**
* Convert errors from tv4
* @function fromTv4
* @see https://github.com/geraintluff/tv4
*/
const tv4 = require('tv4')
const ErrorCodes = require('./error_codes')
const create = require('./create')
/** @lends fromTv4 */
function fromTv4 (error, options) {
options = options || {}
if (!error) {
return null
}
if (Array.isArray(error)) {
return error.map((data) =>
fromTv4(data, options)
)
}
let code = fromTv4.parseCode(error.code)
let pointer = error.dataPath
let params = error.params
if (params.key) {
pointer += params.key
}
return create(code, pointer,
{
trigger: 'JSONSchema',
context: params,
namespace: options.namespace
})
}
Object.assign(fromTv4, {
parseCode (code) {
const a = ErrorCodes
const 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