From 3e9583e4399f1c1ce2c8e10c8a03948d87c3f344 Mon Sep 17 00:00:00 2001 From: fayyazarshad Date: Thu, 20 Feb 2020 12:25:22 -0800 Subject: [PATCH 1/3] Removed isFinite method of Lodash --- packages/optimizely-sdk/lib/utils/fns/index.js | 2 +- packages/optimizely-sdk/lib/utils/fns/index.tests.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index 4895106a3..ab0769e28 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -46,7 +46,7 @@ module.exports = { return Math.round(new Date().getTime()); }, isFinite: function(number) { - return _isFinite(number) && Math.abs(number) <= MAX_NUMBER_LIMIT; + return typeof number == 'number' && Math.abs(number) <= MAX_NUMBER_LIMIT; }, keyBy: function(arr, key) { if (!arr) return {}; diff --git a/packages/optimizely-sdk/lib/utils/fns/index.tests.js b/packages/optimizely-sdk/lib/utils/fns/index.tests.js index e1b92aa30..1515094ff 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.tests.js @@ -25,6 +25,8 @@ describe('lib/utils/fns', function() { assert.isFalse(fns.isFinite(Infinity)); assert.isFalse(fns.isFinite(-Infinity)); assert.isFalse(fns.isFinite(NaN)); + assert.isFalse(fns.isFinite(undefined)); + assert.isFalse(fns.isFinite('3')); assert.isFalse(fns.isFinite(Math.pow(2, 53) + 2)); assert.isFalse(fns.isFinite(-Math.pow(2, 53) - 2)); }); From eee13b0152cb8855fd4df58b7c1ed2c2cd309dbf Mon Sep 17 00:00:00 2001 From: fayyazarshad Date: Thu, 20 Feb 2020 13:03:42 -0800 Subject: [PATCH 2/3] Fixed lint issues --- packages/optimizely-sdk/lib/utils/fns/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index ab0769e28..1da3197ad 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -14,10 +14,8 @@ * limitations under the License. */ var uuid = require('uuid'); -var _isFinite = require('lodash/isFinite'); -var keyBy = require('@optimizely/js-sdk-utils').keyBy; var MAX_NUMBER_LIMIT = Math.pow(2, 53); - +var keyBy = require('@optimizely/js-sdk-utils').keyBy; module.exports = { assign: function (target) { if (!target) { @@ -29,7 +27,7 @@ module.exports = { var to = Object(target); for (var index = 1; index < arguments.length; index++) { var nextSource = arguments[index]; - if (nextSource !== null && nextSource !== undefined) { + if (nextSource !== null && nextSource !== undefined) { for (var nextKey in nextSource) { // Avoid bugs when hasOwnProperty is shadowed if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { From b965ce5bd99d219d6f1b38978003576d95d2e840 Mon Sep 17 00:00:00 2001 From: fayyazarshad Date: Thu, 27 Feb 2020 10:46:06 -0800 Subject: [PATCH 3/3] changed the method name --- .../index.js | 12 ++++---- .../optimizely-sdk/lib/optimizely/index.js | 2 +- .../lib/utils/attributes_validator/index.js | 2 +- .../event_processor_config_validator/index.js | 4 +-- .../optimizely-sdk/lib/utils/fns/index.js | 6 ++-- .../lib/utils/fns/index.tests.js | 28 +++++++++---------- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.js index 0fd0f2ff6..91a304e07 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.js @@ -99,7 +99,7 @@ function exactEvaluator(condition, userAttributes, logger) { var userValue = userAttributes[conditionName]; var userValueType = typeof userValue; - if (!isValueTypeValidForExactConditions(conditionValue) || (fns.isNumber(conditionValue) && !fns.isFinite(conditionValue))) { + if (!isValueTypeValidForExactConditions(conditionValue) || (fns.isNumber(conditionValue) && !fns.isSafeInteger(conditionValue))) { logger.log(LOG_LEVEL.WARNING, sprintf(LOG_MESSAGES.UNEXPECTED_CONDITION_VALUE, MODULE_NAME, JSON.stringify(condition))); return null; } @@ -114,7 +114,7 @@ function exactEvaluator(condition, userAttributes, logger) { return null; } - if (fns.isNumber(userValue) && !fns.isFinite(userValue)) { + if (fns.isNumber(userValue) && !fns.isSafeInteger(userValue)) { logger.log(LOG_LEVEL.WARNING, sprintf(LOG_MESSAGES.OUT_OF_BOUNDS, MODULE_NAME, JSON.stringify(condition), conditionName)); return null; } @@ -152,7 +152,7 @@ function greaterThanEvaluator(condition, userAttributes, logger) { var userValueType = typeof userValue; var conditionValue = condition.value; - if (!fns.isFinite(conditionValue)) { + if (!fns.isSafeInteger(conditionValue)) { logger.log(LOG_LEVEL.WARNING, sprintf(LOG_MESSAGES.UNEXPECTED_CONDITION_VALUE, MODULE_NAME, JSON.stringify(condition))); return null; } @@ -167,7 +167,7 @@ function greaterThanEvaluator(condition, userAttributes, logger) { return null; } - if (!fns.isFinite(userValue)) { + if (!fns.isSafeInteger(userValue)) { logger.log(LOG_LEVEL.WARNING, sprintf(LOG_MESSAGES.OUT_OF_BOUNDS, MODULE_NAME, JSON.stringify(condition), conditionName)); return null; } @@ -191,7 +191,7 @@ function lessThanEvaluator(condition, userAttributes, logger) { var userValueType = typeof userValue; var conditionValue = condition.value; - if (!fns.isFinite(conditionValue)) { + if (!fns.isSafeInteger(conditionValue)) { logger.log(LOG_LEVEL.WARNING, sprintf(LOG_MESSAGES.UNEXPECTED_CONDITION_VALUE, MODULE_NAME, JSON.stringify(condition))); return null; } @@ -206,7 +206,7 @@ function lessThanEvaluator(condition, userAttributes, logger) { return null; } - if (!fns.isFinite(userValue)) { + if (!fns.isSafeInteger(userValue)) { logger.log(LOG_LEVEL.WARNING, sprintf(LOG_MESSAGES.OUT_OF_BOUNDS, MODULE_NAME, JSON.stringify(condition), conditionName)); return null; } diff --git a/packages/optimizely-sdk/lib/optimizely/index.js b/packages/optimizely-sdk/lib/optimizely/index.js index 610297a87..9c79e5a41 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.js +++ b/packages/optimizely-sdk/lib/optimizely/index.js @@ -1029,7 +1029,7 @@ Optimizely.prototype.onReady = function(options) { if (typeof options === 'object' && options !== null) { timeout = options.timeout; } - if (!fns.isFinite(timeout)) { + if (!fns.isSafeInteger(timeout)) { timeout = DEFAULT_ONREADY_TIMEOUT; } diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.js b/packages/optimizely-sdk/lib/utils/attributes_validator/index.js index 9e8e4884a..d2a066744 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.js +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.js @@ -47,6 +47,6 @@ module.exports = { isAttributeValid: function(attributeKey, attributeValue) { return (typeof attributeKey === 'string') && - (typeof attributeValue === 'string' || typeof attributeValue === 'boolean' || (fns.isNumber(attributeValue) && fns.isFinite(attributeValue))); + (typeof attributeValue === 'string' || typeof attributeValue === 'boolean' || (fns.isNumber(attributeValue) && fns.isSafeInteger(attributeValue))); }, }; diff --git a/packages/optimizely-sdk/lib/utils/event_processor_config_validator/index.js b/packages/optimizely-sdk/lib/utils/event_processor_config_validator/index.js index b0fc63816..c7fb146f7 100644 --- a/packages/optimizely-sdk/lib/utils/event_processor_config_validator/index.js +++ b/packages/optimizely-sdk/lib/utils/event_processor_config_validator/index.js @@ -22,7 +22,7 @@ var fns = require('../fns'); * @returns boolean */ function validateEventBatchSize(eventBatchSize) { - return fns.isFinite(eventBatchSize) && eventBatchSize >= 1; + return fns.isSafeInteger(eventBatchSize) && eventBatchSize >= 1; } /** @@ -31,7 +31,7 @@ function validateEventBatchSize(eventBatchSize) { * @returns boolean */ function validateEventFlushInterval(eventFlushInterval) { - return fns.isFinite(eventFlushInterval) && eventFlushInterval > 0; + return fns.isSafeInteger(eventFlushInterval) && eventFlushInterval > 0; } module.exports = { diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index 1da3197ad..ff2cede49 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -14,7 +14,7 @@ * limitations under the License. */ var uuid = require('uuid'); -var MAX_NUMBER_LIMIT = Math.pow(2, 53); +var MAX_SAFE_INTEGER_LIMIT = Math.pow(2, 53); var keyBy = require('@optimizely/js-sdk-utils').keyBy; module.exports = { assign: function (target) { @@ -43,8 +43,8 @@ module.exports = { currentTimestamp: function() { return Math.round(new Date().getTime()); }, - isFinite: function(number) { - return typeof number == 'number' && Math.abs(number) <= MAX_NUMBER_LIMIT; + isSafeInteger: function(number) { + return typeof number == 'number' && Math.abs(number) <= MAX_SAFE_INTEGER_LIMIT; }, keyBy: function(arr, key) { if (!arr) return {}; diff --git a/packages/optimizely-sdk/lib/utils/fns/index.tests.js b/packages/optimizely-sdk/lib/utils/fns/index.tests.js index 1515094ff..9a6d016fc 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.tests.js @@ -22,21 +22,21 @@ describe('lib/utils/fns', function() { describe('APIs', function() { describe('isFinite', function() { it('should return false for invalid numbers', function() { - assert.isFalse(fns.isFinite(Infinity)); - assert.isFalse(fns.isFinite(-Infinity)); - assert.isFalse(fns.isFinite(NaN)); - assert.isFalse(fns.isFinite(undefined)); - assert.isFalse(fns.isFinite('3')); - assert.isFalse(fns.isFinite(Math.pow(2, 53) + 2)); - assert.isFalse(fns.isFinite(-Math.pow(2, 53) - 2)); + assert.isFalse(fns.isSafeInteger(Infinity)); + assert.isFalse(fns.isSafeInteger(-Infinity)); + assert.isFalse(fns.isSafeInteger(NaN)); + assert.isFalse(fns.isSafeInteger(undefined)); + assert.isFalse(fns.isSafeInteger('3')); + assert.isFalse(fns.isSafeInteger(Math.pow(2, 53) + 2)); + assert.isFalse(fns.isSafeInteger(-Math.pow(2, 53) - 2)); }); it('should return true for valid numbers', function() { - assert.isTrue(fns.isFinite(0)); - assert.isTrue(fns.isFinite(10)); - assert.isTrue(fns.isFinite(10.5)); - assert.isTrue(fns.isFinite(Math.pow(2, 53))); - assert.isTrue(fns.isFinite(-Math.pow(2, 53))); + assert.isTrue(fns.isSafeInteger(0)); + assert.isTrue(fns.isSafeInteger(10)); + assert.isTrue(fns.isSafeInteger(10.5)); + assert.isTrue(fns.isSafeInteger(Math.pow(2, 53))); + assert.isTrue(fns.isSafeInteger(-Math.pow(2, 53))); }); }); @@ -58,7 +58,7 @@ describe('lib/utils/fns', function() { row4: { key1: 'row4', key2: 'key2row4' } }); }); - + it('should return empty object when first argument is null or undefined', function() { var obj = fns.keyBy(null, 'key1'); assert.isEmpty(obj); @@ -67,7 +67,7 @@ describe('lib/utils/fns', function() { assert.isEmpty(obj); }); }); - + describe('isNumber', function() { it('should return true in case of number', function() { assert.isTrue(fns.isNumber(3));