From 689a6e42d4d862a161d4cf2a1ccd76f4f1835d28 Mon Sep 17 00:00:00 2001 From: fayyazarshad Date: Thu, 20 Feb 2020 18:13:19 -0800 Subject: [PATCH 1/4] Removed forEach method of Lodash --- .../optimizely-sdk/lib/utils/fns/index.js | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index 78912481a..36e9fae2d 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -28,7 +28,25 @@ module.exports = { return _isFinite(number) && Math.abs(number) <= MAX_NUMBER_LIMIT; }, keyBy: require('lodash/keyBy'), - forEach: require('lodash/forEach'), + filter: require('lodash/filter'), + forEach: function(collection, iteratee) { + // checking iteratee is a function otherwise return identity + iteratee = typeof iteratee == 'function' ? iteratee : function(value, index, collection) { + return value; + }; + if (Array.isArray(collection)) { + var index = -1, length = collection == null ? 0 : collection.length; + + while (++index < length) { + if (iteratee(collection[index], index, collection) === false) { + break; + } + } + return collection; + } else { + + } + }, forOwn: require('lodash/forOwn'), uuid: function() { return uuid.v4(); From 66e476e8d777daa09b1c359ae1260d8dea6e04ec Mon Sep 17 00:00:00 2001 From: fayyazarshad Date: Fri, 21 Feb 2020 18:32:12 -0800 Subject: [PATCH 2/4] Removed forEach method of Lodash --- .../lib/core/notification_center/index.js | 6 +++--- .../lib/core/project_config/index.js | 14 +++++++------- packages/optimizely-sdk/lib/utils/fns/index.js | 18 ------------------ 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.js b/packages/optimizely-sdk/lib/core/notification_center/index.js index d908c5c5b..f1e619e8d 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.js +++ b/packages/optimizely-sdk/lib/core/notification_center/index.js @@ -66,7 +66,7 @@ NotificationCenter.prototype.addNotificationListener = function (notificationTyp } var callbackAlreadyAdded = false; - fns.forEach(this.__notificationListeners[notificationType], function (listenerEntry) { + (this.__notificationListeners[notificationType] || []).forEach(function(listenerEntry) { if (listenerEntry.callback === callback) { callbackAlreadyAdded = true; return false; @@ -102,7 +102,7 @@ NotificationCenter.prototype.removeNotificationListener = function (listenerId) var indexToRemove; var typeToRemove; fns.forOwn(this.__notificationListeners, function (listenersForType, notificationType) { - fns.forEach(listenersForType, function (listenerEntry, i) { + (listenersForType || []).forEach(function(listenerEntry, i) { if (listenerEntry.id === listenerId) { indexToRemove = i; typeToRemove = notificationType; @@ -160,7 +160,7 @@ NotificationCenter.prototype.clearNotificationListeners = function (notification */ NotificationCenter.prototype.sendNotifications = function (notificationType, notificationData) { try { - fns.forEach(this.__notificationListeners[notificationType], function (listenerEntry) { + (this.__notificationListeners[notificationType] || []).forEach(function(listenerEntry) { var callback = listenerEntry.callback; try { callback(notificationData); diff --git a/packages/optimizely-sdk/lib/core/project_config/index.js b/packages/optimizely-sdk/lib/core/project_config/index.js index ba781cb79..fdc0cd1a1 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.js @@ -41,7 +41,7 @@ module.exports = { * Conditions of audiences in projectConfig.typedAudiences are not * expected to be string-encoded as they are here in projectConfig.audiences. */ - fns.forEach(projectConfig.audiences, function(audience) { + (projectConfig.audiences || []).forEach(function(audience) { audience.conditions = JSON.parse(audience.conditions); }); projectConfig.audiencesById = fns.keyBy(projectConfig.audiences, 'id'); @@ -52,16 +52,16 @@ module.exports = { projectConfig.groupIdMap = fns.keyBy(projectConfig.groups, 'id'); var experiments; - fns.forEach(projectConfig.groupIdMap, function(group, Id) { - experiments = fns.cloneDeep(group.experiments); - fns.forEach(experiments, function(experiment) { + Object.keys(projectConfig.groupIdMap || {}).forEach(function(Id) { + experiments = fns.cloneDeep(projectConfig.groupIdMap[Id].experiments); + (experiments || []).forEach(function(experiment) { projectConfig.experiments.push(fns.assignIn(experiment, {groupId: Id})); }); }); projectConfig.rolloutIdMap = fns.keyBy(projectConfig.rollouts || [], 'id'); fns.forOwn(projectConfig.rolloutIdMap, function(rollout) { - fns.forEach(rollout.experiments || [], function(experiment) { + (rollout.experiments || []).forEach(function(experiment) { projectConfig.experiments.push(fns.cloneDeep(experiment)); // Creates { : } map inside of the experiment experiment.variationKeyMap = fns.keyBy(experiment.variations, 'key'); @@ -73,7 +73,7 @@ module.exports = { projectConfig.variationIdMap = {}; projectConfig.variationVariableUsageMap = {}; - fns.forEach(projectConfig.experiments, function(experiment) { + (projectConfig.experiments || []).forEach(function(experiment) { // Creates { : } map inside of the experiment experiment.variationKeyMap = fns.keyBy(experiment.variations, 'key'); @@ -94,7 +94,7 @@ module.exports = { projectConfig.featureKeyMap = fns.keyBy(projectConfig.featureFlags || [], 'key'); fns.forOwn(projectConfig.featureKeyMap, function(feature) { feature.variableKeyMap = fns.keyBy(feature.variables, 'key'); - fns.forEach(feature.experimentIds || [], function(experimentId) { + (feature.experimentIds || []).forEach(function(experimentId) { // Add this experiment in experiment-feature map. if (projectConfig.experimentFeatureMap[experimentId]) { projectConfig.experimentFeatureMap[experimentId].push(feature.id); diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index 36e9fae2d..cd22afae9 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -29,24 +29,6 @@ module.exports = { }, keyBy: require('lodash/keyBy'), filter: require('lodash/filter'), - forEach: function(collection, iteratee) { - // checking iteratee is a function otherwise return identity - iteratee = typeof iteratee == 'function' ? iteratee : function(value, index, collection) { - return value; - }; - if (Array.isArray(collection)) { - var index = -1, length = collection == null ? 0 : collection.length; - - while (++index < length) { - if (iteratee(collection[index], index, collection) === false) { - break; - } - } - return collection; - } else { - - } - }, forOwn: require('lodash/forOwn'), uuid: function() { return uuid.v4(); From 37ff70c07789d774ef57921266bcfdf6be950972 Mon Sep 17 00:00:00 2001 From: fayyazarshad Date: Tue, 25 Feb 2020 10:42:30 -0800 Subject: [PATCH 3/4] Incorporate the feedback --- packages/optimizely-sdk/lib/core/notification_center/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.js b/packages/optimizely-sdk/lib/core/notification_center/index.js index f1e619e8d..be0953f75 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.js +++ b/packages/optimizely-sdk/lib/core/notification_center/index.js @@ -102,7 +102,7 @@ NotificationCenter.prototype.removeNotificationListener = function (listenerId) var indexToRemove; var typeToRemove; fns.forOwn(this.__notificationListeners, function (listenersForType, notificationType) { - (listenersForType || []).forEach(function(listenerEntry, i) { + (listenersForType || []).every(function(listenerEntry, i) { if (listenerEntry.id === listenerId) { indexToRemove = i; typeToRemove = notificationType; From 4e6a632c8824c9bf429aa3f50ace0734104838e8 Mon Sep 17 00:00:00 2001 From: fayyazarshad <42437293+fayyazarshad@users.noreply.github.com> Date: Tue, 25 Feb 2020 08:43:02 -0800 Subject: [PATCH 4/4] Update index.js --- packages/optimizely-sdk/lib/core/notification_center/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.js b/packages/optimizely-sdk/lib/core/notification_center/index.js index be0953f75..f079c1bc7 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.js +++ b/packages/optimizely-sdk/lib/core/notification_center/index.js @@ -108,6 +108,7 @@ NotificationCenter.prototype.removeNotificationListener = function (listenerId) typeToRemove = notificationType; return false; } + return true }); if (indexToRemove !== undefined && typeToRemove !== undefined) { return false;