UNPKG

jexl-functions-fork

Version:
225 lines (224 loc) 9.22 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; 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) { var evalCriteriaParseResult = _a.evalCriteriaParseResult, parseCriteriaExpression = _a.parseCriteriaExpression, validateCriteriaMaxLength = _a.validateCriteriaMaxLength, safeFlatten = _a.safeFlatten, coerceToNumber = _a.coerceToNumber; var AVERAGE = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var flattenArgs = safeFlatten(args); var sum = flattenArgs.reduce(function (previousSum, arg) { return typeof arg === 'number' ? previousSum + coerceToNumber(arg) : previousSum; }, 0); return sum / flattenArgs.length; }; var AVERAGEA = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var flattenArgs = safeFlatten(args); var _a = flattenArgs.reduce(function (previousResult, arg) { if (typeof arg === 'number' || arg === true) { return { sum: previousResult.sum + Number(arg), items: previousResult.items + 1, }; } if (arg !== null) { return __assign(__assign({}, previousResult), { items: previousResult.items + 1 }); } return previousResult; }, { items: 0, sum: 0 }), sum = _a.sum, items = _a.items; return sum / items; }; var AVERAGEIF = function (range, criteria, averageRange) { var flattenRange = safeFlatten(range); var flattenAverageRange = averageRange ? safeFlatten(averageRange) : flattenRange; if (typeof criteria !== 'string') { throw new jexl_1.ExecutionError('Criteria should be a string.'); } validateCriteriaMaxLength(criteria); var parseResult = parseCriteriaExpression(criteria); var _a = flattenRange.reduce(function (data, valueInRange, index) { var evaluationResult = evalCriteriaParseResult(parseResult, valueInRange); return evaluationResult ? { result: data.result + coerceToNumber(flattenAverageRange[index]), count: data.count + 1 } : data; }, { count: 0, result: 0 }), count = _a.count, result = _a.result; return result / count; }; var COUNTIF = function (range, criteria) { var flattenRange = safeFlatten(range); if (typeof criteria !== 'string') { throw new jexl_1.ExecutionError('Criteria should be a string.'); } validateCriteriaMaxLength(criteria); var parseResult = parseCriteriaExpression(criteria); return flattenRange.reduce(function (previousCount, valueInRange) { var evaluationResult = evalCriteriaParseResult(parseResult, valueInRange); return evaluationResult ? previousCount + 1 : previousCount; }, 0); }; var MAX = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var flattenArg = safeFlatten(args); var filteredArgs = flattenArg.filter(function (arg) { return typeof arg === 'number'; }); return Math.max.apply(Math, filteredArgs); }; var MAXA = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var result = safeFlatten(args).reduce(function (maxValue, arg) { var coercedValue = coerceToNumber(arg); var valueForCompare = Number.isNaN(coercedValue) ? 0 : coercedValue; return valueForCompare > maxValue ? valueForCompare : maxValue; }, -Infinity); return result === -Infinity ? 0 : result; }; var MIN = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var flattenArg = safeFlatten(args); var filteredArgs = flattenArg.filter(function (arg) { return typeof arg === 'number'; }); return Math.min.apply(Math, filteredArgs); }; var MINA = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var result = safeFlatten(args).reduce(function (minValue, arg) { var coercedValue = coerceToNumber(arg); var valueForCompare = Number.isNaN(coercedValue) ? 0 : coercedValue; return minValue > valueForCompare ? valueForCompare : minValue; }, Infinity); return result === Infinity ? 0 : result; }; var MODE = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var countsByValues = {}; var currentMostCommonValue; for (var _a = 0, _b = safeFlatten(args); _a < _b.length; _a++) { var arg = _b[_a]; var coercedArg = coerceToNumber(arg); var newCount = countsByValues[coercedArg] + 1; countsByValues[coercedArg] = newCount; if (currentMostCommonValue === undefined || countsByValues[currentMostCommonValue] < newCount) { currentMostCommonValue = coercedArg; } } return currentMostCommonValue; }; var STANDARDIZE = function (value, mean, sd) { return (coerceToNumber(value) - coerceToNumber(mean)) / coerceToNumber(sd); }; var SMALL = function (array, k) { var numberArray = safeFlatten(array).map(function (item) { return coerceToNumber(item); }); return numberArray.sort(function (firstItem, secondItem) { return firstItem - secondItem; })[coerceToNumber(k) - 1]; }; var LARGE = function (array, k) { var numberArray = safeFlatten(array).map(function (item) { return coerceToNumber(item); }); return numberArray.sort(function (firstItem, secondItem) { return secondItem - firstItem; })[coerceToNumber(k) - 1]; }; var COUNT = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return safeFlatten(args).filter(function (arg) { return typeof arg === 'number'; }).length; }; var COUNTA = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return args.length; }; var COUNTBLANK = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return safeFlatten(args).filter(function (arg) { return arg === null || arg === undefined || arg === ''; }).length; }; var COUNTUNIQUE = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var visitedElements = {}; var count = 0; for (var _a = 0, _b = safeFlatten(args); _a < _b.length; _a++) { var arg = _b[_a]; if ((typeof arg === 'object' && arg !== null) || typeof arg === 'function') { continue; } var identifier = "".concat(typeof arg, "-").concat(arg); var wasVisited = visitedElements[identifier]; if (!wasVisited) { count++; visitedElements[identifier] = true; } } return count; }; var MEDIAN = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var numberArray = safeFlatten(args).map(function (item) { return coerceToNumber(item); }); var half = Math.floor(numberArray.length / 2); var sortedArray = numberArray.sort(function (firstArg, secondArg) { return firstArg - secondArg; }); if (sortedArray.length % 2) { return sortedArray[half]; } return (sortedArray[half - 1] + sortedArray[half]) / 2.0; }; return { AVERAGE: AVERAGE, AVERAGEA: AVERAGEA, MAX: MAX, MAXA: MAXA, MIN: MIN, MINA: MINA, MODE: MODE, STANDARDIZE: STANDARDIZE, SMALL: SMALL, LARGE: LARGE, COUNT: COUNT, COUNTA: COUNTA, COUNTBLANK: COUNTBLANK, MEDIAN: MEDIAN, AVERAGEIF: AVERAGEIF, COUNTIF: COUNTIF, COUNTUNIQUE: COUNTUNIQUE, }; });