logic-rule
Version:
Logical rules
26 lines (23 loc) • 783 B
text/typescript
import Rule from "./Rule";
import { isPromise } from "./util";
export default class OrRule extends Rule {
execute(): boolean|Promise<boolean> {
const rule1 = this.rules[0];
const rule2 = this.rules[1];
if (!rule1 || !rule2){
throw new Error("The rule cannot be empty");
}
const ruleResult1 = rule1.execute();
const ruleResult2 = rule2.execute();
if (isPromise(ruleResult1) || isPromise(ruleResult2)) {
return Promise.all([ruleResult1, ruleResult2]).then(result => result[0] || result[1]);
}
return rule1.execute() || rule2.execute();
}
}
Rule.or = function(rule1: Rule, rule2: Rule){
const rule = new OrRule();
rule.add(rule1);
rule.add(rule2);
return rule;
};