@splitsoftware/splitio-commons 1.6.2-rc.2 → 1.6.2-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/listeners/browser.js +1 -2
- package/cjs/logger/constants.js +1 -2
- package/cjs/sdkFactory/index.js +6 -14
- package/cjs/services/splitApi.js +1 -20
- package/cjs/storages/inLocalStorage/index.js +0 -4
- package/cjs/storages/inMemory/InMemoryStorage.js +1 -5
- package/cjs/storages/inMemory/InMemoryStorageCS.js +1 -5
- package/cjs/sync/submitters/submitterManager.js +0 -3
- package/cjs/sync/submitters/telemetrySubmitter.js +0 -1
- package/cjs/trackers/impressionsTracker.js +28 -7
- package/cjs/utils/constants/index.js +2 -4
- package/cjs/utils/key/index.js +1 -1
- package/cjs/utils/settingsValidation/impressionsMode.js +2 -2
- package/cjs/utils/settingsValidation/index.js +1 -3
- package/esm/listeners/browser.js +2 -3
- package/esm/logger/constants.js +0 -1
- package/esm/sdkFactory/index.js +6 -14
- package/esm/services/splitApi.js +1 -20
- package/esm/storages/inLocalStorage/index.js +1 -5
- package/esm/storages/inMemory/InMemoryStorage.js +2 -6
- package/esm/storages/inMemory/InMemoryStorageCS.js +2 -6
- package/esm/sync/submitters/submitterManager.js +0 -3
- package/esm/sync/submitters/telemetrySubmitter.js +1 -2
- package/esm/trackers/impressionsTracker.js +28 -7
- package/esm/utils/constants/index.js +0 -2
- package/esm/utils/key/index.js +1 -1
- package/esm/utils/settingsValidation/impressionsMode.js +3 -3
- package/esm/utils/settingsValidation/index.js +1 -3
- package/package.json +2 -2
- package/src/consent/sdkUserConsent.ts +4 -3
- package/src/dtos/types.ts +0 -8
- package/src/evaluator/Engine.ts +3 -3
- package/src/evaluator/combiners/and.ts +1 -1
- package/src/evaluator/combiners/ifelseif.ts +3 -3
- package/src/evaluator/condition/engineUtils.ts +1 -1
- package/src/evaluator/condition/index.ts +6 -6
- package/src/evaluator/index.ts +10 -10
- package/src/evaluator/matchers/all.ts +1 -1
- package/src/evaluator/matchers/between.ts +1 -1
- package/src/evaluator/matchers/boolean.ts +1 -1
- package/src/evaluator/matchers/cont_all.ts +1 -1
- package/src/evaluator/matchers/cont_any.ts +1 -1
- package/src/evaluator/matchers/cont_str.ts +1 -1
- package/src/evaluator/matchers/dependency.ts +1 -1
- package/src/evaluator/matchers/eq.ts +1 -1
- package/src/evaluator/matchers/eq_set.ts +1 -1
- package/src/evaluator/matchers/ew.ts +1 -1
- package/src/evaluator/matchers/gte.ts +1 -1
- package/src/evaluator/matchers/index.ts +1 -1
- package/src/evaluator/matchers/lte.ts +1 -1
- package/src/evaluator/matchers/part_of.ts +1 -1
- package/src/evaluator/matchers/segment.ts +1 -1
- package/src/evaluator/matchers/string.ts +1 -1
- package/src/evaluator/matchers/sw.ts +1 -1
- package/src/evaluator/matchers/whitelist.ts +1 -1
- package/src/evaluator/parser/index.ts +3 -3
- package/src/evaluator/types.ts +6 -6
- package/src/evaluator/value/index.ts +4 -4
- package/src/evaluator/value/sanitize.ts +4 -4
- package/src/integrations/ga/GaToSplit.ts +6 -6
- package/src/integrations/ga/SplitToGa.ts +10 -10
- package/src/integrations/ga/types.ts +4 -4
- package/src/integrations/pluggable.ts +3 -3
- package/src/integrations/types.ts +2 -2
- package/src/listeners/browser.ts +2 -3
- package/src/logger/.DS_Store +0 -0
- package/src/logger/constants.ts +0 -1
- package/src/logger/index.ts +3 -3
- package/src/logger/sdkLogger.ts +1 -2
- package/src/logger/types.ts +0 -16
- package/src/readiness/sdkReadinessManager.ts +1 -1
- package/src/readiness/types.ts +2 -9
- package/src/sdkClient/client.ts +13 -13
- package/src/sdkClient/clientAttributesDecoration.ts +9 -9
- package/src/sdkClient/clientCS.ts +3 -4
- package/src/sdkClient/clientInputValidation.ts +15 -15
- package/src/sdkClient/sdkClient.ts +2 -2
- package/src/sdkClient/sdkClientMethod.ts +2 -2
- package/src/sdkClient/sdkClientMethodCS.ts +9 -9
- package/src/sdkClient/sdkClientMethodCSWithTT.ts +9 -9
- package/src/sdkFactory/index.ts +8 -18
- package/src/sdkFactory/types.ts +8 -11
- package/src/sdkManager/index.ts +5 -5
- package/src/services/splitApi.ts +1 -22
- package/src/services/types.ts +0 -6
- package/src/storages/dataLoader.ts +2 -2
- package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +1 -1
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +2 -2
- package/src/storages/inLocalStorage/index.ts +4 -6
- package/src/storages/inMemory/EventsCacheInMemory.ts +4 -4
- package/src/storages/inMemory/InMemoryStorage.ts +2 -5
- package/src/storages/inMemory/InMemoryStorageCS.ts +2 -6
- package/src/storages/inRedis/EventsCacheInRedis.ts +4 -4
- package/src/storages/inRedis/ImpressionsCacheInRedis.ts +1 -1
- package/src/storages/inRedis/RedisAdapter.ts +1 -1
- package/src/storages/inRedis/SegmentsCacheInRedis.ts +1 -1
- package/src/storages/inRedis/SplitsCacheInRedis.ts +1 -1
- package/src/storages/inRedis/TelemetryCacheInRedis.ts +1 -1
- package/src/storages/inRedis/index.ts +3 -2
- package/src/storages/pluggable/EventsCachePluggable.ts +4 -4
- package/src/storages/pluggable/ImpressionsCachePluggable.ts +1 -1
- package/src/storages/pluggable/SegmentsCachePluggable.ts +1 -1
- package/src/storages/pluggable/SplitsCachePluggable.ts +1 -1
- package/src/storages/pluggable/TelemetryCachePluggable.ts +1 -1
- package/src/storages/pluggable/index.ts +3 -3
- package/src/storages/pluggable/wrapperAdapter.ts +1 -1
- package/src/storages/types.ts +48 -40
- package/src/sync/offline/LocalhostFromObject.ts +4 -4
- package/src/sync/offline/splitsParser/splitsParserFromSettings.ts +8 -8
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +1 -1
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
- package/src/sync/polling/updaters/splitChangesUpdater.ts +1 -1
- package/src/sync/streaming/SSEHandler/index.ts +1 -1
- package/src/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.ts +1 -1
- package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +1 -1
- package/src/sync/submitters/submitter.ts +1 -1
- package/src/sync/submitters/submitterManager.ts +0 -2
- package/src/sync/submitters/telemetrySubmitter.ts +3 -4
- package/src/sync/submitters/types.ts +3 -22
- package/src/sync/syncTask.ts +1 -1
- package/src/trackers/eventTracker.ts +3 -3
- package/src/trackers/impressionsTracker.ts +38 -15
- package/src/trackers/types.ts +4 -30
- package/src/types.d.ts +1646 -0
- package/src/utils/constants/index.ts +1 -3
- package/src/utils/inputValidation/apiKey.ts +1 -1
- package/src/utils/inputValidation/attribute.ts +1 -1
- package/src/utils/inputValidation/attributes.ts +3 -3
- package/src/utils/inputValidation/event.ts +1 -1
- package/src/utils/inputValidation/eventProperties.ts +3 -3
- package/src/utils/inputValidation/eventValue.ts +1 -1
- package/src/utils/inputValidation/isOperational.ts +1 -1
- package/src/utils/inputValidation/key.ts +3 -3
- package/src/utils/inputValidation/preloadedData.ts +3 -3
- package/src/utils/inputValidation/split.ts +1 -1
- package/src/utils/inputValidation/splitExistance.ts +1 -1
- package/src/utils/inputValidation/splits.ts +1 -1
- package/src/utils/inputValidation/trafficType.ts +1 -1
- package/src/utils/inputValidation/trafficTypeExistance.ts +1 -1
- package/src/utils/key/index.ts +9 -9
- package/src/utils/settingsValidation/consent.ts +1 -2
- package/src/utils/settingsValidation/impressionsMode.ts +6 -6
- package/src/utils/settingsValidation/index.ts +1 -4
- package/src/utils/settingsValidation/integrations/common.ts +1 -1
- package/src/utils/settingsValidation/integrations/configurable.ts +1 -1
- package/src/utils/settingsValidation/integrations/pluggable.ts +1 -2
- package/src/utils/settingsValidation/localhost/builtin.ts +1 -2
- package/src/utils/settingsValidation/localhost/pluggable.ts +1 -2
- package/src/utils/settingsValidation/logger/builtinLogger.ts +1 -2
- package/src/utils/settingsValidation/logger/pluggableLogger.ts +1 -2
- package/src/utils/settingsValidation/splitFilters.ts +7 -9
- package/src/utils/settingsValidation/storage/storageCS.ts +1 -2
- package/types/consent/sdkUserConsent.d.ts +2 -9
- package/types/dtos/types.d.ts +0 -6
- package/types/evaluator/Engine.d.ts +3 -3
- package/types/evaluator/combiners/and.d.ts +1 -1
- package/types/evaluator/combiners/ifelseif.d.ts +1 -1
- package/types/evaluator/condition/engineUtils.d.ts +1 -1
- package/types/evaluator/condition/index.d.ts +1 -1
- package/types/evaluator/index.d.ts +4 -4
- package/types/evaluator/matchers/all.d.ts +1 -1
- package/types/evaluator/matchers/between.d.ts +1 -1
- package/types/evaluator/matchers/boolean.d.ts +1 -1
- package/types/evaluator/matchers/cont_all.d.ts +1 -1
- package/types/evaluator/matchers/cont_any.d.ts +1 -1
- package/types/evaluator/matchers/cont_str.d.ts +1 -1
- package/types/evaluator/matchers/dependency.d.ts +1 -1
- package/types/evaluator/matchers/eq.d.ts +1 -1
- package/types/evaluator/matchers/eq_set.d.ts +1 -1
- package/types/evaluator/matchers/ew.d.ts +1 -1
- package/types/evaluator/matchers/gte.d.ts +1 -1
- package/types/evaluator/matchers/index.d.ts +1 -1
- package/types/evaluator/matchers/lte.d.ts +1 -1
- package/types/evaluator/matchers/part_of.d.ts +1 -1
- package/types/evaluator/matchers/segment.d.ts +1 -1
- package/types/evaluator/matchers/string.d.ts +1 -1
- package/types/evaluator/matchers/sw.d.ts +1 -1
- package/types/evaluator/matchers/whitelist.d.ts +1 -1
- package/types/evaluator/parser/index.d.ts +1 -1
- package/types/evaluator/types.d.ts +6 -6
- package/types/evaluator/value/index.d.ts +3 -3
- package/types/evaluator/value/sanitize.d.ts +3 -3
- package/types/integrations/ga/GaToSplit.d.ts +4 -4
- package/types/integrations/ga/SplitToGa.d.ts +4 -4
- package/types/integrations/ga/types.d.ts +4 -4
- package/types/integrations/types.d.ts +2 -2
- package/types/logger/constants.d.ts +0 -1
- package/types/logger/index.d.ts +3 -5
- package/types/logger/sdkLogger.d.ts +1 -2
- package/types/logger/types.d.ts +0 -11
- package/types/readiness/sdkReadinessManager.d.ts +1 -1
- package/types/readiness/types.d.ts +2 -8
- package/types/sdkClient/client.d.ts +2 -2
- package/types/sdkClient/clientAttributesDecoration.d.ts +8 -8
- package/types/sdkClient/clientCS.d.ts +2 -3
- package/types/sdkClient/clientInputValidation.d.ts +2 -2
- package/types/sdkClient/sdkClient.d.ts +2 -2
- package/types/sdkClient/sdkClientMethod.d.ts +2 -2
- package/types/sdkClient/sdkClientMethodCS.d.ts +2 -2
- package/types/sdkClient/sdkClientMethodCSWithTT.d.ts +2 -2
- package/types/sdkFactory/index.d.ts +2 -2
- package/types/sdkFactory/types.d.ts +8 -10
- package/types/sdkManager/index.d.ts +3 -3
- package/types/services/types.d.ts +0 -4
- package/types/storages/dataLoader.d.ts +2 -2
- package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +1 -1
- package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -2
- package/types/storages/inLocalStorage/index.d.ts +2 -2
- package/types/storages/inMemory/EventsCacheInMemory.d.ts +3 -3
- package/types/storages/inMemory/InMemoryStorage.d.ts +1 -1
- package/types/storages/inMemory/InMemoryStorageCS.d.ts +1 -1
- package/types/storages/inRedis/EventsCacheInRedis.d.ts +3 -3
- package/types/storages/inRedis/ImpressionsCacheInRedis.d.ts +1 -1
- package/types/storages/inRedis/RedisAdapter.d.ts +1 -1
- package/types/storages/inRedis/SegmentsCacheInRedis.d.ts +1 -1
- package/types/storages/inRedis/SplitsCacheInRedis.d.ts +1 -1
- package/types/storages/inRedis/TelemetryCacheInRedis.d.ts +1 -1
- package/types/storages/inRedis/index.d.ts +2 -2
- package/types/storages/pluggable/EventsCachePluggable.d.ts +3 -3
- package/types/storages/pluggable/ImpressionsCachePluggable.d.ts +1 -1
- package/types/storages/pluggable/SegmentsCachePluggable.d.ts +1 -1
- package/types/storages/pluggable/SplitsCachePluggable.d.ts +1 -1
- package/types/storages/pluggable/TelemetryCachePluggable.d.ts +1 -1
- package/types/storages/pluggable/index.d.ts +3 -2
- package/types/storages/pluggable/wrapperAdapter.d.ts +1 -1
- package/types/storages/types.d.ts +46 -30
- package/types/sync/offline/LocalhostFromObject.d.ts +2 -2
- package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +1 -1
- package/types/sync/polling/updaters/segmentChangesUpdater.d.ts +1 -1
- package/types/sync/polling/updaters/splitChangesUpdater.d.ts +1 -1
- package/types/sync/streaming/SSEHandler/index.d.ts +1 -1
- package/types/sync/streaming/UpdateWorkers/SegmentsUpdateWorker.d.ts +1 -1
- package/types/sync/streaming/UpdateWorkers/SplitsUpdateWorker.d.ts +1 -1
- package/types/sync/submitters/submitter.d.ts +1 -1
- package/types/sync/submitters/types.d.ts +3 -20
- package/types/sync/syncTask.d.ts +1 -1
- package/types/trackers/impressionsTracker.d.ts +6 -4
- package/types/trackers/types.d.ts +4 -25
- package/types/utils/constants/index.d.ts +1 -3
- package/types/utils/inputValidation/apiKey.d.ts +1 -1
- package/types/utils/inputValidation/attribute.d.ts +1 -1
- package/types/utils/inputValidation/attributes.d.ts +3 -3
- package/types/utils/inputValidation/event.d.ts +1 -1
- package/types/utils/inputValidation/eventProperties.d.ts +3 -3
- package/types/utils/inputValidation/eventValue.d.ts +1 -1
- package/types/utils/inputValidation/isOperational.d.ts +1 -1
- package/types/utils/inputValidation/key.d.ts +3 -3
- package/types/utils/inputValidation/preloadedData.d.ts +3 -3
- package/types/utils/inputValidation/split.d.ts +1 -1
- package/types/utils/inputValidation/splitExistance.d.ts +1 -1
- package/types/utils/inputValidation/splits.d.ts +1 -1
- package/types/utils/inputValidation/trafficType.d.ts +1 -1
- package/types/utils/inputValidation/trafficTypeExistance.d.ts +1 -1
- package/types/utils/key/index.d.ts +4 -4
- package/types/utils/settingsValidation/consent.d.ts +1 -2
- package/types/utils/settingsValidation/impressionsMode.d.ts +3 -3
- package/types/utils/settingsValidation/index.d.ts +0 -1
- package/types/utils/settingsValidation/integrations/common.d.ts +1 -1
- package/types/utils/settingsValidation/integrations/configurable.d.ts +1 -1
- package/types/utils/settingsValidation/integrations/pluggable.d.ts +1 -2
- package/types/utils/settingsValidation/localhost/builtin.d.ts +1 -2
- package/types/utils/settingsValidation/localhost/pluggable.d.ts +1 -2
- package/types/utils/settingsValidation/logger/builtinLogger.d.ts +1 -1
- package/types/utils/settingsValidation/logger/pluggableLogger.d.ts +1 -1
- package/types/utils/settingsValidation/splitFilters.d.ts +1 -2
- package/types/utils/settingsValidation/storage/storageCS.d.ts +2 -3
- package/cjs/storages/inMemory/uniqueKeysCacheInMemory.js +0 -73
- package/cjs/storages/inMemory/uniqueKeysCacheInMemoryCS.js +0 -78
- package/cjs/sync/submitters/uniqueKeysSubmitter.js +0 -26
- package/cjs/trackers/strategy/strategyDebug.js +0 -25
- package/cjs/trackers/strategy/strategyNone.js +0 -29
- package/cjs/trackers/strategy/strategyOptimized.js +0 -34
- package/cjs/trackers/uniqueKeysTracker.js +0 -31
- package/cjs/types.js +0 -2
- package/esm/storages/inMemory/uniqueKeysCacheInMemory.js +0 -70
- package/esm/storages/inMemory/uniqueKeysCacheInMemoryCS.js +0 -75
- package/esm/sync/submitters/uniqueKeysSubmitter.js +0 -22
- package/esm/trackers/strategy/strategyDebug.js +0 -21
- package/esm/trackers/strategy/strategyNone.js +0 -25
- package/esm/trackers/strategy/strategyOptimized.js +0 -30
- package/esm/trackers/uniqueKeysTracker.js +0 -27
- package/esm/types.js +0 -1
- package/src/storages/inMemory/uniqueKeysCacheInMemory.ts +0 -83
- package/src/storages/inMemory/uniqueKeysCacheInMemoryCS.ts +0 -89
- package/src/sync/submitters/uniqueKeysSubmitter.ts +0 -35
- package/src/trackers/strategy/strategyDebug.ts +0 -28
- package/src/trackers/strategy/strategyNone.ts +0 -34
- package/src/trackers/strategy/strategyOptimized.ts +0 -42
- package/src/trackers/uniqueKeysTracker.ts +0 -37
- package/src/types.ts +0 -1265
- package/types/sdkClient/types.d.ts +0 -18
- package/types/storages/inMemory/CountsCacheInMemory.d.ts +0 -20
- package/types/storages/inMemory/LatenciesCacheInMemory.d.ts +0 -20
- package/types/storages/inMemory/uniqueKeysCacheInMemory.d.ts +0 -32
- package/types/storages/inMemory/uniqueKeysCacheInMemoryCS.d.ts +0 -37
- package/types/storages/inRedis/CountsCacheInRedis.d.ts +0 -9
- package/types/storages/inRedis/LatenciesCacheInRedis.d.ts +0 -9
- package/types/sync/offline/LocalhostFromFile.d.ts +0 -2
- package/types/sync/offline/splitsParser/splitsParserFromFile.d.ts +0 -2
- package/types/sync/submitters/eventsSyncTask.d.ts +0 -8
- package/types/sync/submitters/impressionCountsSyncTask.d.ts +0 -13
- package/types/sync/submitters/impressionsSyncTask.d.ts +0 -14
- package/types/sync/submitters/metricsSyncTask.d.ts +0 -12
- package/types/sync/submitters/submitterSyncTask.d.ts +0 -10
- package/types/sync/submitters/uniqueKeysSubmitter.d.ts +0 -5
- package/types/sync/syncTaskComposite.d.ts +0 -5
- package/types/trackers/filter/bloomFilter.d.ts +0 -10
- package/types/trackers/filter/dictionaryFilter.d.ts +0 -8
- package/types/trackers/filter/types.d.ts +0 -5
- package/types/trackers/strategy/strategyDebug.d.ts +0 -9
- package/types/trackers/strategy/strategyNone.d.ts +0 -10
- package/types/trackers/strategy/strategyOptimized.d.ts +0 -11
- package/types/trackers/uniqueKeysTracker.d.ts +0 -13
- package/types/types.d.ts +0 -1263
- package/types/utils/timeTracker/index.d.ts +0 -70
|
@@ -2,7 +2,6 @@ import { eventsSubmitterFactory } from './eventsSubmitter';
|
|
|
2
2
|
import { impressionsSubmitterFactory } from './impressionsSubmitter';
|
|
3
3
|
import { impressionCountsSubmitterFactory } from './impressionCountsSubmitter';
|
|
4
4
|
import { telemetrySubmitterFactory } from './telemetrySubmitter';
|
|
5
|
-
import { uniqueKeysSubmitterFactory } from './uniqueKeysSubmitter';
|
|
6
5
|
export function submitterManagerFactory(params) {
|
|
7
6
|
var submitters = [
|
|
8
7
|
impressionsSubmitterFactory(params),
|
|
@@ -12,8 +11,6 @@ export function submitterManagerFactory(params) {
|
|
|
12
11
|
if (impressionCountsSubmitter)
|
|
13
12
|
submitters.push(impressionCountsSubmitter);
|
|
14
13
|
var telemetrySubmitter = telemetrySubmitterFactory(params);
|
|
15
|
-
if (params.uniqueKeysTracker)
|
|
16
|
-
submitters.push(uniqueKeysSubmitterFactory(params));
|
|
17
14
|
return {
|
|
18
15
|
// `onlyTelemetry` true if SDK is created with userConsent not GRANTED
|
|
19
16
|
start: function (onlyTelemetry) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var _a, _b, _c;
|
|
2
2
|
import { submitterFactory, firstPushWindowDecorator } from './submitter';
|
|
3
|
-
import { QUEUED, DEDUPED, DROPPED, CONSUMER_MODE, CONSUMER_ENUM, STANDALONE_MODE, CONSUMER_PARTIAL_MODE, STANDALONE_ENUM, CONSUMER_PARTIAL_ENUM, OPTIMIZED, DEBUG,
|
|
3
|
+
import { QUEUED, DEDUPED, DROPPED, CONSUMER_MODE, CONSUMER_ENUM, STANDALONE_MODE, CONSUMER_PARTIAL_MODE, STANDALONE_ENUM, CONSUMER_PARTIAL_ENUM, OPTIMIZED, DEBUG, DEBUG_ENUM, OPTIMIZED_ENUM, CONSENT_GRANTED, CONSENT_DECLINED, CONSENT_UNKNOWN } from '../../utils/constants';
|
|
4
4
|
import { SDK_READY, SDK_READY_FROM_CACHE } from '../../readiness/constants';
|
|
5
5
|
import { base } from '../../utils/settingsValidation';
|
|
6
6
|
import { usedKeysMap } from '../../utils/inputValidation/apiKey';
|
|
@@ -46,7 +46,6 @@ var OPERATION_MODE_MAP = (_a = {},
|
|
|
46
46
|
var IMPRESSIONS_MODE_MAP = (_b = {},
|
|
47
47
|
_b[OPTIMIZED] = OPTIMIZED_ENUM,
|
|
48
48
|
_b[DEBUG] = DEBUG_ENUM,
|
|
49
|
-
_b[NONE] = NONE_ENUM,
|
|
50
49
|
_b);
|
|
51
50
|
var USER_CONSENT_MAP = (_c = {},
|
|
52
51
|
_c[CONSENT_UNKNOWN] = 1,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { objectAssign } from '../utils/lang/objectAssign';
|
|
2
2
|
import { thenable } from '../utils/promise/thenable';
|
|
3
|
+
import { truncateTimeFrame } from '../utils/time';
|
|
3
4
|
import { IMPRESSIONS_TRACKER_SUCCESS, ERROR_IMPRESSIONS_TRACKER, ERROR_IMPRESSIONS_LISTENER } from '../logger/constants';
|
|
4
5
|
import { CONSENT_DECLINED, DEDUPED, QUEUED } from '../utils/constants';
|
|
5
6
|
/**
|
|
@@ -9,17 +10,37 @@ import { CONSENT_DECLINED, DEDUPED, QUEUED } from '../utils/constants';
|
|
|
9
10
|
* @param metadata runtime metadata (ip, hostname and version)
|
|
10
11
|
* @param impressionListener optional impression listener
|
|
11
12
|
* @param integrationsManager optional integrations manager
|
|
12
|
-
* @param
|
|
13
|
+
* @param observer optional impression observer. If provided, previous time (pt property) is included in impression instances
|
|
14
|
+
* @param countsCache optional cache to save impressions count. If provided, impressions will be deduped (OPTIMIZED mode)
|
|
13
15
|
*/
|
|
14
|
-
export function impressionsTrackerFactory(settings, impressionsCache,
|
|
16
|
+
export function impressionsTrackerFactory(settings, impressionsCache, integrationsManager,
|
|
17
|
+
// if observer is provided, it implies `shouldAddPreviousTime` flag (i.e., if impressions previous time should be added or not)
|
|
18
|
+
observer,
|
|
19
|
+
// if countsCache is provided, it implies `isOptimized` flag (i.e., if impressions should be deduped or not)
|
|
20
|
+
countsCache, telemetryCache) {
|
|
15
21
|
var log = settings.log, impressionListener = settings.impressionListener, _a = settings.runtime, ip = _a.ip, hostname = _a.hostname, version = settings.version;
|
|
16
22
|
return {
|
|
17
23
|
track: function (impressions, attributes) {
|
|
18
24
|
if (settings.userConsent === CONSENT_DECLINED)
|
|
19
25
|
return;
|
|
20
26
|
var impressionsCount = impressions.length;
|
|
21
|
-
var
|
|
22
|
-
|
|
27
|
+
var impressionsToStore = []; // Track only the impressions that are going to be stored
|
|
28
|
+
// Wraps impressions to store and adds previousTime if it corresponds
|
|
29
|
+
impressions.forEach(function (impression) {
|
|
30
|
+
if (observer) {
|
|
31
|
+
// Adds previous time if it is enabled
|
|
32
|
+
impression.pt = observer.testAndSet(impression);
|
|
33
|
+
}
|
|
34
|
+
var now = Date.now();
|
|
35
|
+
if (countsCache) {
|
|
36
|
+
// Increments impression counter per featureName
|
|
37
|
+
countsCache.track(impression.feature, now, 1);
|
|
38
|
+
}
|
|
39
|
+
// Checks if the impression should be added in queue to be sent
|
|
40
|
+
if (!countsCache || !impression.pt || impression.pt < truncateTimeFrame(now)) {
|
|
41
|
+
impressionsToStore.push(impression);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
23
44
|
var res = impressionsCache.track(impressionsToStore);
|
|
24
45
|
// If we're on an async storage, handle error and log it.
|
|
25
46
|
if (thenable(res)) {
|
|
@@ -34,7 +55,7 @@ export function impressionsTrackerFactory(settings, impressionsCache, strategy,
|
|
|
34
55
|
// @TODO we are not dropping impressions on full queue yet, so DROPPED stats are not recorded
|
|
35
56
|
if (telemetryCache) {
|
|
36
57
|
telemetryCache.recordImpressionStats(QUEUED, impressionsToStore.length);
|
|
37
|
-
telemetryCache.recordImpressionStats(DEDUPED,
|
|
58
|
+
telemetryCache.recordImpressionStats(DEDUPED, impressions.length - impressionsToStore.length);
|
|
38
59
|
}
|
|
39
60
|
}
|
|
40
61
|
// @TODO next block might be handled by the integration manager. In that case, the metadata object doesn't need to be passed in the constructor
|
|
@@ -42,7 +63,7 @@ export function impressionsTrackerFactory(settings, impressionsCache, strategy,
|
|
|
42
63
|
var _loop_1 = function (i) {
|
|
43
64
|
var impressionData = {
|
|
44
65
|
// copy of impression, to avoid unexpected behaviour if modified by integrations or impressionListener
|
|
45
|
-
impression: objectAssign({},
|
|
66
|
+
impression: objectAssign({}, impressions[i]),
|
|
46
67
|
attributes: attributes,
|
|
47
68
|
ip: ip,
|
|
48
69
|
hostname: hostname,
|
|
@@ -62,7 +83,7 @@ export function impressionsTrackerFactory(settings, impressionsCache, strategy,
|
|
|
62
83
|
}
|
|
63
84
|
}, 0);
|
|
64
85
|
};
|
|
65
|
-
for (var i = 0; i <
|
|
86
|
+
for (var i = 0; i < impressionsCount; i++) {
|
|
66
87
|
_loop_1(i);
|
|
67
88
|
}
|
|
68
89
|
}
|
|
@@ -13,7 +13,6 @@ export var SPLIT_EVENT = 'EVENT';
|
|
|
13
13
|
// Impression collection modes
|
|
14
14
|
export var DEBUG = 'DEBUG';
|
|
15
15
|
export var OPTIMIZED = 'OPTIMIZED';
|
|
16
|
-
export var NONE = 'NONE';
|
|
17
16
|
// SDK Modes
|
|
18
17
|
export var LOCALHOST_MODE = 'localhost';
|
|
19
18
|
export var STANDALONE_MODE = 'standalone';
|
|
@@ -38,7 +37,6 @@ export var CONSUMER_ENUM = 1;
|
|
|
38
37
|
export var CONSUMER_PARTIAL_ENUM = 2;
|
|
39
38
|
export var OPTIMIZED_ENUM = 0;
|
|
40
39
|
export var DEBUG_ENUM = 1;
|
|
41
|
-
export var NONE_ENUM = 2;
|
|
42
40
|
export var SPLITS = 'sp';
|
|
43
41
|
export var IMPRESSIONS = 'im';
|
|
44
42
|
export var IMPRESSIONS_COUNT = 'ic';
|
package/esm/utils/key/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isObject } from '../lang';
|
|
2
|
-
// function isSplitKeyObject(key: any): key is
|
|
2
|
+
// function isSplitKeyObject(key: any): key is SplitKeyObject {
|
|
3
3
|
// return key !== undefined && key !== null && typeof key.matchingKey === 'string';
|
|
4
4
|
// }
|
|
5
5
|
// returns the matchingKey if the Key is defined as an object or the key itself if it is a string
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ERROR_INVALID_CONFIG_PARAM } from '../../logger/constants';
|
|
2
|
-
import { DEBUG, OPTIMIZED
|
|
2
|
+
import { DEBUG, OPTIMIZED } from '../constants';
|
|
3
3
|
import { stringToUpperCase } from '../lang';
|
|
4
4
|
export function validImpressionsMode(log, impressionsMode) {
|
|
5
5
|
impressionsMode = stringToUpperCase(impressionsMode);
|
|
6
|
-
if ([DEBUG, OPTIMIZED
|
|
6
|
+
if ([DEBUG, OPTIMIZED].indexOf(impressionsMode) > -1)
|
|
7
7
|
return impressionsMode;
|
|
8
|
-
log.error(ERROR_INVALID_CONFIG_PARAM, ['impressionsMode', [DEBUG, OPTIMIZED
|
|
8
|
+
log.error(ERROR_INVALID_CONFIG_PARAM, ['impressionsMode', [DEBUG, OPTIMIZED], OPTIMIZED]);
|
|
9
9
|
return OPTIMIZED;
|
|
10
10
|
}
|
|
@@ -31,8 +31,6 @@ export var base = {
|
|
|
31
31
|
telemetryRefreshRate: 3600,
|
|
32
32
|
// publish evaluations each 300 sec (default value for OPTIMIZED impressions mode)
|
|
33
33
|
impressionsRefreshRate: 300,
|
|
34
|
-
// publish unique Keys each 900 sec (15 min)
|
|
35
|
-
uniqueKeysRefreshRate: 900,
|
|
36
34
|
// fetch offline changes each 15 sec
|
|
37
35
|
offlineRefreshRate: 15,
|
|
38
36
|
// publish events every 60 seconds after the first flush
|
|
@@ -111,7 +109,6 @@ export function settingsValidation(config, validationParams) {
|
|
|
111
109
|
scheduler.segmentsRefreshRate = fromSecondsToMillis(scheduler.segmentsRefreshRate);
|
|
112
110
|
scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate);
|
|
113
111
|
scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate);
|
|
114
|
-
scheduler.uniqueKeysRefreshRate = fromSecondsToMillis(scheduler.uniqueKeysRefreshRate);
|
|
115
112
|
scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60));
|
|
116
113
|
// Default impressionsRefreshRate for DEBUG mode is 60 secs
|
|
117
114
|
if (get(config, 'scheduler.impressionsRefreshRate') === undefined && withDefaults.sync.impressionsMode === DEBUG)
|
|
@@ -175,6 +172,7 @@ export function settingsValidation(config, validationParams) {
|
|
|
175
172
|
// validate the `splitFilters` settings and parse splits query
|
|
176
173
|
var splitFiltersValidation = validateSplitFilters(log, withDefaults.sync.splitFilters, withDefaults.mode);
|
|
177
174
|
withDefaults.sync.splitFilters = splitFiltersValidation.validFilters;
|
|
175
|
+
// @ts-ignore
|
|
178
176
|
withDefaults.sync.__splitFiltersValidation = splitFiltersValidation;
|
|
179
177
|
// ensure a valid user consent value
|
|
180
178
|
// @ts-ignore, modify readonly prop
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@splitsoftware/splitio-commons",
|
|
3
|
-
"version": "1.6.2-rc.
|
|
3
|
+
"version": "1.6.2-rc.3",
|
|
4
4
|
"description": "Split Javascript SDK common components",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"check:lint": "eslint src --ext .js,.ts",
|
|
21
21
|
"check:types": "tsc --noEmit",
|
|
22
22
|
"build": "npm run build:cjs && npm run build:esm",
|
|
23
|
-
"build:esm": "rimraf esm && tsc -m es2015 --outDir esm -d true --declarationDir types",
|
|
23
|
+
"build:esm": "rimraf esm types && tsc -m es2015 --outDir esm -d true --declarationDir types",
|
|
24
24
|
"build:cjs": "rimraf cjs && tsc -m CommonJS --outDir cjs",
|
|
25
25
|
"test": "jest",
|
|
26
26
|
"test:coverage": "jest --coverage",
|
|
@@ -3,9 +3,10 @@ import { isConsentGranted } from './index';
|
|
|
3
3
|
import { CONSENT_GRANTED, CONSENT_DECLINED, CONSENT_UNKNOWN } from '../utils/constants';
|
|
4
4
|
import { isBoolean } from '../utils/lang';
|
|
5
5
|
import { ISdkFactoryContext } from '../sdkFactory/types';
|
|
6
|
+
import { IUserConsentAPI } from '../types';
|
|
6
7
|
|
|
7
8
|
// User consent enum
|
|
8
|
-
const ConsentStatus = {
|
|
9
|
+
const ConsentStatus: IUserConsentAPI['Status'] = {
|
|
9
10
|
GRANTED: CONSENT_GRANTED,
|
|
10
11
|
DECLINED: CONSENT_DECLINED,
|
|
11
12
|
UNKNOWN: CONSENT_UNKNOWN,
|
|
@@ -14,7 +15,7 @@ const ConsentStatus = {
|
|
|
14
15
|
/**
|
|
15
16
|
* The public user consent API exposed via SplitFactory, used to control if the SDK tracks and sends impressions and events or not.
|
|
16
17
|
*/
|
|
17
|
-
export function createUserConsentAPI(params: ISdkFactoryContext) {
|
|
18
|
+
export function createUserConsentAPI(params: ISdkFactoryContext): IUserConsentAPI {
|
|
18
19
|
const { settings, settings: { log }, syncManager, storage: { events, impressions, impressionCounts } } = params;
|
|
19
20
|
|
|
20
21
|
if (!isConsentGranted(settings)) log.info(USER_CONSENT_INITIAL, [settings.userConsent]);
|
|
@@ -51,7 +52,7 @@ export function createUserConsentAPI(params: ISdkFactoryContext) {
|
|
|
51
52
|
},
|
|
52
53
|
|
|
53
54
|
getStatus() {
|
|
54
|
-
return settings.userConsent
|
|
55
|
+
return settings.userConsent!;
|
|
55
56
|
},
|
|
56
57
|
|
|
57
58
|
Status: ConsentStatus
|
package/src/dtos/types.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { SplitIO } from '../types';
|
|
2
|
-
|
|
3
1
|
export type MaybeThenable<T> = T | Promise<T>
|
|
4
2
|
|
|
5
3
|
/** Split Matchers */
|
|
@@ -204,9 +202,3 @@ export interface IMetadata {
|
|
|
204
202
|
/** host name */
|
|
205
203
|
n: string
|
|
206
204
|
}
|
|
207
|
-
|
|
208
|
-
export type ISplitFiltersValidation = {
|
|
209
|
-
queryString: string | null,
|
|
210
|
-
groupedFilters: Record<SplitIO.SplitFilterType, string[]>,
|
|
211
|
-
validFilters: SplitIO.SplitFilter[]
|
|
212
|
-
};
|
package/src/evaluator/Engine.ts
CHANGED
|
@@ -5,10 +5,10 @@ import { thenable } from '../utils/promise/thenable';
|
|
|
5
5
|
import * as LabelsConstants from '../utils/labels';
|
|
6
6
|
import { CONTROL } from '../utils/constants';
|
|
7
7
|
import { ISplit, MaybeThenable } from '../dtos/types';
|
|
8
|
-
import {
|
|
8
|
+
import { SplitKey, Attributes } from '../types';
|
|
9
9
|
import { IStorageAsync, IStorageSync } from '../storages/types';
|
|
10
10
|
import { IEvaluation, IEvaluationResult, IEvaluator, ISplitEvaluator } from './types';
|
|
11
|
-
import { ILogger } from '../
|
|
11
|
+
import { ILogger } from '../types';
|
|
12
12
|
|
|
13
13
|
function evaluationResult(result: IEvaluation | undefined, defaultTreatment: string): IEvaluationResult {
|
|
14
14
|
return {
|
|
@@ -38,7 +38,7 @@ export class Engine {
|
|
|
38
38
|
return this.baseInfo.name;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
getTreatment(key:
|
|
41
|
+
getTreatment(key: SplitKey, attributes: Attributes | undefined, splitEvaluator: ISplitEvaluator): MaybeThenable<IEvaluationResult> {
|
|
42
42
|
const {
|
|
43
43
|
killed,
|
|
44
44
|
seed,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { findIndex } from '../../utils/lang';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { thenable } from '../../utils/promise/thenable';
|
|
4
4
|
import { MaybeThenable } from '../../dtos/types';
|
|
5
5
|
import { IMatcher } from '../types';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { findIndex } from '../../utils/lang';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { thenable } from '../../utils/promise/thenable';
|
|
4
4
|
import * as LabelsConstants from '../../utils/labels';
|
|
5
5
|
import { CONTROL } from '../../utils/constants';
|
|
6
|
-
import {
|
|
6
|
+
import { SplitKey, Attributes } from '../../types';
|
|
7
7
|
import { IEvaluation, IEvaluator, ISplitEvaluator } from '../types';
|
|
8
8
|
import { ENGINE_COMBINER_IFELSEIF, ENGINE_COMBINER_IFELSEIF_NO_TREATMENT, ERROR_ENGINE_COMBINER_IFELSEIF } from '../../logger/constants';
|
|
9
9
|
|
|
@@ -35,7 +35,7 @@ export function ifElseIfCombinerContext(log: ILogger, predicates: IEvaluator[]):
|
|
|
35
35
|
return undefined;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
function ifElseIfCombiner(key:
|
|
38
|
+
function ifElseIfCombiner(key: SplitKey, seed: number, trafficAllocation?: number, trafficAllocationSeed?: number, attributes?: Attributes, splitEvaluator?: ISplitEvaluator) {
|
|
39
39
|
// In Async environments we are going to have async predicates. There is none way to know
|
|
40
40
|
// before hand so we need to evaluate all the predicates, verify for thenables, and finally,
|
|
41
41
|
// define how to return the treatment (wrap result into a Promise or not).
|
|
@@ -3,8 +3,8 @@ import { thenable } from '../../utils/promise/thenable';
|
|
|
3
3
|
import * as LabelsConstants from '../../utils/labels';
|
|
4
4
|
import { MaybeThenable } from '../../dtos/types';
|
|
5
5
|
import { IEvaluation, IEvaluator, ISplitEvaluator } from '../types';
|
|
6
|
-
import {
|
|
7
|
-
import { ILogger } from '../../
|
|
6
|
+
import { SplitKey, SplitKeyObject, Attributes } from '../../types';
|
|
7
|
+
import { ILogger } from '../../types';
|
|
8
8
|
|
|
9
9
|
// Build Evaluation object if and only if matchingResult is true
|
|
10
10
|
function match(log: ILogger, matchingResult: boolean, bucketingKey: string | undefined, seed: number, treatments: { getTreatmentFor: (x: number) => string }, label: string): IEvaluation | undefined {
|
|
@@ -24,10 +24,10 @@ function match(log: ILogger, matchingResult: boolean, bucketingKey: string | und
|
|
|
24
24
|
// Condition factory
|
|
25
25
|
export function conditionContext(log: ILogger, matcherEvaluator: (...args: any) => MaybeThenable<boolean>, treatments: { getTreatmentFor: (x: number) => string }, label: string, conditionType: 'ROLLOUT' | 'WHITELIST'): IEvaluator {
|
|
26
26
|
|
|
27
|
-
return function conditionEvaluator(key:
|
|
27
|
+
return function conditionEvaluator(key: SplitKey, seed: number, trafficAllocation?: number, trafficAllocationSeed?: number, attributes?: Attributes, splitEvaluator?: ISplitEvaluator) {
|
|
28
28
|
|
|
29
29
|
// Whitelisting has more priority than traffic allocation, so we don't apply this filtering to those conditions.
|
|
30
|
-
if (conditionType === 'ROLLOUT' && !shouldApplyRollout(trafficAllocation as number, (key as
|
|
30
|
+
if (conditionType === 'ROLLOUT' && !shouldApplyRollout(trafficAllocation as number, (key as SplitKeyObject).bucketingKey as string, trafficAllocationSeed as number)) {
|
|
31
31
|
return {
|
|
32
32
|
treatment: undefined, // treatment value is assigned later
|
|
33
33
|
label: LabelsConstants.NOT_IN_SPLIT
|
|
@@ -41,10 +41,10 @@ export function conditionContext(log: ILogger, matcherEvaluator: (...args: any)
|
|
|
41
41
|
const matches = matcherEvaluator(key, attributes, splitEvaluator);
|
|
42
42
|
|
|
43
43
|
if (thenable(matches)) {
|
|
44
|
-
return matches.then(result => match(log, result, (key as
|
|
44
|
+
return matches.then(result => match(log, result, (key as SplitKeyObject).bucketingKey, seed, treatments, label));
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
return match(log, matches, (key as
|
|
47
|
+
return match(log, matches, (key as SplitKeyObject).bucketingKey, seed, treatments, label);
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
}
|
package/src/evaluator/index.ts
CHANGED
|
@@ -5,8 +5,8 @@ import { CONTROL } from '../utils/constants';
|
|
|
5
5
|
import { ISplit, MaybeThenable } from '../dtos/types';
|
|
6
6
|
import { IStorageAsync, IStorageSync } from '../storages/types';
|
|
7
7
|
import { IEvaluationResult } from './types';
|
|
8
|
-
import {
|
|
9
|
-
import { ILogger } from '../
|
|
8
|
+
import { SplitKey, Attributes } from '../types';
|
|
9
|
+
import { ILogger } from '../types';
|
|
10
10
|
|
|
11
11
|
const treatmentException = {
|
|
12
12
|
treatment: CONTROL,
|
|
@@ -24,9 +24,9 @@ function treatmentsException(splitNames: string[]) {
|
|
|
24
24
|
|
|
25
25
|
export function evaluateFeature(
|
|
26
26
|
log: ILogger,
|
|
27
|
-
key:
|
|
27
|
+
key: SplitKey,
|
|
28
28
|
splitName: string,
|
|
29
|
-
attributes:
|
|
29
|
+
attributes: Attributes | undefined,
|
|
30
30
|
storage: IStorageSync | IStorageAsync,
|
|
31
31
|
): MaybeThenable<IEvaluationResult> {
|
|
32
32
|
let stringifiedSplit;
|
|
@@ -63,9 +63,9 @@ export function evaluateFeature(
|
|
|
63
63
|
|
|
64
64
|
export function evaluateFeatures(
|
|
65
65
|
log: ILogger,
|
|
66
|
-
key:
|
|
66
|
+
key: SplitKey,
|
|
67
67
|
splitNames: string[],
|
|
68
|
-
attributes:
|
|
68
|
+
attributes: Attributes | undefined,
|
|
69
69
|
storage: IStorageSync | IStorageAsync,
|
|
70
70
|
): MaybeThenable<Record<string, IEvaluationResult>> {
|
|
71
71
|
let stringifiedSplits;
|
|
@@ -90,8 +90,8 @@ export function evaluateFeatures(
|
|
|
90
90
|
function getEvaluation(
|
|
91
91
|
log: ILogger,
|
|
92
92
|
stringifiedSplit: string | null,
|
|
93
|
-
key:
|
|
94
|
-
attributes:
|
|
93
|
+
key: SplitKey,
|
|
94
|
+
attributes: Attributes | undefined,
|
|
95
95
|
storage: IStorageSync | IStorageAsync,
|
|
96
96
|
): MaybeThenable<IEvaluationResult> {
|
|
97
97
|
let evaluation: MaybeThenable<IEvaluationResult> = {
|
|
@@ -126,8 +126,8 @@ function getEvaluations(
|
|
|
126
126
|
log: ILogger,
|
|
127
127
|
splitNames: string[],
|
|
128
128
|
splits: Record<string, string | null>,
|
|
129
|
-
key:
|
|
130
|
-
attributes:
|
|
129
|
+
key: SplitKey,
|
|
130
|
+
attributes: Attributes | undefined,
|
|
131
131
|
storage: IStorageSync | IStorageAsync,
|
|
132
132
|
): MaybeThenable<Record<string, IEvaluationResult>> {
|
|
133
133
|
const result: Record<string, IEvaluationResult> = {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IBetweenMatcherData } from '../../dtos/types';
|
|
2
2
|
import { ENGINE_MATCHER_BETWEEN } from '../../logger/constants';
|
|
3
|
-
import { ILogger } from '../../
|
|
3
|
+
import { ILogger } from '../../types';
|
|
4
4
|
|
|
5
5
|
export function betweenMatcherContext(log: ILogger, ruleVO: IBetweenMatcherData) /*: Function */ {
|
|
6
6
|
return function betweenMatcher(runtimeAttr: number): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_BOOLEAN } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
|
|
4
4
|
export function booleanMatcherContext(log: ILogger, ruleAttr: boolean) /*: Function */ {
|
|
5
5
|
return function booleanMatcher(runtimeAttr: boolean): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_CONTAINS_ALL } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { findIndex } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function containsAllSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_CONTAINS_ANY } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { findIndex } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function containsAnySetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isString } from '../../utils/lang';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { ENGINE_MATCHER_CONTAINS_STRING } from '../../logger/constants';
|
|
4
4
|
|
|
5
5
|
export function containsStringMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IDependencyMatcherData, MaybeThenable } from '../../dtos/types';
|
|
2
2
|
import { IStorageAsync, IStorageSync } from '../../storages/types';
|
|
3
|
-
import { ILogger } from '../../
|
|
3
|
+
import { ILogger } from '../../types';
|
|
4
4
|
import { thenable } from '../../utils/promise/thenable';
|
|
5
5
|
import { IDependencyMatcherValue, IEvaluation, ISplitEvaluator } from '../types';
|
|
6
6
|
import { ENGINE_MATCHER_DEPENDENCY, ENGINE_MATCHER_DEPENDENCY_PRE } from '../../logger/constants';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_EQUAL } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
|
|
4
4
|
export function equalToMatcherContext(log: ILogger, ruleAttr: number) /*: Function */ {
|
|
5
5
|
return function equalToMatcher(runtimeAttr: number): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_EQUAL_TO_SET } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { findIndex } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function equalToSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_ENDS_WITH } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { endsWith } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function endsWithMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_GREATER } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
|
|
4
4
|
export function greaterThanEqualMatcherContext(log: ILogger, ruleAttr: number) /*: Function */ {
|
|
5
5
|
return function greaterThanEqualMatcher(runtimeAttr: number): boolean {
|
|
@@ -17,7 +17,7 @@ import { booleanMatcherContext } from './boolean';
|
|
|
17
17
|
import { stringMatcherContext } from './string';
|
|
18
18
|
import { IStorageAsync, IStorageSync } from '../../storages/types';
|
|
19
19
|
import { IMatcher, IMatcherDto } from '../types';
|
|
20
|
-
import { ILogger } from '../../
|
|
20
|
+
import { ILogger } from '../../types';
|
|
21
21
|
|
|
22
22
|
const matchers = [
|
|
23
23
|
undefined, // UNDEFINED: 0,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_LESS } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
|
|
4
4
|
export function lessThanEqualMatcherContext(log: ILogger, ruleAttr: number) /*: function */ {
|
|
5
5
|
return function lessThanEqualMatcher(runtimeAttr: number): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { findIndex } from '../../utils/lang';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { ENGINE_MATCHER_PART_OF } from '../../logger/constants';
|
|
4
4
|
|
|
5
5
|
export function partOfSetMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MaybeThenable } from '../../dtos/types';
|
|
2
2
|
import { ISegmentsCacheBase } from '../../storages/types';
|
|
3
|
-
import { ILogger } from '../../
|
|
3
|
+
import { ILogger } from '../../types';
|
|
4
4
|
import { thenable } from '../../utils/promise/thenable';
|
|
5
5
|
import { ENGINE_MATCHER_SEGMENT } from '../../logger/constants';
|
|
6
6
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_STRING_INVALID, ENGINE_MATCHER_STRING } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
|
|
4
4
|
export function stringMatcherContext(log: ILogger, ruleAttr: string) /*: Function */ {
|
|
5
5
|
return function stringMatcher(runtimeAttr: string): boolean {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ENGINE_MATCHER_STARTS_WITH } from '../../logger/constants';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { startsWith } from '../../utils/lang';
|
|
4
4
|
|
|
5
5
|
export function startsWithMatcherContext(log: ILogger, ruleAttr: string[]) /*: Function */ {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { setToArray, ISet } from '../../utils/lang/sets';
|
|
2
|
-
import { ILogger } from '../../
|
|
2
|
+
import { ILogger } from '../../types';
|
|
3
3
|
import { ENGINE_MATCHER_WHITELIST } from '../../logger/constants';
|
|
4
4
|
|
|
5
5
|
export function whitelistMatcherContext(log: ILogger, ruleAttr: ISet<string>) /*: Function */ {
|
|
@@ -9,8 +9,8 @@ import { thenable } from '../../utils/promise/thenable';
|
|
|
9
9
|
import { IEvaluator, IMatcherDto, ISplitEvaluator } from '../types';
|
|
10
10
|
import { ISplitCondition } from '../../dtos/types';
|
|
11
11
|
import { IStorageAsync, IStorageSync } from '../../storages/types';
|
|
12
|
-
import {
|
|
13
|
-
import { ILogger } from '../../
|
|
12
|
+
import { Attributes } from '../../types';
|
|
13
|
+
import { ILogger } from '../../types';
|
|
14
14
|
|
|
15
15
|
export function parser(log: ILogger, conditions: ISplitCondition[], storage: IStorageSync | IStorageAsync): IEvaluator {
|
|
16
16
|
let predicates = [];
|
|
@@ -31,7 +31,7 @@ export function parser(log: ILogger, conditions: ISplitCondition[], storage: ISt
|
|
|
31
31
|
const matcher = matcherFactory(log, matcherDto, storage);
|
|
32
32
|
|
|
33
33
|
// Evaluator function.
|
|
34
|
-
return (key: string, attributes:
|
|
34
|
+
return (key: string, attributes: Attributes | undefined, splitEvaluator: ISplitEvaluator) => {
|
|
35
35
|
const value = sanitizeValue(log, key, matcherDto, attributes);
|
|
36
36
|
const result = value !== undefined && matcher ? matcher(value, splitEvaluator) : false;
|
|
37
37
|
|
package/src/evaluator/types.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { IBetweenMatcherData, IDependencyMatcherData, MaybeThenable } from '../dtos/types';
|
|
2
2
|
import { IStorageAsync, IStorageSync } from '../storages/types';
|
|
3
3
|
import { ISet } from '../utils/lang/sets';
|
|
4
|
-
import {
|
|
5
|
-
import { ILogger } from '../
|
|
4
|
+
import { SplitKey, Attributes } from '../types';
|
|
5
|
+
import { ILogger } from '../types';
|
|
6
6
|
|
|
7
7
|
export interface IDependencyMatcherValue {
|
|
8
|
-
key:
|
|
9
|
-
attributes?:
|
|
8
|
+
key: SplitKey,
|
|
9
|
+
attributes?: Attributes
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export interface IMatcherDto {
|
|
@@ -27,8 +27,8 @@ export interface IEvaluation {
|
|
|
27
27
|
|
|
28
28
|
export type IEvaluationResult = IEvaluation & { treatment: string }
|
|
29
29
|
|
|
30
|
-
export type ISplitEvaluator = (log: ILogger, key:
|
|
30
|
+
export type ISplitEvaluator = (log: ILogger, key: SplitKey, splitName: string, attributes: Attributes | undefined, storage: IStorageSync | IStorageAsync) => MaybeThenable<IEvaluation>
|
|
31
31
|
|
|
32
|
-
export type IEvaluator = (key:
|
|
32
|
+
export type IEvaluator = (key: SplitKey, seed: number, trafficAllocation?: number, trafficAllocationSeed?: number, attributes?: Attributes, splitEvaluator?: ISplitEvaluator) => MaybeThenable<IEvaluation | undefined>
|
|
33
33
|
|
|
34
34
|
export type IMatcher = (...args: any) => MaybeThenable<boolean>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Attributes } from '../../types';
|
|
2
2
|
import { IMatcherDto } from '../types';
|
|
3
|
-
import { ILogger } from '../../
|
|
3
|
+
import { ILogger } from '../../types';
|
|
4
4
|
import { sanitize } from './sanitize';
|
|
5
5
|
import { ENGINE_VALUE, ENGINE_VALUE_NO_ATTRIBUTES, ENGINE_VALUE_INVALID } from '../../logger/constants';
|
|
6
6
|
|
|
7
|
-
function parseValue(log: ILogger, key: string, attributeName: string | null, attributes?:
|
|
7
|
+
function parseValue(log: ILogger, key: string, attributeName: string | null, attributes?: Attributes) {
|
|
8
8
|
let value = undefined;
|
|
9
9
|
if (attributeName) {
|
|
10
10
|
if (attributes) {
|
|
@@ -23,7 +23,7 @@ function parseValue(log: ILogger, key: string, attributeName: string | null, att
|
|
|
23
23
|
/**
|
|
24
24
|
* Defines value to be matched (key / attribute).
|
|
25
25
|
*/
|
|
26
|
-
export function sanitizeValue(log: ILogger, key: string, matcherDto: IMatcherDto, attributes?:
|
|
26
|
+
export function sanitizeValue(log: ILogger, key: string, matcherDto: IMatcherDto, attributes?: Attributes) {
|
|
27
27
|
const attributeName = matcherDto.attribute;
|
|
28
28
|
const valueToMatch = parseValue(log, key, attributeName, attributes);
|
|
29
29
|
const sanitizedValue = sanitize(log, matcherDto.type, valueToMatch, matcherDto.dataType, attributes);
|