better-ajv-errors
Advanced tools
Comparing version 0.5.1 to 0.5.2
@@ -1,41 +0,41 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
var _assign = require('babel-runtime/core-js/object/assign'); | ||
var _assign2 = _interopRequireDefault(_assign); | ||
var _entries = require('babel-runtime/core-js/object/entries'); | ||
var _entries2 = _interopRequireDefault(_entries); | ||
exports.makeTree = makeTree; | ||
exports.filterRedundantErrors = filterRedundantErrors; | ||
exports.createErrorInstances = createErrorInstances; | ||
exports.default = void 0; | ||
var _utils = require('./utils'); | ||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); | ||
var _validationErrors = require('./validation-errors'); | ||
var _utils = require("./utils"); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _validationErrors = require("./validation-errors"); | ||
var JSON_POINTERS_REGEX = /\/[\w_-]+(\/\d+)?/g; | ||
var JSON_POINTERS_REGEX = /\/[\w_-]+(\/\d+)?/g; // Make a tree of errors from ajv errors array | ||
// Make a tree of errors from ajv errors array | ||
function makeTree() { | ||
var ajvErrors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; | ||
function makeTree(ajvErrors) { | ||
if (ajvErrors === void 0) { | ||
ajvErrors = []; | ||
} | ||
var root = { children: {} }; | ||
var root = { | ||
children: {} | ||
}; | ||
ajvErrors.forEach(function (ajvError) { | ||
var dataPath = ajvError.dataPath; | ||
var dataPath = ajvError.dataPath; // `dataPath === ''` is root | ||
// `dataPath === ''` is root | ||
var paths = dataPath === '' ? [''] : dataPath.match(JSON_POINTERS_REGEX); | ||
paths && paths.reduce(function (obj, path, i) { | ||
obj.children[path] = obj.children[path] || { children: {}, errors: [] }; | ||
obj.children[path] = obj.children[path] || { | ||
children: {}, | ||
errors: [] | ||
}; | ||
if (i === paths.length - 1) { | ||
obj.children[path].errors.push(ajvError); | ||
} | ||
return obj.children[path]; | ||
@@ -58,3 +58,2 @@ }, root); | ||
}); | ||
/** | ||
@@ -65,6 +64,6 @@ * If there is an `anyOf` error that means we have more meaningful errors | ||
// TODO: Need to check children too. There might be no children :( | ||
if ((0, _utils.getErrors)(root).some(_utils.isAnyOfError)) { | ||
delete root.errors; | ||
} | ||
/** | ||
@@ -78,5 +77,6 @@ * If all errors are `enum` and siblings have any error then we can safely | ||
*/ | ||
if (root.errors && (0, _utils.getErrors)(root).every(_utils.isEnumError)) { | ||
if ((0, _utils.getSiblings)(parent)(root) | ||
// Remove any reference which becomes `undefined` later | ||
if ((0, _utils.getSiblings)(parent)(root) // Remove any reference which becomes `undefined` later | ||
.filter(_utils.notUndefined).some(_utils.getErrors)) { | ||
@@ -87,3 +87,3 @@ delete parent.children[key]; | ||
(0, _entries2.default)(root.children).forEach(function (_ref) { | ||
Object.entries(root.children).forEach(function (_ref) { | ||
var key = _ref[0], | ||
@@ -97,2 +97,3 @@ child = _ref[1]; | ||
var errors = (0, _utils.getErrors)(root); | ||
if (errors.length && errors.every(_utils.isEnumError)) { | ||
@@ -103,4 +104,6 @@ var allowedValues = (0, _utils.concatAll)([])(errors.map(function (e) { | ||
var error = errors[0]; | ||
return [new _validationErrors.EnumValidationError((0, _assign2.default)({}, error, { | ||
params: { allowedValues } | ||
return [new _validationErrors.EnumValidationError((0, _extends2.default)({}, error, { | ||
params: { | ||
allowedValues | ||
} | ||
}), options)]; | ||
@@ -112,4 +115,6 @@ } else { | ||
return ret.concat(new _validationErrors.AdditionalPropValidationError(error, options)); | ||
case 'required': | ||
return ret.concat(new _validationErrors.RequiredValidationError(error, options)); | ||
default: | ||
@@ -124,6 +129,8 @@ return ret.concat(new _validationErrors.DefaultValidationError(error, options)); | ||
exports.default = function (ajvErrors, options) { | ||
var _default = function _default(ajvErrors, options) { | ||
var tree = makeTree(ajvErrors || []); | ||
filterRedundantErrors(tree); | ||
return createErrorInstances(tree, options); | ||
}; | ||
}; | ||
exports.default = _default; |
@@ -1,37 +0,36 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _stringify = require('babel-runtime/core-js/json/stringify'); | ||
var _jsonToAst = _interopRequireDefault(require("json-to-ast")); | ||
var _stringify2 = _interopRequireDefault(_stringify); | ||
var _helpers = _interopRequireDefault(require("./helpers")); | ||
var _jsonToAst = require('json-to-ast'); | ||
var _default = function _default(schema, data, errors, options) { | ||
if (options === void 0) { | ||
options = {}; | ||
} | ||
var _jsonToAst2 = _interopRequireDefault(_jsonToAst); | ||
var _options = options, | ||
_options$format = _options.format, | ||
format = _options$format === void 0 ? 'cli' : _options$format, | ||
_options$indent = _options.indent, | ||
indent = _options$indent === void 0 ? null : _options$indent; | ||
var jsonRaw = JSON.stringify(data, null, indent); | ||
var jsonAst = (0, _jsonToAst.default)(jsonRaw, { | ||
loc: true | ||
}); | ||
var _helpers = require('./helpers'); | ||
var _helpers2 = _interopRequireDefault(_helpers); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.default = function (schema, data, errors) { | ||
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | ||
var _options$format = options.format, | ||
format = _options$format === undefined ? 'cli' : _options$format, | ||
_options$indent = options.indent, | ||
indent = _options$indent === undefined ? null : _options$indent; | ||
var jsonRaw = (0, _stringify2.default)(data, null, indent); | ||
var jsonAst = (0, _jsonToAst2.default)(jsonRaw, { loc: true }); | ||
var customErrorToText = function customErrorToText(error) { | ||
return error.print().join('\n'); | ||
}; | ||
var customErrorToStructure = function customErrorToStructure(error) { | ||
return error.getError(); | ||
}; | ||
var customErrors = (0, _helpers2.default)(errors, { | ||
var customErrors = (0, _helpers.default)(errors, { | ||
data, | ||
@@ -50,2 +49,3 @@ schema, | ||
module.exports = exports['default']; | ||
exports.default = _default; | ||
module.exports = exports["default"]; |
@@ -1,5 +0,6 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = getMetaFromPath; | ||
function getMetaFromPath(jsonAst, dataPath, isIdentifierLocation) { | ||
@@ -16,13 +17,16 @@ // TODO: Handle json pointer escape notation and better error handling | ||
}); | ||
if (filtered.length !== 1) { | ||
throw new Error(`Couldn't find property ${pointer} of ${dataPath}`); | ||
} | ||
var _filtered$ = filtered[0], | ||
key = _filtered$.key, | ||
value = _filtered$.value; | ||
return isIdentifierLocation && idx === lastPointerIndex ? key : value; | ||
} | ||
case 'Array': | ||
return obj.children[pointer]; | ||
default: | ||
@@ -34,2 +38,3 @@ // eslint-disable-next-line no-console | ||
} | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,14 +0,10 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
exports.getMetaFromPath = void 0; | ||
var _getMetaFromPath = require('./get-meta-from-path'); | ||
var _getMetaFromPath = _interopRequireDefault(require("./get-meta-from-path")); | ||
Object.defineProperty(exports, 'getMetaFromPath', { | ||
enumerable: true, | ||
get: function get() { | ||
return _interopRequireDefault(_getMetaFromPath).default; | ||
} | ||
}); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.getMetaFromPath = _getMetaFromPath.default; |
@@ -1,18 +0,26 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
exports.getSchemaAndData = undefined; | ||
exports.getSchemaAndData = getSchemaAndData; | ||
var _regenerator = require('babel-runtime/regenerator'); | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); | ||
var _regenerator2 = _interopRequireDefault(_regenerator); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); | ||
var _fs = require("fs"); | ||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); | ||
var _jestFixtures = require("jest-fixtures"); | ||
var getSchemaAndData = exports.getSchemaAndData = function () { | ||
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(name, dirPath) { | ||
function getSchemaAndData(_x, _x2) { | ||
return _getSchemaAndData.apply(this, arguments); | ||
} | ||
function _getSchemaAndData() { | ||
_getSchemaAndData = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(name, dirPath) { | ||
var schemaPath, schema, dataPath, data; | ||
return _regenerator2.default.wrap(function _callee$(_context) { | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
@@ -33,6 +41,6 @@ switch (_context.prev = _context.next) { | ||
data = JSON.parse((0, _fs.readFileSync)(dataPath, 'utf8')); | ||
return _context.abrupt('return', [schema, data]); | ||
return _context.abrupt("return", [schema, data]); | ||
case 9: | ||
case 'end': | ||
case "end": | ||
return _context.stop(); | ||
@@ -43,12 +51,3 @@ } | ||
})); | ||
return function getSchemaAndData(_x, _x2) { | ||
return _ref.apply(this, arguments); | ||
}; | ||
}(); | ||
var _fs = require('fs'); | ||
var _jestFixtures = require('jest-fixtures'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
return _getSchemaAndData.apply(this, arguments); | ||
} |
@@ -1,12 +0,6 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.notUndefined = exports.concatAll = exports.getErrors = exports.getSiblings = exports.getChildren = exports.isEnumError = exports.isAnyOfError = exports.isRequiredError = undefined; | ||
exports.notUndefined = exports.concatAll = exports.getErrors = exports.getSiblings = exports.getChildren = exports.isEnumError = exports.isAnyOfError = exports.isRequiredError = void 0; | ||
var _values = require('babel-runtime/core-js/object/values'); | ||
var _values2 = _interopRequireDefault(_values); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var eq = function eq(x) { | ||
@@ -17,2 +11,3 @@ return function (y) { | ||
}; | ||
var not = function not(fn) { | ||
@@ -30,10 +25,16 @@ return function (x) { | ||
var isRequiredError = exports.isRequiredError = isXError('required'); | ||
var isAnyOfError = exports.isAnyOfError = isXError('anyOf'); | ||
var isEnumError = exports.isEnumError = isXError('enum'); | ||
var isRequiredError = isXError('required'); | ||
exports.isRequiredError = isRequiredError; | ||
var isAnyOfError = isXError('anyOf'); | ||
exports.isAnyOfError = isAnyOfError; | ||
var isEnumError = isXError('enum'); | ||
exports.isEnumError = isEnumError; | ||
var getChildren = exports.getChildren = function getChildren(node) { | ||
return node && (0, _values2.default)(node.children) || []; | ||
var getChildren = function getChildren(node) { | ||
return node && Object.values(node.children) || []; | ||
}; | ||
var getSiblings = exports.getSiblings = function getSiblings(parent) { | ||
exports.getChildren = getChildren; | ||
var getSiblings = function getSiblings(parent) { | ||
return function (node) { | ||
@@ -43,7 +44,12 @@ return getChildren(parent).filter(not(eq(node))); | ||
}; | ||
var getErrors = exports.getErrors = function getErrors(node) { | ||
exports.getSiblings = getSiblings; | ||
var getErrors = function getErrors(node) { | ||
return node && node.errors || []; | ||
}; | ||
var concatAll = exports.concatAll = function concatAll(xs) { | ||
exports.getErrors = getErrors; | ||
var concatAll = function concatAll(xs) { | ||
return function (ys) { | ||
@@ -55,4 +61,9 @@ return ys.reduce(function (zs, z) { | ||
}; | ||
var notUndefined = exports.notUndefined = function notUndefined(x) { | ||
exports.concatAll = concatAll; | ||
var notUndefined = function notUndefined(x) { | ||
return x !== undefined; | ||
}; | ||
}; | ||
exports.notUndefined = notUndefined; |
@@ -1,43 +0,29 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _assign = require('babel-runtime/core-js/object/assign'); | ||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); | ||
var _assign2 = _interopRequireDefault(_assign); | ||
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); | ||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); | ||
var _chalk = _interopRequireDefault(require("chalk")); | ||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); | ||
var _base = _interopRequireDefault(require("./base")); | ||
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); | ||
var AdditionalPropValidationError = | ||
/*#__PURE__*/ | ||
function (_BaseValidationError) { | ||
(0, _inheritsLoose2.default)(AdditionalPropValidationError, _BaseValidationError); | ||
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); | ||
var _inherits2 = require('babel-runtime/helpers/inherits'); | ||
var _inherits3 = _interopRequireDefault(_inherits2); | ||
var _chalk = require('chalk'); | ||
var _chalk2 = _interopRequireDefault(_chalk); | ||
var _base = require('./base'); | ||
var _base2 = _interopRequireDefault(_base); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var AdditionalPropValidationError = function (_BaseValidationError) { | ||
(0, _inherits3.default)(AdditionalPropValidationError, _BaseValidationError); | ||
function AdditionalPropValidationError() { | ||
(0, _classCallCheck3.default)(this, AdditionalPropValidationError); | ||
var _this; | ||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | ||
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { | ||
args[_key] = arguments[_key]; | ||
} | ||
var _this = (0, _possibleConstructorReturn3.default)(this, _BaseValidationError.call.apply(_BaseValidationError, [this].concat(args))); | ||
_this = _BaseValidationError.call.apply(_BaseValidationError, [this].concat(args)) || this; | ||
_this.options.isIdentifierLocation = true; | ||
@@ -47,20 +33,18 @@ return _this; | ||
AdditionalPropValidationError.prototype.print = function print() { | ||
var _options = this.options, | ||
message = _options.message, | ||
dataPath = _options.dataPath, | ||
params = _options.params; | ||
var _proto = AdditionalPropValidationError.prototype; | ||
var output = [_chalk2.default`{red {bold ADDTIONAL PROPERTY} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk2.default`đ˛ {magentaBright ${params.additionalProperty}} is not expected to be here!`, `${dataPath}/${params.additionalProperty}`)); | ||
_proto.print = function print() { | ||
var _this$options = this.options, | ||
message = _this$options.message, | ||
dataPath = _this$options.dataPath, | ||
params = _this$options.params; | ||
var output = [_chalk.default`{red {bold ADDTIONAL PROPERTY} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk.default`đ˛ {magentaBright ${params.additionalProperty}} is not expected to be here!`, `${dataPath}/${params.additionalProperty}`)); | ||
}; | ||
AdditionalPropValidationError.prototype.getError = function getError() { | ||
var _options2 = this.options, | ||
params = _options2.params, | ||
dataPath = _options2.dataPath; | ||
return (0, _assign2.default)({}, this.getLocation(`${dataPath}/${params.additionalProperty}`), { | ||
_proto.getError = function getError() { | ||
var _this$options2 = this.options, | ||
params = _this$options2.params, | ||
dataPath = _this$options2.dataPath; | ||
return (0, _extends2.default)({}, this.getLocation(`${dataPath}/${params.additionalProperty}`), { | ||
error: `Property ${params.additionalProperty} is not expected to be here` | ||
@@ -71,5 +55,5 @@ }); | ||
return AdditionalPropValidationError; | ||
}(_base2.default); | ||
}(_base.default); | ||
exports.default = AdditionalPropValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,19 +0,20 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); | ||
var _codeFrame = require("@babel/code-frame"); | ||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); | ||
var _json = require("../json"); | ||
var _codeFrame = require('@babel/code-frame'); | ||
var BaseValidationError = | ||
/*#__PURE__*/ | ||
function () { | ||
function BaseValidationError(options, _ref) { | ||
if (options === void 0) { | ||
options = { | ||
isIdentifierLocation: false | ||
}; | ||
} | ||
var _json = require('../json'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var BaseValidationError = function () { | ||
function BaseValidationError() { | ||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { isIdentifierLocation: false }; | ||
var _ref = arguments[1]; | ||
var data = _ref.data, | ||
@@ -23,4 +24,2 @@ schema = _ref.schema, | ||
jsonRaw = _ref.jsonRaw; | ||
(0, _classCallCheck3.default)(this, BaseValidationError); | ||
this.options = options; | ||
@@ -33,8 +32,13 @@ this.data = data; | ||
BaseValidationError.prototype.getLocation = function getLocation() { | ||
var dataPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.dataPath; | ||
var _options = this.options, | ||
isIdentifierLocation = _options.isIdentifierLocation, | ||
isSkipEndLocation = _options.isSkipEndLocation; | ||
var _proto = BaseValidationError.prototype; | ||
_proto.getLocation = function getLocation(dataPath) { | ||
if (dataPath === void 0) { | ||
dataPath = this.options.dataPath; | ||
} | ||
var _this$options = this.options, | ||
isIdentifierLocation = _this$options.isIdentifierLocation, | ||
isSkipEndLocation = _this$options.isSkipEndLocation; | ||
var _getMetaFromPath = (0, _json.getMetaFromPath)(this.jsonAst, dataPath, isIdentifierLocation), | ||
@@ -49,4 +53,6 @@ loc = _getMetaFromPath.loc; | ||
BaseValidationError.prototype.getCodeFrame = function getCodeFrame(message) { | ||
var dataPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.dataPath; | ||
_proto.getCodeFrame = function getCodeFrame(message, dataPath) { | ||
if (dataPath === void 0) { | ||
dataPath = this.options.dataPath; | ||
} | ||
@@ -59,7 +65,7 @@ return (0, _codeFrame.codeFrameColumns)(this.jsonRaw, this.getLocation(dataPath), { | ||
BaseValidationError.prototype.print = function print() { | ||
_proto.print = function print() { | ||
throw new Error(`Implement the 'print' method inside ${this.constructor.name}!`); | ||
}; | ||
BaseValidationError.prototype.getError = function getError() { | ||
_proto.getError = function getError() { | ||
throw new Error(`Implement the 'getError' method inside ${this.constructor.name}!`); | ||
@@ -72,2 +78,2 @@ }; | ||
exports.default = BaseValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,57 +0,41 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _assign = require('babel-runtime/core-js/object/assign'); | ||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); | ||
var _assign2 = _interopRequireDefault(_assign); | ||
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); | ||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); | ||
var _chalk = _interopRequireDefault(require("chalk")); | ||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); | ||
var _base = _interopRequireDefault(require("./base")); | ||
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); | ||
var DefaultValidationError = | ||
/*#__PURE__*/ | ||
function (_BaseValidationError) { | ||
(0, _inheritsLoose2.default)(DefaultValidationError, _BaseValidationError); | ||
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); | ||
var _inherits2 = require('babel-runtime/helpers/inherits'); | ||
var _inherits3 = _interopRequireDefault(_inherits2); | ||
var _chalk = require('chalk'); | ||
var _chalk2 = _interopRequireDefault(_chalk); | ||
var _base = require('./base'); | ||
var _base2 = _interopRequireDefault(_base); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var DefaultValidationError = function (_BaseValidationError) { | ||
(0, _inherits3.default)(DefaultValidationError, _BaseValidationError); | ||
function DefaultValidationError() { | ||
(0, _classCallCheck3.default)(this, DefaultValidationError); | ||
return (0, _possibleConstructorReturn3.default)(this, _BaseValidationError.apply(this, arguments)); | ||
return _BaseValidationError.apply(this, arguments) || this; | ||
} | ||
DefaultValidationError.prototype.print = function print() { | ||
var _options = this.options, | ||
keyword = _options.keyword, | ||
message = _options.message; | ||
var _proto = DefaultValidationError.prototype; | ||
var output = [_chalk2.default`{red {bold ${keyword.toUpperCase()}} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk2.default`đđŊ {magentaBright ${keyword}} ${message}`)); | ||
_proto.print = function print() { | ||
var _this$options = this.options, | ||
keyword = _this$options.keyword, | ||
message = _this$options.message; | ||
var output = [_chalk.default`{red {bold ${keyword.toUpperCase()}} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk.default`đđŊ {magentaBright ${keyword}} ${message}`)); | ||
}; | ||
DefaultValidationError.prototype.getError = function getError() { | ||
var _options2 = this.options, | ||
keyword = _options2.keyword, | ||
message = _options2.message, | ||
dataPath = _options2.dataPath; | ||
return (0, _assign2.default)({}, this.getLocation(), { | ||
_proto.getError = function getError() { | ||
var _this$options2 = this.options, | ||
keyword = _this$options2.keyword, | ||
message = _this$options2.message, | ||
dataPath = _this$options2.dataPath; | ||
return (0, _extends2.default)({}, this.getLocation(), { | ||
error: `${dataPath}: ${keyword} ${message}` | ||
@@ -62,5 +46,5 @@ }); | ||
return DefaultValidationError; | ||
}(_base2.default); | ||
}(_base.default); | ||
exports.default = DefaultValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,68 +0,47 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _assign = require('babel-runtime/core-js/object/assign'); | ||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); | ||
var _assign2 = _interopRequireDefault(_assign); | ||
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); | ||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); | ||
var _chalk = _interopRequireDefault(require("chalk")); | ||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); | ||
var _leven = _interopRequireDefault(require("leven")); | ||
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); | ||
var _jsonpointer = _interopRequireDefault(require("jsonpointer")); | ||
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); | ||
var _base = _interopRequireDefault(require("./base")); | ||
var _inherits2 = require('babel-runtime/helpers/inherits'); | ||
var EnumValidationError = | ||
/*#__PURE__*/ | ||
function (_BaseValidationError) { | ||
(0, _inheritsLoose2.default)(EnumValidationError, _BaseValidationError); | ||
var _inherits3 = _interopRequireDefault(_inherits2); | ||
var _chalk = require('chalk'); | ||
var _chalk2 = _interopRequireDefault(_chalk); | ||
var _leven = require('leven'); | ||
var _leven2 = _interopRequireDefault(_leven); | ||
var _jsonpointer = require('jsonpointer'); | ||
var _jsonpointer2 = _interopRequireDefault(_jsonpointer); | ||
var _base = require('./base'); | ||
var _base2 = _interopRequireDefault(_base); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var EnumValidationError = function (_BaseValidationError) { | ||
(0, _inherits3.default)(EnumValidationError, _BaseValidationError); | ||
function EnumValidationError() { | ||
(0, _classCallCheck3.default)(this, EnumValidationError); | ||
return (0, _possibleConstructorReturn3.default)(this, _BaseValidationError.apply(this, arguments)); | ||
return _BaseValidationError.apply(this, arguments) || this; | ||
} | ||
EnumValidationError.prototype.print = function print() { | ||
var _options = this.options, | ||
message = _options.message, | ||
allowedValues = _options.params.allowedValues; | ||
var _proto = EnumValidationError.prototype; | ||
_proto.print = function print() { | ||
var _this$options = this.options, | ||
message = _this$options.message, | ||
allowedValues = _this$options.params.allowedValues; | ||
var bestMatch = this.findBestMatch(); | ||
var output = [_chalk2.default`{red {bold ENUM} ${message}}`, _chalk2.default`{red (${allowedValues.join(', ')})}\n`]; | ||
return output.concat(this.getCodeFrame(bestMatch !== null ? _chalk2.default`đđŊ Did you mean {magentaBright ${bestMatch}} here?` : _chalk2.default`đđŊ Unexpected value, should be equal to one of the allowed values`)); | ||
var output = [_chalk.default`{red {bold ENUM} ${message}}`, _chalk.default`{red (${allowedValues.join(', ')})}\n`]; | ||
return output.concat(this.getCodeFrame(bestMatch !== null ? _chalk.default`đđŊ Did you mean {magentaBright ${bestMatch}} here?` : _chalk.default`đđŊ Unexpected value, should be equal to one of the allowed values`)); | ||
}; | ||
EnumValidationError.prototype.getError = function getError() { | ||
var _options2 = this.options, | ||
message = _options2.message, | ||
dataPath = _options2.dataPath, | ||
params = _options2.params; | ||
_proto.getError = function getError() { | ||
var _this$options2 = this.options, | ||
message = _this$options2.message, | ||
dataPath = _this$options2.dataPath, | ||
params = _this$options2.params; | ||
var bestMatch = this.findBestMatch(); | ||
var output = (0, _assign2.default)({}, this.getLocation(), { | ||
var output = (0, _extends2.default)({}, this.getLocation(), { | ||
error: `${dataPath} ${message}: ${params.allowedValues.join(', ')}` | ||
@@ -78,8 +57,8 @@ }); | ||
EnumValidationError.prototype.findBestMatch = function findBestMatch() { | ||
var _options3 = this.options, | ||
dataPath = _options3.dataPath, | ||
allowedValues = _options3.params.allowedValues; | ||
_proto.findBestMatch = function findBestMatch() { | ||
var _this$options3 = this.options, | ||
dataPath = _this$options3.dataPath, | ||
allowedValues = _this$options3.params.allowedValues; | ||
var currentValue = _jsonpointer2.default.get(this.data, dataPath); | ||
var currentValue = _jsonpointer.default.get(this.data, dataPath); | ||
@@ -93,3 +72,3 @@ if (!currentValue) { | ||
value, | ||
weight: (0, _leven2.default)(value, currentValue.toString()) | ||
weight: (0, _leven.default)(value, currentValue.toString()) | ||
}; | ||
@@ -99,3 +78,2 @@ }).sort(function (x, y) { | ||
})[0]; | ||
return allowedValues.length === 1 || bestMatch.weight < bestMatch.value.length ? bestMatch.value : null; | ||
@@ -105,5 +83,5 @@ }; | ||
return EnumValidationError; | ||
}(_base2.default); | ||
}(_base.default); | ||
exports.default = EnumValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,41 +0,22 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
exports.DefaultValidationError = exports.EnumValidationError = exports.AdditionalPropValidationError = exports.RequiredValidationError = void 0; | ||
var _required = require('./required'); | ||
var _required = _interopRequireDefault(require("./required")); | ||
Object.defineProperty(exports, 'RequiredValidationError', { | ||
enumerable: true, | ||
get: function get() { | ||
return _interopRequireDefault(_required).default; | ||
} | ||
}); | ||
exports.RequiredValidationError = _required.default; | ||
var _additionalProp = require('./additional-prop'); | ||
var _additionalProp = _interopRequireDefault(require("./additional-prop")); | ||
Object.defineProperty(exports, 'AdditionalPropValidationError', { | ||
enumerable: true, | ||
get: function get() { | ||
return _interopRequireDefault(_additionalProp).default; | ||
} | ||
}); | ||
exports.AdditionalPropValidationError = _additionalProp.default; | ||
var _enum = require('./enum'); | ||
var _enum = _interopRequireDefault(require("./enum")); | ||
Object.defineProperty(exports, 'EnumValidationError', { | ||
enumerable: true, | ||
get: function get() { | ||
return _interopRequireDefault(_enum).default; | ||
} | ||
}); | ||
exports.EnumValidationError = _enum.default; | ||
var _default = require('./default'); | ||
var _default = _interopRequireDefault(require("./default")); | ||
Object.defineProperty(exports, 'DefaultValidationError', { | ||
enumerable: true, | ||
get: function get() { | ||
return _interopRequireDefault(_default).default; | ||
} | ||
}); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.DefaultValidationError = _default.default; |
@@ -1,63 +0,51 @@ | ||
'use strict'; | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _assign = require('babel-runtime/core-js/object/assign'); | ||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); | ||
var _assign2 = _interopRequireDefault(_assign); | ||
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); | ||
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); | ||
var _chalk = _interopRequireDefault(require("chalk")); | ||
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); | ||
var _base = _interopRequireDefault(require("./base")); | ||
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); | ||
var RequiredValidationError = | ||
/*#__PURE__*/ | ||
function (_BaseValidationError) { | ||
(0, _inheritsLoose2.default)(RequiredValidationError, _BaseValidationError); | ||
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); | ||
var _inherits2 = require('babel-runtime/helpers/inherits'); | ||
var _inherits3 = _interopRequireDefault(_inherits2); | ||
var _chalk = require('chalk'); | ||
var _chalk2 = _interopRequireDefault(_chalk); | ||
var _base = require('./base'); | ||
var _base2 = _interopRequireDefault(_base); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var RequiredValidationError = function (_BaseValidationError) { | ||
(0, _inherits3.default)(RequiredValidationError, _BaseValidationError); | ||
function RequiredValidationError() { | ||
(0, _classCallCheck3.default)(this, RequiredValidationError); | ||
return (0, _possibleConstructorReturn3.default)(this, _BaseValidationError.apply(this, arguments)); | ||
return _BaseValidationError.apply(this, arguments) || this; | ||
} | ||
RequiredValidationError.prototype.getLocation = function getLocation() { | ||
var dataPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.dataPath; | ||
var _proto = RequiredValidationError.prototype; | ||
_proto.getLocation = function getLocation(dataPath) { | ||
if (dataPath === void 0) { | ||
dataPath = this.options.dataPath; | ||
} | ||
var _BaseValidationError$ = _BaseValidationError.prototype.getLocation.call(this, dataPath), | ||
start = _BaseValidationError$.start; | ||
return { start }; | ||
return { | ||
start | ||
}; | ||
}; | ||
RequiredValidationError.prototype.print = function print() { | ||
var _options = this.options, | ||
message = _options.message, | ||
params = _options.params; | ||
var output = [_chalk2.default`{red {bold REQUIRED} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk2.default`âšī¸ {magentaBright ${params.missingProperty}} is missing here!`)); | ||
_proto.print = function print() { | ||
var _this$options = this.options, | ||
message = _this$options.message, | ||
params = _this$options.params; | ||
var output = [_chalk.default`{red {bold REQUIRED} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk.default`âšī¸ {magentaBright ${params.missingProperty}} is missing here!`)); | ||
}; | ||
RequiredValidationError.prototype.getError = function getError() { | ||
_proto.getError = function getError() { | ||
var params = this.options.params; | ||
return (0, _assign2.default)({}, this.getLocation(), { | ||
return (0, _extends2.default)({}, this.getLocation(), { | ||
error: `Required property ${params.missingProperty} is missing` | ||
@@ -68,5 +56,5 @@ }); | ||
return RequiredValidationError; | ||
}(_base2.default); | ||
}(_base.default); | ||
exports.default = RequiredValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -7,22 +7,32 @@ exports.__esModule = true; | ||
exports.createErrorInstances = createErrorInstances; | ||
exports.default = void 0; | ||
var _utils = require('./utils'); | ||
var _utils = require("./utils"); | ||
var _validationErrors = require('./validation-errors'); | ||
var _validationErrors = require("./validation-errors"); | ||
const JSON_POINTERS_REGEX = /\/[\w_-]+(\/\d+)?/g; | ||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } | ||
// Make a tree of errors from ajv errors array | ||
const JSON_POINTERS_REGEX = /\/[\w_-]+(\/\d+)?/g; // Make a tree of errors from ajv errors array | ||
function makeTree(ajvErrors = []) { | ||
const root = { children: {} }; | ||
const root = { | ||
children: {} | ||
}; | ||
ajvErrors.forEach(ajvError => { | ||
const { dataPath } = ajvError; | ||
const { | ||
dataPath | ||
} = ajvError; // `dataPath === ''` is root | ||
// `dataPath === ''` is root | ||
const paths = dataPath === '' ? [''] : dataPath.match(JSON_POINTERS_REGEX); | ||
paths && paths.reduce((obj, path, i) => { | ||
obj.children[path] = obj.children[path] || { children: {}, errors: [] }; | ||
obj.children[path] = obj.children[path] || { | ||
children: {}, | ||
errors: [] | ||
}; | ||
if (i === paths.length - 1) { | ||
obj.children[path].errors.push(ajvError); | ||
} | ||
return obj.children[path]; | ||
@@ -45,3 +55,2 @@ }, root); | ||
}); | ||
/** | ||
@@ -52,6 +61,6 @@ * If there is an `anyOf` error that means we have more meaningful errors | ||
// TODO: Need to check children too. There might be no children :( | ||
if ((0, _utils.getErrors)(root).some(_utils.isAnyOfError)) { | ||
delete root.errors; | ||
} | ||
/** | ||
@@ -65,5 +74,6 @@ * If all errors are `enum` and siblings have any error then we can safely | ||
*/ | ||
if (root.errors && (0, _utils.getErrors)(root).every(_utils.isEnumError)) { | ||
if ((0, _utils.getSiblings)(parent)(root) | ||
// Remove any reference which becomes `undefined` later | ||
if ((0, _utils.getSiblings)(parent)(root) // Remove any reference which becomes `undefined` later | ||
.filter(_utils.notUndefined).some(_utils.getErrors)) { | ||
@@ -79,7 +89,10 @@ delete parent.children[key]; | ||
const errors = (0, _utils.getErrors)(root); | ||
if (errors.length && errors.every(_utils.isEnumError)) { | ||
const allowedValues = (0, _utils.concatAll)([])(errors.map(e => e.params.allowedValues)); | ||
const error = errors[0]; | ||
return [new _validationErrors.EnumValidationError(Object.assign({}, error, { | ||
params: { allowedValues } | ||
return [new _validationErrors.EnumValidationError(_extends({}, error, { | ||
params: { | ||
allowedValues | ||
} | ||
}), options)]; | ||
@@ -91,4 +104,6 @@ } else { | ||
return ret.concat(new _validationErrors.AdditionalPropValidationError(error, options)); | ||
case 'required': | ||
return ret.concat(new _validationErrors.RequiredValidationError(error, options)); | ||
default: | ||
@@ -103,6 +118,8 @@ return ret.concat(new _validationErrors.DefaultValidationError(error, options)); | ||
exports.default = (ajvErrors, options) => { | ||
var _default = (ajvErrors, options) => { | ||
const tree = makeTree(ajvErrors || []); | ||
filterRedundantErrors(tree); | ||
return createErrorInstances(tree, options); | ||
}; | ||
}; | ||
exports.default = _default; |
@@ -1,24 +0,27 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _jsonToAst = require('json-to-ast'); | ||
var _jsonToAst = _interopRequireDefault(require("json-to-ast")); | ||
var _jsonToAst2 = _interopRequireDefault(_jsonToAst); | ||
var _helpers = _interopRequireDefault(require("./helpers")); | ||
var _helpers = require('./helpers'); | ||
var _helpers2 = _interopRequireDefault(_helpers); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.default = (schema, data, errors, options = {}) => { | ||
const { format = 'cli', indent = null } = options; | ||
var _default = (schema, data, errors, options = {}) => { | ||
const { | ||
format = 'cli', | ||
indent = null | ||
} = options; | ||
const jsonRaw = JSON.stringify(data, null, indent); | ||
const jsonAst = (0, _jsonToAst2.default)(jsonRaw, { loc: true }); | ||
const jsonAst = (0, _jsonToAst.default)(jsonRaw, { | ||
loc: true | ||
}); | ||
const customErrorToText = error => error.print().join('\n'); | ||
const customErrorToStructure = error => error.getError(); | ||
const customErrors = (0, _helpers2.default)(errors, { | ||
const customErrors = (0, _helpers.default)(errors, { | ||
data, | ||
@@ -37,2 +40,3 @@ schema, | ||
module.exports = exports['default']; | ||
exports.default = _default; | ||
module.exports = exports["default"]; |
@@ -1,5 +0,6 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = getMetaFromPath; | ||
function getMetaFromPath(jsonAst, dataPath, isIdentifierLocation) { | ||
@@ -14,10 +15,17 @@ // TODO: Handle json pointer escape notation and better error handling | ||
const filtered = obj.children.filter(child => child.key.value === pointer); | ||
if (filtered.length !== 1) { | ||
throw new Error(`Couldn't find property ${pointer} of ${dataPath}`); | ||
} | ||
const { key, value } = filtered[0]; | ||
const { | ||
key, | ||
value | ||
} = filtered[0]; | ||
return isIdentifierLocation && idx === lastPointerIndex ? key : value; | ||
} | ||
case 'Array': | ||
return obj.children[pointer]; | ||
default: | ||
@@ -29,2 +37,3 @@ // eslint-disable-next-line no-console | ||
} | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,14 +0,10 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.getMetaFromPath = void 0; | ||
var _getMetaFromPath = require('./get-meta-from-path'); | ||
var _getMetaFromPath = _interopRequireDefault(require("./get-meta-from-path")); | ||
Object.defineProperty(exports, 'getMetaFromPath', { | ||
enumerable: true, | ||
get: function () { | ||
return _interopRequireDefault(_getMetaFromPath).default; | ||
} | ||
}); | ||
exports.getMetaFromPath = _getMetaFromPath.default; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
@@ -1,2 +0,2 @@ | ||
'use strict'; | ||
"use strict"; | ||
@@ -6,5 +6,5 @@ exports.__esModule = true; | ||
var _fs = require('fs'); | ||
var _fs = require("fs"); | ||
var _jestFixtures = require('jest-fixtures'); | ||
var _jestFixtures = require("jest-fixtures"); | ||
@@ -16,4 +16,3 @@ async function getSchemaAndData(name, dirPath) { | ||
const data = JSON.parse((0, _fs.readFileSync)(dataPath, 'utf8')); | ||
return [schema, data]; | ||
} |
@@ -1,5 +0,8 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.notUndefined = exports.concatAll = exports.getErrors = exports.getSiblings = exports.getChildren = exports.isEnumError = exports.isAnyOfError = exports.isRequiredError = void 0; | ||
const eq = x => y => x === y; | ||
const not = fn => x => !fn(x); | ||
@@ -9,11 +12,27 @@ | ||
const isRequiredError = exports.isRequiredError = isXError('required'); | ||
const isAnyOfError = exports.isAnyOfError = isXError('anyOf'); | ||
const isEnumError = exports.isEnumError = isXError('enum'); | ||
const isRequiredError = isXError('required'); | ||
exports.isRequiredError = isRequiredError; | ||
const isAnyOfError = isXError('anyOf'); | ||
exports.isAnyOfError = isAnyOfError; | ||
const isEnumError = isXError('enum'); | ||
exports.isEnumError = isEnumError; | ||
const getChildren = exports.getChildren = node => node && Object.values(node.children) || []; | ||
const getSiblings = exports.getSiblings = parent => node => getChildren(parent).filter(not(eq(node))); | ||
const getErrors = exports.getErrors = node => node && node.errors || []; | ||
const getChildren = node => node && Object.values(node.children) || []; | ||
const concatAll = exports.concatAll = xs => ys => ys.reduce((zs, z) => zs.concat(z), xs); | ||
const notUndefined = exports.notUndefined = x => x !== undefined; | ||
exports.getChildren = getChildren; | ||
const getSiblings = parent => node => getChildren(parent).filter(not(eq(node))); | ||
exports.getSiblings = getSiblings; | ||
const getErrors = node => node && node.errors || []; | ||
exports.getErrors = getErrors; | ||
const concatAll = xs => ys => ys.reduce((zs, z) => zs.concat(z), xs); | ||
exports.concatAll = concatAll; | ||
const notUndefined = x => x !== undefined; | ||
exports.notUndefined = notUndefined; |
@@ -1,16 +0,15 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _chalk = require('chalk'); | ||
var _chalk = _interopRequireDefault(require("chalk")); | ||
var _chalk2 = _interopRequireDefault(_chalk); | ||
var _base = _interopRequireDefault(require("./base")); | ||
var _base = require('./base'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _base2 = _interopRequireDefault(_base); | ||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
class AdditionalPropValidationError extends _base2.default { | ||
class AdditionalPropValidationError extends _base.default { | ||
constructor(...args) { | ||
@@ -22,17 +21,24 @@ super(...args); | ||
print() { | ||
const { message, dataPath, params } = this.options; | ||
const output = [_chalk2.default`{red {bold ADDTIONAL PROPERTY} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk2.default`đ˛ {magentaBright ${params.additionalProperty}} is not expected to be here!`, `${dataPath}/${params.additionalProperty}`)); | ||
const { | ||
message, | ||
dataPath, | ||
params | ||
} = this.options; | ||
const output = [_chalk.default`{red {bold ADDTIONAL PROPERTY} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk.default`đ˛ {magentaBright ${params.additionalProperty}} is not expected to be here!`, `${dataPath}/${params.additionalProperty}`)); | ||
} | ||
getError() { | ||
const { params, dataPath } = this.options; | ||
return Object.assign({}, this.getLocation(`${dataPath}/${params.additionalProperty}`), { | ||
const { | ||
params, | ||
dataPath | ||
} = this.options; | ||
return _extends({}, this.getLocation(`${dataPath}/${params.additionalProperty}`), { | ||
error: `Property ${params.additionalProperty} is not expected to be here` | ||
}); | ||
} | ||
} | ||
exports.default = AdditionalPropValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,11 +0,19 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _codeFrame = require('@babel/code-frame'); | ||
var _codeFrame = require("@babel/code-frame"); | ||
var _json = require('../json'); | ||
var _json = require("../json"); | ||
class BaseValidationError { | ||
constructor(options = { isIdentifierLocation: false }, { data, schema, jsonAst, jsonRaw }) { | ||
constructor(options = { | ||
isIdentifierLocation: false | ||
}, { | ||
data, | ||
schema, | ||
jsonAst, | ||
jsonRaw | ||
}) { | ||
this.options = options; | ||
@@ -19,4 +27,9 @@ this.data = data; | ||
getLocation(dataPath = this.options.dataPath) { | ||
const { isIdentifierLocation, isSkipEndLocation } = this.options; | ||
const { loc } = (0, _json.getMetaFromPath)(this.jsonAst, dataPath, isIdentifierLocation); | ||
const { | ||
isIdentifierLocation, | ||
isSkipEndLocation | ||
} = this.options; | ||
const { | ||
loc | ||
} = (0, _json.getMetaFromPath)(this.jsonAst, dataPath, isIdentifierLocation); | ||
return { | ||
@@ -42,4 +55,6 @@ start: loc.start, | ||
} | ||
} | ||
exports.default = BaseValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,32 +0,38 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _chalk = require('chalk'); | ||
var _chalk = _interopRequireDefault(require("chalk")); | ||
var _chalk2 = _interopRequireDefault(_chalk); | ||
var _base = _interopRequireDefault(require("./base")); | ||
var _base = require('./base'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _base2 = _interopRequireDefault(_base); | ||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
class DefaultValidationError extends _base2.default { | ||
class DefaultValidationError extends _base.default { | ||
print() { | ||
const { keyword, message } = this.options; | ||
const output = [_chalk2.default`{red {bold ${keyword.toUpperCase()}} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk2.default`đđŊ {magentaBright ${keyword}} ${message}`)); | ||
const { | ||
keyword, | ||
message | ||
} = this.options; | ||
const output = [_chalk.default`{red {bold ${keyword.toUpperCase()}} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk.default`đđŊ {magentaBright ${keyword}} ${message}`)); | ||
} | ||
getError() { | ||
const { keyword, message, dataPath } = this.options; | ||
return Object.assign({}, this.getLocation(), { | ||
const { | ||
keyword, | ||
message, | ||
dataPath | ||
} = this.options; | ||
return _extends({}, this.getLocation(), { | ||
error: `${dataPath}: ${keyword} ${message}` | ||
}); | ||
} | ||
} | ||
exports.default = DefaultValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,38 +0,40 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _chalk = require('chalk'); | ||
var _chalk = _interopRequireDefault(require("chalk")); | ||
var _chalk2 = _interopRequireDefault(_chalk); | ||
var _leven = _interopRequireDefault(require("leven")); | ||
var _leven = require('leven'); | ||
var _jsonpointer = _interopRequireDefault(require("jsonpointer")); | ||
var _leven2 = _interopRequireDefault(_leven); | ||
var _base = _interopRequireDefault(require("./base")); | ||
var _jsonpointer = require('jsonpointer'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _jsonpointer2 = _interopRequireDefault(_jsonpointer); | ||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } | ||
var _base = require('./base'); | ||
var _base2 = _interopRequireDefault(_base); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
class EnumValidationError extends _base2.default { | ||
class EnumValidationError extends _base.default { | ||
print() { | ||
const { message, params: { allowedValues } } = this.options; | ||
const { | ||
message, | ||
params: { | ||
allowedValues | ||
} | ||
} = this.options; | ||
const bestMatch = this.findBestMatch(); | ||
const output = [_chalk2.default`{red {bold ENUM} ${message}}`, _chalk2.default`{red (${allowedValues.join(', ')})}\n`]; | ||
return output.concat(this.getCodeFrame(bestMatch !== null ? _chalk2.default`đđŊ Did you mean {magentaBright ${bestMatch}} here?` : _chalk2.default`đđŊ Unexpected value, should be equal to one of the allowed values`)); | ||
const output = [_chalk.default`{red {bold ENUM} ${message}}`, _chalk.default`{red (${allowedValues.join(', ')})}\n`]; | ||
return output.concat(this.getCodeFrame(bestMatch !== null ? _chalk.default`đđŊ Did you mean {magentaBright ${bestMatch}} here?` : _chalk.default`đđŊ Unexpected value, should be equal to one of the allowed values`)); | ||
} | ||
getError() { | ||
const { message, dataPath, params } = this.options; | ||
const { | ||
message, | ||
dataPath, | ||
params | ||
} = this.options; | ||
const bestMatch = this.findBestMatch(); | ||
const output = Object.assign({}, this.getLocation(), { | ||
const output = _extends({}, this.getLocation(), { | ||
error: `${dataPath} ${message}: ${params.allowedValues.join(', ')}` | ||
@@ -49,5 +51,11 @@ }); | ||
findBestMatch() { | ||
const { dataPath, params: { allowedValues } } = this.options; | ||
const currentValue = _jsonpointer2.default.get(this.data, dataPath); | ||
const { | ||
dataPath, | ||
params: { | ||
allowedValues | ||
} | ||
} = this.options; | ||
const currentValue = _jsonpointer.default.get(this.data, dataPath); | ||
if (!currentValue) { | ||
@@ -59,9 +67,10 @@ return null; | ||
value, | ||
weight: (0, _leven2.default)(value, currentValue.toString()) | ||
weight: (0, _leven.default)(value, currentValue.toString()) | ||
})).sort((x, y) => x.weight > y.weight ? 1 : x.weight < y.weight ? -1 : 0)[0]; | ||
return allowedValues.length === 1 || bestMatch.weight < bestMatch.value.length ? bestMatch.value : null; | ||
} | ||
} | ||
exports.default = EnumValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
@@ -1,41 +0,22 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.DefaultValidationError = exports.EnumValidationError = exports.AdditionalPropValidationError = exports.RequiredValidationError = void 0; | ||
var _required = require('./required'); | ||
var _required = _interopRequireDefault(require("./required")); | ||
Object.defineProperty(exports, 'RequiredValidationError', { | ||
enumerable: true, | ||
get: function () { | ||
return _interopRequireDefault(_required).default; | ||
} | ||
}); | ||
exports.RequiredValidationError = _required.default; | ||
var _additionalProp = require('./additional-prop'); | ||
var _additionalProp = _interopRequireDefault(require("./additional-prop")); | ||
Object.defineProperty(exports, 'AdditionalPropValidationError', { | ||
enumerable: true, | ||
get: function () { | ||
return _interopRequireDefault(_additionalProp).default; | ||
} | ||
}); | ||
exports.AdditionalPropValidationError = _additionalProp.default; | ||
var _enum = require('./enum'); | ||
var _enum = _interopRequireDefault(require("./enum")); | ||
Object.defineProperty(exports, 'EnumValidationError', { | ||
enumerable: true, | ||
get: function () { | ||
return _interopRequireDefault(_enum).default; | ||
} | ||
}); | ||
exports.EnumValidationError = _enum.default; | ||
var _default = require('./default'); | ||
var _default = _interopRequireDefault(require("./default")); | ||
Object.defineProperty(exports, 'DefaultValidationError', { | ||
enumerable: true, | ||
get: function () { | ||
return _interopRequireDefault(_default).default; | ||
} | ||
}); | ||
exports.DefaultValidationError = _default.default; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
@@ -1,37 +0,45 @@ | ||
'use strict'; | ||
"use strict"; | ||
exports.__esModule = true; | ||
exports.default = void 0; | ||
var _chalk = require('chalk'); | ||
var _chalk = _interopRequireDefault(require("chalk")); | ||
var _chalk2 = _interopRequireDefault(_chalk); | ||
var _base = _interopRequireDefault(require("./base")); | ||
var _base = require('./base'); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var _base2 = _interopRequireDefault(_base); | ||
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
class RequiredValidationError extends _base2.default { | ||
class RequiredValidationError extends _base.default { | ||
getLocation(dataPath = this.options.dataPath) { | ||
const { start } = super.getLocation(dataPath); | ||
return { start }; | ||
const { | ||
start | ||
} = super.getLocation(dataPath); | ||
return { | ||
start | ||
}; | ||
} | ||
print() { | ||
const { message, params } = this.options; | ||
const output = [_chalk2.default`{red {bold REQUIRED} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk2.default`âšī¸ {magentaBright ${params.missingProperty}} is missing here!`)); | ||
const { | ||
message, | ||
params | ||
} = this.options; | ||
const output = [_chalk.default`{red {bold REQUIRED} ${message}}\n`]; | ||
return output.concat(this.getCodeFrame(_chalk.default`âšī¸ {magentaBright ${params.missingProperty}} is missing here!`)); | ||
} | ||
getError() { | ||
const { params } = this.options; | ||
return Object.assign({}, this.getLocation(), { | ||
const { | ||
params | ||
} = this.options; | ||
return _extends({}, this.getLocation(), { | ||
error: `Required property ${params.missingProperty} is missing` | ||
}); | ||
} | ||
} | ||
exports.default = RequiredValidationError; | ||
module.exports = exports['default']; | ||
module.exports = exports["default"]; |
{ | ||
"name": "better-ajv-errors", | ||
"version": "0.5.1", | ||
"version": "0.5.2", | ||
"description": "JSON Schema validation for Human", | ||
@@ -26,5 +26,6 @@ "repository": "torifat/better-ajv-errors", | ||
"dependencies": { | ||
"@babel/code-frame": "^7.0.0-beta.39", | ||
"chalk": "^2.3.1", | ||
"json-to-ast": "^2.0.2", | ||
"@babel/code-frame": "^7.0.0-rc.1", | ||
"@babel/runtime": "^7.0.0-rc.1", | ||
"chalk": "^2.4.1", | ||
"json-to-ast": "^2.0.3", | ||
"jsonpointer": "^4.0.1", | ||
@@ -34,19 +35,20 @@ "leven": "^2.1.0" | ||
"devDependencies": { | ||
"babel-cli": "^6.26.0", | ||
"babel-core": "^6.26.0", | ||
"babel-jest": "^22.2.2", | ||
"@babel/cli": "^7.0.0-rc.1", | ||
"@babel/core": "^7.0.0-rc.1", | ||
"@babel/plugin-syntax-object-rest-spread": "^7.0.0-rc.1", | ||
"@babel/plugin-transform-runtime": "^7.0.0-rc.1", | ||
"@babel/preset-env": "^7.0.0-rc.1", | ||
"babel-core": "^7.0.0-0", | ||
"babel-jest": "^23.4.2", | ||
"babel-plugin-add-module-exports": "^0.2.1", | ||
"babel-plugin-transform-object-rest-spread": "^6.26.0", | ||
"babel-plugin-transform-runtime": "^6.23.0", | ||
"babel-preset-env": "^1.6.1", | ||
"codecov": "^3.0.0", | ||
"eslint": "^4.17.0", | ||
"eslint-config-prettier": "^2.9.0", | ||
"eslint-plugin-jest": "^21.8.0", | ||
"flow-bin": "^0.65.0", | ||
"codecov": "^3.0.4", | ||
"eslint": "^5.4.0", | ||
"eslint-config-prettier": "^3.0.1", | ||
"eslint-plugin-jest": "^21.21.0", | ||
"flow-bin": "^0.79.1", | ||
"husky": "^0.14.3", | ||
"jest": "^22.2.2", | ||
"jest": "^23.5.0", | ||
"jest-fixtures": "^0.6.0", | ||
"lint-staged": "^6.1.0", | ||
"prettier": "^1.7.4" | ||
"prettier": "^1.14.2", | ||
"pretty-quick": "^1.6.0" | ||
}, | ||
@@ -58,3 +60,3 @@ "peerDependencies": { | ||
"clean": "rm -rf lib", | ||
"prebuild": "yarn run clean", | ||
"prebuild": "yarn clean", | ||
"build": "yarn build:modern && yarn build:legacy", | ||
@@ -65,5 +67,5 @@ "build:modern": "BABEL_ENV=modern babel src -d lib/modern/", | ||
"format": "prettier --write src/*.js src/**/*.js", | ||
"test": "yarn jest", | ||
"test-ci": "yarn jest --coverage && yarn codecov", | ||
"precommit": "lint-staged" | ||
"test": "jest", | ||
"test-ci": "jest --coverage && codecov", | ||
"precommit": "pretty-quick --staged" | ||
}, | ||
@@ -75,13 +77,6 @@ "jest": { | ||
}, | ||
"lint-staged": { | ||
"*.js": [ | ||
"eslint --fix", | ||
"prettier --write", | ||
"git add" | ||
] | ||
}, | ||
"prettier": { | ||
"singleQuote": true, | ||
"trailing-comma": "es5" | ||
"trailingComma": "es5" | ||
} | ||
} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
74939
39
1959
7
18
5
1
+ Added@babel/runtime@^7.0.0-rc.1
+ Added@babel/runtime@7.24.7(transitive)
+ Addedregenerator-runtime@0.14.1(transitive)
Updatedchalk@^2.4.1
Updatedjson-to-ast@^2.0.3