formula-functionizer
Version:
A tool for parsing formulas and create reusable functions
56 lines • 3.9 kB
JavaScript
import { FormulaError } from './errors.enum';
export function trimEdges(text) {
return text.substring(1, text.length - 1);
}
export function oppositeNumber(value) {
return -1 * value;
}
export function throwFormulaError(type) {
if (Object.values(FormulaError).includes(type)) {
throw new Error(type);
}
else {
throw new Error(FormulaError.ERROR);
}
}
export function callFunction(functions, functionName, args) {
return functions[functionName].apply(functions, args);
}
export function checkFunctionExistence(functions, functionName) {
if (!functions[functionName]) {
throwFormulaError(FormulaError.NAME);
}
}
var excelComparisonTypePriority = {
number: 1,
string: 2,
boolean: 3,
undefined: 4,
};
export function excelifyComparison(javascriptComparisonFunction) {
return function (a, b) {
var typeOfA = typeof a;
var 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]);
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi91dGlscy5mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVk7SUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWE7SUFDMUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFrQjtJQUNsRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdkI7U0FBTTtRQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3JDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQzFCLFNBQThELEVBQzlELFlBQW9CLEVBQ3BCLElBQVc7SUFFWCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBdkIsU0FBUyxFQUFrQixJQUFJLEVBQUU7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsU0FBOEQsRUFDOUQsWUFBb0I7SUFFcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUM1QixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEM7QUFDSCxDQUFDO0FBVUQsSUFBTSwyQkFBMkIsR0FBRztJQUNsQyxNQUFNLEVBQUUsQ0FBQztJQUNULE1BQU0sRUFBRSxDQUFDO0lBQ1QsT0FBTyxFQUFFLENBQUM7SUFDVixTQUFTLEVBQUUsQ0FBQztDQUNiLENBQUM7QUFFRixNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLDRCQUdZO0lBRVosT0FBTyxVQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1YsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUE0QixDQUFDO1FBQ2xELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBNEIsQ0FBQztRQUVsRCxvRUFBb0U7UUFDcEUsSUFBSSxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFDbkQsT0FBTyxHQUFHLFdBQVcsQ0FBQztZQUN0QixDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUNuRCxPQUFPLEdBQUcsV0FBVyxDQUFDO1lBQ3RCLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDVjtRQUVELElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUN2QixJQUFJLE9BQU8sS0FBSyxRQUFRLEVBQUU7Z0JBQ3hCLENBQUMsR0FBSSxDQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hDLENBQUMsR0FBSSxDQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDakM7WUFDRCxPQUFPLDRCQUE0QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzQzthQUFNO1lBQ0wsT0FBTyxDQUNMLDJCQUEyQixDQUFDLE9BQU8sQ0FBQztnQkFDcEMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQ3JDLENBQUM7U0FDSDtJQUNILENBQUMsQ0FBQztBQUNKLENBQUMifQ==