You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
856 B
JavaScript

"use strict";
const getChain = require("../get-chain");
function testRule(error, rule) {
if (typeof rule === "function") {
if (rule.prototype != null) {
// Constructor function / class
return error instanceof rule;
} else {
// Predicate function
return Boolean(rule(error));
}
} else if (typeof rule === "object") {
for (let [ key, value ] of Object.entries(rule)) {
if (error[key] !== value) {
return false;
}
}
return true;
} else {
throw new Error(`Invalid rule type`);
}
}
module.exports = function isErrorType(error, rules) {
// FIXME: Use validatem here as well, for rule validation?
let chain = getChain(error);
return chain.some((causeError) => {
if (Array.isArray(rules)) {
return rules.every((rule) => testRule(causeError, rule));
} else {
return testRule(causeError, rules);
}
});
};