UNPKG

jexl-functions-fork

Version:
307 lines (306 loc) 12.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var jexl_1 = require("@digifi/jexl"); var module_1 = require("../utils/module"); exports.default = (0, module_1.createModule)(function (_a, _b) { var safeFlatten = _a.safeFlatten, coerceToNumber = _a.coerceToNumber, validateArrayMaxSize = _a.validateArrayMaxSize, evalCriteriaParseResult = _a.evalCriteriaParseResult, parseCriteriaExpression = _a.parseCriteriaExpression, validateCriteriaMaxLength = _a.validateCriteriaMaxLength; var defaultMaxArraySize = _b.defaultMaxArraySize; var QUOTIENT = function (numerator, denominator) { return Math.floor(coerceToNumber(numerator) / coerceToNumber(denominator)); }; var RADIANS = function (value) { return (coerceToNumber(value) * Math.PI) / 180; }; var UNFLATTENPRODUCT = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } validateArrayMaxSize(args); return args.reduce(function (product, arg) { return product * coerceToNumber(arg); }, 1); }; var PRODUCT = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return UNFLATTENPRODUCT.apply(void 0, safeFlatten(args)); }; var ROUNDDOWN = function (value, digits) { var coercedValue = coerceToNumber(value); var coercedDigits = coerceToNumber(digits); var sign = coercedValue > 0 ? 1 : -1; return (sign * Math.floor(Math.abs(coercedValue) * Math.pow(10, coercedDigits))) / Math.pow(10, coercedDigits); }; var ROUNDUP = function (value, digits) { var coercedValue = coerceToNumber(value); var coercedDigits = coerceToNumber(digits); var sign = coercedValue > 0 ? 1 : -1; return (sign * Math.ceil(Math.abs(coercedValue) * Math.pow(10, coercedDigits))) / Math.pow(10, coercedDigits); }; var SEC = function (value) { return 1 / Math.cos(coerceToNumber(value)); }; var SECH = function (value) { var coercedValue = coerceToNumber(value); return 2 / (Math.exp(coercedValue) + Math.exp(-coercedValue)); }; var SIN = function (value) { return Math.sin(coerceToNumber(value)); }; var SINH = function (value) { var coercedValue = coerceToNumber(value); return (Math.exp(coercedValue) - Math.exp(-coercedValue)) / 2; }; var SQRT = function (value) { return Math.sqrt(coerceToNumber(value)); }; var SQRTPI = function (value) { return Math.sqrt(coerceToNumber(value) * Math.PI); }; var TAN = function (value) { return Math.tan(coerceToNumber(value)); }; var TANH = function (value) { var exp = Math.exp(2 * coerceToNumber(value)); return (exp - 1) / (exp + 1); }; var TRUNC = function (value, digits) { var coercedValue = coerceToNumber(value); var coercedDigits = coerceToNumber(digits); var sign = coercedValue > 0 ? 1 : -1; return (sign * Math.floor(Math.abs(coercedValue) * Math.pow(10, coercedDigits))) / Math.pow(10, coercedDigits); }; var SUM = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return safeFlatten(args).reduce(function (previousValue, arg) { return previousValue + coerceToNumber(arg); }, 0); }; var SUMSQ = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return safeFlatten(args).reduce(function (previousValue, arg) { var coercedArg = coerceToNumber(arg); return previousValue + (coercedArg * coercedArg); }, 0); }; var SUMX2MY2 = function (firstArray, secondArray) { var transformedFirstArray = Array.isArray(firstArray) ? firstArray : [firstArray]; var transformedSecondArray = Array.isArray(secondArray) ? secondArray : [secondArray]; validateArrayMaxSize(transformedFirstArray); validateArrayMaxSize(transformedSecondArray); return transformedFirstArray.reduce(function (previousValue, arg, index) { var coercedArg = coerceToNumber(arg); var coercedSecondArg = coerceToNumber(transformedSecondArray[index]); return previousValue + (coercedArg * coercedArg - coercedSecondArg * coercedSecondArg); }, 0); }; var SUMX2PY2 = function (firstArray, secondArray) { var transformedFirstArray = Array.isArray(firstArray) ? firstArray : [firstArray]; var transformedSecondArray = Array.isArray(secondArray) ? secondArray : [secondArray]; validateArrayMaxSize(transformedFirstArray); validateArrayMaxSize(transformedSecondArray); return transformedFirstArray.reduce(function (previousValue, arg, index) { var coercedArg = coerceToNumber(arg); var coercedSecondArg = coerceToNumber(transformedSecondArray[index]); return previousValue + (coercedArg * coercedArg + coercedSecondArg * coercedSecondArg); }, 0); }; var SUMXMY2 = function (firstArray, secondArray) { var transformedFirstArray = Array.isArray(firstArray) ? firstArray : [firstArray]; var transformedSecondArray = Array.isArray(secondArray) ? secondArray : [secondArray]; validateArrayMaxSize(transformedFirstArray); validateArrayMaxSize(transformedSecondArray); return transformedFirstArray.reduce(function (previousValue, arg, index) { var coercedArg = coerceToNumber(arg); var coercedSecondArg = coerceToNumber(transformedSecondArray[index]); return previousValue + Math.pow(coercedArg - coercedSecondArg, 2); }, 0); }; var SUMIF = function (range, criteria, sumRange) { var flattenRange = safeFlatten(range); var flattenSumRange = sumRange ? safeFlatten(sumRange) : flattenRange; if (typeof criteria !== 'string') { throw new jexl_1.ExecutionError('Criteria should be a string.'); } validateCriteriaMaxLength(criteria); var parseResult = parseCriteriaExpression(criteria); return flattenRange.reduce(function (result, valueInRange, index) { var evaluationResult = evalCriteriaParseResult(parseResult, valueInRange); return evaluationResult ? result + coerceToNumber(flattenSumRange[index]) : result; }, 0); }; var ABS = function (value) { return Math.abs(coerceToNumber(value)); }; var ACOS = function (value) { return Math.acos(coerceToNumber(value)); }; var ACOSH = function (value) { return Math.acosh(coerceToNumber(value)); }; var ACOT = function (value) { return Math.atan(1 / coerceToNumber(value)); }; var ACOTH = function (value) { var coercedValue = coerceToNumber(value); return 0.5 * Math.log((coercedValue + 1) / (coercedValue - 1)); }; var ASIN = function (value) { return Math.asin(coerceToNumber(value)); }; var ASINH = function (value) { return Math.asinh(coerceToNumber(value)); }; var ATAN = function (value) { return Math.atan(coerceToNumber(value)); }; var ATAN2 = function (firstValue, secondValue) { return Math.atan2(coerceToNumber(firstValue), coerceToNumber(secondValue)); }; var ATANH = function (value) { return Math.atanh(coerceToNumber(value)); }; var COS = function (value) { return Math.cos(coerceToNumber(value)); }; var COSH = function (value) { return Math.cosh(coerceToNumber(value)); }; var COT = function (value) { return 1 / Math.tan(coerceToNumber(value)); }; var COTH = function (value) { var coercedValue = coerceToNumber(value); return (Math.exp(2 * coercedValue) + 1) / (Math.exp(2 * coercedValue) - 1); }; var CSC = function (value) { return 1 / Math.sin(coerceToNumber(value)); }; var CSCH = function (value) { var coercedValue = coerceToNumber(value); return 2 / (Math.exp(coercedValue) - Math.exp(-coercedValue)); }; var E = function () { return Math.E; }; var EVEN = function (value) { var flooredValue = Math.floor(coerceToNumber(value)); var isEvenFlooredValue = flooredValue % 2 === 0; if (value === flooredValue && isEvenFlooredValue) { return value; } return isEvenFlooredValue ? flooredValue + 2 : flooredValue + 1; }; var EXP = function (value) { return Math.exp(coerceToNumber(value)); }; var LN = function (value) { return Math.log(coerceToNumber(value)); }; var LOG = function (value, base) { return Math.log(coerceToNumber(value)) / Math.log(coerceToNumber(base)); }; var MOD = function (value, divisor) { var coercedValue = coerceToNumber(value); var coercedDivisor = coerceToNumber(divisor); var modulus = Math.abs(coercedValue % coercedDivisor); var result = coercedValue < 0 ? coercedDivisor - modulus : modulus; return coercedDivisor > 0 ? result : -result; }; var ODD = function (value) { var coercedValue = coerceToNumber(value); var ceilledValue = Math.ceil(Math.abs(coercedValue)); var result = ceilledValue & 1 ? ceilledValue : ceilledValue + 1; return coercedValue >= 0 ? result : -result; }; var PI = function () { return Math.PI; }; var POWER = function (value, power) { return Math.pow(coerceToNumber(value), coerceToNumber(power)); }; var RAND = function () { return Math.random(); }; var RANDBETWEEN = function (bottom, top) { var coercedBottom = coerceToNumber(bottom); var coercedTop = coerceToNumber(top); return coercedBottom + Math.ceil((coercedTop - coercedBottom + 1) * Math.random()) - 1; }; var ROUND = function (value, digits) { var coercedValue = coerceToNumber(value); var coercedDigits = coerceToNumber(digits); return Math.round(coercedValue * Math.pow(10, coercedDigits)) / Math.pow(10, coercedDigits); }; var BASE = function (value, radix, minLength) { var coercedValue = coerceToNumber(value); var coercedRadix = coerceToNumber(radix); var coercedMinLength = coerceToNumber(minLength); var valueInString = coercedValue.toString(coercedRadix); var digitsToAdd = coercedMinLength + 1 - valueInString.length; if (digitsToAdd > defaultMaxArraySize) { throw new jexl_1.ExecutionError("Min length should be less or equal than: ".concat(coercedMinLength - 1 + valueInString.length)); } return new Array(Math.max(coercedMinLength + 1 - valueInString.length, 0)).join('0') + valueInString; }; return { QUOTIENT: QUOTIENT, RADIANS: RADIANS, PRODUCT: PRODUCT, ROUNDDOWN: ROUNDDOWN, ROUNDUP: ROUNDUP, SEC: SEC, SECH: SECH, SIN: SIN, SINH: SINH, SQRT: SQRT, SQRTPI: SQRTPI, TAN: TAN, TANH: TANH, TRUNC: TRUNC, SUM: SUM, SUMSQ: SUMSQ, SUMX2MY2: SUMX2MY2, SUMX2PY2: SUMX2PY2, SUMXMY2: SUMXMY2, SUMIF: SUMIF, ABS: ABS, ROUND: ROUND, RANDBETWEEN: RANDBETWEEN, RAND: RAND, PI: PI, POWER: POWER, ODD: ODD, LOG: LOG, MOD: MOD, EVEN: EVEN, EXP: EXP, LN: LN, CSC: CSC, CSCH: CSCH, COT: COT, COTH: COTH, E: E, ASIN: ASIN, ATAN: ATAN, COS: COS, COSH: COSH, ATAN2: ATAN2, ATANH: ATANH, ACOS: ACOS, ACOSH: ACOSH, ACOT: ACOT, ACOTH: ACOTH, ASINH: ASINH, BASE: BASE, }; });