UNPKG

formula-functionizer

Version:

A tool for parsing formulas and create reusable functions

65 lines 4.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.excelifyComparison = exports.checkFunctionExistence = exports.callFunction = exports.throwFormulaError = exports.oppositeNumber = exports.trimEdges = void 0; const errors_enum_1 = require("./errors.enum"); function trimEdges(text) { return text.substring(1, text.length - 1); } exports.trimEdges = trimEdges; function oppositeNumber(value) { return -1 * value; } exports.oppositeNumber = oppositeNumber; function throwFormulaError(type) { if (Object.values(errors_enum_1.FormulaError).includes(type)) { throw new Error(type); } else { throw new Error(errors_enum_1.FormulaError.ERROR); } } exports.throwFormulaError = throwFormulaError; function callFunction(functions, functionName, args) { return functions[functionName](...args); } exports.callFunction = callFunction; function checkFunctionExistence(functions, functionName) { if (!functions[functionName]) { throwFormulaError(errors_enum_1.FormulaError.NAME); } } exports.checkFunctionExistence = checkFunctionExistence; const excelComparisonTypePriority = { number: 1, string: 2, boolean: 3, undefined: 4, }; function excelifyComparison(javascriptComparisonFunction) { return (a, b) => { let typeOfA = typeof a; let typeOfB = typeof b; // fallback to undefined if value type is object (handles null case) if (typeOfA === 'object' || typeOfA === 'undefined') { typeOfA = 'undefined'; a = null; } if (typeOfB === 'object' || typeOfB === 'undefined') { typeOfB = 'undefined'; b = null; } if (typeOfA === typeOfB) { if (typeOfA === 'string') { a = a.toLowerCase(); b = b.toLowerCase(); } return javascriptComparisonFunction(a, b); } else { return (excelComparisonTypePriority[typeOfA] < excelComparisonTypePriority[typeOfB]); } }; } exports.excelifyComparison = excelifyComparison; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi91dGlscy5mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBQTZDO0FBRTdDLFNBQWdCLFNBQVMsQ0FBQyxJQUFZO0lBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxTQUFnQixjQUFjLENBQUMsS0FBYTtJQUMxQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQixDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxJQUFrQjtJQUNsRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3ZCO1NBQU07UUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDckM7QUFDSCxDQUFDO0FBTkQsOENBTUM7QUFFRCxTQUFnQixZQUFZLENBQzFCLFNBQThELEVBQzlELFlBQW9CLEVBQ3BCLElBQVc7SUFFWCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFORCxvQ0FNQztBQUVELFNBQWdCLHNCQUFzQixDQUNwQyxTQUE4RCxFQUM5RCxZQUFvQjtJQUVwQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzVCLGlCQUFpQixDQUFDLDBCQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBUEQsd0RBT0M7QUFVRCxNQUFNLDJCQUEyQixHQUFHO0lBQ2xDLE1BQU0sRUFBRSxDQUFDO0lBQ1QsTUFBTSxFQUFFLENBQUM7SUFDVCxPQUFPLEVBQUUsQ0FBQztJQUNWLFNBQVMsRUFBRSxDQUFDO0NBQ2IsQ0FBQztBQUVGLFNBQWdCLGtCQUFrQixDQUNoQyw0QkFHWTtJQUVaLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDZCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQTRCLENBQUM7UUFDbEQsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUE0QixDQUFDO1FBRWxELG9FQUFvRTtRQUNwRSxJQUFJLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUNuRCxPQUFPLEdBQUcsV0FBVyxDQUFDO1lBQ3RCLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDVjtRQUVELElBQUksT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQ25ELE9BQU8sR0FBRyxXQUFXLENBQUM7WUFDdEIsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNWO1FBRUQsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ3ZCLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRTtnQkFDeEIsQ0FBQyxHQUFJLENBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQyxHQUFJLENBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNqQztZQUNELE9BQU8sNEJBQTRCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU07WUFDTCxPQUFPLENBQ0wsMkJBQTJCLENBQUMsT0FBTyxDQUFDO2dCQUNwQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FDckMsQ0FBQztTQUNIO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWxDRCxnREFrQ0MifQ==