json-based-conditions-and-rules-logic-evaluator
Version:
script that parses some customizable conditions and rules, then outputs a predefined value of that matching rule, or a default value
36 lines (29 loc) • 953 B
JavaScript
/* eslint-disable no-plusplus */
const { conditionsParser } = require('../conditions-parser');
const parser = (config, literals) => {
const { CONDITIONS, RULES, DEFAULT } = config;
let OUTPUT = DEFAULT;
for (let i = 0, l = RULES.length; i < l; i++) {
const rule = RULES[i];
const { operator, conditions, output } = rule;
let qualifies = (operator === 'and') ? 1 : 0;
conditions.forEach((condition) => {
const { id, expected } = condition;
let fulfilled;
if (CONDITIONS[id]) { // make sure id exists
fulfilled = conditionsParser(CONDITIONS[id], literals);
if (operator === 'and') qualifies *= fulfilled;
if (operator === 'or') qualifies += fulfilled;
if (!operator) qualifies = fulfilled === expected;
} else {
fulfilled = false;
}
});
if (qualifies) {
OUTPUT = output;
break;
}
}
return OUTPUT;
};
module.exports = { parser };