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 ValidationError = require("@validatem/error");
const combinator = require("@validatem/combinator"); const combinator = require("@validatem/combinator");
const validationResult = require("@validatem/validation-result"); const validationResult = require("@validatem/validation-result");
const matchValidationError = require("@validatem/match-validation-error");
const areErrorsFromSameOrigin = require("./src/are-errors-from-same-origin"); const areErrorsFromSameOrigin = require("./src/are-errors-from-same-origin");
@ -61,13 +62,20 @@ module.exports = function (alternatives) {
for (let alternative of alternatives) { for (let alternative of alternatives) {
let { errors, newValue } = applyValidators(value, alternative); let { errors, newValue } = applyValidators(value, alternative);
let unexpectedErrors = errors.filter((error) => !matchValidationError(error));
if (errors.length === 0) { if (unexpectedErrors.length > 0) {
return newValue; // 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.
} else if (errors.length === 1) { throw unexpectedErrors[0];
allErrors.push(errors[0]);
} else { } 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": { "dependencies": {
"@validatem/combinator": "^0.1.1", "@validatem/combinator": "^0.1.1",
"@validatem/error": "^1.0.0", "@validatem/error": "^1.0.0",
"@validatem/match-validation-error": "^0.1.0",
"@validatem/validation-result": "^0.1.2", "@validatem/validation-result": "^0.1.2",
"flatten": "^1.0.3" "flatten": "^1.0.3"
} }

Loading…
Cancel
Save