Immediately fail completely when a non-validation error is encountered

master
Sven Slootweg 4 years ago
parent 9edb361baf
commit 34a8b4f6bd

@ -7,6 +7,7 @@ const flatten = require("flatten");
const ValidationError = require("@validatem/error");
const combinator = require("@validatem/combinator");
const validationResult = require("@validatem/validation-result");
const matchValidationError = require("@validatem/match-validation-error");
const areErrorsFromSameOrigin = require("./src/are-errors-from-same-origin");
@ -61,13 +62,20 @@ module.exports = function (alternatives) {
for (let alternative of alternatives) {
let { errors, newValue } = applyValidators(value, alternative);
let unexpectedErrors = errors.filter((error) => !matchValidationError(error));
if (errors.length === 0) {
return newValue;
} else if (errors.length === 1) {
allErrors.push(errors[0]);
if (unexpectedErrors.length > 0) {
// We want to immediately stop trying alternatives when a non-ValidationError occurred, since that means that something broke internally somewhere, and it is not safe to continue executing.
throw unexpectedErrors[0];
} else {
allErrors.push(errorAllOf(errors));
if (errors.length === 0) {
return newValue;
} else if (errors.length === 1) {
allErrors.push(errors[0]);
} else {
allErrors.push(errorAllOf(errors));
}
}
}

@ -19,6 +19,7 @@
"dependencies": {
"@validatem/combinator": "^0.1.1",
"@validatem/error": "^1.0.0",
"@validatem/match-validation-error": "^0.1.0",
"@validatem/validation-result": "^0.1.2",
"flatten": "^1.0.3"
}

Loading…
Cancel
Save