From 92e3ab7e401e4bb77846e05d030f4077243280f4 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Wed, 2 Mar 2022 13:05:33 +0500 Subject: [PATCH 01/48] utils integrated --- packages/optimizely-sdk/jest.config.js | 17 + .../core/audience_evaluator/index.tests.js | 2 +- .../lib/core/bucketer/index.tests.js | 2 +- .../optimizely-sdk/lib/core/bucketer/index.ts | 2 +- .../index.tests.js | 2 +- .../lib/core/decision_service/index.tests.js | 2 +- .../lib/core/decision_service/index.ts | 2 +- .../lib/core/notification_center/index.ts | 4 +- .../lib/core/project_config/index.tests.js | 2 +- .../lib/core/project_config/index.ts | 2 +- .../project_config_manager.tests.js | 2 +- .../project_config/project_config_manager.ts | 2 +- .../lib/optimizely/index.tests.js | 2 +- .../optimizely-sdk/lib/optimizely/index.ts | 2 +- .../optimizely_user_context/index.tests.js | 2 +- .../forwarding_event_processor.ts | 2 +- .../lib/plugins/logger/index.react_native.ts | 2 +- packages/optimizely-sdk/lib/shared_types.ts | 2 +- .../utils/attributes_validator/index.tests.js | 2 +- .../lib/utils/attributes_validator/index.ts | 2 +- .../lib/utils/config_validator/index.tests.js | 2 +- .../lib/utils/config_validator/index.ts | 2 +- .../optimizely-sdk/lib/utils/enums/index.ts | 2 +- .../lib/utils/event_tag_utils/index.tests.js | 2 +- .../utils/event_tags_validator/index.tests.js | 2 +- .../lib/utils/event_tags_validator/index.ts | 2 +- .../optimizely-sdk/lib/utils/fns/index.ts | 2 +- .../json_schema_validator/index.tests.js | 2 +- .../lib/utils/json_schema_validator/index.ts | 2 +- .../index.tests.js | 2 +- .../user_profile_service_validator/index.ts | 2 +- .../modules/utils/__tests__/utils.spec.ts | 123 + .../optimizely-sdk/modules/utils/index.d.ts | 36 + .../optimizely-sdk/modules/utils/index.js | 156 + packages/optimizely-sdk/package-lock.json | 8525 ++++++++++++----- packages/optimizely-sdk/package.json | 11 +- packages/optimizely-sdk/rollup.config.js | 2 +- 37 files changed, 6609 insertions(+), 2323 deletions(-) create mode 100644 packages/optimizely-sdk/jest.config.js create mode 100644 packages/optimizely-sdk/modules/utils/__tests__/utils.spec.ts create mode 100644 packages/optimizely-sdk/modules/utils/index.d.ts create mode 100644 packages/optimizely-sdk/modules/utils/index.js diff --git a/packages/optimizely-sdk/jest.config.js b/packages/optimizely-sdk/jest.config.js new file mode 100644 index 000000000..322f646e0 --- /dev/null +++ b/packages/optimizely-sdk/jest.config.js @@ -0,0 +1,17 @@ +module.exports = { + // "roots": [ + // "./src" + // ], + "transform": { + "^.+\\.tsx?$": "ts-jest" + }, + "testRegex": "(/modules/*/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js", + "jsx", + "json", + "node" + ], +} \ No newline at end of file diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js index 06b993ea5..06d759d46 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { getLogger } from '@optimizely/js-sdk-logging'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { createAudienceEvaluator } from './index'; import * as conditionTreeEvaluator from '../condition_tree_evaluator'; diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.tests.js b/packages/optimizely-sdk/lib/core/bucketer/index.tests.js index 62aa43a84..c24bc4e9c 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.tests.js +++ b/packages/optimizely-sdk/lib/core/bucketer/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert, expect } from 'chai'; import { cloneDeep } from 'lodash'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import * as bucketer from './'; import { diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index 4b689df42..b26e30893 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -17,7 +17,7 @@ /** * Bucketer API for determining the variation id from the specified parameters */ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import murmurhash from 'murmurhash'; import { LogHandler } from '@optimizely/js-sdk-logging'; import { diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index c254866cd..d4b165ab0 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -15,7 +15,7 @@ ***************************************************************************/ import sinon from 'sinon'; import { assert } from 'chai'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { LOG_LEVEL, diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.tests.js b/packages/optimizely-sdk/lib/core/decision_service/index.tests.js index 57a7ef344..4cdea9988 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.tests.js +++ b/packages/optimizely-sdk/lib/core/decision_service/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import cloneDeep from 'lodash/cloneDeep'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { createDecisionService } from './'; import * as bucketer from '../bucketer'; diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.ts b/packages/optimizely-sdk/lib/core/decision_service/index.ts index 3ec800593..02fe0f9e8 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.ts +++ b/packages/optimizely-sdk/lib/core/decision_service/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { LogHandler } from '@optimizely/js-sdk-logging'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index c28504947..2ad08b0ea 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { objectValues } from '@optimizely/js-sdk-utils'; +import { objectValues } from '../../../modules/utils'; import { LogHandler, ErrorHandler } from '@optimizely/js-sdk-logging'; -import { NOTIFICATION_TYPES as notificationTypesEnum } from '@optimizely/js-sdk-utils'; +import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../../modules/utils'; import { NotificationListener, ListenerPayload } from '../../shared_types'; import { diff --git a/packages/optimizely-sdk/lib/core/project_config/index.tests.js b/packages/optimizely-sdk/lib/core/project_config/index.tests.js index 2c3f06c1b..ff98cd630 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.tests.js @@ -17,7 +17,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { forEach, cloneDeep } from 'lodash'; import { getLogger } from '@optimizely/js-sdk-logging'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import fns from '../../utils/fns'; import projectConfig from './'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index 2ea2b8b41..a92089e01 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -18,7 +18,7 @@ import { objectEntries, objectValues, sprintf -} from '@optimizely/js-sdk-utils'; +} from '../../../modules/utils'; import fns from '../../utils/fns'; import { diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index f9c85c47b..20188f2d2 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -17,7 +17,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { cloneDeep } from 'lodash'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import * as logging from '@optimizely/js-sdk-logging'; import * as datafileManager from '@optimizely/js-sdk-datafile-manager'; diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts index 174a92c32..58ec462f0 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { getLogger } from '@optimizely/js-sdk-logging'; import { ERROR_MESSAGES } from '../../utils/enums'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index 3b874ae3a..c4573967d 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -15,7 +15,7 @@ ***************************************************************************/ import { assert, expect } from 'chai'; import sinon from 'sinon'; -import { sprintf, NOTIFICATION_TYPES } from '@optimizely/js-sdk-utils'; +import { sprintf, NOTIFICATION_TYPES } from '../../modules/utils'; import eventProcessor from '../plugins/event_processor'; import * as logging from '@optimizely/js-sdk-logging'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 58bc0e712..3fc3d8dd6 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { find, sprintf, objectValues, NotificationCenter } from '@optimizely/js-sdk-utils'; +import { find, sprintf, objectValues, NotificationCenter } from '../../modules/utils'; import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js index b6542f6e3..39a9ef21b 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js @@ -17,7 +17,7 @@ import { assert } from 'chai'; import sinon from 'sinon'; import * as logging from '@optimizely/js-sdk-logging'; -import { sprintf, NOTIFICATION_TYPES } from '@optimizely/js-sdk-utils'; +import { sprintf, NOTIFICATION_TYPES } from '../../modules/utils'; import OptimizelyUserContext from './'; import { createLogger } from '../plugins/logger'; diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 1e8b00ef0..12abe13d5 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -18,7 +18,7 @@ import { EventProcessor, ProcessableEvent, } from '@optimizely/js-sdk-event-processor'; -import { NotificationCenter } from '@optimizely/js-sdk-utils'; +import { NotificationCenter } from '../../../modules/utils'; import { EventDispatcher } from '../../shared_types'; import { NOTIFICATION_TYPES } from '../../utils/enums'; diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts index 5cdf9100d..aa0e2a24f 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { LogLevel } from '@optimizely/js-sdk-logging'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { NoOpLogger } from './index'; function getLogLevelName(level: number): string { diff --git a/packages/optimizely-sdk/lib/shared_types.ts b/packages/optimizely-sdk/lib/shared_types.ts index 93f955d14..e4fd2f8d3 100644 --- a/packages/optimizely-sdk/lib/shared_types.ts +++ b/packages/optimizely-sdk/lib/shared_types.ts @@ -16,7 +16,7 @@ import { ErrorHandler, LogHandler, LogLevel, LoggerFacade } from '@optimizely/js-sdk-logging'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; -import { NotificationCenter } from '@optimizely/js-sdk-utils'; +import { NotificationCenter } from '../modules/utils'; export interface BucketerParams { experimentId: string; diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js index 91dfaef55..2d121a849 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js @@ -14,7 +14,7 @@ * limitations under the License. */ import { assert } from 'chai'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import * as attributesValidator from './'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts index e3c475390..aa0dd97af 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { ObjectWithUnknownProperties } from '../../shared_types'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js index 65c4c24d9..afce34b71 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js @@ -14,7 +14,7 @@ * limitations under the License. */ import { assert } from 'chai'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import configValidator from './'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.ts b/packages/optimizely-sdk/lib/utils/config_validator/index.ts index ef156555a..14b0c509f 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { ObjectWithUnknownProperties } from '../../shared_types'; import { diff --git a/packages/optimizely-sdk/lib/utils/enums/index.ts b/packages/optimizely-sdk/lib/utils/enums/index.ts index fa6bcec6e..3d4882f40 100644 --- a/packages/optimizely-sdk/lib/utils/enums/index.ts +++ b/packages/optimizely-sdk/lib/utils/enums/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ -import { NOTIFICATION_TYPES as notificationTypesEnum } from '@optimizely/js-sdk-utils'; +import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../../modules/utils'; /** * Contains global enums used throughout the library diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js index 3189fae51..86fe53923 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js @@ -15,7 +15,7 @@ */ import sinon from 'sinon'; import { assert } from 'chai'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import * as eventTagUtils from './'; diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js index 4dde65d18..5363f8d30 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js @@ -14,7 +14,7 @@ * limitations under the License. */ import { assert } from 'chai'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { validate } from './'; import { ERROR_MESSAGES } from'../enums'; diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts index 6e97c0fd6..306e31e1e 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts @@ -17,7 +17,7 @@ /** * Provides utility method for validating that event tags user has provided are valid */ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 59be164a9..7eb5bd6dc 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { generateUUID as uuid, keyBy as keyByUtil } from '@optimizely/js-sdk-utils'; +import { generateUUID as uuid, keyBy as keyByUtil } from '../../../modules/utils'; const MAX_SAFE_INTEGER_LIMIT = Math.pow(2, 53); diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js index 58b550a7e..322624a3d 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { assert } from 'chai'; import { validate } from './'; diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts index 7fa16c05e..48d0a92af 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { validate as jsonSchemaValidator } from 'json-schema'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js index 33aaa077c..155ce7c06 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js @@ -15,7 +15,7 @@ ***************************************************************************/ import { assert } from 'chai'; -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { validate } from './'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts index ea59c8220..4c2de4f46 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts @@ -18,7 +18,7 @@ * Provides utility method for validating that the given user profile service implementation is valid. */ -import { sprintf } from '@optimizely/js-sdk-utils'; +import { sprintf } from '../../../modules/utils'; import { ObjectWithUnknownProperties } from '../../shared_types'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/modules/utils/__tests__/utils.spec.ts b/packages/optimizely-sdk/modules/utils/__tests__/utils.spec.ts new file mode 100644 index 000000000..8867d50e5 --- /dev/null +++ b/packages/optimizely-sdk/modules/utils/__tests__/utils.spec.ts @@ -0,0 +1,123 @@ +/// +import { isValidEnum, groupBy, objectEntries, objectValues, find, keyBy, sprintf } from '../' + +describe('utils', () => { + describe('isValidEnum', () => { + enum myEnum { + FOO = 0, + BAR = 1, + } + + it('should return false when not valid', () => { + expect(isValidEnum(myEnum, 2)).toBe(false) + }) + + it('should return true when valid', () => { + expect(isValidEnum(myEnum, 1)).toBe(true) + expect(isValidEnum(myEnum, myEnum.FOO)).toBe(true) + }) + }) + + describe('groupBy', () => { + it('should group values by some key function', () => { + const input = [ + { firstName: 'jordan', lastName: 'foo' }, + { firstName: 'jordan', lastName: 'bar' }, + { firstName: 'james', lastName: 'foxy' }, + ] + const result = groupBy(input, item => item.firstName) + + expect(result).toEqual([ + [ + { firstName: 'jordan', lastName: 'foo' }, + { firstName: 'jordan', lastName: 'bar' }, + ], + [{ firstName: 'james', lastName: 'foxy' }], + ]) + }) + }) + + describe('objectEntries', () => { + it('should return object entries', () => { + expect(objectEntries({ foo: 'bar', bar: 123 })).toEqual([['foo', 'bar'], ['bar', 123]]) + }) + }) + + describe('objectValues', () => { + it('should return object values', () => { + expect(objectValues({ foo: 'bar', bar: 123 })).toEqual(['bar', 123]) + }) + // TODO test for enumerable properties only + }) + + describe('find', () => { + it('should return the value if found in an array', () => { + const input = [ + { firstName: 'jordan', lastName: 'foo' }, + { firstName: 'jordan', lastName: 'bar' }, + { firstName: 'james', lastName: 'foxy' }, + ] + + expect(find(input, item => item.firstName === 'jordan')).toEqual({ + firstName: 'jordan', + lastName: 'foo', + }) + }) + + it('should return undefined if NOT found in an array', () => { + const input = [ + { firstName: 'jordan', lastName: 'foo' }, + { firstName: 'jordan', lastName: 'bar' }, + { firstName: 'james', lastName: 'foxy' }, + ] + + expect(find(input, item => item.firstName === 'joe')).toBeUndefined() + }) + }) + + describe('keyBy', () => { + it('return an object with keys generated from the key function', () => { + const input = [ + { key: 'foo', firstName: 'jordan', lastName: 'foo' }, + { key: 'bar', firstName: 'jordan', lastName: 'bar' }, + { key: 'baz', firstName: 'james', lastName: 'foxy' }, + ] + + expect(keyBy(input, item => item.key)).toEqual({ + foo: { key: 'foo', firstName: 'jordan', lastName: 'foo' }, + bar: { key: 'bar', firstName: 'jordan', lastName: 'bar' }, + baz: { key: 'baz', firstName: 'james', lastName: 'foxy' }, + }) + }) + }) + + describe('sprintf', () => { + it('sprintf(msg)', () => { + expect(sprintf('this is my message')).toBe('this is my message') + }) + + it('sprintf(msg, arg1)', () => { + expect(sprintf('hi %s', 'jordan')).toBe('hi jordan') + }) + + it('sprintf(msg, arg1, arg2)', () => { + expect(sprintf('hi %s its %s', 'jordan', 'jon')).toBe('hi jordan its jon') + }) + + it('should print undefined if an argument is missing', () => { + expect(sprintf('hi %s its %s', 'jordan')).toBe('hi jordan its undefined') + }) + + it('should evaluate a function', () => { + expect(sprintf('hi %s its %s', 'jordan', () => 'a function')).toBe('hi jordan its a function') + }) + + it('should work with numbers', () => { + expect(sprintf('hi %s', 123)).toBe('hi 123') + }) + + it('should not error when passed an object', () => { + expect(sprintf('hi %s', { foo: 'bar' })).toBe('hi [object Object]') + }) + }) +}) diff --git a/packages/optimizely-sdk/modules/utils/index.d.ts b/packages/optimizely-sdk/modules/utils/index.d.ts new file mode 100644 index 000000000..a6e6630b2 --- /dev/null +++ b/packages/optimizely-sdk/modules/utils/index.d.ts @@ -0,0 +1,36 @@ +export declare function generateUUID(): string; +export declare type Omit = Pick>; +export declare function getTimestamp(): number; +/** + * Validates a value is a valid TypeScript enum + * + * @export + * @param {object} enumToCheck + * @param {*} value + * @returns {boolean} + */ +export declare function isValidEnum(enumToCheck: { + [key: string]: any; +}, value: any): boolean; +export declare function groupBy(arr: K[], grouperFn: (item: K) => string): Array; +export declare function objectValues(obj: { + [key: string]: K; +}): K[]; +export declare function objectEntries(obj: { + [key: string]: K; +}): [string, K][]; +export declare function find(arr: K[], cond: (arg: K) => boolean): K | undefined; +export declare function keyBy(arr: K[], keyByFn: (item: K) => string): { + [key: string]: K; +}; +export declare function sprintf(format: string, ...args: any[]): string; +export declare enum NOTIFICATION_TYPES { + ACTIVATE = "ACTIVATE:experiment, user_id,attributes, variation, event", + DECISION = "DECISION:type, userId, attributes, decisionInfo", + LOG_EVENT = "LOG_EVENT:logEvent", + OPTIMIZELY_CONFIG_UPDATE = "OPTIMIZELY_CONFIG_UPDATE", + TRACK = "TRACK:event_key, user_id, attributes, event_tags, event" +} +export interface NotificationCenter { + sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void; +} diff --git a/packages/optimizely-sdk/modules/utils/index.js b/packages/optimizely-sdk/modules/utils/index.js new file mode 100644 index 000000000..f90d987cf --- /dev/null +++ b/packages/optimizely-sdk/modules/utils/index.js @@ -0,0 +1,156 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Copyright 2019, 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. + */ +var uuid_1 = require("uuid"); +function generateUUID() { + return uuid_1.v4(); +} +exports.generateUUID = generateUUID; +function getTimestamp() { + return new Date().getTime(); +} +exports.getTimestamp = getTimestamp; +/** + * Validates a value is a valid TypeScript enum + * + * @export + * @param {object} enumToCheck + * @param {*} value + * @returns {boolean} + */ +function isValidEnum(enumToCheck, value) { + var found = false; + var keys = Object.keys(enumToCheck); + for (var index = 0; index < keys.length; index++) { + if (value === enumToCheck[keys[index]]) { + found = true; + break; + } + } + return found; +} +exports.isValidEnum = isValidEnum; +function groupBy(arr, grouperFn) { + var grouper = {}; + arr.forEach(function (item) { + var key = grouperFn(item); + grouper[key] = grouper[key] || []; + grouper[key].push(item); + }); + return objectValues(grouper); +} +exports.groupBy = groupBy; +function objectValues(obj) { + return Object.keys(obj).map(function (key) { return obj[key]; }); +} +exports.objectValues = objectValues; +function objectEntries(obj) { + return Object.keys(obj).map(function (key) { return [key, obj[key]]; }); +} +exports.objectEntries = objectEntries; +function find(arr, cond) { + var found; + for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) { + var item = arr_1[_i]; + if (cond(item)) { + found = item; + break; + } + } + return found; +} +exports.find = find; +function keyBy(arr, keyByFn) { + var map = {}; + arr.forEach(function (item) { + var key = keyByFn(item); + map[key] = item; + }); + return map; +} +exports.keyBy = keyBy; +function sprintf(format) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + var i = 0; + return format.replace(/%s/g, function () { + var arg = args[i++]; + var type = typeof arg; + if (type === 'function') { + return arg(); + } + else if (type === 'string') { + return arg; + } + else { + return String(arg); + } + }); +} +exports.sprintf = sprintf; +/* + * Notification types for use with NotificationCenter + * Format is EVENT: + * + * SDK consumers can use these to register callbacks with the notification center. + * + * @deprecated since 3.1.0 + * ACTIVATE: An impression event will be sent to Optimizely + * Callbacks will receive an object argument with the following properties: + * - experiment {Object} + * - userId {string} + * - attributes {Object|undefined} + * - variation {Object} + * - logEvent {Object} + * + * DECISION: A decision is made in the system. i.e. user activation, + * feature access or feature-variable value retrieval + * Callbacks will receive an object argument with the following properties: + * - type {string} + * - userId {string} + * - attributes {Object|undefined} + * - decisionInfo {Object|undefined} + * + * LOG_EVENT: A batch of events, which could contain impressions and/or conversions, + * will be sent to Optimizely + * Callbacks will receive an object argument with the following properties: + * - url {string} + * - httpVerb {string} + * - params {Object} + * + * OPTIMIZELY_CONFIG_UPDATE: This Optimizely instance has been updated with a new + * config + * + * TRACK: A conversion event will be sent to Optimizely + * Callbacks will receive the an object argument with the following properties: + * - eventKey {string} + * - userId {string} + * - attributes {Object|undefined} + * - eventTags {Object|undefined} + * - logEvent {Object} + * + */ +var NOTIFICATION_TYPES; +(function (NOTIFICATION_TYPES) { + NOTIFICATION_TYPES["ACTIVATE"] = "ACTIVATE:experiment, user_id,attributes, variation, event"; + NOTIFICATION_TYPES["DECISION"] = "DECISION:type, userId, attributes, decisionInfo"; + NOTIFICATION_TYPES["LOG_EVENT"] = "LOG_EVENT:logEvent"; + NOTIFICATION_TYPES["OPTIMIZELY_CONFIG_UPDATE"] = "OPTIMIZELY_CONFIG_UPDATE"; + NOTIFICATION_TYPES["TRACK"] = "TRACK:event_key, user_id, attributes, event_tags, event"; +})(NOTIFICATION_TYPES = exports.NOTIFICATION_TYPES || (exports.NOTIFICATION_TYPES = {})); diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index 3477e6298..bf2c46f53 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -401,6 +401,12 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/jest": { + "version": "23.3.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-23.3.14.tgz", + "integrity": "sha512-Q5hTcfdudEL2yOmluA1zaSyPbzWPmJ3XfSWeP3RyoYvS9hnje1ZyagrZOuQ6+1nQC1Gw+7gap3pLNL3xL6UBug==", + "dev": true + }, "@types/json-schema": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", @@ -428,6 +434,12 @@ "@types/node": "*" } }, + "@types/uuid": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", + "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==", + "dev": true + }, "@typescript-eslint/eslint-plugin": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", @@ -686,6 +698,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -702,12 +720,36 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + } + } + }, "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, "after": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", @@ -859,6 +901,12 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -871,6 +919,12 @@ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -997,165 +1051,90 @@ "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", "dev": true }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "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": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "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 - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" }, "dependencies": { "debug": { @@ -1167,1635 +1146,1647 @@ "ms": "2.0.0" } }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "fill-range": "^7.0.1" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "babel-jest": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", + "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "babel-runtime": "^6.22.0" } }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "babel-plugin-istanbul": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "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" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "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" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "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 + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true + }, + "test-exclude": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", + "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + } } } }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "babel-plugin-jest-hoist": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", + "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-preset-jest": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", + "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", "dev": true, "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "babel-plugin-jest-hoist": "^23.2.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "source-map": "^0.5.6" } } } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, - "browserstack": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", - "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "https-proxy-agent": "^2.2.1" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, - "browserstack-local": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/browserstack-local/-/browserstack-local-1.4.8.tgz", - "integrity": "sha512-s+mc3gTOJwELdLWi4qFVKtGwMbb5JWsR+JxKlMaJkRJxoZ0gg3WREgPxAN0bm6iU5+S4Bi0sz0oxBRZT8BiNsQ==", + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "https-proxy-agent": "^4.0.0", - "is-running": "^2.1.0", - "ps-tree": "=1.2.0", - "temp-fs": "^0.9.9" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" }, "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "agent-base": "5", - "debug": "4" + "ms": "2.0.0" } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true } } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", "dev": true }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "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", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "yallist": "^3.0.2" + "is-descriptor": "^1.0.0" } }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", "dev": true }, - "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", "dev": true }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" + "tweetnacl": "^0.14.3" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "callsite": "1.0.0" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "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 }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true }, - "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "optional": 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.4.0" + "file-uri-to-path": "1.0.0" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true } } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "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": { - "restore-cursor": "^3.1.0" + "fill-range": "^7.0.1" } }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "resolve": "1.1.7" }, "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true } } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "color-name": "1.1.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "ms": "2.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "pako": "~1.0.5" } }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "coveralls": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", - "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", + "browserstack": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", + "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", "dev": true, "requires": { - "js-yaml": "^3.13.1", - "lcov-parse": "^1.0.0", - "log-driver": "^1.2.7", - "minimist": "^1.2.5", - "request": "^2.88.2" + "https-proxy-agent": "^2.2.1" } }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "browserstack-local": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/browserstack-local/-/browserstack-local-1.4.8.tgz", + "integrity": "sha512-s+mc3gTOJwELdLWi4qFVKtGwMbb5JWsR+JxKlMaJkRJxoZ0gg3WREgPxAN0bm6iU5+S4Bi0sz0oxBRZT8BiNsQ==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "https-proxy-agent": "^4.0.0", + "is-running": "^2.1.0", + "ps-tree": "=1.2.0", + "temp-fs": "^0.9.9" }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", "dev": true + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + } } } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "fast-json-stable-stringify": "2.x" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "node-int64": "^0.4.0" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true } } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", "dev": true }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "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 }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "strip-bom": "^4.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "delayed-stream": { + "callsite": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "caniuse-lite": { + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "capture-exit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", + "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "rsvp": "^3.3.3" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "dev": true, "requires": { - "esutils": "^2.0.2" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" } }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "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.4.0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "tslib": "^1.9.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "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 - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "ms": "2.0.0" + "is-descriptor": "^0.1.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "restore-cursor": "^3.1.0" } }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.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==", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "ansi-regex": "^5.0.0" } } } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "prr": "~1.0.1" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "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", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "color-name": "1.1.3" } }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { - "es6-promise": "^4.0.3" + "delayed-stream": "~1.0.0" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", "dev": true }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "dependencies": { - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "ms": "2.0.0" } }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { - "estraverse": "^5.2.0" + "safe-buffer": "~5.1.1" }, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true } } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", "dev": true }, - "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 - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "coveralls": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", + "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", "dev": true } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "cssom": "0.3.x" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", + } + } + }, + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "dev": true + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, @@ -2825,737 +2816,1873 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "repeating": "^2.0.0" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": 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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", "dev": true } } }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "esutils": "^2.0.2" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "webidl-conversions": "^4.0.2" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "flush-write-stream": { + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.739", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", + "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "dev": true + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "for-in": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "ms": "2.0.0" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "ms": "2.0.0" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "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": { - "isexe": "^2.0.0" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "prr": "~1.0.1" } }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "samsam": "1.x" + "is-arrayish": "^0.2.1" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, "requires": { - "map-cache": "^0.2.2" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "fromentries": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.1.tgz", - "integrity": "sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw==", + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "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", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "es6-promise": "^4.0.3" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "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=", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "glob-parent": { + "eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "eslint-visitor-keys": "^1.1.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "isarray": "2.0.1" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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 }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, - "has-values": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.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" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "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" - } - } + "ms": "2.0.0" } }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-descriptor": "^0.1.0" + } + }, + "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" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "fill-range": "^2.1.0" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "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" } } } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hasha": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.1.tgz", - "integrity": "sha512-x15jnRSHTi3VmH+oHtVb9kgU/HuKOK8mjK8iCL3dPQXh4YJlUb9YSI8ZLiiqLAIvY2wuDIlZYZppy8vB2XISkQ==", + "expect": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", + "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", "dev": true, "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" + "ansi-styles": "^3.2.0", + "jest-diff": "^23.6.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0" } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "ms": "^2.1.1" + "is-descriptor": "^1.0.0" + } + }, + "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-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "bser": "2.1.1" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "glob": "^7.0.3", + "minimatch": "^3.0.3" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": 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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { - "ansi-escapes": "^4.2.1", + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formatio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", + "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", + "dev": true, + "requires": { + "samsam": "1.x" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fromentries": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.1.tgz", + "integrity": "sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw==", + "dev": true + }, + "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", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "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-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + } + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "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", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasha": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.1.tgz", + "integrity": "sha512-x15jnRSHTi3VmH+oHtVb9kgU/HuKOK8mjK8iCL3dPQXh4YJlUb9YSI8ZLiiqLAIvY2wuDIlZYZppy8vB2XISkQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", @@ -3570,75 +4697,954 @@ "through": "^2.3.6" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "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", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "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-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "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-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "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-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "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 + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "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-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", + "dev": true, + "requires": { + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" + }, + "dependencies": { + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "requires": { + "append-transform": "^2.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", + "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", + "dev": true, + "requires": { + "import-local": "^1.0.0", + "jest-cli": "^23.6.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "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" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "color-convert": "^2.0.1" + "is-posix-bracket": "^0.1.0" } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-extglob": "^1.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "color-name": "~1.1.4" + "locate-path": "^2.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "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 }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "is-extglob": "^1.0.0" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" } - } - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { + }, + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + }, + "jest-cli": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", + "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.3.1", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-source-maps": "^1.2.4", + "jest-changed-files": "^23.4.2", + "jest-config": "^23.6.0", + "jest-environment-jsdom": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve-dependencies": "^23.6.0", + "jest-runner": "^23.6.0", + "jest-runtime": "^23.6.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "jest-watcher": "^23.4.0", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "node-notifier": "^5.2.1", + "prompts": "^0.1.9", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^11.0.0" + } + }, + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3647,45 +5653,297 @@ "requires": { "is-buffer": "^1.1.5" } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "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" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "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 + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "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": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "yargs": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", + "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.1.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", + "yargs-parser": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } } } }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": 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==", + "jest-changed-files": { + "version": "23.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", + "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "throat": "^4.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "jest-config": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", + "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "babel-core": "^6.0.0", + "babel-jest": "^23.6.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^23.4.0", + "jest-environment-node": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^23.6.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "micromatch": "^2.3.11", + "pretty-format": "^23.6.0" }, "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3694,327 +5952,880 @@ "requires": { "is-buffer": "^1.1.5" } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "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" + } } } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "jest-diff": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz", + "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.1.0", + "pretty-format": "^23.6.0" } }, - "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-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, - "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 - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "jest-docblock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", + "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "detect-newline": "^2.1.0" } }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "jest-each": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz", + "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", "dev": true, "requires": { - "@types/estree": "*" + "chalk": "^2.0.1", + "pretty-format": "^23.6.0" } }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "jest-environment-jsdom": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", + "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0", + "jsdom": "^11.5.1" } }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "jest-environment-node": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", + "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", "dev": true }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "jest-haste-map": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz", + "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", + "dev": true, + "requires": { + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "invariant": "^2.2.4", + "jest-docblock": "^23.2.0", + "jest-serializer": "^23.0.1", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "sane": "^2.0.0" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + }, + "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" + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "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" + } + } + } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true + "jest-jasmine2": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz", + "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", + "dev": true, + "requires": { + "babel-traverse": "^6.0.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^23.6.0", + "is-generator-fn": "^1.0.0", + "jest-diff": "^23.6.0", + "jest-each": "^23.6.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "pretty-format": "^23.6.0" + } }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "jest-leak-detector": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz", + "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", "dev": true, "requires": { - "buffer-alloc": "^1.2.0" + "pretty-format": "^23.6.0" } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "jest-matcher-utils": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz", + "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "pretty-format": "^23.6.0" + } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "jest-message-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "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" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "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" + } + } + } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "jest-mock": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", + "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=", "dev": true }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "jest-regex-util": { + "version": "23.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", + "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=", "dev": true }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "jest-resolve": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz", + "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", "dev": true, "requires": { - "append-transform": "^2.0.0" + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" } }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "jest-resolve-dependencies": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz", + "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", "dev": true, "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "jest-regex-util": "^23.3.0", + "jest-snapshot": "^23.6.0" + } + }, + "jest-runner": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz", + "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", + "dev": true, + "requires": { + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^23.6.0", + "jest-docblock": "^23.2.0", + "jest-haste-map": "^23.6.0", + "jest-jasmine2": "^23.6.0", + "jest-leak-detector": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-runtime": "^23.6.0", + "jest-util": "^23.4.0", + "jest-worker": "^23.2.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } } } }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "jest-runtime": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz", + "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", "dev": true, "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" + "babel-core": "^6.0.0", + "babel-plugin-istanbul": "^4.1.6", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-config": "^23.6.0", + "jest-haste-map": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.6.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", + "strip-bom": "3.0.0", + "write-file-atomic": "^2.1.0", + "yargs": "^11.0.0" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "arr-flatten": "^1.0.1" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "glob": "^7.1.3" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, - "shebang-command": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "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" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "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 + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "is-extglob": "^1.0.0" } }, - "shebang-regex": { + "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" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "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" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "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 + }, + "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": { - "isexe": "^2.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "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" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "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": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "yargs": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", + "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.1.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", + "yargs-parser": "^9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" } } } }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "jest-serializer": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", + "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=", + "dev": true + }, + "jest-snapshot": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz", + "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", "dev": true, "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "babel-types": "^6.0.0", + "chalk": "^2.0.1", + "jest-diff": "^23.6.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.6.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^23.6.0", + "semver": "^5.5.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "jest-util": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", + "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", "dev": true, "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^23.4.0", + "mkdirp": "^0.5.1", + "slash": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } } }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "jest-validate": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", + "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", "dev": true, "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.6.0" + } + }, + "jest-watcher": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", + "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "string-length": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + } } }, "jest-worker": { @@ -4054,12 +6865,63 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "ws": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", + "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -4080,7 +6942,7 @@ }, "json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "resolved": "https://nexus.es.ecg.tools/repository/npm-all/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-traverse": { @@ -4245,12 +7107,39 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "kleur": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", + "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", + "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": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", "dev": true }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -4261,6 +7150,36 @@ "type-check": "~0.3.2" } }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -4299,6 +7218,12 @@ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", @@ -4324,6 +7249,15 @@ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", "dev": true }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -4366,6 +7300,24 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "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", @@ -4387,6 +7339,12 @@ "object-visit": "^1.0.0" } }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -4404,6 +7362,17 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -4414,6 +7383,12 @@ "readable-stream": "^2.0.1" } }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4795,6 +7770,12 @@ } } }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, "node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -4834,6 +7815,27 @@ } } }, + "node-notifier": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.5.tgz", + "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -4849,18 +7851,59 @@ "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "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 }, + "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 + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -5005,6 +8048,123 @@ "object-keys": "^1.1.1" } }, + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -5079,12 +8239,47 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.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": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5169,6 +8364,50 @@ "safe-buffer": "^5.1.1" } }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -5253,6 +8492,25 @@ } } }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", @@ -5299,6 +8557,21 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -5308,6 +8581,12 @@ "find-up": "^4.0.0" } }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -5320,6 +8599,36 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-format": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.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 + } + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -5359,6 +8668,16 @@ "integrity": "sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==", "dev": true }, + "prompts": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", + "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", + "dev": true, + "requires": { + "kleur": "^2.0.1", + "sisteransi": "^0.1.1" + } + }, "propagate": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.3.1.tgz", @@ -5483,6 +8802,25 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -5520,6 +8858,48 @@ "unpipe": "1.0.0" } }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -5558,6 +8938,30 @@ "picomatch": "^2.2.1" } }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -5618,8 +9022,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true + "dev": true }, "repeat-element": { "version": "1.1.3", @@ -5633,6 +9036,15 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -5661,6 +9073,26 @@ "uuid": "^3.3.2" } }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5688,6 +9120,23 @@ "path-parse": "^1.0.6" } }, + "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" + }, + "dependencies": { + "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-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -5782,85 +9231,249 @@ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "tslib": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", + "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", + "dev": true + } + } + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "samsam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", + "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", + "dev": true + }, + "sane": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", + "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.3", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.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" + } + }, + "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" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "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" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "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" } }, - "tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", - "dev": true - } - } - }, - "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" - }, - "dependencies": { - "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 + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "samsam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", - "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, "schema-utils": { @@ -5964,6 +9577,31 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "dependencies": { + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + } + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", @@ -5986,6 +9624,18 @@ "type-detect": "^4.0.0" } }, + "sisteransi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", + "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -6318,6 +9968,38 @@ } } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", @@ -6368,6 +10050,23 @@ "figgy-pudding": "^3.5.1" } }, + "stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -6395,6 +10094,12 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -6467,6 +10172,33 @@ } } }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.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-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -6591,6 +10323,12 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, + "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.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6606,6 +10344,12 @@ "has-flag": "^3.0.0" } }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -6800,6 +10544,12 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -6834,6 +10584,12 @@ "os-tmpdir": "~1.0.2" } }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, "to-array": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", @@ -6909,6 +10665,70 @@ "punycode": "^2.1.1" } }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-jest": { + "version": "23.10.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-23.10.5.tgz", + "integrity": "sha512-MRCs9qnGoyKgFc8adDEntAOP64fWK1vZKnOYU1o2HxaqjdJvGqmkLCPCnVq1/If4zkUmEjKPnCiUisTrlX2p2A==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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" + } + } + } + }, "ts-loader": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.5.tgz", @@ -7039,12 +10859,39 @@ "integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==", "dev": true }, + "uglify-js": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.2.tgz", + "integrity": "sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==", + "dev": true, + "optional": true + }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + } + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -7212,6 +11059,19 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", + "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "for-each": "^0.3.3", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.1" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -7229,6 +11089,16 @@ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -7252,6 +11122,34 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "watch": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "dev": true, + "requires": { + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, "watchpack": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", @@ -7494,6 +11392,12 @@ } } }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "webpack": { "version": "4.44.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", @@ -7679,6 +11583,32 @@ "source-map": "~0.6.1" } }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -7688,6 +11618,19 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -7807,6 +11750,12 @@ } } }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, "xmlhttprequest-ssl": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 788783124..a4ffb7892 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -10,7 +10,7 @@ "scripts": { "clean": "rm -rf dist", "lint": "tsc --noEmit && eslint 'lib/**/*.js' 'lib/**/*.ts'", - "test": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register -r lib/tests/exit_on_unhandled_rejection.js 'lib/**/*.tests.ts' 'lib/**/*.tests.js'", + "test": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register -r lib/tests/exit_on_unhandled_rejection.js 'lib/**/*.tests.ts' 'lib/**/*.tests.js' && jest", "posttest": "npm run lint", "test-ci": "npm run test-xbrowser && npm run test-umdbrowser", "test-xbrowser": "karma start karma.bs.conf.js --single-run", @@ -47,7 +47,8 @@ "@optimizely/js-sdk-logging": "^0.3.1", "@optimizely/js-sdk-utils": "^0.4.0", "json-schema": "^0.4.0", - "murmurhash": "0.0.2" + "murmurhash": "0.0.2", + "uuid": "^3.3.2" }, "devDependencies": { "@rollup/plugin-commonjs": "^11.0.2", @@ -80,7 +81,11 @@ "ts-loader": "^7.0.5", "ts-node": "^8.10.2", "typescript": "^4.0.3", - "webpack": "^4.42.1" + "webpack": "^4.42.1", + "@types/jest": "^23.3.12", + "@types/uuid": "^3.4.4", + "jest": "^23.6.0", + "ts-jest": "^23.10.5" }, "publishConfig": { "access": "public" diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index 92f1af88b..dbde48acd 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -115,7 +115,7 @@ const jsonSchemaBundle = { commonjs(), typescript(typescriptPluginOptions), ], - external: ['json-schema', '@optimizely/js-sdk-utils'], + external: ['json-schema', '../../../modules/utils'], input: 'lib/utils/json_schema_validator/index.ts', output: { exports: 'named', From 37cab7bc964c1d5f3659e8c90cf2d523ed2a5aa9 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 14 Mar 2022 20:59:19 +0500 Subject: [PATCH 02/48] logging integrated --- .../core/audience_evaluator/index.tests.js | 2 +- .../lib/core/audience_evaluator/index.ts | 2 +- .../optimizely-sdk/lib/core/bucketer/index.ts | 2 +- .../index.tests.js | 2 +- .../index.ts | 2 +- .../lib/core/decision_service/index.ts | 2 +- .../lib/core/event_builder/event_helpers.ts | 2 +- .../lib/core/event_builder/index.ts | 2 +- .../lib/core/notification_center/index.ts | 2 +- .../lib/core/project_config/index.tests.js | 2 +- .../lib/core/project_config/index.ts | 2 +- .../project_config_manager.tests.js | 2 +- .../project_config/project_config_manager.ts | 2 +- .../optimizely-sdk/lib/index.browser.tests.js | 2 +- packages/optimizely-sdk/lib/index.browser.ts | 2 +- packages/optimizely-sdk/lib/index.lite.ts | 2 +- packages/optimizely-sdk/lib/index.node.ts | 2 +- .../lib/index.react_native.tests.js | 2 +- .../optimizely-sdk/lib/index.react_native.ts | 2 +- .../lib/optimizely/index.tests.js | 2 +- .../optimizely-sdk/lib/optimizely/index.ts | 2 +- .../optimizely_user_context/index.tests.js | 2 +- .../http_polling_datafile_manager.ts | 2 +- .../lib/plugins/logger/index.react_native.ts | 2 +- .../lib/plugins/logger/index.ts | 2 +- .../lib/utils/event_tag_utils/index.ts | 2 +- .../lib/utils/semantic_version/index.ts | 2 +- .../modules/logging/__tests__/logger.spec.ts | 386 ++++++++++++++++++ .../modules/logging/errorHandler.ts | 67 +++ .../optimizely-sdk/modules/logging/index.ts | 18 + .../optimizely-sdk/modules/logging/logger.ts | 328 +++++++++++++++ .../optimizely-sdk/modules/logging/models.ts | 42 ++ packages/optimizely-sdk/rollup.config.js | 2 +- 33 files changed, 869 insertions(+), 28 deletions(-) create mode 100644 packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts create mode 100644 packages/optimizely-sdk/modules/logging/errorHandler.ts create mode 100644 packages/optimizely-sdk/modules/logging/index.ts create mode 100644 packages/optimizely-sdk/modules/logging/logger.ts create mode 100644 packages/optimizely-sdk/modules/logging/models.ts diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js index 06d759d46..764819ed7 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js @@ -15,7 +15,7 @@ */ import sinon from 'sinon'; import { assert } from 'chai'; -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import { sprintf } from '../../../modules/utils'; import { createAudienceEvaluator } from './index'; diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts index be6e8bfcd..82f1f9bc8 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import fns from '../../utils/fns'; import { diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index b26e30893..c8b40de51 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -19,7 +19,7 @@ */ import { sprintf } from '../../../modules/utils'; import murmurhash from 'murmurhash'; -import { LogHandler } from '@optimizely/js-sdk-logging'; +import { LogHandler } from '../../../modules/logging'; import { DecisionResponse, BucketerParams, diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index d4b165ab0..a9b3cee0a 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -21,7 +21,7 @@ import { LOG_LEVEL, LOG_MESSAGES, } from '../../utils/enums'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../../../modules/utils'; import * as customAttributeEvaluator from './'; var browserConditionSafari = { diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts index f236533de..70298064c 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import { UserAttributes, Condition } from '../../shared_types'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.ts b/packages/optimizely-sdk/lib/core/decision_service/index.ts index 02fe0f9e8..e6392a2cc 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.ts +++ b/packages/optimizely-sdk/lib/core/decision_service/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ import { sprintf } from '../../../modules/utils'; -import { LogHandler } from '@optimizely/js-sdk-logging'; +import { LogHandler } from '../../../modules/logging'; import fns from '../../utils/fns'; import { bucket } from '../bucketer'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts index 9d2ae4609..d8e9ead57 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import fns from '../../utils/fns'; import * as eventTagUtils from '../../utils/event_tag_utils'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.ts b/packages/optimizely-sdk/lib/core/event_builder/index.ts index 4c85c5fda..34ecfaa73 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoggerFacade } from '@optimizely/js-sdk-logging'; +import { LoggerFacade } from '../../../modules/logging'; import { EventV1 as CommonEventParams } from '@optimizely/js-sdk-event-processor'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index 2ad08b0ea..97bdf1a8b 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { objectValues } from '../../../modules/utils'; -import { LogHandler, ErrorHandler } from '@optimizely/js-sdk-logging'; +import { LogHandler, ErrorHandler } from '../../../modules/logging'; import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../../modules/utils'; import { NotificationListener, ListenerPayload } from '../../shared_types'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.tests.js b/packages/optimizely-sdk/lib/core/project_config/index.tests.js index ff98cd630..1b837b70b 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { forEach, cloneDeep } from 'lodash'; -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import { sprintf } from '../../../modules/utils'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index a92089e01..4b52e9fc9 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -29,7 +29,7 @@ import { } from '../../utils/enums'; import configValidator from '../../utils/config_validator'; -import { LogHandler } from '@optimizely/js-sdk-logging'; +import { LogHandler } from '../../../modules/logging'; import { Audience, Experiment, diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index 20188f2d2..b90cfa9bb 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -18,7 +18,7 @@ import { assert } from 'chai'; import { cloneDeep } from 'lodash'; import { sprintf } from '../../../modules/utils'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../../../modules/logging'; import * as datafileManager from '@optimizely/js-sdk-datafile-manager'; import * as projectConfig from './index'; diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts index 58ec462f0..54bf0e011 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { sprintf } from '../../../modules/utils'; -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import { ERROR_MESSAGES } from '../../utils/enums'; import { createOptimizelyConfig } from '../optimizely_config'; diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index 728224b4c..5a2885190 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../modules/logging'; import { assert } from 'chai'; import sinon from 'sinon'; diff --git a/packages/optimizely-sdk/lib/index.browser.ts b/packages/optimizely-sdk/lib/index.browser.ts index 59d23e694..05a3719dc 100644 --- a/packages/optimizely-sdk/lib/index.browser.ts +++ b/packages/optimizely-sdk/lib/index.browser.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '@optimizely/js-sdk-logging'; +} from '../modules/logging'; import { LocalStoragePendingEventsDispatcher } from '@optimizely/js-sdk-event-processor'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; diff --git a/packages/optimizely-sdk/lib/index.lite.ts b/packages/optimizely-sdk/lib/index.lite.ts index 86e30876d..dd2858d20 100644 --- a/packages/optimizely-sdk/lib/index.lite.ts +++ b/packages/optimizely-sdk/lib/index.lite.ts @@ -20,7 +20,7 @@ setErrorHandler, getErrorHandler, LogLevel - } from '@optimizely/js-sdk-logging'; + } from '../modules/logging'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import noOpEventDispatcher from './plugins/event_dispatcher/no_op'; diff --git a/packages/optimizely-sdk/lib/index.node.ts b/packages/optimizely-sdk/lib/index.node.ts index 99b5c7cd6..daa76c192 100644 --- a/packages/optimizely-sdk/lib/index.node.ts +++ b/packages/optimizely-sdk/lib/index.node.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '@optimizely/js-sdk-logging'; +} from '../modules/logging'; import Optimizely from './optimizely'; import * as enums from './utils/enums'; import * as loggerPlugin from './plugins/logger'; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 0d3e92613..16af30222 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../modules/logging'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; diff --git a/packages/optimizely-sdk/lib/index.react_native.ts b/packages/optimizely-sdk/lib/index.react_native.ts index 75c38cdcd..fb8bed02a 100644 --- a/packages/optimizely-sdk/lib/index.react_native.ts +++ b/packages/optimizely-sdk/lib/index.react_native.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '@optimizely/js-sdk-logging'; +} from '../modules/logging'; import * as enums from './utils/enums'; import Optimizely from './optimizely'; import configValidator from './utils/config_validator'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index c4573967d..c6b5aa420 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -17,7 +17,7 @@ import { assert, expect } from 'chai'; import sinon from 'sinon'; import { sprintf, NOTIFICATION_TYPES } from '../../modules/utils'; import eventProcessor from '../plugins/event_processor'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../../modules/logging'; import Optimizely from './'; import OptimizelyUserContext from '../optimizely_user_context'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 3fc3d8dd6..7983f0e04 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ import { find, sprintf, objectValues, NotificationCenter } from '../../modules/utils'; -import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; +import { LoggerFacade, ErrorHandler } from '../../modules/logging'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import { diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js index 39a9ef21b..3e75cde3a 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js @@ -16,7 +16,7 @@ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../../modules/logging'; import { sprintf, NOTIFICATION_TYPES } from '../../modules/utils'; import OptimizelyUserContext from './'; diff --git a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts index 5cca10bed..5cf9283a9 100644 --- a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts +++ b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoggerFacade } from '@optimizely/js-sdk-logging'; +import { LoggerFacade } from '../../../modules/logging'; import { HttpPollingDatafileManager } from '@optimizely/js-sdk-datafile-manager'; import { DatafileOptions, DatafileManagerConfig, DatafileManager } from '../../shared_types'; import { toDatafile, tryCreatingProjectConfig } from '../../core/project_config'; diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts index aa0e2a24f..6ce370c9b 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LogLevel } from '@optimizely/js-sdk-logging'; +import { LogLevel } from '../../../modules/logging'; import { sprintf } from '../../../modules/utils'; import { NoOpLogger } from './index'; diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.ts b/packages/optimizely-sdk/lib/plugins/logger/index.ts index d0e09c0de..fc57f016a 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ConsoleLogHandler, LogLevel } from '@optimizely/js-sdk-logging'; +import { ConsoleLogHandler, LogLevel } from '../../../modules/logging'; type ConsoleLogHandlerConfig = { logLevel?: LogLevel | string; diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts index 86c37ad2a..9f0a62fdf 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { EventTags } from '@optimizely/js-sdk-event-processor'; -import { LoggerFacade } from '@optimizely/js-sdk-logging'; +import { LoggerFacade } from '../../../modules/logging'; import { LOG_LEVEL, diff --git a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts index bb92013a0..099479a63 100644 --- a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts +++ b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import { VERSION_TYPE, LOG_MESSAGES } from '../enums'; const MODULE_NAME = 'SEMANTIC VERSION'; diff --git a/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts b/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts new file mode 100644 index 000000000..920ff0796 --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts @@ -0,0 +1,386 @@ +/// +import { + LogLevel, + LogHandler, + LoggerFacade, +} from '../models' + +import { + setLogHandler, + setLogLevel, + getLogger, + ConsoleLogHandler, + resetLogger, + getLogLevel, +} from '../logger' + +import { resetErrorHandler } from '../errorHandler' +import { ErrorHandler, setErrorHandler } from '../errorHandler' + +describe('logger', () => { + afterEach(() => { + resetLogger() + resetErrorHandler() + }) + + describe('OptimizelyLogger', () => { + let stubLogger: LogHandler + let logger: LoggerFacade + let stubErrorHandler: ErrorHandler + + beforeEach(() => { + stubLogger = { + log: jest.fn(), + } + stubErrorHandler = { + handleError: jest.fn(), + } + setLogLevel(LogLevel.DEBUG) + setLogHandler(stubLogger) + setErrorHandler(stubErrorHandler) + logger = getLogger() + }) + + describe('setLogLevel', () => { + it('should coerce "debug"', () => { + setLogLevel('debug') + expect(getLogLevel()).toBe(LogLevel.DEBUG) + }) + + it('should coerce "deBug"', () => { + setLogLevel('deBug') + expect(getLogLevel()).toBe(LogLevel.DEBUG) + }) + + it('should coerce "INFO"', () => { + setLogLevel('INFO') + expect(getLogLevel()).toBe(LogLevel.INFO) + }) + + it('should coerce "WARN"', () => { + setLogLevel('WARN') + expect(getLogLevel()).toBe(LogLevel.WARNING) + }) + + it('should coerce "warning"', () => { + setLogLevel('warning') + expect(getLogLevel()).toBe(LogLevel.WARNING) + }) + + it('should coerce "ERROR"', () => { + setLogLevel('WARN') + expect(getLogLevel()).toBe(LogLevel.WARNING) + }) + + it('should default to error if invalid', () => { + setLogLevel('invalid') + expect(getLogLevel()).toBe(LogLevel.ERROR) + }) + }) + + describe('getLogger(name)', () => { + it('should prepend the name in the log messages', () => { + const myLogger = getLogger('doit') + myLogger.info('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'doit: test') + }) + }) + + describe('logger.log(level, msg)', () => { + it('should work with a string logLevel', () => { + setLogLevel(LogLevel.INFO) + logger.log('info', 'test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') + }) + + it('should call the loggerBackend when the message logLevel is equal to the configured logLevel threshold', () => { + setLogLevel(LogLevel.INFO) + logger.log(LogLevel.INFO, 'test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') + }) + + it('should call the loggerBackend when the message logLevel is above to the configured logLevel threshold', () => { + setLogLevel(LogLevel.INFO) + logger.log(LogLevel.WARNING, 'test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test') + }) + + it('should not call the loggerBackend when the message logLevel is above to the configured logLevel threshold', () => { + setLogLevel(LogLevel.INFO) + logger.log(LogLevel.DEBUG, 'test') + + expect(stubLogger.log).toHaveBeenCalledTimes(0) + }) + + it('should not throw if loggerBackend is not supplied', () => { + setLogLevel(LogLevel.INFO) + logger.log(LogLevel.ERROR, 'test') + }) + }) + + describe('logger.info', () => { + it('should handle info(message)', () => { + logger.info('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') + }) + it('should handle info(message, ...splat)', () => { + logger.info('test: %s %s', 'hey', 'jude') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test: hey jude') + }) + + it('should handle info(message, ...splat, error)', () => { + const error = new Error('hey') + logger.info('test: %s', 'hey', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test: hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should handle info(error)', () => { + const error = new Error('hey') + logger.info(error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + }) + + describe('logger.debug', () => { + it('should handle debug(message)', () => { + logger.debug('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test') + }) + + it('should handle debug(message, ...splat)', () => { + logger.debug('test: %s', 'hey') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test: hey') + }) + + it('should handle debug(message, ...splat, error)', () => { + const error = new Error('hey') + logger.debug('test: %s', 'hey', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test: hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should handle debug(error)', () => { + const error = new Error('hey') + logger.debug(error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + }) + + describe('logger.warn', () => { + it('should handle warn(message)', () => { + logger.warn('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test') + }) + + it('should handle warn(message, ...splat)', () => { + logger.warn('test: %s', 'hey') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test: hey') + }) + + it('should handle warn(message, ...splat, error)', () => { + const error = new Error('hey') + logger.warn('test: %s', 'hey', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test: hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should handle info(error)', () => { + const error = new Error('hey') + logger.warn(error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + }) + + describe('logger.error', () => { + it('should handle error(message)', () => { + logger.error('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test') + }) + + it('should handle error(message, ...splat)', () => { + logger.error('test: %s', 'hey') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test: hey') + }) + + it('should handle error(message, ...splat, error)', () => { + const error = new Error('hey') + logger.error('test: %s', 'hey', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test: hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should handle error(error)', () => { + const error = new Error('hey') + logger.error(error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should work with an insufficient amount of splat args error(msg, ...splat, message)', () => { + const error = new Error('hey') + logger.error('hey %s', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'hey undefined') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + }) + + describe('using ConsoleLoggerHandler', () => { + beforeEach(() => { + jest.spyOn(console, 'info').mockImplementation(() => {}) + }) + + afterEach(() => { + jest.resetAllMocks() + }) + + it('should work with BasicLogger', () => { + const logger = new ConsoleLogHandler() + const TIME = '12:00' + setLogHandler(logger) + setLogLevel(LogLevel.INFO) + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.INFO, 'hey') + + expect(console.info).toBeCalledTimes(1) + expect(console.info).toBeCalledWith('[OPTIMIZELY] - INFO 12:00 hey') + }) + + it('should set logLevel to ERROR when setLogLevel is called with invalid value', () => { + const logger = new ConsoleLogHandler() + logger.setLogLevel('invalid' as any) + + expect(logger.logLevel).toEqual(LogLevel.ERROR) + }) + + it('should set logLevel to ERROR when setLogLevel is called with no value', () => { + const logger = new ConsoleLogHandler() + // @ts-ignore + logger.setLogLevel() + + expect(logger.logLevel).toEqual(LogLevel.ERROR) + }) + }) + }) + + describe('ConsoleLogger', function() { + beforeEach(() => { + jest.spyOn(console, 'info') + jest.spyOn(console, 'log') + jest.spyOn(console, 'warn') + jest.spyOn(console, 'error') + }) + + afterEach(() => { + jest.resetAllMocks() + }) + + it('should log to console.info for LogLevel.INFO', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.DEBUG, + }) + const TIME = '12:00' + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.INFO, 'test') + + expect(console.info).toBeCalledTimes(1) + expect(console.info).toBeCalledWith('[OPTIMIZELY] - INFO 12:00 test') + }) + + it('should log to console.log for LogLevel.DEBUG', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.DEBUG, + }) + const TIME = '12:00' + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.DEBUG, 'debug') + + expect(console.log).toBeCalledTimes(1) + expect(console.log).toBeCalledWith('[OPTIMIZELY] - DEBUG 12:00 debug') + }) + + it('should log to console.warn for LogLevel.WARNING', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.DEBUG, + }) + const TIME = '12:00' + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.WARNING, 'warning') + + expect(console.warn).toBeCalledTimes(1) + expect(console.warn).toBeCalledWith('[OPTIMIZELY] - WARN 12:00 warning') + }) + + it('should log to console.error for LogLevel.ERROR', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.DEBUG, + }) + const TIME = '12:00' + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.ERROR, 'error') + + expect(console.error).toBeCalledTimes(1) + expect(console.error).toBeCalledWith('[OPTIMIZELY] - ERROR 12:00 error') + }) + + it('should not log if the configured logLevel is higher', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.INFO, + }) + + logger.log(LogLevel.DEBUG, 'debug') + + expect(console.log).toBeCalledTimes(0) + }) + }) +}) diff --git a/packages/optimizely-sdk/modules/logging/errorHandler.ts b/packages/optimizely-sdk/modules/logging/errorHandler.ts new file mode 100644 index 000000000..bb659aeae --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/errorHandler.ts @@ -0,0 +1,67 @@ +/** + * Copyright 2019, 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. + */ +/** + * @export + * @interface ErrorHandler + */ +export interface ErrorHandler { + /** + * @param {Error} exception + * @memberof ErrorHandler + */ + handleError(exception: Error): void +} + +/** + * @export + * @class NoopErrorHandler + * @implements {ErrorHandler} + */ +export class NoopErrorHandler implements ErrorHandler { + /** + * @param {Error} exception + * @memberof NoopErrorHandler + */ + handleError(exception: Error): void { + // no-op + return + } +} + +let globalErrorHandler: ErrorHandler = new NoopErrorHandler() + +/** + * @export + * @param {ErrorHandler} handler + */ +export function setErrorHandler(handler: ErrorHandler): void { + globalErrorHandler = handler +} + +/** + * @export + * @returns {ErrorHandler} + */ +export function getErrorHandler(): ErrorHandler { + return globalErrorHandler +} + +/** + * @export + */ +export function resetErrorHandler(): void { + globalErrorHandler = new NoopErrorHandler() +} diff --git a/packages/optimizely-sdk/modules/logging/index.ts b/packages/optimizely-sdk/modules/logging/index.ts new file mode 100644 index 000000000..47a1e99c8 --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/index.ts @@ -0,0 +1,18 @@ +/** + * Copyright 2019, 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. + */ +export * from './errorHandler' +export * from './models' +export * from './logger' diff --git a/packages/optimizely-sdk/modules/logging/logger.ts b/packages/optimizely-sdk/modules/logging/logger.ts new file mode 100644 index 000000000..5647a798a --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/logger.ts @@ -0,0 +1,328 @@ +/** + * Copyright 2019, 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 { getErrorHandler } from './errorHandler' +import { isValidEnum, sprintf } from '../utils' + +import { LogLevel, LoggerFacade, LogManager, LogHandler } from './models' + +type StringToLogLevel = { + NOTSET: number, + DEBUG: number, + INFO: number, + WARNING: number, + ERROR: number, +} + +const stringToLogLevel: StringToLogLevel = { + NOTSET: 0, + DEBUG: 1, + INFO: 2, + WARNING: 3, + ERROR: 4, +} + +function coerceLogLevel(level: any): LogLevel { + if (typeof level !== 'string') { + return level + } + + level = level.toUpperCase() + if (level === 'WARN') { + level = 'WARNING' + } + + if (!stringToLogLevel[level as keyof StringToLogLevel]) { + return level + } + + return stringToLogLevel[level as keyof StringToLogLevel] +} + +type LogData = { + message: string + splat: any[] + error?: Error +} + +class DefaultLogManager implements LogManager { + private loggers: { + [name: string]: LoggerFacade + } + private defaultLoggerFacade = new OptimizelyLogger() + + constructor() { + this.loggers = {} + } + + getLogger(name?: string): LoggerFacade { + if (!name) { + return this.defaultLoggerFacade + } + + if (!this.loggers[name]) { + this.loggers[name] = new OptimizelyLogger({ messagePrefix: name }) + } + + return this.loggers[name] + } +} + +type ConsoleLogHandlerConfig = { + logLevel?: LogLevel | string + logToConsole?: boolean + prefix?: string +} + +export class ConsoleLogHandler implements LogHandler { + public logLevel: LogLevel + private logToConsole: boolean + private prefix: string + + /** + * Creates an instance of ConsoleLogger. + * @param {ConsoleLogHandlerConfig} config + * @memberof ConsoleLogger + */ + constructor(config: ConsoleLogHandlerConfig = {}) { + this.logLevel = LogLevel.NOTSET + if (config.logLevel !== undefined && isValidEnum(LogLevel, config.logLevel)) { + this.setLogLevel(config.logLevel) + } + + this.logToConsole = config.logToConsole !== undefined ? !!config.logToConsole : true + this.prefix = config.prefix !== undefined ? config.prefix : '[OPTIMIZELY]' + } + + /** + * @param {LogLevel} level + * @param {string} message + * @memberof ConsoleLogger + */ + log(level: LogLevel, message: string) { + if (!this.shouldLog(level) || !this.logToConsole) { + return + } + + let logMessage: string = `${this.prefix} - ${this.getLogLevelName( + level, + )} ${this.getTime()} ${message}` + + this.consoleLog(level, [logMessage]) + } + + /** + * @param {LogLevel} level + * @memberof ConsoleLogger + */ + setLogLevel(level: LogLevel | string) { + level = coerceLogLevel(level) + if (!isValidEnum(LogLevel, level) || level === undefined) { + this.logLevel = LogLevel.ERROR + } else { + this.logLevel = level + } + } + + /** + * @returns {string} + * @memberof ConsoleLogger + */ + getTime(): string { + return new Date().toISOString() + } + + /** + * @private + * @param {LogLevel} targetLogLevel + * @returns {boolean} + * @memberof ConsoleLogger + */ + private shouldLog(targetLogLevel: LogLevel): boolean { + return targetLogLevel >= this.logLevel + } + + /** + * @private + * @param {LogLevel} logLevel + * @returns {string} + * @memberof ConsoleLogger + */ + private getLogLevelName(logLevel: LogLevel): string { + switch (logLevel) { + case LogLevel.DEBUG: + return 'DEBUG' + case LogLevel.INFO: + return 'INFO ' + case LogLevel.WARNING: + return 'WARN ' + case LogLevel.ERROR: + return 'ERROR' + default: + return 'NOTSET' + } + } + + /** + * @private + * @param {LogLevel} logLevel + * @param {string[]} logArguments + * @memberof ConsoleLogger + */ + private consoleLog(logLevel: LogLevel, logArguments: [string, ...string[]]) { + switch (logLevel) { + case LogLevel.DEBUG: + console.log.apply(console, logArguments) + break + case LogLevel.INFO: + console.info.apply(console, logArguments) + break + case LogLevel.WARNING: + console.warn.apply(console, logArguments) + break + case LogLevel.ERROR: + console.error.apply(console, logArguments) + break + default: + console.log.apply(console, logArguments) + } + } +} + +let globalLogLevel: LogLevel = LogLevel.NOTSET +let globalLogHandler: LogHandler | null = null + +class OptimizelyLogger implements LoggerFacade { + private messagePrefix: string = '' + + constructor(opts: { messagePrefix?: string } = {}) { + if (opts.messagePrefix) { + this.messagePrefix = opts.messagePrefix + } + } + + /** + * @param {(LogLevel | LogInputObject)} levelOrObj + * @param {string} [message] + * @memberof OptimizelyLogger + */ + log(level: LogLevel | string, message: string, ...splat: any[]): void { + this.internalLog(coerceLogLevel(level), { + message, + splat, + }) + } + + info(message: string | Error, ...splat: any[]): void { + this.namedLog(LogLevel.INFO, message, splat) + } + + debug(message: string | Error, ...splat: any[]): void { + this.namedLog(LogLevel.DEBUG, message, splat) + } + + warn(message: string | Error, ...splat: any[]): void { + this.namedLog(LogLevel.WARNING, message, splat) + } + + error(message: string | Error, ...splat: any[]): void { + this.namedLog(LogLevel.ERROR, message, splat) + } + + private format(data: LogData): string { + return `${this.messagePrefix ? this.messagePrefix + ': ' : ''}${sprintf( + data.message, + ...data.splat, + )}` + } + + private internalLog(level: LogLevel, data: LogData): void { + if (!globalLogHandler) { + return + } + + if (level < globalLogLevel) { + return + } + + globalLogHandler.log(level, this.format(data)) + + if (data.error && data.error instanceof Error) { + getErrorHandler().handleError(data.error) + } + } + + private namedLog(level: LogLevel, message: string | Error, splat: any[]): void { + let error: Error | undefined + + if (message instanceof Error) { + error = message + message = error.message + this.internalLog(level, { + error, + message, + splat, + }) + return + } + + if (splat.length === 0) { + this.internalLog(level, { + message, + splat, + }) + return + } + + const last = splat[splat.length - 1] + if (last instanceof Error) { + error = last + splat.splice(-1) + } + + this.internalLog(level, { message, error, splat }) + } +} + +let globalLogManager: LogManager = new DefaultLogManager() + +export function getLogger(name?: string): LoggerFacade { + return globalLogManager.getLogger(name) +} + +export function setLogHandler(logger: LogHandler | null) { + globalLogHandler = logger +} + +export function setLogLevel(level: LogLevel | string) { + level = coerceLogLevel(level) + if (!isValidEnum(LogLevel, level) || level === undefined) { + globalLogLevel = LogLevel.ERROR + } else { + globalLogLevel = level + } +} + +export function getLogLevel(): LogLevel { + return globalLogLevel +} + +/** + * Resets all global logger state to it's original + */ +export function resetLogger() { + globalLogManager = new DefaultLogManager() + globalLogLevel = LogLevel.NOTSET +} diff --git a/packages/optimizely-sdk/modules/logging/models.ts b/packages/optimizely-sdk/modules/logging/models.ts new file mode 100644 index 000000000..cd3223932 --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/models.ts @@ -0,0 +1,42 @@ +/** + * Copyright 2019, 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. + */ +export enum LogLevel { + NOTSET = 0, + DEBUG = 1, + INFO = 2, + WARNING = 3, + ERROR = 4, +} + +export interface LoggerFacade { + log(level: LogLevel | string, message: string, ...splat: any[]): void + + info(message: string | Error, ...splat: any[]): void + + debug(message: string | Error, ...splat: any[]): void + + warn(message: string | Error, ...splat: any[]): void + + error(message: string | Error, ...splat: any[]): void +} + +export interface LogManager { + getLogger(name?: string): LoggerFacade +} + +export interface LogHandler { + log(level: LogLevel, message: string, ...splat: any[]): void +} diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index dbde48acd..e6f4bfe79 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -75,7 +75,7 @@ const umdBundle = { resolve({ browser: true }), commonjs({ namedExports: { - '@optimizely/js-sdk-logging': [ + '../../../modules/logging': [ 'ConsoleLogHandler', 'getLogger', 'setLogLevel', From 1d5368c178fde705aa4d079f55d6f1176d98dc75 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 14 Mar 2022 23:09:26 +0500 Subject: [PATCH 03/48] testcases fix --- .../core/custom_attribute_condition_evaluator/index.tests.js | 2 +- packages/optimizely-sdk/lib/index.browser.tests.js | 2 +- packages/optimizely-sdk/lib/index.react_native.tests.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index a9b3cee0a..c6068385d 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -21,7 +21,7 @@ import { LOG_LEVEL, LOG_MESSAGES, } from '../../utils/enums'; -import * as logging from '../../../modules/utils'; +import * as logging from '../../../modules/logging'; import * as customAttributeEvaluator from './'; var browserConditionSafari = { diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index 5a2885190..f469ff081 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from '../modules/logging'; +import * as logging from '../modules/logging/logger'; import { assert } from 'chai'; import sinon from 'sinon'; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 16af30222..52b8434ab 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '../modules/logging'; +import * as logging from '../modules/logging/logger'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; From 82b0fa1e71bd487fa67487c62ac2e61758bb67b6 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Fri, 25 Mar 2022 20:47:32 +0500 Subject: [PATCH 04/48] revert logging --- .../core/audience_evaluator/index.tests.js | 2 +- .../lib/core/audience_evaluator/index.ts | 2 +- .../optimizely-sdk/lib/core/bucketer/index.ts | 2 +- .../index.tests.js | 2 +- .../index.ts | 2 +- .../lib/core/decision_service/index.ts | 2 +- .../lib/core/event_builder/event_helpers.ts | 2 +- .../lib/core/event_builder/index.ts | 2 +- .../lib/core/notification_center/index.ts | 2 +- .../lib/core/project_config/index.tests.js | 2 +- .../lib/core/project_config/index.ts | 2 +- .../project_config_manager.tests.js | 2 +- .../project_config/project_config_manager.ts | 2 +- .../optimizely-sdk/lib/index.browser.tests.js | 2 +- packages/optimizely-sdk/lib/index.browser.ts | 2 +- packages/optimizely-sdk/lib/index.lite.ts | 2 +- packages/optimizely-sdk/lib/index.node.ts | 2 +- .../lib/index.react_native.tests.js | 2 +- .../optimizely-sdk/lib/index.react_native.ts | 2 +- .../lib/optimizely/index.tests.js | 2 +- .../optimizely-sdk/lib/optimizely/index.ts | 2 +- .../optimizely_user_context/index.tests.js | 2 +- .../http_polling_datafile_manager.ts | 2 +- .../lib/plugins/logger/index.react_native.ts | 2 +- .../lib/plugins/logger/index.ts | 2 +- .../lib/utils/event_tag_utils/index.ts | 2 +- .../lib/utils/semantic_version/index.ts | 2 +- .../modules/logging/__tests__/logger.spec.ts | 386 ------------------ .../modules/logging/errorHandler.ts | 67 --- .../optimizely-sdk/modules/logging/index.ts | 18 - .../optimizely-sdk/modules/logging/logger.ts | 328 --------------- .../optimizely-sdk/modules/logging/models.ts | 42 -- packages/optimizely-sdk/rollup.config.js | 2 +- 33 files changed, 28 insertions(+), 869 deletions(-) delete mode 100644 packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts delete mode 100644 packages/optimizely-sdk/modules/logging/errorHandler.ts delete mode 100644 packages/optimizely-sdk/modules/logging/index.ts delete mode 100644 packages/optimizely-sdk/modules/logging/logger.ts delete mode 100644 packages/optimizely-sdk/modules/logging/models.ts diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js index 764819ed7..06d759d46 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js @@ -15,7 +15,7 @@ */ import sinon from 'sinon'; import { assert } from 'chai'; -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '@optimizely/js-sdk-logging'; import { sprintf } from '../../../modules/utils'; import { createAudienceEvaluator } from './index'; diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts index 82f1f9bc8..be6e8bfcd 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '@optimizely/js-sdk-logging'; import fns from '../../utils/fns'; import { diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index c8b40de51..b26e30893 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -19,7 +19,7 @@ */ import { sprintf } from '../../../modules/utils'; import murmurhash from 'murmurhash'; -import { LogHandler } from '../../../modules/logging'; +import { LogHandler } from '@optimizely/js-sdk-logging'; import { DecisionResponse, BucketerParams, diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index c6068385d..d4b165ab0 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -21,7 +21,7 @@ import { LOG_LEVEL, LOG_MESSAGES, } from '../../utils/enums'; -import * as logging from '../../../modules/logging'; +import * as logging from '@optimizely/js-sdk-logging'; import * as customAttributeEvaluator from './'; var browserConditionSafari = { diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts index 70298064c..f236533de 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '@optimizely/js-sdk-logging'; import { UserAttributes, Condition } from '../../shared_types'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.ts b/packages/optimizely-sdk/lib/core/decision_service/index.ts index e6392a2cc..02fe0f9e8 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.ts +++ b/packages/optimizely-sdk/lib/core/decision_service/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ import { sprintf } from '../../../modules/utils'; -import { LogHandler } from '../../../modules/logging'; +import { LogHandler } from '@optimizely/js-sdk-logging'; import fns from '../../utils/fns'; import { bucket } from '../bucketer'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts index d8e9ead57..9d2ae4609 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '@optimizely/js-sdk-logging'; import fns from '../../utils/fns'; import * as eventTagUtils from '../../utils/event_tag_utils'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.ts b/packages/optimizely-sdk/lib/core/event_builder/index.ts index 34ecfaa73..4c85c5fda 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoggerFacade } from '../../../modules/logging'; +import { LoggerFacade } from '@optimizely/js-sdk-logging'; import { EventV1 as CommonEventParams } from '@optimizely/js-sdk-event-processor'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index 97bdf1a8b..2ad08b0ea 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { objectValues } from '../../../modules/utils'; -import { LogHandler, ErrorHandler } from '../../../modules/logging'; +import { LogHandler, ErrorHandler } from '@optimizely/js-sdk-logging'; import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../../modules/utils'; import { NotificationListener, ListenerPayload } from '../../shared_types'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.tests.js b/packages/optimizely-sdk/lib/core/project_config/index.tests.js index 1b837b70b..ff98cd630 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { forEach, cloneDeep } from 'lodash'; -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '@optimizely/js-sdk-logging'; import { sprintf } from '../../../modules/utils'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index 4b52e9fc9..a92089e01 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -29,7 +29,7 @@ import { } from '../../utils/enums'; import configValidator from '../../utils/config_validator'; -import { LogHandler } from '../../../modules/logging'; +import { LogHandler } from '@optimizely/js-sdk-logging'; import { Audience, Experiment, diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index b90cfa9bb..20188f2d2 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -18,7 +18,7 @@ import { assert } from 'chai'; import { cloneDeep } from 'lodash'; import { sprintf } from '../../../modules/utils'; -import * as logging from '../../../modules/logging'; +import * as logging from '@optimizely/js-sdk-logging'; import * as datafileManager from '@optimizely/js-sdk-datafile-manager'; import * as projectConfig from './index'; diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts index 54bf0e011..58ec462f0 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { sprintf } from '../../../modules/utils'; -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '@optimizely/js-sdk-logging'; import { ERROR_MESSAGES } from '../../utils/enums'; import { createOptimizelyConfig } from '../optimizely_config'; diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index f469ff081..728224b4c 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from '../modules/logging/logger'; +import * as logging from '@optimizely/js-sdk-logging'; import { assert } from 'chai'; import sinon from 'sinon'; diff --git a/packages/optimizely-sdk/lib/index.browser.ts b/packages/optimizely-sdk/lib/index.browser.ts index 05a3719dc..59d23e694 100644 --- a/packages/optimizely-sdk/lib/index.browser.ts +++ b/packages/optimizely-sdk/lib/index.browser.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '../modules/logging'; +} from '@optimizely/js-sdk-logging'; import { LocalStoragePendingEventsDispatcher } from '@optimizely/js-sdk-event-processor'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; diff --git a/packages/optimizely-sdk/lib/index.lite.ts b/packages/optimizely-sdk/lib/index.lite.ts index dd2858d20..86e30876d 100644 --- a/packages/optimizely-sdk/lib/index.lite.ts +++ b/packages/optimizely-sdk/lib/index.lite.ts @@ -20,7 +20,7 @@ setErrorHandler, getErrorHandler, LogLevel - } from '../modules/logging'; + } from '@optimizely/js-sdk-logging'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import noOpEventDispatcher from './plugins/event_dispatcher/no_op'; diff --git a/packages/optimizely-sdk/lib/index.node.ts b/packages/optimizely-sdk/lib/index.node.ts index daa76c192..99b5c7cd6 100644 --- a/packages/optimizely-sdk/lib/index.node.ts +++ b/packages/optimizely-sdk/lib/index.node.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '../modules/logging'; +} from '@optimizely/js-sdk-logging'; import Optimizely from './optimizely'; import * as enums from './utils/enums'; import * as loggerPlugin from './plugins/logger'; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 52b8434ab..0d3e92613 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '../modules/logging/logger'; +import * as logging from '@optimizely/js-sdk-logging'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; diff --git a/packages/optimizely-sdk/lib/index.react_native.ts b/packages/optimizely-sdk/lib/index.react_native.ts index fb8bed02a..75c38cdcd 100644 --- a/packages/optimizely-sdk/lib/index.react_native.ts +++ b/packages/optimizely-sdk/lib/index.react_native.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '../modules/logging'; +} from '@optimizely/js-sdk-logging'; import * as enums from './utils/enums'; import Optimizely from './optimizely'; import configValidator from './utils/config_validator'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index c6b5aa420..c4573967d 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -17,7 +17,7 @@ import { assert, expect } from 'chai'; import sinon from 'sinon'; import { sprintf, NOTIFICATION_TYPES } from '../../modules/utils'; import eventProcessor from '../plugins/event_processor'; -import * as logging from '../../modules/logging'; +import * as logging from '@optimizely/js-sdk-logging'; import Optimizely from './'; import OptimizelyUserContext from '../optimizely_user_context'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 7983f0e04..3fc3d8dd6 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ import { find, sprintf, objectValues, NotificationCenter } from '../../modules/utils'; -import { LoggerFacade, ErrorHandler } from '../../modules/logging'; +import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import { diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js index 3e75cde3a..39a9ef21b 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js @@ -16,7 +16,7 @@ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '../../modules/logging'; +import * as logging from '@optimizely/js-sdk-logging'; import { sprintf, NOTIFICATION_TYPES } from '../../modules/utils'; import OptimizelyUserContext from './'; diff --git a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts index 5cf9283a9..5cca10bed 100644 --- a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts +++ b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoggerFacade } from '../../../modules/logging'; +import { LoggerFacade } from '@optimizely/js-sdk-logging'; import { HttpPollingDatafileManager } from '@optimizely/js-sdk-datafile-manager'; import { DatafileOptions, DatafileManagerConfig, DatafileManager } from '../../shared_types'; import { toDatafile, tryCreatingProjectConfig } from '../../core/project_config'; diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts index 6ce370c9b..aa0e2a24f 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LogLevel } from '../../../modules/logging'; +import { LogLevel } from '@optimizely/js-sdk-logging'; import { sprintf } from '../../../modules/utils'; import { NoOpLogger } from './index'; diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.ts b/packages/optimizely-sdk/lib/plugins/logger/index.ts index fc57f016a..d0e09c0de 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ConsoleLogHandler, LogLevel } from '../../../modules/logging'; +import { ConsoleLogHandler, LogLevel } from '@optimizely/js-sdk-logging'; type ConsoleLogHandlerConfig = { logLevel?: LogLevel | string; diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts index 9f0a62fdf..86c37ad2a 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { EventTags } from '@optimizely/js-sdk-event-processor'; -import { LoggerFacade } from '../../../modules/logging'; +import { LoggerFacade } from '@optimizely/js-sdk-logging'; import { LOG_LEVEL, diff --git a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts index 099479a63..bb92013a0 100644 --- a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts +++ b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '@optimizely/js-sdk-logging'; import { VERSION_TYPE, LOG_MESSAGES } from '../enums'; const MODULE_NAME = 'SEMANTIC VERSION'; diff --git a/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts b/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts deleted file mode 100644 index 920ff0796..000000000 --- a/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts +++ /dev/null @@ -1,386 +0,0 @@ -/// -import { - LogLevel, - LogHandler, - LoggerFacade, -} from '../models' - -import { - setLogHandler, - setLogLevel, - getLogger, - ConsoleLogHandler, - resetLogger, - getLogLevel, -} from '../logger' - -import { resetErrorHandler } from '../errorHandler' -import { ErrorHandler, setErrorHandler } from '../errorHandler' - -describe('logger', () => { - afterEach(() => { - resetLogger() - resetErrorHandler() - }) - - describe('OptimizelyLogger', () => { - let stubLogger: LogHandler - let logger: LoggerFacade - let stubErrorHandler: ErrorHandler - - beforeEach(() => { - stubLogger = { - log: jest.fn(), - } - stubErrorHandler = { - handleError: jest.fn(), - } - setLogLevel(LogLevel.DEBUG) - setLogHandler(stubLogger) - setErrorHandler(stubErrorHandler) - logger = getLogger() - }) - - describe('setLogLevel', () => { - it('should coerce "debug"', () => { - setLogLevel('debug') - expect(getLogLevel()).toBe(LogLevel.DEBUG) - }) - - it('should coerce "deBug"', () => { - setLogLevel('deBug') - expect(getLogLevel()).toBe(LogLevel.DEBUG) - }) - - it('should coerce "INFO"', () => { - setLogLevel('INFO') - expect(getLogLevel()).toBe(LogLevel.INFO) - }) - - it('should coerce "WARN"', () => { - setLogLevel('WARN') - expect(getLogLevel()).toBe(LogLevel.WARNING) - }) - - it('should coerce "warning"', () => { - setLogLevel('warning') - expect(getLogLevel()).toBe(LogLevel.WARNING) - }) - - it('should coerce "ERROR"', () => { - setLogLevel('WARN') - expect(getLogLevel()).toBe(LogLevel.WARNING) - }) - - it('should default to error if invalid', () => { - setLogLevel('invalid') - expect(getLogLevel()).toBe(LogLevel.ERROR) - }) - }) - - describe('getLogger(name)', () => { - it('should prepend the name in the log messages', () => { - const myLogger = getLogger('doit') - myLogger.info('test') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'doit: test') - }) - }) - - describe('logger.log(level, msg)', () => { - it('should work with a string logLevel', () => { - setLogLevel(LogLevel.INFO) - logger.log('info', 'test') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') - }) - - it('should call the loggerBackend when the message logLevel is equal to the configured logLevel threshold', () => { - setLogLevel(LogLevel.INFO) - logger.log(LogLevel.INFO, 'test') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') - }) - - it('should call the loggerBackend when the message logLevel is above to the configured logLevel threshold', () => { - setLogLevel(LogLevel.INFO) - logger.log(LogLevel.WARNING, 'test') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test') - }) - - it('should not call the loggerBackend when the message logLevel is above to the configured logLevel threshold', () => { - setLogLevel(LogLevel.INFO) - logger.log(LogLevel.DEBUG, 'test') - - expect(stubLogger.log).toHaveBeenCalledTimes(0) - }) - - it('should not throw if loggerBackend is not supplied', () => { - setLogLevel(LogLevel.INFO) - logger.log(LogLevel.ERROR, 'test') - }) - }) - - describe('logger.info', () => { - it('should handle info(message)', () => { - logger.info('test') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') - }) - it('should handle info(message, ...splat)', () => { - logger.info('test: %s %s', 'hey', 'jude') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test: hey jude') - }) - - it('should handle info(message, ...splat, error)', () => { - const error = new Error('hey') - logger.info('test: %s', 'hey', error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test: hey') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - - it('should handle info(error)', () => { - const error = new Error('hey') - logger.info(error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'hey') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - }) - - describe('logger.debug', () => { - it('should handle debug(message)', () => { - logger.debug('test') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test') - }) - - it('should handle debug(message, ...splat)', () => { - logger.debug('test: %s', 'hey') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test: hey') - }) - - it('should handle debug(message, ...splat, error)', () => { - const error = new Error('hey') - logger.debug('test: %s', 'hey', error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test: hey') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - - it('should handle debug(error)', () => { - const error = new Error('hey') - logger.debug(error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'hey') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - }) - - describe('logger.warn', () => { - it('should handle warn(message)', () => { - logger.warn('test') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test') - }) - - it('should handle warn(message, ...splat)', () => { - logger.warn('test: %s', 'hey') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test: hey') - }) - - it('should handle warn(message, ...splat, error)', () => { - const error = new Error('hey') - logger.warn('test: %s', 'hey', error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test: hey') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - - it('should handle info(error)', () => { - const error = new Error('hey') - logger.warn(error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'hey') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - }) - - describe('logger.error', () => { - it('should handle error(message)', () => { - logger.error('test') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test') - }) - - it('should handle error(message, ...splat)', () => { - logger.error('test: %s', 'hey') - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test: hey') - }) - - it('should handle error(message, ...splat, error)', () => { - const error = new Error('hey') - logger.error('test: %s', 'hey', error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test: hey') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - - it('should handle error(error)', () => { - const error = new Error('hey') - logger.error(error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'hey') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - - it('should work with an insufficient amount of splat args error(msg, ...splat, message)', () => { - const error = new Error('hey') - logger.error('hey %s', error) - - expect(stubLogger.log).toHaveBeenCalledTimes(1) - expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'hey undefined') - expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) - }) - }) - - describe('using ConsoleLoggerHandler', () => { - beforeEach(() => { - jest.spyOn(console, 'info').mockImplementation(() => {}) - }) - - afterEach(() => { - jest.resetAllMocks() - }) - - it('should work with BasicLogger', () => { - const logger = new ConsoleLogHandler() - const TIME = '12:00' - setLogHandler(logger) - setLogLevel(LogLevel.INFO) - jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) - - logger.log(LogLevel.INFO, 'hey') - - expect(console.info).toBeCalledTimes(1) - expect(console.info).toBeCalledWith('[OPTIMIZELY] - INFO 12:00 hey') - }) - - it('should set logLevel to ERROR when setLogLevel is called with invalid value', () => { - const logger = new ConsoleLogHandler() - logger.setLogLevel('invalid' as any) - - expect(logger.logLevel).toEqual(LogLevel.ERROR) - }) - - it('should set logLevel to ERROR when setLogLevel is called with no value', () => { - const logger = new ConsoleLogHandler() - // @ts-ignore - logger.setLogLevel() - - expect(logger.logLevel).toEqual(LogLevel.ERROR) - }) - }) - }) - - describe('ConsoleLogger', function() { - beforeEach(() => { - jest.spyOn(console, 'info') - jest.spyOn(console, 'log') - jest.spyOn(console, 'warn') - jest.spyOn(console, 'error') - }) - - afterEach(() => { - jest.resetAllMocks() - }) - - it('should log to console.info for LogLevel.INFO', () => { - const logger = new ConsoleLogHandler({ - logLevel: LogLevel.DEBUG, - }) - const TIME = '12:00' - jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) - - logger.log(LogLevel.INFO, 'test') - - expect(console.info).toBeCalledTimes(1) - expect(console.info).toBeCalledWith('[OPTIMIZELY] - INFO 12:00 test') - }) - - it('should log to console.log for LogLevel.DEBUG', () => { - const logger = new ConsoleLogHandler({ - logLevel: LogLevel.DEBUG, - }) - const TIME = '12:00' - jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) - - logger.log(LogLevel.DEBUG, 'debug') - - expect(console.log).toBeCalledTimes(1) - expect(console.log).toBeCalledWith('[OPTIMIZELY] - DEBUG 12:00 debug') - }) - - it('should log to console.warn for LogLevel.WARNING', () => { - const logger = new ConsoleLogHandler({ - logLevel: LogLevel.DEBUG, - }) - const TIME = '12:00' - jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) - - logger.log(LogLevel.WARNING, 'warning') - - expect(console.warn).toBeCalledTimes(1) - expect(console.warn).toBeCalledWith('[OPTIMIZELY] - WARN 12:00 warning') - }) - - it('should log to console.error for LogLevel.ERROR', () => { - const logger = new ConsoleLogHandler({ - logLevel: LogLevel.DEBUG, - }) - const TIME = '12:00' - jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) - - logger.log(LogLevel.ERROR, 'error') - - expect(console.error).toBeCalledTimes(1) - expect(console.error).toBeCalledWith('[OPTIMIZELY] - ERROR 12:00 error') - }) - - it('should not log if the configured logLevel is higher', () => { - const logger = new ConsoleLogHandler({ - logLevel: LogLevel.INFO, - }) - - logger.log(LogLevel.DEBUG, 'debug') - - expect(console.log).toBeCalledTimes(0) - }) - }) -}) diff --git a/packages/optimizely-sdk/modules/logging/errorHandler.ts b/packages/optimizely-sdk/modules/logging/errorHandler.ts deleted file mode 100644 index bb659aeae..000000000 --- a/packages/optimizely-sdk/modules/logging/errorHandler.ts +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Copyright 2019, 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. - */ -/** - * @export - * @interface ErrorHandler - */ -export interface ErrorHandler { - /** - * @param {Error} exception - * @memberof ErrorHandler - */ - handleError(exception: Error): void -} - -/** - * @export - * @class NoopErrorHandler - * @implements {ErrorHandler} - */ -export class NoopErrorHandler implements ErrorHandler { - /** - * @param {Error} exception - * @memberof NoopErrorHandler - */ - handleError(exception: Error): void { - // no-op - return - } -} - -let globalErrorHandler: ErrorHandler = new NoopErrorHandler() - -/** - * @export - * @param {ErrorHandler} handler - */ -export function setErrorHandler(handler: ErrorHandler): void { - globalErrorHandler = handler -} - -/** - * @export - * @returns {ErrorHandler} - */ -export function getErrorHandler(): ErrorHandler { - return globalErrorHandler -} - -/** - * @export - */ -export function resetErrorHandler(): void { - globalErrorHandler = new NoopErrorHandler() -} diff --git a/packages/optimizely-sdk/modules/logging/index.ts b/packages/optimizely-sdk/modules/logging/index.ts deleted file mode 100644 index 47a1e99c8..000000000 --- a/packages/optimizely-sdk/modules/logging/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Copyright 2019, 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. - */ -export * from './errorHandler' -export * from './models' -export * from './logger' diff --git a/packages/optimizely-sdk/modules/logging/logger.ts b/packages/optimizely-sdk/modules/logging/logger.ts deleted file mode 100644 index 5647a798a..000000000 --- a/packages/optimizely-sdk/modules/logging/logger.ts +++ /dev/null @@ -1,328 +0,0 @@ -/** - * Copyright 2019, 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 { getErrorHandler } from './errorHandler' -import { isValidEnum, sprintf } from '../utils' - -import { LogLevel, LoggerFacade, LogManager, LogHandler } from './models' - -type StringToLogLevel = { - NOTSET: number, - DEBUG: number, - INFO: number, - WARNING: number, - ERROR: number, -} - -const stringToLogLevel: StringToLogLevel = { - NOTSET: 0, - DEBUG: 1, - INFO: 2, - WARNING: 3, - ERROR: 4, -} - -function coerceLogLevel(level: any): LogLevel { - if (typeof level !== 'string') { - return level - } - - level = level.toUpperCase() - if (level === 'WARN') { - level = 'WARNING' - } - - if (!stringToLogLevel[level as keyof StringToLogLevel]) { - return level - } - - return stringToLogLevel[level as keyof StringToLogLevel] -} - -type LogData = { - message: string - splat: any[] - error?: Error -} - -class DefaultLogManager implements LogManager { - private loggers: { - [name: string]: LoggerFacade - } - private defaultLoggerFacade = new OptimizelyLogger() - - constructor() { - this.loggers = {} - } - - getLogger(name?: string): LoggerFacade { - if (!name) { - return this.defaultLoggerFacade - } - - if (!this.loggers[name]) { - this.loggers[name] = new OptimizelyLogger({ messagePrefix: name }) - } - - return this.loggers[name] - } -} - -type ConsoleLogHandlerConfig = { - logLevel?: LogLevel | string - logToConsole?: boolean - prefix?: string -} - -export class ConsoleLogHandler implements LogHandler { - public logLevel: LogLevel - private logToConsole: boolean - private prefix: string - - /** - * Creates an instance of ConsoleLogger. - * @param {ConsoleLogHandlerConfig} config - * @memberof ConsoleLogger - */ - constructor(config: ConsoleLogHandlerConfig = {}) { - this.logLevel = LogLevel.NOTSET - if (config.logLevel !== undefined && isValidEnum(LogLevel, config.logLevel)) { - this.setLogLevel(config.logLevel) - } - - this.logToConsole = config.logToConsole !== undefined ? !!config.logToConsole : true - this.prefix = config.prefix !== undefined ? config.prefix : '[OPTIMIZELY]' - } - - /** - * @param {LogLevel} level - * @param {string} message - * @memberof ConsoleLogger - */ - log(level: LogLevel, message: string) { - if (!this.shouldLog(level) || !this.logToConsole) { - return - } - - let logMessage: string = `${this.prefix} - ${this.getLogLevelName( - level, - )} ${this.getTime()} ${message}` - - this.consoleLog(level, [logMessage]) - } - - /** - * @param {LogLevel} level - * @memberof ConsoleLogger - */ - setLogLevel(level: LogLevel | string) { - level = coerceLogLevel(level) - if (!isValidEnum(LogLevel, level) || level === undefined) { - this.logLevel = LogLevel.ERROR - } else { - this.logLevel = level - } - } - - /** - * @returns {string} - * @memberof ConsoleLogger - */ - getTime(): string { - return new Date().toISOString() - } - - /** - * @private - * @param {LogLevel} targetLogLevel - * @returns {boolean} - * @memberof ConsoleLogger - */ - private shouldLog(targetLogLevel: LogLevel): boolean { - return targetLogLevel >= this.logLevel - } - - /** - * @private - * @param {LogLevel} logLevel - * @returns {string} - * @memberof ConsoleLogger - */ - private getLogLevelName(logLevel: LogLevel): string { - switch (logLevel) { - case LogLevel.DEBUG: - return 'DEBUG' - case LogLevel.INFO: - return 'INFO ' - case LogLevel.WARNING: - return 'WARN ' - case LogLevel.ERROR: - return 'ERROR' - default: - return 'NOTSET' - } - } - - /** - * @private - * @param {LogLevel} logLevel - * @param {string[]} logArguments - * @memberof ConsoleLogger - */ - private consoleLog(logLevel: LogLevel, logArguments: [string, ...string[]]) { - switch (logLevel) { - case LogLevel.DEBUG: - console.log.apply(console, logArguments) - break - case LogLevel.INFO: - console.info.apply(console, logArguments) - break - case LogLevel.WARNING: - console.warn.apply(console, logArguments) - break - case LogLevel.ERROR: - console.error.apply(console, logArguments) - break - default: - console.log.apply(console, logArguments) - } - } -} - -let globalLogLevel: LogLevel = LogLevel.NOTSET -let globalLogHandler: LogHandler | null = null - -class OptimizelyLogger implements LoggerFacade { - private messagePrefix: string = '' - - constructor(opts: { messagePrefix?: string } = {}) { - if (opts.messagePrefix) { - this.messagePrefix = opts.messagePrefix - } - } - - /** - * @param {(LogLevel | LogInputObject)} levelOrObj - * @param {string} [message] - * @memberof OptimizelyLogger - */ - log(level: LogLevel | string, message: string, ...splat: any[]): void { - this.internalLog(coerceLogLevel(level), { - message, - splat, - }) - } - - info(message: string | Error, ...splat: any[]): void { - this.namedLog(LogLevel.INFO, message, splat) - } - - debug(message: string | Error, ...splat: any[]): void { - this.namedLog(LogLevel.DEBUG, message, splat) - } - - warn(message: string | Error, ...splat: any[]): void { - this.namedLog(LogLevel.WARNING, message, splat) - } - - error(message: string | Error, ...splat: any[]): void { - this.namedLog(LogLevel.ERROR, message, splat) - } - - private format(data: LogData): string { - return `${this.messagePrefix ? this.messagePrefix + ': ' : ''}${sprintf( - data.message, - ...data.splat, - )}` - } - - private internalLog(level: LogLevel, data: LogData): void { - if (!globalLogHandler) { - return - } - - if (level < globalLogLevel) { - return - } - - globalLogHandler.log(level, this.format(data)) - - if (data.error && data.error instanceof Error) { - getErrorHandler().handleError(data.error) - } - } - - private namedLog(level: LogLevel, message: string | Error, splat: any[]): void { - let error: Error | undefined - - if (message instanceof Error) { - error = message - message = error.message - this.internalLog(level, { - error, - message, - splat, - }) - return - } - - if (splat.length === 0) { - this.internalLog(level, { - message, - splat, - }) - return - } - - const last = splat[splat.length - 1] - if (last instanceof Error) { - error = last - splat.splice(-1) - } - - this.internalLog(level, { message, error, splat }) - } -} - -let globalLogManager: LogManager = new DefaultLogManager() - -export function getLogger(name?: string): LoggerFacade { - return globalLogManager.getLogger(name) -} - -export function setLogHandler(logger: LogHandler | null) { - globalLogHandler = logger -} - -export function setLogLevel(level: LogLevel | string) { - level = coerceLogLevel(level) - if (!isValidEnum(LogLevel, level) || level === undefined) { - globalLogLevel = LogLevel.ERROR - } else { - globalLogLevel = level - } -} - -export function getLogLevel(): LogLevel { - return globalLogLevel -} - -/** - * Resets all global logger state to it's original - */ -export function resetLogger() { - globalLogManager = new DefaultLogManager() - globalLogLevel = LogLevel.NOTSET -} diff --git a/packages/optimizely-sdk/modules/logging/models.ts b/packages/optimizely-sdk/modules/logging/models.ts deleted file mode 100644 index cd3223932..000000000 --- a/packages/optimizely-sdk/modules/logging/models.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright 2019, 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. - */ -export enum LogLevel { - NOTSET = 0, - DEBUG = 1, - INFO = 2, - WARNING = 3, - ERROR = 4, -} - -export interface LoggerFacade { - log(level: LogLevel | string, message: string, ...splat: any[]): void - - info(message: string | Error, ...splat: any[]): void - - debug(message: string | Error, ...splat: any[]): void - - warn(message: string | Error, ...splat: any[]): void - - error(message: string | Error, ...splat: any[]): void -} - -export interface LogManager { - getLogger(name?: string): LoggerFacade -} - -export interface LogHandler { - log(level: LogLevel, message: string, ...splat: any[]): void -} diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index e6f4bfe79..dbde48acd 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -75,7 +75,7 @@ const umdBundle = { resolve({ browser: true }), commonjs({ namedExports: { - '../../../modules/logging': [ + '@optimizely/js-sdk-logging': [ 'ConsoleLogHandler', 'getLogger', 'setLogLevel', From 2843dccb8a5a19f7707f706ac5e8b2abe1471bd6 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Fri, 25 Mar 2022 21:03:06 +0500 Subject: [PATCH 05/48] utils merged in optimizely sdk --- packages/optimizely-sdk/jest.config.js | 2 +- .../core/audience_evaluator/index.tests.js | 2 +- .../lib/core/bucketer/index.tests.js | 2 +- .../optimizely-sdk/lib/core/bucketer/index.ts | 2 +- .../index.tests.js | 2 +- .../lib/core/decision_service/index.tests.js | 2 +- .../lib/core/decision_service/index.ts | 2 +- .../lib/core/notification_center/index.ts | 3 +- .../lib/core/project_config/index.tests.js | 2 +- .../lib/core/project_config/index.ts | 2 +- .../project_config_manager.tests.js | 2 +- .../project_config/project_config_manager.ts | 2 +- .../lib/optimizely/index.tests.js | 2 +- .../optimizely-sdk/lib/optimizely/index.ts | 2 +- .../optimizely_user_context/index.tests.js | 2 +- .../forwarding_event_processor.ts | 2 +- .../lib/plugins/logger/index.react_native.ts | 2 +- packages/optimizely-sdk/lib/shared_types.ts | 2 +- .../utils/attributes_validator/index.tests.js | 2 +- .../lib/utils/attributes_validator/index.ts | 2 +- .../lib/utils/config_validator/index.tests.js | 2 +- .../lib/utils/config_validator/index.ts | 2 +- .../optimizely-sdk/lib/utils/enums/index.ts | 2 +- .../lib/utils/event_tag_utils/index.tests.js | 2 +- .../utils/event_tags_validator/index.tests.js | 2 +- .../lib/utils/event_tags_validator/index.ts | 2 +- .../optimizely-sdk/lib/utils/fns/index.ts | 145 +++++++++++++++- .../json_schema_validator/index.tests.js | 2 +- .../lib/utils/json_schema_validator/index.ts | 2 +- .../index.tests.js | 2 +- .../user_profile_service_validator/index.ts | 2 +- .../optimizely-sdk/modules/utils/index.d.ts | 36 ---- .../optimizely-sdk/modules/utils/index.js | 156 ------------------ packages/optimizely-sdk/rollup.config.js | 5 +- .../utils/__tests__ => tests}/utils.spec.ts | 4 +- packages/utils/src/index.ts | 4 +- 36 files changed, 180 insertions(+), 231 deletions(-) delete mode 100644 packages/optimizely-sdk/modules/utils/index.d.ts delete mode 100644 packages/optimizely-sdk/modules/utils/index.js rename packages/optimizely-sdk/{modules/utils/__tests__ => tests}/utils.spec.ts (97%) diff --git a/packages/optimizely-sdk/jest.config.js b/packages/optimizely-sdk/jest.config.js index 322f646e0..612a829eb 100644 --- a/packages/optimizely-sdk/jest.config.js +++ b/packages/optimizely-sdk/jest.config.js @@ -5,7 +5,7 @@ module.exports = { "transform": { "^.+\\.tsx?$": "ts-jest" }, - "testRegex": "(/modules/*/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$", + "testRegex": "(/tests/.*|(\\.|/)(test|spec))\\.tsx?$", "moduleFileExtensions": [ "ts", "tsx", diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js index 06d759d46..3332dbef4 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { getLogger } from '@optimizely/js-sdk-logging'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { createAudienceEvaluator } from './index'; import * as conditionTreeEvaluator from '../condition_tree_evaluator'; diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.tests.js b/packages/optimizely-sdk/lib/core/bucketer/index.tests.js index c24bc4e9c..955a602f3 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.tests.js +++ b/packages/optimizely-sdk/lib/core/bucketer/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert, expect } from 'chai'; import { cloneDeep } from 'lodash'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import * as bucketer from './'; import { diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index b26e30893..7d24feda5 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -17,7 +17,7 @@ /** * Bucketer API for determining the variation id from the specified parameters */ -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import murmurhash from 'murmurhash'; import { LogHandler } from '@optimizely/js-sdk-logging'; import { diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index d4b165ab0..641d9556c 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -15,7 +15,7 @@ ***************************************************************************/ import sinon from 'sinon'; import { assert } from 'chai'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { LOG_LEVEL, diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.tests.js b/packages/optimizely-sdk/lib/core/decision_service/index.tests.js index 4cdea9988..419da672a 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.tests.js +++ b/packages/optimizely-sdk/lib/core/decision_service/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import cloneDeep from 'lodash/cloneDeep'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { createDecisionService } from './'; import * as bucketer from '../bucketer'; diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.ts b/packages/optimizely-sdk/lib/core/decision_service/index.ts index 02fe0f9e8..546aa5c23 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.ts +++ b/packages/optimizely-sdk/lib/core/decision_service/index.ts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { sprintf } from '../../../modules/utils'; import { LogHandler } from '@optimizely/js-sdk-logging'; +import { sprintf } from '../../utils/fns'; import fns from '../../utils/fns'; import { bucket } from '../bucketer'; diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index 2ad08b0ea..0f841de6c 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -13,9 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { objectValues } from '../../../modules/utils'; import { LogHandler, ErrorHandler } from '@optimizely/js-sdk-logging'; -import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../../modules/utils'; +import { objectValues, NOTIFICATION_TYPES as notificationTypesEnum } from '../../utils/fns'; import { NotificationListener, ListenerPayload } from '../../shared_types'; import { diff --git a/packages/optimizely-sdk/lib/core/project_config/index.tests.js b/packages/optimizely-sdk/lib/core/project_config/index.tests.js index ff98cd630..690ca6aa9 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.tests.js @@ -17,7 +17,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { forEach, cloneDeep } from 'lodash'; import { getLogger } from '@optimizely/js-sdk-logging'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import fns from '../../utils/fns'; import projectConfig from './'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index a92089e01..c625f8060 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -18,7 +18,7 @@ import { objectEntries, objectValues, sprintf -} from '../../../modules/utils'; +} from '../../utils/fns'; import fns from '../../utils/fns'; import { diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index 20188f2d2..3dc884747 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -17,8 +17,8 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { cloneDeep } from 'lodash'; -import { sprintf } from '../../../modules/utils'; import * as logging from '@optimizely/js-sdk-logging'; +import { sprintf } from '../../utils/fns'; import * as datafileManager from '@optimizely/js-sdk-datafile-manager'; import * as projectConfig from './index'; diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts index 58ec462f0..7074e1d14 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '../../../modules/utils'; import { getLogger } from '@optimizely/js-sdk-logging'; +import { sprintf } from '../../utils/fns'; import { ERROR_MESSAGES } from '../../utils/enums'; import { createOptimizelyConfig } from '../optimizely_config'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index c4573967d..736506246 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -15,7 +15,7 @@ ***************************************************************************/ import { assert, expect } from 'chai'; import sinon from 'sinon'; -import { sprintf, NOTIFICATION_TYPES } from '../../modules/utils'; +import { sprintf, NOTIFICATION_TYPES } from '../utils/fns'; import eventProcessor from '../plugins/event_processor'; import * as logging from '@optimizely/js-sdk-logging'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 3fc3d8dd6..430b652bb 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { find, sprintf, objectValues, NotificationCenter } from '../../modules/utils'; import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; +import { find, sprintf, objectValues, NotificationCenter } from '../utils/fns'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import { diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js index 39a9ef21b..837a577f0 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js @@ -17,7 +17,7 @@ import { assert } from 'chai'; import sinon from 'sinon'; import * as logging from '@optimizely/js-sdk-logging'; -import { sprintf, NOTIFICATION_TYPES } from '../../modules/utils'; +import { sprintf, NOTIFICATION_TYPES } from '../utils/fns'; import OptimizelyUserContext from './'; import { createLogger } from '../plugins/logger'; diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 12abe13d5..98fbc536e 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -18,7 +18,7 @@ import { EventProcessor, ProcessableEvent, } from '@optimizely/js-sdk-event-processor'; -import { NotificationCenter } from '../../../modules/utils'; +import { NotificationCenter } from '../../utils/fns'; import { EventDispatcher } from '../../shared_types'; import { NOTIFICATION_TYPES } from '../../utils/enums'; diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts index aa0e2a24f..d0ecc4656 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { LogLevel } from '@optimizely/js-sdk-logging'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { NoOpLogger } from './index'; function getLogLevelName(level: number): string { diff --git a/packages/optimizely-sdk/lib/shared_types.ts b/packages/optimizely-sdk/lib/shared_types.ts index e4fd2f8d3..ce2366227 100644 --- a/packages/optimizely-sdk/lib/shared_types.ts +++ b/packages/optimizely-sdk/lib/shared_types.ts @@ -16,7 +16,7 @@ import { ErrorHandler, LogHandler, LogLevel, LoggerFacade } from '@optimizely/js-sdk-logging'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; -import { NotificationCenter } from '../modules/utils'; +import { NotificationCenter } from '../lib/utils/fns'; export interface BucketerParams { experimentId: string; diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js index 2d121a849..99b95620b 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js @@ -14,7 +14,7 @@ * limitations under the License. */ import { assert } from 'chai'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import * as attributesValidator from './'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts index aa0dd97af..9cda1dd0e 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { ObjectWithUnknownProperties } from '../../shared_types'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js index afce34b71..fcdfcd2fb 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js @@ -14,7 +14,7 @@ * limitations under the License. */ import { assert } from 'chai'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import configValidator from './'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.ts b/packages/optimizely-sdk/lib/utils/config_validator/index.ts index 14b0c509f..2bb2f0e66 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { ObjectWithUnknownProperties } from '../../shared_types'; import { diff --git a/packages/optimizely-sdk/lib/utils/enums/index.ts b/packages/optimizely-sdk/lib/utils/enums/index.ts index 3d4882f40..051e62e35 100644 --- a/packages/optimizely-sdk/lib/utils/enums/index.ts +++ b/packages/optimizely-sdk/lib/utils/enums/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ -import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../../modules/utils'; +import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../utils/fns'; /** * Contains global enums used throughout the library diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js index 86fe53923..32ddcd11e 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js @@ -15,7 +15,7 @@ */ import sinon from 'sinon'; import { assert } from 'chai'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import * as eventTagUtils from './'; diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js index 5363f8d30..d79b14c3d 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js @@ -14,7 +14,7 @@ * limitations under the License. */ import { assert } from 'chai'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { validate } from './'; import { ERROR_MESSAGES } from'../enums'; diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts index 306e31e1e..db36bc47a 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts @@ -17,7 +17,7 @@ /** * Provides utility method for validating that event tags user has provided are valid */ -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 7eb5bd6dc..a05a6843a 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { generateUUID as uuid, keyBy as keyByUtil } from '../../../modules/utils'; +import v4 from 'uuid'; const MAX_SAFE_INTEGER_LIMIT = Math.pow(2, 53); @@ -61,11 +61,152 @@ function isNumber(value: unknown): boolean { return typeof value === 'number'; } + export function uuid(): string { + return v4() + } + + export type Omit = Pick> + + export function getTimestamp(): number { + return new Date().getTime() + } + + /** + * Validates a value is a valid TypeScript enum + * + * @export + * @param {object} enumToCheck + * @param {*} value + * @returns {boolean} + */ + export function isValidEnum(enumToCheck: { [key: string]: any }, value: any): boolean { + let found = false + + const keys = Object.keys(enumToCheck) + for (let index = 0; index < keys.length; index++) { + if (value === enumToCheck[keys[index]]) { + found = true + break + } + } + return found + } + + export function groupBy(arr: K[], grouperFn: (item: K) => string): Array { + const grouper: { [key: string]: K[] } = {} + + arr.forEach(item => { + const key = grouperFn(item) + grouper[key] = grouper[key] || [] + grouper[key].push(item) + }) + + return objectValues(grouper) + } + + export function objectValues(obj: { [key: string]: K }): K[] { + return Object.keys(obj).map(key => obj[key]) + } + + export function objectEntries(obj: { [key: string]: K }): [string, K][] { + return Object.keys(obj).map(key => [key, obj[key]]) + } + + export function find(arr: K[], cond: (arg: K) => boolean): K | undefined { + let found + + for (let item of arr) { + if (cond(item)) { + found = item + break + } + } + + return found + } + + export function keyByUtil(arr: K[], keyByFn: (item: K) => string): { [key: string]: K } { + let map: { [key: string]: K } = {} + arr.forEach(item => { + const key = keyByFn(item) + map[key] = item + }) + return map + } + + export function sprintf(format: string, ...args: any[]): string { + var i = 0 + return format.replace(/%s/g, function() { + const arg = args[i++] + const type = typeof arg + if (type === 'function') { + return arg() + } else if (type === 'string') { + return arg + } else { + return String(arg) + } + }) + } + /* + * Notification types for use with NotificationCenter + * Format is EVENT: + * + * SDK consumers can use these to register callbacks with the notification center. + * + * @deprecated since 3.1.0 + * ACTIVATE: An impression event will be sent to Optimizely + * Callbacks will receive an object argument with the following properties: + * - experiment {Object} + * - userId {string} + * - attributes {Object|undefined} + * - variation {Object} + * - logEvent {Object} + * + * DECISION: A decision is made in the system. i.e. user activation, + * feature access or feature-variable value retrieval + * Callbacks will receive an object argument with the following properties: + * - type {string} + * - userId {string} + * - attributes {Object|undefined} + * - decisionInfo {Object|undefined} + * + * LOG_EVENT: A batch of events, which could contain impressions and/or conversions, + * will be sent to Optimizely + * Callbacks will receive an object argument with the following properties: + * - url {string} + * - httpVerb {string} + * - params {Object} + * + * OPTIMIZELY_CONFIG_UPDATE: This Optimizely instance has been updated with a new + * config + * + * TRACK: A conversion event will be sent to Optimizely + * Callbacks will receive the an object argument with the following properties: + * - eventKey {string} + * - userId {string} + * - attributes {Object|undefined} + * - eventTags {Object|undefined} + * - logEvent {Object} + * + */ + export enum NOTIFICATION_TYPES { + ACTIVATE = 'ACTIVATE:experiment, user_id,attributes, variation, event', + DECISION = 'DECISION:type, userId, attributes, decisionInfo', + LOG_EVENT = 'LOG_EVENT:logEvent', + OPTIMIZELY_CONFIG_UPDATE = 'OPTIMIZELY_CONFIG_UPDATE', + TRACK = 'TRACK:event_key, user_id, attributes, event_tags, event', + } + + export interface NotificationCenter { + sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void + } + export default { assign, currentTimestamp, isSafeInteger, keyBy, uuid, - isNumber, + isNumber } diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js index 322624a3d..ad5afc0ea 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { assert } from 'chai'; import { validate } from './'; diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts index 48d0a92af..ac6833687 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../fns'; import { validate as jsonSchemaValidator } from 'json-schema'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js index 155ce7c06..e095f4c6c 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js @@ -15,7 +15,7 @@ ***************************************************************************/ import { assert } from 'chai'; -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { validate } from './'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts index 4c2de4f46..5a3a4b38d 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts @@ -18,7 +18,7 @@ * Provides utility method for validating that the given user profile service implementation is valid. */ -import { sprintf } from '../../../modules/utils'; +import { sprintf } from '../../utils/fns'; import { ObjectWithUnknownProperties } from '../../shared_types'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/modules/utils/index.d.ts b/packages/optimizely-sdk/modules/utils/index.d.ts deleted file mode 100644 index a6e6630b2..000000000 --- a/packages/optimizely-sdk/modules/utils/index.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -export declare function generateUUID(): string; -export declare type Omit = Pick>; -export declare function getTimestamp(): number; -/** - * Validates a value is a valid TypeScript enum - * - * @export - * @param {object} enumToCheck - * @param {*} value - * @returns {boolean} - */ -export declare function isValidEnum(enumToCheck: { - [key: string]: any; -}, value: any): boolean; -export declare function groupBy(arr: K[], grouperFn: (item: K) => string): Array; -export declare function objectValues(obj: { - [key: string]: K; -}): K[]; -export declare function objectEntries(obj: { - [key: string]: K; -}): [string, K][]; -export declare function find(arr: K[], cond: (arg: K) => boolean): K | undefined; -export declare function keyBy(arr: K[], keyByFn: (item: K) => string): { - [key: string]: K; -}; -export declare function sprintf(format: string, ...args: any[]): string; -export declare enum NOTIFICATION_TYPES { - ACTIVATE = "ACTIVATE:experiment, user_id,attributes, variation, event", - DECISION = "DECISION:type, userId, attributes, decisionInfo", - LOG_EVENT = "LOG_EVENT:logEvent", - OPTIMIZELY_CONFIG_UPDATE = "OPTIMIZELY_CONFIG_UPDATE", - TRACK = "TRACK:event_key, user_id, attributes, event_tags, event" -} -export interface NotificationCenter { - sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void; -} diff --git a/packages/optimizely-sdk/modules/utils/index.js b/packages/optimizely-sdk/modules/utils/index.js deleted file mode 100644 index f90d987cf..000000000 --- a/packages/optimizely-sdk/modules/utils/index.js +++ /dev/null @@ -1,156 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Copyright 2019, 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. - */ -var uuid_1 = require("uuid"); -function generateUUID() { - return uuid_1.v4(); -} -exports.generateUUID = generateUUID; -function getTimestamp() { - return new Date().getTime(); -} -exports.getTimestamp = getTimestamp; -/** - * Validates a value is a valid TypeScript enum - * - * @export - * @param {object} enumToCheck - * @param {*} value - * @returns {boolean} - */ -function isValidEnum(enumToCheck, value) { - var found = false; - var keys = Object.keys(enumToCheck); - for (var index = 0; index < keys.length; index++) { - if (value === enumToCheck[keys[index]]) { - found = true; - break; - } - } - return found; -} -exports.isValidEnum = isValidEnum; -function groupBy(arr, grouperFn) { - var grouper = {}; - arr.forEach(function (item) { - var key = grouperFn(item); - grouper[key] = grouper[key] || []; - grouper[key].push(item); - }); - return objectValues(grouper); -} -exports.groupBy = groupBy; -function objectValues(obj) { - return Object.keys(obj).map(function (key) { return obj[key]; }); -} -exports.objectValues = objectValues; -function objectEntries(obj) { - return Object.keys(obj).map(function (key) { return [key, obj[key]]; }); -} -exports.objectEntries = objectEntries; -function find(arr, cond) { - var found; - for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) { - var item = arr_1[_i]; - if (cond(item)) { - found = item; - break; - } - } - return found; -} -exports.find = find; -function keyBy(arr, keyByFn) { - var map = {}; - arr.forEach(function (item) { - var key = keyByFn(item); - map[key] = item; - }); - return map; -} -exports.keyBy = keyBy; -function sprintf(format) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - var i = 0; - return format.replace(/%s/g, function () { - var arg = args[i++]; - var type = typeof arg; - if (type === 'function') { - return arg(); - } - else if (type === 'string') { - return arg; - } - else { - return String(arg); - } - }); -} -exports.sprintf = sprintf; -/* - * Notification types for use with NotificationCenter - * Format is EVENT: - * - * SDK consumers can use these to register callbacks with the notification center. - * - * @deprecated since 3.1.0 - * ACTIVATE: An impression event will be sent to Optimizely - * Callbacks will receive an object argument with the following properties: - * - experiment {Object} - * - userId {string} - * - attributes {Object|undefined} - * - variation {Object} - * - logEvent {Object} - * - * DECISION: A decision is made in the system. i.e. user activation, - * feature access or feature-variable value retrieval - * Callbacks will receive an object argument with the following properties: - * - type {string} - * - userId {string} - * - attributes {Object|undefined} - * - decisionInfo {Object|undefined} - * - * LOG_EVENT: A batch of events, which could contain impressions and/or conversions, - * will be sent to Optimizely - * Callbacks will receive an object argument with the following properties: - * - url {string} - * - httpVerb {string} - * - params {Object} - * - * OPTIMIZELY_CONFIG_UPDATE: This Optimizely instance has been updated with a new - * config - * - * TRACK: A conversion event will be sent to Optimizely - * Callbacks will receive the an object argument with the following properties: - * - eventKey {string} - * - userId {string} - * - attributes {Object|undefined} - * - eventTags {Object|undefined} - * - logEvent {Object} - * - */ -var NOTIFICATION_TYPES; -(function (NOTIFICATION_TYPES) { - NOTIFICATION_TYPES["ACTIVATE"] = "ACTIVATE:experiment, user_id,attributes, variation, event"; - NOTIFICATION_TYPES["DECISION"] = "DECISION:type, userId, attributes, decisionInfo"; - NOTIFICATION_TYPES["LOG_EVENT"] = "LOG_EVENT:logEvent"; - NOTIFICATION_TYPES["OPTIMIZELY_CONFIG_UPDATE"] = "OPTIMIZELY_CONFIG_UPDATE"; - NOTIFICATION_TYPES["TRACK"] = "TRACK:event_key, user_id, attributes, event_tags, event"; -})(NOTIFICATION_TYPES = exports.NOTIFICATION_TYPES || (exports.NOTIFICATION_TYPES = {})); diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index dbde48acd..de2f94042 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -32,7 +32,8 @@ const typescriptPluginOptions = { ], include: [ './lib/**/*.ts', - './lib/**/*.js' + './lib/**/*.js', + './modules/**/*.ts' ], }; @@ -115,7 +116,7 @@ const jsonSchemaBundle = { commonjs(), typescript(typescriptPluginOptions), ], - external: ['json-schema', '../../../modules/utils'], + external: ['json-schema', './lib/utils/fns', 'uuid'], input: 'lib/utils/json_schema_validator/index.ts', output: { exports: 'named', diff --git a/packages/optimizely-sdk/modules/utils/__tests__/utils.spec.ts b/packages/optimizely-sdk/tests/utils.spec.ts similarity index 97% rename from packages/optimizely-sdk/modules/utils/__tests__/utils.spec.ts rename to packages/optimizely-sdk/tests/utils.spec.ts index 8867d50e5..a54188673 100644 --- a/packages/optimizely-sdk/modules/utils/__tests__/utils.spec.ts +++ b/packages/optimizely-sdk/tests/utils.spec.ts @@ -1,5 +1,5 @@ /// -import { isValidEnum, groupBy, objectEntries, objectValues, find, keyBy, sprintf } from '../' +import { isValidEnum, groupBy, objectEntries, objectValues, find, keyByUtil, sprintf } from '../lib/utils/fns' describe('utils', () => { describe('isValidEnum', () => { @@ -83,7 +83,7 @@ describe('utils', () => { { key: 'baz', firstName: 'james', lastName: 'foxy' }, ] - expect(keyBy(input, item => item.key)).toEqual({ + expect(keyByUtil(input, item => item.key)).toEqual({ foo: { key: 'foo', firstName: 'jordan', lastName: 'foo' }, bar: { key: 'bar', firstName: 'jordan', lastName: 'bar' }, baz: { key: 'baz', firstName: 'james', lastName: 'foxy' }, diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index cd7dec342..bc797a43d 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { v4 } from 'uuid'; +import * as uuid from 'uuid'; export function generateUUID(): string { - return v4() + return uuid.v4() } export type Omit = Pick> From 8574c7e5f93b7dc929d86aa7c03616d8783225ed Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Fri, 25 Mar 2022 21:09:00 +0500 Subject: [PATCH 06/48] small changes removed --- packages/optimizely-sdk/jest.config.js | 2 +- packages/optimizely-sdk/lib/utils/fns/index.ts | 2 +- packages/utils/src/index.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/optimizely-sdk/jest.config.js b/packages/optimizely-sdk/jest.config.js index 612a829eb..1f7958d49 100644 --- a/packages/optimizely-sdk/jest.config.js +++ b/packages/optimizely-sdk/jest.config.js @@ -14,4 +14,4 @@ module.exports = { "json", "node" ], -} \ No newline at end of file +} diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index a05a6843a..09438c173 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -208,5 +208,5 @@ export default { isSafeInteger, keyBy, uuid, - isNumber + isNumber, } diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index bc797a43d..cd7dec342 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as uuid from 'uuid'; +import { v4 } from 'uuid'; export function generateUUID(): string { - return uuid.v4() + return v4() } export type Omit = Pick> From 28905d016f08fbdd652c57d45d2d935ffb3cc3eb Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 28 Mar 2022 11:15:27 +0500 Subject: [PATCH 07/48] ts config added because jest and mocha use similar declarations --- packages/optimizely-sdk/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/tsconfig.json b/packages/optimizely-sdk/tsconfig.json index d7ec24942..3c8b45cd4 100644 --- a/packages/optimizely-sdk/tsconfig.json +++ b/packages/optimizely-sdk/tsconfig.json @@ -11,7 +11,8 @@ "declaration": false, "module": "esnext", "outDir": "./dist", - "sourceMap": true + "sourceMap": true, + "skipLibCheck": true, }, "exclude": [ "./dist", From 11518e1a1735596e2d9069bc7b9a9da3e398a5a7 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 28 Mar 2022 11:26:56 +0500 Subject: [PATCH 08/48] type warning fixed --- packages/optimizely-sdk/lib/optimizely/index.ts | 3 +-- .../lib/optimizely_user_context/index.ts | 10 ++-------- packages/optimizely-sdk/lib/utils/fns/index.ts | 8 ++++++-- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 430b652bb..b74d93ccd 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; -import { find, sprintf, objectValues, NotificationCenter } from '../utils/fns'; +import { sprintf, objectValues, NotificationCenter } from '../utils/fns'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import { @@ -26,7 +26,6 @@ import { Variation, FeatureFlag, FeatureVariable, - OptimizelyVariation, OptimizelyOptions, OptimizelyDecideOption, OptimizelyDecision diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.ts b/packages/optimizely-sdk/lib/optimizely_user_context/index.ts index 2fcf78238..afc1116d3 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.ts +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.ts @@ -15,20 +15,14 @@ ***************************************************************************/ import Optimizely from '../../lib/optimizely'; import { - DecisionResponse, EventTags, OptimizelyDecideOption, OptimizelyDecision, OptimizelyDecisionContext, OptimizelyForcedDecision, - UserAttributes, - Variation + UserAttributes } from '../../lib/shared_types'; -import { - getFlagVariationByKey, - ProjectConfig, -} from '../core/project_config'; -import { LOG_MESSAGES, CONTROL_ATTRIBUTES } from '../utils/enums'; +import { CONTROL_ATTRIBUTES } from '../utils/enums'; export default class OptimizelyUserContext { private optimizely: Optimizely; diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 09438c173..edd84664e 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -79,6 +79,8 @@ function isNumber(value: unknown): boolean { * @param {*} value * @returns {boolean} */ + // TODO[OASIS-6649]: Don't use any type + // eslint-disable-next-line @typescript-eslint/no-explicit-any export function isValidEnum(enumToCheck: { [key: string]: any }, value: any): boolean { let found = false @@ -115,7 +117,7 @@ function isNumber(value: unknown): boolean { export function find(arr: K[], cond: (arg: K) => boolean): K | undefined { let found - for (let item of arr) { + for (const item of arr) { if (cond(item)) { found = item break @@ -126,7 +128,7 @@ function isNumber(value: unknown): boolean { } export function keyByUtil(arr: K[], keyByFn: (item: K) => string): { [key: string]: K } { - let map: { [key: string]: K } = {} + const map: { [key: string]: K } = {} arr.forEach(item => { const key = keyByFn(item) map[key] = item @@ -134,6 +136,8 @@ function isNumber(value: unknown): boolean { return map } + // TODO[OASIS-6649]: Don't use any type + // eslint-disable-next-line @typescript-eslint/no-explicit-any export function sprintf(format: string, ...args: any[]): string { var i = 0 return format.replace(/%s/g, function() { From d3371ce775de3706afc440a1ef50fc16a4aace39 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 28 Mar 2022 11:34:36 +0500 Subject: [PATCH 09/48] more types fixed --- packages/optimizely-sdk/lib/utils/fns/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index edd84664e..9b835d2cc 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -139,7 +139,7 @@ function isNumber(value: unknown): boolean { // TODO[OASIS-6649]: Don't use any type // eslint-disable-next-line @typescript-eslint/no-explicit-any export function sprintf(format: string, ...args: any[]): string { - var i = 0 + let i = 0 return format.replace(/%s/g, function() { const arg = args[i++] const type = typeof arg @@ -203,6 +203,8 @@ function isNumber(value: unknown): boolean { } export interface NotificationCenter { + // TODO[OASIS-6649]: Don't use any type + // eslint-disable-next-line @typescript-eslint/no-explicit-any sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void } From da73e11c98d608c6446147c61c8a20a825349f60 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 28 Mar 2022 11:44:43 +0500 Subject: [PATCH 10/48] fix --- packages/optimizely-sdk/lib/utils/fns/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 9b835d2cc..15fe502b2 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -79,6 +79,7 @@ function isNumber(value: unknown): boolean { * @param {*} value * @returns {boolean} */ + // TODO[OASIS-6649]: Don't use any type // eslint-disable-next-line @typescript-eslint/no-explicit-any export function isValidEnum(enumToCheck: { [key: string]: any }, value: any): boolean { From 069e5016c2de8e317e3da9b96faf158dd9b0a73b Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 28 Mar 2022 12:15:40 +0500 Subject: [PATCH 11/48] fix --- packages/optimizely-sdk/lib/utils/fns/index.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 15fe502b2..681a827e7 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -70,15 +70,6 @@ function isNumber(value: unknown): boolean { export function getTimestamp(): number { return new Date().getTime() } - - /** - * Validates a value is a valid TypeScript enum - * - * @export - * @param {object} enumToCheck - * @param {*} value - * @returns {boolean} - */ // TODO[OASIS-6649]: Don't use any type // eslint-disable-next-line @typescript-eslint/no-explicit-any From bc6d5fbbd7fb95932787aa018e79b04fd5293c0d Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 28 Mar 2022 12:27:04 +0500 Subject: [PATCH 12/48] fix --- packages/optimizely-sdk/lib/utils/fns/index.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 681a827e7..10d65e056 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -70,10 +70,21 @@ function isNumber(value: unknown): boolean { export function getTimestamp(): number { return new Date().getTime() } - + + /** + * Validates a value is a valid TypeScript enum + * + * @export + * @param {object} enumToCheck + * @param {*} value + * @returns {boolean} + */ // TODO[OASIS-6649]: Don't use any type // eslint-disable-next-line @typescript-eslint/no-explicit-any - export function isValidEnum(enumToCheck: { [key: string]: any }, value: any): boolean { + export function isValidEnum(enumToCheck: { [key: string]: any }, + // TODO[OASIS-6649]: Don't use any type + // eslint-disable-next-line @typescript-eslint/no-explicit-any + value: any): boolean { let found = false const keys = Object.keys(enumToCheck) From 3b758bd948f00996355b4c956f702ba58b8c0b6b Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 28 Mar 2022 12:49:24 +0500 Subject: [PATCH 13/48] type defined --- packages/optimizely-sdk/lib/utils/fns/index.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 10d65e056..c854df958 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { LogLevel } from '@optimizely/js-sdk-logging'; import v4 from 'uuid'; const MAX_SAFE_INTEGER_LIMIT = Math.pow(2, 53); @@ -79,12 +80,7 @@ function isNumber(value: unknown): boolean { * @param {*} value * @returns {boolean} */ - // TODO[OASIS-6649]: Don't use any type - // eslint-disable-next-line @typescript-eslint/no-explicit-any - export function isValidEnum(enumToCheck: { [key: string]: any }, - // TODO[OASIS-6649]: Don't use any type - // eslint-disable-next-line @typescript-eslint/no-explicit-any - value: any): boolean { + export function isValidEnum(enumToCheck: { [key: string]: any }, value: LogLevel | string): boolean { let found = false const keys = Object.keys(enumToCheck) From 73e1db862cd276a701572eea6d319070a58034ca Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 28 Mar 2022 13:43:42 +0500 Subject: [PATCH 14/48] type fix --- packages/optimizely-sdk/lib/utils/fns/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index c854df958..2ef95913a 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -80,7 +80,7 @@ function isNumber(value: unknown): boolean { * @param {*} value * @returns {boolean} */ - export function isValidEnum(enumToCheck: { [key: string]: any }, value: LogLevel | string): boolean { + export function isValidEnum(enumToCheck: { [key: string]: any }, value: number | string): boolean { let found = false const keys = Object.keys(enumToCheck) From 550c3baae1bf6416c867d1778573eb2c76935fcf Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 12 Apr 2022 20:55:58 +0500 Subject: [PATCH 15/48] headers updated --- .../core/audience_evaluator/index.tests.js | 2 +- .../lib/core/bucketer/index.tests.js | 2 +- .../optimizely-sdk/lib/core/bucketer/index.ts | 2 +- .../index.tests.js | 2 +- .../lib/core/decision_service/index.tests.js | 2 +- .../lib/core/notification_center/index.ts | 2 +- .../lib/core/project_config/index.tests.js | 2 +- .../project_config_manager.tests.js | 2 +- .../lib/optimizely/index.tests.js | 2 +- .../optimizely-sdk/lib/optimizely/index.ts | 1 - .../forwarding_event_processor.ts | 2 +- .../lib/plugins/logger/index.react_native.ts | 2 +- .../utils/attributes_validator/index.tests.js | 2 +- .../lib/utils/attributes_validator/index.ts | 2 +- .../lib/utils/config_validator/index.tests.js | 2 +- .../lib/utils/config_validator/index.ts | 2 +- .../lib/utils/event_tag_utils/index.tests.js | 2 +- .../utils/event_tags_validator/index.tests.js | 2 +- .../lib/utils/event_tags_validator/index.ts | 2 +- .../optimizely-sdk/lib/utils/fns/index.ts | 300 +++++++++--------- .../json_schema_validator/index.tests.js | 2 +- .../lib/utils/json_schema_validator/index.ts | 2 +- .../index.tests.js | 2 +- .../user_profile_service_validator/index.ts | 2 +- packages/optimizely-sdk/rollup.config.js | 2 +- 25 files changed, 177 insertions(+), 170 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js index 3332dbef4..f8869f330 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2020, Optimizely + * Copyright 2016, 2018-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.tests.js b/packages/optimizely-sdk/lib/core/bucketer/index.tests.js index 955a602f3..926f6f7c2 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.tests.js +++ b/packages/optimizely-sdk/lib/core/bucketer/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017, 2019-2021, Optimizely + * Copyright 2016-2017, 2019-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index 7d24feda5..82d7f5bca 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2019-2021, Optimizely + * Copyright 2016, 2019-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index 641d9556c..af85b5da3 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2018-2020, Optimizely, Inc. and contributors * + * Copyright 2018-2021, 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. * diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.tests.js b/packages/optimizely-sdk/lib/core/decision_service/index.tests.js index 419da672a..747ef9720 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.tests.js +++ b/packages/optimizely-sdk/lib/core/decision_service/index.tests.js @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2017-2021 Optimizely, Inc. and contributors * + * Copyright 2017-2022 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. * diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index 0f841de6c..f2a6086a4 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2020, Optimizely + * Copyright 2020-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/project_config/index.tests.js b/packages/optimizely-sdk/lib/core/project_config/index.tests.js index 690ca6aa9..401eefb4d 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2021, Optimizely + * Copyright 2016-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index 3dc884747..9212fd17c 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2019-2020 Optimizely + * Copyright 2019-2022 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index 736506246..1b776958b 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2016-2021, Optimizely, Inc. and contributors * + * Copyright 2016-2022, 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. * diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 3343c86a6..52fdf7026 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -16,7 +16,6 @@ import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; import { sprintf, objectValues, NotificationCenter } from '../utils/fns'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; -import {NotificationCenter} from '../core/notification_center' import { UserAttributes, diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 98fbc536e..609f2729d 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -1,5 +1,5 @@ /** - * Copyright 2021, Optimizely + * Copyright 2021-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts index d0ecc4656..ce8340e4c 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts @@ -1,5 +1,5 @@ /** - * Copyright 2019-2021, Optimizely + * Copyright 2019-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js index 99b95620b..d29686105 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2020, Optimizely + * Copyright 2016, 2018-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts index 9cda1dd0e..24e4be28f 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2020, Optimizely + * Copyright 2016, 2018-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js index fcdfcd2fb..690799503 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2020, Optimizely + * Copyright 2016, 2018-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.ts b/packages/optimizely-sdk/lib/utils/config_validator/index.ts index 2bb2f0e66..d18c82184 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2020, Optimizely + * Copyright 2016, 2018-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js index 32ddcd11e..552bfe120 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2020, Optimizely + * Copyright 2017, 2020-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js index d79b14c3d..d4e279abe 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2020 Optimizely + * Copyright 2017, 2020-2022 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts index db36bc47a..cf4883324 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2020 Optimizely + * Copyright 2017, 2020-2022 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 2ef95913a..95c124b3b 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2019-2020, Optimizely + * Copyright 2017, 2019-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LogLevel } from '@optimizely/js-sdk-logging'; import v4 from 'uuid'; const MAX_SAFE_INTEGER_LIMIT = Math.pow(2, 53); @@ -62,150 +61,150 @@ function isNumber(value: unknown): boolean { return typeof value === 'number'; } - export function uuid(): string { - return v4() - } - - export type Omit = Pick> - - export function getTimestamp(): number { - return new Date().getTime() - } - - /** - * Validates a value is a valid TypeScript enum - * - * @export - * @param {object} enumToCheck - * @param {*} value - * @returns {boolean} - */ - export function isValidEnum(enumToCheck: { [key: string]: any }, value: number | string): boolean { - let found = false - - const keys = Object.keys(enumToCheck) - for (let index = 0; index < keys.length; index++) { - if (value === enumToCheck[keys[index]]) { - found = true - break - } - } - return found - } - - export function groupBy(arr: K[], grouperFn: (item: K) => string): Array { - const grouper: { [key: string]: K[] } = {} - - arr.forEach(item => { - const key = grouperFn(item) - grouper[key] = grouper[key] || [] - grouper[key].push(item) - }) - - return objectValues(grouper) - } - - export function objectValues(obj: { [key: string]: K }): K[] { - return Object.keys(obj).map(key => obj[key]) - } - - export function objectEntries(obj: { [key: string]: K }): [string, K][] { - return Object.keys(obj).map(key => [key, obj[key]]) - } - - export function find(arr: K[], cond: (arg: K) => boolean): K | undefined { - let found - - for (const item of arr) { - if (cond(item)) { - found = item - break - } - } - - return found - } - - export function keyByUtil(arr: K[], keyByFn: (item: K) => string): { [key: string]: K } { - const map: { [key: string]: K } = {} - arr.forEach(item => { - const key = keyByFn(item) - map[key] = item - }) - return map - } - - // TODO[OASIS-6649]: Don't use any type - // eslint-disable-next-line @typescript-eslint/no-explicit-any - export function sprintf(format: string, ...args: any[]): string { - let i = 0 - return format.replace(/%s/g, function() { - const arg = args[i++] - const type = typeof arg - if (type === 'function') { - return arg() - } else if (type === 'string') { - return arg - } else { - return String(arg) - } - }) - } - /* - * Notification types for use with NotificationCenter - * Format is EVENT: - * - * SDK consumers can use these to register callbacks with the notification center. - * - * @deprecated since 3.1.0 - * ACTIVATE: An impression event will be sent to Optimizely - * Callbacks will receive an object argument with the following properties: - * - experiment {Object} - * - userId {string} - * - attributes {Object|undefined} - * - variation {Object} - * - logEvent {Object} - * - * DECISION: A decision is made in the system. i.e. user activation, - * feature access or feature-variable value retrieval - * Callbacks will receive an object argument with the following properties: - * - type {string} - * - userId {string} - * - attributes {Object|undefined} - * - decisionInfo {Object|undefined} - * - * LOG_EVENT: A batch of events, which could contain impressions and/or conversions, - * will be sent to Optimizely - * Callbacks will receive an object argument with the following properties: - * - url {string} - * - httpVerb {string} - * - params {Object} - * - * OPTIMIZELY_CONFIG_UPDATE: This Optimizely instance has been updated with a new - * config - * - * TRACK: A conversion event will be sent to Optimizely - * Callbacks will receive the an object argument with the following properties: - * - eventKey {string} - * - userId {string} - * - attributes {Object|undefined} - * - eventTags {Object|undefined} - * - logEvent {Object} - * - */ - export enum NOTIFICATION_TYPES { - ACTIVATE = 'ACTIVATE:experiment, user_id,attributes, variation, event', - DECISION = 'DECISION:type, userId, attributes, decisionInfo', - LOG_EVENT = 'LOG_EVENT:logEvent', - OPTIMIZELY_CONFIG_UPDATE = 'OPTIMIZELY_CONFIG_UPDATE', - TRACK = 'TRACK:event_key, user_id, attributes, event_tags, event', - } - - export interface NotificationCenter { - // TODO[OASIS-6649]: Don't use any type - // eslint-disable-next-line @typescript-eslint/no-explicit-any - sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void - } +export function uuid(): string { + return v4() +} + +export type Omit = Pick> + +export function getTimestamp(): number { + return new Date().getTime() +} + +/** +* Validates a value is a valid TypeScript enum +* +* @export +* @param {object} enumToCheck +* @param {*} value +* @returns {boolean} +*/ +export function isValidEnum(enumToCheck: { [key: string]: any }, value: number | string): boolean { + let found = false + + const keys = Object.keys(enumToCheck) + for (let index = 0; index < keys.length; index++) { + if (value === enumToCheck[keys[index]]) { + found = true + break + } + } + return found +} + +export function groupBy(arr: K[], grouperFn: (item: K) => string): Array { + const grouper: { [key: string]: K[] } = {} + + arr.forEach(item => { + const key = grouperFn(item) + grouper[key] = grouper[key] || [] + grouper[key].push(item) + }) + + return objectValues(grouper) +} + +export function objectValues(obj: { [key: string]: K }): K[] { + return Object.keys(obj).map(key => obj[key]) +} + +export function objectEntries(obj: { [key: string]: K }): [string, K][] { + return Object.keys(obj).map(key => [key, obj[key]]) +} + +export function find(arr: K[], cond: (arg: K) => boolean): K | undefined { + let found + + for (const item of arr) { + if (cond(item)) { + found = item + break + } + } + + return found +} + +export function keyByUtil(arr: K[], keyByFn: (item: K) => string): { [key: string]: K } { + const map: { [key: string]: K } = {} + arr.forEach(item => { + const key = keyByFn(item) + map[key] = item + }) + return map +} + +// TODO[OASIS-6649]: Don't use any type +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function sprintf(format: string, ...args: any[]): string { + let i = 0 + return format.replace(/%s/g, function() { + const arg = args[i++] + const type = typeof arg + if (type === 'function') { + return arg() + } else if (type === 'string') { + return arg + } else { + return String(arg) + } + }) +} +/* +* Notification types for use with NotificationCenter +* Format is EVENT: +* +* SDK consumers can use these to register callbacks with the notification center. +* +* @deprecated since 3.1.0 +* ACTIVATE: An impression event will be sent to Optimizely +* Callbacks will receive an object argument with the following properties: +* - experiment {Object} +* - userId {string} +* - attributes {Object|undefined} +* - variation {Object} +* - logEvent {Object} +* +* DECISION: A decision is made in the system. i.e. user activation, +* feature access or feature-variable value retrieval +* Callbacks will receive an object argument with the following properties: +* - type {string} +* - userId {string} +* - attributes {Object|undefined} +* - decisionInfo {Object|undefined} +* +* LOG_EVENT: A batch of events, which could contain impressions and/or conversions, +* will be sent to Optimizely +* Callbacks will receive an object argument with the following properties: +* - url {string} +* - httpVerb {string} +* - params {Object} +* +* OPTIMIZELY_CONFIG_UPDATE: This Optimizely instance has been updated with a new +* config +* +* TRACK: A conversion event will be sent to Optimizely +* Callbacks will receive the an object argument with the following properties: +* - eventKey {string} +* - userId {string} +* - attributes {Object|undefined} +* - eventTags {Object|undefined} +* - logEvent {Object} +* +*/ +export enum NOTIFICATION_TYPES { + ACTIVATE = 'ACTIVATE:experiment, user_id,attributes, variation, event', + DECISION = 'DECISION:type, userId, attributes, decisionInfo', + LOG_EVENT = 'LOG_EVENT:logEvent', + OPTIMIZELY_CONFIG_UPDATE = 'OPTIMIZELY_CONFIG_UPDATE', + TRACK = 'TRACK:event_key, user_id, attributes, event_tags, event', +} + +export interface NotificationCenter { + // TODO[OASIS-6649]: Don't use any type + // eslint-disable-next-line @typescript-eslint/no-explicit-any + sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void +} export default { assign, @@ -214,4 +213,13 @@ export default { keyBy, uuid, isNumber, + getTimestamp, + isValidEnum, + groupBy, + objectValues, + objectEntries, + find, + keyByUtil, + sprintf, + NOTIFICATION_TYPES } diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js index ad5afc0ea..5c31841dd 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2020, Optimizely + * Copyright 2016-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts index ac6833687..0e93cee60 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017, 2020 Optimizely + * Copyright 2016-2017, 2020-2022 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js index e095f4c6c..8d93bc16b 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2017, 2020, Optimizely, Inc. and contributors * + * Copyright 2017, 2020-2022, 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. * diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts index 5a3a4b38d..c9f5d557f 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2017, 2020, Optimizely, Inc. and contributors * + * Copyright 2017, 2020-2022, 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. * diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index de2f94042..1df635d4b 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -1,5 +1,5 @@ /** - * Copyright 2020-2021 Optimizely + * Copyright 2020-2022 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 39b5d696d0fb5d439d8060456bca5abe4d9f0b39 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 12 Apr 2022 21:01:30 +0500 Subject: [PATCH 16/48] fix --- packages/optimizely-sdk/lib/shared_types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/lib/shared_types.ts b/packages/optimizely-sdk/lib/shared_types.ts index bfc764d63..1c60b7301 100644 --- a/packages/optimizely-sdk/lib/shared_types.ts +++ b/packages/optimizely-sdk/lib/shared_types.ts @@ -278,7 +278,7 @@ export interface OptimizelyVariable { } export interface Client { - notificationCenter: NotificationCenter; + notificationCenter: NotificationCenterImpl; createUserContext( userId: string, attributes?: UserAttributes From d00a828e5c18ca2c859269b3d2a94fa3631bf49f Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 12 Apr 2022 21:56:23 +0500 Subject: [PATCH 17/48] correct notification type imported --- packages/optimizely-sdk/lib/optimizely/index.ts | 3 ++- packages/optimizely-sdk/lib/shared_types.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 52fdf7026..23fbeec6c 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -14,7 +14,8 @@ * limitations under the License. * ***************************************************************************/ import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; -import { sprintf, objectValues, NotificationCenter } from '../utils/fns'; +import { sprintf, objectValues } from '../utils/fns'; +import { NotificationCenter } from '../core/notification_center'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import { diff --git a/packages/optimizely-sdk/lib/shared_types.ts b/packages/optimizely-sdk/lib/shared_types.ts index 1c60b7301..bfc764d63 100644 --- a/packages/optimizely-sdk/lib/shared_types.ts +++ b/packages/optimizely-sdk/lib/shared_types.ts @@ -278,7 +278,7 @@ export interface OptimizelyVariable { } export interface Client { - notificationCenter: NotificationCenterImpl; + notificationCenter: NotificationCenter; createUserContext( userId: string, attributes?: UserAttributes From c958cdac5c103d70ac8e002b011b90d70e2cd98c Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 12 Apr 2022 22:47:46 +0500 Subject: [PATCH 18/48] comment addressed --- packages/optimizely-sdk/rollup.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index 1df635d4b..45aa3f75e 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -116,7 +116,7 @@ const jsonSchemaBundle = { commonjs(), typescript(typescriptPluginOptions), ], - external: ['json-schema', './lib/utils/fns', 'uuid'], + external: ['json-schema', 'uuid'], input: 'lib/utils/json_schema_validator/index.ts', output: { exports: 'named', From c36dee97f814e410c2881181f6403575167215e8 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Wed, 13 Apr 2022 15:43:07 +0500 Subject: [PATCH 19/48] headers updated and notification center moved --- .../lib/core/notification_center/index.ts | 23 +++++++++++++++---- .../lib/optimizely/index.tests.js | 3 ++- .../optimizely_user_context/index.tests.js | 3 ++- .../forwarding_event_processor.ts | 4 ++-- packages/optimizely-sdk/lib/shared_types.ts | 2 +- .../optimizely-sdk/lib/utils/enums/index.ts | 2 +- .../lib/utils/event_tag_utils/index.tests.js | 2 +- .../utils/event_tags_validator/index.tests.js | 2 +- .../lib/utils/event_tags_validator/index.ts | 2 +- .../optimizely-sdk/lib/utils/fns/index.ts | 16 +------------ .../lib/utils/json_schema_validator/index.ts | 2 +- .../index.tests.js | 2 +- .../user_profile_service_validator/index.ts | 2 +- 13 files changed, 33 insertions(+), 32 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index f2a6086a4..8ffd29f5a 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2020-2022, Optimizely + * Copyright 2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,17 +14,24 @@ * limitations under the License. */ import { LogHandler, ErrorHandler } from '@optimizely/js-sdk-logging'; -import { objectValues, NOTIFICATION_TYPES as notificationTypesEnum } from '../../utils/fns'; +import { objectValues } from '../../utils/fns'; import { NotificationListener, ListenerPayload } from '../../shared_types'; import { LOG_LEVEL, LOG_MESSAGES, - NOTIFICATION_TYPES, } from '../../utils/enums'; const MODULE_NAME = 'NOTIFICATION_CENTER'; +export enum NOTIFICATION_TYPES { + ACTIVATE = 'ACTIVATE:experiment, user_id,attributes, variation, event', + DECISION = 'DECISION:type, userId, attributes, decisionInfo', + LOG_EVENT = 'LOG_EVENT:logEvent', + OPTIMIZELY_CONFIG_UPDATE = 'OPTIMIZELY_CONFIG_UPDATE', + TRACK = 'TRACK:event_key, user_id, attributes, event_tags, event', +} + interface NotificationCenterOptions { logger: LogHandler; errorHandler: ErrorHandler; @@ -185,9 +192,9 @@ export class NotificationCenter { /** * Remove all previously added notification listeners for the argument type - * @param {notificationTypesEnum} notificationType One of NOTIFICATION_TYPES + * @param {NOTIFICATION_TYPES} notificationType One of NOTIFICATION_TYPES */ - clearNotificationListeners(notificationType: notificationTypesEnum): void { + clearNotificationListeners(notificationType: NOTIFICATION_TYPES): void { try { this.notificationListeners[notificationType] = []; } catch (e) { @@ -238,3 +245,9 @@ export class NotificationCenter { export function createNotificationCenter(options: NotificationCenterOptions): NotificationCenter { return new NotificationCenter(options); } + +export interface NotificationCenter { + // TODO[OASIS-6649]: Don't use any type + // eslint-disable-next-line @typescript-eslint/no-explicit-any + sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void +} diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index 1b776958b..996663695 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -15,7 +15,8 @@ ***************************************************************************/ import { assert, expect } from 'chai'; import sinon from 'sinon'; -import { sprintf, NOTIFICATION_TYPES } from '../utils/fns'; +import { sprintf } from '../utils/fns'; +import { NOTIFICATION_TYPES } from '../core/notification_center'; import eventProcessor from '../plugins/event_processor'; import * as logging from '@optimizely/js-sdk-logging'; diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js index 837a577f0..eb113fd96 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js @@ -17,7 +17,8 @@ import { assert } from 'chai'; import sinon from 'sinon'; import * as logging from '@optimizely/js-sdk-logging'; -import { sprintf, NOTIFICATION_TYPES } from '../utils/fns'; +import { sprintf } from '../utils/fns'; +import { NOTIFICATION_TYPES } from '../core/notification_center'; import OptimizelyUserContext from './'; import { createLogger } from '../plugins/logger'; diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 609f2729d..2875d9200 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -1,5 +1,5 @@ /** - * Copyright 2021-2022, Optimizely + * Copyright 2021, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ import { EventProcessor, ProcessableEvent, } from '@optimizely/js-sdk-event-processor'; -import { NotificationCenter } from '../../utils/fns'; +import { NotificationCenter } from '../../core/notification_center'; import { EventDispatcher } from '../../shared_types'; import { NOTIFICATION_TYPES } from '../../utils/enums'; diff --git a/packages/optimizely-sdk/lib/shared_types.ts b/packages/optimizely-sdk/lib/shared_types.ts index bfc764d63..89023509d 100644 --- a/packages/optimizely-sdk/lib/shared_types.ts +++ b/packages/optimizely-sdk/lib/shared_types.ts @@ -17,7 +17,7 @@ import { ErrorHandler, LogHandler, LogLevel, LoggerFacade } from '@optimizely/js import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import {NotificationCenter as NotificationCenterImpl} from './core/notification_center' -import { NOTIFICATION_TYPES } from './utils/fns'; +import { NOTIFICATION_TYPES } from './core/notification_center'; export interface BucketerParams { experimentId: string; diff --git a/packages/optimizely-sdk/lib/utils/enums/index.ts b/packages/optimizely-sdk/lib/utils/enums/index.ts index 051e62e35..c327e5369 100644 --- a/packages/optimizely-sdk/lib/utils/enums/index.ts +++ b/packages/optimizely-sdk/lib/utils/enums/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ -import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../utils/fns'; +import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../core/notification_center'; /** * Contains global enums used throughout the library diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js index 552bfe120..5f7fc2bcc 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2020-2022, Optimizely + * Copyright 2017, 2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js index d4e279abe..45dc75123 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2020-2022 Optimizely + * Copyright 2017, 2020, 2022 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts index cf4883324..f2294dda0 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2020-2022 Optimizely + * Copyright 2017, 2020, 2022 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 95c124b3b..748eee4db 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -192,19 +192,6 @@ export function sprintf(format: string, ...args: any[]): string { * - logEvent {Object} * */ -export enum NOTIFICATION_TYPES { - ACTIVATE = 'ACTIVATE:experiment, user_id,attributes, variation, event', - DECISION = 'DECISION:type, userId, attributes, decisionInfo', - LOG_EVENT = 'LOG_EVENT:logEvent', - OPTIMIZELY_CONFIG_UPDATE = 'OPTIMIZELY_CONFIG_UPDATE', - TRACK = 'TRACK:event_key, user_id, attributes, event_tags, event', -} - -export interface NotificationCenter { - // TODO[OASIS-6649]: Don't use any type - // eslint-disable-next-line @typescript-eslint/no-explicit-any - sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void -} export default { assign, @@ -220,6 +207,5 @@ export default { objectEntries, find, keyByUtil, - sprintf, - NOTIFICATION_TYPES + sprintf } diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts index 0e93cee60..95e4c504f 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017, 2020-2022 Optimizely + * Copyright 2016-2017, 2020, 2022 Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js index 8d93bc16b..1237a0894 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.tests.js @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2017, 2020-2022, Optimizely, Inc. and contributors * + * Copyright 2017, 2020, 2022, 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. * diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts index c9f5d557f..57df0c891 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2017, 2020-2022, Optimizely, Inc. and contributors * + * Copyright 2017, 2020, 2022, 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. * From 19d1ca0ad00ec5fd27741fd2933594e2233f0235 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 14 Apr 2022 22:16:53 +0500 Subject: [PATCH 20/48] comments addressed --- .../lib/core/notification_center/index.ts | 9 +-------- .../optimizely-sdk/lib/optimizely/index.tests.js | 2 +- .../lib/optimizely_user_context/index.tests.js | 2 +- packages/optimizely-sdk/lib/shared_types.ts | 2 +- packages/optimizely-sdk/lib/utils/enums/index.ts | 12 ++++++++---- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index 8ffd29f5a..d1774b8b0 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -20,18 +20,11 @@ import { NotificationListener, ListenerPayload } from '../../shared_types'; import { LOG_LEVEL, LOG_MESSAGES, + NOTIFICATION_TYPES } from '../../utils/enums'; const MODULE_NAME = 'NOTIFICATION_CENTER'; -export enum NOTIFICATION_TYPES { - ACTIVATE = 'ACTIVATE:experiment, user_id,attributes, variation, event', - DECISION = 'DECISION:type, userId, attributes, decisionInfo', - LOG_EVENT = 'LOG_EVENT:logEvent', - OPTIMIZELY_CONFIG_UPDATE = 'OPTIMIZELY_CONFIG_UPDATE', - TRACK = 'TRACK:event_key, user_id, attributes, event_tags, event', -} - interface NotificationCenterOptions { logger: LogHandler; errorHandler: ErrorHandler; diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index 996663695..2c0a7be28 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -16,7 +16,7 @@ import { assert, expect } from 'chai'; import sinon from 'sinon'; import { sprintf } from '../utils/fns'; -import { NOTIFICATION_TYPES } from '../core/notification_center'; +import { NOTIFICATION_TYPES } from '../utils/enums'; import eventProcessor from '../plugins/event_processor'; import * as logging from '@optimizely/js-sdk-logging'; diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js index eb113fd96..6b9e1ccf0 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js @@ -18,7 +18,7 @@ import sinon from 'sinon'; import * as logging from '@optimizely/js-sdk-logging'; import { sprintf } from '../utils/fns'; -import { NOTIFICATION_TYPES } from '../core/notification_center'; +import { NOTIFICATION_TYPES } from '../utils/enums'; import OptimizelyUserContext from './'; import { createLogger } from '../plugins/logger'; diff --git a/packages/optimizely-sdk/lib/shared_types.ts b/packages/optimizely-sdk/lib/shared_types.ts index 89023509d..b6b1527ca 100644 --- a/packages/optimizely-sdk/lib/shared_types.ts +++ b/packages/optimizely-sdk/lib/shared_types.ts @@ -17,7 +17,7 @@ import { ErrorHandler, LogHandler, LogLevel, LoggerFacade } from '@optimizely/js import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import {NotificationCenter as NotificationCenterImpl} from './core/notification_center' -import { NOTIFICATION_TYPES } from './core/notification_center'; +import { NOTIFICATION_TYPES } from './utils/enums'; export interface BucketerParams { experimentId: string; diff --git a/packages/optimizely-sdk/lib/utils/enums/index.ts b/packages/optimizely-sdk/lib/utils/enums/index.ts index c327e5369..1f011c02b 100644 --- a/packages/optimizely-sdk/lib/utils/enums/index.ts +++ b/packages/optimizely-sdk/lib/utils/enums/index.ts @@ -14,8 +14,6 @@ * limitations under the License. * ***************************************************************************/ -import { NOTIFICATION_TYPES as notificationTypesEnum } from '../../core/notification_center'; - /** * Contains global enums used throughout the library */ @@ -184,8 +182,6 @@ export const REACT_NATIVE_CLIENT_ENGINE = 'react-native-sdk'; export const REACT_NATIVE_JS_CLIENT_ENGINE = 'react-native-js-sdk'; export const NODE_CLIENT_VERSION = '4.9.1'; -export const NOTIFICATION_TYPES = notificationTypesEnum; - export const DECISION_NOTIFICATION_TYPES = { AB_TEST: 'ab-test', FEATURE: 'feature', @@ -245,3 +241,11 @@ export const DECISION_MESSAGES = { FLAG_KEY_INVALID: 'No flag was found for key "%s".', VARIABLE_VALUE_INVALID: 'Variable value for key "%s" is invalid or wrong type.', } + +export enum NOTIFICATION_TYPES { + ACTIVATE = 'ACTIVATE:experiment, user_id,attributes, variation, event', + DECISION = 'DECISION:type, userId, attributes, decisionInfo', + LOG_EVENT = 'LOG_EVENT:logEvent', + OPTIMIZELY_CONFIG_UPDATE = 'OPTIMIZELY_CONFIG_UPDATE', + TRACK = 'TRACK:event_key, user_id, attributes, event_tags, event', +} From 6622d21467e205b603a15d126832c01dbf4661be Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 18 Apr 2022 17:59:14 +0500 Subject: [PATCH 21/48] removed Notification center interface --- .../optimizely-sdk/lib/core/notification_center/index.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index d1774b8b0..a7862eb32 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -238,9 +238,3 @@ export class NotificationCenter { export function createNotificationCenter(options: NotificationCenterOptions): NotificationCenter { return new NotificationCenter(options); } - -export interface NotificationCenter { - // TODO[OASIS-6649]: Don't use any type - // eslint-disable-next-line @typescript-eslint/no-explicit-any - sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void -} From 71f7e1443548880d3e2ca3cb1439954a3f1e4d8f Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 18 Apr 2022 19:42:56 +0500 Subject: [PATCH 22/48] notification center renamed --- .../optimizely-sdk/lib/core/notification_center/index.ts | 6 ++++++ packages/optimizely-sdk/lib/optimizely/index.ts | 2 +- .../plugins/event_processor/forwarding_event_processor.ts | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index a7862eb32..083e24355 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -238,3 +238,9 @@ export class NotificationCenter { export function createNotificationCenter(options: NotificationCenterOptions): NotificationCenter { return new NotificationCenter(options); } + +export interface NotificationCenterInterface { + // TODO[OASIS-6649]: Don't use any type + // eslint-disable-next-line @typescript-eslint/no-explicit-any + sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void +} diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 23fbeec6c..c8e22419a 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -15,7 +15,7 @@ ***************************************************************************/ import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; import { sprintf, objectValues } from '../utils/fns'; -import { NotificationCenter } from '../core/notification_center'; +import { NotificationCenterInterface as NotificationCenter } from '../core/notification_center'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import { diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 2875d9200..1111e62d3 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -18,7 +18,7 @@ import { EventProcessor, ProcessableEvent, } from '@optimizely/js-sdk-event-processor'; -import { NotificationCenter } from '../../core/notification_center'; +import { NotificationCenterInterface as NotificationCenter } from '../../core/notification_center'; import { EventDispatcher } from '../../shared_types'; import { NOTIFICATION_TYPES } from '../../utils/enums'; From 4b9c12430d12fac4fc5451d18e750e78113af285 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 18 Apr 2022 19:56:50 +0500 Subject: [PATCH 23/48] notification type corrected --- packages/optimizely-sdk/lib/optimizely/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index c8e22419a..23fbeec6c 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -15,7 +15,7 @@ ***************************************************************************/ import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; import { sprintf, objectValues } from '../utils/fns'; -import { NotificationCenterInterface as NotificationCenter } from '../core/notification_center'; +import { NotificationCenter } from '../core/notification_center'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; import { From 9e3d8d493c76b0aa54e9f7a020019961f4b7b92c Mon Sep 17 00:00:00 2001 From: zashraf1985 Date: Mon, 18 Apr 2022 17:55:46 -0700 Subject: [PATCH 24/48] renamed a conflicting interface --- .../optimizely-sdk/lib/core/notification_center/index.ts | 2 +- .../plugins/event_processor/forwarding_event_processor.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index 083e24355..efd473d09 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -239,7 +239,7 @@ export function createNotificationCenter(options: NotificationCenterOptions): No return new NotificationCenter(options); } -export interface NotificationCenterInterface { +export interface NotificationSender { // TODO[OASIS-6649]: Don't use any type // eslint-disable-next-line @typescript-eslint/no-explicit-any sendNotifications(notificationType: NOTIFICATION_TYPES, notificationData?: any): void diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 1111e62d3..cfb9d9880 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -18,7 +18,7 @@ import { EventProcessor, ProcessableEvent, } from '@optimizely/js-sdk-event-processor'; -import { NotificationCenterInterface as NotificationCenter } from '../../core/notification_center'; +import { NotificationSender } from '../../core/notification_center'; import { EventDispatcher } from '../../shared_types'; import { NOTIFICATION_TYPES } from '../../utils/enums'; @@ -26,9 +26,9 @@ import { formatEvents } from '../../core/event_builder/build_event_v1'; class ForwardingEventProcessor implements EventProcessor { private dispatcher: EventDispatcher; - private notificationCenter?: NotificationCenter; + private notificationCenter?: NotificationSender; - constructor(dispatcher: EventDispatcher, notificationCenter?: NotificationCenter) { + constructor(dispatcher: EventDispatcher, notificationCenter?: NotificationSender) { this.dispatcher = dispatcher; this.notificationCenter = notificationCenter; } @@ -51,6 +51,6 @@ class ForwardingEventProcessor implements EventProcessor { } } -export function createForwardingEventProcessor(dispatcher: EventDispatcher, notificationCenter?: NotificationCenter): EventProcessor { +export function createForwardingEventProcessor(dispatcher: EventDispatcher, notificationCenter?: NotificationSender): EventProcessor { return new ForwardingEventProcessor(dispatcher, notificationCenter); } From bef10a0f67122f5e6a1b96301c07fc48ee146283 Mon Sep 17 00:00:00 2001 From: zashraf1985 Date: Mon, 18 Apr 2022 18:02:47 -0700 Subject: [PATCH 25/48] removed unused line --- packages/optimizely-sdk/rollup.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index 45aa3f75e..92c0aa20b 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -33,7 +33,6 @@ const typescriptPluginOptions = { include: [ './lib/**/*.ts', './lib/**/*.js', - './modules/**/*.ts' ], }; From dcdd371e1faf0cfc7a553e424befa298d9b511c7 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 21 Apr 2022 21:58:08 +0500 Subject: [PATCH 26/48] comments addressed --- .../optimizely-sdk/lib/core/audience_evaluator/index.tests.js | 2 +- .../core/custom_attribute_condition_evaluator/index.tests.js | 2 +- packages/optimizely-sdk/lib/core/notification_center/index.ts | 2 +- .../lib/core/project_config/project_config_manager.tests.js | 2 +- .../lib/plugins/event_processor/forwarding_event_processor.ts | 2 +- .../lib/utils/attributes_validator/index.tests.js | 2 +- packages/optimizely-sdk/lib/utils/attributes_validator/index.ts | 2 +- .../optimizely-sdk/lib/utils/config_validator/index.tests.js | 2 +- packages/optimizely-sdk/lib/utils/config_validator/index.ts | 2 +- packages/optimizely-sdk/lib/utils/fns/index.ts | 2 +- .../lib/utils/json_schema_validator/index.tests.js | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js index f8869f330..126e23ce3 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2022, Optimizely + * Copyright 2016, 2018-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index af85b5da3..55a8e0dbe 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2018-2021, Optimizely, Inc. and contributors * + * Copyright 2018-2020, 2022, 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. * diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index efd473d09..d54e30f84 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -20,7 +20,7 @@ import { NotificationListener, ListenerPayload } from '../../shared_types'; import { LOG_LEVEL, LOG_MESSAGES, - NOTIFICATION_TYPES + NOTIFICATION_TYPES, } from '../../utils/enums'; const MODULE_NAME = 'NOTIFICATION_CENTER'; diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index 9212fd17c..387c9aee8 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2019-2022 Optimizely + * Copyright 2019-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index cfb9d9880..1896199de 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -1,5 +1,5 @@ /** - * Copyright 2021, 2022, Optimizely + * Copyright 2021-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js index d29686105..d98e8fdb0 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2022, Optimizely + * Copyright 2016, 2018-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts index 24e4be28f..5f33e85d4 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2022, Optimizely + * Copyright 2016, 2018-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js index 690799503..9ff0a32c5 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2022, Optimizely + * Copyright 2016, 2018-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.ts b/packages/optimizely-sdk/lib/utils/config_validator/index.ts index d18c82184..a273121cc 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2022, Optimizely + * Copyright 2016, 2018-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 748eee4db..499273610 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2019-2022, Optimizely + * Copyright 2017, 2019-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js index 5c31841dd..00d9e712b 100644 --- a/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js +++ b/packages/optimizely-sdk/lib/utils/json_schema_validator/index.tests.js @@ -1,5 +1,5 @@ /** - * Copyright 2016-2022, Optimizely + * Copyright 2016-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 4fc4b516a569abba8b923dd9f821ba847981454f Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Fri, 22 Apr 2022 00:24:57 +0500 Subject: [PATCH 27/48] fns exported in same import --- .../lib/core/project_config/index.ts | 51 ++++++++++--------- .../optimizely-sdk/lib/utils/fns/index.ts | 4 +- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index 1e807aefc..9f04289be 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -17,10 +17,11 @@ import { find, objectEntries, objectValues, - sprintf + sprintf, + assign, + keyBy } from '../../utils/fns'; -import fns from '../../utils/fns'; import { ERROR_MESSAGES, LOG_LEVEL, @@ -105,27 +106,27 @@ const MODULE_NAME = 'PROJECT_CONFIG'; // eslint-disable-next-line @typescript-eslint/no-explicit-any function createMutationSafeDatafileCopy(datafile: any): ProjectConfig { - const datafileCopy = fns.assign({}, datafile); + const datafileCopy = assign({}, datafile); datafileCopy.audiences = (datafile.audiences || []).map((audience: Audience) => { - return fns.assign({}, audience); + return assign({}, audience); }); datafileCopy.experiments = (datafile.experiments || []).map((experiment: Experiment) => { - return fns.assign({}, experiment); + return assign({}, experiment); }); datafileCopy.featureFlags = (datafile.featureFlags || []).map((featureFlag: FeatureFlag) => { - return fns.assign({}, featureFlag); + return assign({}, featureFlag); }); datafileCopy.groups = (datafile.groups || []).map((group: Group) => { - const groupCopy = fns.assign({}, group); + const groupCopy = assign({}, group); groupCopy.experiments = (group.experiments || []).map((experiment) => { - return fns.assign({}, experiment); + return assign({}, experiment); }); return groupCopy; }); datafileCopy.rollouts = (datafile.rollouts || []).map((rollout: Rollout) => { - const rolloutCopy = fns.assign({}, rollout); + const rolloutCopy = assign({}, rollout); rolloutCopy.experiments = (rollout.experiments || []).map((experiment) => { - return fns.assign({}, experiment); + return assign({}, experiment); }); return rolloutCopy; }); @@ -157,46 +158,46 @@ export const createProjectConfig = function( (projectConfig.audiences || []).forEach((audience) => { audience.conditions = JSON.parse(audience.conditions as string); }); - projectConfig.audiencesById = fns.keyBy(projectConfig.audiences, 'id'); - fns.assign(projectConfig.audiencesById, fns.keyBy(projectConfig.typedAudiences, 'id')); + projectConfig.audiencesById = keyBy(projectConfig.audiences, 'id'); + assign(projectConfig.audiencesById, keyBy(projectConfig.typedAudiences, 'id')); - projectConfig.attributeKeyMap = fns.keyBy(projectConfig.attributes, 'key'); - projectConfig.eventKeyMap = fns.keyBy(projectConfig.events, 'key'); - projectConfig.groupIdMap = fns.keyBy(projectConfig.groups, 'id'); + projectConfig.attributeKeyMap = keyBy(projectConfig.attributes, 'key'); + projectConfig.eventKeyMap = keyBy(projectConfig.events, 'key'); + projectConfig.groupIdMap = keyBy(projectConfig.groups, 'id'); let experiments; Object.keys(projectConfig.groupIdMap || {}).forEach((Id) => { experiments = projectConfig.groupIdMap[Id].experiments; (experiments || []).forEach((experiment) => { - projectConfig.experiments.push(fns.assign(experiment, { groupId: Id })); + projectConfig.experiments.push(assign(experiment, { groupId: Id })); }); }); - projectConfig.rolloutIdMap = fns.keyBy(projectConfig.rollouts || [], 'id'); + projectConfig.rolloutIdMap = keyBy(projectConfig.rollouts || [], 'id'); objectValues(projectConfig.rolloutIdMap || {}).forEach( (rollout) => { (rollout.experiments || []).forEach((experiment) => { projectConfig.experiments.push(experiment); // Creates { : } map inside of the experiment - experiment.variationKeyMap = fns.keyBy(experiment.variations, 'key'); + experiment.variationKeyMap = keyBy(experiment.variations, 'key'); }); } ); - projectConfig.experimentKeyMap = fns.keyBy(projectConfig.experiments, 'key'); - projectConfig.experimentIdMap = fns.keyBy(projectConfig.experiments, 'id'); + projectConfig.experimentKeyMap = keyBy(projectConfig.experiments, 'key'); + projectConfig.experimentIdMap = keyBy(projectConfig.experiments, 'id'); projectConfig.variationIdMap = {}; projectConfig.variationVariableUsageMap = {}; (projectConfig.experiments || []).forEach((experiment) => { // Creates { : } map inside of the experiment - experiment.variationKeyMap = fns.keyBy(experiment.variations, 'key'); + experiment.variationKeyMap = keyBy(experiment.variations, 'key'); // Creates { : { key: , id: } } mapping for quick lookup - fns.assign(projectConfig.variationIdMap, fns.keyBy(experiment.variations, 'id')); + assign(projectConfig.variationIdMap, keyBy(experiment.variations, 'id')); objectValues(experiment.variationKeyMap || {}).forEach((variation) => { if (variation.variables) { - projectConfig.variationVariableUsageMap[variation.id] = fns.keyBy(variation.variables, 'id'); + projectConfig.variationVariableUsageMap[variation.id] = keyBy(variation.variables, 'id'); } }); }); @@ -205,7 +206,7 @@ export const createProjectConfig = function( // for checking that experiment is a feature experiment or not. projectConfig.experimentFeatureMap = {}; - projectConfig.featureKeyMap = fns.keyBy(projectConfig.featureFlags || [], 'key'); + projectConfig.featureKeyMap = keyBy(projectConfig.featureFlags || [], 'key'); objectValues(projectConfig.featureKeyMap || {}).forEach( (feature) => { // Json type is represented in datafile as a subtype of string for the sake of backwards compatibility. @@ -217,7 +218,7 @@ export const createProjectConfig = function( } }); - feature.variableKeyMap = fns.keyBy(feature.variables, 'key'); + feature.variableKeyMap = keyBy(feature.variables, 'key'); (feature.experimentIds || []).forEach((experimentId) => { // Add this experiment in experiment-feature map. if (projectConfig.experimentFeatureMap[experimentId]) { diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 499273610..6cdec3a76 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -18,7 +18,7 @@ import v4 from 'uuid'; const MAX_SAFE_INTEGER_LIMIT = Math.pow(2, 53); // eslint-disable-next-line -function assign(target: any, ...sources: any[]): any { +export function assign(target: any, ...sources: any[]): any { if (!target) { return {}; } @@ -49,7 +49,7 @@ function isSafeInteger(number: unknown): boolean { return typeof number == 'number' && Math.abs(number) <= MAX_SAFE_INTEGER_LIMIT; } -function keyBy(arr: K[], key: string): { [key: string]: K } { +export function keyBy(arr: K[], key: string): { [key: string]: K } { if (!arr) return {}; return keyByUtil(arr, function (item) { // eslint-disable-next-line @typescript-eslint/no-explicit-any From 201800e12bb68b1f4fbfe2c3656558adc8828704 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 14 Mar 2022 20:59:19 +0500 Subject: [PATCH 28/48] intergrate logging --- .../core/audience_evaluator/index.tests.js | 2 +- .../lib/core/audience_evaluator/index.ts | 2 +- .../optimizely-sdk/lib/core/bucketer/index.ts | 2 +- .../index.tests.js | 2 +- .../index.ts | 2 +- .../lib/core/decision_service/index.ts | 2 +- .../lib/core/event_builder/event_helpers.ts | 2 +- .../lib/core/event_builder/index.ts | 2 +- .../lib/core/notification_center/index.ts | 2 +- .../lib/core/project_config/index.tests.js | 2 +- .../lib/core/project_config/index.ts | 2 +- .../project_config_manager.tests.js | 2 +- .../project_config/project_config_manager.ts | 2 +- .../optimizely-sdk/lib/index.browser.tests.js | 2 +- packages/optimizely-sdk/lib/index.browser.ts | 2 +- packages/optimizely-sdk/lib/index.lite.ts | 2 +- packages/optimizely-sdk/lib/index.node.ts | 2 +- .../lib/index.react_native.tests.js | 2 +- .../optimizely-sdk/lib/index.react_native.ts | 2 +- .../lib/optimizely/index.tests.js | 2 +- .../optimizely-sdk/lib/optimizely/index.ts | 2 +- .../optimizely_user_context/index.tests.js | 2 +- .../http_polling_datafile_manager.ts | 2 +- .../lib/plugins/logger/index.react_native.ts | 2 +- .../lib/plugins/logger/index.ts | 2 +- .../lib/utils/event_tag_utils/index.ts | 2 +- .../lib/utils/semantic_version/index.ts | 2 +- .../modules/logging/__tests__/logger.spec.ts | 386 ++++++++++++++++++ .../modules/logging/errorHandler.ts | 67 +++ .../optimizely-sdk/modules/logging/index.ts | 18 + .../optimizely-sdk/modules/logging/logger.ts | 328 +++++++++++++++ .../optimizely-sdk/modules/logging/models.ts | 42 ++ packages/optimizely-sdk/rollup.config.js | 2 +- 33 files changed, 869 insertions(+), 28 deletions(-) create mode 100644 packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts create mode 100644 packages/optimizely-sdk/modules/logging/errorHandler.ts create mode 100644 packages/optimizely-sdk/modules/logging/index.ts create mode 100644 packages/optimizely-sdk/modules/logging/logger.ts create mode 100644 packages/optimizely-sdk/modules/logging/models.ts diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js index 126e23ce3..fe58a9907 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js @@ -15,8 +15,8 @@ */ import sinon from 'sinon'; import { assert } from 'chai'; -import { getLogger } from '@optimizely/js-sdk-logging'; import { sprintf } from '../../utils/fns'; +import { getLogger } from '../../../modules/logging'; import { createAudienceEvaluator } from './index'; import * as conditionTreeEvaluator from '../condition_tree_evaluator'; diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts index be6e8bfcd..82f1f9bc8 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import fns from '../../utils/fns'; import { diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index 82d7f5bca..f1d244b8a 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -19,7 +19,7 @@ */ import { sprintf } from '../../utils/fns'; import murmurhash from 'murmurhash'; -import { LogHandler } from '@optimizely/js-sdk-logging'; +import { LogHandler } from '../../../modules/logging'; import { DecisionResponse, BucketerParams, diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index 55a8e0dbe..a28e735ba 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -21,7 +21,7 @@ import { LOG_LEVEL, LOG_MESSAGES, } from '../../utils/enums'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../../../modules/utils'; import * as customAttributeEvaluator from './'; var browserConditionSafari = { diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts index f236533de..70298064c 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import { UserAttributes, Condition } from '../../shared_types'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.ts b/packages/optimizely-sdk/lib/core/decision_service/index.ts index 546aa5c23..09fbed7b6 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.ts +++ b/packages/optimizely-sdk/lib/core/decision_service/index.ts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { LogHandler } from '@optimizely/js-sdk-logging'; import { sprintf } from '../../utils/fns'; +import { LogHandler } from '../../../modules/logging'; import fns from '../../utils/fns'; import { bucket } from '../bucketer'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts index 9d2ae4609..d8e9ead57 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import fns from '../../utils/fns'; import * as eventTagUtils from '../../utils/event_tag_utils'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.ts b/packages/optimizely-sdk/lib/core/event_builder/index.ts index 4c85c5fda..34ecfaa73 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoggerFacade } from '@optimizely/js-sdk-logging'; +import { LoggerFacade } from '../../../modules/logging'; import { EventV1 as CommonEventParams } from '@optimizely/js-sdk-event-processor'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index d54e30f84..c5847c449 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LogHandler, ErrorHandler } from '@optimizely/js-sdk-logging'; import { objectValues } from '../../utils/fns'; +import { LogHandler, ErrorHandler } from '../../../modules/logging'; import { NotificationListener, ListenerPayload } from '../../shared_types'; import { diff --git a/packages/optimizely-sdk/lib/core/project_config/index.tests.js b/packages/optimizely-sdk/lib/core/project_config/index.tests.js index 401eefb4d..071e96e41 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.tests.js @@ -16,8 +16,8 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { forEach, cloneDeep } from 'lodash'; -import { getLogger } from '@optimizely/js-sdk-logging'; import { sprintf } from '../../utils/fns'; +import { getLogger } from '../../../modules/logging'; import fns from '../../utils/fns'; import projectConfig from './'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index 9f04289be..13d72c103 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -30,7 +30,7 @@ import { } from '../../utils/enums'; import configValidator from '../../utils/config_validator'; -import { LogHandler } from '@optimizely/js-sdk-logging'; +import { LogHandler } from '../../../modules/logging'; import { Audience, Experiment, diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index 387c9aee8..e4f86d3a4 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -17,8 +17,8 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { cloneDeep } from 'lodash'; -import * as logging from '@optimizely/js-sdk-logging'; import { sprintf } from '../../utils/fns'; +import * as logging from '../../../modules/logging'; import * as datafileManager from '@optimizely/js-sdk-datafile-manager'; import * as projectConfig from './index'; diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts index 961a79b89..de43bbf4a 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '@optimizely/js-sdk-logging'; import { sprintf } from '../../utils/fns'; +import { getLogger } from '../../../modules/logging'; import { ERROR_MESSAGES } from '../../utils/enums'; import { createOptimizelyConfig } from '../optimizely_config'; diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index 728224b4c..5a2885190 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../modules/logging'; import { assert } from 'chai'; import sinon from 'sinon'; diff --git a/packages/optimizely-sdk/lib/index.browser.ts b/packages/optimizely-sdk/lib/index.browser.ts index 7411fc22a..a2b7101d7 100644 --- a/packages/optimizely-sdk/lib/index.browser.ts +++ b/packages/optimizely-sdk/lib/index.browser.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '@optimizely/js-sdk-logging'; +} from '../modules/logging'; import { LocalStoragePendingEventsDispatcher } from '@optimizely/js-sdk-event-processor'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; diff --git a/packages/optimizely-sdk/lib/index.lite.ts b/packages/optimizely-sdk/lib/index.lite.ts index 3e46b8878..0cd866cc2 100644 --- a/packages/optimizely-sdk/lib/index.lite.ts +++ b/packages/optimizely-sdk/lib/index.lite.ts @@ -20,7 +20,7 @@ setErrorHandler, getErrorHandler, LogLevel - } from '@optimizely/js-sdk-logging'; + } from '../modules/logging'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import noOpEventDispatcher from './plugins/event_dispatcher/no_op'; diff --git a/packages/optimizely-sdk/lib/index.node.ts b/packages/optimizely-sdk/lib/index.node.ts index 6c1a71f20..b8dd2d974 100644 --- a/packages/optimizely-sdk/lib/index.node.ts +++ b/packages/optimizely-sdk/lib/index.node.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '@optimizely/js-sdk-logging'; +} from '../modules/logging'; import Optimizely from './optimizely'; import * as enums from './utils/enums'; import * as loggerPlugin from './plugins/logger'; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 0d3e92613..16af30222 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../modules/logging'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; diff --git a/packages/optimizely-sdk/lib/index.react_native.ts b/packages/optimizely-sdk/lib/index.react_native.ts index 67f7f46be..8e6241804 100644 --- a/packages/optimizely-sdk/lib/index.react_native.ts +++ b/packages/optimizely-sdk/lib/index.react_native.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '@optimizely/js-sdk-logging'; +} from '../modules/logging'; import * as enums from './utils/enums'; import Optimizely from './optimizely'; import configValidator from './utils/config_validator'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index 2c0a7be28..5ad61e3f2 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -18,7 +18,7 @@ import sinon from 'sinon'; import { sprintf } from '../utils/fns'; import { NOTIFICATION_TYPES } from '../utils/enums'; import eventProcessor from '../plugins/event_processor'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../../modules/logging'; import Optimizely from './'; import OptimizelyUserContext from '../optimizely_user_context'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 23fbeec6c..f48e8ba70 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; +import { LoggerFacade, ErrorHandler } from '../../modules/logging'; import { sprintf, objectValues } from '../utils/fns'; import { NotificationCenter } from '../core/notification_center'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js index 6b9e1ccf0..14372bd11 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js @@ -16,7 +16,7 @@ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '@optimizely/js-sdk-logging'; +import * as logging from '../../modules/logging'; import { sprintf } from '../utils/fns'; import { NOTIFICATION_TYPES } from '../utils/enums'; diff --git a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts index 42f993145..5f8a21ed9 100644 --- a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts +++ b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoggerFacade } from '@optimizely/js-sdk-logging'; +import { LoggerFacade } from '../../../modules/logging'; import { HttpPollingDatafileManager } from '@optimizely/js-sdk-datafile-manager'; import { DatafileOptions, DatafileManagerConfig, DatafileManager } from '../../shared_types'; import { toDatafile, tryCreatingProjectConfig } from '../../core/project_config'; diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts index ce8340e4c..c41e2d93d 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LogLevel } from '@optimizely/js-sdk-logging'; import { sprintf } from '../../utils/fns'; +import { LogLevel } from '../../../modules/logging'; import { NoOpLogger } from './index'; function getLogLevelName(level: number): string { diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.ts b/packages/optimizely-sdk/lib/plugins/logger/index.ts index d0e09c0de..fc57f016a 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ConsoleLogHandler, LogLevel } from '@optimizely/js-sdk-logging'; +import { ConsoleLogHandler, LogLevel } from '../../../modules/logging'; type ConsoleLogHandlerConfig = { logLevel?: LogLevel | string; diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts index 86c37ad2a..9f0a62fdf 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { EventTags } from '@optimizely/js-sdk-event-processor'; -import { LoggerFacade } from '@optimizely/js-sdk-logging'; +import { LoggerFacade } from '../../../modules/logging'; import { LOG_LEVEL, diff --git a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts index bb92013a0..099479a63 100644 --- a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts +++ b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '@optimizely/js-sdk-logging'; +import { getLogger } from '../../../modules/logging'; import { VERSION_TYPE, LOG_MESSAGES } from '../enums'; const MODULE_NAME = 'SEMANTIC VERSION'; diff --git a/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts b/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts new file mode 100644 index 000000000..920ff0796 --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts @@ -0,0 +1,386 @@ +/// +import { + LogLevel, + LogHandler, + LoggerFacade, +} from '../models' + +import { + setLogHandler, + setLogLevel, + getLogger, + ConsoleLogHandler, + resetLogger, + getLogLevel, +} from '../logger' + +import { resetErrorHandler } from '../errorHandler' +import { ErrorHandler, setErrorHandler } from '../errorHandler' + +describe('logger', () => { + afterEach(() => { + resetLogger() + resetErrorHandler() + }) + + describe('OptimizelyLogger', () => { + let stubLogger: LogHandler + let logger: LoggerFacade + let stubErrorHandler: ErrorHandler + + beforeEach(() => { + stubLogger = { + log: jest.fn(), + } + stubErrorHandler = { + handleError: jest.fn(), + } + setLogLevel(LogLevel.DEBUG) + setLogHandler(stubLogger) + setErrorHandler(stubErrorHandler) + logger = getLogger() + }) + + describe('setLogLevel', () => { + it('should coerce "debug"', () => { + setLogLevel('debug') + expect(getLogLevel()).toBe(LogLevel.DEBUG) + }) + + it('should coerce "deBug"', () => { + setLogLevel('deBug') + expect(getLogLevel()).toBe(LogLevel.DEBUG) + }) + + it('should coerce "INFO"', () => { + setLogLevel('INFO') + expect(getLogLevel()).toBe(LogLevel.INFO) + }) + + it('should coerce "WARN"', () => { + setLogLevel('WARN') + expect(getLogLevel()).toBe(LogLevel.WARNING) + }) + + it('should coerce "warning"', () => { + setLogLevel('warning') + expect(getLogLevel()).toBe(LogLevel.WARNING) + }) + + it('should coerce "ERROR"', () => { + setLogLevel('WARN') + expect(getLogLevel()).toBe(LogLevel.WARNING) + }) + + it('should default to error if invalid', () => { + setLogLevel('invalid') + expect(getLogLevel()).toBe(LogLevel.ERROR) + }) + }) + + describe('getLogger(name)', () => { + it('should prepend the name in the log messages', () => { + const myLogger = getLogger('doit') + myLogger.info('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'doit: test') + }) + }) + + describe('logger.log(level, msg)', () => { + it('should work with a string logLevel', () => { + setLogLevel(LogLevel.INFO) + logger.log('info', 'test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') + }) + + it('should call the loggerBackend when the message logLevel is equal to the configured logLevel threshold', () => { + setLogLevel(LogLevel.INFO) + logger.log(LogLevel.INFO, 'test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') + }) + + it('should call the loggerBackend when the message logLevel is above to the configured logLevel threshold', () => { + setLogLevel(LogLevel.INFO) + logger.log(LogLevel.WARNING, 'test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test') + }) + + it('should not call the loggerBackend when the message logLevel is above to the configured logLevel threshold', () => { + setLogLevel(LogLevel.INFO) + logger.log(LogLevel.DEBUG, 'test') + + expect(stubLogger.log).toHaveBeenCalledTimes(0) + }) + + it('should not throw if loggerBackend is not supplied', () => { + setLogLevel(LogLevel.INFO) + logger.log(LogLevel.ERROR, 'test') + }) + }) + + describe('logger.info', () => { + it('should handle info(message)', () => { + logger.info('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test') + }) + it('should handle info(message, ...splat)', () => { + logger.info('test: %s %s', 'hey', 'jude') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test: hey jude') + }) + + it('should handle info(message, ...splat, error)', () => { + const error = new Error('hey') + logger.info('test: %s', 'hey', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'test: hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should handle info(error)', () => { + const error = new Error('hey') + logger.info(error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.INFO, 'hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + }) + + describe('logger.debug', () => { + it('should handle debug(message)', () => { + logger.debug('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test') + }) + + it('should handle debug(message, ...splat)', () => { + logger.debug('test: %s', 'hey') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test: hey') + }) + + it('should handle debug(message, ...splat, error)', () => { + const error = new Error('hey') + logger.debug('test: %s', 'hey', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'test: hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should handle debug(error)', () => { + const error = new Error('hey') + logger.debug(error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.DEBUG, 'hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + }) + + describe('logger.warn', () => { + it('should handle warn(message)', () => { + logger.warn('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test') + }) + + it('should handle warn(message, ...splat)', () => { + logger.warn('test: %s', 'hey') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test: hey') + }) + + it('should handle warn(message, ...splat, error)', () => { + const error = new Error('hey') + logger.warn('test: %s', 'hey', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'test: hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should handle info(error)', () => { + const error = new Error('hey') + logger.warn(error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.WARNING, 'hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + }) + + describe('logger.error', () => { + it('should handle error(message)', () => { + logger.error('test') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test') + }) + + it('should handle error(message, ...splat)', () => { + logger.error('test: %s', 'hey') + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test: hey') + }) + + it('should handle error(message, ...splat, error)', () => { + const error = new Error('hey') + logger.error('test: %s', 'hey', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'test: hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should handle error(error)', () => { + const error = new Error('hey') + logger.error(error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'hey') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + + it('should work with an insufficient amount of splat args error(msg, ...splat, message)', () => { + const error = new Error('hey') + logger.error('hey %s', error) + + expect(stubLogger.log).toHaveBeenCalledTimes(1) + expect(stubLogger.log).toHaveBeenCalledWith(LogLevel.ERROR, 'hey undefined') + expect(stubErrorHandler.handleError).toHaveBeenCalledWith(error) + }) + }) + + describe('using ConsoleLoggerHandler', () => { + beforeEach(() => { + jest.spyOn(console, 'info').mockImplementation(() => {}) + }) + + afterEach(() => { + jest.resetAllMocks() + }) + + it('should work with BasicLogger', () => { + const logger = new ConsoleLogHandler() + const TIME = '12:00' + setLogHandler(logger) + setLogLevel(LogLevel.INFO) + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.INFO, 'hey') + + expect(console.info).toBeCalledTimes(1) + expect(console.info).toBeCalledWith('[OPTIMIZELY] - INFO 12:00 hey') + }) + + it('should set logLevel to ERROR when setLogLevel is called with invalid value', () => { + const logger = new ConsoleLogHandler() + logger.setLogLevel('invalid' as any) + + expect(logger.logLevel).toEqual(LogLevel.ERROR) + }) + + it('should set logLevel to ERROR when setLogLevel is called with no value', () => { + const logger = new ConsoleLogHandler() + // @ts-ignore + logger.setLogLevel() + + expect(logger.logLevel).toEqual(LogLevel.ERROR) + }) + }) + }) + + describe('ConsoleLogger', function() { + beforeEach(() => { + jest.spyOn(console, 'info') + jest.spyOn(console, 'log') + jest.spyOn(console, 'warn') + jest.spyOn(console, 'error') + }) + + afterEach(() => { + jest.resetAllMocks() + }) + + it('should log to console.info for LogLevel.INFO', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.DEBUG, + }) + const TIME = '12:00' + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.INFO, 'test') + + expect(console.info).toBeCalledTimes(1) + expect(console.info).toBeCalledWith('[OPTIMIZELY] - INFO 12:00 test') + }) + + it('should log to console.log for LogLevel.DEBUG', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.DEBUG, + }) + const TIME = '12:00' + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.DEBUG, 'debug') + + expect(console.log).toBeCalledTimes(1) + expect(console.log).toBeCalledWith('[OPTIMIZELY] - DEBUG 12:00 debug') + }) + + it('should log to console.warn for LogLevel.WARNING', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.DEBUG, + }) + const TIME = '12:00' + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.WARNING, 'warning') + + expect(console.warn).toBeCalledTimes(1) + expect(console.warn).toBeCalledWith('[OPTIMIZELY] - WARN 12:00 warning') + }) + + it('should log to console.error for LogLevel.ERROR', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.DEBUG, + }) + const TIME = '12:00' + jest.spyOn(logger, 'getTime').mockImplementation(() => TIME) + + logger.log(LogLevel.ERROR, 'error') + + expect(console.error).toBeCalledTimes(1) + expect(console.error).toBeCalledWith('[OPTIMIZELY] - ERROR 12:00 error') + }) + + it('should not log if the configured logLevel is higher', () => { + const logger = new ConsoleLogHandler({ + logLevel: LogLevel.INFO, + }) + + logger.log(LogLevel.DEBUG, 'debug') + + expect(console.log).toBeCalledTimes(0) + }) + }) +}) diff --git a/packages/optimizely-sdk/modules/logging/errorHandler.ts b/packages/optimizely-sdk/modules/logging/errorHandler.ts new file mode 100644 index 000000000..bb659aeae --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/errorHandler.ts @@ -0,0 +1,67 @@ +/** + * Copyright 2019, 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. + */ +/** + * @export + * @interface ErrorHandler + */ +export interface ErrorHandler { + /** + * @param {Error} exception + * @memberof ErrorHandler + */ + handleError(exception: Error): void +} + +/** + * @export + * @class NoopErrorHandler + * @implements {ErrorHandler} + */ +export class NoopErrorHandler implements ErrorHandler { + /** + * @param {Error} exception + * @memberof NoopErrorHandler + */ + handleError(exception: Error): void { + // no-op + return + } +} + +let globalErrorHandler: ErrorHandler = new NoopErrorHandler() + +/** + * @export + * @param {ErrorHandler} handler + */ +export function setErrorHandler(handler: ErrorHandler): void { + globalErrorHandler = handler +} + +/** + * @export + * @returns {ErrorHandler} + */ +export function getErrorHandler(): ErrorHandler { + return globalErrorHandler +} + +/** + * @export + */ +export function resetErrorHandler(): void { + globalErrorHandler = new NoopErrorHandler() +} diff --git a/packages/optimizely-sdk/modules/logging/index.ts b/packages/optimizely-sdk/modules/logging/index.ts new file mode 100644 index 000000000..47a1e99c8 --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/index.ts @@ -0,0 +1,18 @@ +/** + * Copyright 2019, 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. + */ +export * from './errorHandler' +export * from './models' +export * from './logger' diff --git a/packages/optimizely-sdk/modules/logging/logger.ts b/packages/optimizely-sdk/modules/logging/logger.ts new file mode 100644 index 000000000..5647a798a --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/logger.ts @@ -0,0 +1,328 @@ +/** + * Copyright 2019, 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 { getErrorHandler } from './errorHandler' +import { isValidEnum, sprintf } from '../utils' + +import { LogLevel, LoggerFacade, LogManager, LogHandler } from './models' + +type StringToLogLevel = { + NOTSET: number, + DEBUG: number, + INFO: number, + WARNING: number, + ERROR: number, +} + +const stringToLogLevel: StringToLogLevel = { + NOTSET: 0, + DEBUG: 1, + INFO: 2, + WARNING: 3, + ERROR: 4, +} + +function coerceLogLevel(level: any): LogLevel { + if (typeof level !== 'string') { + return level + } + + level = level.toUpperCase() + if (level === 'WARN') { + level = 'WARNING' + } + + if (!stringToLogLevel[level as keyof StringToLogLevel]) { + return level + } + + return stringToLogLevel[level as keyof StringToLogLevel] +} + +type LogData = { + message: string + splat: any[] + error?: Error +} + +class DefaultLogManager implements LogManager { + private loggers: { + [name: string]: LoggerFacade + } + private defaultLoggerFacade = new OptimizelyLogger() + + constructor() { + this.loggers = {} + } + + getLogger(name?: string): LoggerFacade { + if (!name) { + return this.defaultLoggerFacade + } + + if (!this.loggers[name]) { + this.loggers[name] = new OptimizelyLogger({ messagePrefix: name }) + } + + return this.loggers[name] + } +} + +type ConsoleLogHandlerConfig = { + logLevel?: LogLevel | string + logToConsole?: boolean + prefix?: string +} + +export class ConsoleLogHandler implements LogHandler { + public logLevel: LogLevel + private logToConsole: boolean + private prefix: string + + /** + * Creates an instance of ConsoleLogger. + * @param {ConsoleLogHandlerConfig} config + * @memberof ConsoleLogger + */ + constructor(config: ConsoleLogHandlerConfig = {}) { + this.logLevel = LogLevel.NOTSET + if (config.logLevel !== undefined && isValidEnum(LogLevel, config.logLevel)) { + this.setLogLevel(config.logLevel) + } + + this.logToConsole = config.logToConsole !== undefined ? !!config.logToConsole : true + this.prefix = config.prefix !== undefined ? config.prefix : '[OPTIMIZELY]' + } + + /** + * @param {LogLevel} level + * @param {string} message + * @memberof ConsoleLogger + */ + log(level: LogLevel, message: string) { + if (!this.shouldLog(level) || !this.logToConsole) { + return + } + + let logMessage: string = `${this.prefix} - ${this.getLogLevelName( + level, + )} ${this.getTime()} ${message}` + + this.consoleLog(level, [logMessage]) + } + + /** + * @param {LogLevel} level + * @memberof ConsoleLogger + */ + setLogLevel(level: LogLevel | string) { + level = coerceLogLevel(level) + if (!isValidEnum(LogLevel, level) || level === undefined) { + this.logLevel = LogLevel.ERROR + } else { + this.logLevel = level + } + } + + /** + * @returns {string} + * @memberof ConsoleLogger + */ + getTime(): string { + return new Date().toISOString() + } + + /** + * @private + * @param {LogLevel} targetLogLevel + * @returns {boolean} + * @memberof ConsoleLogger + */ + private shouldLog(targetLogLevel: LogLevel): boolean { + return targetLogLevel >= this.logLevel + } + + /** + * @private + * @param {LogLevel} logLevel + * @returns {string} + * @memberof ConsoleLogger + */ + private getLogLevelName(logLevel: LogLevel): string { + switch (logLevel) { + case LogLevel.DEBUG: + return 'DEBUG' + case LogLevel.INFO: + return 'INFO ' + case LogLevel.WARNING: + return 'WARN ' + case LogLevel.ERROR: + return 'ERROR' + default: + return 'NOTSET' + } + } + + /** + * @private + * @param {LogLevel} logLevel + * @param {string[]} logArguments + * @memberof ConsoleLogger + */ + private consoleLog(logLevel: LogLevel, logArguments: [string, ...string[]]) { + switch (logLevel) { + case LogLevel.DEBUG: + console.log.apply(console, logArguments) + break + case LogLevel.INFO: + console.info.apply(console, logArguments) + break + case LogLevel.WARNING: + console.warn.apply(console, logArguments) + break + case LogLevel.ERROR: + console.error.apply(console, logArguments) + break + default: + console.log.apply(console, logArguments) + } + } +} + +let globalLogLevel: LogLevel = LogLevel.NOTSET +let globalLogHandler: LogHandler | null = null + +class OptimizelyLogger implements LoggerFacade { + private messagePrefix: string = '' + + constructor(opts: { messagePrefix?: string } = {}) { + if (opts.messagePrefix) { + this.messagePrefix = opts.messagePrefix + } + } + + /** + * @param {(LogLevel | LogInputObject)} levelOrObj + * @param {string} [message] + * @memberof OptimizelyLogger + */ + log(level: LogLevel | string, message: string, ...splat: any[]): void { + this.internalLog(coerceLogLevel(level), { + message, + splat, + }) + } + + info(message: string | Error, ...splat: any[]): void { + this.namedLog(LogLevel.INFO, message, splat) + } + + debug(message: string | Error, ...splat: any[]): void { + this.namedLog(LogLevel.DEBUG, message, splat) + } + + warn(message: string | Error, ...splat: any[]): void { + this.namedLog(LogLevel.WARNING, message, splat) + } + + error(message: string | Error, ...splat: any[]): void { + this.namedLog(LogLevel.ERROR, message, splat) + } + + private format(data: LogData): string { + return `${this.messagePrefix ? this.messagePrefix + ': ' : ''}${sprintf( + data.message, + ...data.splat, + )}` + } + + private internalLog(level: LogLevel, data: LogData): void { + if (!globalLogHandler) { + return + } + + if (level < globalLogLevel) { + return + } + + globalLogHandler.log(level, this.format(data)) + + if (data.error && data.error instanceof Error) { + getErrorHandler().handleError(data.error) + } + } + + private namedLog(level: LogLevel, message: string | Error, splat: any[]): void { + let error: Error | undefined + + if (message instanceof Error) { + error = message + message = error.message + this.internalLog(level, { + error, + message, + splat, + }) + return + } + + if (splat.length === 0) { + this.internalLog(level, { + message, + splat, + }) + return + } + + const last = splat[splat.length - 1] + if (last instanceof Error) { + error = last + splat.splice(-1) + } + + this.internalLog(level, { message, error, splat }) + } +} + +let globalLogManager: LogManager = new DefaultLogManager() + +export function getLogger(name?: string): LoggerFacade { + return globalLogManager.getLogger(name) +} + +export function setLogHandler(logger: LogHandler | null) { + globalLogHandler = logger +} + +export function setLogLevel(level: LogLevel | string) { + level = coerceLogLevel(level) + if (!isValidEnum(LogLevel, level) || level === undefined) { + globalLogLevel = LogLevel.ERROR + } else { + globalLogLevel = level + } +} + +export function getLogLevel(): LogLevel { + return globalLogLevel +} + +/** + * Resets all global logger state to it's original + */ +export function resetLogger() { + globalLogManager = new DefaultLogManager() + globalLogLevel = LogLevel.NOTSET +} diff --git a/packages/optimizely-sdk/modules/logging/models.ts b/packages/optimizely-sdk/modules/logging/models.ts new file mode 100644 index 000000000..cd3223932 --- /dev/null +++ b/packages/optimizely-sdk/modules/logging/models.ts @@ -0,0 +1,42 @@ +/** + * Copyright 2019, 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. + */ +export enum LogLevel { + NOTSET = 0, + DEBUG = 1, + INFO = 2, + WARNING = 3, + ERROR = 4, +} + +export interface LoggerFacade { + log(level: LogLevel | string, message: string, ...splat: any[]): void + + info(message: string | Error, ...splat: any[]): void + + debug(message: string | Error, ...splat: any[]): void + + warn(message: string | Error, ...splat: any[]): void + + error(message: string | Error, ...splat: any[]): void +} + +export interface LogManager { + getLogger(name?: string): LoggerFacade +} + +export interface LogHandler { + log(level: LogLevel, message: string, ...splat: any[]): void +} diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index 92c0aa20b..c899f43d0 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -75,7 +75,7 @@ const umdBundle = { resolve({ browser: true }), commonjs({ namedExports: { - '@optimizely/js-sdk-logging': [ + '../../../modules/logging': [ 'ConsoleLogHandler', 'getLogger', 'setLogLevel', From e55fdc0f93ee8f60247eb0097a1b0756c37d9694 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Mon, 14 Mar 2022 23:09:26 +0500 Subject: [PATCH 29/48] testcases fix --- .../core/custom_attribute_condition_evaluator/index.tests.js | 2 +- packages/optimizely-sdk/lib/index.browser.tests.js | 2 +- packages/optimizely-sdk/lib/index.react_native.tests.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index a28e735ba..52bd5f6f0 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -21,7 +21,7 @@ import { LOG_LEVEL, LOG_MESSAGES, } from '../../utils/enums'; -import * as logging from '../../../modules/utils'; +import * as logging from '../../../modules/logging'; import * as customAttributeEvaluator from './'; var browserConditionSafari = { diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index 5a2885190..f469ff081 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from '../modules/logging'; +import * as logging from '../modules/logging/logger'; import { assert } from 'chai'; import sinon from 'sinon'; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 16af30222..52b8434ab 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '../modules/logging'; +import * as logging from '../modules/logging/logger'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; From 0146bf1eb93852a210187e97f2f16a4f7ef90c81 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Fri, 25 Mar 2022 21:26:09 +0500 Subject: [PATCH 30/48] logging rollup corrected --- packages/optimizely-sdk/modules/logging/logger.ts | 2 +- packages/optimizely-sdk/rollup.config.js | 2 +- .../{modules/logging/__tests__ => tests}/logger.spec.ts | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) rename packages/optimizely-sdk/{modules/logging/__tests__ => tests}/logger.spec.ts (98%) diff --git a/packages/optimizely-sdk/modules/logging/logger.ts b/packages/optimizely-sdk/modules/logging/logger.ts index 5647a798a..371b6fa25 100644 --- a/packages/optimizely-sdk/modules/logging/logger.ts +++ b/packages/optimizely-sdk/modules/logging/logger.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { getErrorHandler } from './errorHandler' -import { isValidEnum, sprintf } from '../utils' +import { isValidEnum, sprintf } from '../../lib/utils/fns' import { LogLevel, LoggerFacade, LogManager, LogHandler } from './models' diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index c899f43d0..a532cb545 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -75,7 +75,7 @@ const umdBundle = { resolve({ browser: true }), commonjs({ namedExports: { - '../../../modules/logging': [ + './modules/logging': [ 'ConsoleLogHandler', 'getLogger', 'setLogLevel', diff --git a/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts b/packages/optimizely-sdk/tests/logger.spec.ts similarity index 98% rename from packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts rename to packages/optimizely-sdk/tests/logger.spec.ts index 920ff0796..e64c33c8f 100644 --- a/packages/optimizely-sdk/modules/logging/__tests__/logger.spec.ts +++ b/packages/optimizely-sdk/tests/logger.spec.ts @@ -3,7 +3,7 @@ import { LogLevel, LogHandler, LoggerFacade, -} from '../models' +} from '../modules/logging/models' import { setLogHandler, @@ -12,10 +12,10 @@ import { ConsoleLogHandler, resetLogger, getLogLevel, -} from '../logger' +} from '../modules/logging/logger' -import { resetErrorHandler } from '../errorHandler' -import { ErrorHandler, setErrorHandler } from '../errorHandler' +import { resetErrorHandler } from '../modules/logging/errorHandler' +import { ErrorHandler, setErrorHandler } from '../modules/logging/errorHandler' describe('logger', () => { afterEach(() => { From 65a3f0ae485729094a6d2f47ad85b35838db85c0 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 26 Apr 2022 20:41:51 +0500 Subject: [PATCH 31/48] rollup fixed --- packages/optimizely-sdk/rollup.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index a532cb545..f67fd83dd 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -33,6 +33,7 @@ const typescriptPluginOptions = { include: [ './lib/**/*.ts', './lib/**/*.js', + './modules/**/*.ts' ], }; From d594c09f4ba4d4d78618fcced7dba759b6c89f16 Mon Sep 17 00:00:00 2001 From: zashraf1985 Date: Tue, 26 Apr 2022 12:59:42 -0700 Subject: [PATCH 32/48] fixed some build issues --- .../lib/core/audience_evaluator/index.tests.js | 2 +- .../lib/core/audience_evaluator/index.ts | 2 +- packages/optimizely-sdk/lib/core/bucketer/index.ts | 2 +- .../index.tests.js | 2 +- .../core/custom_attribute_condition_evaluator/index.ts | 2 +- .../optimizely-sdk/lib/core/decision_service/index.ts | 2 +- .../lib/core/event_builder/event_helpers.ts | 2 +- .../optimizely-sdk/lib/core/event_builder/index.ts | 2 +- .../lib/core/notification_center/index.ts | 2 +- .../lib/core/project_config/index.tests.js | 2 +- .../optimizely-sdk/lib/core/project_config/index.ts | 2 +- .../project_config/project_config_manager.tests.js | 2 +- .../lib/core/project_config/project_config_manager.ts | 2 +- packages/optimizely-sdk/lib/index.browser.tests.js | 2 +- packages/optimizely-sdk/lib/index.browser.ts | 2 +- packages/optimizely-sdk/lib/index.lite.ts | 2 +- packages/optimizely-sdk/lib/index.node.ts | 2 +- .../optimizely-sdk/lib/index.react_native.tests.js | 2 +- packages/optimizely-sdk/lib/index.react_native.ts | 2 +- .../{ => lib}/modules/logging/errorHandler.ts | 0 .../optimizely-sdk/{ => lib}/modules/logging/index.ts | 0 .../optimizely-sdk/{ => lib}/modules/logging/logger.ts | 2 +- .../optimizely-sdk/{ => lib}/modules/logging/models.ts | 0 packages/optimizely-sdk/lib/optimizely/index.tests.js | 2 +- packages/optimizely-sdk/lib/optimizely/index.ts | 2 +- .../lib/optimizely_user_context/index.tests.js | 2 +- .../datafile_manager/http_polling_datafile_manager.ts | 2 +- .../lib/plugins/logger/index.react_native.ts | 2 +- packages/optimizely-sdk/lib/plugins/logger/index.ts | 2 +- .../optimizely-sdk/lib/utils/event_tag_utils/index.ts | 2 +- .../optimizely-sdk/lib/utils/semantic_version/index.ts | 2 +- packages/optimizely-sdk/rollup.config.js | 10 ---------- 32 files changed, 28 insertions(+), 38 deletions(-) rename packages/optimizely-sdk/{ => lib}/modules/logging/errorHandler.ts (100%) rename packages/optimizely-sdk/{ => lib}/modules/logging/index.ts (100%) rename packages/optimizely-sdk/{ => lib}/modules/logging/logger.ts (99%) rename packages/optimizely-sdk/{ => lib}/modules/logging/models.ts (100%) diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js index fe58a9907..72571282e 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.tests.js @@ -16,7 +16,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { sprintf } from '../../utils/fns'; -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '../../modules/logging'; import { createAudienceEvaluator } from './index'; import * as conditionTreeEvaluator from '../condition_tree_evaluator'; diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts index 82f1f9bc8..5dc92e825 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '../../modules/logging'; import fns from '../../utils/fns'; import { diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index f1d244b8a..3931d1b02 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -19,7 +19,7 @@ */ import { sprintf } from '../../utils/fns'; import murmurhash from 'murmurhash'; -import { LogHandler } from '../../../modules/logging'; +import { LogHandler } from '../../modules/logging'; import { DecisionResponse, BucketerParams, diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js index 52bd5f6f0..8981741c7 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.tests.js @@ -21,7 +21,7 @@ import { LOG_LEVEL, LOG_MESSAGES, } from '../../utils/enums'; -import * as logging from '../../../modules/logging'; +import * as logging from '../../modules/logging'; import * as customAttributeEvaluator from './'; var browserConditionSafari = { diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts index 70298064c..c66384b66 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '../../modules/logging'; import { UserAttributes, Condition } from '../../shared_types'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.ts b/packages/optimizely-sdk/lib/core/decision_service/index.ts index 09fbed7b6..f1e64e632 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.ts +++ b/packages/optimizely-sdk/lib/core/decision_service/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ import { sprintf } from '../../utils/fns'; -import { LogHandler } from '../../../modules/logging'; +import { LogHandler } from '../../modules/logging'; import fns from '../../utils/fns'; import { bucket } from '../bucketer'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts index d8e9ead57..9a181d543 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '../../modules/logging'; import fns from '../../utils/fns'; import * as eventTagUtils from '../../utils/event_tag_utils'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.ts b/packages/optimizely-sdk/lib/core/event_builder/index.ts index 34ecfaa73..096cf70a2 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoggerFacade } from '../../../modules/logging'; +import { LoggerFacade } from '../../modules/logging'; import { EventV1 as CommonEventParams } from '@optimizely/js-sdk-event-processor'; import fns from '../../utils/fns'; diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index c5847c449..903813766 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { objectValues } from '../../utils/fns'; -import { LogHandler, ErrorHandler } from '../../../modules/logging'; +import { LogHandler, ErrorHandler } from '../../modules/logging'; import { NotificationListener, ListenerPayload } from '../../shared_types'; import { diff --git a/packages/optimizely-sdk/lib/core/project_config/index.tests.js b/packages/optimizely-sdk/lib/core/project_config/index.tests.js index 071e96e41..6f22e3595 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/index.tests.js @@ -17,7 +17,7 @@ import sinon from 'sinon'; import { assert } from 'chai'; import { forEach, cloneDeep } from 'lodash'; import { sprintf } from '../../utils/fns'; -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '../../modules/logging'; import fns from '../../utils/fns'; import projectConfig from './'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index 13d72c103..c8b9ec4bd 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -30,7 +30,7 @@ import { } from '../../utils/enums'; import configValidator from '../../utils/config_validator'; -import { LogHandler } from '../../../modules/logging'; +import { LogHandler } from '../../modules/logging'; import { Audience, Experiment, diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js index e4f86d3a4..25969facc 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.tests.js @@ -18,7 +18,7 @@ import { assert } from 'chai'; import { cloneDeep } from 'lodash'; import { sprintf } from '../../utils/fns'; -import * as logging from '../../../modules/logging'; +import * as logging from '../../modules/logging'; import * as datafileManager from '@optimizely/js-sdk-datafile-manager'; import * as projectConfig from './index'; diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts index de43bbf4a..cf657d07f 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { sprintf } from '../../utils/fns'; -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '../../modules/logging'; import { ERROR_MESSAGES } from '../../utils/enums'; import { createOptimizelyConfig } from '../optimizely_config'; diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index f469ff081..61c976510 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from '../modules/logging/logger'; +import * as logging from './modules/logging/logger'; import { assert } from 'chai'; import sinon from 'sinon'; diff --git a/packages/optimizely-sdk/lib/index.browser.ts b/packages/optimizely-sdk/lib/index.browser.ts index a2b7101d7..a4e951107 100644 --- a/packages/optimizely-sdk/lib/index.browser.ts +++ b/packages/optimizely-sdk/lib/index.browser.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '../modules/logging'; +} from './modules/logging'; import { LocalStoragePendingEventsDispatcher } from '@optimizely/js-sdk-event-processor'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; diff --git a/packages/optimizely-sdk/lib/index.lite.ts b/packages/optimizely-sdk/lib/index.lite.ts index 0cd866cc2..86a8bc872 100644 --- a/packages/optimizely-sdk/lib/index.lite.ts +++ b/packages/optimizely-sdk/lib/index.lite.ts @@ -20,7 +20,7 @@ setErrorHandler, getErrorHandler, LogLevel - } from '../modules/logging'; + } from './modules/logging'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import noOpEventDispatcher from './plugins/event_dispatcher/no_op'; diff --git a/packages/optimizely-sdk/lib/index.node.ts b/packages/optimizely-sdk/lib/index.node.ts index b8dd2d974..f5b9632aa 100644 --- a/packages/optimizely-sdk/lib/index.node.ts +++ b/packages/optimizely-sdk/lib/index.node.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '../modules/logging'; +} from './modules/logging'; import Optimizely from './optimizely'; import * as enums from './utils/enums'; import * as loggerPlugin from './plugins/logger'; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 52b8434ab..0722a524a 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '../modules/logging/logger'; +import * as logging from './modules/logging/logger'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; diff --git a/packages/optimizely-sdk/lib/index.react_native.ts b/packages/optimizely-sdk/lib/index.react_native.ts index 8e6241804..49bd8feea 100644 --- a/packages/optimizely-sdk/lib/index.react_native.ts +++ b/packages/optimizely-sdk/lib/index.react_native.ts @@ -20,7 +20,7 @@ import { setErrorHandler, getErrorHandler, LogLevel -} from '../modules/logging'; +} from './modules/logging'; import * as enums from './utils/enums'; import Optimizely from './optimizely'; import configValidator from './utils/config_validator'; diff --git a/packages/optimizely-sdk/modules/logging/errorHandler.ts b/packages/optimizely-sdk/lib/modules/logging/errorHandler.ts similarity index 100% rename from packages/optimizely-sdk/modules/logging/errorHandler.ts rename to packages/optimizely-sdk/lib/modules/logging/errorHandler.ts diff --git a/packages/optimizely-sdk/modules/logging/index.ts b/packages/optimizely-sdk/lib/modules/logging/index.ts similarity index 100% rename from packages/optimizely-sdk/modules/logging/index.ts rename to packages/optimizely-sdk/lib/modules/logging/index.ts diff --git a/packages/optimizely-sdk/modules/logging/logger.ts b/packages/optimizely-sdk/lib/modules/logging/logger.ts similarity index 99% rename from packages/optimizely-sdk/modules/logging/logger.ts rename to packages/optimizely-sdk/lib/modules/logging/logger.ts index 371b6fa25..2f4b12097 100644 --- a/packages/optimizely-sdk/modules/logging/logger.ts +++ b/packages/optimizely-sdk/lib/modules/logging/logger.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { getErrorHandler } from './errorHandler' -import { isValidEnum, sprintf } from '../../lib/utils/fns' +import { isValidEnum, sprintf } from '../../utils/fns' import { LogLevel, LoggerFacade, LogManager, LogHandler } from './models' diff --git a/packages/optimizely-sdk/modules/logging/models.ts b/packages/optimizely-sdk/lib/modules/logging/models.ts similarity index 100% rename from packages/optimizely-sdk/modules/logging/models.ts rename to packages/optimizely-sdk/lib/modules/logging/models.ts diff --git a/packages/optimizely-sdk/lib/optimizely/index.tests.js b/packages/optimizely-sdk/lib/optimizely/index.tests.js index 5ad61e3f2..2a4c45f1c 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely/index.tests.js @@ -18,7 +18,7 @@ import sinon from 'sinon'; import { sprintf } from '../utils/fns'; import { NOTIFICATION_TYPES } from '../utils/enums'; import eventProcessor from '../plugins/event_processor'; -import * as logging from '../../modules/logging'; +import * as logging from '../modules/logging'; import Optimizely from './'; import OptimizelyUserContext from '../optimizely_user_context'; diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index f48e8ba70..d65fa3fa0 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************/ -import { LoggerFacade, ErrorHandler } from '../../modules/logging'; +import { LoggerFacade, ErrorHandler } from '../modules/logging'; import { sprintf, objectValues } from '../utils/fns'; import { NotificationCenter } from '../core/notification_center'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js index 14372bd11..3e7f9a746 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.tests.js @@ -16,7 +16,7 @@ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from '../../modules/logging'; +import * as logging from '../modules/logging'; import { sprintf } from '../utils/fns'; import { NOTIFICATION_TYPES } from '../utils/enums'; diff --git a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts index 5f8a21ed9..32b3e9905 100644 --- a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts +++ b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { LoggerFacade } from '../../../modules/logging'; +import { LoggerFacade } from '../../modules/logging'; import { HttpPollingDatafileManager } from '@optimizely/js-sdk-datafile-manager'; import { DatafileOptions, DatafileManagerConfig, DatafileManager } from '../../shared_types'; import { toDatafile, tryCreatingProjectConfig } from '../../core/project_config'; diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts index c41e2d93d..04fe6d9b8 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { sprintf } from '../../utils/fns'; -import { LogLevel } from '../../../modules/logging'; +import { LogLevel } from '../../modules/logging'; import { NoOpLogger } from './index'; function getLogLevelName(level: number): string { diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.ts b/packages/optimizely-sdk/lib/plugins/logger/index.ts index fc57f016a..d907cc5f0 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ConsoleLogHandler, LogLevel } from '../../../modules/logging'; +import { ConsoleLogHandler, LogLevel } from '../../modules/logging'; type ConsoleLogHandlerConfig = { logLevel?: LogLevel | string; diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts index 9f0a62fdf..b7a034deb 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { EventTags } from '@optimizely/js-sdk-event-processor'; -import { LoggerFacade } from '../../../modules/logging'; +import { LoggerFacade } from '../../modules/logging'; import { LOG_LEVEL, diff --git a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts index 099479a63..6d292bd77 100644 --- a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts +++ b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { getLogger } from '../../../modules/logging'; +import { getLogger } from '../../modules/logging'; import { VERSION_TYPE, LOG_MESSAGES } from '../enums'; const MODULE_NAME = 'SEMANTIC VERSION'; diff --git a/packages/optimizely-sdk/rollup.config.js b/packages/optimizely-sdk/rollup.config.js index f67fd83dd..7afe33aea 100644 --- a/packages/optimizely-sdk/rollup.config.js +++ b/packages/optimizely-sdk/rollup.config.js @@ -33,7 +33,6 @@ const typescriptPluginOptions = { include: [ './lib/**/*.ts', './lib/**/*.js', - './modules/**/*.ts' ], }; @@ -76,15 +75,6 @@ const umdBundle = { resolve({ browser: true }), commonjs({ namedExports: { - './modules/logging': [ - 'ConsoleLogHandler', - 'getLogger', - 'setLogLevel', - 'LogLevel', - 'setLogHandler', - 'setErrorHandler', - 'getErrorHandler', - ], '@optimizely/js-sdk-event-processor': ['LogTierV1EventProcessor', 'LocalStoragePendingEventsDispatcher'], }, }), From a8e7858ec5e9fbe3d8ddaf58f0f635ce0c32ff96 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 28 Apr 2022 19:33:05 +0500 Subject: [PATCH 33/48] comment addressed --- .../plugins/event_processor/forwarding_event_processor.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 1896199de..86390cbcf 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -26,18 +26,18 @@ import { formatEvents } from '../../core/event_builder/build_event_v1'; class ForwardingEventProcessor implements EventProcessor { private dispatcher: EventDispatcher; - private notificationCenter?: NotificationSender; + private NotificationSender?: NotificationSender; constructor(dispatcher: EventDispatcher, notificationCenter?: NotificationSender) { this.dispatcher = dispatcher; - this.notificationCenter = notificationCenter; + this.NotificationSender = notificationCenter; } process(event: ProcessableEvent): void { const formattedEvent = formatEvents([event]); this.dispatcher.dispatchEvent(formattedEvent, () => {}); - if (this.notificationCenter) { - this.notificationCenter.sendNotifications( + if (this.NotificationSender) { + this.NotificationSender.sendNotifications( NOTIFICATION_TYPES.LOG_EVENT, formattedEvent, ) From def50b4b192fde5c121324f65303f91c65909210 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 28 Apr 2022 19:47:22 +0500 Subject: [PATCH 34/48] headers updated --- packages/optimizely-sdk/lib/core/audience_evaluator/index.ts | 2 +- .../lib/core/custom_attribute_condition_evaluator/index.ts | 2 +- packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts | 2 +- packages/optimizely-sdk/lib/core/event_builder/index.ts | 2 +- packages/optimizely-sdk/lib/plugins/logger/index.ts | 2 +- packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts | 2 +- packages/optimizely-sdk/lib/utils/semantic_version/index.ts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts index 5dc92e825..820e90927 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2021, Optimizely + * Copyright 2016, 2018-2021, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts index c66384b66..24f412652 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2018-2019, 2020 Optimizely, Inc. and contributors * + * Copyright 2018-2019, 2020, 2022, 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. * diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts index 9a181d543..4b6b767b2 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts @@ -1,5 +1,5 @@ /** - * Copyright 2019-2021, Optimizely + * Copyright 2019-2021, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.ts b/packages/optimizely-sdk/lib/core/event_builder/index.ts index 096cf70a2..9e518c58a 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016-2021, Optimizely + * Copyright 2016-2021, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.ts b/packages/optimizely-sdk/lib/plugins/logger/index.ts index d907cc5f0..cd04727fc 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017, 2020-2021, Optimizely + * Copyright 2016-2017, 2020-2021, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts index b7a034deb..d47ab1944 100644 --- a/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tag_utils/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2017, 2019-2020 Optimizely + * Copyright 2017, 2019-2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts index 6d292bd77..e8ef11c7f 100644 --- a/packages/optimizely-sdk/lib/utils/semantic_version/index.ts +++ b/packages/optimizely-sdk/lib/utils/semantic_version/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2020, Optimizely + * Copyright 2020, 2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 0d088e7b64619eb277c92dffc87920597f5bff9f Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 28 Apr 2022 19:53:00 +0500 Subject: [PATCH 35/48] logging path corrected --- packages/optimizely-sdk/tests/logger.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/optimizely-sdk/tests/logger.spec.ts b/packages/optimizely-sdk/tests/logger.spec.ts index e64c33c8f..f34afbb0e 100644 --- a/packages/optimizely-sdk/tests/logger.spec.ts +++ b/packages/optimizely-sdk/tests/logger.spec.ts @@ -3,7 +3,7 @@ import { LogLevel, LogHandler, LoggerFacade, -} from '../modules/logging/models' +} from '../lib/modules/logging/models' import { setLogHandler, @@ -12,10 +12,10 @@ import { ConsoleLogHandler, resetLogger, getLogLevel, -} from '../modules/logging/logger' +} from '../lib/modules/logging/logger' -import { resetErrorHandler } from '../modules/logging/errorHandler' -import { ErrorHandler, setErrorHandler } from '../modules/logging/errorHandler' +import { resetErrorHandler } from '../lib/modules/logging/errorHandler' +import { ErrorHandler, setErrorHandler } from '../lib/modules/logging/errorHandler' describe('logger', () => { afterEach(() => { From f36baf4a8ae007dfe3e1451e3452a157c84f1388 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 5 May 2022 15:55:51 +0500 Subject: [PATCH 36/48] comments addressed --- .../lib/core/audience_evaluator/index.ts | 4 +-- .../optimizely-sdk/lib/core/bucketer/index.ts | 4 +-- .../index.ts | 6 ++-- .../lib/core/decision_service/index.ts | 8 ++--- .../lib/core/event_builder/event_helpers.ts | 6 ++-- .../lib/core/event_builder/index.ts | 8 ++--- .../lib/core/notification_center/index.ts | 4 +-- .../lib/core/project_config/index.ts | 6 ++-- .../project_config/project_config_manager.ts | 4 +-- .../optimizely-sdk/lib/optimizely/index.ts | 16 +++++----- .../lib/optimizely_user_context/index.ts | 2 +- .../http_polling_datafile_manager.ts | 2 +- .../forwarding_event_processor.ts | 10 +++--- .../lib/plugins/logger/index.react_native.ts | 2 +- .../lib/utils/attributes_validator/index.ts | 4 +-- .../lib/utils/config_validator/index.ts | 2 +- .../lib/utils/event_tags_validator/index.ts | 2 +- .../optimizely-sdk/lib/utils/fns/index.ts | 2 ++ .../user_profile_service_validator/index.ts | 2 +- packages/optimizely-sdk/package-lock.json | 31 +++++++++++++++++++ packages/optimizely-sdk/package.json | 13 ++++---- packages/optimizely-sdk/tsconfig.json | 3 ++ 22 files changed, 89 insertions(+), 52 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts index be6e8bfcd..50832bfd8 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts @@ -15,12 +15,12 @@ */ import { getLogger } from '@optimizely/js-sdk-logging'; -import fns from '../../utils/fns'; +import fns from '@utils/fns'; import { LOG_LEVEL, LOG_MESSAGES, ERROR_MESSAGES, -} from '../../utils/enums'; +} from '@utils/enums'; import * as conditionTreeEvaluator from '../condition_tree_evaluator'; import * as customAttributeConditionEvaluator from '../custom_attribute_condition_evaluator'; import { UserAttributes, Audience, Condition } from '../../shared_types'; diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index 82d7f5bca..5f51a6562 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -17,7 +17,7 @@ /** * Bucketer API for determining the variation id from the specified parameters */ -import { sprintf } from '../../utils/fns'; +import { sprintf } from '@utils/fns'; import murmurhash from 'murmurhash'; import { LogHandler } from '@optimizely/js-sdk-logging'; import { @@ -31,7 +31,7 @@ import { ERROR_MESSAGES, LOG_LEVEL, LOG_MESSAGES, -} from '../../utils/enums'; +} from '@utils/enums'; const HASH_SEED = 1; const MAX_HASH_VALUE = Math.pow(2, 32); diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts index f236533de..8686455c7 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts @@ -16,9 +16,9 @@ import { getLogger } from '@optimizely/js-sdk-logging'; import { UserAttributes, Condition } from '../../shared_types'; -import fns from '../../utils/fns'; -import { LOG_MESSAGES } from '../../utils/enums'; -import { compareVersion } from '../../utils/semantic_version'; +import fns from '@utils/fns'; +import { LOG_MESSAGES } from '@utils/enums'; +import { compareVersion } from '@utils/semantic_version'; const MODULE_NAME = 'CUSTOM_ATTRIBUTE_CONDITION_EVALUATOR'; diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.ts b/packages/optimizely-sdk/lib/core/decision_service/index.ts index 546aa5c23..9f5e2ba8b 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.ts +++ b/packages/optimizely-sdk/lib/core/decision_service/index.ts @@ -14,9 +14,9 @@ * limitations under the License. * ***************************************************************************/ import { LogHandler } from '@optimizely/js-sdk-logging'; -import { sprintf } from '../../utils/fns'; +import { sprintf } from '@utils/fns'; -import fns from '../../utils/fns'; +import fns from '@utils/fns'; import { bucket } from '../bucketer'; import { AUDIENCE_EVALUATION_TYPES, @@ -25,7 +25,7 @@ import { ERROR_MESSAGES, LOG_LEVEL, LOG_MESSAGES, -} from '../../utils/enums'; +} from '@utils/enums'; import { getAudiencesById, getExperimentAudienceConditions, @@ -40,7 +40,7 @@ import { ProjectConfig, } from '../project_config'; import { AudienceEvaluator, createAudienceEvaluator } from '../audience_evaluator'; -import * as stringValidator from '../../utils/string_value_validator'; +import * as stringValidator from '@utils/string_value_validator'; import { BucketerParams, DecisionResponse, diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts index 9d2ae4609..afe380bf8 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts @@ -15,9 +15,9 @@ */ import { getLogger } from '@optimizely/js-sdk-logging'; -import fns from '../../utils/fns'; -import * as eventTagUtils from '../../utils/event_tag_utils'; -import * as attributesValidator from '../../utils/attributes_validator'; +import fns from '@utils/fns'; +import * as eventTagUtils from '@utils/event_tag_utils'; +import * as attributesValidator from '@utils/attributes_validator'; import * as decision from '../decision'; import { EventTags, UserAttributes } from '../../shared_types'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.ts b/packages/optimizely-sdk/lib/core/event_builder/index.ts index 4c85c5fda..13c4167c7 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/index.ts @@ -16,8 +16,8 @@ import { LoggerFacade } from '@optimizely/js-sdk-logging'; import { EventV1 as CommonEventParams } from '@optimizely/js-sdk-event-processor'; -import fns from '../../utils/fns'; -import { CONTROL_ATTRIBUTES, RESERVED_EVENT_KEYWORDS } from '../../utils/enums'; +import fns from '@utils/fns'; +import { CONTROL_ATTRIBUTES, RESERVED_EVENT_KEYWORDS } from '@utils/enums'; import { getAttributeId, getEventId, @@ -25,8 +25,8 @@ import { getVariationKeyFromId, ProjectConfig, } from '../project_config'; -import * as eventTagUtils from '../../utils/event_tag_utils'; -import { isAttributeValid } from '../../utils/attributes_validator'; +import * as eventTagUtils from '@utils/event_tag_utils'; +import { isAttributeValid } from '@utils/attributes_validator'; import { EventTags, UserAttributes, Event as EventLoggingEndpoint } from '../../shared_types'; const ACTIVATE_EVENT_KEY = 'campaign_activated'; diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index d54e30f84..ba69f7750 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -14,14 +14,14 @@ * limitations under the License. */ import { LogHandler, ErrorHandler } from '@optimizely/js-sdk-logging'; -import { objectValues } from '../../utils/fns'; +import { objectValues } from '@utils/fns'; import { NotificationListener, ListenerPayload } from '../../shared_types'; import { LOG_LEVEL, LOG_MESSAGES, NOTIFICATION_TYPES, -} from '../../utils/enums'; +} from '@utils/enums'; const MODULE_NAME = 'NOTIFICATION_CENTER'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index 9f04289be..30dd60369 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -20,15 +20,15 @@ import { sprintf, assign, keyBy -} from '../../utils/fns'; +} from '@utils/fns'; import { ERROR_MESSAGES, LOG_LEVEL, LOG_MESSAGES, FEATURE_VARIABLE_TYPES, -} from '../../utils/enums'; -import configValidator from '../../utils/config_validator'; +} from '@utils/enums'; +import configValidator from '@utils/config_validator'; import { LogHandler } from '@optimizely/js-sdk-logging'; import { diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts index 961a79b89..69b204cc5 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts @@ -14,9 +14,9 @@ * limitations under the License. */ import { getLogger } from '@optimizely/js-sdk-logging'; -import { sprintf } from '../../utils/fns'; +import { sprintf } from '@utils/fns'; -import { ERROR_MESSAGES } from '../../utils/enums'; +import { ERROR_MESSAGES } from '@utils/enums'; import { createOptimizelyConfig } from '../optimizely_config'; import { OnReadyResult, diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 23fbeec6c..e8241c2c8 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -14,7 +14,7 @@ * limitations under the License. * ***************************************************************************/ import { LoggerFacade, ErrorHandler } from '@optimizely/js-sdk-logging'; -import { sprintf, objectValues } from '../utils/fns'; +import { sprintf, objectValues } from '@utils/fns'; import { NotificationCenter } from '../core/notification_center'; import { EventProcessor } from '@optimizely/js-sdk-event-processor'; @@ -37,13 +37,13 @@ import { createProjectConfigManager, ProjectConfigManager } from '../core/projec import { createDecisionService, DecisionService, DecisionObj } from '../core/decision_service'; import { getImpressionEvent, getConversionEvent } from '../core/event_builder'; import { buildImpressionEvent, buildConversionEvent } from '../core/event_builder/event_helpers'; -import fns from '../utils/fns' -import { validate } from '../utils/attributes_validator'; -import * as enums from '../utils/enums'; -import * as eventTagsValidator from '../utils/event_tags_validator'; +import fns from '@utils/fns' +import { validate } from '@utils/attributes_validator'; +import * as enums from '@utils/enums'; +import * as eventTagsValidator from '@utils/event_tags_validator'; import * as projectConfig from '../core/project_config'; -import * as userProfileServiceValidator from '../utils/user_profile_service_validator'; -import * as stringValidator from '../utils/string_value_validator'; +import * as userProfileServiceValidator from '@utils/user_profile_service_validator'; +import * as stringValidator from '@utils/string_value_validator'; import * as decision from '../core/decision'; import { ERROR_MESSAGES, @@ -54,7 +54,7 @@ import { FEATURE_VARIABLE_TYPES, DECISION_NOTIFICATION_TYPES, NOTIFICATION_TYPES -} from '../utils/enums'; +} from '@utils/enums'; const MODULE_NAME = 'OPTIMIZELY'; diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.ts b/packages/optimizely-sdk/lib/optimizely_user_context/index.ts index 7ab5f0a22..73356073a 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.ts +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.ts @@ -22,7 +22,7 @@ import { OptimizelyForcedDecision, UserAttributes, } from '../../lib/shared_types'; -import { CONTROL_ATTRIBUTES } from '../utils/enums'; +import { CONTROL_ATTRIBUTES } from '@utils/enums'; export default class OptimizelyUserContext { private optimizely: Optimizely; diff --git a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts index 42f993145..0f110a026 100644 --- a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts +++ b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts @@ -17,7 +17,7 @@ import { LoggerFacade } from '@optimizely/js-sdk-logging'; import { HttpPollingDatafileManager } from '@optimizely/js-sdk-datafile-manager'; import { DatafileOptions, DatafileManagerConfig, DatafileManager } from '../../shared_types'; import { toDatafile, tryCreatingProjectConfig } from '../../core/project_config'; -import fns from '../../utils/fns'; +import fns from '@utils/fns'; export function createHttpPollingDatafileManager( sdkKey: string, diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 86390cbcf..1efd1368f 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -21,16 +21,16 @@ import { import { NotificationSender } from '../../core/notification_center'; import { EventDispatcher } from '../../shared_types'; -import { NOTIFICATION_TYPES } from '../../utils/enums'; +import { NOTIFICATION_TYPES } from '@utils/enums'; import { formatEvents } from '../../core/event_builder/build_event_v1'; class ForwardingEventProcessor implements EventProcessor { private dispatcher: EventDispatcher; private NotificationSender?: NotificationSender; - constructor(dispatcher: EventDispatcher, notificationCenter?: NotificationSender) { + constructor(dispatcher: EventDispatcher, notificationSender?: NotificationSender) { this.dispatcher = dispatcher; - this.NotificationSender = notificationCenter; + this.NotificationSender = notificationSender; } process(event: ProcessableEvent): void { @@ -51,6 +51,6 @@ class ForwardingEventProcessor implements EventProcessor { } } -export function createForwardingEventProcessor(dispatcher: EventDispatcher, notificationCenter?: NotificationSender): EventProcessor { - return new ForwardingEventProcessor(dispatcher, notificationCenter); +export function createForwardingEventProcessor(dispatcher: EventDispatcher, notificationSender?: NotificationSender): EventProcessor { + return new ForwardingEventProcessor(dispatcher, notificationSender); } diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts index ce8340e4c..b4bdbdbd4 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.react_native.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { LogLevel } from '@optimizely/js-sdk-logging'; -import { sprintf } from '../../utils/fns'; +import { sprintf } from '@utils/fns'; import { NoOpLogger } from './index'; function getLogLevelName(level: number): string { diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts index 5f33e85d4..5ab79ea74 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '../../utils/fns'; +import { sprintf } from '@utils/fns'; import { ObjectWithUnknownProperties } from '../../shared_types'; -import fns from '../../utils/fns'; +import fns from '@utils/fns'; import { ERROR_MESSAGES } from '../enums'; const MODULE_NAME = 'ATTRIBUTES_VALIDATOR'; diff --git a/packages/optimizely-sdk/lib/utils/config_validator/index.ts b/packages/optimizely-sdk/lib/utils/config_validator/index.ts index a273121cc..e006968a4 100644 --- a/packages/optimizely-sdk/lib/utils/config_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/config_validator/index.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { sprintf } from '../../utils/fns'; +import { sprintf } from '@utils/fns'; import { ObjectWithUnknownProperties } from '../../shared_types'; import { diff --git a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts index f2294dda0..0338b149e 100644 --- a/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/event_tags_validator/index.ts @@ -17,7 +17,7 @@ /** * Provides utility method for validating that event tags user has provided are valid */ -import { sprintf } from '../../utils/fns'; +import { sprintf } from '@utils/fns'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/lib/utils/fns/index.ts b/packages/optimizely-sdk/lib/utils/fns/index.ts index 6cdec3a76..5821c3edd 100644 --- a/packages/optimizely-sdk/lib/utils/fns/index.ts +++ b/packages/optimizely-sdk/lib/utils/fns/index.ts @@ -79,6 +79,8 @@ export function getTimestamp(): number { * @param {*} value * @returns {boolean} */ +// TODO[OASIS-6649]: Don't use any type +// eslint-disable-next-line @typescript-eslint/no-explicit-any export function isValidEnum(enumToCheck: { [key: string]: any }, value: number | string): boolean { let found = false diff --git a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts index 57df0c891..1409a1d48 100644 --- a/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/user_profile_service_validator/index.ts @@ -18,7 +18,7 @@ * Provides utility method for validating that the given user profile service implementation is valid. */ -import { sprintf } from '../../utils/fns'; +import { sprintf } from '@utils/fns'; import { ObjectWithUnknownProperties } from '../../shared_types'; import { ERROR_MESSAGES } from '../enums'; diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index bf2c46f53..777034ba9 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -10771,6 +10771,37 @@ } } }, + "tsconfig-paths": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz", + "integrity": "sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==", + "dev": true, + "requires": { + "json5": "^2.2.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, "tslib": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 7ca0863a9..586e685b2 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -10,7 +10,7 @@ "scripts": { "clean": "rm -rf dist", "lint": "tsc --noEmit && eslint 'lib/**/*.js' 'lib/**/*.ts'", - "test": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register -r lib/tests/exit_on_unhandled_rejection.js 'lib/**/*.tests.ts' 'lib/**/*.tests.js' && jest", + "test": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register -r tsconfig-paths/register -r lib/tests/exit_on_unhandled_rejection.js 'lib/**/*.tests.ts' 'lib/**/*.tests.js' && jest", "posttest": "npm run lint", "test-ci": "npm run test-xbrowser && npm run test-umdbrowser", "test-xbrowser": "karma start karma.bs.conf.js --single-run", @@ -52,13 +52,16 @@ "@rollup/plugin-commonjs": "^11.0.2", "@rollup/plugin-node-resolve": "^7.1.1", "@types/chai": "^4.2.11", + "@types/jest": "^23.3.12", "@types/mocha": "^5.2.7", + "@types/uuid": "^3.4.4", "@typescript-eslint/eslint-plugin": "^3.2.0", "@typescript-eslint/parser": "^3.2.0", "bluebird": "^3.4.6", "chai": "^4.2.0", "coveralls": "^3.0.2", "eslint": "^6.7.2", + "jest": "^23.6.0", "json-loader": "^0.5.4", "karma": "^4.4.1", "karma-browserstack-launcher": "^1.5.1", @@ -76,14 +79,12 @@ "rollup-plugin-terser": "^5.3.0", "rollup-plugin-typescript2": "^0.27.1", "sinon": "^2.3.1", + "ts-jest": "^23.10.5", "ts-loader": "^7.0.5", "ts-node": "^8.10.2", + "tsconfig-paths": "^4.0.0", "typescript": "^4.0.3", - "webpack": "^4.42.1", - "@types/jest": "^23.3.12", - "@types/uuid": "^3.4.4", - "jest": "^23.6.0", - "ts-jest": "^23.10.5" + "webpack": "^4.42.1" }, "publishConfig": { "access": "public" diff --git a/packages/optimizely-sdk/tsconfig.json b/packages/optimizely-sdk/tsconfig.json index a4abc0042..4df20d46a 100644 --- a/packages/optimizely-sdk/tsconfig.json +++ b/packages/optimizely-sdk/tsconfig.json @@ -5,6 +5,9 @@ "paths": { "*": [ "./typings/*" + ], + "@utils/*": [ + "./lib/utils/*" ] }, "allowJs": true, From d82888aec970ca3908784c7d0ea5e01ffa3b652f Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 24 May 2022 16:36:17 +0500 Subject: [PATCH 37/48] Update package-lock.json --- packages/optimizely-sdk/package-lock.json | 30 ----------------------- 1 file changed, 30 deletions(-) diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index 07d665f2f..777034ba9 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -8629,36 +8629,6 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.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 - } - } - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", From 4234cafe932db98334b04f0648849330fd6dfd6d Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 24 May 2022 16:49:28 +0500 Subject: [PATCH 38/48] previous utils paths fixed --- .../lib/core/audience_evaluator/index.ts | 4 ++-- packages/optimizely-sdk/lib/core/bucketer/index.ts | 2 +- .../custom_attribute_condition_evaluator/index.ts | 6 +++--- .../lib/core/decision_service/index.ts | 6 +++--- .../lib/core/event_builder/event_helpers.ts | 6 +++--- .../optimizely-sdk/lib/core/event_builder/index.ts | 8 ++++---- .../lib/core/notification_center/index.ts | 2 +- .../lib/core/project_config/index.ts | 4 ++-- .../core/project_config/project_config_manager.ts | 2 +- packages/optimizely-sdk/lib/optimizely/index.ts | 14 +++++++------- .../lib/optimizely_user_context/index.ts | 2 +- .../http_polling_datafile_manager.ts | 2 +- .../event_processor/forwarding_event_processor.ts | 2 +- .../lib/utils/attributes_validator/index.ts | 2 +- 14 files changed, 31 insertions(+), 31 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts index 4f55c5b4e..820e90927 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts @@ -15,12 +15,12 @@ */ import { getLogger } from '../../modules/logging'; -import fns from '@utils/fns'; +import fns from '../../utils/fns'; import { LOG_LEVEL, LOG_MESSAGES, ERROR_MESSAGES, -} from '@utils/enums'; +} from '../../utils/enums'; import * as conditionTreeEvaluator from '../condition_tree_evaluator'; import * as customAttributeConditionEvaluator from '../custom_attribute_condition_evaluator'; import { UserAttributes, Audience, Condition } from '../../shared_types'; diff --git a/packages/optimizely-sdk/lib/core/bucketer/index.ts b/packages/optimizely-sdk/lib/core/bucketer/index.ts index 30dccb158..3931d1b02 100644 --- a/packages/optimizely-sdk/lib/core/bucketer/index.ts +++ b/packages/optimizely-sdk/lib/core/bucketer/index.ts @@ -31,7 +31,7 @@ import { ERROR_MESSAGES, LOG_LEVEL, LOG_MESSAGES, -} from '@utils/enums'; +} from '../../utils/enums'; const HASH_SEED = 1; const MAX_HASH_VALUE = Math.pow(2, 32); diff --git a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts index e3429b7b7..24f412652 100644 --- a/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/custom_attribute_condition_evaluator/index.ts @@ -16,9 +16,9 @@ import { getLogger } from '../../modules/logging'; import { UserAttributes, Condition } from '../../shared_types'; -import fns from '@utils/fns'; -import { LOG_MESSAGES } from '@utils/enums'; -import { compareVersion } from '@utils/semantic_version'; +import fns from '../../utils/fns'; +import { LOG_MESSAGES } from '../../utils/enums'; +import { compareVersion } from '../../utils/semantic_version'; const MODULE_NAME = 'CUSTOM_ATTRIBUTE_CONDITION_EVALUATOR'; diff --git a/packages/optimizely-sdk/lib/core/decision_service/index.ts b/packages/optimizely-sdk/lib/core/decision_service/index.ts index bee899905..495ea412d 100644 --- a/packages/optimizely-sdk/lib/core/decision_service/index.ts +++ b/packages/optimizely-sdk/lib/core/decision_service/index.ts @@ -16,7 +16,7 @@ import { LogHandler } from '../../modules/logging'; import { sprintf } from '../../utils/fns'; -import fns from '@utils/fns'; +import fns from '../../utils/fns'; import { bucket } from '../bucketer'; import { AUDIENCE_EVALUATION_TYPES, @@ -25,7 +25,7 @@ import { ERROR_MESSAGES, LOG_LEVEL, LOG_MESSAGES, -} from '@utils/enums'; +} from '../../utils/enums'; import { getAudiencesById, getExperimentAudienceConditions, @@ -40,7 +40,7 @@ import { ProjectConfig, } from '../project_config'; import { AudienceEvaluator, createAudienceEvaluator } from '../audience_evaluator'; -import * as stringValidator from '@utils/string_value_validator'; +import * as stringValidator from '../../utils/string_value_validator'; import { BucketerParams, DecisionResponse, diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts index c81fc705e..4b6b767b2 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts @@ -15,9 +15,9 @@ */ import { getLogger } from '../../modules/logging'; -import fns from '@utils/fns'; -import * as eventTagUtils from '@utils/event_tag_utils'; -import * as attributesValidator from '@utils/attributes_validator'; +import fns from '../../utils/fns'; +import * as eventTagUtils from '../../utils/event_tag_utils'; +import * as attributesValidator from '../../utils/attributes_validator'; import * as decision from '../decision'; import { EventTags, UserAttributes } from '../../shared_types'; diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.ts b/packages/optimizely-sdk/lib/core/event_builder/index.ts index 49949f02f..9e518c58a 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/index.ts @@ -16,8 +16,8 @@ import { LoggerFacade } from '../../modules/logging'; import { EventV1 as CommonEventParams } from '@optimizely/js-sdk-event-processor'; -import fns from '@utils/fns'; -import { CONTROL_ATTRIBUTES, RESERVED_EVENT_KEYWORDS } from '@utils/enums'; +import fns from '../../utils/fns'; +import { CONTROL_ATTRIBUTES, RESERVED_EVENT_KEYWORDS } from '../../utils/enums'; import { getAttributeId, getEventId, @@ -25,8 +25,8 @@ import { getVariationKeyFromId, ProjectConfig, } from '../project_config'; -import * as eventTagUtils from '@utils/event_tag_utils'; -import { isAttributeValid } from '@utils/attributes_validator'; +import * as eventTagUtils from '../../utils/event_tag_utils'; +import { isAttributeValid } from '../../utils/attributes_validator'; import { EventTags, UserAttributes, Event as EventLoggingEndpoint } from '../../shared_types'; const ACTIVATE_EVENT_KEY = 'campaign_activated'; diff --git a/packages/optimizely-sdk/lib/core/notification_center/index.ts b/packages/optimizely-sdk/lib/core/notification_center/index.ts index deaebbcbb..34a3320bc 100644 --- a/packages/optimizely-sdk/lib/core/notification_center/index.ts +++ b/packages/optimizely-sdk/lib/core/notification_center/index.ts @@ -21,7 +21,7 @@ import { LOG_LEVEL, LOG_MESSAGES, NOTIFICATION_TYPES, -} from '@utils/enums'; +} from '../../utils/enums'; const MODULE_NAME = 'NOTIFICATION_CENTER'; diff --git a/packages/optimizely-sdk/lib/core/project_config/index.ts b/packages/optimizely-sdk/lib/core/project_config/index.ts index 055b50312..c8b9ec4bd 100644 --- a/packages/optimizely-sdk/lib/core/project_config/index.ts +++ b/packages/optimizely-sdk/lib/core/project_config/index.ts @@ -27,8 +27,8 @@ import { LOG_LEVEL, LOG_MESSAGES, FEATURE_VARIABLE_TYPES, -} from '@utils/enums'; -import configValidator from '@utils/config_validator'; +} from '../../utils/enums'; +import configValidator from '../../utils/config_validator'; import { LogHandler } from '../../modules/logging'; import { diff --git a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts index 6e8e12497..d3bca799f 100644 --- a/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts +++ b/packages/optimizely-sdk/lib/core/project_config/project_config_manager.ts @@ -16,7 +16,7 @@ import { getLogger } from '../../modules/logging'; import { sprintf } from '../../utils/fns'; -import { ERROR_MESSAGES } from '@utils/enums'; +import { ERROR_MESSAGES } from '../../utils/enums'; import { createOptimizelyConfig } from '../optimizely_config'; import { OnReadyResult, diff --git a/packages/optimizely-sdk/lib/optimizely/index.ts b/packages/optimizely-sdk/lib/optimizely/index.ts index 8ad071380..d65fa3fa0 100644 --- a/packages/optimizely-sdk/lib/optimizely/index.ts +++ b/packages/optimizely-sdk/lib/optimizely/index.ts @@ -37,13 +37,13 @@ import { createProjectConfigManager, ProjectConfigManager } from '../core/projec import { createDecisionService, DecisionService, DecisionObj } from '../core/decision_service'; import { getImpressionEvent, getConversionEvent } from '../core/event_builder'; import { buildImpressionEvent, buildConversionEvent } from '../core/event_builder/event_helpers'; -import fns from '@utils/fns' -import { validate } from '@utils/attributes_validator'; -import * as enums from '@utils/enums'; -import * as eventTagsValidator from '@utils/event_tags_validator'; +import fns from '../utils/fns' +import { validate } from '../utils/attributes_validator'; +import * as enums from '../utils/enums'; +import * as eventTagsValidator from '../utils/event_tags_validator'; import * as projectConfig from '../core/project_config'; -import * as userProfileServiceValidator from '@utils/user_profile_service_validator'; -import * as stringValidator from '@utils/string_value_validator'; +import * as userProfileServiceValidator from '../utils/user_profile_service_validator'; +import * as stringValidator from '../utils/string_value_validator'; import * as decision from '../core/decision'; import { ERROR_MESSAGES, @@ -54,7 +54,7 @@ import { FEATURE_VARIABLE_TYPES, DECISION_NOTIFICATION_TYPES, NOTIFICATION_TYPES -} from '@utils/enums'; +} from '../utils/enums'; const MODULE_NAME = 'OPTIMIZELY'; diff --git a/packages/optimizely-sdk/lib/optimizely_user_context/index.ts b/packages/optimizely-sdk/lib/optimizely_user_context/index.ts index 73356073a..7ab5f0a22 100644 --- a/packages/optimizely-sdk/lib/optimizely_user_context/index.ts +++ b/packages/optimizely-sdk/lib/optimizely_user_context/index.ts @@ -22,7 +22,7 @@ import { OptimizelyForcedDecision, UserAttributes, } from '../../lib/shared_types'; -import { CONTROL_ATTRIBUTES } from '@utils/enums'; +import { CONTROL_ATTRIBUTES } from '../utils/enums'; export default class OptimizelyUserContext { private optimizely: Optimizely; diff --git a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts index 6b3d1dea3..32b3e9905 100644 --- a/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts +++ b/packages/optimizely-sdk/lib/plugins/datafile_manager/http_polling_datafile_manager.ts @@ -17,7 +17,7 @@ import { LoggerFacade } from '../../modules/logging'; import { HttpPollingDatafileManager } from '@optimizely/js-sdk-datafile-manager'; import { DatafileOptions, DatafileManagerConfig, DatafileManager } from '../../shared_types'; import { toDatafile, tryCreatingProjectConfig } from '../../core/project_config'; -import fns from '@utils/fns'; +import fns from '../../utils/fns'; export function createHttpPollingDatafileManager( sdkKey: string, diff --git a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts index 5104f20e7..87397c587 100644 --- a/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts +++ b/packages/optimizely-sdk/lib/plugins/event_processor/forwarding_event_processor.ts @@ -21,7 +21,7 @@ import { import { NotificationSender } from '../../core/notification_center'; import { EventDispatcher } from '../../shared_types'; -import { NOTIFICATION_TYPES } from '@utils/enums'; +import { NOTIFICATION_TYPES } from '../../utils/enums'; import { formatEvents } from '../../core/event_builder/build_event_v1'; class ForwardingEventProcessor implements EventProcessor { diff --git a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts index aacdde6a5..5f33e85d4 100644 --- a/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts +++ b/packages/optimizely-sdk/lib/utils/attributes_validator/index.ts @@ -16,7 +16,7 @@ import { sprintf } from '../../utils/fns'; import { ObjectWithUnknownProperties } from '../../shared_types'; -import fns from '@utils/fns'; +import fns from '../../utils/fns'; import { ERROR_MESSAGES } from '../enums'; const MODULE_NAME = 'ATTRIBUTES_VALIDATOR'; From bc7d7e611a9364df408d44cada919c14db3fc243 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 24 May 2022 17:14:38 +0500 Subject: [PATCH 39/48] lint fix --- .../lib/modules/logging/logger.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/optimizely-sdk/lib/modules/logging/logger.ts b/packages/optimizely-sdk/lib/modules/logging/logger.ts index 2f4b12097..a310c19d4 100644 --- a/packages/optimizely-sdk/lib/modules/logging/logger.ts +++ b/packages/optimizely-sdk/lib/modules/logging/logger.ts @@ -111,12 +111,12 @@ export class ConsoleLogHandler implements LogHandler { * @param {string} message * @memberof ConsoleLogger */ - log(level: LogLevel, message: string) { + log(level: LogLevel, message: string) : void { if (!this.shouldLog(level) || !this.logToConsole) { return } - let logMessage: string = `${this.prefix} - ${this.getLogLevelName( + const logMessage = `${this.prefix} - ${this.getLogLevelName( level, )} ${this.getTime()} ${message}` @@ -127,7 +127,7 @@ export class ConsoleLogHandler implements LogHandler { * @param {LogLevel} level * @memberof ConsoleLogger */ - setLogLevel(level: LogLevel | string) { + setLogLevel(level: LogLevel | string) : void { level = coerceLogLevel(level) if (!isValidEnum(LogLevel, level) || level === undefined) { this.logLevel = LogLevel.ERROR @@ -184,19 +184,19 @@ export class ConsoleLogHandler implements LogHandler { private consoleLog(logLevel: LogLevel, logArguments: [string, ...string[]]) { switch (logLevel) { case LogLevel.DEBUG: - console.log.apply(console, logArguments) + console.log(...logArguments) break case LogLevel.INFO: - console.info.apply(console, logArguments) + console.info(...logArguments) break case LogLevel.WARNING: - console.warn.apply(console, logArguments) + console.warn(...logArguments) break case LogLevel.ERROR: - console.error.apply(console, logArguments) + console.error(...logArguments) break default: - console.log.apply(console, logArguments) + console.log(...logArguments) } } } @@ -205,7 +205,7 @@ let globalLogLevel: LogLevel = LogLevel.NOTSET let globalLogHandler: LogHandler | null = null class OptimizelyLogger implements LoggerFacade { - private messagePrefix: string = '' + private messagePrefix = '' constructor(opts: { messagePrefix?: string } = {}) { if (opts.messagePrefix) { @@ -302,11 +302,11 @@ export function getLogger(name?: string): LoggerFacade { return globalLogManager.getLogger(name) } -export function setLogHandler(logger: LogHandler | null) { +export function setLogHandler(logger: LogHandler | null) : void { globalLogHandler = logger } -export function setLogLevel(level: LogLevel | string) { +export function setLogLevel(level: LogLevel | string) : void { level = coerceLogLevel(level) if (!isValidEnum(LogLevel, level) || level === undefined) { globalLogLevel = LogLevel.ERROR @@ -322,7 +322,7 @@ export function getLogLevel(): LogLevel { /** * Resets all global logger state to it's original */ -export function resetLogger() { +export function resetLogger() : void { globalLogManager = new DefaultLogManager() globalLogLevel = LogLevel.NOTSET } From 98962c1dbf17fccb1e49bcc04da7996347b26699 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 24 May 2022 17:32:40 +0500 Subject: [PATCH 40/48] test --- packages/optimizely-sdk/lib/index.browser.tests.js | 2 ++ packages/optimizely-sdk/lib/index.react_native.tests.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index 61c976510..bf1929a57 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -61,6 +61,7 @@ describe('javascript-sdk', function() { }); sinon.spy(console, 'error'); sinon.stub(configValidator, 'validate'); + sinon.stub(logging, 'setLogLevel'); global.XMLHttpRequest = sinon.useFakeXMLHttpRequest(); @@ -72,6 +73,7 @@ describe('javascript-sdk', function() { optimizelyFactory.__internalResetRetryState(); console.error.restore(); configValidator.validate.restore(); + logging.setLogLevel.restore(); delete global.XMLHttpRequest }); diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 0722a524a..8daec6e70 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -59,11 +59,13 @@ describe('javascript-sdk/react-native', function() { }); sinon.spy(console, 'error'); sinon.stub(configValidator, 'validate'); + sinon.stub(logging, 'setLogLevel'); }); afterEach(function() { console.error.restore(); configValidator.validate.restore(); + logging.setLogHandler.restore(); }); it('should not throw if the provided config is not valid', function() { From 4836a2ce7b3d78243b3f1e5f73e2077a8e4d0983 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 24 May 2022 17:45:02 +0500 Subject: [PATCH 41/48] test --- packages/optimizely-sdk/lib/index.browser.tests.js | 4 +--- packages/optimizely-sdk/lib/index.react_native.tests.js | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index bf1929a57..1ed1d526b 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from './modules/logging/logger'; +import * as logging from './modules/logging/'; import { assert } from 'chai'; import sinon from 'sinon'; @@ -61,7 +61,6 @@ describe('javascript-sdk', function() { }); sinon.spy(console, 'error'); sinon.stub(configValidator, 'validate'); - sinon.stub(logging, 'setLogLevel'); global.XMLHttpRequest = sinon.useFakeXMLHttpRequest(); @@ -73,7 +72,6 @@ describe('javascript-sdk', function() { optimizelyFactory.__internalResetRetryState(); console.error.restore(); configValidator.validate.restore(); - logging.setLogLevel.restore(); delete global.XMLHttpRequest }); diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 8daec6e70..d62206434 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from './modules/logging/logger'; +import * as logging from './modules/logging/'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; @@ -59,13 +59,11 @@ describe('javascript-sdk/react-native', function() { }); sinon.spy(console, 'error'); sinon.stub(configValidator, 'validate'); - sinon.stub(logging, 'setLogLevel'); }); afterEach(function() { console.error.restore(); configValidator.validate.restore(); - logging.setLogHandler.restore(); }); it('should not throw if the provided config is not valid', function() { From ef5bc912ba45e3010b9c4b438f2ccf76b3c81fcc Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 24 May 2022 17:54:43 +0500 Subject: [PATCH 42/48] revert --- packages/optimizely-sdk/lib/index.browser.tests.js | 2 +- packages/optimizely-sdk/lib/index.react_native.tests.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index 1ed1d526b..61c976510 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from './modules/logging/'; +import * as logging from './modules/logging/logger'; import { assert } from 'chai'; import sinon from 'sinon'; diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index d62206434..0722a524a 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from './modules/logging/'; +import * as logging from './modules/logging/logger'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; From a47ce8d69f863c603044a4a33bd4e818c4f9f657 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 2 Jun 2022 16:16:05 +0500 Subject: [PATCH 43/48] browser tests fixed --- .../optimizely-sdk/lib/index.browser.tests.js | 2 +- packages/optimizely-sdk/lib/index.browser.ts | 16 +++++++++------- .../lib/index.react_native.tests.js | 2 +- .../optimizely-sdk/lib/modules/logging/logger.ts | 5 +++++ 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.browser.tests.js b/packages/optimizely-sdk/lib/index.browser.tests.js index 61c976510..013b492f1 100644 --- a/packages/optimizely-sdk/lib/index.browser.tests.js +++ b/packages/optimizely-sdk/lib/index.browser.tests.js @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as logging from './modules/logging/logger'; +import logging from './modules/logging/logger'; import { assert } from 'chai'; import sinon from 'sinon'; diff --git a/packages/optimizely-sdk/lib/index.browser.ts b/packages/optimizely-sdk/lib/index.browser.ts index a4e951107..0d3098a82 100644 --- a/packages/optimizely-sdk/lib/index.browser.ts +++ b/packages/optimizely-sdk/lib/index.browser.ts @@ -13,10 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import logHelper from './modules/logging/logger'; import { getLogger, - setLogHandler, - setLogLevel, setErrorHandler, getErrorHandler, LogLevel @@ -35,8 +34,8 @@ import { OptimizelyDecideOption, Client, Config } from './shared_types'; import { createHttpPollingDatafileManager } from './plugins/datafile_manager/http_polling_datafile_manager'; const logger = getLogger(); -setLogHandler(loggerPlugin.createLogger()); -setLogLevel(LogLevel.INFO); +logHelper.setLogHandler(loggerPlugin.createLogger()); +logHelper.setLogLevel(LogLevel.INFO); const MODULE_NAME = 'INDEX_BROWSER'; const DEFAULT_EVENT_BATCH_SIZE = 10; @@ -60,12 +59,12 @@ const createInstance = function(config: Config): Client | null { setErrorHandler(config.errorHandler); } if (config.logger) { - setLogHandler(config.logger); + logHelper.setLogHandler(config.logger); // respect the logger's shouldLog functionality - setLogLevel(LogLevel.NOTSET); + logHelper.setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - setLogLevel(config.logLevel); + logHelper.setLogLevel(config.logLevel); } try { @@ -160,6 +159,9 @@ const __internalResetRetryState = function(): void { /** * Entry point into the Optimizely Browser SDK */ + +const setLogHandler = logHelper.setLogHandler +const setLogLevel = logHelper.setLogLevel export { loggerPlugin as logging, defaultErrorHandler as errorHandler, diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index 0722a524a..a1de3fe84 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import * as logging from './modules/logging/logger'; +import logging from './modules/logging/logger'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; diff --git a/packages/optimizely-sdk/lib/modules/logging/logger.ts b/packages/optimizely-sdk/lib/modules/logging/logger.ts index a310c19d4..e58664fb1 100644 --- a/packages/optimizely-sdk/lib/modules/logging/logger.ts +++ b/packages/optimizely-sdk/lib/modules/logging/logger.ts @@ -326,3 +326,8 @@ export function resetLogger() : void { globalLogManager = new DefaultLogManager() globalLogLevel = LogLevel.NOTSET } + +export default { + setLogLevel: setLogLevel, + setLogHandler: setLogHandler +} From 9accd13ee38a303b47299ebf8127d5669b7ed586 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 2 Jun 2022 16:22:48 +0500 Subject: [PATCH 44/48] entry level packages fixed --- packages/optimizely-sdk/lib/index.lite.ts | 15 ++++++++------- packages/optimizely-sdk/lib/index.node.ts | 8 +++++--- packages/optimizely-sdk/lib/index.react_native.ts | 10 ++++++---- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.lite.ts b/packages/optimizely-sdk/lib/index.lite.ts index 86a8bc872..77181d971 100644 --- a/packages/optimizely-sdk/lib/index.lite.ts +++ b/packages/optimizely-sdk/lib/index.lite.ts @@ -15,12 +15,11 @@ */ import { getLogger, - setLogHandler, - setLogLevel, setErrorHandler, getErrorHandler, LogLevel } from './modules/logging'; +import logHelper from './modules/logging/logger'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import noOpEventDispatcher from './plugins/event_dispatcher/no_op'; @@ -33,8 +32,8 @@ import { OptimizelyDecideOption, Client, ConfigLite } from './shared_types'; import { createNoOpDatafileManager } from './plugins/datafile_manager/no_op_datafile_manager'; const logger = getLogger(); -setLogHandler(loggerPlugin.createLogger()); -setLogLevel(LogLevel.ERROR); +logHelper.setLogHandler(loggerPlugin.createLogger()); +logHelper.setLogLevel(LogLevel.ERROR); /** * Creates an instance of the Optimizely class @@ -52,12 +51,12 @@ setLogLevel(LogLevel.ERROR); setErrorHandler(config.errorHandler); } if (config.logger) { - setLogHandler(config.logger); + logHelper.setLogHandler(config.logger); // respect the logger's shouldLog functionality - setLogLevel(LogLevel.NOTSET); + logHelper.setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - setLogLevel(config.logLevel); + logHelper.setLogLevel(config.logLevel); } try { @@ -91,6 +90,8 @@ setLogLevel(LogLevel.ERROR); } }; +const setLogHandler = logHelper.setLogHandler +const setLogLevel = logHelper.setLogLevel export { loggerPlugin as logging, defaultErrorHandler as errorHandler, diff --git a/packages/optimizely-sdk/lib/index.node.ts b/packages/optimizely-sdk/lib/index.node.ts index f5b9632aa..5dfcff523 100644 --- a/packages/optimizely-sdk/lib/index.node.ts +++ b/packages/optimizely-sdk/lib/index.node.ts @@ -15,12 +15,11 @@ ***************************************************************************/ import { getLogger, - setLogHandler, - setLogLevel, setErrorHandler, getErrorHandler, LogLevel } from './modules/logging'; +import logHelper from './modules/logging/logger'; import Optimizely from './optimizely'; import * as enums from './utils/enums'; import * as loggerPlugin from './plugins/logger'; @@ -34,7 +33,7 @@ import { OptimizelyDecideOption, Client, Config } from './shared_types'; import { createHttpPollingDatafileManager } from './plugins/datafile_manager/http_polling_datafile_manager'; const logger = getLogger(); -setLogLevel(LogLevel.ERROR); +logHelper.setLogLevel(LogLevel.ERROR); const DEFAULT_EVENT_BATCH_SIZE = 10; const DEFAULT_EVENT_FLUSH_INTERVAL = 30000; // Unit is ms, default is 30s @@ -123,6 +122,9 @@ const DEFAULT_EVENT_MAX_QUEUE_SIZE = 10000; } }; +const setLogHandler = logHelper.setLogHandler +const setLogLevel = logHelper.setLogLevel + /** * Entry point into the Optimizely Node testing SDK */ diff --git a/packages/optimizely-sdk/lib/index.react_native.ts b/packages/optimizely-sdk/lib/index.react_native.ts index 49bd8feea..302911f61 100644 --- a/packages/optimizely-sdk/lib/index.react_native.ts +++ b/packages/optimizely-sdk/lib/index.react_native.ts @@ -15,12 +15,11 @@ */ import { getLogger, - setLogHandler, - setLogLevel, setErrorHandler, getErrorHandler, LogLevel } from './modules/logging'; +import logHelper from './modules/logging/logger'; import * as enums from './utils/enums'; import Optimizely from './optimizely'; import configValidator from './utils/config_validator'; @@ -34,8 +33,8 @@ import { OptimizelyDecideOption, Client, Config } from './shared_types'; import { createHttpPollingDatafileManager } from './plugins/datafile_manager/http_polling_datafile_manager'; const logger = getLogger(); -setLogHandler(loggerPlugin.createLogger()); -setLogLevel(LogLevel.INFO); +logHelper.setLogHandler(loggerPlugin.createLogger()); +logHelper.setLogLevel(LogLevel.INFO); const DEFAULT_EVENT_BATCH_SIZE = 10; const DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s @@ -123,6 +122,9 @@ const DEFAULT_EVENT_MAX_QUEUE_SIZE = 10000; } }; +const setLogHandler = logHelper.setLogHandler +const setLogLevel = logHelper.setLogLevel + /** * Entry point into the Optimizely Javascript SDK for React Native */ From 685f03e75d910950c88bda3d196db38c97883e37 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Thu, 2 Jun 2022 16:28:12 +0500 Subject: [PATCH 45/48] fixes --- packages/optimizely-sdk/lib/index.node.ts | 6 +++--- packages/optimizely-sdk/lib/index.react_native.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.node.ts b/packages/optimizely-sdk/lib/index.node.ts index 5dfcff523..c0569a356 100644 --- a/packages/optimizely-sdk/lib/index.node.ts +++ b/packages/optimizely-sdk/lib/index.node.ts @@ -57,12 +57,12 @@ const DEFAULT_EVENT_MAX_QUEUE_SIZE = 10000; if (config.logger) { // only set a logger in node if one is provided, by not setting we are noop-ing hasLogger = true; - setLogHandler(config.logger); + logHelper.setLogHandler(config.logger); // respect the logger's shouldLog functionality - setLogLevel(LogLevel.NOTSET); + logHelper.setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - setLogLevel(config.logLevel); + logHelper.setLogLevel(config.logLevel); } try { configValidator.validate(config); diff --git a/packages/optimizely-sdk/lib/index.react_native.ts b/packages/optimizely-sdk/lib/index.react_native.ts index 302911f61..4a3574f15 100644 --- a/packages/optimizely-sdk/lib/index.react_native.ts +++ b/packages/optimizely-sdk/lib/index.react_native.ts @@ -55,12 +55,12 @@ const DEFAULT_EVENT_MAX_QUEUE_SIZE = 10000; setErrorHandler(config.errorHandler); } if (config.logger) { - setLogHandler(config.logger); + logHelper.setLogHandler(config.logger); // respect the logger's shouldLog functionality - setLogLevel(LogLevel.NOTSET); + logHelper.setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - setLogLevel(config.logLevel); + logHelper.setLogLevel(config.logLevel); } try { From 6132ed9f3714c5b603927183865627cd4185602f Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Fri, 10 Jun 2022 05:17:29 +0500 Subject: [PATCH 46/48] headers updated --- packages/optimizely-sdk/lib/core/audience_evaluator/index.ts | 2 +- packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts | 2 +- packages/optimizely-sdk/lib/core/event_builder/index.ts | 2 +- packages/optimizely-sdk/lib/plugins/logger/index.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts index 820e90927..87b332103 100644 --- a/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts +++ b/packages/optimizely-sdk/lib/core/audience_evaluator/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016, 2018-2021, 2022, Optimizely + * Copyright 2016, 2018-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts index 4b6b767b2..e6f57fdbd 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/event_helpers.ts @@ -1,5 +1,5 @@ /** - * Copyright 2019-2021, 2022, Optimizely + * Copyright 2019-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/core/event_builder/index.ts b/packages/optimizely-sdk/lib/core/event_builder/index.ts index 9e518c58a..7a115b357 100644 --- a/packages/optimizely-sdk/lib/core/event_builder/index.ts +++ b/packages/optimizely-sdk/lib/core/event_builder/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016-2021, 2022, Optimizely + * Copyright 2016-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/packages/optimizely-sdk/lib/plugins/logger/index.ts b/packages/optimizely-sdk/lib/plugins/logger/index.ts index cd04727fc..a9a24e7bb 100644 --- a/packages/optimizely-sdk/lib/plugins/logger/index.ts +++ b/packages/optimizely-sdk/lib/plugins/logger/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017, 2020-2021, 2022, Optimizely + * Copyright 2016-2017, 2020-2022, Optimizely * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 72bc98bc35df59ccedb81a965cd2fb6978764c28 Mon Sep 17 00:00:00 2001 From: ozayr-zaviar Date: Tue, 2 Aug 2022 02:10:17 +0500 Subject: [PATCH 47/48] fixed helper issue --- packages/optimizely-sdk/lib/index.lite.ts | 17 ++++++++--------- packages/optimizely-sdk/lib/index.node.ts | 16 +++++++--------- .../lib/index.react_native.tests.js | 2 +- .../optimizely-sdk/lib/index.react_native.ts | 18 ++++++++---------- 4 files changed, 24 insertions(+), 29 deletions(-) diff --git a/packages/optimizely-sdk/lib/index.lite.ts b/packages/optimizely-sdk/lib/index.lite.ts index 77181d971..c688f9588 100644 --- a/packages/optimizely-sdk/lib/index.lite.ts +++ b/packages/optimizely-sdk/lib/index.lite.ts @@ -17,9 +17,10 @@ getLogger, setErrorHandler, getErrorHandler, - LogLevel + LogLevel, + setLogHandler, + setLogLevel } from './modules/logging'; -import logHelper from './modules/logging/logger'; import configValidator from './utils/config_validator'; import defaultErrorHandler from './plugins/error_handler'; import noOpEventDispatcher from './plugins/event_dispatcher/no_op'; @@ -32,8 +33,8 @@ import { OptimizelyDecideOption, Client, ConfigLite } from './shared_types'; import { createNoOpDatafileManager } from './plugins/datafile_manager/no_op_datafile_manager'; const logger = getLogger(); -logHelper.setLogHandler(loggerPlugin.createLogger()); -logHelper.setLogLevel(LogLevel.ERROR); +setLogHandler(loggerPlugin.createLogger()); +setLogLevel(LogLevel.ERROR); /** * Creates an instance of the Optimizely class @@ -51,12 +52,12 @@ logHelper.setLogLevel(LogLevel.ERROR); setErrorHandler(config.errorHandler); } if (config.logger) { - logHelper.setLogHandler(config.logger); + setLogHandler(config.logger); // respect the logger's shouldLog functionality - logHelper.setLogLevel(LogLevel.NOTSET); + setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - logHelper.setLogLevel(config.logLevel); + setLogLevel(config.logLevel); } try { @@ -90,8 +91,6 @@ logHelper.setLogLevel(LogLevel.ERROR); } }; -const setLogHandler = logHelper.setLogHandler -const setLogLevel = logHelper.setLogLevel export { loggerPlugin as logging, defaultErrorHandler as errorHandler, diff --git a/packages/optimizely-sdk/lib/index.node.ts b/packages/optimizely-sdk/lib/index.node.ts index c0569a356..b628288b4 100644 --- a/packages/optimizely-sdk/lib/index.node.ts +++ b/packages/optimizely-sdk/lib/index.node.ts @@ -17,9 +17,10 @@ import { getLogger, setErrorHandler, getErrorHandler, - LogLevel + LogLevel, + setLogHandler, + setLogLevel } from './modules/logging'; -import logHelper from './modules/logging/logger'; import Optimizely from './optimizely'; import * as enums from './utils/enums'; import * as loggerPlugin from './plugins/logger'; @@ -33,7 +34,7 @@ import { OptimizelyDecideOption, Client, Config } from './shared_types'; import { createHttpPollingDatafileManager } from './plugins/datafile_manager/http_polling_datafile_manager'; const logger = getLogger(); -logHelper.setLogLevel(LogLevel.ERROR); +setLogLevel(LogLevel.ERROR); const DEFAULT_EVENT_BATCH_SIZE = 10; const DEFAULT_EVENT_FLUSH_INTERVAL = 30000; // Unit is ms, default is 30s @@ -57,12 +58,12 @@ const DEFAULT_EVENT_MAX_QUEUE_SIZE = 10000; if (config.logger) { // only set a logger in node if one is provided, by not setting we are noop-ing hasLogger = true; - logHelper.setLogHandler(config.logger); + setLogHandler(config.logger); // respect the logger's shouldLog functionality - logHelper.setLogLevel(LogLevel.NOTSET); + setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - logHelper.setLogLevel(config.logLevel); + setLogLevel(config.logLevel); } try { configValidator.validate(config); @@ -122,9 +123,6 @@ const DEFAULT_EVENT_MAX_QUEUE_SIZE = 10000; } }; -const setLogHandler = logHelper.setLogHandler -const setLogLevel = logHelper.setLogLevel - /** * Entry point into the Optimizely Node testing SDK */ diff --git a/packages/optimizely-sdk/lib/index.react_native.tests.js b/packages/optimizely-sdk/lib/index.react_native.tests.js index a1de3fe84..0722a524a 100644 --- a/packages/optimizely-sdk/lib/index.react_native.tests.js +++ b/packages/optimizely-sdk/lib/index.react_native.tests.js @@ -15,7 +15,7 @@ */ import { assert } from 'chai'; import sinon from 'sinon'; -import logging from './modules/logging/logger'; +import * as logging from './modules/logging/logger'; import * as eventProcessor from './plugins/event_processor'; import Optimizely from './optimizely'; diff --git a/packages/optimizely-sdk/lib/index.react_native.ts b/packages/optimizely-sdk/lib/index.react_native.ts index 4a3574f15..d6b377580 100644 --- a/packages/optimizely-sdk/lib/index.react_native.ts +++ b/packages/optimizely-sdk/lib/index.react_native.ts @@ -17,9 +17,10 @@ import { getLogger, setErrorHandler, getErrorHandler, - LogLevel + LogLevel, + setLogHandler, + setLogLevel } from './modules/logging'; -import logHelper from './modules/logging/logger'; import * as enums from './utils/enums'; import Optimizely from './optimizely'; import configValidator from './utils/config_validator'; @@ -33,8 +34,8 @@ import { OptimizelyDecideOption, Client, Config } from './shared_types'; import { createHttpPollingDatafileManager } from './plugins/datafile_manager/http_polling_datafile_manager'; const logger = getLogger(); -logHelper.setLogHandler(loggerPlugin.createLogger()); -logHelper.setLogLevel(LogLevel.INFO); +setLogHandler(loggerPlugin.createLogger()); +setLogLevel(LogLevel.INFO); const DEFAULT_EVENT_BATCH_SIZE = 10; const DEFAULT_EVENT_FLUSH_INTERVAL = 1000; // Unit is ms, default is 1s @@ -55,12 +56,12 @@ const DEFAULT_EVENT_MAX_QUEUE_SIZE = 10000; setErrorHandler(config.errorHandler); } if (config.logger) { - logHelper.setLogHandler(config.logger); + setLogHandler(config.logger); // respect the logger's shouldLog functionality - logHelper.setLogLevel(LogLevel.NOTSET); + setLogLevel(LogLevel.NOTSET); } if (config.logLevel !== undefined) { - logHelper.setLogLevel(config.logLevel); + setLogLevel(config.logLevel); } try { @@ -122,9 +123,6 @@ const DEFAULT_EVENT_MAX_QUEUE_SIZE = 10000; } }; -const setLogHandler = logHelper.setLogHandler -const setLogLevel = logHelper.setLogLevel - /** * Entry point into the Optimizely Javascript SDK for React Native */ From 5963ea84e7f9a85a30cc5551ffea9306458de35c Mon Sep 17 00:00:00 2001 From: zashraf1985 Date: Mon, 1 Aug 2022 16:59:54 -0700 Subject: [PATCH 48/48] removed unused dependencies from package.json --- packages/optimizely-sdk/package-lock.json | 31 ----------------------- packages/optimizely-sdk/package.json | 2 -- 2 files changed, 33 deletions(-) diff --git a/packages/optimizely-sdk/package-lock.json b/packages/optimizely-sdk/package-lock.json index 613ecc6e3..991aa0721 100644 --- a/packages/optimizely-sdk/package-lock.json +++ b/packages/optimizely-sdk/package-lock.json @@ -10790,37 +10790,6 @@ } } }, - "tsconfig-paths": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz", - "integrity": "sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==", - "dev": true, - "requires": { - "json5": "^2.2.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, "tslib": { "version": "1.14.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", diff --git a/packages/optimizely-sdk/package.json b/packages/optimizely-sdk/package.json index 86e9db2a2..db780860d 100644 --- a/packages/optimizely-sdk/package.json +++ b/packages/optimizely-sdk/package.json @@ -42,7 +42,6 @@ "dependencies": { "@optimizely/js-sdk-datafile-manager": "^0.9.5", "@optimizely/js-sdk-event-processor": "^0.9.2", - "@optimizely/js-sdk-logging": "^0.3.1", "json-schema": "^0.4.0", "murmurhash": "^2.0.1", "uuid": "^8.3.2" @@ -81,7 +80,6 @@ "ts-jest": "^23.10.5", "ts-loader": "^7.0.5", "ts-node": "^8.10.2", - "tsconfig-paths": "^4.0.0", "typescript": "^4.0.3", "webpack": "^4.42.1" }, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy