formula-functionizer
Version:
A tool for parsing formulas and create reusable functions
65 lines • 4.43 kB
JavaScript
;
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==