@discipl/law-reg
Version:
Discipl Law and Regulation Compliance Library
51 lines (37 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SumExpressionChecker = void 0;
var _big_util = require("../utils/big_util");
var _baseSubExpressionChecker = require("./baseSubExpressionChecker");
class SumExpressionChecker extends _baseSubExpressionChecker.BaseSubExpressionChecker {
async checkSubExpression(fact, ssid, context) {
let sumResult = 0;
for (const op of fact.operands) {
if (!_big_util.BigUtil.isNumeric(sumResult)) {
break;
}
const newContext = this._getContextExplainer().extendContextWithExplanation(context);
const operandResult = await this._getExpressionChecker().checkExpression(op, ssid, newContext);
this.logger.debug('OperandResult in SUM', String(operandResult), 'for operand', op);
const opArray = Array.isArray(operandResult) ? operandResult : [operandResult];
for (const arrayOp of opArray) {
this.logger.debug('ArrayOperandResult in SUM', String(arrayOp), 'for operand', op);
if (arrayOp === undefined) {
sumResult = undefined;
break;
} else if (!_big_util.BigUtil.isNumeric(arrayOp)) {
sumResult = false;
break;
} else {
sumResult = _big_util.BigUtil.add(sumResult, arrayOp);
}
}
}
this.logger.debug('Resolved SUM as', String(sumResult));
this._getContextExplainer().extendContextExplanationWithResult(context, sumResult);
return sumResult;
}
}
exports.SumExpressionChecker = SumExpressionChecker;