UNPKG

apemanerror

Version:
87 lines (82 loc) 2.36 kB
/** * Convert errors from tv4 * @function fromTv4 * @see https://github.com/geraintluff/tv4 */ 'use strict'; 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;