UNPKG

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
/* 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 };