@handsontable/formulajs
Advanced tools
Comparing version 2.0.0 to 2.0.1
@@ -1,5 +0,6 @@ | ||
var error = require('./error'); | ||
var error = require('./utils/error'); | ||
var stats = require('./statistical'); | ||
var maths = require('./math-trig'); | ||
var utils = require('./utils'); | ||
var utils = require('./utils/common'); | ||
var evalExpression = require('./utils/criteria-eval'); | ||
@@ -64,3 +65,14 @@ function compact(array) { | ||
for (var p = 1; p < criteria.length; ++p) { | ||
currentCriteriaResult = currentCriteriaResult || eval(database[k][l] + criteria[p]); // jshint ignore:line | ||
if (!currentCriteriaResult) { | ||
var isWildcard = criteria[p] === void 0 || criteria[p] === '*'; | ||
if (isWildcard) { | ||
currentCriteriaResult = true; | ||
} else { | ||
var tokenizedCriteria = evalExpression.parse(criteria[p] + ''); | ||
var tokens = [evalExpression.createToken(database[k][l], evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria); | ||
currentCriteriaResult = evalExpression.compute(tokens); | ||
} | ||
} | ||
} | ||
@@ -67,0 +79,0 @@ } |
@@ -1,3 +0,3 @@ | ||
var error = require('./error'); | ||
var utils = require('./utils'); | ||
var error = require('./utils/error'); | ||
var utils = require('./utils/common'); | ||
@@ -4,0 +4,0 @@ var d1900 = new Date(Date.UTC(1900, 0, 1)); |
@@ -1,5 +0,5 @@ | ||
var error = require('./error'); | ||
var jStat = require('jStat').jStat; | ||
var error = require('./utils/error'); | ||
var jStat = require('@handsontable/jstat'); | ||
var text = require('./text'); | ||
var utils = require('./utils'); | ||
var utils = require('./utils/common'); | ||
var bessel = require('bessel'); | ||
@@ -6,0 +6,0 @@ |
@@ -1,4 +0,4 @@ | ||
var error = require('./error'); | ||
var error = require('./utils/error'); | ||
var dateTime = require('./date-time'); | ||
var utils = require('./utils'); | ||
var utils = require('./utils/common'); | ||
@@ -5,0 +5,0 @@ function validDate(d) { |
@@ -1,2 +0,2 @@ | ||
var error = require('./error'); | ||
var error = require('./utils/error'); | ||
@@ -3,0 +3,0 @@ // TODO |
@@ -1,3 +0,3 @@ | ||
var error = require('./error'); | ||
var utils = require('./utils'); | ||
var error = require('./utils/error'); | ||
var utils = require('./utils/common'); | ||
var information = require('./information'); | ||
@@ -4,0 +4,0 @@ |
@@ -1,3 +0,3 @@ | ||
var error = require('./error'); | ||
var utils = require('./utils'); | ||
var error = require('./utils/error'); | ||
var utils = require('./utils/common'); | ||
@@ -79,3 +79,3 @@ exports.MATCH = function(lookupValue, lookupArray, matchType) { | ||
return error.na; | ||
}; | ||
}; | ||
@@ -82,0 +82,0 @@ exports.HLOOKUP = function (needle, table, index, rangeLookup) { |
@@ -1,5 +0,6 @@ | ||
var utils = require('./utils'); | ||
var error = require('./error'); | ||
var utils = require('./utils/common'); | ||
var error = require('./utils/error'); | ||
var statistical = require('./statistical'); | ||
var information = require('./information'); | ||
var evalExpression = require('./utils/criteria-eval'); | ||
@@ -991,2 +992,3 @@ exports.ABS = function(number) { | ||
range = utils.parseNumberArray(utils.flatten(range)); | ||
if (range instanceof Error) { | ||
@@ -996,5 +998,17 @@ return range; | ||
var result = 0; | ||
var isWildcard = criteria === void 0 || criteria === '*'; | ||
var tokenizedCriteria = isWildcard ? null : evalExpression.parse(criteria + ''); | ||
for (var i = 0; i < range.length; i++) { | ||
result += (eval(range[i] + criteria)) ? range[i] : 0; // jshint ignore:line | ||
var value = range[i]; | ||
if (isWildcard) { | ||
result += value; | ||
} else { | ||
var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria); | ||
result += (evalExpression.compute(tokens) ? value : 0); | ||
} | ||
} | ||
return result; | ||
@@ -1006,24 +1020,43 @@ }; | ||
var range = utils.parseNumberArray(utils.flatten(args.shift())); | ||
if (range instanceof Error) { | ||
return range; | ||
} | ||
var criteria = args; | ||
var criterias = args; | ||
var n_range_elements = range.length; | ||
var n_criterias = criteria.length; | ||
var criteriaLength = criterias.length; | ||
var result = 0; | ||
var result = 0; | ||
for (var i = 0; i < n_range_elements; i++) { | ||
var el = range[i]; | ||
var condition = ''; | ||
for (var c = 0; c < n_criterias; c++) { | ||
condition += el + criteria[c]; | ||
if (c !== n_criterias - 1) { | ||
condition += '&&'; | ||
var value = range[i]; | ||
var isMeetCondition = false; | ||
for (var j = 0; j < criteriaLength; j++) { | ||
var criteria = criterias[j]; | ||
var isWildcard = criteria === void 0 || criteria === '*'; | ||
var computedResult = false; | ||
if (isWildcard) { | ||
computedResult = true; | ||
} else { | ||
var tokenizedCriteria = evalExpression.parse(criteria + ''); | ||
var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria); | ||
computedResult = evalExpression.compute(tokens); | ||
} | ||
// Criterias are calculated as AND so any `false` breakes the loop as unmeet condition | ||
if (!computedResult) { | ||
isMeetCondition = false; | ||
break; | ||
} | ||
isMeetCondition = true; | ||
} | ||
if (eval(condition)) { // jshint ignore:line | ||
result += el; | ||
if (isMeetCondition) { | ||
result += value; | ||
} | ||
} | ||
return result; | ||
@@ -1030,0 +1063,0 @@ }; |
@@ -1,3 +0,3 @@ | ||
var utils = require('./utils'); | ||
var error = require('./error'); | ||
var utils = require('./utils/common'); | ||
var error = require('./utils/error'); | ||
@@ -60,2 +60,2 @@ exports.UNIQUE = function () { | ||
}); | ||
}; | ||
}; |
var mathTrig = require('./math-trig'); | ||
var text = require('./text'); | ||
var jStat = require('jStat').jStat; | ||
var utils = require('./utils'); | ||
var error = require('./error'); | ||
var jStat = require('@handsontable/jstat'); | ||
var utils = require('./utils/common'); | ||
var evalExpression = require('./utils/criteria-eval'); | ||
var error = require('./utils/error'); | ||
var misc = require('./miscellaneous'); | ||
@@ -72,2 +73,3 @@ | ||
average_range = utils.parseNumberArray(utils.flatten(average_range)); | ||
if (average_range instanceof Error) { | ||
@@ -78,8 +80,21 @@ return average_range; | ||
var result = 0; | ||
var isWildcard = criteria === void 0 || criteria === '*'; | ||
var tokenizedCriteria = isWildcard ? null : evalExpression.parse(criteria + ''); | ||
for (var i = 0; i < range.length; i++) { | ||
if (eval(range[i] + criteria)) { // jshint ignore:line | ||
var value = range[i]; | ||
if (isWildcard) { | ||
result += average_range[i]; | ||
average_count++; | ||
} else { | ||
var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria); | ||
if (evalExpression.compute(tokens)) { | ||
result += average_range[i]; | ||
average_count++; | ||
} | ||
} | ||
} | ||
return result / average_count; | ||
@@ -92,15 +107,35 @@ }; | ||
var args = utils.argsToArray(arguments); | ||
var criteria = (args.length - 1) / 2; | ||
var criteriaLength = (args.length - 1) / 2; | ||
var range = utils.flatten(args[0]); | ||
var count = 0; | ||
var result = 0; | ||
for (var i = 0; i < range.length; i++) { | ||
var condition = ''; | ||
for (var j = 0; j < criteria; j++) { | ||
condition += args[2 * j + 1][i] + args[2 * j + 2]; | ||
if (j !== criteria - 1) { | ||
condition += '&&'; | ||
var isMeetCondition = false; | ||
for (var j = 0; j < criteriaLength; j++) { | ||
var value = args[2 * j + 1][i]; | ||
var criteria = args[2 * j + 2]; | ||
var isWildcard = criteria === void 0 || criteria === '*'; | ||
var computedResult = false; | ||
if (isWildcard) { | ||
computedResult = true; | ||
} else { | ||
var tokenizedCriteria = evalExpression.parse(criteria + ''); | ||
var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria); | ||
computedResult = evalExpression.compute(tokens); | ||
} | ||
// Criterias are calculated as AND so any `false` breakes the loop as unmeet condition | ||
if (!computedResult) { | ||
isMeetCondition = false; | ||
break; | ||
} | ||
isMeetCondition = true; | ||
} | ||
if (eval(condition)) { // jshint ignore:line | ||
if (isMeetCondition) { | ||
result += range[i]; | ||
@@ -112,2 +147,3 @@ count++; | ||
var average = result / count; | ||
if (isNaN(average)) { | ||
@@ -435,17 +471,21 @@ return 0; | ||
range = utils.flatten(range); | ||
if (!/[<>=!]/.test(criteria)) { | ||
criteria = '=="' + criteria + '"'; | ||
var isWildcard = criteria === void 0 || criteria === '*'; | ||
if (isWildcard) { | ||
return range.length; | ||
} | ||
var matches = 0; | ||
var tokenizedCriteria = evalExpression.parse(criteria + ''); | ||
for (var i = 0; i < range.length; i++) { | ||
if (typeof range[i] !== 'string') { | ||
if (eval(range[i] + criteria)) { // jshint ignore:line | ||
matches++; | ||
} | ||
} else { | ||
if (eval('"' + range[i] + '"' + criteria)) { // jshint ignore:line | ||
matches++; | ||
} | ||
var value = range[i]; | ||
var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria); | ||
if (evalExpression.compute(tokens)) { | ||
matches++; | ||
} | ||
} | ||
return matches; | ||
@@ -457,2 +497,3 @@ }; | ||
var results = new Array(utils.flatten(args[0]).length); | ||
for (var i = 0; i < results.length; i++) { | ||
@@ -464,10 +505,12 @@ results[i] = true; | ||
var criteria = args[i + 1]; | ||
if (!/[<>=!]/.test(criteria)) { | ||
criteria = '=="' + criteria + '"'; | ||
} | ||
for (var j = 0; j < range.length; j++) { | ||
if (typeof range[j] !== 'string') { | ||
results[j] = results[j] && eval(range[j] + criteria); // jshint ignore:line | ||
} else { | ||
results[j] = results[j] && eval('"' + range[j] + '"' + criteria); // jshint ignore:line | ||
var isWildcard = criteria === void 0 || criteria === '*'; | ||
if (!isWildcard) { | ||
var tokenizedCriteria = evalExpression.parse(criteria + ''); | ||
for (var j = 0; j < range.length; j++) { | ||
var value = range[j]; | ||
var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria); | ||
results[j] = results[j] && evalExpression.compute(tokens); | ||
} | ||
@@ -482,2 +525,3 @@ } | ||
} | ||
return result; | ||
@@ -484,0 +528,0 @@ }; |
@@ -1,3 +0,3 @@ | ||
var utils = require('./utils'); | ||
var error = require('./error'); | ||
var utils = require('./utils/common'); | ||
var error = require('./utils/error'); | ||
@@ -4,0 +4,0 @@ //TODO |
@@ -5,3 +5,3 @@ { | ||
"description": "JavaScript implementation of most Microsoft Excel formula functions", | ||
"version": "2.0.0", | ||
"version": "2.0.1", | ||
"repository": { | ||
@@ -25,4 +25,4 @@ "type": "git", | ||
"dependencies": { | ||
"bessel": "^0.2.0", | ||
"jStat": "^1.7.0" | ||
"@handsontable/jstat": "^1.0.0", | ||
"bessel": "^0.2.0" | ||
}, | ||
@@ -29,0 +29,0 @@ "devDependencies": { |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
41
1
746706
17766
+ Added@handsontable/jstat@^1.0.0
+ Added@handsontable/jstat@1.0.0(transitive)
- RemovedjStat@^1.7.0
- RemovedjStat@1.8.6(transitive)