diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.js index 8ec9bb7d5..9d8af07d4 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.js @@ -35,7 +35,7 @@ var MODULE_NAME = 'AUDIENCE_EVALUATOR'; * @constructor */ function AudienceEvaluator(UNSTABLE_conditionEvaluators) { - this.typeToEvaluatorMap = fns.assignIn({}, UNSTABLE_conditionEvaluators, { + this.typeToEvaluatorMap = fns.assign({}, UNSTABLE_conditionEvaluators, { 'custom_attribute': customAttributeConditionEvaluator }); } diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.js b/packages/optimizely-sdk/lib/core/decision_service/index.js index f9c8d05bb..6cca4a534 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.js +++ b/packages/optimizely-sdk/lib/core/decision_service/index.js @@ -116,7 +116,7 @@ DecisionService.prototype.__resolveExperimentBucketMap = function(userId, attrib attributes = attributes || {} var userProfile = this.__getUserProfile(userId) || {}; var attributeExperimentBucketMap = attributes[enums.CONTROL_ATTRIBUTES.STICKY_BUCKETING_KEY]; - return fns.assignIn({}, userProfile.experiment_bucket_map, attributeExperimentBucketMap); + return fns.assign({}, userProfile.experiment_bucket_map, attributeExperimentBucketMap); }; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.js b/packages/optimizely-sdk/lib/core/project_config/index.js index ba781cb79..41b0ee6ce 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.js @@ -55,7 +55,7 @@ module.exports = { fns.forEach(projectConfig.groupIdMap, function(group, Id) { experiments = fns.cloneDeep(group.experiments); fns.forEach(experiments, function(experiment) { - projectConfig.experiments.push(fns.assignIn(experiment, {groupId: Id})); + projectConfig.experiments.push(fns.assign(experiment, {groupId: Id})); }); }); @@ -78,7 +78,7 @@ module.exports = { experiment.variationKeyMap = fns.keyBy(experiment.variations, 'key'); // Creates { : { key: , id: } } mapping for quick lookup - fns.assignIn(projectConfig.variationIdMap, fns.keyBy(experiment.variations, 'id')); + fns.assign(projectConfig.variationIdMap, fns.keyBy(experiment.variations, 'id')); fns.forOwn(experiment.variationKeyMap, function(variation) { if (variation.variables) { diff --git a/packages/optimizely-sdk/lib/index.browser.js b/packages/optimizely-sdk/lib/index.browser.js index c796ca61d..af6ffba08 100644 --- a/packages/optimizely-sdk/lib/index.browser.js +++ b/packages/optimizely-sdk/lib/index.browser.js @@ -107,7 +107,7 @@ module.exports = { eventDispatcher = config.eventDispatcher; } - config = fns.assignIn( + config = fns.assign( { clientEngine: enums.JAVASCRIPT_CLIENT_ENGINE, eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, diff --git a/packages/optimizely-sdk/lib/index.react_native.js b/packages/optimizely-sdk/lib/index.react_native.js index 2dbaf6936..dc4874915 100644 --- a/packages/optimizely-sdk/lib/index.react_native.js +++ b/packages/optimizely-sdk/lib/index.react_native.js @@ -86,7 +86,7 @@ module.exports = { config.skipJSONValidation = true; } - config = fns.assignIn( + config = fns.assign( { clientEngine: enums.JAVASCRIPT_CLIENT_ENGINE, eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, diff --git a/packages/optimizely-sdk/lib/utils/fns/index.js b/packages/optimizely-sdk/lib/utils/fns/index.js index 78b7d4fb7..5840fa684 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.js +++ b/packages/optimizely-sdk/lib/utils/fns/index.js @@ -19,8 +19,28 @@ var keyBy = require('@optimizely/js-sdk-utils').keyBy; var MAX_NUMBER_LIMIT = Math.pow(2, 53); module.exports = { - assign: require('lodash/assign'), - assignIn: require('lodash/assignIn'), + assign: function (target) { + if (!target) { + return {}; + } + if (typeof Object.assign === 'function') { + return Object.assign.apply(Object, arguments); + } else { + var to = Object(target); + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + if (nextSource !== null && nextSource !== undefined) { + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + } + }, cloneDeep: require('lodash/cloneDeep'), currentTimestamp: function() { return Math.round(new Date().getTime());