jexl-functions-fork
Version:
Package with available JEXL functions
307 lines (306 loc) • 12.2 kB
JavaScript
;
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,
};
});