From 0ac6a766f7d402a9bb3329872e8a6ace889d275d Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Mon, 6 Apr 2020 22:27:55 -0700 Subject: [PATCH 01/14] Cleaned up other PR by fayyaz --- .travis.yml | 4 +- packages/optimizely-sdk/.eslintrc.js | 3 +- packages/optimizely-sdk/lib/index.browser.js | 262 ++-- .../optimizely-sdk/lib/index.browser.tests.js | 26 +- .../lib/index.browser.umdtests.js | 26 +- packages/optimizely-sdk/lib/index.node.js | 199 +-- .../optimizely-sdk/lib/index.node.tests.js | 23 +- .../optimizely-sdk/lib/index.react_native.js | 203 +-- .../lib/index.react_native.tests.js | 27 +- packages/optimizely-sdk/package-lock.json | 1394 ++++++----------- packages/optimizely-sdk/package.json | 25 +- packages/optimizely-sdk/rollup.config.js | 75 + packages/optimizely-sdk/webpack.config.js | 34 - 13 files changed, 962 insertions(+), 1339 deletions(-) create mode 100644 packages/optimizely-sdk/rollup.config.js delete mode 100644 packages/optimizely-sdk/webpack.config.js diff --git a/.travis.yml b/.travis.yml index 7ed28d782..b6ee18290 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,8 +70,8 @@ jobs: before_script: - mkdir $HOME/travisci-tools && pushd $HOME/travisci-tools && git init && git pull https://$CI_USER_TOKEN@github.com/optimizely/travisci-tools.git && popd script: - - CLIENT=node $HOME/travisci-tools/trigger-script-with-status-update.sh - - CLIENT=browser $HOME/travisci-tools/trigger-script-with-status-update.sh + - CLIENT=node TESTAPP_BRANCH=fayyaz/added-support-for-es6 $HOME/travisci-tools/trigger-script-with-status-update.sh + - CLIENT=browser TESTAPP_BRANCH=fayyaz/added-support-for-es6 $HOME/travisci-tools/trigger-script-with-status-update.sh after_success: travis_terminate 0 - <<: *integrationtest stage: 'Benchmarking tests' diff --git a/packages/optimizely-sdk/.eslintrc.js b/packages/optimizely-sdk/.eslintrc.js index 4c60d03bf..b90f645cf 100644 --- a/packages/optimizely-sdk/.eslintrc.js +++ b/packages/optimizely-sdk/.eslintrc.js @@ -11,7 +11,8 @@ module.exports = { Promise: 'readonly', }, parserOptions: { - ecmaVersion: 5, + ecmaVersion: 6, + sourceType: 'module', }, rules: { 'no-prototype-builtins': 'off', diff --git a/packages/optimizely-sdk/lib/index.browser.js b/packages/optimizely-sdk/lib/index.browser.js index d623efbd9..d7472afa9 100644 --- a/packages/optimizely-sdk/lib/index.browser.js +++ b/packages/optimizely-sdk/lib/index.browser.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017, 2019, Optimizely + * Copyright 2016-2017, 2019, 2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,152 +13,160 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -var logging = require('@optimizely/js-sdk-logging'); -var fns = require('./utils/fns'); -var configValidator = require('./utils/config_validator'); -var defaultErrorHandler = require('./plugins/error_handler'); -var defaultEventDispatcher = require('./plugins/event_dispatcher/index.browser'); -var enums = require('./utils/enums'); -var eventProcessor = require('@optimizely/js-sdk-event-processor'); -var loggerPlugin = require('./plugins/logger'); -var Optimizely = require('./optimizely'); -var eventProcessorConfigValidator = require('./utils/event_processor_config_validator'); - -var logger = logging.getLogger(); -logging.setLogHandler(loggerPlugin.createLogger()); -logging.setLogLevel(logging.LogLevel.INFO); +import * as sdkLogging from '@optimizely/js-sdk-logging'; +import fns from './utils/fns'; +import configValidator from './utils/config_validator'; +import defaultErrorHandler from './plugins/error_handler'; +import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; +import utilEnums from './utils/enums'; +import * as eventProcessor from '@optimizely/js-sdk-event-processor'; +import loggerPlugin from './plugins/logger'; +import Optimizely from './optimizely'; +import eventProcessorConfigValidator from './utils/event_processor_config_validator'; + +var logger = sdkLogging.getLogger(); +sdkLogging.setLogHandler(loggerPlugin.createLogger()); +sdkLogging.setLogLevel(sdkLogging.LogLevel.INFO); var MODULE_NAME = 'INDEX_BROWSER'; - var DEFAULT_EVENT_BATCH_SIZE = 10; var DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s var hasRetriedEvents = false; + +export var logging = loggerPlugin; +export var errorHandler = defaultErrorHandler; +export var eventDispatcher = defaultEventDispatcher; +export var enums = utilEnums; +export var setLogger = sdkLogging.setLogHandler; +export var setLogLevel = sdkLogging.setLogLevel; + /** - * Entry point into the Optimizely Browser SDK + * Creates an instance of the Optimizely class + * @param {Object} config + * @param {Object} config.datafile + * @param {Object} config.errorHandler + * @param {Object} config.eventDispatcher + * @param {Object} config.logger + * @param {Object} config.logLevel + * @param {Object} config.userProfileService + * @param {Object} config.eventBatchSize + * @param {Object} config.eventFlushInterval + * @return {Object} the Optimizely object */ -module.exports = { - logging: loggerPlugin, - errorHandler: defaultErrorHandler, - eventDispatcher: defaultEventDispatcher, - enums: enums, - - setLogger: logging.setLogHandler, - setLogLevel: logging.setLogLevel, - - /** - * Creates an instance of the Optimizely class - * @param {Object} config - * @param {Object} config.datafile - * @param {Object} config.errorHandler - * @param {Object} config.eventDispatcher - * @param {Object} config.logger - * @param {Object} config.logLevel - * @param {Object} config.userProfileService - * @param {Object} config.eventBatchSize - * @param {Object} config.eventFlushInterval - * @return {Object} the Optimizely object - */ - createInstance: function(config) { - try { - config = config || {}; +export var createInstance = function(config) { + try { + config = config || {}; - // TODO warn about setting per instance errorHandler / logger / logLevel - if (config.errorHandler) { - logging.setErrorHandler(config.errorHandler); - } - if (config.logger) { - logging.setLogHandler(config.logger); - // respect the logger's shouldLog functionality - logging.setLogLevel(logging.LogLevel.NOTSET); - } - if (config.logLevel !== undefined) { - logging.setLogLevel(config.logLevel); - } + // TODO warn about setting per instance errorHandler / logger / logLevel + if (config.errorHandler) { + sdkLogging.setErrorHandler(config.errorHandler); + } + if (config.logger) { + sdkLogging.setLogHandler(config.logger); + // respect the logger's shouldLog functionality + sdkLogging.setLogLevel(sdkLogging.LogLevel.NOTSET); + } + if (config.logLevel !== undefined) { + sdkLogging.setLogLevel(config.logLevel); + } - try { - configValidator.validate(config); - config.isValidInstance = true; - } catch (ex) { - logger.error(ex); - config.isValidInstance = false; - } + try { + configValidator.validate(config); + config.isValidInstance = true; + } catch (ex) { + logger.error(ex); + config.isValidInstance = false; + } + + // Explicitly check for null or undefined + // prettier-ignore + if (config.skipJSONValidation == null) { // eslint-disable-line eqeqeq + config.skipJSONValidation = true; + } - // Explicitly check for null or undefined - // prettier-ignore - if (config.skipJSONValidation == null) { // eslint-disable-line eqeqeq - config.skipJSONValidation = true; + var eventDispatcher; + // prettier-ignore + if (config.eventDispatcher == null) { // eslint-disable-line eqeqeq + // only wrap the event dispatcher with pending events retry if the user didnt override + eventDispatcher = new eventProcessor.LocalStoragePendingEventsDispatcher({ + eventDispatcher: defaultEventDispatcher, + }); + + if (!hasRetriedEvents) { + eventDispatcher.sendPendingEvents(); + hasRetriedEvents = true; } + } else { + eventDispatcher = config.eventDispatcher; + } - var eventDispatcher; - // prettier-ignore - if (config.eventDispatcher == null) { // eslint-disable-line eqeqeq - // only wrap the event dispatcher with pending events retry if the user didnt override - eventDispatcher = new eventProcessor.LocalStoragePendingEventsDispatcher({ - eventDispatcher: defaultEventDispatcher, - }); - - if (!hasRetriedEvents) { - eventDispatcher.sendPendingEvents(); - hasRetriedEvents = true; - } - } else { - eventDispatcher = config.eventDispatcher; + config = fns.assign( + { + clientEngine: enums.JAVASCRIPT_CLIENT_ENGINE, + eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, + eventFlushInterval: DEFAULT_EVENT_FLUSH_INTERVAL, + }, + config, + { + eventDispatcher: eventDispatcher, + // always get the OptimizelyLogger facade from logging + logger: logger, + errorHandler: sdkLogging.getErrorHandler(), } + ); - config = fns.assign( - { - clientEngine: enums.JAVASCRIPT_CLIENT_ENGINE, - eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, - eventFlushInterval: DEFAULT_EVENT_FLUSH_INTERVAL, - }, - config, - { - eventDispatcher: eventDispatcher, - // always get the OptimizelyLogger facade from logging - logger: logger, - errorHandler: logging.getErrorHandler(), - } + if (!eventProcessorConfigValidator.validateEventBatchSize(config.eventBatchSize)) { + logger.warn('Invalid eventBatchSize %s, defaulting to %s', config.eventBatchSize, DEFAULT_EVENT_BATCH_SIZE); + config.eventBatchSize = DEFAULT_EVENT_BATCH_SIZE; + } + if (!eventProcessorConfigValidator.validateEventFlushInterval(config.eventFlushInterval)) { + logger.warn( + 'Invalid eventFlushInterval %s, defaulting to %s', + config.eventFlushInterval, + DEFAULT_EVENT_FLUSH_INTERVAL ); + config.eventFlushInterval = DEFAULT_EVENT_FLUSH_INTERVAL; + } - if (!eventProcessorConfigValidator.validateEventBatchSize(config.eventBatchSize)) { - logger.warn('Invalid eventBatchSize %s, defaulting to %s', config.eventBatchSize, DEFAULT_EVENT_BATCH_SIZE); - config.eventBatchSize = DEFAULT_EVENT_BATCH_SIZE; - } - if (!eventProcessorConfigValidator.validateEventFlushInterval(config.eventFlushInterval)) { - logger.warn( - 'Invalid eventFlushInterval %s, defaulting to %s', - config.eventFlushInterval, - DEFAULT_EVENT_FLUSH_INTERVAL - ); - config.eventFlushInterval = DEFAULT_EVENT_FLUSH_INTERVAL; - } + var optimizely = new Optimizely(config); - var optimizely = new Optimizely(config); - - try { - if (typeof window.addEventListener === 'function') { - var unloadEvent = 'onpagehide' in window ? 'pagehide' : 'unload'; - window.addEventListener( - unloadEvent, - function() { - optimizely.close(); - }, - false - ); - } - } catch (e) { - logger.error(enums.LOG_MESSAGES.UNABLE_TO_ATTACH_UNLOAD, MODULE_NAME, e.message); + try { + if (typeof window.addEventListener === 'function') { + var unloadEvent = 'onpagehide' in window ? 'pagehide' : 'unload'; + window.addEventListener( + unloadEvent, + function() { + optimizely.close(); + }, + false + ); } - - return optimizely; } catch (e) { - logger.error(e); - return null; + logger.error(enums.LOG_MESSAGES.UNABLE_TO_ATTACH_UNLOAD, MODULE_NAME, e.message); } - }, - __internalResetRetryState: function() { - hasRetriedEvents = false; - }, + return optimizely; + } catch (e) { + logger.error(e); + return null; + } +}; + +export var __internalResetRetryState = function() { + hasRetriedEvents = false; +}; + +/** + * Entry point into the Optimizely Browser SDK + */ +export default { + logging, + errorHandler, + eventDispatcher, + enums, + setLogger, + setLogLevel, + createInstance, + __internalResetRetryState, }; diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index 19107fb19..cc3fc6b0b 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2019, Optimizely + * Copyright 2016-2019, 2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -var logging = require('@optimizely/js-sdk-logging'); -var configValidator = require('./utils/config_validator'); -var eventProcessor = require('@optimizely/js-sdk-event-processor'); -var Optimizely = require('./optimizely'); -var optimizelyFactory = require('./index.browser'); -var packageJSON = require('../package.json'); -var testData = require('./tests/test_data'); -var eventProcessor = require('@optimizely/js-sdk-event-processor'); -var eventProcessorConfigValidator = require('./utils/event_processor_config_validator'); - -var chai = require('chai'); +import * as logging from '@optimizely/js-sdk-logging'; +import configValidator from './utils/config_validator'; +import Optimizely from './optimizely'; +import optimizelyFactory from './index.browser'; +import packageJSON from '../package.json'; +import testData from './tests/test_data'; +import * as eventProcessor from '@optimizely/js-sdk-event-processor'; +import eventProcessorConfigValidator from './utils/event_processor_config_validator'; +import chai from 'chai'; +import sinon from 'sinon'; var assert = chai.assert; -var sinon = require('sinon'); - var LocalStoragePendingEventsDispatcher = eventProcessor.LocalStoragePendingEventsDispatcher; describe('javascript-sdk', function() { @@ -57,7 +54,6 @@ describe('javascript-sdk', function() { sinon.stub(configValidator, 'validate'); xhr = sinon.useFakeXMLHttpRequest(); - global.XMLHttpRequest = xhr; requests = []; xhr.onCreate = function(req) { requests.push(req); diff --git a/packages/optimizely-sdk/lib/index.browser.umdtests.js b/packages/optimizely-sdk/lib/index.browser.umdtests.js index fac40bfd3..e9d4c55e5 100644 --- a/packages/optimizely-sdk/lib/index.browser.umdtests.js +++ b/packages/optimizely-sdk/lib/index.browser.umdtests.js @@ -1,5 +1,5 @@ /** - * Copyright 2018-2019, Optimizely + * Copyright 2018-2019, 2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -var configValidator = require('./utils/config_validator'); -var enums = require('./utils/enums'); -var logger = require('./plugins/logger'); -var Optimizely = require('./optimizely'); - -var packageJSON = require('../package.json'); -var eventDispatcher = require('./plugins/event_dispatcher/index.browser'); -var testData = require('./tests/test_data'); - -var chai = require('chai'); +import configValidator from './utils/config_validator'; + +import enums from './utils/enums'; +import logger from './plugins/logger'; +import Optimizely from './optimizely'; +import packageJSON from '../package.json'; +import eventDispatcher from './plugins/event_dispatcher/index.browser'; +import testData from './tests/test_data'; +import chai from 'chai'; var assert = chai.assert; -var sinon = require('sinon'); +import sinon from 'sinon'; describe('javascript-sdk', function() { describe('APIs', function() { @@ -44,7 +43,6 @@ describe('javascript-sdk', function() { sinon.stub(Optimizely.prototype, 'close'); xhr = sinon.useFakeXMLHttpRequest(); - global.XMLHttpRequest = xhr; requests = []; xhr.onCreate = function(req) { requests.push(req); @@ -77,7 +75,7 @@ describe('javascript-sdk', function() { skipJSONValidation: true, }); assert.strictEqual(console.info.getCalls().length, 1); - call = console.info.getCalls()[0]; + var call = console.info.getCalls()[0]; assert.strictEqual(call.args.length, 1); assert(call.args[0].indexOf('PROJECT_CONFIG: Skipping JSON schema validation.') > -1); }); diff --git a/packages/optimizely-sdk/lib/index.node.js b/packages/optimizely-sdk/lib/index.node.js index c130fbc92..89b9af1b9 100644 --- a/packages/optimizely-sdk/lib/index.node.js +++ b/packages/optimizely-sdk/lib/index.node.js @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2016-2017, 2019, Optimizely, Inc. and contributors * + * Copyright 2016-2017, 2019, 2020 Optimizely, Inc. and contributors * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * @@ -13,114 +13,121 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -var logging = require('@optimizely/js-sdk-logging'); -var configValidator = require('./utils/config_validator'); -var defaultErrorHandler = require('./plugins/error_handler'); -var defaultEventDispatcher = require('./plugins/event_dispatcher/index.node'); -var enums = require('./utils/enums'); -var fns = require('./utils/fns'); -var jsonSchemaValidator = require('./utils/json_schema_validator'); -var loggerPlugin = require('./plugins/logger'); -var Optimizely = require('./optimizely'); -var eventProcessorConfigValidator = require('./utils/event_processor_config_validator'); +import * as sdkLogging from '@optimizely/js-sdk-logging'; +import configValidator from './utils/config_validator'; +import defaultErrorHandler from './plugins/error_handler'; +import defaultEventDispatcher from './plugins/event_dispatcher/index.node'; +import utilEnums from './utils/enums'; +import fns from './utils/fns'; +import jsonSchemaValidator from './utils/json_schema_validator'; +import loggerPlugin from './plugins/logger'; +import Optimizely from './optimizely'; +import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -var logger = logging.getLogger(); -logging.setLogLevel(logging.LogLevel.ERROR); +const logger = sdkLogging.getLogger(); +sdkLogging.setLogLevel(sdkLogging.LogLevel.ERROR); -var DEFAULT_EVENT_BATCH_SIZE = 10; -var DEFAULT_EVENT_FLUSH_INTERVAL = 30000; // Unit is ms, default is 30s +const DEFAULT_EVENT_BATCH_SIZE = 10; +const DEFAULT_EVENT_FLUSH_INTERVAL = 30000; // Unit is ms, default is 30s + +export const logging = loggerPlugin; +export const errorHandler = defaultErrorHandler; +export const eventDispatcher = defaultEventDispatcher; +export const enums = utilEnums; +export const setLogger = sdkLogging.setLogHandler; +export const setLogLevel = sdkLogging.setLogLevel; /** - * Entry point into the Optimizely Node testing SDK + * Creates an instance of the Optimizely class + * @param {Object} config + * @param {Object} config.datafile + * @param {Object} config.errorHandler + * @param {Object} config.eventDispatcher + * @param {Object} config.jsonSchemaValidator + * @param {Object} config.logger + * @param {Object} config.userProfileService + * @param {Object} config.eventBatchSize + * @param {Object} config.eventFlushInterval + * @return {Object} the Optimizely object */ -module.exports = { - logging: loggerPlugin, - errorHandler: defaultErrorHandler, - eventDispatcher: defaultEventDispatcher, - enums: enums, +export const createInstance = (config) => { + try { + let hasLogger = false; + config = config || {}; - setLogger: logging.setLogHandler, - setLogLevel: logging.setLogLevel, + // TODO warn about setting per instance errorHandler / logger / logLevel + if (config.errorHandler) { + sdkLogging.setErrorHandler(config.errorHandler); + } + if (config.logger) { + // only set a logger in node if one is provided, by not setting we are noop-ing + hasLogger = true; + sdkLogging.setLogHandler(config.logger); + // respect the logger's shouldLog functionality + sdkLogging.setLogLevel(sdkLogging.LogLevel.NOTSET); + } + if (config.logLevel !== undefined) { + sdkLogging.setLogLevel(config.logLevel); + } - /** - * Creates an instance of the Optimizely class - * @param {Object} config - * @param {Object} config.datafile - * @param {Object} config.errorHandler - * @param {Object} config.eventDispatcher - * @param {Object} config.jsonSchemaValidator - * @param {Object} config.logger - * @param {Object} config.userProfileService - * @param {Object} config.eventBatchSize - * @param {Object} config.eventFlushInterval - * @return {Object} the Optimizely object - */ - createInstance: function(config) { try { - var hasLogger = false; - config = config || {}; - - // TODO warn about setting per instance errorHandler / logger / logLevel - if (config.errorHandler) { - logging.setErrorHandler(config.errorHandler); - } - if (config.logger) { - // only set a logger in node if one is provided, by not setting we are noop-ing - hasLogger = true; - logging.setLogHandler(config.logger); - // respect the logger's shouldLog functionality - logging.setLogLevel(logging.LogLevel.NOTSET); - } - if (config.logLevel !== undefined) { - logging.setLogLevel(config.logLevel); + configValidator.validate(config); + config.isValidInstance = true; + } catch (ex) { + if (hasLogger) { + logger.error(ex); + } else { + console.error(ex.message); } + config.isValidInstance = false; + } - try { - configValidator.validate(config); - config.isValidInstance = true; - } catch (ex) { - if (hasLogger) { - logger.error(ex); - } else { - console.error(ex.message); - } - config.isValidInstance = false; + config = fns.assign( + { + clientEngine: utilEnums.NODE_CLIENT_ENGINE, + eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, + eventDispatcher: defaultEventDispatcher, + eventFlushInterval: DEFAULT_EVENT_FLUSH_INTERVAL, + jsonSchemaValidator: jsonSchemaValidator, + skipJSONValidation: false, + }, + config, + { + // always get the OptimizelyLogger facade from logging + logger: logger, + errorHandler: sdkLogging.getErrorHandler(), } + ); - config = fns.assign( - { - clientEngine: enums.NODE_CLIENT_ENGINE, - eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, - eventDispatcher: defaultEventDispatcher, - eventFlushInterval: DEFAULT_EVENT_FLUSH_INTERVAL, - jsonSchemaValidator: jsonSchemaValidator, - skipJSONValidation: false, - }, - config, - { - // always get the OptimizelyLogger facade from logging - logger: logger, - errorHandler: logging.getErrorHandler(), - } + if (!eventProcessorConfigValidator.validateEventBatchSize(config.eventBatchSize)) { + logger.warn('Invalid eventBatchSize %s, defaulting to %s', config.eventBatchSize, DEFAULT_EVENT_BATCH_SIZE); + config.eventBatchSize = DEFAULT_EVENT_BATCH_SIZE; + } + if (!eventProcessorConfigValidator.validateEventFlushInterval(config.eventFlushInterval)) { + logger.warn( + 'Invalid eventFlushInterval %s, defaulting to %s', + config.eventFlushInterval, + DEFAULT_EVENT_FLUSH_INTERVAL ); + config.eventFlushInterval = DEFAULT_EVENT_FLUSH_INTERVAL; + } - if (!eventProcessorConfigValidator.validateEventBatchSize(config.eventBatchSize)) { - logger.warn('Invalid eventBatchSize %s, defaulting to %s', config.eventBatchSize, DEFAULT_EVENT_BATCH_SIZE); - config.eventBatchSize = DEFAULT_EVENT_BATCH_SIZE; - } - if (!eventProcessorConfigValidator.validateEventFlushInterval(config.eventFlushInterval)) { - logger.warn( - 'Invalid eventFlushInterval %s, defaulting to %s', - config.eventFlushInterval, - DEFAULT_EVENT_FLUSH_INTERVAL - ); - config.eventFlushInterval = DEFAULT_EVENT_FLUSH_INTERVAL; - } + return new Optimizely(config); + } catch (e) { + logger.error(e); + return null; + } +}; - return new Optimizely(config); - } catch (e) { - logger.error(e); - return null; - } - }, +/** + * Entry point into the Optimizely Node testing SDK + */ +export default { + logging, + errorHandler, + eventDispatcher, + enums, + setLogger, + setLogLevel, + createInstance, }; diff --git a/packages/optimizely-sdk/lib/index.node.tests.js b/packages/optimizely-sdk/lib/index.node.tests.js index c0a543618..af879a0a2 100644 --- a/packages/optimizely-sdk/lib/index.node.tests.js +++ b/packages/optimizely-sdk/lib/index.node.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2019, Optimizely + * Copyright 2016-2019, 2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -var logging = require('@optimizely/js-sdk-logging'); -var configValidator = require('./utils/config_validator'); -var enums = require('./utils/enums'); -var loggerPlugin = require('./plugins/logger'); -var Optimizely = require('./optimizely'); -var optimizelyFactory = require('./index.node'); -var testData = require('./tests/test_data'); -var eventProcessor = require('@optimizely/js-sdk-event-processor'); - -var chai = require('chai'); +import configValidator from './utils/config_validator'; +import enums from './utils/enums'; +import loggerPlugin from './plugins/logger'; +import Optimizely from './optimizely'; +import optimizelyFactory from './index.node'; +import testData from './tests/test_data'; +import * as eventProcessor from '@optimizely/js-sdk-event-processor'; +import chai from 'chai'; +import sinon from 'sinon'; + var assert = chai.assert; -var sinon = require('sinon'); describe('optimizelyFactory', function() { describe('APIs', function() { diff --git a/packages/optimizely-sdk/lib/index.react_native.js b/packages/optimizely-sdk/lib/index.react_native.js index efc7def31..8aef888e7 100644 --- a/packages/optimizely-sdk/lib/index.react_native.js +++ b/packages/optimizely-sdk/lib/index.react_native.js @@ -1,5 +1,5 @@ /** - * Copyright 2019, Optimizely + * Copyright 2019, 2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,118 +13,123 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -var logging = require('@optimizely/js-sdk-logging'); -var fns = require('./utils/fns'); -var configValidator = require('./utils/config_validator'); -var defaultErrorHandler = require('./plugins/error_handler'); -var defaultEventDispatcher = require('./plugins/event_dispatcher/index.browser'); -var enums = require('./utils/enums'); -var loggerPlugin = require('./plugins/logger/index.react_native'); -var Optimizely = require('./optimizely'); -var eventProcessorConfigValidator = require('./utils/event_processor_config_validator'); +import * as sdkLogging from '@optimizely/js-sdk-logging'; +import fns from './utils/fns'; +import configValidator from './utils/config_validator'; +import defaultErrorHandler from './plugins/error_handler'; +import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; +import utilEnums from './utils/enums'; +import loggerPlugin from './plugins/logger/index.react_native'; +import Optimizely from './optimizely'; +import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -var logger = logging.getLogger(); -logging.setLogHandler(loggerPlugin.createLogger()); -logging.setLogLevel(logging.LogLevel.INFO); +var logger = sdkLogging.getLogger(); +sdkLogging.setLogHandler(loggerPlugin.createLogger()); +sdkLogging.setLogLevel(sdkLogging.LogLevel.INFO); var DEFAULT_EVENT_BATCH_SIZE = 10; var DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s +export const logging = loggerPlugin; +export const errorHandler = defaultErrorHandler; +export const eventDispatcher = defaultEventDispatcher; +export const enums = utilEnums; +export const setLogger = sdkLogging.setLogHandler; +export const setLogLevel = sdkLogging.setLogLevel; + /** - * Entry point into the Optimizely Javascript SDK for React Native + * Creates an instance of the Optimizely class + * @param {Object} config + * @param {Object} config.datafile + * @param {Object} config.errorHandler + * @param {Object} config.eventDispatcher + * @param {Object} config.logger + * @param {Object} config.logLevel + * @param {Object} config.userProfileService + * @param {Object} config.eventBatchSize + * @param {Object} config.eventFlushInterval + * @return {Object} the Optimizely object */ -module.exports = { - logging: loggerPlugin, - errorHandler: defaultErrorHandler, - eventDispatcher: defaultEventDispatcher, - enums: enums, +export const createInstance = function(config) { + try { + config = config || {}; - setLogger: logging.setLogHandler, - setLogLevel: logging.setLogLevel, + // TODO warn about setting per instance errorHandler / logger / logLevel + if (config.errorHandler) { + sdkLogging.setErrorHandler(config.errorHandler); + } + if (config.logger) { + sdkLogging.setLogHandler(config.logger); + // respect the logger's shouldLog functionality + sdkLogging.setLogLevel(sdkLogging.LogLevel.NOTSET); + } + if (config.logLevel !== undefined) { + sdkLogging.setLogLevel(config.logLevel); + } - /** - * Creates an instance of the Optimizely class - * @param {Object} config - * @param {Object} config.datafile - * @param {Object} config.errorHandler - * @param {Object} config.eventDispatcher - * @param {Object} config.logger - * @param {Object} config.logLevel - * @param {Object} config.userProfileService - * @param {Object} config.eventBatchSize - * @param {Object} config.eventFlushInterval - * @return {Object} the Optimizely object - */ - createInstance: function(config) { try { - config = config || {}; - - // TODO warn about setting per instance errorHandler / logger / logLevel - if (config.errorHandler) { - logging.setErrorHandler(config.errorHandler); - } - if (config.logger) { - logging.setLogHandler(config.logger); - // respect the logger's shouldLog functionality - logging.setLogLevel(logging.LogLevel.NOTSET); - } - if (config.logLevel !== undefined) { - logging.setLogLevel(config.logLevel); - } + configValidator.validate(config); + config.isValidInstance = true; + } catch (ex) { + logger.error(ex); + config.isValidInstance = false; + } - try { - configValidator.validate(config); - config.isValidInstance = true; - } catch (ex) { - logger.error(ex); - config.isValidInstance = false; - } + // Explicitly check for null or undefined + // prettier-ignore + if (config.skipJSONValidation == null) { // eslint-disable-line eqeqeq + config.skipJSONValidation = true; + } - // Explicitly check for null or undefined - // prettier-ignore - if (config.skipJSONValidation == null) { // eslint-disable-line eqeqeq - config.skipJSONValidation = true; + config = fns.assign( + { + clientEngine: enums.REACT_NATIVE_JS_CLIENT_ENGINE, + eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, + eventDispatcher: defaultEventDispatcher, + eventFlushInterval: DEFAULT_EVENT_FLUSH_INTERVAL, + }, + config, + { + // always get the OptimizelyLogger facade from logging + logger: logger, + errorHandler: sdkLogging.getErrorHandler(), } - - config = fns.assign( - { - clientEngine: enums.REACT_NATIVE_JS_CLIENT_ENGINE, - eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, - eventDispatcher: defaultEventDispatcher, - eventFlushInterval: DEFAULT_EVENT_FLUSH_INTERVAL, - }, - config, - { - // always get the OptimizelyLogger facade from logging - logger: logger, - errorHandler: logging.getErrorHandler(), - } + ); + + // If client engine is react, convert it to react native + if (config.clientEngine === enums.REACT_CLIENT_ENGINE) { + config.clientEngine = enums.REACT_NATIVE_CLIENT_ENGINE + } + + if (!eventProcessorConfigValidator.validateEventBatchSize(config.eventBatchSize)) { + logger.warn('Invalid eventBatchSize %s, defaulting to %s', config.eventBatchSize, DEFAULT_EVENT_BATCH_SIZE); + config.eventBatchSize = DEFAULT_EVENT_BATCH_SIZE; + } + if (!eventProcessorConfigValidator.validateEventFlushInterval(config.eventFlushInterval)) { + logger.warn( + 'Invalid eventFlushInterval %s, defaulting to %s', + config.eventFlushInterval, + DEFAULT_EVENT_FLUSH_INTERVAL ); + config.eventFlushInterval = DEFAULT_EVENT_FLUSH_INTERVAL; + } - // If client engine is react, convert it to react native - if (config.clientEngine === enums.REACT_CLIENT_ENGINE) { - config.clientEngine = enums.REACT_NATIVE_CLIENT_ENGINE - } - - if (!eventProcessorConfigValidator.validateEventBatchSize(config.eventBatchSize)) { - logger.warn('Invalid eventBatchSize %s, defaulting to %s', config.eventBatchSize, DEFAULT_EVENT_BATCH_SIZE); - config.eventBatchSize = DEFAULT_EVENT_BATCH_SIZE; - } - if (!eventProcessorConfigValidator.validateEventFlushInterval(config.eventFlushInterval)) { - logger.warn( - 'Invalid eventFlushInterval %s, defaulting to %s', - config.eventFlushInterval, - DEFAULT_EVENT_FLUSH_INTERVAL - ); - config.eventFlushInterval = DEFAULT_EVENT_FLUSH_INTERVAL; - } - - var optimizely = new Optimizely(config); + return new Optimizely(config); + } catch (e) { + logger.error(e); + return null; + } +} - return optimizely; - } catch (e) { - logger.error(e); - return null; - } - }, +/** + * Entry point into the Optimizely Javascript SDK for React Native + */ +export default { + logging, + errorHandler, + eventDispatcher, + enums, + setLogger, + setLogLevel, + createInstance, }; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index a1fc9010d..e12571368 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2019, Optimizely + * Copyright 2019, 2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -var logging = require('@optimizely/js-sdk-logging'); -var configValidator = require('./utils/config_validator'); -var eventProcessor = require('@optimizely/js-sdk-event-processor'); -var Optimizely = require('./optimizely'); -var optimizelyFactory = require('./index.react_native'); -var packageJSON = require('../package.json'); -var testData = require('./tests/test_data'); -var eventProcessor = require('@optimizely/js-sdk-event-processor'); -var eventProcessorConfigValidator = require('./utils/event_processor_config_validator'); -var defaultEventDispatcher = require('./plugins/event_dispatcher/index.browser'); - -var chai = require('chai'); +import * as logging from '@optimizely/js-sdk-logging'; +import configValidator from './utils/config_validator'; +import Optimizely from './optimizely'; +import optimizelyFactory from './index.react_native'; +import packageJSON from '../package.json'; +import testData from './tests/test_data'; +import * as eventProcessor from '@optimizely/js-sdk-event-processor'; +import eventProcessorConfigValidator from './utils/event_processor_config_validator'; +import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; +import chai from 'chai'; +import sinon from 'sinon'; + var assert = chai.assert; -var sinon = require('sinon'); describe('javascript-sdk/react-native', function() { describe('APIs', function() { diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index 3530711b2..b64631bd5 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -78,6 +78,98 @@ "uuid": "^3.3.2" } }, + "@rollup/plugin-commonjs": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz", + "integrity": "sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.0", + "estree-walker": "^1.0.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "@rollup/plugin-node-resolve": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz", + "integrity": "sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.6", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.14.2" + }, + "dependencies": { + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "@rollup/pluginutils": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.8.tgz", + "integrity": "sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw==", + "dev": true, + "requires": { + "estree-walker": "^1.0.1" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.11.0.tgz", + "integrity": "sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -371,12 +463,6 @@ "type-fest": "^0.8.1" } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -387,20 +473,23 @@ } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } } } }, @@ -666,9 +755,9 @@ } }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { @@ -742,12 +831,32 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "brorand": { @@ -899,6 +1008,12 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -1015,12 +1130,6 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1065,56 +1174,44 @@ "dev": true }, "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" }, "dependencies": { - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "dev": true, - "optional": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "picomatch": "^2.0.7" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } } } @@ -1199,12 +1296,6 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1758,9 +1849,9 @@ "dev": true }, "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, "encodeurl": { @@ -1847,14 +1938,26 @@ } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", + "memory-fs": "^0.5.0", "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } } }, "ent": { @@ -2072,6 +2175,12 @@ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true + }, "espree": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", @@ -2084,9 +2193,9 @@ }, "dependencies": { "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", "dev": true } } @@ -2121,6 +2230,12 @@ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -2164,21 +2279,6 @@ "safe-buffer": "^5.1.1" } }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -2384,21 +2484,24 @@ "optional": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-number": "^7.0.0" + "is-extendable": "^0.1.0" } } } @@ -3168,24 +3271,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -3224,12 +3315,6 @@ "is-glob": "^4.0.1" } }, - "global-modules-path": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.0.tgz", - "integrity": "sha512-HchvMJNYh9dGSCy8pOQ2O8u/hoXaL+0XhnrwH0RyLiSXMMTl9W3N6KUU73+JFOg5PGjtzl6VZzUQsnrpm7Szag==", - "dev": true - }, "globals": { "version": "12.3.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", @@ -3345,26 +3430,6 @@ "kind-of": "^4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -3526,70 +3591,6 @@ } } }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -3698,18 +3699,6 @@ } } }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -3811,12 +3800,32 @@ "is-extglob": "^2.1.1" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -3832,18 +3841,21 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, + "is-reference": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", + "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, "is-running": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-running/-/is-running-2.1.0.tgz", "integrity": "sha1-MKc/9cw4VOT8JUkICen1q/jeCeA=", "dev": true }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3947,7 +3959,34 @@ } } }, - "js-tokens": { + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", @@ -4014,10 +4053,13 @@ "dev": true }, "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } }, "jsonfile": { "version": "4.0.0", @@ -4074,11 +4116,101 @@ "useragent": "2.3.0" }, "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } } } }, @@ -4116,14 +4248,16 @@ "dev": true, "requires": { "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, - "karma-sinon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz", - "integrity": "sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo=", - "dev": true - }, "karma-webpack": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.2.tgz", @@ -4158,15 +4292,6 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, "lcov-parse": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", @@ -4190,14 +4315,14 @@ "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" } }, "locate-path": { @@ -4259,15 +4384,24 @@ "dev": true }, "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -4286,15 +4420,6 @@ } } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4333,17 +4458,6 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -4354,6 +4468,12 @@ "readable-stream": "^2.0.1" } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -4373,80 +4493,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - } } }, "miller-rabin": { @@ -4480,12 +4526,6 @@ "mime-db": "~1.33.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -4508,9 +4548,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "mississippi": { @@ -4811,27 +4851,12 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4972,45 +4997,16 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-locale": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", - "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", - "dev": true, - "requires": { - "execa": "^0.10.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -5131,6 +5127,12 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -5222,9 +5224,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { @@ -5381,9 +5383,9 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { @@ -5399,9 +5401,9 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -5458,18 +5460,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -5482,21 +5472,6 @@ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -5544,6 +5519,46 @@ "inherits": "^2.0.1" } }, + "rollup": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.2.0.tgz", + "integrity": "sha512-iAu/j9/WJ0i+zT0sAMuQnsEbmOKzdQ4Yxu5rbPs9aUCyqveI1Kw3H4Fi9NWfCOpb8luEySD2lDyFWL9CrLE8iw==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + }, + "dependencies": { + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + } + } + }, + "rollup-plugin-terser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz", + "integrity": "sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^2.1.2", + "terser": "^4.6.2" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -5647,12 +5662,6 @@ "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -6013,6 +6022,12 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -6170,33 +6185,6 @@ } } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -6206,21 +6194,6 @@ "safe-buffer": "~5.1.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-json-comments": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", @@ -6315,9 +6288,9 @@ } }, "tapable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", - "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "temp-fs": { @@ -6488,26 +6461,6 @@ "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "toidentifier": { @@ -6775,12 +6728,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=" }, - "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", - "dev": true - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -6813,127 +6760,6 @@ "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } } }, "webpack": { @@ -6979,18 +6805,6 @@ "uri-js": "^4.2.2" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -7013,41 +6827,13 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, "neo-async": { @@ -7055,171 +6841,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.2.tgz", - "integrity": "sha512-Cnqo7CeqeSvC6PTdts+dywNi5CRlIPbLx1AoUPK2T6vC1YAugMG3IOoO9DmEscd+Dghw7uRlnzV1KwOe5IrtgQ==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "global-modules-path": "^2.3.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true - }, - "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" - } } } }, @@ -7234,14 +6855,6 @@ "mkdirp": "^0.5.1", "range-parser": "^1.2.1", "webpack-log": "^2.0.0" - }, - "dependencies": { - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - } } }, "webpack-log": { @@ -7281,12 +6894,6 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -7308,38 +6915,6 @@ "errno": "~0.1.7" } }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7390,15 +6965,6 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 12d13651a..267e72584 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -2,20 +2,20 @@ "name": "@optimizely/optimizely-sdk", "version": "4.0.0-alpha.1", "description": "JavaScript SDK for Optimizely X Full Stack", - "main": "lib/index.node.js", - "browser": "lib/index.browser.js", - "react-native": "lib/index.react_native.js", + "main": "dist/optimizely.node.min.js", + "browser": "dist/optimizely.browser.min.js", + "react-native": "dist/optimizely.react_native.min.js", "typings": "lib/index.d.ts", "scripts": { - "test": "mocha ./lib/*.tests.js ./lib/**/*.tests.js ./lib/**/**/*tests.js --recursive --exit --require lib/tests/exit_on_unhandled_rejection.js", + "test": "mocha ./lib/*.tests.js ./lib/**/*.tests.js ./lib/**/**/*tests.js --recursive --exit --require esm --require lib/tests/exit_on_unhandled_rejection.js", "test-xbrowser": "karma start karma.bs.conf.js --single-run", - "test-umdbrowser": "npm run build-browser-umd && karma start karma.umd.conf.js --single-run", - "build-browser-umd": "rm -rf dist && webpack", - "test-ci": "npm run test-xbrowser && npm run test-umdbrowser", + "test-umdbrowser": "karma start karma.umd.conf.js --single-run", + "build": "rollup -c", + "test-ci": "rm -rf dist && npm run build && npm run test-xbrowser && npm run test-umdbrowser", "lint": "eslint 'lib/**/*.js'", "cover": "istanbul cover _mocha ./lib/*.tests.js ./lib/**/*.tests.js ./lib/**/**/*tests.js", "coveralls": "npm run cover -- --report lcovonly && cat ./coverage/lcov.info | coveralls", - "prepublishOnly": "npm run build-browser-umd && npm test && npm run test-xbrowser && npm run test-umdbrowser" + "prepublishOnly": "rm -rf dist && npm run build && npm test && npm run test-xbrowser && npm run test-umdbrowser" }, "repository": { "type": "git", @@ -42,10 +42,13 @@ "uuid": "^3.3.2" }, "devDependencies": { + "@rollup/plugin-commonjs": "^11.0.2", + "@rollup/plugin-node-resolve": "^7.1.1", "bluebird": "^3.4.6", "chai": "^4.2.0", "coveralls": "^3.0.2", "eslint": "^6.7.2", + "esm": "^3.2.25", "istanbul": "^0.4.5", "json-loader": "^0.5.4", "karma": "^4.4.1", @@ -53,16 +56,16 @@ "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.1.1", "karma-mocha": "^1.3.0", - "karma-sinon": "^1.0.5", "karma-webpack": "^4.0.2", "lodash": "^4.17.11", "mocha": "^5.2.0", "mocha-lcov-reporter": "^1.3.0", "nock": "^7.7.2", "promise-polyfill": "8.1.0", + "rollup": "2.2.0", + "rollup-plugin-terser": "^5.3.0", "sinon": "^2.3.1", - "webpack": "^4.42.1", - "webpack-cli": "^3.1.2" + "webpack": "^4.42.1" }, "publishConfig": { "access": "public" diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js new file mode 100644 index 000000000..79304b771 --- /dev/null +++ b/packages/optimizely-sdk/rollup.config.js @@ -0,0 +1,75 @@ +/** + * Copyright 2020, Optimizely + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import commonjs from '@rollup/plugin-commonjs'; +import resolve from '@rollup/plugin-node-resolve' +import { terser } from 'rollup-plugin-terser' +import { dependencies } from './package.json'; + +const getConfigForPlatform = (platform) => { + return { + plugins: [ + resolve(), + commonjs(), + ], + external: ['https', 'http', 'url'].concat(Object.keys(dependencies || {})), + input: `lib/index.${platform}.js`, + output: { + exports: 'named', + format: 'cjs', + file: `dist/optimizely.${platform}.min.js`, + plugins: [terser()] + } + }; +}; + +const namedExports = { + '@optimizely/js-sdk-logging': [ + 'getLogger', + 'setLogLevel', + 'LogLevel', + 'setLogHandler', + 'setErrorHandler', + 'getErrorHandler' + ], + '@optimizely/js-sdk-event-processor': [ + 'LocalStoragePendingEventsDispatcher' + ] +}; + +const getConfigForUMD = (env) => { + return { + plugins: [ + resolve({ browser: true }), + commonjs({ namedExports: namedExports }), + ], + input: 'lib/index.browser.js', + output: { + name: 'optimizelySdk', + format: 'umd', + file: `dist/optimizely.browser.umd${ env === 'production' ? '.min' : '' }.js`, + exports: 'named', + plugins: [ env === 'production' ? terser() : null ] + }, + } +}; + +export default [ + getConfigForPlatform('node'), + getConfigForPlatform('browser'), + getConfigForPlatform('react_native'), + getConfigForUMD('development'), + getConfigForUMD('production'), +]; diff --git a/packages/optimizely-sdk/webpack.config.js b/packages/optimizely-sdk/webpack.config.js deleted file mode 100644 index a7b545b61..000000000 --- a/packages/optimizely-sdk/webpack.config.js +++ /dev/null @@ -1,34 +0,0 @@ -var path = require('path'); - -module.exports = [ - { - entry: path.resolve(__dirname, 'lib/index.browser.js'), - output: { - path: path.resolve(__dirname, 'dist'), - filename: 'optimizely.browser.umd.js', - library: 'optimizelySdk', - libraryTarget: 'umd', - }, - mode: 'none', - node: { - // set to not polyfill setImmediate in promise polyfill - // it is already wrapped in a typeof check - setImmediate: false, - }, - }, - { - entry: path.resolve(__dirname, 'lib/index.browser.js'), - output: { - path: path.resolve(__dirname, 'dist'), - filename: 'optimizely.browser.umd.min.js', - library: 'optimizelySdk', - libraryTarget: 'umd', - }, - mode: 'production', - node: { - // set to not polyfill setImmediate in promise polyfill - // it is already wrapped in a typeof check - setImmediate: false, - }, - }, -]; From b89eed74eae9d111b8860a0631d6a703b6305017 Mon Sep 17 00:00:00 2001 From: fayyazarshad Date: Tue, 7 Apr 2020 19:37:18 +0500 Subject: [PATCH 02/14] finalized the code --- packages/optimizely-sdk/lib/index.browser.js | 13 +++--- .../optimizely-sdk/lib/index.browser.tests.js | 13 +++--- .../lib/index.browser.umdtests.js | 8 ++-- packages/optimizely-sdk/lib/index.node.js | 13 +++--- .../optimizely-sdk/lib/index.node.tests.js | 30 +++++++------ .../optimizely-sdk/lib/index.react_native.js | 19 ++++---- .../lib/index.react_native.tests.js | 43 ++++++++++--------- packages/optimizely-sdk/rollup.config.js | 6 +-- 8 files changed, 78 insertions(+), 67 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.browser.js b/packages/optimizely-sdk/lib/index.browser.js index d7472afa9..b64dabdf0 100644 --- a/packages/optimizely-sdk/lib/index.browser.js +++ b/packages/optimizely-sdk/lib/index.browser.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017, 2019, 2020 Optimizely + * Copyright 2016-2017, 2019-2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,15 @@ * limitations under the License. */ import * as sdkLogging from '@optimizely/js-sdk-logging'; +import { LocalStoragePendingEventsDispatcher } from '@optimizely/js-sdk-event-processor'; + import fns from './utils/fns'; +import Optimizely from './optimizely'; +import utilEnums from './utils/enums'; +import loggerPlugin from './plugins/logger'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; -import utilEnums from './utils/enums'; -import * as eventProcessor from '@optimizely/js-sdk-event-processor'; -import loggerPlugin from './plugins/logger'; -import Optimizely from './optimizely'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; var logger = sdkLogging.getLogger(); @@ -89,7 +90,7 @@ export var createInstance = function(config) { // prettier-ignore if (config.eventDispatcher == null) { // eslint-disable-line eqeqeq // only wrap the event dispatcher with pending events retry if the user didnt override - eventDispatcher = new eventProcessor.LocalStoragePendingEventsDispatcher({ + eventDispatcher = new LocalStoragePendingEventsDispatcher({ eventDispatcher: defaultEventDispatcher, }); diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index cc3fc6b0b..cc70e8223 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2019, 2020 Optimizely + * Copyright 2016-2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,15 +14,18 @@ * limitations under the License. */ import * as logging from '@optimizely/js-sdk-logging'; -import configValidator from './utils/config_validator'; +import * as eventProcessor from '@optimizely/js-sdk-event-processor'; + import Optimizely from './optimizely'; -import optimizelyFactory from './index.browser'; -import packageJSON from '../package.json'; import testData from './tests/test_data'; -import * as eventProcessor from '@optimizely/js-sdk-event-processor'; +import packageJSON from '../package.json'; +import optimizelyFactory from './index.browser'; +import configValidator from './utils/config_validator'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; + import chai from 'chai'; import sinon from 'sinon'; + var assert = chai.assert; var LocalStoragePendingEventsDispatcher = eventProcessor.LocalStoragePendingEventsDispatcher; diff --git a/packages/optimizely-sdk/lib/index.browser.umdtests.js b/packages/optimizely-sdk/lib/index.browser.umdtests.js index e9d4c55e5..c2d298950 100644 --- a/packages/optimizely-sdk/lib/index.browser.umdtests.js +++ b/packages/optimizely-sdk/lib/index.browser.umdtests.js @@ -1,5 +1,5 @@ /** - * Copyright 2018-2019, 2020 Optimizely + * Copyright 2018-2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,13 +18,15 @@ import configValidator from './utils/config_validator'; import enums from './utils/enums'; import logger from './plugins/logger'; import Optimizely from './optimizely'; +import testData from './tests/test_data'; import packageJSON from '../package.json'; import eventDispatcher from './plugins/event_dispatcher/index.browser'; -import testData from './tests/test_data'; + import chai from 'chai'; -var assert = chai.assert; import sinon from 'sinon'; +var assert = chai.assert; + describe('javascript-sdk', function() { describe('APIs', function() { var xhr; diff --git a/packages/optimizely-sdk/lib/index.node.js b/packages/optimizely-sdk/lib/index.node.js index 89b9af1b9..0f6385d6d 100644 --- a/packages/optimizely-sdk/lib/index.node.js +++ b/packages/optimizely-sdk/lib/index.node.js @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2016-2017, 2019, 2020 Optimizely, Inc. and contributors * + * Copyright 2016-2017, 2019-2020 Optimizely, Inc. and contributors * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * @@ -14,14 +14,15 @@ * limitations under the License. * ***************************************************************************/ import * as sdkLogging from '@optimizely/js-sdk-logging'; + +import fns from './utils/fns'; +import Optimizely from './optimizely'; +import utilEnums from './utils/enums'; +import loggerPlugin from './plugins/logger'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; -import defaultEventDispatcher from './plugins/event_dispatcher/index.node'; -import utilEnums from './utils/enums'; -import fns from './utils/fns'; import jsonSchemaValidator from './utils/json_schema_validator'; -import loggerPlugin from './plugins/logger'; -import Optimizely from './optimizely'; +import defaultEventDispatcher from './plugins/event_dispatcher/index.node'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; const logger = sdkLogging.getLogger(); diff --git a/packages/optimizely-sdk/lib/index.node.tests.js b/packages/optimizely-sdk/lib/index.node.tests.js index af879a0a2..63856a998 100644 --- a/packages/optimizely-sdk/lib/index.node.tests.js +++ b/packages/optimizely-sdk/lib/index.node.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2019, 2020 Optimizely + * Copyright 2016-2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,17 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import configValidator from './utils/config_validator'; +import * as eventProcessor from '@optimizely/js-sdk-event-processor'; + import enums from './utils/enums'; -import loggerPlugin from './plugins/logger'; import Optimizely from './optimizely'; -import optimizelyFactory from './index.node'; import testData from './tests/test_data'; -import * as eventProcessor from '@optimizely/js-sdk-event-processor'; +import loggerPlugin from './plugins/logger'; +import optimizelyFactory from './index.node'; +import configValidator from './utils/config_validator'; + import chai from 'chai'; import sinon from 'sinon'; -var assert = chai.assert; +const assert = chai.assert; describe('optimizelyFactory', function() { describe('APIs', function() { @@ -37,9 +39,9 @@ describe('optimizelyFactory', function() { }); describe('createInstance', function() { - var fakeErrorHandler = { handleError: function() {} }; - var fakeEventDispatcher = { dispatchEvent: function() {} }; - var fakeLogger; + const fakeErrorHandler = { handleError: function() {} }; + const fakeEventDispatcher = { dispatchEvent: function() {} }; + let fakeLogger; beforeEach(function() { fakeLogger = { log: sinon.spy(), setLogLevel: sinon.spy() }; @@ -56,9 +58,9 @@ describe('optimizelyFactory', function() { it('should not throw if the provided config is not valid and log an error if logger is passed in', function() { configValidator.validate.throws(new Error('Invalid config or something')); - var localLogger = loggerPlugin.createLogger({ logLevel: enums.LOG_LEVEL.INFO }); + const localLogger = loggerPlugin.createLogger({ logLevel: enums.LOG_LEVEL.INFO }); assert.doesNotThrow(function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ datafile: {}, logger: localLogger, }); @@ -71,7 +73,7 @@ describe('optimizelyFactory', function() { it('should not throw if the provided config is not valid and log an error if no logger is provided', function() { configValidator.validate.throws(new Error('Invalid config or something')); assert.doesNotThrow(function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ datafile: {}, }); // Invalid datafile causes onReady Promise rejection - catch this @@ -81,7 +83,7 @@ describe('optimizelyFactory', function() { }); it('should create an instance of optimizely', function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ datafile: {}, errorHandler: fakeErrorHandler, eventDispatcher: fakeEventDispatcher, @@ -95,7 +97,7 @@ describe('optimizelyFactory', function() { }); describe('event processor configuration', function() { - var eventProcessorSpy; + let eventProcessorSpy; beforeEach(function() { eventProcessorSpy = sinon.stub(eventProcessor, 'LogTierV1EventProcessor').callThrough(); }); diff --git a/packages/optimizely-sdk/lib/index.react_native.js b/packages/optimizely-sdk/lib/index.react_native.js index 8aef888e7..ee55ec193 100644 --- a/packages/optimizely-sdk/lib/index.react_native.js +++ b/packages/optimizely-sdk/lib/index.react_native.js @@ -1,5 +1,5 @@ /** - * Copyright 2019, 2020 Optimizely + * Copyright 2019-2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,21 +14,22 @@ * limitations under the License. */ import * as sdkLogging from '@optimizely/js-sdk-logging'; + import fns from './utils/fns'; +import utilEnums from './utils/enums'; +import Optimizely from './optimizely'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; -import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; -import utilEnums from './utils/enums'; import loggerPlugin from './plugins/logger/index.react_native'; -import Optimizely from './optimizely'; +import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -var logger = sdkLogging.getLogger(); +const logger = sdkLogging.getLogger(); sdkLogging.setLogHandler(loggerPlugin.createLogger()); sdkLogging.setLogLevel(sdkLogging.LogLevel.INFO); -var DEFAULT_EVENT_BATCH_SIZE = 10; -var DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s +const DEFAULT_EVENT_BATCH_SIZE = 10; +const DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s export const logging = loggerPlugin; export const errorHandler = defaultErrorHandler; @@ -95,12 +96,12 @@ export const createInstance = function(config) { errorHandler: sdkLogging.getErrorHandler(), } ); - + // If client engine is react, convert it to react native if (config.clientEngine === enums.REACT_CLIENT_ENGINE) { config.clientEngine = enums.REACT_NATIVE_CLIENT_ENGINE } - + if (!eventProcessorConfigValidator.validateEventBatchSize(config.eventBatchSize)) { logger.warn('Invalid eventBatchSize %s, defaulting to %s', config.eventBatchSize, DEFAULT_EVENT_BATCH_SIZE); config.eventBatchSize = DEFAULT_EVENT_BATCH_SIZE; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index e12571368..d56b6c77d 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2019, 2020 Optimizely + * Copyright 2019-2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,23 +14,25 @@ * limitations under the License. */ import * as logging from '@optimizely/js-sdk-logging'; -import configValidator from './utils/config_validator'; + import Optimizely from './optimizely'; -import optimizelyFactory from './index.react_native'; -import packageJSON from '../package.json'; import testData from './tests/test_data'; +import packageJSON from '../package.json'; +import optimizelyFactory from './index.react_native'; +import configValidator from './utils/config_validator'; import * as eventProcessor from '@optimizely/js-sdk-event-processor'; -import eventProcessorConfigValidator from './utils/event_processor_config_validator'; import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; +import eventProcessorConfigValidator from './utils/event_processor_config_validator'; + import chai from 'chai'; import sinon from 'sinon'; -var assert = chai.assert; +const assert = chai.assert; describe('javascript-sdk/react-native', function() { describe('APIs', function() { - var xhr; - var requests; + let xhr; + let requests; it('should expose logger, errorHandler, eventDispatcher and enums', function() { assert.isDefined(optimizelyFactory.logging); @@ -42,9 +44,9 @@ describe('javascript-sdk/react-native', function() { }); describe('createInstance', function() { - var fakeErrorHandler = { handleError: function() {} }; - var fakeEventDispatcher = { dispatchEvent: function() {} }; - var silentLogger; + const fakeErrorHandler = { handleError: function() {} }; + const fakeEventDispatcher = { dispatchEvent: function() {} }; + let silentLogger; beforeEach(function() { silentLogger = optimizelyFactory.logging.createLogger({ @@ -55,7 +57,6 @@ describe('javascript-sdk/react-native', function() { sinon.stub(configValidator, 'validate'); xhr = sinon.useFakeXMLHttpRequest(); - global.XMLHttpRequest = xhr; requests = []; xhr.onCreate = function(req) { requests.push(req); @@ -71,7 +72,7 @@ describe('javascript-sdk/react-native', function() { it('should not throw if the provided config is not valid', function() { configValidator.validate.throws(new Error('Invalid config or something')); assert.doesNotThrow(function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ datafile: {}, logger: silentLogger, }); @@ -81,7 +82,7 @@ describe('javascript-sdk/react-native', function() { }); it('should create an instance of optimizely', function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ datafile: {}, errorHandler: fakeErrorHandler, eventDispatcher: fakeEventDispatcher, @@ -95,7 +96,7 @@ describe('javascript-sdk/react-native', function() { }); it('should set the React Native JS client engine and javascript SDK version', function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ datafile: {}, errorHandler: fakeErrorHandler, eventDispatcher: fakeEventDispatcher, @@ -108,7 +109,7 @@ describe('javascript-sdk/react-native', function() { }); it('should allow passing of "react-sdk" as the clientEngine and convert it to "react-native-sdk"', function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ clientEngine: 'react-sdk', datafile: {}, errorHandler: fakeErrorHandler, @@ -121,13 +122,13 @@ describe('javascript-sdk/react-native', function() { }); it('should activate with provided event dispatcher', function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ datafile: testData.getTestProjectConfig(), errorHandler: fakeErrorHandler, eventDispatcher: optimizelyFactory.eventDispatcher, logger: silentLogger, }); - var activate = optlyInstance.activate('testExperiment', 'testUser'); + const activate = optlyInstance.activate('testExperiment', 'testUser'); assert.strictEqual(activate, 'control'); }); @@ -143,7 +144,7 @@ describe('javascript-sdk/react-native', function() { }); it('uses the default event dispatcher', function() { - var optlyInstance = optimizelyFactory.createInstance({ + const optlyInstance = optimizelyFactory.createInstance({ datafile: testData.getTestProjectConfig(), errorHandler: fakeErrorHandler, logger: silentLogger, @@ -184,7 +185,7 @@ describe('javascript-sdk/react-native', function() { }); it('should call logging.setLogHandler with the supplied logger', function() { - var fakeLogger = { log: function() {} }; + const fakeLogger = { log: function() {} }; optimizelyFactory.createInstance({ datafile: testData.getTestProjectConfig(), logger: fakeLogger, @@ -195,7 +196,7 @@ describe('javascript-sdk/react-native', function() { }); describe('event processor configuration', function() { - var eventProcessorSpy; + let eventProcessorSpy; beforeEach(function() { eventProcessorSpy = sinon.stub(eventProcessor, 'LogTierV1EventProcessor').callThrough(); }); diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index 79304b771..4c171f42d 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import commonjs from '@rollup/plugin-commonjs'; -import resolve from '@rollup/plugin-node-resolve' -import { terser } from 'rollup-plugin-terser' import { dependencies } from './package.json'; +import commonjs from '@rollup/plugin-commonjs'; +import { terser } from 'rollup-plugin-terser'; +import resolve from '@rollup/plugin-node-resolve'; const getConfigForPlatform = (platform) => { return { From 5e07a494e339378517ddf9de079f4d028e3a6456 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Tue, 7 Apr 2020 19:07:43 -0700 Subject: [PATCH 03/14] added buble-loader to transpile es6 code for karma --- packages/optimizely-sdk/karma.base.conf.js | 12 +- .../lib/index.browser.umdtests.js | 9 +- packages/optimizely-sdk/package-lock.json | 116 ++++++++++++++++++ packages/optimizely-sdk/package.json | 4 +- 4 files changed, 133 insertions(+), 8 deletions(-) diff --git a/packages/optimizely-sdk/karma.base.conf.js b/packages/optimizely-sdk/karma.base.conf.js index 10cb10ea9..295df5499 100644 --- a/packages/optimizely-sdk/karma.base.conf.js +++ b/packages/optimizely-sdk/karma.base.conf.js @@ -1,5 +1,5 @@ /** - * Copyright 2018, Optimizely + * Copyright 2018, 2020 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,10 +20,18 @@ module.exports = { basePath: '', //plugins - plugins: ['karma-mocha', 'karma-webpack', require('karma-browserstack-launcher')], + plugins: ['karma-mocha', 'karma-webpack', require('karma-chrome-launcher'), require('karma-browserstack-launcher')], webpack: { mode: 'production', + module: { + rules: [{ + exclude: /\.json$/, + use: { + loader: 'buble-loader', + } + }] + } }, //browserStack setup diff --git a/packages/optimizely-sdk/lib/index.browser.umdtests.js b/packages/optimizely-sdk/lib/index.browser.umdtests.js index c2d298950..8e9819230 100644 --- a/packages/optimizely-sdk/lib/index.browser.umdtests.js +++ b/packages/optimizely-sdk/lib/index.browser.umdtests.js @@ -13,8 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import configValidator from './utils/config_validator'; +import chai from 'chai'; +import sinon from 'sinon'; +import configValidator from './utils/config_validator'; import enums from './utils/enums'; import logger from './plugins/logger'; import Optimizely from './optimizely'; @@ -22,10 +24,7 @@ import testData from './tests/test_data'; import packageJSON from '../package.json'; import eventDispatcher from './plugins/event_dispatcher/index.browser'; -import chai from 'chai'; -import sinon from 'sinon'; - -var assert = chai.assert; +const assert = chai.assert; describe('javascript-sdk', function() { describe('APIs', function() { diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index b64631bd5..f663faca8 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -396,6 +396,12 @@ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, "acorn-jsx": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", @@ -963,6 +969,38 @@ "temp-fs": "^0.9.9" } }, + "buble": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/buble/-/buble-0.20.0.tgz", + "integrity": "sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==", + "dev": true, + "requires": { + "acorn": "^6.4.1", + "acorn-dynamic-import": "^4.0.0", + "acorn-jsx": "^5.2.0", + "chalk": "^2.4.2", + "magic-string": "^0.25.7", + "minimist": "^1.2.5", + "regexpu-core": "4.5.4" + }, + "dependencies": { + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + } + } + }, + "buble-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/buble-loader/-/buble-loader-0.5.1.tgz", + "integrity": "sha512-ytp2BqL4NfyImoXQUFcIkM2EgKJI2e8KEc9R5/7MbUmdu952CYkhkwydZcKreuC6VAUBp9R7rxS88TZ7RQq/3A==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -4017,6 +4055,12 @@ "dev": true, "optional": true }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, "json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", @@ -5426,6 +5470,21 @@ "readable-stream": "^2.0.2" } }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -5442,6 +5501,35 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, + "regexpu-core": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", + "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.0.2", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -6557,6 +6645,34 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 267e72584..593a3e35c 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -45,6 +45,8 @@ "@rollup/plugin-commonjs": "^11.0.2", "@rollup/plugin-node-resolve": "^7.1.1", "bluebird": "^3.4.6", + "buble": "^0.20.0", + "buble-loader": "^0.5.1", "chai": "^4.2.0", "coveralls": "^3.0.2", "eslint": "^6.7.2", @@ -54,7 +56,7 @@ "karma": "^4.4.1", "karma-browserstack-launcher": "^1.5.1", "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^2.1.1", + "karma-chrome-launcher": "^2.2.0", "karma-mocha": "^1.3.0", "karma-webpack": "^4.0.2", "lodash": "^4.17.11", From f3613ec63b58e1d953d506ef390c1fb599178aed Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Tue, 7 Apr 2020 19:52:44 -0700 Subject: [PATCH 04/14] did some cleanup --- packages/optimizely-sdk/karma.base.conf.js | 2 +- packages/optimizely-sdk/lib/index.browser.js | 11 ++++--- .../lib/index.browser.umdtests.js | 2 +- packages/optimizely-sdk/lib/index.node.js | 20 ++++++------- .../optimizely-sdk/lib/index.node.tests.js | 18 +++++------ .../optimizely-sdk/lib/index.react_native.js | 20 ++++++------- .../lib/index.react_native.tests.js | 30 +++++++++---------- packages/optimizely-sdk/package-lock.json | 25 ---------------- packages/optimizely-sdk/package.json | 1 - 9 files changed, 51 insertions(+), 78 deletions(-) diff --git a/packages/optimizely-sdk/karma.base.conf.js b/packages/optimizely-sdk/karma.base.conf.js index 295df5499..f78aa8d50 100644 --- a/packages/optimizely-sdk/karma.base.conf.js +++ b/packages/optimizely-sdk/karma.base.conf.js @@ -20,7 +20,7 @@ module.exports = { basePath: '', //plugins - plugins: ['karma-mocha', 'karma-webpack', require('karma-chrome-launcher'), require('karma-browserstack-launcher')], + plugins: ['karma-mocha', 'karma-webpack', require('karma-browserstack-launcher')], webpack: { mode: 'production', diff --git a/packages/optimizely-sdk/lib/index.browser.js b/packages/optimizely-sdk/lib/index.browser.js index b64dabdf0..443646a46 100644 --- a/packages/optimizely-sdk/lib/index.browser.js +++ b/packages/optimizely-sdk/lib/index.browser.js @@ -14,15 +14,14 @@ * limitations under the License. */ import * as sdkLogging from '@optimizely/js-sdk-logging'; -import { LocalStoragePendingEventsDispatcher } from '@optimizely/js-sdk-event-processor'; - import fns from './utils/fns'; -import Optimizely from './optimizely'; -import utilEnums from './utils/enums'; -import loggerPlugin from './plugins/logger'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; +import utilEnums from './utils/enums'; +import * as eventProcessor from '@optimizely/js-sdk-event-processor'; +import loggerPlugin from './plugins/logger'; +import Optimizely from './optimizely'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; var logger = sdkLogging.getLogger(); @@ -90,7 +89,7 @@ export var createInstance = function(config) { // prettier-ignore if (config.eventDispatcher == null) { // eslint-disable-line eqeqeq // only wrap the event dispatcher with pending events retry if the user didnt override - eventDispatcher = new LocalStoragePendingEventsDispatcher({ + eventDispatcher = new eventProcessor.LocalStoragePendingEventsDispatcher({ eventDispatcher: defaultEventDispatcher, }); diff --git a/packages/optimizely-sdk/lib/index.browser.umdtests.js b/packages/optimizely-sdk/lib/index.browser.umdtests.js index 8e9819230..ca40461a9 100644 --- a/packages/optimizely-sdk/lib/index.browser.umdtests.js +++ b/packages/optimizely-sdk/lib/index.browser.umdtests.js @@ -24,7 +24,7 @@ import testData from './tests/test_data'; import packageJSON from '../package.json'; import eventDispatcher from './plugins/event_dispatcher/index.browser'; -const assert = chai.assert; +var assert = chai.assert; describe('javascript-sdk', function() { describe('APIs', function() { diff --git a/packages/optimizely-sdk/lib/index.node.js b/packages/optimizely-sdk/lib/index.node.js index 0f6385d6d..ad0d24d57 100644 --- a/packages/optimizely-sdk/lib/index.node.js +++ b/packages/optimizely-sdk/lib/index.node.js @@ -25,18 +25,18 @@ import jsonSchemaValidator from './utils/json_schema_validator'; import defaultEventDispatcher from './plugins/event_dispatcher/index.node'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -const logger = sdkLogging.getLogger(); +var logger = sdkLogging.getLogger(); sdkLogging.setLogLevel(sdkLogging.LogLevel.ERROR); -const DEFAULT_EVENT_BATCH_SIZE = 10; -const DEFAULT_EVENT_FLUSH_INTERVAL = 30000; // Unit is ms, default is 30s +var DEFAULT_EVENT_BATCH_SIZE = 10; +var DEFAULT_EVENT_FLUSH_INTERVAL = 30000; // Unit is ms, default is 30s -export const logging = loggerPlugin; -export const errorHandler = defaultErrorHandler; -export const eventDispatcher = defaultEventDispatcher; -export const enums = utilEnums; -export const setLogger = sdkLogging.setLogHandler; -export const setLogLevel = sdkLogging.setLogLevel; +export var logging = loggerPlugin; +export var errorHandler = defaultErrorHandler; +export var eventDispatcher = defaultEventDispatcher; +export var enums = utilEnums; +export var setLogger = sdkLogging.setLogHandler; +export var setLogLevel = sdkLogging.setLogLevel; /** * Creates an instance of the Optimizely class @@ -51,7 +51,7 @@ export const setLogLevel = sdkLogging.setLogLevel; * @param {Object} config.eventFlushInterval * @return {Object} the Optimizely object */ -export const createInstance = (config) => { +export var createInstance = (config) => { try { let hasLogger = false; config = config || {}; diff --git a/packages/optimizely-sdk/lib/index.node.tests.js b/packages/optimizely-sdk/lib/index.node.tests.js index 63856a998..eeb2cf10d 100644 --- a/packages/optimizely-sdk/lib/index.node.tests.js +++ b/packages/optimizely-sdk/lib/index.node.tests.js @@ -25,7 +25,7 @@ import configValidator from './utils/config_validator'; import chai from 'chai'; import sinon from 'sinon'; -const assert = chai.assert; +var assert = chai.assert; describe('optimizelyFactory', function() { describe('APIs', function() { @@ -39,9 +39,9 @@ describe('optimizelyFactory', function() { }); describe('createInstance', function() { - const fakeErrorHandler = { handleError: function() {} }; - const fakeEventDispatcher = { dispatchEvent: function() {} }; - let fakeLogger; + var fakeErrorHandler = { handleError: function() {} }; + var fakeEventDispatcher = { dispatchEvent: function() {} }; + var fakeLogger; beforeEach(function() { fakeLogger = { log: sinon.spy(), setLogLevel: sinon.spy() }; @@ -58,9 +58,9 @@ describe('optimizelyFactory', function() { it('should not throw if the provided config is not valid and log an error if logger is passed in', function() { configValidator.validate.throws(new Error('Invalid config or something')); - const localLogger = loggerPlugin.createLogger({ logLevel: enums.LOG_LEVEL.INFO }); + var localLogger = loggerPlugin.createLogger({ logLevel: enums.LOG_LEVEL.INFO }); assert.doesNotThrow(function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ datafile: {}, logger: localLogger, }); @@ -73,7 +73,7 @@ describe('optimizelyFactory', function() { it('should not throw if the provided config is not valid and log an error if no logger is provided', function() { configValidator.validate.throws(new Error('Invalid config or something')); assert.doesNotThrow(function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ datafile: {}, }); // Invalid datafile causes onReady Promise rejection - catch this @@ -83,7 +83,7 @@ describe('optimizelyFactory', function() { }); it('should create an instance of optimizely', function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ datafile: {}, errorHandler: fakeErrorHandler, eventDispatcher: fakeEventDispatcher, @@ -97,7 +97,7 @@ describe('optimizelyFactory', function() { }); describe('event processor configuration', function() { - let eventProcessorSpy; + var eventProcessorSpy; beforeEach(function() { eventProcessorSpy = sinon.stub(eventProcessor, 'LogTierV1EventProcessor').callThrough(); }); diff --git a/packages/optimizely-sdk/lib/index.react_native.js b/packages/optimizely-sdk/lib/index.react_native.js index ee55ec193..2bcb7ba55 100644 --- a/packages/optimizely-sdk/lib/index.react_native.js +++ b/packages/optimizely-sdk/lib/index.react_native.js @@ -24,19 +24,19 @@ import loggerPlugin from './plugins/logger/index.react_native'; import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -const logger = sdkLogging.getLogger(); +var logger = sdkLogging.getLogger(); sdkLogging.setLogHandler(loggerPlugin.createLogger()); sdkLogging.setLogLevel(sdkLogging.LogLevel.INFO); -const DEFAULT_EVENT_BATCH_SIZE = 10; -const DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s +var DEFAULT_EVENT_BATCH_SIZE = 10; +var DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s -export const logging = loggerPlugin; -export const errorHandler = defaultErrorHandler; -export const eventDispatcher = defaultEventDispatcher; -export const enums = utilEnums; -export const setLogger = sdkLogging.setLogHandler; -export const setLogLevel = sdkLogging.setLogLevel; +export var logging = loggerPlugin; +export var errorHandler = defaultErrorHandler; +export var eventDispatcher = defaultEventDispatcher; +export var enums = utilEnums; +export var setLogger = sdkLogging.setLogHandler; +export var setLogLevel = sdkLogging.setLogLevel; /** * Creates an instance of the Optimizely class @@ -51,7 +51,7 @@ export const setLogLevel = sdkLogging.setLogLevel; * @param {Object} config.eventFlushInterval * @return {Object} the Optimizely object */ -export const createInstance = function(config) { +export var createInstance = function(config) { try { config = config || {}; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index d56b6c77d..9b49aa017 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -27,12 +27,12 @@ import eventProcessorConfigValidator from './utils/event_processor_config_valida import chai from 'chai'; import sinon from 'sinon'; -const assert = chai.assert; +var assert = chai.assert; describe('javascript-sdk/react-native', function() { describe('APIs', function() { - let xhr; - let requests; + var xhr; + var requests; it('should expose logger, errorHandler, eventDispatcher and enums', function() { assert.isDefined(optimizelyFactory.logging); @@ -44,9 +44,9 @@ describe('javascript-sdk/react-native', function() { }); describe('createInstance', function() { - const fakeErrorHandler = { handleError: function() {} }; - const fakeEventDispatcher = { dispatchEvent: function() {} }; - let silentLogger; + var fakeErrorHandler = { handleError: function() {} }; + var fakeEventDispatcher = { dispatchEvent: function() {} }; + var silentLogger; beforeEach(function() { silentLogger = optimizelyFactory.logging.createLogger({ @@ -72,7 +72,7 @@ describe('javascript-sdk/react-native', function() { it('should not throw if the provided config is not valid', function() { configValidator.validate.throws(new Error('Invalid config or something')); assert.doesNotThrow(function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ datafile: {}, logger: silentLogger, }); @@ -82,7 +82,7 @@ describe('javascript-sdk/react-native', function() { }); it('should create an instance of optimizely', function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ datafile: {}, errorHandler: fakeErrorHandler, eventDispatcher: fakeEventDispatcher, @@ -96,7 +96,7 @@ describe('javascript-sdk/react-native', function() { }); it('should set the React Native JS client engine and javascript SDK version', function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ datafile: {}, errorHandler: fakeErrorHandler, eventDispatcher: fakeEventDispatcher, @@ -109,7 +109,7 @@ describe('javascript-sdk/react-native', function() { }); it('should allow passing of "react-sdk" as the clientEngine and convert it to "react-native-sdk"', function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ clientEngine: 'react-sdk', datafile: {}, errorHandler: fakeErrorHandler, @@ -122,13 +122,13 @@ describe('javascript-sdk/react-native', function() { }); it('should activate with provided event dispatcher', function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ datafile: testData.getTestProjectConfig(), errorHandler: fakeErrorHandler, eventDispatcher: optimizelyFactory.eventDispatcher, logger: silentLogger, }); - const activate = optlyInstance.activate('testExperiment', 'testUser'); + var activate = optlyInstance.activate('testExperiment', 'testUser'); assert.strictEqual(activate, 'control'); }); @@ -144,7 +144,7 @@ describe('javascript-sdk/react-native', function() { }); it('uses the default event dispatcher', function() { - const optlyInstance = optimizelyFactory.createInstance({ + var optlyInstance = optimizelyFactory.createInstance({ datafile: testData.getTestProjectConfig(), errorHandler: fakeErrorHandler, logger: silentLogger, @@ -185,7 +185,7 @@ describe('javascript-sdk/react-native', function() { }); it('should call logging.setLogHandler with the supplied logger', function() { - const fakeLogger = { log: function() {} }; + var fakeLogger = { log: function() {} }; optimizelyFactory.createInstance({ datafile: testData.getTestProjectConfig(), logger: fakeLogger, @@ -196,7 +196,7 @@ describe('javascript-sdk/react-native', function() { }); describe('event processor configuration', function() { - let eventProcessorSpy; + var eventProcessorSpy; beforeEach(function() { eventProcessorSpy = sinon.stub(eventProcessor, 'LogTierV1EventProcessor').callThrough(); }); diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index f663faca8..3e12f6ca2 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -2714,15 +2714,6 @@ "readable-stream": "^2.0.0" } }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -4275,16 +4266,6 @@ "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=", "dev": true }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=", - "dev": true, - "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } - }, "karma-mocha": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", @@ -4895,12 +4876,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 593a3e35c..2ff5365f3 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -56,7 +56,6 @@ "karma": "^4.4.1", "karma-browserstack-launcher": "^1.5.1", "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^2.2.0", "karma-mocha": "^1.3.0", "karma-webpack": "^4.0.2", "lodash": "^4.17.11", From cb49cc5f04bd48e67639a4a7e016f205f03c627f Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 12:12:46 -0700 Subject: [PATCH 05/14] cleaned up index.browser.js --- packages/optimizely-sdk/lib/index.browser.js | 62 ++++++++++++-------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.browser.js b/packages/optimizely-sdk/lib/index.browser.js index 443646a46..484612a5f 100644 --- a/packages/optimizely-sdk/lib/index.browser.js +++ b/packages/optimizely-sdk/lib/index.browser.js @@ -13,20 +13,28 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as sdkLogging from '@optimizely/js-sdk-logging'; +import { + getLogger, + setLogHandler, + setLogLevel, + setErrorHandler, + getErrorHandler, + LogLevel, +} from '@optimizely/js-sdk-logging'; +import { LocalStoragePendingEventsDispatcher } from '@optimizely/js-sdk-event-processor'; + import fns from './utils/fns'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; -import utilEnums from './utils/enums'; -import * as eventProcessor from '@optimizely/js-sdk-event-processor'; +import enums from './utils/enums'; import loggerPlugin from './plugins/logger'; import Optimizely from './optimizely'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -var logger = sdkLogging.getLogger(); -sdkLogging.setLogHandler(loggerPlugin.createLogger()); -sdkLogging.setLogLevel(sdkLogging.LogLevel.INFO); +var logger = getLogger(); +setLogHandler(loggerPlugin.createLogger()); +setLogLevel(LogLevel.INFO); var MODULE_NAME = 'INDEX_BROWSER'; var DEFAULT_EVENT_BATCH_SIZE = 10; @@ -34,13 +42,6 @@ var DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s var hasRetriedEvents = false; -export var logging = loggerPlugin; -export var errorHandler = defaultErrorHandler; -export var eventDispatcher = defaultEventDispatcher; -export var enums = utilEnums; -export var setLogger = sdkLogging.setLogHandler; -export var setLogLevel = sdkLogging.setLogLevel; - /** * Creates an instance of the Optimizely class * @param {Object} config @@ -54,21 +55,21 @@ export var setLogLevel = sdkLogging.setLogLevel; * @param {Object} config.eventFlushInterval * @return {Object} the Optimizely object */ -export var createInstance = function(config) { +var createInstance = function(config) { try { config = config || {}; // TODO warn about setting per instance errorHandler / logger / logLevel if (config.errorHandler) { - sdkLogging.setErrorHandler(config.errorHandler); + setErrorHandler(config.errorHandler); } if (config.logger) { - sdkLogging.setLogHandler(config.logger); + setLogHandler(config.logger); // respect the logger's shouldLog functionality - sdkLogging.setLogLevel(sdkLogging.LogLevel.NOTSET); + setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - sdkLogging.setLogLevel(config.logLevel); + setLogLevel(config.logLevel); } try { @@ -89,7 +90,7 @@ export var createInstance = function(config) { // prettier-ignore if (config.eventDispatcher == null) { // eslint-disable-line eqeqeq // only wrap the event dispatcher with pending events retry if the user didnt override - eventDispatcher = new eventProcessor.LocalStoragePendingEventsDispatcher({ + eventDispatcher = new LocalStoragePendingEventsDispatcher({ eventDispatcher: defaultEventDispatcher, }); @@ -112,7 +113,7 @@ export var createInstance = function(config) { eventDispatcher: eventDispatcher, // always get the OptimizelyLogger facade from logging logger: logger, - errorHandler: sdkLogging.getErrorHandler(), + errorHandler: getErrorHandler(), } ); @@ -153,19 +154,30 @@ export var createInstance = function(config) { } }; -export var __internalResetRetryState = function() { +var __internalResetRetryState = function() { hasRetriedEvents = false; }; /** * Entry point into the Optimizely Browser SDK */ +export { + loggerPlugin as logging, + defaultErrorHandler as errorHandler, + defaultEventDispatcher as eventDispatcher, + enums, + setLogHandler as setLogger, + setLogLevel, + createInstance, + __internalResetRetryState, +} + export default { - logging, - errorHandler, - eventDispatcher, + logging: loggerPlugin, + errorHandler: defaultErrorHandler, + eventDispatcher: defaultEventDispatcher, enums, - setLogger, + setLogger: setLogHandler, setLogLevel, createInstance, __internalResetRetryState, From 4f520cc1563c441fe15ebf33102dfd7ff246e152 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 12:41:25 -0700 Subject: [PATCH 06/14] cleaned up node entry --- packages/optimizely-sdk/lib/index.node.js | 56 +++++++++++++---------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.node.js b/packages/optimizely-sdk/lib/index.node.js index ad0d24d57..4348d8a66 100644 --- a/packages/optimizely-sdk/lib/index.node.js +++ b/packages/optimizely-sdk/lib/index.node.js @@ -13,11 +13,18 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import * as sdkLogging from '@optimizely/js-sdk-logging'; +import { + getLogger, + setLogHandler, + setLogLevel, + setErrorHandler, + getErrorHandler, + LogLevel, +} from '@optimizely/js-sdk-logging'; import fns from './utils/fns'; import Optimizely from './optimizely'; -import utilEnums from './utils/enums'; +import enums from './utils/enums'; import loggerPlugin from './plugins/logger'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; @@ -25,19 +32,12 @@ import jsonSchemaValidator from './utils/json_schema_validator'; import defaultEventDispatcher from './plugins/event_dispatcher/index.node'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -var logger = sdkLogging.getLogger(); -sdkLogging.setLogLevel(sdkLogging.LogLevel.ERROR); +var logger = getLogger(); +setLogLevel(LogLevel.ERROR); var DEFAULT_EVENT_BATCH_SIZE = 10; var DEFAULT_EVENT_FLUSH_INTERVAL = 30000; // Unit is ms, default is 30s -export var logging = loggerPlugin; -export var errorHandler = defaultErrorHandler; -export var eventDispatcher = defaultEventDispatcher; -export var enums = utilEnums; -export var setLogger = sdkLogging.setLogHandler; -export var setLogLevel = sdkLogging.setLogLevel; - /** * Creates an instance of the Optimizely class * @param {Object} config @@ -51,24 +51,24 @@ export var setLogLevel = sdkLogging.setLogLevel; * @param {Object} config.eventFlushInterval * @return {Object} the Optimizely object */ -export var createInstance = (config) => { +var createInstance = function(config) { try { - let hasLogger = false; + var hasLogger = false; config = config || {}; // TODO warn about setting per instance errorHandler / logger / logLevel if (config.errorHandler) { - sdkLogging.setErrorHandler(config.errorHandler); + setErrorHandler(config.errorHandler); } if (config.logger) { // only set a logger in node if one is provided, by not setting we are noop-ing hasLogger = true; - sdkLogging.setLogHandler(config.logger); + setLogHandler(config.logger); // respect the logger's shouldLog functionality - sdkLogging.setLogLevel(sdkLogging.LogLevel.NOTSET); + setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - sdkLogging.setLogLevel(config.logLevel); + setLogLevel(config.logLevel); } try { @@ -85,7 +85,7 @@ export var createInstance = (config) => { config = fns.assign( { - clientEngine: utilEnums.NODE_CLIENT_ENGINE, + clientEngine: enums.NODE_CLIENT_ENGINE, eventBatchSize: DEFAULT_EVENT_BATCH_SIZE, eventDispatcher: defaultEventDispatcher, eventFlushInterval: DEFAULT_EVENT_FLUSH_INTERVAL, @@ -96,7 +96,7 @@ export var createInstance = (config) => { { // always get the OptimizelyLogger facade from logging logger: logger, - errorHandler: sdkLogging.getErrorHandler(), + errorHandler: getErrorHandler(), } ); @@ -123,12 +123,22 @@ export var createInstance = (config) => { /** * Entry point into the Optimizely Node testing SDK */ +export { + loggerPlugin as logging, + defaultErrorHandler as errorHandler, + defaultEventDispatcher as eventDispatcher, + enums, + setLogHandler as setLogger, + setLogLevel, + createInstance, +} + export default { - logging, - errorHandler, - eventDispatcher, + logging: loggerPlugin, + errorHandler: defaultErrorHandler, + eventDispatcher: defaultEventDispatcher, enums, - setLogger, + setLogger: setLogHandler, setLogLevel, createInstance, }; From c6b3b62231bec64b33f26fee0c1b9dd595af2b0f Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 12:47:03 -0700 Subject: [PATCH 07/14] cleaned up react native entry --- .../optimizely-sdk/lib/index.react_native.js | 54 +++++++++++-------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.react_native.js b/packages/optimizely-sdk/lib/index.react_native.js index 2bcb7ba55..817d67f97 100644 --- a/packages/optimizely-sdk/lib/index.react_native.js +++ b/packages/optimizely-sdk/lib/index.react_native.js @@ -13,10 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as sdkLogging from '@optimizely/js-sdk-logging'; +import { + getLogger, + setLogHandler, + setLogLevel, + setErrorHandler, + getErrorHandler, + LogLevel, +} from '@optimizely/js-sdk-logging'; import fns from './utils/fns'; -import utilEnums from './utils/enums'; +import enums from './utils/enums'; import Optimizely from './optimizely'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; @@ -24,20 +31,13 @@ import loggerPlugin from './plugins/logger/index.react_native'; import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -var logger = sdkLogging.getLogger(); -sdkLogging.setLogHandler(loggerPlugin.createLogger()); -sdkLogging.setLogLevel(sdkLogging.LogLevel.INFO); +var logger = getLogger(); +setLogHandler(loggerPlugin.createLogger()); +setLogLevel(LogLevel.INFO); var DEFAULT_EVENT_BATCH_SIZE = 10; var DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s -export var logging = loggerPlugin; -export var errorHandler = defaultErrorHandler; -export var eventDispatcher = defaultEventDispatcher; -export var enums = utilEnums; -export var setLogger = sdkLogging.setLogHandler; -export var setLogLevel = sdkLogging.setLogLevel; - /** * Creates an instance of the Optimizely class * @param {Object} config @@ -51,21 +51,21 @@ export var setLogLevel = sdkLogging.setLogLevel; * @param {Object} config.eventFlushInterval * @return {Object} the Optimizely object */ -export var createInstance = function(config) { +var createInstance = function(config) { try { config = config || {}; // TODO warn about setting per instance errorHandler / logger / logLevel if (config.errorHandler) { - sdkLogging.setErrorHandler(config.errorHandler); + setErrorHandler(config.errorHandler); } if (config.logger) { - sdkLogging.setLogHandler(config.logger); + setLogHandler(config.logger); // respect the logger's shouldLog functionality - sdkLogging.setLogLevel(sdkLogging.LogLevel.NOTSET); + setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - sdkLogging.setLogLevel(config.logLevel); + setLogLevel(config.logLevel); } try { @@ -93,7 +93,7 @@ export var createInstance = function(config) { { // always get the OptimizelyLogger facade from logging logger: logger, - errorHandler: sdkLogging.getErrorHandler(), + errorHandler: getErrorHandler(), } ); @@ -125,12 +125,22 @@ export var createInstance = function(config) { /** * Entry point into the Optimizely Javascript SDK for React Native */ +export { + loggerPlugin as logging, + defaultErrorHandler as errorHandler, + defaultEventDispatcher as eventDispatcher, + enums, + setLogHandler as setLogger, + setLogLevel, + createInstance, +} + export default { - logging, - errorHandler, - eventDispatcher, + logging: loggerPlugin, + errorHandler: defaultErrorHandler, + eventDispatcher: defaultEventDispatcher, enums, - setLogger, + setLogger: setLogHandler, setLogLevel, createInstance, }; From 5cea14dd9a0c50777ded01222c20bce5d68c3df5 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 12:57:28 -0700 Subject: [PATCH 08/14] cleaned up test files --- packages/optimizely-sdk/lib/index.browser.tests.js | 6 ++---- packages/optimizely-sdk/lib/index.browser.umdtests.js | 4 +--- packages/optimizely-sdk/lib/index.node.tests.js | 7 ++----- packages/optimizely-sdk/lib/index.react_native.tests.js | 9 +++------ 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index cc70e8223..80b6cef6e 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { assert } from 'chai'; +import sinon from 'sinon'; import * as logging from '@optimizely/js-sdk-logging'; import * as eventProcessor from '@optimizely/js-sdk-event-processor'; @@ -23,10 +25,6 @@ import optimizelyFactory from './index.browser'; import configValidator from './utils/config_validator'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -import chai from 'chai'; -import sinon from 'sinon'; - -var assert = chai.assert; var LocalStoragePendingEventsDispatcher = eventProcessor.LocalStoragePendingEventsDispatcher; describe('javascript-sdk', function() { diff --git a/packages/optimizely-sdk/lib/index.browser.umdtests.js b/packages/optimizely-sdk/lib/index.browser.umdtests.js index ca40461a9..0cce2d9c2 100644 --- a/packages/optimizely-sdk/lib/index.browser.umdtests.js +++ b/packages/optimizely-sdk/lib/index.browser.umdtests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import chai from 'chai'; +import { assert } from 'chai'; import sinon from 'sinon'; import configValidator from './utils/config_validator'; @@ -24,8 +24,6 @@ import testData from './tests/test_data'; import packageJSON from '../package.json'; import eventDispatcher from './plugins/event_dispatcher/index.browser'; -var assert = chai.assert; - describe('javascript-sdk', function() { describe('APIs', function() { var xhr; diff --git a/packages/optimizely-sdk/lib/index.node.tests.js b/packages/optimizely-sdk/lib/index.node.tests.js index eeb2cf10d..220176be0 100644 --- a/packages/optimizely-sdk/lib/index.node.tests.js +++ b/packages/optimizely-sdk/lib/index.node.tests.js @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { assert } from 'chai'; +import sinon from 'sinon'; import * as eventProcessor from '@optimizely/js-sdk-event-processor'; import enums from './utils/enums'; @@ -22,11 +24,6 @@ import loggerPlugin from './plugins/logger'; import optimizelyFactory from './index.node'; import configValidator from './utils/config_validator'; -import chai from 'chai'; -import sinon from 'sinon'; - -var assert = chai.assert; - describe('optimizelyFactory', function() { describe('APIs', function() { it('should expose logger, errorHandler, eventDispatcher and enums', function() { diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 9b49aa017..0b9f6b913 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -13,22 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { assert } from 'chai'; +import sinon from 'sinon'; import * as logging from '@optimizely/js-sdk-logging'; +import * as eventProcessor from '@optimizely/js-sdk-event-processor'; import Optimizely from './optimizely'; import testData from './tests/test_data'; import packageJSON from '../package.json'; import optimizelyFactory from './index.react_native'; import configValidator from './utils/config_validator'; -import * as eventProcessor from '@optimizely/js-sdk-event-processor'; import defaultEventDispatcher from './plugins/event_dispatcher/index.browser'; import eventProcessorConfigValidator from './utils/event_processor_config_validator'; -import chai from 'chai'; -import sinon from 'sinon'; - -var assert = chai.assert; - describe('javascript-sdk/react-native', function() { describe('APIs', function() { var xhr; From a6ffcbc0ee8fbadc819df5d537d2668a500f89d1 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 14:49:59 -0700 Subject: [PATCH 09/14] cleaned up rollup and package json --- packages/optimizely-sdk/package.json | 9 +-- packages/optimizely-sdk/rollup.config.js | 70 +++++++++++++----------- 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 2ff5365f3..3e5277364 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -9,13 +9,14 @@ "scripts": { "test": "mocha ./lib/*.tests.js ./lib/**/*.tests.js ./lib/**/**/*tests.js --recursive --exit --require esm --require lib/tests/exit_on_unhandled_rejection.js", "test-xbrowser": "karma start karma.bs.conf.js --single-run", - "test-umdbrowser": "karma start karma.umd.conf.js --single-run", - "build": "rollup -c", - "test-ci": "rm -rf dist && npm run build && npm run test-xbrowser && npm run test-umdbrowser", + "test-umdbrowser": "npm run build-browser-umd && karma start karma.umd.conf.js --single-run", + "build-browser-umd": "rollup -c --environment BUILD_UMD_BUNDLE", + "build": "rm -rf dist && rollup -c --environment BUILD_ALL", + "test-ci": "npm run test-xbrowser && npm run test-umdbrowser", "lint": "eslint 'lib/**/*.js'", "cover": "istanbul cover _mocha ./lib/*.tests.js ./lib/**/*.tests.js ./lib/**/**/*tests.js", "coveralls": "npm run cover -- --report lcovonly && cat ./coverage/lcov.info | coveralls", - "prepublishOnly": "rm -rf dist && npm run build && npm test && npm run test-xbrowser && npm run test-umdbrowser" + "prepublishOnly": "npm run build && npm test && npm run test-xbrowser && npm run test-umdbrowser" }, "repository": { "type": "git", diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index 4c171f42d..40020f06c 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -18,6 +18,9 @@ import commonjs from '@rollup/plugin-commonjs'; import { terser } from 'rollup-plugin-terser'; import resolve from '@rollup/plugin-node-resolve'; +const BUILD_ALL = process.env.BUILD_ALL ? true : false; +const BUILD_UMD_BUNDLE = process.env.BUILD_UMD_BUNDLE ? true : false; + const getConfigForPlatform = (platform) => { return { plugins: [ @@ -30,46 +33,51 @@ const getConfigForPlatform = (platform) => { exports: 'named', format: 'cjs', file: `dist/optimizely.${platform}.min.js`, - plugins: [terser()] + plugins: [ terser() ] } }; }; -const namedExports = { - '@optimizely/js-sdk-logging': [ - 'getLogger', - 'setLogLevel', - 'LogLevel', - 'setLogHandler', - 'setErrorHandler', - 'getErrorHandler' +const configForUMD = { + plugins: [ + resolve({ browser: true }), + commonjs({ + namedExports: { + '@optimizely/js-sdk-logging': [ + 'getLogger', + 'setLogLevel', + 'LogLevel', + 'setLogHandler', + 'setErrorHandler', + 'getErrorHandler' + ], + '@optimizely/js-sdk-event-processor': [ + 'LocalStoragePendingEventsDispatcher' + ] + } + }), ], - '@optimizely/js-sdk-event-processor': [ - 'LocalStoragePendingEventsDispatcher' - ] -}; - -const getConfigForUMD = (env) => { - return { - plugins: [ - resolve({ browser: true }), - commonjs({ namedExports: namedExports }), - ], - input: 'lib/index.browser.js', - output: { + input: 'lib/index.browser.js', + output: [ + { + name: 'optimizelySdk', + format: 'umd', + file: 'dist/optimizely.browser.umd.js', + exports: 'named', + }, + { name: 'optimizelySdk', format: 'umd', - file: `dist/optimizely.browser.umd${ env === 'production' ? '.min' : '' }.js`, + file: 'dist/optimizely.browser.umd.min.js', exports: 'named', - plugins: [ env === 'production' ? terser() : null ] + plugins: [ terser() ], }, - } + ], }; export default [ - getConfigForPlatform('node'), - getConfigForPlatform('browser'), - getConfigForPlatform('react_native'), - getConfigForUMD('development'), - getConfigForUMD('production'), -]; + BUILD_ALL && getConfigForPlatform('node'), + BUILD_ALL && getConfigForPlatform('browser'), + BUILD_ALL && getConfigForPlatform('react_native'), + (BUILD_ALL || BUILD_UMD_BUNDLE) && configForUMD, +].filter(config => config); From 03d5feed4a455f13869b36dfc58b9c054ed80837 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 17:12:15 -0700 Subject: [PATCH 10/14] incorporated review feedback --- packages/optimizely-sdk/karma.base.conf.js | 8 -------- packages/optimizely-sdk/package.json | 1 + packages/optimizely-sdk/rollup.config.js | 23 ++++++++++++++++------ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/optimizely-sdk/karma.base.conf.js b/packages/optimizely-sdk/karma.base.conf.js index f78aa8d50..c4ff7a400 100644 --- a/packages/optimizely-sdk/karma.base.conf.js +++ b/packages/optimizely-sdk/karma.base.conf.js @@ -24,14 +24,6 @@ module.exports = { webpack: { mode: 'production', - module: { - rules: [{ - exclude: /\.json$/, - use: { - loader: 'buble-loader', - } - }] - } }, //browserStack setup diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 3e5277364..fdcb9e1c9 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -2,6 +2,7 @@ "name": "@optimizely/optimizely-sdk", "version": "4.0.0-alpha.1", "description": "JavaScript SDK for Optimizely X Full Stack", + "module": "dist/optimizely.browser.es.min.js", "main": "dist/optimizely.node.min.js", "browser": "dist/optimizely.browser.min.js", "react-native": "dist/optimizely.react_native.min.js", diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index 40020f06c..9508b4530 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -21,7 +21,7 @@ import resolve from '@rollup/plugin-node-resolve'; const BUILD_ALL = process.env.BUILD_ALL ? true : false; const BUILD_UMD_BUNDLE = process.env.BUILD_UMD_BUNDLE ? true : false; -const getConfigForPlatform = (platform) => { +const getCjsConfigForPlatform = (platform) => { return { plugins: [ resolve(), @@ -38,7 +38,17 @@ const getConfigForPlatform = (platform) => { }; }; -const configForUMD = { +const esModuleConfig = { + ... getCjsConfigForPlatform('browser'), + output: { + exports: 'named', + format: 'es', + file: 'dist/optimizely.browser.es.min.js', + plugins: [ terser() ] + } +} + +const umdconfig = { plugins: [ resolve({ browser: true }), commonjs({ @@ -76,8 +86,9 @@ const configForUMD = { }; export default [ - BUILD_ALL && getConfigForPlatform('node'), - BUILD_ALL && getConfigForPlatform('browser'), - BUILD_ALL && getConfigForPlatform('react_native'), - (BUILD_ALL || BUILD_UMD_BUNDLE) && configForUMD, + BUILD_ALL && getCjsConfigForPlatform('node'), + BUILD_ALL && getCjsConfigForPlatform('browser'), + BUILD_ALL && getCjsConfigForPlatform('react_native'), + BUILD_ALL && esModuleConfig, + (BUILD_ALL || BUILD_UMD_BUNDLE) && umdconfig, ].filter(config => config); From 69c2c7e58dcffc894d9f536d016e6ce6a71b5264 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 17:17:05 -0700 Subject: [PATCH 11/14] removed unused dependencies --- packages/optimizely-sdk/package-lock.json | 116 ---------------------- packages/optimizely-sdk/package.json | 2 - 2 files changed, 118 deletions(-) diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index 3e12f6ca2..530378bf5 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -396,12 +396,6 @@ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true - }, "acorn-jsx": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", @@ -969,38 +963,6 @@ "temp-fs": "^0.9.9" } }, - "buble": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/buble/-/buble-0.20.0.tgz", - "integrity": "sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw==", - "dev": true, - "requires": { - "acorn": "^6.4.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-jsx": "^5.2.0", - "chalk": "^2.4.2", - "magic-string": "^0.25.7", - "minimist": "^1.2.5", - "regexpu-core": "4.5.4" - }, - "dependencies": { - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true - } - } - }, - "buble-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/buble-loader/-/buble-loader-0.5.1.tgz", - "integrity": "sha512-ytp2BqL4NfyImoXQUFcIkM2EgKJI2e8KEc9R5/7MbUmdu952CYkhkwydZcKreuC6VAUBp9R7rxS88TZ7RQq/3A==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0" - } - }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -4046,12 +4008,6 @@ "dev": true, "optional": true }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, "json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", @@ -5445,21 +5401,6 @@ "readable-stream": "^2.0.2" } }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -5476,35 +5417,6 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", - "dev": true - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -6620,34 +6532,6 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index fdcb9e1c9..94f1be9d0 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -47,8 +47,6 @@ "@rollup/plugin-commonjs": "^11.0.2", "@rollup/plugin-node-resolve": "^7.1.1", "bluebird": "^3.4.6", - "buble": "^0.20.0", - "buble-loader": "^0.5.1", "chai": "^4.2.0", "coveralls": "^3.0.2", "eslint": "^6.7.2", From 363814c44dea46f225bb6faeb9ab5d2906f768c7 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 17:48:49 -0700 Subject: [PATCH 12/14] Added karma-chrome-launcher again to enable local testing --- packages/optimizely-sdk/package-lock.json | 25 +++++++++++++++++++++++ packages/optimizely-sdk/package.json | 1 + 2 files changed, 26 insertions(+) diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index 530378bf5..19a5734a3 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -2676,6 +2676,15 @@ "readable-stream": "^2.0.0" } }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, "fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", @@ -4222,6 +4231,16 @@ "integrity": "sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o=", "dev": true }, + "karma-chrome-launcher": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz", + "integrity": "sha1-IWh5xorATY1RQOmWGboEtZr9Rs8=", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, "karma-mocha": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", @@ -4832,6 +4851,12 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 94f1be9d0..54214a24d 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -56,6 +56,7 @@ "karma": "^4.4.1", "karma-browserstack-launcher": "^1.5.1", "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^2.1.1", "karma-mocha": "^1.3.0", "karma-webpack": "^4.0.2", "lodash": "^4.17.11", From 7db4f75ea568b09218a06eca552d9c1683a4ae93 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 17:50:34 -0700 Subject: [PATCH 13/14] removed hardcoded testapp branch from travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b6ee18290..7ed28d782 100644 --- a/.travis.yml +++ b/.travis.yml @@ -70,8 +70,8 @@ jobs: before_script: - mkdir $HOME/travisci-tools && pushd $HOME/travisci-tools && git init && git pull https://$CI_USER_TOKEN@github.com/optimizely/travisci-tools.git && popd script: - - CLIENT=node TESTAPP_BRANCH=fayyaz/added-support-for-es6 $HOME/travisci-tools/trigger-script-with-status-update.sh - - CLIENT=browser TESTAPP_BRANCH=fayyaz/added-support-for-es6 $HOME/travisci-tools/trigger-script-with-status-update.sh + - CLIENT=node $HOME/travisci-tools/trigger-script-with-status-update.sh + - CLIENT=browser $HOME/travisci-tools/trigger-script-with-status-update.sh after_success: travis_terminate 0 - <<: *integrationtest stage: 'Benchmarking tests' From b51fe4ce4ca14ade5ec250327381f33abc5e6c52 Mon Sep 17 00:00:00 2001 From: Zeeshan Ashraf Date: Wed, 8 Apr 2020 18:10:22 -0700 Subject: [PATCH 14/14] changed es6 property shorthand to its full form to support es5 --- packages/optimizely-sdk/lib/index.browser.js | 8 ++++---- packages/optimizely-sdk/lib/index.node.js | 6 +++--- packages/optimizely-sdk/lib/index.react_native.js | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.browser.js b/packages/optimizely-sdk/lib/index.browser.js index 271fbc1f9..c368cef8b 100644 --- a/packages/optimizely-sdk/lib/index.browser.js +++ b/packages/optimizely-sdk/lib/index.browser.js @@ -170,9 +170,9 @@ export default { logging: loggerPlugin, errorHandler: defaultErrorHandler, eventDispatcher: defaultEventDispatcher, - enums, + enums: enums, setLogger: setLogHandler, - setLogLevel, - createInstance, - __internalResetRetryState, + setLogLevel: setLogLevel, + createInstance: createInstance, + __internalResetRetryState: __internalResetRetryState, }; diff --git a/packages/optimizely-sdk/lib/index.node.js b/packages/optimizely-sdk/lib/index.node.js index 05b122d83..a3a983d2d 100644 --- a/packages/optimizely-sdk/lib/index.node.js +++ b/packages/optimizely-sdk/lib/index.node.js @@ -133,8 +133,8 @@ export default { logging: loggerPlugin, errorHandler: defaultErrorHandler, eventDispatcher: defaultEventDispatcher, - enums, + enums: enums, setLogger: setLogHandler, - setLogLevel, - createInstance, + setLogLevel: setLogLevel, + createInstance: createInstance, }; diff --git a/packages/optimizely-sdk/lib/index.react_native.js b/packages/optimizely-sdk/lib/index.react_native.js index 1446bfcbb..f94407977 100644 --- a/packages/optimizely-sdk/lib/index.react_native.js +++ b/packages/optimizely-sdk/lib/index.react_native.js @@ -133,8 +133,8 @@ export default { logging: loggerPlugin, errorHandler: defaultErrorHandler, eventDispatcher: defaultEventDispatcher, - enums, + enums: enums, setLogger: setLogHandler, - setLogLevel, - createInstance, + setLogLevel: setLogLevel, + createInstance: createInstance, };