UNPKG

@discipl/law-reg

Version:

Discipl Law and Regulation Compliance Library

51 lines (37 loc) 1.55 kB
"use strict"; 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;