From 53b3a887d86c8851f032c5cbc3a737b2d68c4b32 Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Mon, 3 Jan 2022 16:31:22 -0300 Subject: [PATCH 1/3] replaced default exports with named exports, and replaced object-assign dependency with inline ES module --- .eslintrc | 7 +- package-lock.json | 528 +++++++++++++++++- package.json | 3 +- src/evaluator/Engine.ts | 6 +- src/evaluator/combiners/__tests__/and.spec.ts | 6 +- .../combiners/__tests__/ifelseif.spec.ts | 8 +- src/evaluator/combiners/and.ts | 4 +- src/evaluator/combiners/ifelseif.ts | 4 +- .../condition/__tests__/engineUtils.spec.ts | 2 +- src/evaluator/condition/index.ts | 4 +- src/evaluator/index.ts | 4 +- src/evaluator/matchers/__tests__/all.spec.ts | 2 +- .../matchers/__tests__/between.spec.ts | 2 +- .../matchers/__tests__/boolean.spec.ts | 2 +- .../matchers/__tests__/cont_all.spec.ts | 2 +- .../matchers/__tests__/cont_any.spec.ts | 2 +- .../matchers/__tests__/cont_str.spec.ts | 2 +- .../matchers/__tests__/dependency.spec.ts | 2 +- src/evaluator/matchers/__tests__/eq.spec.ts | 2 +- .../matchers/__tests__/eq_set.spec.ts | 2 +- src/evaluator/matchers/__tests__/ew.spec.ts | 2 +- src/evaluator/matchers/__tests__/gte.spec.ts | 2 +- src/evaluator/matchers/__tests__/lte.spec.ts | 2 +- .../matchers/__tests__/part_of.spec.ts | 2 +- .../matchers/__tests__/regex.spec.ts | 2 +- .../__tests__/segment/client_side.spec.ts | 2 +- .../__tests__/segment/server_side.spec.ts | 2 +- src/evaluator/matchers/__tests__/sw.spec.ts | 2 +- .../matchers/__tests__/whitelist.spec.ts | 2 +- src/evaluator/matchers/all.ts | 2 +- src/evaluator/matchers/between.ts | 2 +- src/evaluator/matchers/boolean.ts | 2 +- src/evaluator/matchers/cont_all.ts | 2 +- src/evaluator/matchers/cont_any.ts | 2 +- src/evaluator/matchers/cont_str.ts | 2 +- src/evaluator/matchers/dependency.ts | 4 +- src/evaluator/matchers/eq.ts | 2 +- src/evaluator/matchers/eq_set.ts | 2 +- src/evaluator/matchers/ew.ts | 2 +- src/evaluator/matchers/gte.ts | 2 +- src/evaluator/matchers/index.ts | 70 +-- src/evaluator/matchers/lte.ts | 2 +- src/evaluator/matchers/part_of.ts | 2 +- src/evaluator/matchers/segment.ts | 4 +- src/evaluator/matchers/string.ts | 2 +- src/evaluator/matchers/sw.ts | 2 +- src/evaluator/matchers/whitelist.ts | 2 +- .../__tests__/segment.spec.ts | 6 +- .../__tests__/whitelist.spec.ts | 6 +- src/evaluator/matchersTransform/index.ts | 10 +- src/evaluator/matchersTransform/segment.ts | 2 +- src/evaluator/matchersTransform/set.ts | 2 +- .../matchersTransform/unaryNumeric.ts | 2 +- src/evaluator/matchersTransform/whitelist.ts | 2 +- .../parser/__tests__/boolean.spec.ts | 2 +- src/evaluator/parser/__tests__/index.spec.ts | 2 +- .../parser/__tests__/invalidMatcher.spec.ts | 2 +- src/evaluator/parser/__tests__/regex.spec.ts | 2 +- src/evaluator/parser/__tests__/set.spec.ts | 2 +- src/evaluator/parser/__tests__/string.spec.ts | 2 +- .../__tests__/trafficAllocation.spec.ts | 2 +- src/evaluator/parser/index.ts | 24 +- .../treatments/__tests__/index.spec.ts | 2 +- src/evaluator/treatments/index.ts | 2 +- src/evaluator/value/index.ts | 6 +- src/evaluator/value/sanitize.ts | 2 +- src/integrations/__tests__/browser.spec.ts | 2 +- src/integrations/browser.ts | 4 +- src/integrations/ga/GaToSplit.ts | 2 +- src/integrations/pluggable.ts | 2 +- src/listeners/__tests__/browser.spec.ts | 2 +- src/listeners/__tests__/node.spec.ts | 2 +- src/listeners/browser.ts | 4 +- src/listeners/node.ts | 4 +- src/logger/index.ts | 2 +- .../__tests__/sdkReadinessManager.spec.ts | 2 +- src/readiness/readinessManager.ts | 4 +- src/readiness/sdkReadinessManager.ts | 6 +- .../__tests__/sdkClientMethodCS.spec.ts | 2 +- src/sdkClient/client.ts | 4 +- src/sdkClient/clientCS.ts | 4 +- src/sdkClient/clientInputValidation.ts | 4 +- src/sdkClient/sdkClient.ts | 6 +- src/sdkClient/sdkClientMethodCS.ts | 4 +- src/sdkClient/sdkClientMethodCSWithTT.ts | 4 +- src/sdkFactory/index.ts | 6 +- .../__tests__/index.asyncCache.spec.ts | 4 +- .../__tests__/index.syncCache.spec.ts | 2 +- src/sdkManager/index.ts | 4 +- src/services/splitApi.ts | 2 +- src/services/splitHttpClient.ts | 2 +- src/storages/AbstractSegmentsCacheSync.ts | 2 +- src/storages/AbstractSplitsCacheAsync.ts | 2 +- src/storages/AbstractSplitsCacheSync.ts | 2 +- src/storages/KeyBuilder.ts | 2 +- src/storages/KeyBuilderCS.ts | 4 +- src/storages/KeyBuilderSS.ts | 4 +- src/storages/__tests__/KeyBuilder.spec.ts | 4 +- src/storages/findLatencyIndex.ts | 2 +- .../inLocalStorage/MySegmentsCacheInLocal.ts | 6 +- .../inLocalStorage/SplitsCacheInLocal.ts | 6 +- .../__tests__/MySegmentsCacheInLocal.spec.ts | 4 +- .../__tests__/SplitsCacheInLocal.spec.ts | 4 +- src/storages/inLocalStorage/index.ts | 16 +- src/storages/inMemory/CountsCacheInMemory.ts | 2 +- src/storages/inMemory/EventsCacheInMemory.ts | 2 +- .../inMemory/ImpressionCountsCacheInMemory.ts | 2 +- .../inMemory/ImpressionsCacheInMemory.ts | 2 +- src/storages/inMemory/InMemoryStorage.ts | 10 +- src/storages/inMemory/InMemoryStorageCS.ts | 10 +- .../inMemory/LatenciesCacheInMemory.ts | 4 +- .../inMemory/MySegmentsCacheInMemory.ts | 4 +- .../inMemory/SegmentsCacheInMemory.ts | 4 +- src/storages/inMemory/SplitsCacheInMemory.ts | 4 +- .../__tests__/CountsCacheInMemory.spec.ts | 4 +- .../__tests__/EventsCacheInMemory.spec.ts | 18 +- .../ImpressionCountsCacheInMemory.spec.ts | 6 +- .../ImpressionsCacheInMemory.spec.ts | 4 +- .../__tests__/LatenciesCacheInMemory.spec.ts | 6 +- .../__tests__/MySegmentsCacheInMemory.spec.ts | 4 +- .../__tests__/SegmentsCacheInMemory.spec.ts | 6 +- .../__tests__/SplitsCacheInMemory.spec.ts | 10 +- src/storages/inRedis/CountsCacheInRedis.ts | 4 +- src/storages/inRedis/EventsCacheInRedis.ts | 2 +- .../inRedis/ImpressionsCacheInRedis.ts | 2 +- src/storages/inRedis/LatenciesCacheInRedis.ts | 6 +- src/storages/inRedis/RedisAdapter.ts | 6 +- src/storages/inRedis/SegmentsCacheInRedis.ts | 4 +- src/storages/inRedis/SplitsCacheInRedis.ts | 6 +- .../__tests__/CountsCacheInRedis.spec.ts | 4 +- .../__tests__/EventsCacheInRedis.spec.ts | 2 +- .../__tests__/ImpressionsCacheInRedis.spec.ts | 8 +- .../__tests__/LatenciesCacheInRedis.spec.ts | 4 +- .../inRedis/__tests__/RedisAdapter.spec.ts | 4 +- .../__tests__/SegmentsCacheInRedis.spec.ts | 4 +- .../__tests__/SplitsCacheInRedis.spec.ts | 4 +- src/storages/inRedis/index.ts | 16 +- .../pluggable/SegmentsCachePluggable.ts | 2 +- .../pluggable/SplitsCachePluggable.ts | 4 +- .../__tests__/SegmentsCachePluggable.spec.ts | 2 +- .../__tests__/SplitsCachePluggable.spec.ts | 2 +- .../__tests__/wrapperAdapter.spec.ts | 2 +- src/storages/pluggable/index.ts | 8 +- src/sync/__tests__/syncTask.spec.ts | 2 +- .../offline/splitsParser/parseCondition.ts | 2 +- .../splitsParser/splitsParserFromFile.ts | 2 +- .../splitsParser/splitsParserFromSettings.ts | 2 +- src/sync/offline/syncManagerOffline.ts | 4 +- .../offline/syncTasks/fromObjectSyncTask.ts | 4 +- .../polling/fetchers/mySegmentsFetcher.ts | 2 +- .../polling/fetchers/segmentChangesFetcher.ts | 2 +- .../polling/fetchers/splitChangesFetcher.ts | 2 +- src/sync/polling/pollingManagerCS.ts | 6 +- src/sync/polling/pollingManagerSS.ts | 8 +- .../polling/syncTasks/mySegmentsSyncTask.ts | 6 +- .../polling/syncTasks/segmentsSyncTask.ts | 6 +- src/sync/polling/syncTasks/splitsSyncTask.ts | 6 +- .../__tests__/splitChangesUpdater.spec.ts | 6 +- .../polling/updaters/mySegmentsUpdater.ts | 2 +- .../polling/updaters/segmentChangesUpdater.ts | 2 +- .../polling/updaters/splitChangesUpdater.ts | 2 +- src/sync/streaming/AuthClient/index.ts | 2 +- .../SSEClient/__tests__/index.spec.ts | 16 +- src/sync/streaming/SSEClient/index.ts | 2 +- .../SSEHandler/NotificationKeeper.ts | 2 +- .../SSEHandler/__tests__/index.spec.ts | 2 +- src/sync/streaming/SSEHandler/index.ts | 4 +- .../UpdateWorkers/MySegmentsUpdateWorker.ts | 4 +- .../UpdateWorkers/SegmentsUpdateWorker.ts | 4 +- .../UpdateWorkers/SplitsUpdateWorker.ts | 4 +- .../__tests__/MySegmentsUpdateWorker.spec.ts | 2 +- .../__tests__/SegmentsUpdateWorker.spec.ts | 4 +- .../__tests__/SplitsUpdateWorker.spec.ts | 4 +- src/sync/streaming/UpdateWorkers/types.ts | 2 +- .../streaming/__tests__/pushManager.spec.ts | 2 +- src/sync/streaming/pushManager.ts | 16 +- src/sync/submitters/submitterSyncTask.ts | 2 +- src/sync/syncTask.ts | 2 +- src/trackers/__tests__/eventTracker.spec.ts | 2 +- .../__tests__/impressionsTracker.spec.ts | 4 +- src/trackers/eventTracker.ts | 6 +- .../impressionObserver/ImpressionObserver.ts | 4 +- .../impressionObserverCS.ts | 2 +- .../impressionObserverSS.ts | 2 +- src/trackers/impressionsTracker.ts | 6 +- src/utils/Backoff.ts | 2 +- src/utils/LRUCache/__tests__/index.spec.ts | 2 +- src/utils/LRUCache/index.ts | 2 +- src/utils/MinEventEmitter.ts | 2 +- .../__tests__/trafficTypeExistance.spec.ts | 2 +- .../inputValidation/trafficTypeExistance.ts | 2 +- src/utils/lang/binarySearch.ts | 2 +- src/utils/lang/objectAssign.ts | 104 ++++ src/utils/promise/thenable.ts | 4 +- src/utils/promise/timeout.ts | 2 +- src/utils/promise/wrapper.ts | 2 +- .../settingsValidation/impressionsMode.ts | 2 +- src/utils/settingsValidation/index.ts | 4 +- src/utils/settingsValidation/mode.ts | 2 +- src/utils/timeTracker/__tests__/index.spec.ts | 26 +- src/utils/timeTracker/index.ts | 10 +- src/utils/timeTracker/now/browser.ts | 4 +- src/utils/timeTracker/now/node.ts | 2 +- src/utils/timeTracker/timer.ts | 2 +- 204 files changed, 1048 insertions(+), 436 deletions(-) create mode 100644 src/utils/lang/objectAssign.ts diff --git a/.eslintrc b/.eslintrc index affa34c4..6457f1b6 100644 --- a/.eslintrc +++ b/.eslintrc @@ -4,7 +4,8 @@ ], "parser": "@typescript-eslint/parser", "plugins": [ - "@typescript-eslint" + "@typescript-eslint", + "import" ], "env": { @@ -79,7 +80,9 @@ } ], "compat/compat": ["error", "defaults, not ie < 10, not node < 6"], - "no-throw-literal": "error" + "no-throw-literal": "error", + "import/no-default-export": "error", + "import/no-self-import": "error" }, "parserOptions": { "ecmaVersion": 2015, diff --git a/package-lock.json b/package-lock.json index 43488ed1..979c9292 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1101,6 +1101,12 @@ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/lodash": { "version": "4.14.162", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.162.tgz", @@ -1113,12 +1119,6 @@ "integrity": "sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg==", "dev": true }, - "@types/object-assign": { - "version": "4.0.30", - "resolved": "https://registry.npmjs.org/@types/object-assign/-/object-assign-4.0.30.tgz", - "integrity": "sha1-iUk3HVqZ9Dge4PHfCpt6GH4H5lI=", - "dev": true - }, "@types/prettier": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", @@ -1487,12 +1487,36 @@ "sprintf-js": "~1.0.2" } }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, "ast-metadata-inferer": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.2.0.tgz", @@ -1725,6 +1749,16 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "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": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1960,6 +1994,15 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "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" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2046,6 +2089,45 @@ "ansi-colors": "^4.1.1" } }, + "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" + } + }, + "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": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2262,6 +2344,107 @@ } } }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "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" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", + "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + } + } + }, "eslint-plugin-compat": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-3.7.0.tgz", @@ -2285,6 +2468,71 @@ } } }, + "eslint-plugin-import": { + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.1", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.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" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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", @@ -2696,6 +2944,17 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "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", @@ -2708,6 +2967,16 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "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" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -2780,12 +3049,33 @@ "function-bind": "^1.1.1" } }, + "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-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.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "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" + } + }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -2893,6 +3183,17 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "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" + } + }, "ioredis": { "version": "4.28.2", "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.2.tgz", @@ -2912,6 +3213,31 @@ "standard-as-callback": "^2.1.0" } }, + "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-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-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-ci": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", @@ -2930,6 +3256,15 @@ "has": "^1.0.3" } }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2957,36 +3292,94 @@ "is-extglob": "^2.1.1" } }, + "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-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-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "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" + } + }, + "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.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "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-subset": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", "dev": true }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "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-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" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4682,10 +5075,40 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "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-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "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" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } }, "once": { "version": "1.4.0", @@ -5053,6 +5476,17 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "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" + } + }, "signal-exit": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", @@ -5185,6 +5619,26 @@ } } }, + "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" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -5428,6 +5882,35 @@ } } }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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": "2.1.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", @@ -5486,6 +5969,18 @@ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", "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" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -5600,6 +6095,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" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index b2483879..38d9443c 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "bugs": "https://github.com/splitio/javascript-commons/issues", "homepage": "https://github.com/splitio/javascript-commons#readme", "dependencies": { - "object-assign": "^4.1.1", "tslib": "^2.1.0" }, "devDependencies": { @@ -52,13 +51,13 @@ "@types/ioredis": "^4.28.0", "@types/jest": "^27.0.0", "@types/lodash": "^4.14.162", - "@types/object-assign": "^4.0.30", "@typescript-eslint/eslint-plugin": "^4.2.0", "@typescript-eslint/parser": "^4.2.0", "cross-env": "^7.0.2", "csv-streamify": "^4.0.0", "eslint": "^7.32.0", "eslint-plugin-compat": "3.7.0", + "eslint-plugin-import": "^2.25.3", "fetch-mock": "^9.10.7", "ioredis": "^4.28.0", "jest": "^27.2.3", diff --git a/src/evaluator/Engine.ts b/src/evaluator/Engine.ts index d7466caa..af65a87f 100644 --- a/src/evaluator/Engine.ts +++ b/src/evaluator/Engine.ts @@ -1,7 +1,7 @@ import { get } from '../utils/lang'; -import parser from './parser'; +import { parser } from './parser'; import { keyParser } from '../utils/key'; -import thenable from '../utils/promise/thenable'; +import { thenable } from '../utils/promise/thenable'; import * as LabelsConstants from '../utils/labels'; import { CONTROL } from '../utils/constants'; import { ISplit, MaybeThenable } from '../dtos/types'; @@ -17,7 +17,7 @@ function evaluationResult(result: IEvaluation | undefined, defaultTreatment: str }; } -export default class Engine { +export class Engine { constructor(private baseInfo: ISplit, private evaluator: IEvaluator) { diff --git a/src/evaluator/combiners/__tests__/and.spec.ts b/src/evaluator/combiners/__tests__/and.spec.ts index 1990546e..8d31a9d4 100644 --- a/src/evaluator/combiners/__tests__/and.spec.ts +++ b/src/evaluator/combiners/__tests__/and.spec.ts @@ -1,16 +1,16 @@ -import andCombiner from '../and'; +import { andCombinerContext } from '../and'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; test('COMBINER AND / should always return true', async function () { - let AND = andCombiner(loggerMock, [() => true, () => true, () => true]); + let AND = andCombinerContext(loggerMock, [() => true, () => true, () => true]); expect(await AND('always true')).toBe(true); // should always return true }); test('COMBINER AND / should always return false', async function () { - let AND = andCombiner(loggerMock, [() => true, () => true, () => false]); + let AND = andCombinerContext(loggerMock, [() => true, () => true, () => false]); expect(await AND('always false')).toBe(false); // should always return false }); diff --git a/src/evaluator/combiners/__tests__/ifelseif.spec.ts b/src/evaluator/combiners/__tests__/ifelseif.spec.ts index eb874ebc..983b21a1 100644 --- a/src/evaluator/combiners/__tests__/ifelseif.spec.ts +++ b/src/evaluator/combiners/__tests__/ifelseif.spec.ts @@ -1,5 +1,5 @@ // @ts-nocheck -import ifElseIfCombinerFactory from '../ifelseif'; +import { ifElseIfCombinerContext } from '../ifelseif'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; test('IF ELSE IF COMBINER / should correctly propagate context parameters and predicates returns value', async function () { @@ -17,7 +17,7 @@ test('IF ELSE IF COMBINER / should correctly propagate context parameters and pr } let predicates = [evaluator]; - let ifElseIfEvaluator = ifElseIfCombinerFactory(loggerMock, predicates); + let ifElseIfEvaluator = ifElseIfCombinerContext(loggerMock, predicates); expect(await ifElseIfEvaluator(inputKey, inputSeed, inputAttributes) === evaluationResult).toBe(true); console.log(`evaluator should return ${evaluationResult}`); @@ -36,7 +36,7 @@ test('IF ELSE IF COMBINER / should stop evaluating when one matcher return a tre } ]; - let ifElseIfEvaluator = ifElseIfCombinerFactory(loggerMock, predicates); + let ifElseIfEvaluator = ifElseIfCombinerContext(loggerMock, predicates); expect(await ifElseIfEvaluator()).toBe('exclude'); // exclude treatment found }); @@ -54,7 +54,7 @@ test('IF ELSE IF COMBINER / should return undefined if there is none matching ru } ]; - const ifElseIfEvaluator = ifElseIfCombinerFactory(loggerMock, predicates); + const ifElseIfEvaluator = ifElseIfCombinerContext(loggerMock, predicates); expect(await ifElseIfEvaluator() === undefined).toBe(true); }); diff --git a/src/evaluator/combiners/and.ts b/src/evaluator/combiners/and.ts index 271801dd..b229a22b 100644 --- a/src/evaluator/combiners/and.ts +++ b/src/evaluator/combiners/and.ts @@ -1,11 +1,11 @@ import { findIndex } from '../../utils/lang'; import { ILogger } from '../../logger/types'; -import thenable from '../../utils/promise/thenable'; +import { thenable } from '../../utils/promise/thenable'; import { MaybeThenable } from '../../dtos/types'; import { IMatcher } from '../types'; import { ENGINE_COMBINER_AND } from '../../logger/constants'; -export default function andCombinerContext(log: ILogger, matchers: IMatcher[]) { +export function andCombinerContext(log: ILogger, matchers: IMatcher[]) { function andResults(results: boolean[]): boolean { // Array.prototype.every is supported by target environments diff --git a/src/evaluator/combiners/ifelseif.ts b/src/evaluator/combiners/ifelseif.ts index 9aa162f7..2ecb95ff 100644 --- a/src/evaluator/combiners/ifelseif.ts +++ b/src/evaluator/combiners/ifelseif.ts @@ -1,13 +1,13 @@ import { findIndex } from '../../utils/lang'; import { ILogger } from '../../logger/types'; -import thenable from '../../utils/promise/thenable'; +import { thenable } from '../../utils/promise/thenable'; import * as LabelsConstants from '../../utils/labels'; import { CONTROL } from '../../utils/constants'; import { SplitIO } from '../../types'; import { IEvaluation, IEvaluator, ISplitEvaluator } from '../types'; import { ENGINE_COMBINER_IFELSEIF, ENGINE_COMBINER_IFELSEIF_NO_TREATMENT, ERROR_ENGINE_COMBINER_IFELSEIF } from '../../logger/constants'; -export default function ifElseIfCombinerContext(log: ILogger, predicates: IEvaluator[]): IEvaluator { +export function ifElseIfCombinerContext(log: ILogger, predicates: IEvaluator[]): IEvaluator { function unexpectedInputHandler() { log.error(ERROR_ENGINE_COMBINER_IFELSEIF); diff --git a/src/evaluator/condition/__tests__/engineUtils.spec.ts b/src/evaluator/condition/__tests__/engineUtils.spec.ts index 0f1a6d87..8682c851 100644 --- a/src/evaluator/condition/__tests__/engineUtils.spec.ts +++ b/src/evaluator/condition/__tests__/engineUtils.spec.ts @@ -1,5 +1,5 @@ import * as engineUtils from '../engineUtils'; -import Treatments from '../../treatments'; +import { Treatments } from '../../treatments'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; const treatmentsMock = Treatments.parse([{ diff --git a/src/evaluator/condition/index.ts b/src/evaluator/condition/index.ts index 542617ea..5cf1cac8 100644 --- a/src/evaluator/condition/index.ts +++ b/src/evaluator/condition/index.ts @@ -1,5 +1,5 @@ import { getTreatment, shouldApplyRollout } from './engineUtils'; -import thenable from '../../utils/promise/thenable'; +import { thenable } from '../../utils/promise/thenable'; import * as LabelsConstants from '../../utils/labels'; import { MaybeThenable } from '../../dtos/types'; import { IEvaluation, IEvaluator, ISplitEvaluator } from '../types'; @@ -22,7 +22,7 @@ function match(log: ILogger, matchingResult: boolean, bucketingKey: string | und } // Condition factory -export default function conditionContext(log: ILogger, matcherEvaluator: (...args: any) => MaybeThenable, treatments: { getTreatmentFor: (x: number) => string }, label: string, conditionType: 'ROLLOUT' | 'WHITELIST'): IEvaluator { +export function conditionContext(log: ILogger, matcherEvaluator: (...args: any) => MaybeThenable, treatments: { getTreatmentFor: (x: number) => string }, label: string, conditionType: 'ROLLOUT' | 'WHITELIST'): IEvaluator { return function conditionEvaluator(key: SplitIO.SplitKey, seed: number, trafficAllocation?: number, trafficAllocationSeed?: number, attributes?: SplitIO.Attributes, splitEvaluator?: ISplitEvaluator) { diff --git a/src/evaluator/index.ts b/src/evaluator/index.ts index df9d5ef8..9f6cccf1 100644 --- a/src/evaluator/index.ts +++ b/src/evaluator/index.ts @@ -1,5 +1,5 @@ -import Engine from './Engine'; -import thenable from '../utils/promise/thenable'; +import { Engine } from './Engine'; +import { thenable } from '../utils/promise/thenable'; import * as LabelsConstants from '../utils/labels'; import { CONTROL } from '../utils/constants'; import { ISplit, MaybeThenable } from '../dtos/types'; diff --git a/src/evaluator/matchers/__tests__/all.spec.ts b/src/evaluator/matchers/__tests__/all.spec.ts index d4a47b09..aea0063d 100644 --- a/src/evaluator/matchers/__tests__/all.spec.ts +++ b/src/evaluator/matchers/__tests__/all.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/between.spec.ts b/src/evaluator/matchers/__tests__/between.spec.ts index ca95ba16..9e7308f1 100644 --- a/src/evaluator/matchers/__tests__/between.spec.ts +++ b/src/evaluator/matchers/__tests__/between.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/boolean.spec.ts b/src/evaluator/matchers/__tests__/boolean.spec.ts index 515b46d5..8f33893c 100644 --- a/src/evaluator/matchers/__tests__/boolean.spec.ts +++ b/src/evaluator/matchers/__tests__/boolean.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/cont_all.spec.ts b/src/evaluator/matchers/__tests__/cont_all.spec.ts index 8ea23697..2b11df6f 100644 --- a/src/evaluator/matchers/__tests__/cont_all.spec.ts +++ b/src/evaluator/matchers/__tests__/cont_all.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/cont_any.spec.ts b/src/evaluator/matchers/__tests__/cont_any.spec.ts index 13896900..cc4481a6 100644 --- a/src/evaluator/matchers/__tests__/cont_any.spec.ts +++ b/src/evaluator/matchers/__tests__/cont_any.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/cont_str.spec.ts b/src/evaluator/matchers/__tests__/cont_str.spec.ts index f8c56d4e..527ab0f7 100644 --- a/src/evaluator/matchers/__tests__/cont_str.spec.ts +++ b/src/evaluator/matchers/__tests__/cont_str.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/dependency.spec.ts b/src/evaluator/matchers/__tests__/dependency.spec.ts index 6f4f62ec..0e41a6cf 100644 --- a/src/evaluator/matchers/__tests__/dependency.spec.ts +++ b/src/evaluator/matchers/__tests__/dependency.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { evaluateFeature } from '../../index'; import { IMatcher, IMatcherDto } from '../../types'; import { IStorageSync } from '../../../storages/types'; diff --git a/src/evaluator/matchers/__tests__/eq.spec.ts b/src/evaluator/matchers/__tests__/eq.spec.ts index 40b40f8d..57ffb394 100644 --- a/src/evaluator/matchers/__tests__/eq.spec.ts +++ b/src/evaluator/matchers/__tests__/eq.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/eq_set.spec.ts b/src/evaluator/matchers/__tests__/eq_set.spec.ts index 17450cf6..9acf6412 100644 --- a/src/evaluator/matchers/__tests__/eq_set.spec.ts +++ b/src/evaluator/matchers/__tests__/eq_set.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/ew.spec.ts b/src/evaluator/matchers/__tests__/ew.spec.ts index c5980d0b..7d071c5b 100644 --- a/src/evaluator/matchers/__tests__/ew.spec.ts +++ b/src/evaluator/matchers/__tests__/ew.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/gte.spec.ts b/src/evaluator/matchers/__tests__/gte.spec.ts index f7a4ec54..0c6046b4 100644 --- a/src/evaluator/matchers/__tests__/gte.spec.ts +++ b/src/evaluator/matchers/__tests__/gte.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/lte.spec.ts b/src/evaluator/matchers/__tests__/lte.spec.ts index ad920020..a461269f 100644 --- a/src/evaluator/matchers/__tests__/lte.spec.ts +++ b/src/evaluator/matchers/__tests__/lte.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/part_of.spec.ts b/src/evaluator/matchers/__tests__/part_of.spec.ts index 9472d389..1b48f093 100644 --- a/src/evaluator/matchers/__tests__/part_of.spec.ts +++ b/src/evaluator/matchers/__tests__/part_of.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/regex.spec.ts b/src/evaluator/matchers/__tests__/regex.spec.ts index 3465d623..e93164c0 100644 --- a/src/evaluator/matchers/__tests__/regex.spec.ts +++ b/src/evaluator/matchers/__tests__/regex.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import fs from 'fs'; import rl from 'readline'; import { IMatcher, IMatcherDto } from '../../types'; diff --git a/src/evaluator/matchers/__tests__/segment/client_side.spec.ts b/src/evaluator/matchers/__tests__/segment/client_side.spec.ts index 7514a862..3bace2ca 100644 --- a/src/evaluator/matchers/__tests__/segment/client_side.spec.ts +++ b/src/evaluator/matchers/__tests__/segment/client_side.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../../matcherTypes'; -import matcherFactory from '../..'; +import { matcherFactory } from '../..'; import { IMatcher, IMatcherDto } from '../../../types'; import { IStorageSync } from '../../../../storages/types'; import { loggerMock } from '../../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/segment/server_side.spec.ts b/src/evaluator/matchers/__tests__/segment/server_side.spec.ts index 97d9dcc7..906aec62 100644 --- a/src/evaluator/matchers/__tests__/segment/server_side.spec.ts +++ b/src/evaluator/matchers/__tests__/segment/server_side.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../../matcherTypes'; -import matcherFactory from '../..'; +import { matcherFactory } from '../..'; import { IMatcher, IMatcherDto } from '../../../types'; import { IStorageSync } from '../../../../storages/types'; import { loggerMock } from '../../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/sw.spec.ts b/src/evaluator/matchers/__tests__/sw.spec.ts index ec8cdb5b..3bf6ca3f 100644 --- a/src/evaluator/matchers/__tests__/sw.spec.ts +++ b/src/evaluator/matchers/__tests__/sw.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/__tests__/whitelist.spec.ts b/src/evaluator/matchers/__tests__/whitelist.spec.ts index 4c7aa723..64e1f2b2 100644 --- a/src/evaluator/matchers/__tests__/whitelist.spec.ts +++ b/src/evaluator/matchers/__tests__/whitelist.spec.ts @@ -1,5 +1,5 @@ import { matcherTypes } from '../matcherTypes'; -import matcherFactory from '..'; +import { matcherFactory } from '..'; import { _Set } from '../../../utils/lang/sets'; import { IMatcher, IMatcherDto } from '../../types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/matchers/all.ts b/src/evaluator/matchers/all.ts index 8b8c64fb..51326a91 100644 --- a/src/evaluator/matchers/all.ts +++ b/src/evaluator/matchers/all.ts @@ -1,7 +1,7 @@ import { ENGINE_MATCHER_ALL } from '../../logger/constants'; import { ILogger } from '../../logger/types'; -export default function allMatcherContext(log: ILogger) { +export function allMatcherContext(log: ILogger) { return function allMatcher(runtimeAttr: string): boolean { log.debug(ENGINE_MATCHER_ALL); diff --git a/src/evaluator/matchers/between.ts b/src/evaluator/matchers/between.ts index f56709b3..063e2a59 100644 --- a/src/evaluator/matchers/between.ts +++ b/src/evaluator/matchers/between.ts @@ -2,7 +2,7 @@ import { IBetweenMatcherData } from '../../dtos/types'; import { ENGINE_MATCHER_BETWEEN } from '../../logger/constants'; import { ILogger } from '../../logger/types'; -export default function betweenMatcherContext(log: ILogger, ruleVO: IBetweenMatcherData) /*: Function */ { +export function betweenMatcherContext(log: ILogger, ruleVO: IBetweenMatcherData) /*: Function */ { return function betweenMatcher(runtimeAttr: number): boolean { let isBetween = runtimeAttr >= ruleVO.start && runtimeAttr <= ruleVO.end; diff --git a/src/evaluator/matchers/boolean.ts b/src/evaluator/matchers/boolean.ts index 6e64a268..821d8f98 100644 --- a/src/evaluator/matchers/boolean.ts +++ b/src/evaluator/matchers/boolean.ts @@ -1,7 +1,7 @@ import { ENGINE_MATCHER_BOOLEAN } from '../../logger/constants'; import { ILogger } from '../../logger/types'; -export default function booleanMatcherContext(log: ILogger, ruleAttr: boolean) /*: Function */ { +export function booleanMatcherContext(log: ILogger, ruleAttr: boolean) /*: Function */ { return function booleanMatcher(runtimeAttr: boolean): boolean { let booleanMatches = ruleAttr === runtimeAttr; diff --git a/src/evaluator/matchers/cont_all.ts b/src/evaluator/matchers/cont_all.ts index 02bc35e1..e52a9e85 100644 --- a/src/evaluator/matchers/cont_all.ts +++ b/src/evaluator/matchers/cont_all.ts @@ -2,7 +2,7 @@ import { ENGINE_MATCHER_CONTAINS_ALL } from '../../logger/constants'; import { ILogger } from '../../logger/types'; import { findIndex } from '../../utils/lang'; -export default function containsAllMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { +export function containsAllSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { return function containsAllMatcher(runtimeAttr: string[]): boolean { let containsAll = true; diff --git a/src/evaluator/matchers/cont_any.ts b/src/evaluator/matchers/cont_any.ts index 69fcdb3e..6ab0b08c 100644 --- a/src/evaluator/matchers/cont_any.ts +++ b/src/evaluator/matchers/cont_any.ts @@ -2,7 +2,7 @@ import { ENGINE_MATCHER_CONTAINS_ANY } from '../../logger/constants'; import { ILogger } from '../../logger/types'; import { findIndex } from '../../utils/lang'; -export default function containsAnyMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { +export function containsAnySetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { return function containsAnyMatcher(runtimeAttr: string[]): boolean { let containsAny = false; diff --git a/src/evaluator/matchers/cont_str.ts b/src/evaluator/matchers/cont_str.ts index 0a15d13e..b3dfe506 100644 --- a/src/evaluator/matchers/cont_str.ts +++ b/src/evaluator/matchers/cont_str.ts @@ -2,7 +2,7 @@ import { isString } from '../../utils/lang'; import { ILogger } from '../../logger/types'; import { ENGINE_MATCHER_CONTAINS_STRING } from '../../logger/constants'; -export default function containsStringMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { +export function containsStringMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { return function containsStringMatcher(runtimeAttr: string): boolean { let contains = ruleAttr.some(e => isString(runtimeAttr) && runtimeAttr.indexOf(e) > -1); diff --git a/src/evaluator/matchers/dependency.ts b/src/evaluator/matchers/dependency.ts index e3b8723b..42040328 100644 --- a/src/evaluator/matchers/dependency.ts +++ b/src/evaluator/matchers/dependency.ts @@ -1,11 +1,11 @@ import { IDependencyMatcherData, MaybeThenable } from '../../dtos/types'; import { IStorageAsync, IStorageSync } from '../../storages/types'; import { ILogger } from '../../logger/types'; -import thenable from '../../utils/promise/thenable'; +import { thenable } from '../../utils/promise/thenable'; import { IDependencyMatcherValue, IEvaluation, ISplitEvaluator } from '../types'; import { ENGINE_MATCHER_DEPENDENCY, ENGINE_MATCHER_DEPENDENCY_PRE } from '../../logger/constants'; -export default function dependencyMatcherContext(log: ILogger, { split, treatments }: IDependencyMatcherData, storage: IStorageSync | IStorageAsync) { +export function dependencyMatcherContext(log: ILogger, { split, treatments }: IDependencyMatcherData, storage: IStorageSync | IStorageAsync) { function checkTreatment(evaluation: IEvaluation, acceptableTreatments: string[], parentName: string) { let matches = false; diff --git a/src/evaluator/matchers/eq.ts b/src/evaluator/matchers/eq.ts index ddccc264..019b1a19 100644 --- a/src/evaluator/matchers/eq.ts +++ b/src/evaluator/matchers/eq.ts @@ -1,7 +1,7 @@ import { ENGINE_MATCHER_EQUAL } from '../../logger/constants'; import { ILogger } from '../../logger/types'; -export default function equalToMatcherContext(log: ILogger, ruleAttr: number) /*: Function */ { +export function equalToMatcherContext(log: ILogger, ruleAttr: number) /*: Function */ { return function equalToMatcher(runtimeAttr: number): boolean { let isEqual = runtimeAttr === ruleAttr; diff --git a/src/evaluator/matchers/eq_set.ts b/src/evaluator/matchers/eq_set.ts index f0fddd27..b36b1103 100644 --- a/src/evaluator/matchers/eq_set.ts +++ b/src/evaluator/matchers/eq_set.ts @@ -2,7 +2,7 @@ import { ENGINE_MATCHER_EQUAL_TO_SET } from '../../logger/constants'; import { ILogger } from '../../logger/types'; import { findIndex } from '../../utils/lang'; -export default function equalToSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { +export function equalToSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { return function equalToSetMatcher(runtimeAttr: string[]): boolean { // Length being the same is the first condition. let isEqual = runtimeAttr.length === ruleAttr.length; diff --git a/src/evaluator/matchers/ew.ts b/src/evaluator/matchers/ew.ts index 20d46c63..851e0e2c 100644 --- a/src/evaluator/matchers/ew.ts +++ b/src/evaluator/matchers/ew.ts @@ -2,7 +2,7 @@ import { ENGINE_MATCHER_ENDS_WITH } from '../../logger/constants'; import { ILogger } from '../../logger/types'; import { endsWith as strEndsWith } from '../../utils/lang'; -export default function endsWithMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { +export function endsWithMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { return function endsWithMatcher(runtimeAttr: string): boolean { let endsWith = ruleAttr.some(e => strEndsWith(runtimeAttr, e)); diff --git a/src/evaluator/matchers/gte.ts b/src/evaluator/matchers/gte.ts index a08f55f5..83d83e4e 100644 --- a/src/evaluator/matchers/gte.ts +++ b/src/evaluator/matchers/gte.ts @@ -1,7 +1,7 @@ import { ENGINE_MATCHER_GREATER } from '../../logger/constants'; import { ILogger } from '../../logger/types'; -export default function greaterThanEqualMatcherContext(log: ILogger, ruleAttr: number) /*: Function */ { +export function greaterThanEqualMatcherContext(log: ILogger, ruleAttr: number) /*: Function */ { return function greaterThanEqualMatcher(runtimeAttr: number): boolean { let isGreaterEqualThan = runtimeAttr >= ruleAttr; diff --git a/src/evaluator/matchers/index.ts b/src/evaluator/matchers/index.ts index 8cf50779..ecb195b4 100644 --- a/src/evaluator/matchers/index.ts +++ b/src/evaluator/matchers/index.ts @@ -1,49 +1,49 @@ -import allMatcher from './all'; -import segmentMatcher from './segment'; -import whitelistMatcher from './whitelist'; -import eqMatcher from './eq'; -import gteMatcher from './gte'; -import lteMatcher from './lte'; -import betweenMatcher from './between'; -import equalToSetMatcher from './eq_set'; -import containsAllSetMatcher from './cont_all'; -import containsAnySetMatcher from './cont_any'; -import partOfSetMatcher from './part_of'; -import swMatcher from './sw'; -import ewMatcher from './ew'; -import containsStrMatcher from './cont_str'; -import dependencyMatcher from './dependency'; -import booleanMatcher from './boolean'; -import stringMatcher from './string'; +import { allMatcherContext } from './all'; +import { segmentMatcherContext } from './segment'; +import { whitelistMatcherContext } from './whitelist'; +import { equalToMatcherContext } from './eq'; +import { greaterThanEqualMatcherContext } from './gte'; +import { lessThanEqualMatcherContext } from './lte'; +import { betweenMatcherContext } from './between'; +import { equalToSetMatcherContext } from './eq_set'; +import { containsAnySetMatcherContext } from './cont_any'; +import { containsAllSetMatcherContext } from './cont_all'; +import { partOfSetMatcherContext } from './part_of'; +import { endsWithMatcherContext } from './ew'; +import { startsWithMatcherContext } from './sw'; +import { containsStringMatcherContext } from './cont_str'; +import { dependencyMatcherContext } from './dependency'; +import { booleanMatcherContext } from './boolean'; +import { stringMatcherContext } from './string'; import { IStorageAsync, IStorageSync } from '../../storages/types'; import { IMatcher, IMatcherDto } from '../types'; import { ILogger } from '../../logger/types'; const matchers = [ undefined, // UNDEFINED: 0, - allMatcher, // ALL_KEYS: 1, - segmentMatcher, // IN_SEGMENT: 2, - whitelistMatcher, // WHITELIST: 3, - eqMatcher, // EQUAL_TO: 4, - gteMatcher, // GREATER_THAN_OR_EQUAL_TO: 5, - lteMatcher, // LESS_THAN_OR_EQUAL_TO: 6, - betweenMatcher, // BETWEEN: 7, - equalToSetMatcher, // EQUAL_TO_SET: 8, - containsAnySetMatcher, // CONTAINS_ANY_OF_SET: 9, - containsAllSetMatcher, // CONTAINS_ALL_OF_SET: 10, - partOfSetMatcher, // PART_OF_SET: 11, - ewMatcher, // ENDS_WITH: 12, - swMatcher, // STARTS_WITH: 13, - containsStrMatcher, // CONTAINS_STRING: 14, - dependencyMatcher, // IN_SPLIT_TREATMENT: 15, - booleanMatcher, // EQUAL_TO_BOOLEAN: 16, - stringMatcher // MATCHES_STRING: 17 + allMatcherContext, // ALL_KEYS: 1, + segmentMatcherContext, // IN_SEGMENT: 2, + whitelistMatcherContext, // WHITELIST: 3, + equalToMatcherContext, // EQUAL_TO: 4, + greaterThanEqualMatcherContext, // GREATER_THAN_OR_EQUAL_TO: 5, + lessThanEqualMatcherContext, // LESS_THAN_OR_EQUAL_TO: 6, + betweenMatcherContext, // BETWEEN: 7, + equalToSetMatcherContext, // EQUAL_TO_SET: 8, + containsAnySetMatcherContext, // CONTAINS_ANY_OF_SET: 9, + containsAllSetMatcherContext, // CONTAINS_ALL_OF_SET: 10, + partOfSetMatcherContext, // PART_OF_SET: 11, + endsWithMatcherContext, // ENDS_WITH: 12, + startsWithMatcherContext, // STARTS_WITH: 13, + containsStringMatcherContext, // CONTAINS_STRING: 14, + dependencyMatcherContext, // IN_SPLIT_TREATMENT: 15, + booleanMatcherContext, // EQUAL_TO_BOOLEAN: 16, + stringMatcherContext // MATCHES_STRING: 17 ]; /** * Matcher factory. */ -export default function matcherFactory(log: ILogger, matcherDto: IMatcherDto, storage?: IStorageSync | IStorageAsync): IMatcher | undefined { +export function matcherFactory(log: ILogger, matcherDto: IMatcherDto, storage?: IStorageSync | IStorageAsync): IMatcher | undefined { let { type, value diff --git a/src/evaluator/matchers/lte.ts b/src/evaluator/matchers/lte.ts index 06883b94..b2ebeeb6 100644 --- a/src/evaluator/matchers/lte.ts +++ b/src/evaluator/matchers/lte.ts @@ -1,7 +1,7 @@ import { ENGINE_MATCHER_LESS } from '../../logger/constants'; import { ILogger } from '../../logger/types'; -export default function lessThanEqualMatcherContext(log: ILogger, ruleAttr: number) /*: function */ { +export function lessThanEqualMatcherContext(log: ILogger, ruleAttr: number) /*: function */ { return function lessThanEqualMatcher(runtimeAttr: number): boolean { let isLessEqualThan = runtimeAttr <= ruleAttr; diff --git a/src/evaluator/matchers/part_of.ts b/src/evaluator/matchers/part_of.ts index ccabf3e4..75385731 100644 --- a/src/evaluator/matchers/part_of.ts +++ b/src/evaluator/matchers/part_of.ts @@ -2,7 +2,7 @@ import { findIndex } from '../../utils/lang'; import { ILogger } from '../../logger/types'; import { ENGINE_MATCHER_PART_OF } from '../../logger/constants'; -export default function partOfMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { +export function partOfSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { return function partOfMatcher(runtimeAttr: string[]): boolean { // To be part of the length should be minor or equal. let isPartOf = runtimeAttr.length <= ruleAttr.length; diff --git a/src/evaluator/matchers/segment.ts b/src/evaluator/matchers/segment.ts index 3e9db7d5..ad5ec30a 100644 --- a/src/evaluator/matchers/segment.ts +++ b/src/evaluator/matchers/segment.ts @@ -1,10 +1,10 @@ import { MaybeThenable } from '../../dtos/types'; import { ISegmentsCacheBase } from '../../storages/types'; import { ILogger } from '../../logger/types'; -import thenable from '../../utils/promise/thenable'; +import { thenable } from '../../utils/promise/thenable'; import { ENGINE_MATCHER_SEGMENT } from '../../logger/constants'; -export default function matcherSegmentContext(log: ILogger, segmentName: string, storage: { segments: ISegmentsCacheBase }) { +export function segmentMatcherContext(log: ILogger, segmentName: string, storage: { segments: ISegmentsCacheBase }) { return function segmentMatcher(key: string): MaybeThenable { const isInSegment = storage.segments.isInSegment(segmentName, key); diff --git a/src/evaluator/matchers/string.ts b/src/evaluator/matchers/string.ts index f0e0512f..81e8bc48 100644 --- a/src/evaluator/matchers/string.ts +++ b/src/evaluator/matchers/string.ts @@ -1,7 +1,7 @@ import { ENGINE_MATCHER_STRING_INVALID, ENGINE_MATCHER_STRING } from '../../logger/constants'; import { ILogger } from '../../logger/types'; -export default function stringMatcherContext(log: ILogger, ruleAttr: string) /*: Function */ { +export function stringMatcherContext(log: ILogger, ruleAttr: string) /*: Function */ { return function stringMatcher(runtimeAttr: string): boolean { let re; diff --git a/src/evaluator/matchers/sw.ts b/src/evaluator/matchers/sw.ts index e2bfc03e..7f014b20 100644 --- a/src/evaluator/matchers/sw.ts +++ b/src/evaluator/matchers/sw.ts @@ -2,7 +2,7 @@ import { ENGINE_MATCHER_STARTS_WITH } from '../../logger/constants'; import { ILogger } from '../../logger/types'; import { startsWith } from '../../utils/lang'; -export default function startsWithMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { +export function startsWithMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ { return function startsWithMatcher(runtimeAttr: string): boolean { let matches = ruleAttr.some(e => startsWith(runtimeAttr, e)); diff --git a/src/evaluator/matchers/whitelist.ts b/src/evaluator/matchers/whitelist.ts index b84cb129..54fb35c8 100644 --- a/src/evaluator/matchers/whitelist.ts +++ b/src/evaluator/matchers/whitelist.ts @@ -2,7 +2,7 @@ import { setToArray, ISet } from '../../utils/lang/sets'; import { ILogger } from '../../logger/types'; import { ENGINE_MATCHER_WHITELIST } from '../../logger/constants'; -export default function whitelistMatcherContext(log: ILogger, ruleAttr: ISet) /*: Function */ { +export function whitelistMatcherContext(log: ILogger, ruleAttr: ISet) /*: Function */ { return function whitelistMatcher(runtimeAttr: string): boolean { let isInWhitelist = ruleAttr.has(runtimeAttr); diff --git a/src/evaluator/matchersTransform/__tests__/segment.spec.ts b/src/evaluator/matchersTransform/__tests__/segment.spec.ts index bfc9c2a8..1d25811e 100644 --- a/src/evaluator/matchersTransform/__tests__/segment.spec.ts +++ b/src/evaluator/matchersTransform/__tests__/segment.spec.ts @@ -1,4 +1,4 @@ -import transform from '../segment'; +import { segmentTransform } from '../segment'; test('TRANSFORMS / a segment object should be flatten to a string', function () { const segmentName = 'employees'; @@ -6,14 +6,14 @@ test('TRANSFORMS / a segment object should be flatten to a string', function () segmentName }; - const plainSegmentName = transform(sample); + const plainSegmentName = segmentTransform(sample); expect(segmentName).toBe(plainSegmentName); // extracted segmentName matches }); test('TRANSFORMS / if there is none segmentName entry, returns undefined', function () { const sample = undefined; - const undefinedSegmentName = transform(sample); + const undefinedSegmentName = segmentTransform(sample); expect(undefinedSegmentName).toBe(undefined); // expected to be undefined }); diff --git a/src/evaluator/matchersTransform/__tests__/whitelist.spec.ts b/src/evaluator/matchersTransform/__tests__/whitelist.spec.ts index c171631b..5f846390 100644 --- a/src/evaluator/matchersTransform/__tests__/whitelist.spec.ts +++ b/src/evaluator/matchersTransform/__tests__/whitelist.spec.ts @@ -1,4 +1,4 @@ -import transform from '../whitelist'; +import { whitelistTransform } from '../whitelist'; test('TRANSFORMS / a whitelist Array should be casted into a Set', function () { let sample = { @@ -9,7 +9,7 @@ test('TRANSFORMS / a whitelist Array should be casted into a Set', function () { ] }; - let sampleSet = transform(sample); + let sampleSet = whitelistTransform(sample); sample.whitelist.forEach(item => { if (!sampleSet.has(item)) { @@ -18,7 +18,7 @@ test('TRANSFORMS / a whitelist Array should be casted into a Set', function () { }); // @ts-ignore - sampleSet = transform({}); + sampleSet = whitelistTransform({}); expect(sampleSet.size).toBe(0); // Empty Set if passed an object without a whitelist expect(true).toBe(true); // Everything looks fine diff --git a/src/evaluator/matchersTransform/index.ts b/src/evaluator/matchersTransform/index.ts index abb1c8b0..b63b47f7 100644 --- a/src/evaluator/matchersTransform/index.ts +++ b/src/evaluator/matchersTransform/index.ts @@ -1,9 +1,9 @@ import { findIndex } from '../../utils/lang'; import { matcherTypes, matcherTypesMapper, matcherDataTypes } from '../matchers/matcherTypes'; -import segmentTransform from './segment'; -import whitelistTransform from './whitelist'; -import setTransform from './set'; -import numericTransform from './unaryNumeric'; +import { segmentTransform } from './segment'; +import { whitelistTransform } from './whitelist'; +import { setTransform } from './set'; +import { numericTransform } from './unaryNumeric'; import { zeroSinceHH, zeroSinceSS } from '../convertions'; import { IBetweenMatcherData, IInSegmentMatcherData, ISplitMatcher, IUnaryNumericMatcherData, IWhitelistMatcherData } from '../../dtos/types'; import { IMatcherDto } from '../types'; @@ -11,7 +11,7 @@ import { IMatcherDto } from '../types'; /** * Flat the complex matcherGroup structure into something handy. */ -export default function matchersTransform(matchers: ISplitMatcher[]): IMatcherDto[] { +export function matchersTransform(matchers: ISplitMatcher[]): IMatcherDto[] { let parsedMatchers = matchers.map(matcher => { let { diff --git a/src/evaluator/matchersTransform/segment.ts b/src/evaluator/matchersTransform/segment.ts index 40783b8f..00674cf2 100644 --- a/src/evaluator/matchersTransform/segment.ts +++ b/src/evaluator/matchersTransform/segment.ts @@ -3,6 +3,6 @@ import { IInSegmentMatcherData } from '../../dtos/types'; /** * Extract segment name as a plain string. */ -export default function transform(segment?: IInSegmentMatcherData) { +export function segmentTransform(segment?: IInSegmentMatcherData) { return segment ? segment.segmentName : undefined; } diff --git a/src/evaluator/matchersTransform/set.ts b/src/evaluator/matchersTransform/set.ts index bc130fa1..aefbe612 100644 --- a/src/evaluator/matchersTransform/set.ts +++ b/src/evaluator/matchersTransform/set.ts @@ -3,6 +3,6 @@ import { IWhitelistMatcherData } from '../../dtos/types'; /** * Extract whitelist array. Used by set and string matchers */ -export default function transform(whitelistObject: IWhitelistMatcherData) { +export function setTransform(whitelistObject: IWhitelistMatcherData) { return whitelistObject.whitelist; } diff --git a/src/evaluator/matchersTransform/unaryNumeric.ts b/src/evaluator/matchersTransform/unaryNumeric.ts index b8df02f6..701e9925 100644 --- a/src/evaluator/matchersTransform/unaryNumeric.ts +++ b/src/evaluator/matchersTransform/unaryNumeric.ts @@ -3,6 +3,6 @@ import { IUnaryNumericMatcherData } from '../../dtos/types'; /** * Extract value from unary matcher data. */ -export default function transform(unaryNumericObject: IUnaryNumericMatcherData) { +export function numericTransform(unaryNumericObject: IUnaryNumericMatcherData) { return unaryNumericObject.value; } diff --git a/src/evaluator/matchersTransform/whitelist.ts b/src/evaluator/matchersTransform/whitelist.ts index 635bf935..8b74870d 100644 --- a/src/evaluator/matchersTransform/whitelist.ts +++ b/src/evaluator/matchersTransform/whitelist.ts @@ -4,6 +4,6 @@ import { _Set } from '../../utils/lang/sets'; /** * Extract whitelist as a set. Used by 'WHITELIST' matcher. */ -export default function transform(whitelistObject: IWhitelistMatcherData) { +export function whitelistTransform(whitelistObject: IWhitelistMatcherData) { return new _Set(whitelistObject.whitelist); } diff --git a/src/evaluator/parser/__tests__/boolean.spec.ts b/src/evaluator/parser/__tests__/boolean.spec.ts index 81f8a30b..7d304ec9 100644 --- a/src/evaluator/parser/__tests__/boolean.spec.ts +++ b/src/evaluator/parser/__tests__/boolean.spec.ts @@ -1,4 +1,4 @@ -import parser from '..'; +import { parser } from '..'; import { keyParser } from '../../../utils/key'; import { ISplitCondition } from '../../../dtos/types'; import { IEvaluation } from '../../types'; diff --git a/src/evaluator/parser/__tests__/index.spec.ts b/src/evaluator/parser/__tests__/index.spec.ts index a27fecc7..41176fbd 100644 --- a/src/evaluator/parser/__tests__/index.spec.ts +++ b/src/evaluator/parser/__tests__/index.spec.ts @@ -1,5 +1,5 @@ // @ts-nocheck -import parser from '..'; +import { parser } from '..'; import { keyParser } from '../../../utils/key'; import { ISplitCondition } from '../../../dtos/types'; import { bucket } from '../../../utils/murmur3/murmur3'; diff --git a/src/evaluator/parser/__tests__/invalidMatcher.spec.ts b/src/evaluator/parser/__tests__/invalidMatcher.spec.ts index 3ff988bd..1920bf91 100644 --- a/src/evaluator/parser/__tests__/invalidMatcher.spec.ts +++ b/src/evaluator/parser/__tests__/invalidMatcher.spec.ts @@ -1,5 +1,5 @@ // @ts-nocheck -import parser from '..'; +import { parser } from '..'; import { ISplitCondition } from '../../../dtos/types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/parser/__tests__/regex.spec.ts b/src/evaluator/parser/__tests__/regex.spec.ts index ee2b0904..176c961a 100644 --- a/src/evaluator/parser/__tests__/regex.spec.ts +++ b/src/evaluator/parser/__tests__/regex.spec.ts @@ -1,4 +1,4 @@ -import parser from '..'; +import { parser } from '..'; import { keyParser } from '../../../utils/key'; import { ISplitCondition } from '../../../dtos/types'; import { IEvaluation } from '../../types'; diff --git a/src/evaluator/parser/__tests__/set.spec.ts b/src/evaluator/parser/__tests__/set.spec.ts index de652ed3..5d46abb8 100644 --- a/src/evaluator/parser/__tests__/set.spec.ts +++ b/src/evaluator/parser/__tests__/set.spec.ts @@ -1,5 +1,5 @@ // @ts-nocheck -import parser from '..'; +import { parser } from '..'; import { keyParser } from '../../../utils/key'; import { ISplitCondition } from '../../../dtos/types'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/parser/__tests__/string.spec.ts b/src/evaluator/parser/__tests__/string.spec.ts index 326ade21..dc10f3c6 100644 --- a/src/evaluator/parser/__tests__/string.spec.ts +++ b/src/evaluator/parser/__tests__/string.spec.ts @@ -1,5 +1,5 @@ // @ts-nocheck -import parser from '..'; +import { parser } from '..'; import { ISplitCondition } from '../../../dtos/types'; import { keyParser } from '../../../utils/key'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/evaluator/parser/__tests__/trafficAllocation.spec.ts b/src/evaluator/parser/__tests__/trafficAllocation.spec.ts index ddf5afae..d9af5ca9 100644 --- a/src/evaluator/parser/__tests__/trafficAllocation.spec.ts +++ b/src/evaluator/parser/__tests__/trafficAllocation.spec.ts @@ -1,5 +1,5 @@ // @ts-nocheck -import parser from '..'; +import { parser } from '..'; import { keyParser } from '../../../utils/key'; import { ISplitCondition } from '../../../dtos/types'; import { IEvaluation } from '../../types'; diff --git a/src/evaluator/parser/index.ts b/src/evaluator/parser/index.ts index 4fdc6f0f..8e53a321 100644 --- a/src/evaluator/parser/index.ts +++ b/src/evaluator/parser/index.ts @@ -1,18 +1,18 @@ -import matchersTransform from '../matchersTransform'; -import Treatments from '../treatments'; -import matcherFactory from '../matchers'; -import sanitizeValue from '../value'; -import conditionFactory from '../condition'; -import ifElseIfCombiner from '../combiners/ifelseif'; -import andCombiner from '../combiners/and'; -import thenable from '../../utils/promise/thenable'; +import { matchersTransform } from '../matchersTransform'; +import { Treatments } from '../treatments'; +import { matcherFactory } from '../matchers'; +import { sanitizeValue } from '../value'; +import { conditionContext } from '../condition'; +import { ifElseIfCombinerContext } from '../combiners/ifelseif'; +import { andCombinerContext } from '../combiners/and'; +import { thenable } from '../../utils/promise/thenable'; import { IEvaluator, IMatcherDto, ISplitEvaluator } from '../types'; import { ISplitCondition } from '../../dtos/types'; import { IStorageAsync, IStorageSync } from '../../storages/types'; import { SplitIO } from '../../types'; import { ILogger } from '../../logger/types'; -export default function parser(log: ILogger, conditions: ISplitCondition[], storage: IStorageSync | IStorageAsync): IEvaluator { +export function parser(log: ILogger, conditions: ISplitCondition[], storage: IStorageSync | IStorageAsync): IEvaluator { let predicates = []; for (let i = 0; i < conditions.length; i++) { @@ -53,9 +53,9 @@ export default function parser(log: ILogger, conditions: ISplitCondition[], stor break; } - predicates.push(conditionFactory( + predicates.push(conditionContext( log, - andCombiner(log, expressions), + andCombinerContext(log, expressions), Treatments.parse(partitions), label, conditionType @@ -63,5 +63,5 @@ export default function parser(log: ILogger, conditions: ISplitCondition[], stor } // Instanciate evaluator given the set of conditions using if else if logic - return ifElseIfCombiner(log, predicates); + return ifElseIfCombinerContext(log, predicates); } diff --git a/src/evaluator/treatments/__tests__/index.spec.ts b/src/evaluator/treatments/__tests__/index.spec.ts index 453fb224..771127f1 100644 --- a/src/evaluator/treatments/__tests__/index.spec.ts +++ b/src/evaluator/treatments/__tests__/index.spec.ts @@ -1,4 +1,4 @@ -import Treatments from '..'; +import { Treatments } from '..'; test('TREATMENTS / parse 2 treatments', () => { let t = Treatments.parse([{ diff --git a/src/evaluator/treatments/index.ts b/src/evaluator/treatments/index.ts index 665bfd33..35f7da28 100644 --- a/src/evaluator/treatments/index.ts +++ b/src/evaluator/treatments/index.ts @@ -1,7 +1,7 @@ import { ISplitPartition } from '../../dtos/types'; import { findIndex } from '../../utils/lang'; -export default class Treatments { +export class Treatments { private _ranges: number[]; private _treatments: string[]; diff --git a/src/evaluator/value/index.ts b/src/evaluator/value/index.ts index 228d7d0a..319e05e2 100644 --- a/src/evaluator/value/index.ts +++ b/src/evaluator/value/index.ts @@ -1,7 +1,7 @@ import { SplitIO } from '../../types'; import { IMatcherDto } from '../types'; import { ILogger } from '../../logger/types'; -import sanitizeValue from './sanitize'; +import { sanitize } from './sanitize'; import { ENGINE_VALUE, ENGINE_VALUE_NO_ATTRIBUTES, ENGINE_VALUE_INVALID } from '../../logger/constants'; function parseValue(log: ILogger, key: string, attributeName: string | null, attributes: SplitIO.Attributes) { @@ -23,10 +23,10 @@ function parseValue(log: ILogger, key: string, attributeName: string | null, att /** * Defines value to be matched (key / attribute). */ -export default function value(log: ILogger, key: string, matcherDto: IMatcherDto, attributes: SplitIO.Attributes) { +export function sanitizeValue(log: ILogger, key: string, matcherDto: IMatcherDto, attributes: SplitIO.Attributes) { const attributeName = matcherDto.attribute; const valueToMatch = parseValue(log, key, attributeName, attributes); - const sanitizedValue = sanitizeValue(log, matcherDto.type, valueToMatch, matcherDto.dataType, attributes); + const sanitizedValue = sanitize(log, matcherDto.type, valueToMatch, matcherDto.dataType, attributes); if (sanitizedValue !== undefined) { return sanitizedValue; diff --git a/src/evaluator/value/sanitize.ts b/src/evaluator/value/sanitize.ts index 7ca7b5cd..6a36a59d 100644 --- a/src/evaluator/value/sanitize.ts +++ b/src/evaluator/value/sanitize.ts @@ -69,7 +69,7 @@ function getProcessingFunction(matcherTypeID: number, dataType: string) { /** * Sanitize matcher value */ -export default function sanitize(log: ILogger, matcherTypeID: number, value: string | number | boolean | Array | undefined, dataType: string, attributes: SplitIO.Attributes) { +export function sanitize(log: ILogger, matcherTypeID: number, value: string | number | boolean | Array | undefined, dataType: string, attributes: SplitIO.Attributes) { const processor = getProcessingFunction(matcherTypeID, dataType); let sanitizedValue: string | number | boolean | Array | IDependencyMatcherValue | undefined; diff --git a/src/integrations/__tests__/browser.spec.ts b/src/integrations/__tests__/browser.spec.ts index 1b79d8bb..40316654 100644 --- a/src/integrations/__tests__/browser.spec.ts +++ b/src/integrations/__tests__/browser.spec.ts @@ -33,7 +33,7 @@ function clearMocks() { } // Test target -import browserIMF from '../browser'; +import { integrationsManagerFactory as browserIMF } from '../browser'; import { BrowserIntegration } from '../ga/types'; describe('IntegrationsManagerFactory for browser', () => { diff --git a/src/integrations/browser.ts b/src/integrations/browser.ts index f3a17713..d4ad8de8 100644 --- a/src/integrations/browser.ts +++ b/src/integrations/browser.ts @@ -1,7 +1,7 @@ import { GOOGLE_ANALYTICS_TO_SPLIT, SPLIT_TO_GOOGLE_ANALYTICS } from '../utils/constants/browser'; import { IIntegration, IIntegrationManager, IIntegrationFactoryParams } from './types'; import { BrowserIntegration } from './ga/types'; -import pluggableIntegrationsManagerFactory from './pluggable'; +import { pluggableIntegrationsManagerFactory } from './pluggable'; import { GoogleAnalyticsToSplit } from './ga/GoogleAnalyticsToSplit'; import { SplitToGoogleAnalytics } from './ga/SplitToGoogleAnalytics'; @@ -14,7 +14,7 @@ import { SplitToGoogleAnalytics } from './ga/SplitToGoogleAnalytics'; * * @returns integration manager or undefined if `integrations` are not present in settings. */ -export default function integrationsManagerFactory( +export function integrationsManagerFactory( integrations: BrowserIntegration[], params: IIntegrationFactoryParams ): IIntegrationManager | undefined { diff --git a/src/integrations/ga/GaToSplit.ts b/src/integrations/ga/GaToSplit.ts index 360c93a1..334f6baa 100644 --- a/src/integrations/ga/GaToSplit.ts +++ b/src/integrations/ga/GaToSplit.ts @@ -1,5 +1,5 @@ /* eslint-disable no-undef */ -import objectAssign from 'object-assign'; +import { objectAssign } from '../../utils/lang/objectAssign'; import { isString, isFiniteNumber, uniqAsStrings } from '../../utils/lang'; import { validateEvent, diff --git a/src/integrations/pluggable.ts b/src/integrations/pluggable.ts index 14544f73..aed6806c 100644 --- a/src/integrations/pluggable.ts +++ b/src/integrations/pluggable.ts @@ -11,7 +11,7 @@ import { IIntegration, IIntegrationManager, IIntegrationFactoryParams } from './ * * @returns integration manager or undefined if `integrations` are not present in settings. */ -export default function integrationsManagerFactory( +export function pluggableIntegrationsManagerFactory( integrations: Array<(params: IIntegrationFactoryParams) => IIntegration | void>, params: IIntegrationFactoryParams ): IIntegrationManager | undefined { diff --git a/src/listeners/__tests__/browser.spec.ts b/src/listeners/__tests__/browser.spec.ts index f232b482..8af13e8b 100644 --- a/src/listeners/__tests__/browser.spec.ts +++ b/src/listeners/__tests__/browser.spec.ts @@ -1,4 +1,4 @@ -import BrowserSignalListener from '../browser'; +import { BrowserSignalListener } from '../browser'; import { IEventsCacheSync, IImpressionCountsCacheSync, IImpressionsCacheSync, IStorageSync } from '../../storages/types'; import { ISplitApi } from '../../services/types'; import { fullSettings } from '../../utils/settingsValidation/__tests__/settings.mocks'; diff --git a/src/listeners/__tests__/node.spec.ts b/src/listeners/__tests__/node.spec.ts index 1755fa7d..bc594df9 100644 --- a/src/listeners/__tests__/node.spec.ts +++ b/src/listeners/__tests__/node.spec.ts @@ -1,4 +1,4 @@ -import NodeSignalListener from '../node'; +import { NodeSignalListener } from '../node'; import { fullSettings } from '../../utils/settingsValidation/__tests__/settings.mocks'; const processOnSpy = jest.spyOn(process, 'on'); diff --git a/src/listeners/browser.ts b/src/listeners/browser.ts index 4ac90bfc..9705af2c 100644 --- a/src/listeners/browser.ts +++ b/src/listeners/browser.ts @@ -8,7 +8,7 @@ import { IResponse, ISplitApi } from '../services/types'; import { ImpressionDTO, ISettings } from '../types'; import { ImpressionsPayload } from '../sync/submitters/types'; import { OPTIMIZED, DEBUG } from '../utils/constants'; -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { CLEANUP_REGISTERING, CLEANUP_DEREGISTERING } from '../logger/constants'; import { ISyncManager } from '../sync/types'; @@ -19,7 +19,7 @@ const EVENT_NAME = 'for unload page event.'; /** * We'll listen for 'unload' event over the window object, since it's the standard way to listen page reload and close. */ -export default class BrowserSignalListener implements ISignalListener { +export class BrowserSignalListener implements ISignalListener { private fromImpressionsCollector: (data: ImpressionDTO[]) => ImpressionsPayload; diff --git a/src/listeners/node.ts b/src/listeners/node.ts index 9d8a22e9..f57557be 100644 --- a/src/listeners/node.ts +++ b/src/listeners/node.ts @@ -1,6 +1,6 @@ // @TODO eventually migrate to JS-Node-SDK package. import { ISignalListener } from './types'; -import thenable from '../utils/promise/thenable'; +import { thenable } from '../utils/promise/thenable'; import { MaybeThenable } from '../dtos/types'; import { ISettings } from '../types'; import { LOG_PREFIX_CLEANUP, CLEANUP_REGISTERING, CLEANUP_DEREGISTERING } from '../logger/constants'; @@ -16,7 +16,7 @@ const EVENT_NAME = 'for SIGTERM signal.'; * you should call the cleanup logic yourself, since we cannot ensure the data is sent after * the process is already exiting. */ -export default class NodeSignalListener implements ISignalListener { +export class NodeSignalListener implements ISignalListener { private handler: () => MaybeThenable; private settings: ISettings; diff --git a/src/logger/index.ts b/src/logger/index.ts index ed2e5032..4fba156a 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -1,4 +1,4 @@ -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { ILoggerOptions, ILogger } from './types'; import { find } from '../utils/lang'; import { LogLevel } from '../types'; diff --git a/src/readiness/__tests__/sdkReadinessManager.spec.ts b/src/readiness/__tests__/sdkReadinessManager.spec.ts index 5bfda13e..c1929bdc 100644 --- a/src/readiness/__tests__/sdkReadinessManager.spec.ts +++ b/src/readiness/__tests__/sdkReadinessManager.spec.ts @@ -2,7 +2,7 @@ import { loggerMock } from '../../logger/__tests__/sdkLogger.mock'; import { IEventEmitter } from '../../types'; import { SDK_READY, SDK_READY_FROM_CACHE, SDK_READY_TIMED_OUT, SDK_UPDATE } from '../constants'; -import sdkReadinessManagerFactory from '../sdkReadinessManager'; +import { sdkReadinessManagerFactory } from '../sdkReadinessManager'; import { IReadinessManager } from '../types'; import { ERROR_CLIENT_LISTENER, CLIENT_READY_FROM_CACHE, CLIENT_READY, CLIENT_NO_LISTENER } from '../../logger/constants'; diff --git a/src/readiness/readinessManager.ts b/src/readiness/readinessManager.ts index 394ba056..7e0c0431 100644 --- a/src/readiness/readinessManager.ts +++ b/src/readiness/readinessManager.ts @@ -1,4 +1,4 @@ -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { IEventEmitter } from '../types'; import { SDK_SPLITS_ARRIVED, SDK_SPLITS_CACHE_LOADED, SDK_SEGMENTS_ARRIVED, SDK_READY_TIMED_OUT, SDK_READY_FROM_CACHE, SDK_UPDATE, SDK_READY } from './constants'; import { IReadinessEventEmitter, IReadinessManager, ISegmentsEventEmitter, ISplitsEventEmitter } from './types'; @@ -12,7 +12,7 @@ function splitsEventEmitterFactory(EventEmitter: new () => IEventEmitter): ISpli // `isSplitKill` condition avoids an edge-case of wrongly emitting SDK_READY if: // - `/mySegments` fetch and SPLIT_KILL occurs before `/splitChanges` fetch, and // - storage has cached splits (for which case `splitsStorage.killLocally` can return true) - splitsEventEmitter.on(SDK_SPLITS_ARRIVED, (isSplitKill) => { if (!isSplitKill) splitsEventEmitter.splitsArrived = true; }); + splitsEventEmitter.on(SDK_SPLITS_ARRIVED, (isSplitKill: boolean) => { if (!isSplitKill) splitsEventEmitter.splitsArrived = true; }); splitsEventEmitter.once(SDK_SPLITS_CACHE_LOADED, () => { splitsEventEmitter.splitsCacheLoaded = true; }); return splitsEventEmitter; diff --git a/src/readiness/sdkReadinessManager.ts b/src/readiness/sdkReadinessManager.ts index 360527c2..52f519ad 100644 --- a/src/readiness/sdkReadinessManager.ts +++ b/src/readiness/sdkReadinessManager.ts @@ -1,5 +1,5 @@ -import objectAssign from 'object-assign'; -import promiseWrapper from '../utils/promise/wrapper'; +import { objectAssign } from '../utils/lang/objectAssign'; +import { promiseWrapper } from '../utils/promise/wrapper'; import { readinessManagerFactory } from './readinessManager'; import { ISdkReadinessManager } from './types'; import { IEventEmitter } from '../types'; @@ -19,7 +19,7 @@ const REMOVE_LISTENER_EVENT = 'removeListener'; * by the SDK. It is required to properly log the warning 'No listeners for SDK Readiness detected' * @param readinessManager optional readinessManager to use. only used internally for `shared` method */ -export default function sdkReadinessManagerFactory( +export function sdkReadinessManagerFactory( log: ILogger, EventEmitter: new () => IEventEmitter, readyTimeout = 0, diff --git a/src/sdkClient/__tests__/sdkClientMethodCS.spec.ts b/src/sdkClient/__tests__/sdkClientMethodCS.spec.ts index 345909f9..0a5c8e59 100644 --- a/src/sdkClient/__tests__/sdkClientMethodCS.spec.ts +++ b/src/sdkClient/__tests__/sdkClientMethodCS.spec.ts @@ -4,7 +4,7 @@ import { assertClientApi } from './testUtils'; /** Mocks */ import * as clientCS from '../clientCS'; -const clientCSDecoratorSpy = jest.spyOn(clientCS, 'default'); +const clientCSDecoratorSpy = jest.spyOn(clientCS, 'clientCSDecorator'); import { settingsWithKey, settingsWithKeyAndTT, settingsWithKeyObject } from '../../utils/settingsValidation/__tests__/settings.mocks'; diff --git a/src/sdkClient/client.ts b/src/sdkClient/client.ts index c6889678..a572047e 100644 --- a/src/sdkClient/client.ts +++ b/src/sdkClient/client.ts @@ -1,5 +1,5 @@ import { evaluateFeature, evaluateFeatures } from '../evaluator'; -import thenable from '../utils/promise/thenable'; +import { thenable } from '../utils/promise/thenable'; import { getMatching, getBucketing } from '../utils/key'; import { validateSplitExistance } from '../utils/inputValidation/splitExistance'; import { validateTrafficTypeExistance } from '../utils/inputValidation/trafficTypeExistance'; @@ -15,7 +15,7 @@ import { IMPRESSION, IMPRESSION_QUEUEING } from '../logger/constants'; * Creator of base client with getTreatments and track methods. */ // @TODO missing time tracking to collect telemetry -export default function clientFactory(params: IClientFactoryParams): SplitIO.IClient | SplitIO.IAsyncClient { +export function clientFactory(params: IClientFactoryParams): SplitIO.IClient | SplitIO.IAsyncClient { const { sdkReadinessManager: { readinessManager }, storage, settings: { log, mode }, impressionsTracker, eventTracker } = params; function getTreatment(key: SplitIO.SplitKey, splitName: string, attributes: SplitIO.Attributes | undefined, withConfig = false) { diff --git a/src/sdkClient/clientCS.ts b/src/sdkClient/clientCS.ts index 50a4ba2e..dee6a6af 100644 --- a/src/sdkClient/clientCS.ts +++ b/src/sdkClient/clientCS.ts @@ -1,4 +1,4 @@ -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { SplitIO } from '../types'; @@ -9,7 +9,7 @@ import { SplitIO } from '../types'; * @param key validated split key * @param trafficType validated traffic type */ -export default function clientCSDecorator(client: SplitIO.IClient, key: SplitIO.SplitKey, trafficType?: string): SplitIO.ICsClient { +export function clientCSDecorator(client: SplitIO.IClient, key: SplitIO.SplitKey, trafficType?: string): SplitIO.ICsClient { return objectAssign(client, { // In the client-side API, we bind a key to the client `getTreatment*` methods getTreatment: client.getTreatment.bind(client, key), diff --git a/src/sdkClient/clientInputValidation.ts b/src/sdkClient/clientInputValidation.ts index c0fc26bf..df0eaebc 100644 --- a/src/sdkClient/clientInputValidation.ts +++ b/src/sdkClient/clientInputValidation.ts @@ -1,4 +1,4 @@ -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { validateAttributes, validateEvent, @@ -22,7 +22,7 @@ import { ILogger } from '../logger/types'; * Decorator that validates the input before actually executing the client methods. * We should "guard" the client here, while not polluting the "real" implementation of those methods. */ -export default function clientInputValidationDecorator(log: ILogger, client: TClient, readinessManager: IReadinessManager, isStorageSync = false): TClient { +export function clientInputValidationDecorator(log: ILogger, client: TClient, readinessManager: IReadinessManager, isStorageSync = false): TClient { /** * Avoid repeating this validations code diff --git a/src/sdkClient/sdkClient.ts b/src/sdkClient/sdkClient.ts index e0401347..6630cd94 100644 --- a/src/sdkClient/sdkClient.ts +++ b/src/sdkClient/sdkClient.ts @@ -1,9 +1,9 @@ -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { IStatusInterface, SplitIO } from '../types'; import { CONSUMER_MODE, CONSUMER_PARTIAL_MODE } from '../utils/constants'; import { releaseApiKey } from '../utils/inputValidation/apiKey'; -import clientFactory from './client'; -import clientInputValidationDecorator from './clientInputValidation'; +import { clientFactory } from './client'; +import { clientInputValidationDecorator } from './clientInputValidation'; import { ISdkClientFactoryParams } from './types'; /** diff --git a/src/sdkClient/sdkClientMethodCS.ts b/src/sdkClient/sdkClientMethodCS.ts index 22254aaf..c0d28f60 100644 --- a/src/sdkClient/sdkClientMethodCS.ts +++ b/src/sdkClient/sdkClientMethodCS.ts @@ -1,11 +1,11 @@ -import clientCSDecorator from './clientCS'; +import { clientCSDecorator } from './clientCS'; import { ISdkClientFactoryParams } from './types'; import { SplitIO } from '../types'; import { validateKey } from '../utils/inputValidation/key'; import { getMatching, keyParser } from '../utils/key'; import { sdkClientFactory } from './sdkClient'; import { ISyncManagerCS } from '../sync/types'; -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { RETRIEVE_CLIENT_DEFAULT, NEW_SHARED_CLIENT, RETRIEVE_CLIENT_EXISTING } from '../logger/constants'; import { SDK_SEGMENTS_ARRIVED } from '../readiness/constants'; diff --git a/src/sdkClient/sdkClientMethodCSWithTT.ts b/src/sdkClient/sdkClientMethodCSWithTT.ts index 6b8fa9ef..1c844296 100644 --- a/src/sdkClient/sdkClientMethodCSWithTT.ts +++ b/src/sdkClient/sdkClientMethodCSWithTT.ts @@ -1,4 +1,4 @@ -import clientCSDecorator from './clientCS'; +import { clientCSDecorator } from './clientCS'; import { ISdkClientFactoryParams } from './types'; import { SplitIO } from '../types'; import { validateKey } from '../utils/inputValidation/key'; @@ -6,7 +6,7 @@ import { validateTrafficType } from '../utils/inputValidation/trafficType'; import { getMatching, keyParser } from '../utils/key'; import { sdkClientFactory } from './sdkClient'; import { ISyncManagerCS } from '../sync/types'; -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { RETRIEVE_CLIENT_DEFAULT, NEW_SHARED_CLIENT, RETRIEVE_CLIENT_EXISTING } from '../logger/constants'; import { SDK_SEGMENTS_ARRIVED } from '../readiness/constants'; diff --git a/src/sdkFactory/index.ts b/src/sdkFactory/index.ts index f074f387..5fe1f10f 100644 --- a/src/sdkFactory/index.ts +++ b/src/sdkFactory/index.ts @@ -1,7 +1,7 @@ import { ISdkFactoryParams } from './types'; -import sdkReadinessManagerFactory from '../readiness/sdkReadinessManager'; -import impressionsTrackerFactory from '../trackers/impressionsTracker'; -import eventTrackerFactory from '../trackers/eventTracker'; +import { sdkReadinessManagerFactory } from '../readiness/sdkReadinessManager'; +import { impressionsTrackerFactory } from '../trackers/impressionsTracker'; +import { eventTrackerFactory } from '../trackers/eventTracker'; import { IStorageFactoryParams, IStorageSync } from '../storages/types'; import { SplitIO } from '../types'; import { ISplitApi } from '../services/types'; diff --git a/src/sdkManager/__tests__/index.asyncCache.spec.ts b/src/sdkManager/__tests__/index.asyncCache.spec.ts index 9829f9e2..202c0016 100644 --- a/src/sdkManager/__tests__/index.asyncCache.spec.ts +++ b/src/sdkManager/__tests__/index.asyncCache.spec.ts @@ -2,10 +2,10 @@ import Redis from 'ioredis'; import splitObject from './mocks/input.json'; import splitView from './mocks/output.json'; import { sdkManagerFactory } from '../index'; -import SplitsCacheInRedis from '../../storages/inRedis/SplitsCacheInRedis'; +import { SplitsCacheInRedis } from '../../storages/inRedis/SplitsCacheInRedis'; import { SplitsCachePluggable } from '../../storages/pluggable/SplitsCachePluggable'; import { wrapperAdapter } from '../../storages/pluggable/wrapperAdapter'; -import KeyBuilderSS from '../../storages/KeyBuilderSS'; +import { KeyBuilderSS } from '../../storages/KeyBuilderSS'; import { ISdkReadinessManager } from '../../readiness/types'; import { loggerMock } from '../../logger/__tests__/sdkLogger.mock'; diff --git a/src/sdkManager/__tests__/index.syncCache.spec.ts b/src/sdkManager/__tests__/index.syncCache.spec.ts index 4da65cd4..96238c1b 100644 --- a/src/sdkManager/__tests__/index.syncCache.spec.ts +++ b/src/sdkManager/__tests__/index.syncCache.spec.ts @@ -1,7 +1,7 @@ import splitObject from './mocks/input.json'; import splitView from './mocks/output.json'; import { sdkManagerFactory } from '../index'; -import SplitsCacheInMemory from '../../storages/inMemory/SplitsCacheInMemory'; +import { SplitsCacheInMemory } from '../../storages/inMemory/SplitsCacheInMemory'; import { ISdkReadinessManager } from '../../readiness/types'; import { loggerMock } from '../../logger/__tests__/sdkLogger.mock'; diff --git a/src/sdkManager/index.ts b/src/sdkManager/index.ts index 2536f121..e0ec5024 100644 --- a/src/sdkManager/index.ts +++ b/src/sdkManager/index.ts @@ -1,5 +1,5 @@ -import objectAssign from 'object-assign'; -import thenable from '../utils/promise/thenable'; +import { objectAssign } from '../utils/lang/objectAssign'; +import { thenable } from '../utils/promise/thenable'; import { find } from '../utils/lang'; import { validateSplit, validateSplitExistance, validateIfNotDestroyed, validateIfOperational } from '../utils/inputValidation'; import { ISplitsCacheAsync, ISplitsCacheSync } from '../storages/types'; diff --git a/src/services/splitApi.ts b/src/services/splitApi.ts index a1856a8e..dbbcb953 100644 --- a/src/services/splitApi.ts +++ b/src/services/splitApi.ts @@ -2,7 +2,7 @@ import { IPlatform } from '../sdkFactory/types'; import { ISettings } from '../types'; import { splitHttpClientFactory } from './splitHttpClient'; import { ISplitApi } from './types'; -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; const noCacheHeaderOptions = { headers: { 'Cache-Control': 'no-cache' } }; diff --git a/src/services/splitHttpClient.ts b/src/services/splitHttpClient.ts index 8f413f5e..ee031149 100644 --- a/src/services/splitHttpClient.ts +++ b/src/services/splitHttpClient.ts @@ -1,5 +1,5 @@ import { IFetch, IRequestOptions, IResponse, ISplitHttpClient } from './types'; -import objectAssign from 'object-assign'; +import { objectAssign } from '../utils/lang/objectAssign'; import { ERROR_HTTP, ERROR_CLIENT_CANNOT_GET_READY } from '../logger/constants'; import { ISettings } from '../types'; diff --git a/src/storages/AbstractSegmentsCacheSync.ts b/src/storages/AbstractSegmentsCacheSync.ts index 6b2799dc..ad371912 100644 --- a/src/storages/AbstractSegmentsCacheSync.ts +++ b/src/storages/AbstractSegmentsCacheSync.ts @@ -6,7 +6,7 @@ import { ISegmentsCacheSync } from './types'; * This class provides a skeletal implementation of the ISegmentsCacheSync interface * to minimize the effort required to implement this interface. */ -export default abstract class AbstractSegmentsCacheSync implements ISegmentsCacheSync { +export abstract class AbstractSegmentsCacheSync implements ISegmentsCacheSync { /** * For server-side synchronizer: add `segmentKeys` list of keys to `name` segment. * For client-side synchronizer: add `name` segment to the cache. `segmentKeys` is undefined. diff --git a/src/storages/AbstractSplitsCacheAsync.ts b/src/storages/AbstractSplitsCacheAsync.ts index e213b9a3..6c44ffcd 100644 --- a/src/storages/AbstractSplitsCacheAsync.ts +++ b/src/storages/AbstractSplitsCacheAsync.ts @@ -5,7 +5,7 @@ import { ISplit } from '../dtos/types'; * This class provides a skeletal implementation of the ISplitsCacheAsync interface * to minimize the effort required to implement this interface. */ -export default abstract class AbstractSplitsCacheAsync implements ISplitsCacheAsync { +export abstract class AbstractSplitsCacheAsync implements ISplitsCacheAsync { abstract addSplit(name: string, split: string): Promise abstract addSplits(entries: [string, string][]): Promise diff --git a/src/storages/AbstractSplitsCacheSync.ts b/src/storages/AbstractSplitsCacheSync.ts index 9bc31467..e07ee914 100644 --- a/src/storages/AbstractSplitsCacheSync.ts +++ b/src/storages/AbstractSplitsCacheSync.ts @@ -5,7 +5,7 @@ import { ISplit } from '../dtos/types'; * This class provides a skeletal implementation of the ISplitsCacheSync interface * to minimize the effort required to implement this interface. */ -export default abstract class AbstractSplitsCacheSync implements ISplitsCacheSync { +export abstract class AbstractSplitsCacheSync implements ISplitsCacheSync { abstract addSplit(name: string, split: string): boolean; diff --git a/src/storages/KeyBuilder.ts b/src/storages/KeyBuilder.ts index b761b7dd..080ed3d9 100644 --- a/src/storages/KeyBuilder.ts +++ b/src/storages/KeyBuilder.ts @@ -12,7 +12,7 @@ export function validatePrefix(prefix: unknown) { DEFAULT_PREFIX; // use default prefix if none is provided } -export default class KeyBuilder { +export class KeyBuilder { protected readonly prefix: string; diff --git a/src/storages/KeyBuilderCS.ts b/src/storages/KeyBuilderCS.ts index 6bfe7adf..d4f9e902 100644 --- a/src/storages/KeyBuilderCS.ts +++ b/src/storages/KeyBuilderCS.ts @@ -1,7 +1,7 @@ import { startsWith } from '../utils/lang'; -import KeyBuilder from './KeyBuilder'; +import { KeyBuilder } from './KeyBuilder'; -export default class KeyBuilderCS extends KeyBuilder { +export class KeyBuilderCS extends KeyBuilder { protected readonly regexSplitsCacheKey: RegExp; protected readonly matchingKey: string; diff --git a/src/storages/KeyBuilderSS.ts b/src/storages/KeyBuilderSS.ts index 8944eecb..2f8898c1 100644 --- a/src/storages/KeyBuilderSS.ts +++ b/src/storages/KeyBuilderSS.ts @@ -1,11 +1,11 @@ -import KeyBuilder from './KeyBuilder'; +import { KeyBuilder } from './KeyBuilder'; import { IMetadata } from '../dtos/types'; // NOT USED // const everythingAfterCount = /count\.([^/]+)$/; // const latencyMetricNameAndBucket = /latency\.([^/]+)\.bucket\.([0-9]+)$/; -export default class KeyBuilderSS extends KeyBuilder { +export class KeyBuilderSS extends KeyBuilder { protected readonly metadata: IMetadata; diff --git a/src/storages/__tests__/KeyBuilder.spec.ts b/src/storages/__tests__/KeyBuilder.spec.ts index 6016d169..e0b82ebe 100644 --- a/src/storages/__tests__/KeyBuilder.spec.ts +++ b/src/storages/__tests__/KeyBuilder.spec.ts @@ -1,5 +1,5 @@ -import KeyBuilder from '../KeyBuilder'; -import KeyBuilderSS from '../KeyBuilderSS'; +import { KeyBuilder } from '../KeyBuilder'; +import { KeyBuilderSS } from '../KeyBuilderSS'; test('KEYS / splits keys', () => { const builder = new KeyBuilder(); diff --git a/src/storages/findLatencyIndex.ts b/src/storages/findLatencyIndex.ts index b060abd6..908752d9 100644 --- a/src/storages/findLatencyIndex.ts +++ b/src/storages/findLatencyIndex.ts @@ -1,7 +1,7 @@ import { isNaNNumber } from '../utils/lang'; // @TODO add unit tests -export default function findLatencyIndex(latency: number, min = 0, max = 23, base = 1.5): number { +export function findLatencyIndex(latency: number, min = 0, max = 23, base = 1.5): number { const index = Math.min(max, Math.max(min, Math.floor(Math.log(latency) / Math.log(base)))); return isNaNNumber(index) ? 0 : index; // index is NaN if latency is not a positive number } diff --git a/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts b/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts index 12289470..7bc6690a 100644 --- a/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +++ b/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts @@ -1,9 +1,9 @@ import { ILogger } from '../../logger/types'; -import AbstractSegmentsCacheSync from '../AbstractSegmentsCacheSync'; -import KeyBuilderCS from '../KeyBuilderCS'; +import { AbstractSegmentsCacheSync } from '../AbstractSegmentsCacheSync'; +import { KeyBuilderCS } from '../KeyBuilderCS'; import { LOG_PREFIX, DEFINED } from './constants'; -export default class MySegmentsCacheInLocal extends AbstractSegmentsCacheSync { +export class MySegmentsCacheInLocal extends AbstractSegmentsCacheSync { private readonly keys: KeyBuilderCS; private readonly log: ILogger; diff --git a/src/storages/inLocalStorage/SplitsCacheInLocal.ts b/src/storages/inLocalStorage/SplitsCacheInLocal.ts index 68565b55..c35cc15b 100644 --- a/src/storages/inLocalStorage/SplitsCacheInLocal.ts +++ b/src/storages/inLocalStorage/SplitsCacheInLocal.ts @@ -1,14 +1,14 @@ import { ISplit, ISplitFiltersValidation } from '../../dtos/types'; -import AbstractSplitsCacheSync, { usesSegments } from '../AbstractSplitsCacheSync'; +import { AbstractSplitsCacheSync, usesSegments } from '../AbstractSplitsCacheSync'; import { isFiniteNumber, toNumber, isNaNNumber } from '../../utils/lang'; -import KeyBuilderCS from '../KeyBuilderCS'; +import { KeyBuilderCS } from '../KeyBuilderCS'; import { ILogger } from '../../logger/types'; import { LOG_PREFIX } from './constants'; /** * ISplitsCacheSync implementation that stores split definitions in browser LocalStorage. */ -export default class SplitsCacheInLocal extends AbstractSplitsCacheSync { +export class SplitsCacheInLocal extends AbstractSplitsCacheSync { private readonly keys: KeyBuilderCS; private readonly splitFiltersValidation: ISplitFiltersValidation; diff --git a/src/storages/inLocalStorage/__tests__/MySegmentsCacheInLocal.spec.ts b/src/storages/inLocalStorage/__tests__/MySegmentsCacheInLocal.spec.ts index 158f8c2c..36072550 100644 --- a/src/storages/inLocalStorage/__tests__/MySegmentsCacheInLocal.spec.ts +++ b/src/storages/inLocalStorage/__tests__/MySegmentsCacheInLocal.spec.ts @@ -1,5 +1,5 @@ -import MySegmentsCacheInLocal from '../MySegmentsCacheInLocal'; -import KeyBuilderCS from '../../KeyBuilderCS'; +import { MySegmentsCacheInLocal } from '../MySegmentsCacheInLocal'; +import { KeyBuilderCS } from '../../KeyBuilderCS'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; test('SEGMENT CACHE / in LocalStorage', () => { diff --git a/src/storages/inLocalStorage/__tests__/SplitsCacheInLocal.spec.ts b/src/storages/inLocalStorage/__tests__/SplitsCacheInLocal.spec.ts index 0f3172f7..d43bb222 100644 --- a/src/storages/inLocalStorage/__tests__/SplitsCacheInLocal.spec.ts +++ b/src/storages/inLocalStorage/__tests__/SplitsCacheInLocal.spec.ts @@ -1,5 +1,5 @@ -import SplitsCacheInLocal from '../SplitsCacheInLocal'; -import KeyBuilderCS from '../../KeyBuilderCS'; +import { SplitsCacheInLocal } from '../SplitsCacheInLocal'; +import { KeyBuilderCS } from '../../KeyBuilderCS'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; import { splitWithUserTT, splitWithAccountTT, splitWithAccountTTAndUsesSegments } from '../../__tests__/testUtils'; diff --git a/src/storages/inLocalStorage/index.ts b/src/storages/inLocalStorage/index.ts index 795fd95b..0d35341b 100644 --- a/src/storages/inLocalStorage/index.ts +++ b/src/storages/inLocalStorage/index.ts @@ -1,14 +1,14 @@ -import ImpressionsCacheInMemory from '../inMemory/ImpressionsCacheInMemory'; -import ImpressionCountsCacheInMemory from '../inMemory/ImpressionCountsCacheInMemory'; -import EventsCacheInMemory from '../inMemory/EventsCacheInMemory'; +import { ImpressionsCacheInMemory } from '../inMemory/ImpressionsCacheInMemory'; +import { ImpressionCountsCacheInMemory } from '../inMemory/ImpressionCountsCacheInMemory'; +import { EventsCacheInMemory } from '../inMemory/EventsCacheInMemory'; import { IStorageFactoryParams, IStorageSync, IStorageSyncFactory } from '../types'; import { validatePrefix } from '../KeyBuilder'; -import KeyBuilderCS from '../KeyBuilderCS'; +import { KeyBuilderCS } from '../KeyBuilderCS'; import { isLocalStorageAvailable } from '../../utils/env/isLocalStorageAvailable'; -import SplitsCacheInLocal from './SplitsCacheInLocal'; -import MySegmentsCacheInLocal from './MySegmentsCacheInLocal'; -import MySegmentsCacheInMemory from '../inMemory/MySegmentsCacheInMemory'; -import SplitsCacheInMemory from '../inMemory/SplitsCacheInMemory'; +import { SplitsCacheInLocal } from './SplitsCacheInLocal'; +import { MySegmentsCacheInLocal } from './MySegmentsCacheInLocal'; +import { MySegmentsCacheInMemory } from '../inMemory/MySegmentsCacheInMemory'; +import { SplitsCacheInMemory } from '../inMemory/SplitsCacheInMemory'; import { DEFAULT_CACHE_EXPIRATION_IN_MILLIS } from '../../utils/constants/browser'; import { InMemoryStorageCSFactory } from '../inMemory/InMemoryStorageCS'; import { LOG_PREFIX } from './constants'; diff --git a/src/storages/inMemory/CountsCacheInMemory.ts b/src/storages/inMemory/CountsCacheInMemory.ts index 8f5dd1fd..ff7cd591 100644 --- a/src/storages/inMemory/CountsCacheInMemory.ts +++ b/src/storages/inMemory/CountsCacheInMemory.ts @@ -1,6 +1,6 @@ import { ICountsCacheSync } from '../types'; -export default class CountsCacheInMemory implements ICountsCacheSync { +export class CountsCacheInMemory implements ICountsCacheSync { private counters: Record = {}; diff --git a/src/storages/inMemory/EventsCacheInMemory.ts b/src/storages/inMemory/EventsCacheInMemory.ts index e60d00d6..d209cba6 100644 --- a/src/storages/inMemory/EventsCacheInMemory.ts +++ b/src/storages/inMemory/EventsCacheInMemory.ts @@ -3,7 +3,7 @@ import { IEventsCacheSync } from '../types'; const MAX_QUEUE_BYTE_SIZE = 5 * 1024 * 1024; // 5M -export default class EventsCacheInMemory implements IEventsCacheSync { +export class EventsCacheInMemory implements IEventsCacheSync { private onFullQueue?: () => void; private readonly maxQueue: number; diff --git a/src/storages/inMemory/ImpressionCountsCacheInMemory.ts b/src/storages/inMemory/ImpressionCountsCacheInMemory.ts index db6b31c6..f7598d2a 100644 --- a/src/storages/inMemory/ImpressionCountsCacheInMemory.ts +++ b/src/storages/inMemory/ImpressionCountsCacheInMemory.ts @@ -1,7 +1,7 @@ import { truncateTimeFrame } from '../../utils/time'; import { IImpressionCountsCacheSync } from '../types'; -export default class ImpressionCountsCacheInMemory implements IImpressionCountsCacheSync { +export class ImpressionCountsCacheInMemory implements IImpressionCountsCacheSync { private cache: Record = {}; /** diff --git a/src/storages/inMemory/ImpressionsCacheInMemory.ts b/src/storages/inMemory/ImpressionsCacheInMemory.ts index 9b9e3faa..dcbf6b7a 100644 --- a/src/storages/inMemory/ImpressionsCacheInMemory.ts +++ b/src/storages/inMemory/ImpressionsCacheInMemory.ts @@ -1,7 +1,7 @@ import { IImpressionsCacheSync } from '../types'; import { ImpressionDTO } from '../../types'; -export default class ImpressionsCacheInMemory implements IImpressionsCacheSync { +export class ImpressionsCacheInMemory implements IImpressionsCacheSync { private queue: ImpressionDTO[] = []; diff --git a/src/storages/inMemory/InMemoryStorage.ts b/src/storages/inMemory/InMemoryStorage.ts index 173fbf3a..00d666fc 100644 --- a/src/storages/inMemory/InMemoryStorage.ts +++ b/src/storages/inMemory/InMemoryStorage.ts @@ -1,9 +1,9 @@ -import SplitsCacheInMemory from './SplitsCacheInMemory'; -import SegmentsCacheInMemory from './SegmentsCacheInMemory'; -import ImpressionsCacheInMemory from './ImpressionsCacheInMemory'; -import EventsCacheInMemory from './EventsCacheInMemory'; +import { SplitsCacheInMemory } from './SplitsCacheInMemory'; +import { SegmentsCacheInMemory } from './SegmentsCacheInMemory'; +import { ImpressionsCacheInMemory } from './ImpressionsCacheInMemory'; +import { EventsCacheInMemory } from './EventsCacheInMemory'; import { IStorageFactoryParams, IStorageSync } from '../types'; -import ImpressionCountsCacheInMemory from './ImpressionCountsCacheInMemory'; +import { ImpressionCountsCacheInMemory } from './ImpressionCountsCacheInMemory'; import { STORAGE_MEMORY } from '../../utils/constants'; /** diff --git a/src/storages/inMemory/InMemoryStorageCS.ts b/src/storages/inMemory/InMemoryStorageCS.ts index 8f0eff19..7ac34ea8 100644 --- a/src/storages/inMemory/InMemoryStorageCS.ts +++ b/src/storages/inMemory/InMemoryStorageCS.ts @@ -1,9 +1,9 @@ -import SplitsCacheInMemory from './SplitsCacheInMemory'; -import MySegmentsCacheInMemory from './MySegmentsCacheInMemory'; -import ImpressionsCacheInMemory from './ImpressionsCacheInMemory'; -import EventsCacheInMemory from './EventsCacheInMemory'; +import { SplitsCacheInMemory } from './SplitsCacheInMemory'; +import { MySegmentsCacheInMemory } from './MySegmentsCacheInMemory'; +import { ImpressionsCacheInMemory } from './ImpressionsCacheInMemory'; +import { EventsCacheInMemory } from './EventsCacheInMemory'; import { IStorageSync, IStorageFactoryParams } from '../types'; -import ImpressionCountsCacheInMemory from './ImpressionCountsCacheInMemory'; +import { ImpressionCountsCacheInMemory } from './ImpressionCountsCacheInMemory'; import { STORAGE_MEMORY } from '../../utils/constants'; /** diff --git a/src/storages/inMemory/LatenciesCacheInMemory.ts b/src/storages/inMemory/LatenciesCacheInMemory.ts index 2ec6f054..240b5a8b 100644 --- a/src/storages/inMemory/LatenciesCacheInMemory.ts +++ b/src/storages/inMemory/LatenciesCacheInMemory.ts @@ -1,7 +1,7 @@ import { ILatenciesCacheSync } from '../types'; -import findLatencyIndex from '../findLatencyIndex'; +import { findLatencyIndex } from '../findLatencyIndex'; -export default class LatenciesCacheInMemory implements ILatenciesCacheSync { +export class LatenciesCacheInMemory implements ILatenciesCacheSync { private counters: Record = {}; diff --git a/src/storages/inMemory/MySegmentsCacheInMemory.ts b/src/storages/inMemory/MySegmentsCacheInMemory.ts index 041e31cb..02519d18 100644 --- a/src/storages/inMemory/MySegmentsCacheInMemory.ts +++ b/src/storages/inMemory/MySegmentsCacheInMemory.ts @@ -1,10 +1,10 @@ -import AbstractSegmentsCacheSync from '../AbstractSegmentsCacheSync'; +import { AbstractSegmentsCacheSync } from '../AbstractSegmentsCacheSync'; /** * Default MySegmentsCacheInMemory implementation that stores MySegments in memory. * Supported by all JS runtimes. */ -export default class MySegmentsCacheInMemory extends AbstractSegmentsCacheSync { +export class MySegmentsCacheInMemory extends AbstractSegmentsCacheSync { private segmentCache: Record = {}; diff --git a/src/storages/inMemory/SegmentsCacheInMemory.ts b/src/storages/inMemory/SegmentsCacheInMemory.ts index 70f4d691..ca86c86d 100644 --- a/src/storages/inMemory/SegmentsCacheInMemory.ts +++ b/src/storages/inMemory/SegmentsCacheInMemory.ts @@ -1,4 +1,4 @@ -import AbstractSegmentsCacheSync from '../AbstractSegmentsCacheSync'; +import { AbstractSegmentsCacheSync } from '../AbstractSegmentsCacheSync'; import { ISet, _Set } from '../../utils/lang/sets'; import { isIntegerNumber } from '../../utils/lang'; @@ -6,7 +6,7 @@ import { isIntegerNumber } from '../../utils/lang'; * Default ISplitsCacheSync implementation that stores split definitions in memory. * Supported by all JS runtimes. */ -export default class SegmentsCacheInMemory extends AbstractSegmentsCacheSync { +export class SegmentsCacheInMemory extends AbstractSegmentsCacheSync { private segmentCache: Record> = {}; private segmentChangeNumber: Record = {}; diff --git a/src/storages/inMemory/SplitsCacheInMemory.ts b/src/storages/inMemory/SplitsCacheInMemory.ts index 39eefdcf..32b0ed32 100644 --- a/src/storages/inMemory/SplitsCacheInMemory.ts +++ b/src/storages/inMemory/SplitsCacheInMemory.ts @@ -1,12 +1,12 @@ import { ISplit } from '../../dtos/types'; -import AbstractSplitsCacheSync, { usesSegments } from '../AbstractSplitsCacheSync'; +import { AbstractSplitsCacheSync, usesSegments } from '../AbstractSplitsCacheSync'; import { isFiniteNumber } from '../../utils/lang'; /** * Default ISplitsCacheSync implementation that stores split definitions in memory. * Supported by all JS runtimes. */ -export default class SplitsCacheInMemory extends AbstractSplitsCacheSync { +export class SplitsCacheInMemory extends AbstractSplitsCacheSync { private splitsCache: Record = {}; private ttCache: Record = {}; diff --git a/src/storages/inMemory/__tests__/CountsCacheInMemory.spec.ts b/src/storages/inMemory/__tests__/CountsCacheInMemory.spec.ts index e4f411d8..bb8ebcc0 100644 --- a/src/storages/inMemory/__tests__/CountsCacheInMemory.spec.ts +++ b/src/storages/inMemory/__tests__/CountsCacheInMemory.spec.ts @@ -1,7 +1,7 @@ -import CountsCache from '../CountsCacheInMemory'; +import { CountsCacheInMemory } from '../CountsCacheInMemory'; test('COUNT CACHE IN MEMORY / should count metric names incrementatly', () => { - const cache = new CountsCache(); + const cache = new CountsCacheInMemory(); cache.track('counted-metric-one'); cache.track('counted-metric-one'); diff --git a/src/storages/inMemory/__tests__/EventsCacheInMemory.spec.ts b/src/storages/inMemory/__tests__/EventsCacheInMemory.spec.ts index a4d73884..37a6a4ad 100644 --- a/src/storages/inMemory/__tests__/EventsCacheInMemory.spec.ts +++ b/src/storages/inMemory/__tests__/EventsCacheInMemory.spec.ts @@ -1,16 +1,16 @@ // @ts-nocheck -import EventsCache from '../EventsCacheInMemory'; +import { EventsCacheInMemory } from '../EventsCacheInMemory'; test('EVENTS CACHE / Should be able to instantiate and start with an empty queue', () => { let cache; - const createInstance = () => cache = new EventsCache(500); // 500 as eventsQueueSize + const createInstance = () => cache = new EventsCacheInMemory(500); // 500 as eventsQueueSize expect(createInstance).not.toThrow(); // Creation should not throw. expect(cache.state()).toEqual([]); // The queue starts empty. }); test('EVENTS CACHE / Should be able to add items sequentially and retrieve the queue', () => { - const cache = new EventsCache(500); + const cache = new EventsCacheInMemory(500); const queueValues = [1, '2', { p: 3 }, ['4']]; expect(cache.track.bind(cache, queueValues[0])).not.toThrow(); // Calling track should not throw @@ -26,7 +26,7 @@ test('EVENTS CACHE / Should be able to add items sequentially and retrieve the q }); test('EVENTS CACHE / Should be able to clear the queue and accumulated byte size', () => { - const cache = new EventsCache(500); + const cache = new EventsCacheInMemory(500); cache.track('test1', 2019); cache.clear(); @@ -36,7 +36,7 @@ test('EVENTS CACHE / Should be able to clear the queue and accumulated byte size }); test('EVENTS CACHE / Should be able to tell if the queue is empty', () => { - const cache = new EventsCache(500); + const cache = new EventsCacheInMemory(500); expect(cache.state().length === 0).toBe(true); // The queue is empty, expect(cache.isEmpty()).toBe(true); // so if it is empty, it returns true. @@ -48,7 +48,7 @@ test('EVENTS CACHE / Should be able to tell if the queue is empty', () => { }); test('EVENTS CACHE / Should be able to return the DTO we will send to BE', () => { - const cache = new EventsCache(500); + const cache = new EventsCacheInMemory(500); const queueValues = [1, '2', { p: 3 }, ['4']]; cache.track(queueValues[0]); @@ -63,7 +63,7 @@ test('EVENTS CACHE / Should be able to return the DTO we will send to BE', () => test('EVENTS CACHE / Should call "onFullQueueCb" when the queue is full (count wise).', () => { let cbCalled = 0; - const cache = new EventsCache(3); // small eventsQueueSize to be reached + const cache = new EventsCacheInMemory(3); // small eventsQueueSize to be reached cache.setOnFullQueueCb(() => { cbCalled++; cache.clear(); }); cache.track(0); @@ -89,7 +89,7 @@ test('EVENTS CACHE / Should call "onFullQueueCb" when the queue is full (count w test('EVENTS CACHE / Should call "onFullQueueCb" when the queue is full (size wise).', () => { let cbCalled = 0; - const cache = new EventsCache(99999999); // big eventsQueueSize to never be reached + const cache = new EventsCacheInMemory(99999999); // big eventsQueueSize to never be reached cache.setOnFullQueueCb(() => { cbCalled++; cache.clear(); }); // The track method receives the size, which calculation is validated elsewhere. @@ -108,7 +108,7 @@ test('EVENTS CACHE / Should call "onFullQueueCb" when the queue is full (size wi test('EVENTS CACHE / Should not throw if the "onFullQueueCb" callback was not provided.', () => { - const cache = new EventsCache(3); // small eventsQueueSize to be reached + const cache = new EventsCacheInMemory(3); // small eventsQueueSize to be reached cache.track(0, 2048); cache.track(1, 1024); // Cache still not full, diff --git a/src/storages/inMemory/__tests__/ImpressionCountsCacheInMemory.spec.ts b/src/storages/inMemory/__tests__/ImpressionCountsCacheInMemory.spec.ts index 68288808..00d878c9 100644 --- a/src/storages/inMemory/__tests__/ImpressionCountsCacheInMemory.spec.ts +++ b/src/storages/inMemory/__tests__/ImpressionCountsCacheInMemory.spec.ts @@ -1,9 +1,9 @@ // @ts-nocheck -import ImpressionCountsCache from '../ImpressionCountsCacheInMemory'; +import { ImpressionCountsCacheInMemory } from '../ImpressionCountsCacheInMemory'; test('IMPRESSION COUNTS CACHE / Impression Counter Test makeKey', () => { const timestamp = new Date(2020, 9, 2, 10, 0, 0).getTime(); - const counter = new ImpressionCountsCache(); + const counter = new ImpressionCountsCacheInMemory(); expect(counter._makeKey('someFeature', new Date(2020, 9, 2, 10, 53, 12).getTime())).toBe(`someFeature::${timestamp}`); expect(counter._makeKey('', new Date(2020, 9, 2, 10, 53, 12).getTime())).toBe(`::${timestamp}`); @@ -13,7 +13,7 @@ test('IMPRESSION COUNTS CACHE / Impression Counter Test makeKey', () => { test('IMPRESSION COUNTS CACHE / Impression Counter Test BasicUsage', () => { const timestamp = new Date(2020, 9, 2, 10, 10, 12).getTime(); - const counter = new ImpressionCountsCache(); + const counter = new ImpressionCountsCacheInMemory(); counter.track('feature1', timestamp, 1); counter.track('feature1', timestamp + 1, 1); counter.track('feature1', timestamp + 2, 1); diff --git a/src/storages/inMemory/__tests__/ImpressionsCacheInMemory.spec.ts b/src/storages/inMemory/__tests__/ImpressionsCacheInMemory.spec.ts index f98644c6..e5f7ed1b 100644 --- a/src/storages/inMemory/__tests__/ImpressionsCacheInMemory.spec.ts +++ b/src/storages/inMemory/__tests__/ImpressionsCacheInMemory.spec.ts @@ -1,8 +1,8 @@ -import ImpressionsCache from '../ImpressionsCacheInMemory'; +import { ImpressionsCacheInMemory } from '../ImpressionsCacheInMemory'; test('IMPRESSIONS CACHE IN MEMORY / should incrementally store values', () => { - const c = new ImpressionsCache(); + const c = new ImpressionsCacheInMemory(); // @ts-expect-error c.track([0]); // @ts-expect-error diff --git a/src/storages/inMemory/__tests__/LatenciesCacheInMemory.spec.ts b/src/storages/inMemory/__tests__/LatenciesCacheInMemory.spec.ts index 9e43668e..18ad0a3a 100644 --- a/src/storages/inMemory/__tests__/LatenciesCacheInMemory.spec.ts +++ b/src/storages/inMemory/__tests__/LatenciesCacheInMemory.spec.ts @@ -1,8 +1,8 @@ -import LatenciesCache from '../LatenciesCacheInMemory'; +import { LatenciesCacheInMemory } from '../LatenciesCacheInMemory'; test('METRICS (LATENCIES) CACHE IN MEMORY / should count based on ranges', () => { const metricName = 'testing'; - const c1 = new LatenciesCache(); + const c1 = new LatenciesCacheInMemory(); c1.track(metricName, 1); c1.track(metricName, 1.2); @@ -25,7 +25,7 @@ test('METRICS (LATENCIES) CACHE IN MEMORY / should count based on ranges', () => test('METRICS (LATENCIES) CACHE IN MEMORY / clear', () => { const metricName = 'testing'; - const c1 = new LatenciesCache(); + const c1 = new LatenciesCacheInMemory(); c1.track(metricName, 1); c1.track(metricName, 1000); diff --git a/src/storages/inMemory/__tests__/MySegmentsCacheInMemory.spec.ts b/src/storages/inMemory/__tests__/MySegmentsCacheInMemory.spec.ts index d3ad6c13..3ac0717c 100644 --- a/src/storages/inMemory/__tests__/MySegmentsCacheInMemory.spec.ts +++ b/src/storages/inMemory/__tests__/MySegmentsCacheInMemory.spec.ts @@ -1,7 +1,7 @@ -import MySegmentsCache from '../MySegmentsCacheInMemory'; +import { MySegmentsCacheInMemory } from '../MySegmentsCacheInMemory'; test('MY SEGMENTS CACHE / in memory', () => { - const cache = new MySegmentsCache(); + const cache = new MySegmentsCacheInMemory(); cache.addToSegment('mocked-segment'); diff --git a/src/storages/inMemory/__tests__/SegmentsCacheInMemory.spec.ts b/src/storages/inMemory/__tests__/SegmentsCacheInMemory.spec.ts index 70ca6b12..4d868849 100644 --- a/src/storages/inMemory/__tests__/SegmentsCacheInMemory.spec.ts +++ b/src/storages/inMemory/__tests__/SegmentsCacheInMemory.spec.ts @@ -1,9 +1,9 @@ -import SegmentsCache from '../SegmentsCacheInMemory'; +import { SegmentsCacheInMemory } from '../SegmentsCacheInMemory'; describe('SEGMENTS CACHE IN MEMORY', () => { test('isInSegment, set/getChangeNumber, add/removeFromSegment', () => { - const cache = new SegmentsCache(); + const cache = new SegmentsCacheInMemory(); cache.addToSegment('mocked-segment', [ 'a', 'b', 'c' @@ -29,7 +29,7 @@ describe('SEGMENTS CACHE IN MEMORY', () => { }); test('registerSegment / getRegisteredSegments', async () => { - const cache = new SegmentsCache(); + const cache = new SegmentsCacheInMemory(); await cache.registerSegments(['s1']); await cache.registerSegments(['s2']); diff --git a/src/storages/inMemory/__tests__/SplitsCacheInMemory.spec.ts b/src/storages/inMemory/__tests__/SplitsCacheInMemory.spec.ts index 0aa93ede..7d20655d 100644 --- a/src/storages/inMemory/__tests__/SplitsCacheInMemory.spec.ts +++ b/src/storages/inMemory/__tests__/SplitsCacheInMemory.spec.ts @@ -1,7 +1,7 @@ -import SplitsCache from '../SplitsCacheInMemory'; +import { SplitsCacheInMemory } from '../SplitsCacheInMemory'; test('SPLITS CACHE / In Memory', () => { - const cache = new SplitsCache(); + const cache = new SplitsCacheInMemory(); cache.addSplit('lol1', '{ "name": "something"}'); cache.addSplit('lol2', '{ "name": "something else"}'); @@ -31,7 +31,7 @@ test('SPLITS CACHE / In Memory', () => { }); test('SPLITS CACHE / In Memory / Get Keys', () => { - const cache = new SplitsCache(); + const cache = new SplitsCacheInMemory(); cache.addSplit('lol1', '{ "name": "something"}'); cache.addSplit('lol2', '{ "name": "something else"}'); @@ -43,7 +43,7 @@ test('SPLITS CACHE / In Memory / Get Keys', () => { }); test('SPLITS CACHE / In Memory / trafficTypeExists and ttcache tests', () => { - const cache = new SplitsCache(); + const cache = new SplitsCacheInMemory(); cache.addSplits([ // loop of addSplit ['split1', '{ "trafficTypeName": "user_tt" }'], @@ -82,7 +82,7 @@ test('SPLITS CACHE / In Memory / trafficTypeExists and ttcache tests', () => { }); test('SPLITS CACHE / In Memory / killLocally', () => { - const cache = new SplitsCache(); + const cache = new SplitsCacheInMemory(); cache.addSplit('lol1', '{ "name": "something"}'); cache.addSplit('lol2', '{ "name": "something else"}'); const initialChangeNumber = cache.getChangeNumber(); diff --git a/src/storages/inRedis/CountsCacheInRedis.ts b/src/storages/inRedis/CountsCacheInRedis.ts index b48b9280..cb551fa2 100644 --- a/src/storages/inRedis/CountsCacheInRedis.ts +++ b/src/storages/inRedis/CountsCacheInRedis.ts @@ -1,8 +1,8 @@ import { ICountsCacheAsync } from '../types'; -import KeyBuilderSS from '../KeyBuilderSS'; +import { KeyBuilderSS } from '../KeyBuilderSS'; import { Redis } from 'ioredis'; -export default class CountsCacheInRedis implements ICountsCacheAsync { +export class CountsCacheInRedis implements ICountsCacheAsync { private readonly redis: Redis; private readonly keys: KeyBuilderSS; diff --git a/src/storages/inRedis/EventsCacheInRedis.ts b/src/storages/inRedis/EventsCacheInRedis.ts index f4bc133b..e2702ab8 100644 --- a/src/storages/inRedis/EventsCacheInRedis.ts +++ b/src/storages/inRedis/EventsCacheInRedis.ts @@ -6,7 +6,7 @@ import { ILogger } from '../../logger/types'; import { LOG_PREFIX } from './constants'; import { StoredEventWithMetadata } from '../../sync/submitters/types'; -export default class EventsCacheInRedis implements IEventsCacheAsync { +export class EventsCacheInRedis implements IEventsCacheAsync { private readonly log: ILogger; private readonly key: string; diff --git a/src/storages/inRedis/ImpressionsCacheInRedis.ts b/src/storages/inRedis/ImpressionsCacheInRedis.ts index 7f399e64..d4bd2d96 100644 --- a/src/storages/inRedis/ImpressionsCacheInRedis.ts +++ b/src/storages/inRedis/ImpressionsCacheInRedis.ts @@ -7,7 +7,7 @@ import { ILogger } from '../../logger/types'; const IMPRESSIONS_TTL_REFRESH = 3600; // 1 hr -export default class ImpressionsCacheInRedis implements IImpressionsCacheAsync { +export class ImpressionsCacheInRedis implements IImpressionsCacheAsync { private readonly log: ILogger; private readonly key: string; diff --git a/src/storages/inRedis/LatenciesCacheInRedis.ts b/src/storages/inRedis/LatenciesCacheInRedis.ts index 143a759b..f69b7244 100644 --- a/src/storages/inRedis/LatenciesCacheInRedis.ts +++ b/src/storages/inRedis/LatenciesCacheInRedis.ts @@ -1,9 +1,9 @@ import { ILatenciesCacheAsync } from '../types'; -import KeyBuilderSS from '../KeyBuilderSS'; -import findLatencyIndex from '../findLatencyIndex'; +import { KeyBuilderSS } from '../KeyBuilderSS'; +import { findLatencyIndex } from '../findLatencyIndex'; import { Redis } from 'ioredis'; -export default class LatenciesCacheInRedis implements ILatenciesCacheAsync { +export class LatenciesCacheInRedis implements ILatenciesCacheAsync { private readonly redis: Redis; private readonly keys: KeyBuilderSS; diff --git a/src/storages/inRedis/RedisAdapter.ts b/src/storages/inRedis/RedisAdapter.ts index 99dccd45..05ef94f7 100644 --- a/src/storages/inRedis/RedisAdapter.ts +++ b/src/storages/inRedis/RedisAdapter.ts @@ -2,8 +2,8 @@ import ioredis from 'ioredis'; import { ILogger } from '../../logger/types'; import { merge, isString } from '../../utils/lang'; import { _Set, setToArray, ISet } from '../../utils/lang/sets'; -import thenable from '../../utils/promise/thenable'; -import timeout from '../../utils/promise/timeout'; +import { thenable } from '../../utils/promise/thenable'; +import { timeout } from '../../utils/promise/timeout'; const LOG_PREFIX = 'storage:redis-adapter: '; @@ -32,7 +32,7 @@ interface IRedisCommand { /** * Redis adapter on top of the library of choice (written with ioredis) for some extra control. */ -export default class RedisAdapter extends ioredis { +export class RedisAdapter extends ioredis { private readonly log: ILogger private _options: object; private _notReadyCommandsQueue?: IRedisCommand[]; diff --git a/src/storages/inRedis/SegmentsCacheInRedis.ts b/src/storages/inRedis/SegmentsCacheInRedis.ts index daee13a5..a144e2b7 100644 --- a/src/storages/inRedis/SegmentsCacheInRedis.ts +++ b/src/storages/inRedis/SegmentsCacheInRedis.ts @@ -2,10 +2,10 @@ import { Redis } from 'ioredis'; import { ILogger } from '../../logger/types'; import { isNaNNumber } from '../../utils/lang'; import { LOG_PREFIX } from '../inLocalStorage/constants'; -import KeyBuilderSS from '../KeyBuilderSS'; +import { KeyBuilderSS } from '../KeyBuilderSS'; import { ISegmentsCacheAsync } from '../types'; -export default class SegmentsCacheInRedis implements ISegmentsCacheAsync { +export class SegmentsCacheInRedis implements ISegmentsCacheAsync { private readonly log: ILogger; private readonly redis: Redis; diff --git a/src/storages/inRedis/SplitsCacheInRedis.ts b/src/storages/inRedis/SplitsCacheInRedis.ts index 92e5c09c..28996d06 100644 --- a/src/storages/inRedis/SplitsCacheInRedis.ts +++ b/src/storages/inRedis/SplitsCacheInRedis.ts @@ -1,10 +1,10 @@ import { isFiniteNumber, isNaNNumber } from '../../utils/lang'; -import KeyBuilderSS from '../KeyBuilderSS'; +import { KeyBuilderSS } from '../KeyBuilderSS'; import { Redis } from 'ioredis'; import { ILogger } from '../../logger/types'; import { LOG_PREFIX } from './constants'; import { ISplit } from '../../dtos/types'; -import AbstractSplitsCacheAsync from '../AbstractSplitsCacheAsync'; +import { AbstractSplitsCacheAsync } from '../AbstractSplitsCacheAsync'; /** * Discard errors for an answer of multiple operations. @@ -20,7 +20,7 @@ function processPipelineAnswer(results: Array<[Error | null, string]>): string[] * ISplitsCacheAsync implementation that stores split definitions in Redis. * Supported by Node. */ -export default class SplitsCacheInRedis extends AbstractSplitsCacheAsync { +export class SplitsCacheInRedis extends AbstractSplitsCacheAsync { private readonly log: ILogger; private readonly redis: Redis; diff --git a/src/storages/inRedis/__tests__/CountsCacheInRedis.spec.ts b/src/storages/inRedis/__tests__/CountsCacheInRedis.spec.ts index 8220a3ce..b8032ac2 100644 --- a/src/storages/inRedis/__tests__/CountsCacheInRedis.spec.ts +++ b/src/storages/inRedis/__tests__/CountsCacheInRedis.spec.ts @@ -1,6 +1,6 @@ import Redis from 'ioredis'; -import KeyBuilderSS from '../../KeyBuilderSS'; -import CountsCacheInRedis from '../CountsCacheInRedis'; +import { KeyBuilderSS } from '../../KeyBuilderSS'; +import { CountsCacheInRedis } from '../CountsCacheInRedis'; const prefix = 'counts_cache_ut'; const metadata = { s: 'version', i: 'ip', n: 'hostname' }; diff --git a/src/storages/inRedis/__tests__/EventsCacheInRedis.spec.ts b/src/storages/inRedis/__tests__/EventsCacheInRedis.spec.ts index 2ed55687..9d648feb 100644 --- a/src/storages/inRedis/__tests__/EventsCacheInRedis.spec.ts +++ b/src/storages/inRedis/__tests__/EventsCacheInRedis.spec.ts @@ -1,6 +1,6 @@ import Redis from 'ioredis'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; -import EventsCacheInRedis from '../EventsCacheInRedis'; +import { EventsCacheInRedis } from '../EventsCacheInRedis'; import { fakeMetadata, fakeEvent1, fakeEvent1stored, fakeEvent2, fakeEvent2stored, fakeEvent3, fakeEvent3stored } from '../../pluggable/__tests__/EventsCachePluggable.spec'; const prefix = 'events_cache_ut'; diff --git a/src/storages/inRedis/__tests__/ImpressionsCacheInRedis.spec.ts b/src/storages/inRedis/__tests__/ImpressionsCacheInRedis.spec.ts index 0701bd7b..8dcd1398 100644 --- a/src/storages/inRedis/__tests__/ImpressionsCacheInRedis.spec.ts +++ b/src/storages/inRedis/__tests__/ImpressionsCacheInRedis.spec.ts @@ -1,5 +1,5 @@ -import Redis from '../RedisAdapter'; -import ImpressionsCacheInRedis from '../ImpressionsCacheInRedis'; +import { RedisAdapter } from '../RedisAdapter'; +import { ImpressionsCacheInRedis } from '../ImpressionsCacheInRedis'; import IORedis, { BooleanResponse } from 'ioredis'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; import { fakeMetadata, o1, o2, o3, o1stored, o2stored, o3stored } from '../../pluggable/__tests__/ImpressionsCachePluggable.spec'; @@ -7,7 +7,7 @@ import { fakeMetadata, o1, o2, o3, o1stored, o2stored, o3stored } from '../../pl describe('IMPRESSIONS CACHE IN REDIS', () => { test('`track`, `count`, `popNWithMetadata` and `drop` methods', async () => { - const connection = new Redis(loggerMock, {}); + const connection = new RedisAdapter(loggerMock, {}); const impressionsKey = 'impr_cache_ut.impressions'; const c = new ImpressionsCacheInRedis(loggerMock, impressionsKey, connection, fakeMetadata); @@ -49,7 +49,7 @@ describe('IMPRESSIONS CACHE IN REDIS', () => { test('`track` should not resolve before calling expire', async () => { const impressionsKey = 'impr_cache_ut_2.impressions'; - const connection = new Redis(loggerMock, {}); + const connection = new RedisAdapter(loggerMock, {}); const c = new ImpressionsCacheInRedis(loggerMock, impressionsKey, connection, fakeMetadata); diff --git a/src/storages/inRedis/__tests__/LatenciesCacheInRedis.spec.ts b/src/storages/inRedis/__tests__/LatenciesCacheInRedis.spec.ts index e592bdd9..7567b969 100644 --- a/src/storages/inRedis/__tests__/LatenciesCacheInRedis.spec.ts +++ b/src/storages/inRedis/__tests__/LatenciesCacheInRedis.spec.ts @@ -1,6 +1,6 @@ import Redis from 'ioredis'; -import KeyBuilderSS from '../../KeyBuilderSS'; -import LatenciesCacheInRedis from '../LatenciesCacheInRedis'; +import { KeyBuilderSS } from '../../KeyBuilderSS'; +import { LatenciesCacheInRedis } from '../LatenciesCacheInRedis'; const prefix = 'latencies_cache_UT'; const metadata = { s: 'js_someversion', i: 'some_ip', n: 'some_hostname' }; diff --git a/src/storages/inRedis/__tests__/RedisAdapter.spec.ts b/src/storages/inRedis/__tests__/RedisAdapter.spec.ts index 9557162d..c9e789f6 100644 --- a/src/storages/inRedis/__tests__/RedisAdapter.spec.ts +++ b/src/storages/inRedis/__tests__/RedisAdapter.spec.ts @@ -49,11 +49,11 @@ const timeoutMock = jest.fn(function timeout(ms, originalPromise) { }); jest.mock('../../../utils/promise/timeout'); -import timeout from '../../../utils/promise/timeout'; +import { timeout } from '../../../utils/promise/timeout'; (timeout as jest.Mock).mockImplementation(timeoutMock); // Test target -import RedisAdapter from '../RedisAdapter'; +import { RedisAdapter } from '../RedisAdapter'; function clearAllMocks() { loggerMock.mockClear(); diff --git a/src/storages/inRedis/__tests__/SegmentsCacheInRedis.spec.ts b/src/storages/inRedis/__tests__/SegmentsCacheInRedis.spec.ts index dc3ea4b8..e230fbc0 100644 --- a/src/storages/inRedis/__tests__/SegmentsCacheInRedis.spec.ts +++ b/src/storages/inRedis/__tests__/SegmentsCacheInRedis.spec.ts @@ -1,6 +1,6 @@ import Redis from 'ioredis'; -import SegmentsCacheInRedis from '../SegmentsCacheInRedis'; -import KeyBuilderSS from '../../KeyBuilderSS'; +import { SegmentsCacheInRedis } from '../SegmentsCacheInRedis'; +import { KeyBuilderSS } from '../../KeyBuilderSS'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; // @ts-expect-error. Doesn't require metadata diff --git a/src/storages/inRedis/__tests__/SplitsCacheInRedis.spec.ts b/src/storages/inRedis/__tests__/SplitsCacheInRedis.spec.ts index 7ab8384b..fdb4777a 100644 --- a/src/storages/inRedis/__tests__/SplitsCacheInRedis.spec.ts +++ b/src/storages/inRedis/__tests__/SplitsCacheInRedis.spec.ts @@ -1,6 +1,6 @@ import Redis from 'ioredis'; -import SplitsCacheInRedis from '../SplitsCacheInRedis'; -import KeyBuilderSS from '../../KeyBuilderSS'; +import { SplitsCacheInRedis } from '../SplitsCacheInRedis'; +import { KeyBuilderSS } from '../../KeyBuilderSS'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; import { splitWithUserTT, splitWithAccountTT } from '../../__tests__/testUtils'; diff --git a/src/storages/inRedis/index.ts b/src/storages/inRedis/index.ts index 68b0a85b..de72a220 100644 --- a/src/storages/inRedis/index.ts +++ b/src/storages/inRedis/index.ts @@ -1,13 +1,13 @@ -import RedisAdapter from './RedisAdapter'; +import { RedisAdapter } from './RedisAdapter'; import { IStorageAsync, IStorageAsyncFactory, IStorageFactoryParams } from '../types'; import { validatePrefix } from '../KeyBuilder'; -import KeyBuilderSS from '../KeyBuilderSS'; -import SplitsCacheInRedis from './SplitsCacheInRedis'; -import SegmentsCacheInRedis from './SegmentsCacheInRedis'; -import ImpressionsCacheInRedis from './ImpressionsCacheInRedis'; -import EventsCacheInRedis from './EventsCacheInRedis'; -import LatenciesCacheInRedis from './LatenciesCacheInRedis'; -import CountsCacheInRedis from './CountsCacheInRedis'; +import { KeyBuilderSS } from '../KeyBuilderSS'; +import { SplitsCacheInRedis } from './SplitsCacheInRedis'; +import { SegmentsCacheInRedis } from './SegmentsCacheInRedis'; +import { ImpressionsCacheInRedis } from './ImpressionsCacheInRedis'; +import { EventsCacheInRedis } from './EventsCacheInRedis'; +import { LatenciesCacheInRedis } from './LatenciesCacheInRedis'; +import { CountsCacheInRedis } from './CountsCacheInRedis'; import { STORAGE_REDIS } from '../../utils/constants'; export interface InRedisStorageOptions { diff --git a/src/storages/pluggable/SegmentsCachePluggable.ts b/src/storages/pluggable/SegmentsCachePluggable.ts index 7b19633a..995c66df 100644 --- a/src/storages/pluggable/SegmentsCachePluggable.ts +++ b/src/storages/pluggable/SegmentsCachePluggable.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable no-unused-vars */ import { isNaNNumber } from '../../utils/lang'; -import KeyBuilderSS from '../KeyBuilderSS'; +import { KeyBuilderSS } from '../KeyBuilderSS'; import { IPluggableStorageWrapper, ISegmentsCacheAsync } from '../types'; import { ILogger } from '../../logger/types'; import { LOG_PREFIX } from './constants'; diff --git a/src/storages/pluggable/SplitsCachePluggable.ts b/src/storages/pluggable/SplitsCachePluggable.ts index 95bbcc0e..6fec1420 100644 --- a/src/storages/pluggable/SplitsCachePluggable.ts +++ b/src/storages/pluggable/SplitsCachePluggable.ts @@ -1,10 +1,10 @@ import { isFiniteNumber, isNaNNumber } from '../../utils/lang'; -import KeyBuilder from '../KeyBuilder'; +import { KeyBuilder } from '../KeyBuilder'; import { IPluggableStorageWrapper } from '../types'; import { ILogger } from '../../logger/types'; import { ISplit } from '../../dtos/types'; import { LOG_PREFIX } from './constants'; -import AbstractSplitsCacheAsync from '../AbstractSplitsCacheAsync'; +import { AbstractSplitsCacheAsync } from '../AbstractSplitsCacheAsync'; /** * ISplitsCacheAsync implementation for pluggable storages. diff --git a/src/storages/pluggable/__tests__/SegmentsCachePluggable.spec.ts b/src/storages/pluggable/__tests__/SegmentsCachePluggable.spec.ts index d0ec3a56..0ab833c8 100644 --- a/src/storages/pluggable/__tests__/SegmentsCachePluggable.spec.ts +++ b/src/storages/pluggable/__tests__/SegmentsCachePluggable.spec.ts @@ -1,5 +1,5 @@ import { SegmentsCachePluggable } from '../SegmentsCachePluggable'; -import KeyBuilderSS from '../../KeyBuilderSS'; +import { KeyBuilderSS } from '../../KeyBuilderSS'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; import { wrapperMock } from './wrapper.mock'; diff --git a/src/storages/pluggable/__tests__/SplitsCachePluggable.spec.ts b/src/storages/pluggable/__tests__/SplitsCachePluggable.spec.ts index 99069585..652fb07a 100644 --- a/src/storages/pluggable/__tests__/SplitsCachePluggable.spec.ts +++ b/src/storages/pluggable/__tests__/SplitsCachePluggable.spec.ts @@ -1,5 +1,5 @@ import { SplitsCachePluggable } from '../SplitsCachePluggable'; -import KeyBuilder from '../../KeyBuilder'; +import { KeyBuilder } from '../../KeyBuilder'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; import { wrapperMockFactory } from './wrapper.mock'; import { splitWithUserTT, splitWithAccountTT } from '../../__tests__/testUtils'; diff --git a/src/storages/pluggable/__tests__/wrapperAdapter.spec.ts b/src/storages/pluggable/__tests__/wrapperAdapter.spec.ts index 366ad1e4..90805b90 100644 --- a/src/storages/pluggable/__tests__/wrapperAdapter.spec.ts +++ b/src/storages/pluggable/__tests__/wrapperAdapter.spec.ts @@ -1,6 +1,6 @@ // @ts-nocheck import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; -import thenable from '../../../utils/promise/thenable'; +import { thenable } from '../../../utils/promise/thenable'; import { LOG_PREFIX } from '../constants'; /** Mocks */ diff --git a/src/storages/pluggable/index.ts b/src/storages/pluggable/index.ts index 9dd9f592..fef04aa6 100644 --- a/src/storages/pluggable/index.ts +++ b/src/storages/pluggable/index.ts @@ -1,6 +1,6 @@ import { IPluggableStorageWrapper, IStorageAsync, IStorageAsyncFactory, IStorageFactoryParams } from '../types'; -import KeyBuilderSS from '../KeyBuilderSS'; +import { KeyBuilderSS } from '../KeyBuilderSS'; import { SplitsCachePluggable } from './SplitsCachePluggable'; import { SegmentsCachePluggable } from './SegmentsCachePluggable'; import { ImpressionsCachePluggable } from './ImpressionsCachePluggable'; @@ -9,9 +9,9 @@ import { wrapperAdapter, METHODS_TO_PROMISE_WRAP } from './wrapperAdapter'; import { isObject } from '../../utils/lang'; import { validatePrefix } from '../KeyBuilder'; import { CONSUMER_PARTIAL_MODE, STORAGE_PLUGGABLE } from '../../utils/constants'; -import ImpressionsCacheInMemory from '../inMemory/ImpressionsCacheInMemory'; -import EventsCacheInMemory from '../inMemory/EventsCacheInMemory'; -import ImpressionCountsCacheInMemory from '../inMemory/ImpressionCountsCacheInMemory'; +import { ImpressionsCacheInMemory } from '../inMemory/ImpressionsCacheInMemory'; +import { EventsCacheInMemory } from '../inMemory/EventsCacheInMemory'; +import { ImpressionCountsCacheInMemory } from '../inMemory/ImpressionCountsCacheInMemory'; const NO_VALID_WRAPPER = 'Expecting pluggable storage `wrapper` in options, but no valid wrapper instance was provided.'; const NO_VALID_WRAPPER_INTERFACE = 'The provided wrapper instance doesn’t follow the expected interface. Check our docs.'; diff --git a/src/sync/__tests__/syncTask.spec.ts b/src/sync/__tests__/syncTask.spec.ts index b947e0a3..d4a7502b 100644 --- a/src/sync/__tests__/syncTask.spec.ts +++ b/src/sync/__tests__/syncTask.spec.ts @@ -1,4 +1,4 @@ -import syncTaskFactory from '../syncTask'; +import { syncTaskFactory } from '../syncTask'; import { loggerMock } from '../../logger/__tests__/sdkLogger.mock'; const period = 30; diff --git a/src/sync/offline/splitsParser/parseCondition.ts b/src/sync/offline/splitsParser/parseCondition.ts index 671fbed1..a2223bec 100644 --- a/src/sync/offline/splitsParser/parseCondition.ts +++ b/src/sync/offline/splitsParser/parseCondition.ts @@ -7,7 +7,7 @@ export interface IMockSplitEntry { config?: string } -export default function parseCondition(data: IMockSplitEntry): ISplitCondition { +export function parseCondition(data: IMockSplitEntry): ISplitCondition { const treatment = data.treatment; if (data.keys) { diff --git a/src/sync/offline/splitsParser/splitsParserFromFile.ts b/src/sync/offline/splitsParser/splitsParserFromFile.ts index 95ea8d14..d65d6a55 100644 --- a/src/sync/offline/splitsParser/splitsParserFromFile.ts +++ b/src/sync/offline/splitsParser/splitsParserFromFile.ts @@ -5,7 +5,7 @@ import path from 'path'; // @ts-ignore import yaml from 'js-yaml'; import { isString, endsWith, find, forOwn, uniq, } from '../../../utils/lang'; -import parseCondition, { IMockSplitEntry } from './parseCondition'; +import { parseCondition, IMockSplitEntry } from './parseCondition'; import { ISplitPartial } from '../../../dtos/types'; import { ISettings, SplitIO } from '../../../types'; import { ILogger } from '../../../logger/types'; diff --git a/src/sync/offline/splitsParser/splitsParserFromSettings.ts b/src/sync/offline/splitsParser/splitsParserFromSettings.ts index f9cf9175..8e892969 100644 --- a/src/sync/offline/splitsParser/splitsParserFromSettings.ts +++ b/src/sync/offline/splitsParser/splitsParserFromSettings.ts @@ -1,7 +1,7 @@ import { ISplitPartial } from '../../../dtos/types'; import { ISettings, SplitIO } from '../../../types'; import { isObject, forOwn } from '../../../utils/lang'; -import parseCondition from './parseCondition'; +import { parseCondition } from './parseCondition'; function hasTreatmentChanged(prev: string | SplitIO.TreatmentWithConfig, curr: string | SplitIO.TreatmentWithConfig) { if (typeof prev !== typeof curr) return true; diff --git a/src/sync/offline/syncManagerOffline.ts b/src/sync/offline/syncManagerOffline.ts index 58a75b6f..253493f2 100644 --- a/src/sync/offline/syncManagerOffline.ts +++ b/src/sync/offline/syncManagerOffline.ts @@ -1,6 +1,6 @@ import { ISyncManager, ISyncManagerCS, ISyncManagerFactoryParams } from '../types'; -import fromObjectSyncTaskFactory from './syncTasks/fromObjectSyncTask'; -import objectAssign from 'object-assign'; +import { fromObjectSyncTaskFactory } from './syncTasks/fromObjectSyncTask'; +import { objectAssign } from '../../utils/lang/objectAssign'; import { ISplitsParser } from './splitsParser/types'; import { IReadinessManager } from '../../readiness/types'; import { SDK_SEGMENTS_ARRIVED } from '../../readiness/constants'; diff --git a/src/sync/offline/syncTasks/fromObjectSyncTask.ts b/src/sync/offline/syncTasks/fromObjectSyncTask.ts index 2eccc27c..8cef1c7c 100644 --- a/src/sync/offline/syncTasks/fromObjectSyncTask.ts +++ b/src/sync/offline/syncTasks/fromObjectSyncTask.ts @@ -3,7 +3,7 @@ import { IReadinessManager } from '../../../readiness/types'; import { ISplitsCacheSync } from '../../../storages/types'; import { ISplitsParser } from '../splitsParser/types'; import { ISplitPartial } from '../../../dtos/types'; -import syncTaskFactory from '../../syncTask'; +import { syncTaskFactory } from '../../syncTask'; import { ISyncTask } from '../../types'; import { ISettings } from '../../../types'; import { CONTROL } from '../../../utils/constants'; @@ -79,7 +79,7 @@ export function fromObjectUpdaterFactory( /** * PollingManager in Offline mode */ -export default function fromObjectSyncTaskFactory( +export function fromObjectSyncTaskFactory( splitsParser: ISplitsParser, storage: { splits: ISplitsCacheSync }, readiness: IReadinessManager, diff --git a/src/sync/polling/fetchers/mySegmentsFetcher.ts b/src/sync/polling/fetchers/mySegmentsFetcher.ts index 298ef558..8ea7a5f4 100644 --- a/src/sync/polling/fetchers/mySegmentsFetcher.ts +++ b/src/sync/polling/fetchers/mySegmentsFetcher.ts @@ -6,7 +6,7 @@ import { IMySegmentsFetcher } from './types'; * Factory of MySegments fetcher. * MySegments fetcher is a wrapper around `mySegments` API service that parses the response and handle errors. */ -export default function mySegmentsFetcherFactory(fetchMySegments: IFetchMySegments, userMatchingKey: string): IMySegmentsFetcher { +export function mySegmentsFetcherFactory(fetchMySegments: IFetchMySegments, userMatchingKey: string): IMySegmentsFetcher { return function mySegmentsFetcher( noCache?: boolean, diff --git a/src/sync/polling/fetchers/segmentChangesFetcher.ts b/src/sync/polling/fetchers/segmentChangesFetcher.ts index 0bf14400..e28e0aa8 100644 --- a/src/sync/polling/fetchers/segmentChangesFetcher.ts +++ b/src/sync/polling/fetchers/segmentChangesFetcher.ts @@ -21,7 +21,7 @@ function greedyFetch(fetchSegmentChanges: IFetchSegmentChanges, since: number, s * Factory of SegmentChanges fetcher. * SegmentChanges fetcher is a wrapper around `segmentChanges` API service that parses the response and handle errors and retries. */ -export default function segmentChangesFetcherFactory(fetchSegmentChanges: IFetchSegmentChanges): ISegmentChangesFetcher { +export function segmentChangesFetcherFactory(fetchSegmentChanges: IFetchSegmentChanges): ISegmentChangesFetcher { return function segmentChangesFetcher( since: number, diff --git a/src/sync/polling/fetchers/splitChangesFetcher.ts b/src/sync/polling/fetchers/splitChangesFetcher.ts index 47de07ea..42e45463 100644 --- a/src/sync/polling/fetchers/splitChangesFetcher.ts +++ b/src/sync/polling/fetchers/splitChangesFetcher.ts @@ -5,7 +5,7 @@ import { ISplitChangesFetcher } from './types'; * Factory of SplitChanges fetcher. * SplitChanges fetcher is a wrapper around `splitChanges` API service that parses the response and handle errors. */ -export default function splitChangesFetcherFactory(fetchSplitChanges: IFetchSplitChanges): ISplitChangesFetcher { +export function splitChangesFetcherFactory(fetchSplitChanges: IFetchSplitChanges): ISplitChangesFetcher { return function splitChangesFetcher( since: number, diff --git a/src/sync/polling/pollingManagerCS.ts b/src/sync/polling/pollingManagerCS.ts index 7fbbc747..138ed003 100644 --- a/src/sync/polling/pollingManagerCS.ts +++ b/src/sync/polling/pollingManagerCS.ts @@ -3,8 +3,8 @@ import { forOwn } from '../../utils/lang'; import { IReadinessManager } from '../../readiness/types'; import { ISplitApi } from '../../services/types'; import { IStorageSync } from '../../storages/types'; -import mySegmentsSyncTaskFactory from './syncTasks/mySegmentsSyncTask'; -import splitsSyncTaskFactory from './syncTasks/splitsSyncTask'; +import { mySegmentsSyncTaskFactory } from './syncTasks/mySegmentsSyncTask'; +import { splitsSyncTaskFactory } from './syncTasks/splitsSyncTask'; import { ISettings } from '../../types'; import { getMatching } from '../../utils/key'; import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED } from '../../readiness/constants'; @@ -14,7 +14,7 @@ import { POLLING_SMART_PAUSING, POLLING_START, POLLING_STOP } from '../../logger * Expose start / stop mechanism for polling data from services. * For client-side API with multiple clients. */ -export default function pollingManagerCSFactory( +export function pollingManagerCSFactory( splitApi: ISplitApi, storage: IStorageSync, readiness: IReadinessManager, diff --git a/src/sync/polling/pollingManagerSS.ts b/src/sync/polling/pollingManagerSS.ts index 773da265..c1e7edad 100644 --- a/src/sync/polling/pollingManagerSS.ts +++ b/src/sync/polling/pollingManagerSS.ts @@ -1,17 +1,17 @@ -import splitsSyncTaskFactory from './syncTasks/splitsSyncTask'; -import segmentsSyncTaskFactory from './syncTasks/segmentsSyncTask'; +import { splitsSyncTaskFactory } from './syncTasks/splitsSyncTask'; +import { segmentsSyncTaskFactory } from './syncTasks/segmentsSyncTask'; import { IStorageSync } from '../../storages/types'; import { IReadinessManager } from '../../readiness/types'; import { ISplitApi } from '../../services/types'; import { ISettings } from '../../types'; import { IPollingManager, ISegmentsSyncTask, ISplitsSyncTask } from './types'; -import thenable from '../../utils/promise/thenable'; +import { thenable } from '../../utils/promise/thenable'; import { POLLING_START, POLLING_STOP, LOG_PREFIX_SYNC_POLLING } from '../../logger/constants'; /** * Expose start / stop mechanism for pulling data from services. */ -export default function pollingManagerSSFactory( +export function pollingManagerSSFactory( splitApi: ISplitApi, storage: IStorageSync, readiness: IReadinessManager, diff --git a/src/sync/polling/syncTasks/mySegmentsSyncTask.ts b/src/sync/polling/syncTasks/mySegmentsSyncTask.ts index 6547c3c6..7b830d21 100644 --- a/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +++ b/src/sync/polling/syncTasks/mySegmentsSyncTask.ts @@ -1,16 +1,16 @@ import { IStorageSync } from '../../../storages/types'; import { IReadinessManager } from '../../../readiness/types'; -import syncTaskFactory from '../../syncTask'; +import { syncTaskFactory } from '../../syncTask'; import { ISegmentsSyncTask } from '../types'; import { IFetchMySegments } from '../../../services/types'; -import mySegmentsFetcherFactory from '../fetchers/mySegmentsFetcher'; +import { mySegmentsFetcherFactory } from '../fetchers/mySegmentsFetcher'; import { ISettings } from '../../../types'; import { mySegmentsUpdaterFactory } from '../updaters/mySegmentsUpdater'; /** * Creates a sync task that periodically executes a `mySegmentsUpdater` task */ -export default function mySegmentsSyncTaskFactory( +export function mySegmentsSyncTaskFactory( fetchMySegments: IFetchMySegments, storage: IStorageSync, readiness: IReadinessManager, diff --git a/src/sync/polling/syncTasks/segmentsSyncTask.ts b/src/sync/polling/syncTasks/segmentsSyncTask.ts index 69cda5a3..f5a93711 100644 --- a/src/sync/polling/syncTasks/segmentsSyncTask.ts +++ b/src/sync/polling/syncTasks/segmentsSyncTask.ts @@ -1,8 +1,8 @@ import { IStorageSync } from '../../../storages/types'; import { IReadinessManager } from '../../../readiness/types'; -import syncTaskFactory from '../../syncTask'; +import { syncTaskFactory } from '../../syncTask'; import { ISegmentsSyncTask } from '../types'; -import segmentChangesFetcherFactory from '../fetchers/segmentChangesFetcher'; +import { segmentChangesFetcherFactory } from '../fetchers/segmentChangesFetcher'; import { IFetchSegmentChanges } from '../../../services/types'; import { ISettings } from '../../../types'; import { segmentChangesUpdaterFactory } from '../updaters/segmentChangesUpdater'; @@ -10,7 +10,7 @@ import { segmentChangesUpdaterFactory } from '../updaters/segmentChangesUpdater' /** * Creates a sync task that periodically executes a `segmentChangesUpdater` task */ -export default function segmentsSyncTaskFactory( +export function segmentsSyncTaskFactory( fetchSegmentChanges: IFetchSegmentChanges, storage: IStorageSync, readiness: IReadinessManager, diff --git a/src/sync/polling/syncTasks/splitsSyncTask.ts b/src/sync/polling/syncTasks/splitsSyncTask.ts index 04544c02..6807a0b4 100644 --- a/src/sync/polling/syncTasks/splitsSyncTask.ts +++ b/src/sync/polling/syncTasks/splitsSyncTask.ts @@ -1,8 +1,8 @@ import { IStorageSync } from '../../../storages/types'; import { IReadinessManager } from '../../../readiness/types'; -import syncTaskFactory from '../../syncTask'; +import { syncTaskFactory } from '../../syncTask'; import { ISplitsSyncTask } from '../types'; -import splitChangesFetcherFactory from '../fetchers/splitChangesFetcher'; +import { splitChangesFetcherFactory } from '../fetchers/splitChangesFetcher'; import { IFetchSplitChanges } from '../../../services/types'; import { ISettings } from '../../../types'; import { splitChangesUpdaterFactory } from '../updaters/splitChangesUpdater'; @@ -10,7 +10,7 @@ import { splitChangesUpdaterFactory } from '../updaters/splitChangesUpdater'; /** * Creates a sync task that periodically executes a `splitChangesUpdater` task */ -export default function splitsSyncTaskFactory( +export function splitsSyncTaskFactory( fetchSplitChanges: IFetchSplitChanges, storage: IStorageSync, readiness: IReadinessManager, diff --git a/src/sync/polling/updaters/__tests__/splitChangesUpdater.spec.ts b/src/sync/polling/updaters/__tests__/splitChangesUpdater.spec.ts index bc68243c..60cc9b52 100644 --- a/src/sync/polling/updaters/__tests__/splitChangesUpdater.spec.ts +++ b/src/sync/polling/updaters/__tests__/splitChangesUpdater.spec.ts @@ -1,9 +1,9 @@ import { ISplit } from '../../../../dtos/types'; import { readinessManagerFactory } from '../../../../readiness/readinessManager'; import { splitApiFactory } from '../../../../services/splitApi'; -import SegmentsCacheInMemory from '../../../../storages/inMemory/SegmentsCacheInMemory'; -import SplitsCacheInMemory from '../../../../storages/inMemory/SplitsCacheInMemory'; -import splitChangesFetcherFactory from '../../fetchers/splitChangesFetcher'; +import { SegmentsCacheInMemory } from '../../../../storages/inMemory/SegmentsCacheInMemory'; +import { SplitsCacheInMemory } from '../../../../storages/inMemory/SplitsCacheInMemory'; +import { splitChangesFetcherFactory } from '../../fetchers/splitChangesFetcher'; import { splitChangesUpdaterFactory, parseSegments, computeSplitsMutation } from '../splitChangesUpdater'; import splitChangesMock1 from '../../../../__tests__/mocks/splitchanges.since.-1.json'; import fetchMock from '../../../../__tests__/testUtils/fetchMock'; diff --git a/src/sync/polling/updaters/mySegmentsUpdater.ts b/src/sync/polling/updaters/mySegmentsUpdater.ts index 17a5b762..a72ee54b 100644 --- a/src/sync/polling/updaters/mySegmentsUpdater.ts +++ b/src/sync/polling/updaters/mySegmentsUpdater.ts @@ -1,7 +1,7 @@ import { IMySegmentsFetcher } from '../fetchers/types'; import { ISegmentsCacheSync, ISplitsCacheSync } from '../../../storages/types'; import { ISegmentsEventEmitter } from '../../../readiness/types'; -import timeout from '../../../utils/promise/timeout'; +import { timeout } from '../../../utils/promise/timeout'; import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants'; import { ILogger } from '../../../logger/types'; import { SYNC_MYSEGMENTS_FETCH_RETRY } from '../../../logger/constants'; diff --git a/src/sync/polling/updaters/segmentChangesUpdater.ts b/src/sync/polling/updaters/segmentChangesUpdater.ts index eefedf88..90a1bc06 100644 --- a/src/sync/polling/updaters/segmentChangesUpdater.ts +++ b/src/sync/polling/updaters/segmentChangesUpdater.ts @@ -6,7 +6,7 @@ import { findIndex } from '../../../utils/lang'; import { SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants'; import { ILogger } from '../../../logger/types'; import { LOG_PREFIX_INSTANTIATION, LOG_PREFIX_SYNC_SEGMENTS } from '../../../logger/constants'; -import thenable from '../../../utils/promise/thenable'; +import { thenable } from '../../../utils/promise/thenable'; type ISegmentChangesUpdater = (segmentNames?: string[], noCache?: boolean, fetchOnlyNew?: boolean) => Promise diff --git a/src/sync/polling/updaters/splitChangesUpdater.ts b/src/sync/polling/updaters/splitChangesUpdater.ts index ce490771..754ceed9 100644 --- a/src/sync/polling/updaters/splitChangesUpdater.ts +++ b/src/sync/polling/updaters/splitChangesUpdater.ts @@ -3,7 +3,7 @@ import { ISegmentsCacheBase, ISplitsCacheBase } from '../../../storages/types'; import { ISplitChangesFetcher } from '../fetchers/types'; import { ISplit, ISplitChangesResponse } from '../../../dtos/types'; import { ISplitsEventEmitter } from '../../../readiness/types'; -import timeout from '../../../utils/promise/timeout'; +import { timeout } from '../../../utils/promise/timeout'; import { SDK_SPLITS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants'; import { ILogger } from '../../../logger/types'; import { SYNC_SPLITS_FETCH, SYNC_SPLITS_NEW, SYNC_SPLITS_REMOVED, SYNC_SPLITS_SEGMENTS, SYNC_SPLITS_FETCH_FAILS, SYNC_SPLITS_FETCH_RETRY } from '../../../logger/constants'; diff --git a/src/sync/streaming/AuthClient/index.ts b/src/sync/streaming/AuthClient/index.ts index 8f19c34e..96ae9ca8 100644 --- a/src/sync/streaming/AuthClient/index.ts +++ b/src/sync/streaming/AuthClient/index.ts @@ -1,6 +1,6 @@ import { IFetchAuth } from '../../../services/types'; import { IAuthenticate, IAuthToken } from './types'; -import objectAssign from 'object-assign'; +import { objectAssign } from '../../../utils/lang/objectAssign'; import { encodeToBase64 } from '../../../utils/base64'; import { decodeJWTtoken } from '../../../utils/jwt'; import { hash } from '../../../utils/murmur3/murmur3'; diff --git a/src/sync/streaming/SSEClient/__tests__/index.spec.ts b/src/sync/streaming/SSEClient/__tests__/index.spec.ts index 6155224b..9564f1b5 100644 --- a/src/sync/streaming/SSEClient/__tests__/index.spec.ts +++ b/src/sync/streaming/SSEClient/__tests__/index.spec.ts @@ -4,7 +4,7 @@ import { authDataSample, channelsQueryParamSample } from '../../__tests__/dataMo import { fullSettings as settings } from '../../../../utils/settingsValidation/__tests__/settings.mocks'; import { url } from '../../../../utils/settingsValidation/url'; -import SSClient from '../index'; +import { SSEClient } from '../index'; const EXPECTED_URL = url(settings, '/sse') + '?channels=' + channelsQueryParamSample + @@ -17,12 +17,12 @@ const EXPECTED_HEADERS = { }; test('SSClient / instance creation throws error if EventSource is not provided', () => { - expect(() => { new SSClient(settings); }).toThrow(Error); - expect(() => { new SSClient(settings, false, () => undefined); }).toThrow(Error); + expect(() => { new SSEClient(settings); }).toThrow(Error); + expect(() => { new SSEClient(settings, false, () => undefined); }).toThrow(Error); }); test('SSClient / instance creation success if EventSource is provided', () => { - const instance = new SSClient(settings, false, () => EventSourceMock); + const instance = new SSEClient(settings, false, () => EventSourceMock); expect(instance.eventSource).toBe(EventSourceMock); }); @@ -35,7 +35,7 @@ test('SSClient / setEventHandler, open and close methods', () => { }; // instance SSEClient - const instance = new SSClient(settings, false, () => EventSourceMock); + const instance = new SSEClient(settings, false, () => EventSourceMock); instance.setEventHandler(handler); // open connection @@ -81,7 +81,7 @@ test('SSClient / setEventHandler, open and close methods', () => { test('SSClient / open method: URL with metadata query params', () => { - const instance = new SSClient(settings, false, () => EventSourceMock); + const instance = new SSEClient(settings, false, () => EventSourceMock); instance.open(authDataSample); const EXPECTED_BROWSER_URL = EXPECTED_URL + `&SplitSDKVersion=${settings.version}&SplitSDKClientKey=${EXPECTED_HEADERS.SplitSDKClientKey}`; @@ -99,7 +99,7 @@ test('SSClient / open method: URL and metadata headers with IP and Hostname', () hostname: 'some hostname' } }; - const instance = new SSClient(settingsWithRuntime, true, () => EventSourceMock); + const instance = new SSEClient(settingsWithRuntime, true, () => EventSourceMock); instance.open(authDataSample); expect(instance.connection.url).toBe(EXPECTED_URL); // URL is properly set for streaming connection @@ -114,7 +114,7 @@ test('SSClient / open method: URL and metadata headers with IP and Hostname', () test('SSClient / open method: URL and metadata headers without IP and Hostname', () => { - const instance = new SSClient(settings, true, () => EventSourceMock); + const instance = new SSEClient(settings, true, () => EventSourceMock); instance.open(authDataSample); expect(instance.connection.url).toBe(EXPECTED_URL); // URL is properly set for streaming connection diff --git a/src/sync/streaming/SSEClient/index.ts b/src/sync/streaming/SSEClient/index.ts index fbd09261..378ac9c0 100644 --- a/src/sync/streaming/SSEClient/index.ts +++ b/src/sync/streaming/SSEClient/index.ts @@ -30,7 +30,7 @@ function buildSSEHeaders(settings: ISettings) { /** * Handles streaming connections with EventSource API */ -export default class SSEClient implements ISSEClient { +export class SSEClient implements ISSEClient { // Instance properties: eventSource?: IEventSourceConstructor; streamingUrl: string; diff --git a/src/sync/streaming/SSEHandler/NotificationKeeper.ts b/src/sync/streaming/SSEHandler/NotificationKeeper.ts index 1df88250..03dae152 100644 --- a/src/sync/streaming/SSEHandler/NotificationKeeper.ts +++ b/src/sync/streaming/SSEHandler/NotificationKeeper.ts @@ -9,7 +9,7 @@ const CONTROL_CHANNEL_REGEXS = [/control_pri$/, /control_sec$/]; * @param pushEmitter emitter for events related to streaming support */ // @TODO update logic to handle OCCUPANCY for any region and rename according to new spec (e.g.: PUSH_SUBSYSTEM_UP --> PUSH_SUBSYSTEM_UP) -export default function notificationKeeperFactory(pushEmitter: IPushEventEmitter) { +export function notificationKeeperFactory(pushEmitter: IPushEventEmitter) { let channels = CONTROL_CHANNEL_REGEXS.map(regex => ({ regex, diff --git a/src/sync/streaming/SSEHandler/__tests__/index.spec.ts b/src/sync/streaming/SSEHandler/__tests__/index.spec.ts index 79f8c573..fea55027 100644 --- a/src/sync/streaming/SSEHandler/__tests__/index.spec.ts +++ b/src/sync/streaming/SSEHandler/__tests__/index.spec.ts @@ -1,5 +1,5 @@ // @ts-nocheck -import SSEHandlerFactory from '..'; +import { SSEHandlerFactory } from '..'; import { PUSH_SUBSYSTEM_UP, PUSH_NONRETRYABLE_ERROR, PUSH_SUBSYSTEM_DOWN, PUSH_RETRYABLE_ERROR, MY_SEGMENTS_UPDATE, SEGMENT_UPDATE, SPLIT_KILL, SPLIT_UPDATE, MY_SEGMENTS_UPDATE_V2, ControlType } from '../../constants'; import { loggerMock } from '../../../../logger/__tests__/sdkLogger.mock'; diff --git a/src/sync/streaming/SSEHandler/index.ts b/src/sync/streaming/SSEHandler/index.ts index b0cd7069..b0b46767 100644 --- a/src/sync/streaming/SSEHandler/index.ts +++ b/src/sync/streaming/SSEHandler/index.ts @@ -1,5 +1,5 @@ import { errorParser, messageParser } from './NotificationParser'; -import notificationKeeperFactory from './NotificationKeeper'; +import { notificationKeeperFactory } from './NotificationKeeper'; import { PUSH_RETRYABLE_ERROR, PUSH_NONRETRYABLE_ERROR, OCCUPANCY, CONTROL, MY_SEGMENTS_UPDATE, MY_SEGMENTS_UPDATE_V2, SEGMENT_UPDATE, SPLIT_KILL, SPLIT_UPDATE } from '../constants'; import { IPushEventEmitter } from '../types'; import { ISseEventHandler } from '../SSEClient/types'; @@ -25,7 +25,7 @@ function isRetryableError(error: INotificationError) { * @param log factory logger * @param pushEmitter emitter for events related to streaming support */ -export default function SSEHandlerFactory(log: ILogger, pushEmitter: IPushEventEmitter): ISseEventHandler { +export function SSEHandlerFactory(log: ILogger, pushEmitter: IPushEventEmitter): ISseEventHandler { const notificationKeeper = notificationKeeperFactory(pushEmitter); diff --git a/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts b/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts index 192e81fa..26bc5514 100644 --- a/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +++ b/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts @@ -1,12 +1,12 @@ import { ISegmentsSyncTask } from '../../polling/types'; -import Backoff from '../../../utils/Backoff'; +import { Backoff } from '../../../utils/Backoff'; import { IUpdateWorker } from './types'; import { SegmentsData } from '../SSEHandler/types'; /** * MySegmentsUpdateWorker class */ -export default class MySegmentsUpdateWorker implements IUpdateWorker { +export class MySegmentsUpdateWorker implements IUpdateWorker { private readonly mySegmentsSyncTask: ISegmentsSyncTask; private maxChangeNumber: number; diff --git a/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts b/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts index 3a299024..5c52872d 100644 --- a/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +++ b/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts @@ -1,5 +1,5 @@ import { ISegmentsCacheSync } from '../../../storages/types'; -import Backoff from '../../../utils/Backoff'; +import { Backoff } from '../../../utils/Backoff'; import { ISegmentsSyncTask } from '../../polling/types'; import { ISegmentUpdateData } from '../SSEHandler/types'; import { IUpdateWorker } from './types'; @@ -7,7 +7,7 @@ import { IUpdateWorker } from './types'; /** * SegmentUpdateWorker class */ -export default class SegmentsUpdateWorker implements IUpdateWorker { +export class SegmentsUpdateWorker implements IUpdateWorker { private readonly segmentsCache: ISegmentsCacheSync; private readonly segmentsSyncTask: ISegmentsSyncTask; diff --git a/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts b/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts index 8542d0a9..c9d12f65 100644 --- a/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +++ b/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts @@ -1,7 +1,7 @@ import { SDK_SPLITS_ARRIVED } from '../../../readiness/constants'; import { ISplitsEventEmitter } from '../../../readiness/types'; import { ISplitsCacheSync } from '../../../storages/types'; -import Backoff from '../../../utils/Backoff'; +import { Backoff } from '../../../utils/Backoff'; import { ISegmentsSyncTask, ISplitsSyncTask } from '../../polling/types'; import { ISplitKillData, ISplitUpdateData } from '../SSEHandler/types'; import { IUpdateWorker } from './types'; @@ -9,7 +9,7 @@ import { IUpdateWorker } from './types'; /** * SplitsUpdateWorker class */ -export default class SplitsUpdateWorker implements IUpdateWorker { +export class SplitsUpdateWorker implements IUpdateWorker { private readonly splitsCache: ISplitsCacheSync; private readonly splitsSyncTask: ISplitsSyncTask; diff --git a/src/sync/streaming/UpdateWorkers/__tests__/MySegmentsUpdateWorker.spec.ts b/src/sync/streaming/UpdateWorkers/__tests__/MySegmentsUpdateWorker.spec.ts index 182bc3ad..1e4129e3 100644 --- a/src/sync/streaming/UpdateWorkers/__tests__/MySegmentsUpdateWorker.spec.ts +++ b/src/sync/streaming/UpdateWorkers/__tests__/MySegmentsUpdateWorker.spec.ts @@ -1,5 +1,5 @@ // @ts-nocheck -import MySegmentsUpdateWorker from '../MySegmentsUpdateWorker'; +import { MySegmentsUpdateWorker } from '../MySegmentsUpdateWorker'; function mySegmentsSyncTaskMock() { diff --git a/src/sync/streaming/UpdateWorkers/__tests__/SegmentsUpdateWorker.spec.ts b/src/sync/streaming/UpdateWorkers/__tests__/SegmentsUpdateWorker.spec.ts index 5e6acb6a..4a494657 100644 --- a/src/sync/streaming/UpdateWorkers/__tests__/SegmentsUpdateWorker.spec.ts +++ b/src/sync/streaming/UpdateWorkers/__tests__/SegmentsUpdateWorker.spec.ts @@ -1,6 +1,6 @@ // @ts-nocheck -import SegmentsCacheInMemory from '../../../../storages/inMemory/SegmentsCacheInMemory'; -import SegmentsUpdateWorker from '../SegmentsUpdateWorker'; +import { SegmentsCacheInMemory } from '../../../../storages/inMemory/SegmentsCacheInMemory'; +import { SegmentsUpdateWorker } from '../SegmentsUpdateWorker'; function segmentsSyncTaskMock(segmentsStorage) { diff --git a/src/sync/streaming/UpdateWorkers/__tests__/SplitsUpdateWorker.spec.ts b/src/sync/streaming/UpdateWorkers/__tests__/SplitsUpdateWorker.spec.ts index bf28fa2e..74fd9c1f 100644 --- a/src/sync/streaming/UpdateWorkers/__tests__/SplitsUpdateWorker.spec.ts +++ b/src/sync/streaming/UpdateWorkers/__tests__/SplitsUpdateWorker.spec.ts @@ -1,7 +1,7 @@ // @ts-nocheck import { SDK_SPLITS_ARRIVED } from '../../../../readiness/constants'; -import SplitsCacheInMemory from '../../../../storages/inMemory/SplitsCacheInMemory'; -import SplitsUpdateWorker from '../SplitsUpdateWorker'; +import { SplitsCacheInMemory } from '../../../../storages/inMemory/SplitsCacheInMemory'; +import { SplitsUpdateWorker } from '../SplitsUpdateWorker'; function splitsSyncTaskMock(splitStorage) { diff --git a/src/sync/streaming/UpdateWorkers/types.ts b/src/sync/streaming/UpdateWorkers/types.ts index ea91a154..de70407e 100644 --- a/src/sync/streaming/UpdateWorkers/types.ts +++ b/src/sync/streaming/UpdateWorkers/types.ts @@ -1,4 +1,4 @@ -import Backoff from '../../../utils/Backoff'; +import { Backoff } from '../../../utils/Backoff'; export interface IUpdateWorker { readonly backoff: Backoff, diff --git a/src/sync/streaming/__tests__/pushManager.spec.ts b/src/sync/streaming/__tests__/pushManager.spec.ts index 02161150..26b63f7d 100644 --- a/src/sync/streaming/__tests__/pushManager.spec.ts +++ b/src/sync/streaming/__tests__/pushManager.spec.ts @@ -1,4 +1,4 @@ -import pushManagerFactory from '../pushManager'; +import { pushManagerFactory } from '../pushManager'; import { EventEmitter } from '../../../utils/MinEvents'; import { fullSettings } from '../../../utils/settingsValidation/__tests__/settings.mocks'; import { IPushManagerCS } from '../types'; diff --git a/src/sync/streaming/pushManager.ts b/src/sync/streaming/pushManager.ts index e7b7caac..2ba45e92 100644 --- a/src/sync/streaming/pushManager.ts +++ b/src/sync/streaming/pushManager.ts @@ -3,15 +3,15 @@ import { ISSEClient } from './SSEClient/types'; import { IStorageSync } from '../../storages/types'; import { IReadinessManager } from '../../readiness/types'; import { ISegmentsSyncTask, IPollingManager } from '../polling/types'; -import objectAssign from 'object-assign'; -import Backoff from '../../utils/Backoff'; -import SSEHandlerFactory from './SSEHandler'; -import MySegmentsUpdateWorker from './UpdateWorkers/MySegmentsUpdateWorker'; -import SegmentsUpdateWorker from './UpdateWorkers/SegmentsUpdateWorker'; -import SplitsUpdateWorker from './UpdateWorkers/SplitsUpdateWorker'; +import { objectAssign } from '../../utils/lang/objectAssign'; +import { Backoff } from '../../utils/Backoff'; +import { SSEHandlerFactory } from './SSEHandler'; +import { MySegmentsUpdateWorker } from './UpdateWorkers/MySegmentsUpdateWorker'; +import { SegmentsUpdateWorker } from './UpdateWorkers/SegmentsUpdateWorker'; +import { SplitsUpdateWorker } from './UpdateWorkers/SplitsUpdateWorker'; import { authenticateFactory, hashUserKey } from './AuthClient'; import { forOwn } from '../../utils/lang'; -import SSEClient from './SSEClient'; +import { SSEClient } from './SSEClient'; import { IFetchAuth } from '../../services/types'; import { ISettings } from '../../types'; import { getMatching } from '../../utils/key'; @@ -29,7 +29,7 @@ import { IAuthTokenPushEnabled } from './AuthClient/types'; * - for server-side if key is not provided in settings. * - for client-side, with support for multiple clients, if key is provided in settings */ -export default function pushManagerFactory( +export function pushManagerFactory( pollingManager: IPollingManager, storage: IStorageSync, readiness: IReadinessManager, diff --git a/src/sync/submitters/submitterSyncTask.ts b/src/sync/submitters/submitterSyncTask.ts index bf92b2e9..a17df77d 100644 --- a/src/sync/submitters/submitterSyncTask.ts +++ b/src/sync/submitters/submitterSyncTask.ts @@ -1,4 +1,4 @@ -import syncTaskFactory from '../syncTask'; +import { syncTaskFactory } from '../syncTask'; import { ISyncTask, ITimeTracker } from '../types'; import { IRecorderCacheProducerSync } from '../../storages/types'; import { ILogger } from '../../logger/types'; diff --git a/src/sync/syncTask.ts b/src/sync/syncTask.ts index d86cb9f4..eb3a2c30 100644 --- a/src/sync/syncTask.ts +++ b/src/sync/syncTask.ts @@ -13,7 +13,7 @@ import { ISyncTask } from './types'; * @param taskName Optional task name for logging. * @returns A sync task that wraps the given task. */ -export default function syncTaskFactory(log: ILogger, task: (...args: Input) => Promise, period: number, taskName = 'task'): ISyncTask { +export function syncTaskFactory(log: ILogger, task: (...args: Input) => Promise, period: number, taskName = 'task'): ISyncTask { // Flag that indicates if the task is being executed let executing = false; diff --git a/src/trackers/__tests__/eventTracker.spec.ts b/src/trackers/__tests__/eventTracker.spec.ts index 0edb462e..aa2cd234 100644 --- a/src/trackers/__tests__/eventTracker.spec.ts +++ b/src/trackers/__tests__/eventTracker.spec.ts @@ -1,6 +1,6 @@ import { loggerMock } from '../../logger/__tests__/sdkLogger.mock'; import { SplitIO } from '../../types'; -import eventTrackerFactory from '../eventTracker'; +import { eventTrackerFactory } from '../eventTracker'; /* Mocks */ diff --git a/src/trackers/__tests__/impressionsTracker.spec.ts b/src/trackers/__tests__/impressionsTracker.spec.ts index b85135f1..fe763d67 100644 --- a/src/trackers/__tests__/impressionsTracker.spec.ts +++ b/src/trackers/__tests__/impressionsTracker.spec.ts @@ -1,5 +1,5 @@ -import impressionsTrackerFactory from '../impressionsTracker'; -import ImpressionCountsCacheInMemory from '../../storages/inMemory/ImpressionCountsCacheInMemory'; +import { impressionsTrackerFactory } from '../impressionsTracker'; +import { ImpressionCountsCacheInMemory } from '../../storages/inMemory/ImpressionCountsCacheInMemory'; import { impressionObserverSSFactory } from '../impressionObserver/impressionObserverSS'; import { impressionObserverCSFactory } from '../impressionObserver/impressionObserverCS'; import { ImpressionDTO } from '../../types'; diff --git a/src/trackers/eventTracker.ts b/src/trackers/eventTracker.ts index b18c0546..b3d63f6e 100644 --- a/src/trackers/eventTracker.ts +++ b/src/trackers/eventTracker.ts @@ -1,5 +1,5 @@ -import objectAssign from 'object-assign'; -import thenable from '../utils/promise/thenable'; +import { objectAssign } from '../utils/lang/objectAssign'; +import { thenable } from '../utils/promise/thenable'; import { IEventsCacheBase } from '../storages/types'; import { IEventsHandler, IEventTracker } from './types'; import { SplitIO } from '../types'; @@ -12,7 +12,7 @@ import { EVENTS_TRACKER_SUCCESS, ERROR_EVENTS_TRACKER } from '../logger/constant * @param eventsCache cache to save events * @param integrationsManager optional event handler used for integrations */ -export default function eventTrackerFactory( +export function eventTrackerFactory( log: ILogger, eventsCache: IEventsCacheBase, integrationsManager?: IEventsHandler diff --git a/src/trackers/impressionObserver/ImpressionObserver.ts b/src/trackers/impressionObserver/ImpressionObserver.ts index 8ec9d260..377a4f08 100644 --- a/src/trackers/impressionObserver/ImpressionObserver.ts +++ b/src/trackers/impressionObserver/ImpressionObserver.ts @@ -1,8 +1,8 @@ import { ImpressionDTO } from '../../types'; -import LRUCache from '../../utils/LRUCache'; +import { LRUCache } from '../../utils/LRUCache'; import { IImpressionObserver } from './types'; -export default class ImpressionObserver implements IImpressionObserver { +export class ImpressionObserver implements IImpressionObserver { private cache: LRUCache; private hasher: (impression: ImpressionDTO) => K; diff --git a/src/trackers/impressionObserver/impressionObserverCS.ts b/src/trackers/impressionObserver/impressionObserverCS.ts index bf86409e..712d8738 100644 --- a/src/trackers/impressionObserver/impressionObserverCS.ts +++ b/src/trackers/impressionObserver/impressionObserverCS.ts @@ -1,4 +1,4 @@ -import ImpressionObserver from './ImpressionObserver'; +import { ImpressionObserver } from './ImpressionObserver'; import { hash } from '../../utils/murmur3/murmur3'; import { buildKey } from './buildKey'; import { ImpressionDTO } from '../../types'; diff --git a/src/trackers/impressionObserver/impressionObserverSS.ts b/src/trackers/impressionObserver/impressionObserverSS.ts index 828cfc21..7a81279f 100644 --- a/src/trackers/impressionObserver/impressionObserverSS.ts +++ b/src/trackers/impressionObserver/impressionObserverSS.ts @@ -1,4 +1,4 @@ -import ImpressionObserver from './ImpressionObserver'; +import { ImpressionObserver } from './ImpressionObserver'; import { hash128 } from '../../utils/murmur3/murmur3_128_x86'; import { buildKey } from './buildKey'; import { ImpressionDTO } from '../../types'; diff --git a/src/trackers/impressionsTracker.ts b/src/trackers/impressionsTracker.ts index 1c43f7fb..c7c18e5b 100644 --- a/src/trackers/impressionsTracker.ts +++ b/src/trackers/impressionsTracker.ts @@ -1,5 +1,5 @@ -import objectAssign from 'object-assign'; -import thenable from '../utils/promise/thenable'; +import { objectAssign } from '../utils/lang/objectAssign'; +import { thenable } from '../utils/promise/thenable'; import { truncateTimeFrame } from '../utils/time'; import { IImpressionCountsCacheSync, IImpressionsCacheBase } from '../storages/types'; import { IImpressionsHandler, IImpressionsTracker } from './types'; @@ -18,7 +18,7 @@ import { IMPRESSIONS_TRACKER_SUCCESS, ERROR_IMPRESSIONS_TRACKER, ERROR_IMPRESSIO * @param observer optional impression observer. If provided, previous time (pt property) is included in impression instances * @param countsCache optional cache to save impressions count. If provided, impressions will be deduped (OPTIMIZED mode) */ -export default function impressionsTrackerFactory( +export function impressionsTrackerFactory( log: ILogger, impressionsCache: IImpressionsCacheBase, diff --git a/src/utils/Backoff.ts b/src/utils/Backoff.ts index 3e39c83a..0e710b4d 100644 --- a/src/utils/Backoff.ts +++ b/src/utils/Backoff.ts @@ -1,4 +1,4 @@ -export default class Backoff { +export class Backoff { static DEFAULT_BASE_MILLIS = 1000; // 1 second static DEFAULT_MAX_MILLIS = 1800000; // 30 minutes diff --git a/src/utils/LRUCache/__tests__/index.spec.ts b/src/utils/LRUCache/__tests__/index.spec.ts index 3e59b0e2..7d35c027 100644 --- a/src/utils/LRUCache/__tests__/index.spec.ts +++ b/src/utils/LRUCache/__tests__/index.spec.ts @@ -1,4 +1,4 @@ -import LRUCache from '..'; +import { LRUCache } from '..'; test('Check Cache', () => { const cache = new LRUCache(5); diff --git a/src/utils/LRUCache/index.ts b/src/utils/LRUCache/index.ts index bad7267f..edf1b59b 100644 --- a/src/utils/LRUCache/index.ts +++ b/src/utils/LRUCache/index.ts @@ -1,7 +1,7 @@ import { IMap, _Map } from '../lang/maps'; import { LinkedList, Node } from './LinkedList'; -export default class LRUCache { +export class LRUCache { maxLen: number; items: IMap>; lru: LinkedList<{ key: K, value: V }>; diff --git a/src/utils/MinEventEmitter.ts b/src/utils/MinEventEmitter.ts index 1ff39d4e..a081f1e7 100644 --- a/src/utils/MinEventEmitter.ts +++ b/src/utils/MinEventEmitter.ts @@ -11,7 +11,7 @@ function checkListener(listener: unknown) { } // @TODO implement missing methods, check spec and add UTs -export default class EventEmitter implements IEventEmitter { +export class EventEmitter implements IEventEmitter { private listeners: Record void, // the event listener diff --git a/src/utils/inputValidation/__tests__/trafficTypeExistance.spec.ts b/src/utils/inputValidation/__tests__/trafficTypeExistance.spec.ts index 293ccb84..ad19302f 100644 --- a/src/utils/inputValidation/__tests__/trafficTypeExistance.spec.ts +++ b/src/utils/inputValidation/__tests__/trafficTypeExistance.spec.ts @@ -1,7 +1,7 @@ import { IReadinessManager } from '../../../readiness/types'; import { ISplitsCacheBase } from '../../../storages/types'; import { LOCALHOST_MODE, STANDALONE_MODE } from '../../constants'; -import thenable from '../../promise/thenable'; +import { thenable } from '../../promise/thenable'; import { WARN_NOT_EXISTENT_TT } from '../../../logger/constants'; /** Mocks */ diff --git a/src/utils/inputValidation/trafficTypeExistance.ts b/src/utils/inputValidation/trafficTypeExistance.ts index 99d9f705..743ceb8f 100644 --- a/src/utils/inputValidation/trafficTypeExistance.ts +++ b/src/utils/inputValidation/trafficTypeExistance.ts @@ -1,4 +1,4 @@ -import thenable from '../promise/thenable'; +import { thenable } from '../promise/thenable'; import { LOCALHOST_MODE } from '../constants'; import { ISplitsCacheBase } from '../../storages/types'; import { IReadinessManager } from '../../readiness/types'; diff --git a/src/utils/lang/binarySearch.ts b/src/utils/lang/binarySearch.ts index 4cf34852..7ff83fa0 100644 --- a/src/utils/lang/binarySearch.ts +++ b/src/utils/lang/binarySearch.ts @@ -6,7 +6,7 @@ * @returns integer number between 0 and `items.length`. This value is the index of the search value, * if it is contained in the array, or the index at which the value should be inserted to keep the array ordered. */ -export default function binarySearch(items: number[], value: number): number { +export function binarySearch(items: number[], value: number): number { let startIndex = 0; let stopIndex = items.length - 1; let middle = Math.floor((stopIndex + startIndex) / 2); diff --git a/src/utils/lang/objectAssign.ts b/src/utils/lang/objectAssign.ts new file mode 100644 index 00000000..23fcbd9a --- /dev/null +++ b/src/utils/lang/objectAssign.ts @@ -0,0 +1,104 @@ +/* +Adaptation of "object-assign" library (https://www.npmjs.com/package/object-assign) +exported as an ES module instead of CommonJS, to avoid extra configuration steps when using +the ESM build of the SDK with tools that doesn't support CommonJS by default (e.g. Rollup). + +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +/* eslint-disable */ +// @ts-nocheck + +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +// https://www.npmjs.com/package/@types/object-assign +type ObjectAssign = ((target: T, source: U) => T & U) & + ((target: T, source1: U, source2: V) => T & U & V) & + ((target: T, source1: U, source2: V, source3: W) => T & U & V & W) & + ((target: T, source1: U, source2: V, source3: W, source4: Q) => T & U & V & W & Q) & + ((target: T, source1: U, source2: V, source3: W, source4: Q, source5: R) => T & U & V & W & Q & R) & + ((target: any, ...sources: any[]) => any); + +export const objectAssign: ObjectAssign = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + // eslint-disable-next-line no-restricted-syntax + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; diff --git a/src/utils/promise/thenable.ts b/src/utils/promise/thenable.ts index d63d489b..6770eba1 100644 --- a/src/utils/promise/thenable.ts +++ b/src/utils/promise/thenable.ts @@ -1,2 +1,4 @@ // returns true if the given value is a thenable object -export default (o: any): o is Promise => o !== undefined && o !== null && typeof o.then === 'function'; +export function thenable(o: any): o is Promise { + return o !== undefined && o !== null && typeof o.then === 'function'; +} diff --git a/src/utils/promise/timeout.ts b/src/utils/promise/timeout.ts index 3ca70b8c..9d3c12ee 100644 --- a/src/utils/promise/timeout.ts +++ b/src/utils/promise/timeout.ts @@ -1,4 +1,4 @@ -export default function timeout(ms: number, promise: Promise): Promise { +export function timeout(ms: number, promise: Promise): Promise { if (ms < 1) return promise; return new Promise((resolve, reject) => { diff --git a/src/utils/promise/wrapper.ts b/src/utils/promise/wrapper.ts index 7c7779ec..d0100fd6 100644 --- a/src/utils/promise/wrapper.ts +++ b/src/utils/promise/wrapper.ts @@ -16,7 +16,7 @@ * @returns a promise that doesn't need to be handled for rejection (except when using async/await syntax) and * includes a method named `hasOnFulfilled` that returns true if the promise has attached an onFulfilled handler. */ -export default function promiseWrapper(customPromise: Promise, defaultOnRejected: (_: any) => any): Promise & { hasOnFulfilled: () => boolean } { +export function promiseWrapper(customPromise: Promise, defaultOnRejected: (_: any) => any): Promise & { hasOnFulfilled: () => boolean } { let hasOnFulfilled = false; let hasOnRejected = false; diff --git a/src/utils/settingsValidation/impressionsMode.ts b/src/utils/settingsValidation/impressionsMode.ts index 84ae2f14..ddcda23d 100644 --- a/src/utils/settingsValidation/impressionsMode.ts +++ b/src/utils/settingsValidation/impressionsMode.ts @@ -3,7 +3,7 @@ import { ILogger } from '../../logger/types'; import { SplitIO } from '../../types'; import { DEBUG, OPTIMIZED } from '../constants'; -export default function validImpressionsMode(log: ILogger, impressionsMode: string): SplitIO.ImpressionsMode { +export function validImpressionsMode(log: ILogger, impressionsMode: string): SplitIO.ImpressionsMode { impressionsMode = impressionsMode.toUpperCase(); if ([DEBUG, OPTIMIZED].indexOf(impressionsMode) === -1) { log.error(ERROR_INVALID_IMPRESSIONS_MODE, [[DEBUG, OPTIMIZED], OPTIMIZED]); diff --git a/src/utils/settingsValidation/index.ts b/src/utils/settingsValidation/index.ts index 1840fdb5..321c2375 100644 --- a/src/utils/settingsValidation/index.ts +++ b/src/utils/settingsValidation/index.ts @@ -1,8 +1,8 @@ import { merge } from '../lang'; -import mode from './mode'; +import { mode } from './mode'; import { validateSplitFilters } from './splitFilters'; import { STANDALONE_MODE, OPTIMIZED, LOCALHOST_MODE } from '../constants'; -import validImpressionsMode from './impressionsMode'; +import { validImpressionsMode } from './impressionsMode'; import { ISettingsValidationParams } from './types'; import { ISettings } from '../../types'; diff --git a/src/utils/settingsValidation/mode.ts b/src/utils/settingsValidation/mode.ts index dd11fe06..8480a24b 100644 --- a/src/utils/settingsValidation/mode.ts +++ b/src/utils/settingsValidation/mode.ts @@ -1,6 +1,6 @@ import { LOCALHOST_MODE, STANDALONE_MODE, PRODUCER_MODE, CONSUMER_MODE, CONSUMER_PARTIAL_MODE } from '../constants'; -export default function mode(key: string, mode: string) { +export function mode(key: string, mode: string) { // Leaving the comparison as is, in case we change the mode name but not the setting. if (key === 'localhost') return LOCALHOST_MODE; diff --git a/src/utils/timeTracker/__tests__/index.spec.ts b/src/utils/timeTracker/__tests__/index.spec.ts index e95def88..e4036fd8 100644 --- a/src/utils/timeTracker/__tests__/index.spec.ts +++ b/src/utils/timeTracker/__tests__/index.spec.ts @@ -1,5 +1,5 @@ -import timer from '../timer'; -import tracker from '../index'; +import { timer } from '../timer'; +import { TrackerAPI } from '../index'; import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock'; import { IResponse } from '../../../services/types'; @@ -19,18 +19,18 @@ test('TIMER / should count the time between two tasks', (done) => { describe('TIME TRACKER', () => { test('should have the correct API', () => { - expect(typeof tracker.start).toBe('function'); // It should have the correct API. - expect(typeof tracker.stop).toBe('function'); // It should have the correct API. - expect(typeof tracker.TaskNames).toBe('object'); // It should have the correct API. + expect(typeof TrackerAPI.start).toBe('function'); // It should have the correct API. + expect(typeof TrackerAPI.stop).toBe('function'); // It should have the correct API. + expect(typeof TrackerAPI.TaskNames).toBe('object'); // It should have the correct API. }); test('start() / should return the correct type', () => { const promise = new Promise(res => { setTimeout(res, 1000); }); - const startNormal = tracker.start(loggerMock, tracker.TaskNames.SDK_READY); - const startNormalFake = tracker.start(loggerMock, 'fakeTask3'); - const startWithPromise = tracker.start(loggerMock, 'fakeTask4', undefined, promise); + const startNormal = TrackerAPI.start(loggerMock, TrackerAPI.TaskNames.SDK_READY); + const startNormalFake = TrackerAPI.start(loggerMock, 'fakeTask3'); + const startWithPromise = TrackerAPI.start(loggerMock, 'fakeTask4', undefined, promise); expect(typeof startNormal).toBe('function'); // If we call start without a promise, it will return the stop function, // @ts-expect-error @@ -42,14 +42,14 @@ describe('TIME TRACKER', () => { }); test('stop() / should stop the timer and return the time, if any', () => { - tracker.start(loggerMock, 'test_task'); + TrackerAPI.start(loggerMock, 'test_task'); // creating two tasks with the same task name - const stopFromStart = tracker.start(loggerMock, 'fakeTask5') as () => number; - const stopFromStart2 = tracker.start(loggerMock, 'fakeTask5') as () => number; + const stopFromStart = TrackerAPI.start(loggerMock, 'fakeTask5') as () => number; + const stopFromStart2 = TrackerAPI.start(loggerMock, 'fakeTask5') as () => number; - const stopNotExistentTask = tracker.stop(loggerMock, 'not_existent'); - const stopNotExistentTaskAndModifier = tracker.stop(loggerMock, 'test_task', 'mod'); + const stopNotExistentTask = TrackerAPI.stop(loggerMock, 'not_existent'); + const stopNotExistentTaskAndModifier = TrackerAPI.stop(loggerMock, 'test_task', 'mod'); expect(typeof stopNotExistentTask).toBe('undefined'); // If we try to stop a timer that does not exist, we get undefined. expect(typeof stopNotExistentTaskAndModifier).toBe('undefined'); // If we try to stop a timer that does not exist, we get undefined. diff --git a/src/utils/timeTracker/index.ts b/src/utils/timeTracker/index.ts index c6899659..a09289b8 100644 --- a/src/utils/timeTracker/index.ts +++ b/src/utils/timeTracker/index.ts @@ -1,6 +1,6 @@ import { uniqueId } from '../lang'; -import timer from './timer'; -import thenable from '../promise/thenable'; +import { timer } from './timer'; +import { thenable } from '../promise/thenable'; import { ILogger } from '../../logger/types'; import { IResponse } from '../../services/types'; @@ -112,7 +112,8 @@ function getCallbackForTask(task: string, collector: MetricsCollector | false): return false; } -const TrackerAPI = { +// Our "time tracker" API +export const TrackerAPI = { /** * "Private" method, used to attach count/countException and stop callbacks to a promise. * @@ -223,6 +224,3 @@ const TrackerAPI = { */ TaskNames: CONSTANTS }; - -// Our "time tracker" API -export default TrackerAPI; diff --git a/src/utils/timeTracker/now/browser.ts b/src/utils/timeTracker/now/browser.ts index 314ab2e4..5c939606 100644 --- a/src/utils/timeTracker/now/browser.ts +++ b/src/utils/timeTracker/now/browser.ts @@ -9,6 +9,4 @@ function nowFactory() { } } -const now = nowFactory(); - -export default now; +export const now = nowFactory(); diff --git a/src/utils/timeTracker/now/node.ts b/src/utils/timeTracker/now/node.ts index dbe3366d..fe5c5f27 100644 --- a/src/utils/timeTracker/now/node.ts +++ b/src/utils/timeTracker/now/node.ts @@ -1,5 +1,5 @@ // @TODO migrate to Node SDK package eventually -export default function now() { +export function now() { // eslint-disable-next-line no-undef let time = process.hrtime(); diff --git a/src/utils/timeTracker/timer.ts b/src/utils/timeTracker/timer.ts index 29b99405..425f993a 100644 --- a/src/utils/timeTracker/timer.ts +++ b/src/utils/timeTracker/timer.ts @@ -1,4 +1,4 @@ -export default function start(now?: () => number) { +export function timer(now?: () => number) { const st = now ? now() : Date.now(); return function stop() { From 605b119ce6f936e3f7e723a172a21d00cb3fb66d Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Mon, 3 Jan 2022 19:58:34 -0300 Subject: [PATCH 2/3] prepare rc --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 979c9292..b6c2312b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.0.1-rc.5", + "version": "1.0.1-rc.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 38d9443c..7a34192c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-commons", - "version": "1.0.1-rc.5", + "version": "1.0.1-rc.6", "description": "Split Javascript SDK common components", "main": "cjs/index.js", "module": "esm/index.js", From 9875f6bff7c9652583d189eb924c77ea21efc7f3 Mon Sep 17 00:00:00 2001 From: Emiliano Sanchez Date: Wed, 5 Jan 2022 16:52:22 -0300 Subject: [PATCH 3/3] polish log message 'Connecting to streaming' --- src/logger/messages/info.ts | 2 +- src/sync/streaming/pushManager.ts | 3 ++- src/utils/settingsValidation/index.ts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/logger/messages/info.ts b/src/logger/messages/info.ts index 22083bf6..42838345 100644 --- a/src/logger/messages/info.ts +++ b/src/logger/messages/info.ts @@ -24,7 +24,7 @@ export const codesInfo: [number, string][] = codesWarn.concat([ [c.SUBMITTERS_PUSH, c.LOG_PREFIX_SYNC_SUBMITTERS + 'Pushing %s %s.'], [c.STREAMING_REFRESH_TOKEN, c.LOG_PREFIX_SYNC_STREAMING + 'Refreshing streaming token in %s seconds, and connecting streaming in %s seconds.'], [c.STREAMING_RECONNECT, c.LOG_PREFIX_SYNC_STREAMING + 'Attempting to reconnect in %s seconds.'], - [c.STREAMING_CONNECTING, c.LOG_PREFIX_SYNC_STREAMING + '%sConnecting to streaming.'], + [c.STREAMING_CONNECTING, c.LOG_PREFIX_SYNC_STREAMING + 'Connecting to streaming.'], [c.STREAMING_DISABLED, c.LOG_PREFIX_SYNC_STREAMING + 'Streaming is disabled for given Api key. Switching to polling mode.'], [c.STREAMING_DISCONNECTING, c.LOG_PREFIX_SYNC_STREAMING + 'Disconnecting from streaming.'], [c.SYNC_START_POLLING, c.LOG_PREFIX_SYNC_MANAGER + 'Streaming not available. Starting polling.'], diff --git a/src/sync/streaming/pushManager.ts b/src/sync/streaming/pushManager.ts index 2ba45e92..f5130447 100644 --- a/src/sync/streaming/pushManager.ts +++ b/src/sync/streaming/pushManager.ts @@ -115,7 +115,8 @@ export function pushManagerFactory( function connectPush() { // Guard condition in case `stop/disconnectPush` has been called (e.g., calling SDK destroy, or app signal close/background) if (disconnected) return; - log.info(STREAMING_CONNECTING, [disconnected === undefined ? '' : 'Re-']); + // @TODO distinguish log for 'Connecting' (1st time) and 'Re-connecting' + log.info(STREAMING_CONNECTING); disconnected = false; const userKeys = userKey ? Object.keys(clients) : undefined; diff --git a/src/utils/settingsValidation/index.ts b/src/utils/settingsValidation/index.ts index 321c2375..e10965a0 100644 --- a/src/utils/settingsValidation/index.ts +++ b/src/utils/settingsValidation/index.ts @@ -122,7 +122,7 @@ export function settingsValidation(config: unknown, validationParams: ISettingsV // Startup periods startup.requestTimeoutBeforeReady = fromSecondsToMillis(startup.requestTimeoutBeforeReady); startup.readyTimeout = fromSecondsToMillis(startup.readyTimeout); - startup.eventsFirstPushWindow = fromSecondsToMillis(withDefaults.startup.eventsFirstPushWindow); + startup.eventsFirstPushWindow = fromSecondsToMillis(startup.eventsFirstPushWindow); // ensure a valid SDK mode // @ts-ignore, modify readonly prop