@splitsoftware/splitio-commons 2.2.1-rc.0 → 2.2.1-rc.2

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.
Files changed (151) hide show
  1. package/CHANGES.txt +2 -3
  2. package/README.md +0 -1
  3. package/cjs/evaluator/Engine.js +61 -40
  4. package/cjs/evaluator/combiners/and.js +6 -2
  5. package/cjs/evaluator/combiners/ifelseif.js +6 -6
  6. package/cjs/evaluator/condition/index.js +5 -6
  7. package/cjs/evaluator/index.js +11 -11
  8. package/cjs/evaluator/matchers/index.js +1 -3
  9. package/cjs/evaluator/matchers/matcherTypes.js +0 -1
  10. package/cjs/evaluator/matchersTransform/index.js +0 -4
  11. package/cjs/evaluator/parser/index.js +2 -2
  12. package/cjs/evaluator/value/sanitize.js +0 -1
  13. package/cjs/logger/constants.js +3 -5
  14. package/cjs/logger/messages/debug.js +2 -4
  15. package/cjs/logger/messages/warn.js +1 -1
  16. package/cjs/sdkManager/index.js +1 -2
  17. package/cjs/services/splitApi.js +4 -3
  18. package/cjs/storages/AbstractSplitsCacheSync.js +2 -5
  19. package/cjs/storages/KeyBuilder.js +0 -9
  20. package/cjs/storages/KeyBuilderCS.js +0 -3
  21. package/cjs/storages/KeyBuilderSS.js +0 -3
  22. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +14 -9
  23. package/cjs/storages/inLocalStorage/index.js +1 -5
  24. package/cjs/storages/inLocalStorage/validateCache.js +1 -2
  25. package/cjs/storages/inMemory/InMemoryStorage.js +0 -3
  26. package/cjs/storages/inMemory/InMemoryStorageCS.js +0 -4
  27. package/cjs/storages/inRedis/index.js +9 -5
  28. package/cjs/storages/pluggable/index.js +0 -2
  29. package/cjs/sync/polling/fetchers/splitChangesFetcher.js +4 -51
  30. package/cjs/sync/polling/pollingManagerCS.js +7 -7
  31. package/cjs/sync/polling/syncTasks/splitsSyncTask.js +1 -1
  32. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +2 -2
  33. package/cjs/sync/polling/updaters/segmentChangesUpdater.js +1 -1
  34. package/cjs/sync/polling/updaters/splitChangesUpdater.js +33 -51
  35. package/cjs/sync/streaming/SSEHandler/index.js +0 -1
  36. package/cjs/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +77 -106
  37. package/cjs/sync/streaming/constants.js +1 -2
  38. package/cjs/sync/streaming/pushManager.js +16 -3
  39. package/cjs/sync/syncManagerOnline.js +2 -2
  40. package/cjs/utils/constants/index.js +2 -3
  41. package/cjs/utils/labels/index.js +1 -2
  42. package/esm/evaluator/Engine.js +62 -40
  43. package/esm/evaluator/combiners/and.js +6 -2
  44. package/esm/evaluator/combiners/ifelseif.js +7 -7
  45. package/esm/evaluator/condition/index.js +5 -6
  46. package/esm/evaluator/index.js +12 -12
  47. package/esm/evaluator/matchers/index.js +1 -3
  48. package/esm/evaluator/matchers/matcherTypes.js +0 -1
  49. package/esm/evaluator/matchersTransform/index.js +0 -4
  50. package/esm/evaluator/parser/index.js +2 -2
  51. package/esm/evaluator/value/sanitize.js +0 -1
  52. package/esm/logger/constants.js +0 -2
  53. package/esm/logger/messages/debug.js +2 -4
  54. package/esm/logger/messages/warn.js +1 -1
  55. package/esm/sdkManager/index.js +1 -2
  56. package/esm/services/splitApi.js +4 -3
  57. package/esm/storages/AbstractSplitsCacheSync.js +2 -5
  58. package/esm/storages/KeyBuilder.js +0 -9
  59. package/esm/storages/KeyBuilderCS.js +0 -3
  60. package/esm/storages/KeyBuilderSS.js +0 -3
  61. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +14 -9
  62. package/esm/storages/inLocalStorage/index.js +1 -5
  63. package/esm/storages/inLocalStorage/validateCache.js +1 -2
  64. package/esm/storages/inMemory/InMemoryStorage.js +0 -3
  65. package/esm/storages/inMemory/InMemoryStorageCS.js +0 -4
  66. package/esm/storages/inRedis/index.js +9 -5
  67. package/esm/storages/pluggable/index.js +0 -2
  68. package/esm/sync/polling/fetchers/splitChangesFetcher.js +4 -51
  69. package/esm/sync/polling/pollingManagerCS.js +7 -7
  70. package/esm/sync/polling/syncTasks/splitsSyncTask.js +1 -1
  71. package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
  72. package/esm/sync/polling/updaters/segmentChangesUpdater.js +1 -1
  73. package/esm/sync/polling/updaters/splitChangesUpdater.js +33 -51
  74. package/esm/sync/streaming/SSEHandler/index.js +1 -2
  75. package/esm/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +73 -102
  76. package/esm/sync/streaming/constants.js +0 -1
  77. package/esm/sync/streaming/pushManager.js +19 -6
  78. package/esm/sync/syncManagerOnline.js +2 -2
  79. package/esm/utils/constants/index.js +1 -2
  80. package/esm/utils/labels/index.js +0 -1
  81. package/package.json +1 -1
  82. package/src/dtos/types.ts +8 -36
  83. package/src/evaluator/Engine.ts +69 -42
  84. package/src/evaluator/combiners/and.ts +4 -5
  85. package/src/evaluator/combiners/ifelseif.ts +9 -7
  86. package/src/evaluator/condition/engineUtils.ts +1 -1
  87. package/src/evaluator/condition/index.ts +12 -12
  88. package/src/evaluator/index.ts +14 -12
  89. package/src/evaluator/matchers/index.ts +1 -3
  90. package/src/evaluator/matchers/matcherTypes.ts +0 -1
  91. package/src/evaluator/matchersTransform/index.ts +0 -3
  92. package/src/evaluator/parser/index.ts +3 -3
  93. package/src/evaluator/types.ts +2 -2
  94. package/src/evaluator/value/index.ts +2 -2
  95. package/src/evaluator/value/sanitize.ts +4 -5
  96. package/src/logger/constants.ts +0 -2
  97. package/src/logger/messages/debug.ts +2 -4
  98. package/src/logger/messages/warn.ts +1 -1
  99. package/src/sdkManager/index.ts +2 -3
  100. package/src/services/splitApi.ts +4 -3
  101. package/src/services/types.ts +1 -1
  102. package/src/storages/AbstractSplitsCacheSync.ts +3 -6
  103. package/src/storages/KeyBuilder.ts +0 -12
  104. package/src/storages/KeyBuilderCS.ts +0 -4
  105. package/src/storages/KeyBuilderSS.ts +0 -4
  106. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +14 -10
  107. package/src/storages/inLocalStorage/index.ts +1 -5
  108. package/src/storages/inLocalStorage/validateCache.ts +1 -3
  109. package/src/storages/inMemory/InMemoryStorage.ts +0 -3
  110. package/src/storages/inMemory/InMemoryStorageCS.ts +0 -4
  111. package/src/storages/inRedis/index.ts +11 -7
  112. package/src/storages/pluggable/index.ts +0 -2
  113. package/src/storages/types.ts +1 -33
  114. package/src/sync/polling/fetchers/splitChangesFetcher.ts +4 -62
  115. package/src/sync/polling/fetchers/types.ts +0 -1
  116. package/src/sync/polling/pollingManagerCS.ts +7 -7
  117. package/src/sync/polling/syncTasks/splitsSyncTask.ts +1 -1
  118. package/src/sync/polling/types.ts +2 -2
  119. package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -2
  120. package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
  121. package/src/sync/polling/updaters/splitChangesUpdater.ts +42 -61
  122. package/src/sync/streaming/SSEHandler/index.ts +1 -2
  123. package/src/sync/streaming/SSEHandler/types.ts +2 -2
  124. package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +68 -98
  125. package/src/sync/streaming/constants.ts +0 -1
  126. package/src/sync/streaming/parseUtils.ts +2 -2
  127. package/src/sync/streaming/pushManager.ts +18 -6
  128. package/src/sync/streaming/types.ts +2 -3
  129. package/src/sync/syncManagerOnline.ts +2 -2
  130. package/src/utils/constants/index.ts +1 -2
  131. package/src/utils/labels/index.ts +0 -1
  132. package/src/utils/lang/index.ts +1 -1
  133. package/types/splitio.d.ts +1 -5
  134. package/cjs/evaluator/matchers/prerequisites.js +0 -22
  135. package/cjs/evaluator/matchers/rbsegment.js +0 -44
  136. package/cjs/storages/inLocalStorage/RBSegmentsCacheInLocal.js +0 -117
  137. package/cjs/storages/inMemory/RBSegmentsCacheInMemory.js +0 -61
  138. package/cjs/storages/inRedis/RBSegmentsCacheInRedis.js +0 -64
  139. package/cjs/storages/pluggable/RBSegmentsCachePluggable.js +0 -64
  140. package/esm/evaluator/matchers/prerequisites.js +0 -18
  141. package/esm/evaluator/matchers/rbsegment.js +0 -40
  142. package/esm/storages/inLocalStorage/RBSegmentsCacheInLocal.js +0 -114
  143. package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +0 -58
  144. package/esm/storages/inRedis/RBSegmentsCacheInRedis.js +0 -61
  145. package/esm/storages/pluggable/RBSegmentsCachePluggable.js +0 -61
  146. package/src/evaluator/matchers/prerequisites.ts +0 -24
  147. package/src/evaluator/matchers/rbsegment.ts +0 -62
  148. package/src/storages/inLocalStorage/RBSegmentsCacheInLocal.ts +0 -136
  149. package/src/storages/inMemory/RBSegmentsCacheInMemory.ts +0 -68
  150. package/src/storages/inRedis/RBSegmentsCacheInRedis.ts +0 -79
  151. package/src/storages/pluggable/RBSegmentsCachePluggable.ts +0 -76
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ControlType = exports.OCCUPANCY = exports.CONTROL = exports.RB_SEGMENT_UPDATE = exports.SPLIT_UPDATE = exports.SPLIT_KILL = exports.SEGMENT_UPDATE = exports.MEMBERSHIPS_LS_UPDATE = exports.MEMBERSHIPS_MS_UPDATE = exports.PUSH_SUBSYSTEM_DOWN = exports.PUSH_SUBSYSTEM_UP = exports.PUSH_RETRYABLE_ERROR = exports.PUSH_NONRETRYABLE_ERROR = exports.SECONDS_BEFORE_EXPIRATION = void 0;
3
+ exports.ControlType = exports.OCCUPANCY = exports.CONTROL = exports.SPLIT_UPDATE = exports.SPLIT_KILL = exports.SEGMENT_UPDATE = exports.MEMBERSHIPS_LS_UPDATE = exports.MEMBERSHIPS_MS_UPDATE = exports.PUSH_SUBSYSTEM_DOWN = exports.PUSH_SUBSYSTEM_UP = exports.PUSH_RETRYABLE_ERROR = exports.PUSH_NONRETRYABLE_ERROR = exports.SECONDS_BEFORE_EXPIRATION = void 0;
4
4
  // time for refresh token
5
5
  exports.SECONDS_BEFORE_EXPIRATION = 600;
6
6
  // Internal SDK events, subscribed by SyncManager and PushManager
@@ -30,7 +30,6 @@ exports.MEMBERSHIPS_LS_UPDATE = 'MEMBERSHIPS_LS_UPDATE';
30
30
  exports.SEGMENT_UPDATE = 'SEGMENT_UPDATE';
31
31
  exports.SPLIT_KILL = 'SPLIT_KILL';
32
32
  exports.SPLIT_UPDATE = 'SPLIT_UPDATE';
33
- exports.RB_SEGMENT_UPDATE = 'RB_SEGMENT_UPDATE';
34
33
  // Control-type push notifications, handled by NotificationKeeper
35
34
  exports.CONTROL = 'CONTROL';
36
35
  exports.OCCUPANCY = 'OCCUPANCY';
@@ -46,7 +46,7 @@ function pushManagerFactory(params, pollingManager) {
46
46
  // MySegmentsUpdateWorker (client-side) are initiated in `add` method
47
47
  var segmentsUpdateWorker = userKey ? undefined : (0, SegmentsUpdateWorker_1.SegmentsUpdateWorker)(log, pollingManager.segmentsSyncTask, storage.segments);
48
48
  // For server-side we pass the segmentsSyncTask, used by SplitsUpdateWorker to fetch new segments
49
- var splitsUpdateWorker = (0, SplitsUpdateWorker_1.SplitsUpdateWorker)(log, storage, pollingManager.splitsSyncTask, readiness.splits, telemetryTracker, userKey ? undefined : pollingManager.segmentsSyncTask);
49
+ var splitsUpdateWorker = (0, SplitsUpdateWorker_1.SplitsUpdateWorker)(log, storage.splits, pollingManager.splitsSyncTask, readiness.splits, telemetryTracker, userKey ? undefined : pollingManager.segmentsSyncTask);
50
50
  // [Only for client-side] map of hashes to user keys, to dispatch membership update events to the corresponding MySegmentsUpdateWorker
51
51
  var userKeyHashes = {};
52
52
  // [Only for client-side] map of user keys to their corresponding hash64 and MySegmentsUpdateWorkers.
@@ -182,8 +182,21 @@ function pushManagerFactory(params, pollingManager) {
182
182
  });
183
183
  /** Functions related to synchronization (Queues and Workers in the spec) */
184
184
  pushEmitter.on(constants_1.SPLIT_KILL, splitsUpdateWorker.killSplit);
185
- pushEmitter.on(constants_1.SPLIT_UPDATE, splitsUpdateWorker.put);
186
- pushEmitter.on(constants_1.RB_SEGMENT_UPDATE, splitsUpdateWorker.put);
185
+ pushEmitter.on(constants_1.SPLIT_UPDATE, function (parsedData) {
186
+ if (parsedData.d && parsedData.c !== undefined) {
187
+ try {
188
+ var payload = (0, parseUtils_1.parseFFUpdatePayload)(parsedData.c, parsedData.d);
189
+ if (payload) {
190
+ splitsUpdateWorker.put(parsedData, payload);
191
+ return;
192
+ }
193
+ }
194
+ catch (e) {
195
+ log.warn(constants_2.STREAMING_PARSING_SPLIT_UPDATE, [e]);
196
+ }
197
+ }
198
+ splitsUpdateWorker.put(parsedData);
199
+ });
187
200
  function handleMySegmentsUpdate(parsedData) {
188
201
  switch (parsedData.u) {
189
202
  case types_1.UpdateStrategy.BoundedFetchRequest: {
@@ -130,7 +130,7 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
130
130
  if (pushManager) {
131
131
  if (pollingManager.isRunning()) {
132
132
  // if doing polling, we must start the periodic fetch of data
133
- if (storage.splits.usesSegments() || storage.rbSegments.usesSegments())
133
+ if (storage.splits.usesSegments())
134
134
  mySegmentsSyncTask.start();
135
135
  }
136
136
  else {
@@ -140,7 +140,7 @@ function syncManagerOnlineFactory(pollingManagerFactory, pushManagerFactory) {
140
140
  }
141
141
  }
142
142
  else {
143
- if (storage.splits.usesSegments() || storage.rbSegments.usesSegments())
143
+ if (storage.splits.usesSegments())
144
144
  mySegmentsSyncTask.start();
145
145
  }
146
146
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MEMBERSHIPS = exports.SEGMENT = exports.TOKEN = exports.TELEMETRY = exports.EVENTS = exports.IMPRESSIONS_COUNT = exports.IMPRESSIONS = exports.SPLITS = exports.NONE_ENUM = exports.DEBUG_ENUM = exports.OPTIMIZED_ENUM = exports.CONSUMER_PARTIAL_ENUM = exports.CONSUMER_ENUM = exports.STANDALONE_ENUM = exports.DEDUPED = exports.DROPPED = exports.QUEUED = exports.NAMES_FN_LABEL = exports.SPLITS_FN_LABEL = exports.SPLIT_FN_LABEL = exports.TRACK_FN_LABEL = exports.GET_TREATMENTS_WITH_CONFIG_BY_FLAG_SETS = exports.GET_TREATMENTS_WITH_CONFIG_BY_FLAG_SET = exports.GET_TREATMENTS_BY_FLAG_SETS = exports.GET_TREATMENTS_BY_FLAG_SET = exports.GET_TREATMENTS_WITH_CONFIG = exports.GET_TREATMENT_WITH_CONFIG = exports.GET_TREATMENTS = exports.GET_TREATMENT = exports.CONSENT_UNKNOWN = exports.CONSENT_DECLINED = exports.CONSENT_GRANTED = exports.STORAGE_PLUGGABLE = exports.STORAGE_REDIS = exports.STORAGE_LOCALSTORAGE = exports.STORAGE_MEMORY = exports.CONSUMER_PARTIAL_MODE = exports.CONSUMER_MODE = exports.PRODUCER_MODE = exports.STANDALONE_MODE = exports.LOCALHOST_MODE = exports.NONE = exports.OPTIMIZED = exports.DEBUG = exports.SPLIT_EVENT = exports.SPLIT_IMPRESSION = exports.NA = exports.UNKNOWN = exports.CONTROL_WITH_CONFIG = exports.CONTROL = void 0;
4
- exports.IN_RULE_BASED_SEGMENT = exports.IN_LARGE_SEGMENT = exports.IN_SEGMENT = exports.FLAG_SPEC_VERSION = exports.PAUSED = exports.ENABLED = exports.DISABLED = exports.NON_REQUESTED = exports.REQUESTED = exports.POLLING = exports.STREAMING = exports.AUTH_REJECTION = exports.SYNC_MODE_UPDATE = exports.ABLY_ERROR = exports.TOKEN_REFRESH = exports.SSE_CONNECTION_ERROR = exports.STREAMING_STATUS = exports.OCCUPANCY_SEC = exports.OCCUPANCY_PRI = exports.CONNECTION_ESTABLISHED = exports.TRACK = exports.TREATMENTS_WITH_CONFIG_BY_FLAGSETS = exports.TREATMENTS_WITH_CONFIG_BY_FLAGSET = exports.TREATMENTS_BY_FLAGSETS = exports.TREATMENTS_BY_FLAGSET = exports.TREATMENTS_WITH_CONFIG = exports.TREATMENT_WITH_CONFIG = exports.TREATMENTS = exports.TREATMENT = void 0;
4
+ exports.IN_LARGE_SEGMENT = exports.IN_SEGMENT = exports.FLAG_SPEC_VERSION = exports.PAUSED = exports.ENABLED = exports.DISABLED = exports.NON_REQUESTED = exports.REQUESTED = exports.POLLING = exports.STREAMING = exports.AUTH_REJECTION = exports.SYNC_MODE_UPDATE = exports.ABLY_ERROR = exports.TOKEN_REFRESH = exports.SSE_CONNECTION_ERROR = exports.STREAMING_STATUS = exports.OCCUPANCY_SEC = exports.OCCUPANCY_PRI = exports.CONNECTION_ESTABLISHED = exports.TRACK = exports.TREATMENTS_WITH_CONFIG_BY_FLAGSETS = exports.TREATMENTS_WITH_CONFIG_BY_FLAGSET = exports.TREATMENTS_BY_FLAGSETS = exports.TREATMENTS_BY_FLAGSET = exports.TREATMENTS_WITH_CONFIG = exports.TREATMENT_WITH_CONFIG = exports.TREATMENTS = exports.TREATMENT = void 0;
5
5
  // Special treatments
6
6
  exports.CONTROL = 'control';
7
7
  exports.CONTROL_WITH_CONFIG = {
@@ -90,8 +90,7 @@ exports.NON_REQUESTED = 1;
90
90
  exports.DISABLED = 0;
91
91
  exports.ENABLED = 1;
92
92
  exports.PAUSED = 2;
93
- exports.FLAG_SPEC_VERSION = '1.3';
93
+ exports.FLAG_SPEC_VERSION = '1.2';
94
94
  // Matcher types
95
95
  exports.IN_SEGMENT = 'IN_SEGMENT';
96
96
  exports.IN_LARGE_SEGMENT = 'IN_LARGE_SEGMENT';
97
- exports.IN_RULE_BASED_SEGMENT = 'IN_RULE_BASED_SEGMENT';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PREREQUISITES_NOT_MET = exports.UNSUPPORTED_MATCHER_TYPE = exports.NOT_IN_SPLIT = exports.SPLIT_ARCHIVED = exports.EXCEPTION = exports.SDK_NOT_READY = exports.SPLIT_NOT_FOUND = exports.NO_CONDITION_MATCH = exports.SPLIT_KILLED = void 0;
3
+ exports.UNSUPPORTED_MATCHER_TYPE = exports.NOT_IN_SPLIT = exports.SPLIT_ARCHIVED = exports.EXCEPTION = exports.SDK_NOT_READY = exports.SPLIT_NOT_FOUND = exports.NO_CONDITION_MATCH = exports.SPLIT_KILLED = void 0;
4
4
  exports.SPLIT_KILLED = 'killed';
5
5
  exports.NO_CONDITION_MATCH = 'default rule';
6
6
  exports.SPLIT_NOT_FOUND = 'definition not found';
@@ -9,4 +9,3 @@ exports.EXCEPTION = 'exception';
9
9
  exports.SPLIT_ARCHIVED = 'archived';
10
10
  exports.NOT_IN_SPLIT = 'not in split';
11
11
  exports.UNSUPPORTED_MATCHER_TYPE = 'targeting rule type unsupported by sdk';
12
- exports.PREREQUISITES_NOT_MET = 'prerequisites not met';
@@ -1,54 +1,76 @@
1
- import { get, isString } from '../utils/lang';
1
+ import { get } from '../utils/lang';
2
2
  import { parser } from './parser';
3
3
  import { keyParser } from '../utils/key';
4
4
  import { thenable } from '../utils/promise/thenable';
5
- import { NO_CONDITION_MATCH, SPLIT_ARCHIVED, SPLIT_KILLED, PREREQUISITES_NOT_MET } from '../utils/labels';
5
+ import { EXCEPTION, NO_CONDITION_MATCH, SPLIT_ARCHIVED, SPLIT_KILLED } from '../utils/labels';
6
6
  import { CONTROL } from '../utils/constants';
7
- import { ENGINE_DEFAULT } from '../logger/constants';
8
- import { prerequisitesMatcherContext } from './matchers/prerequisites';
9
7
  function evaluationResult(result, defaultTreatment) {
10
8
  return {
11
9
  treatment: get(result, 'treatment', defaultTreatment),
12
10
  label: get(result, 'label', NO_CONDITION_MATCH)
13
11
  };
14
12
  }
15
- export function engineParser(log, split, storage) {
16
- var killed = split.killed, seed = split.seed, trafficAllocation = split.trafficAllocation, trafficAllocationSeed = split.trafficAllocationSeed, status = split.status, conditions = split.conditions, prerequisites = split.prerequisites;
17
- var defaultTreatment = isString(split.defaultTreatment) ? split.defaultTreatment : CONTROL;
18
- var evaluator = parser(log, conditions, storage);
19
- var prerequisiteMatcher = prerequisitesMatcherContext(prerequisites, storage, log);
20
- return {
21
- getTreatment: function (key, attributes, splitEvaluator) {
22
- var parsedKey = keyParser(key);
23
- function evaluate(prerequisitesMet) {
24
- if (!prerequisitesMet) {
25
- log.debug(ENGINE_DEFAULT, ['Prerequisite not met']);
26
- return {
27
- treatment: defaultTreatment,
28
- label: PREREQUISITES_NOT_MET
29
- };
30
- }
31
- var evaluation = evaluator(parsedKey, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator);
32
- return thenable(evaluation) ?
33
- evaluation.then(function (result) { return evaluationResult(result, defaultTreatment); }) :
34
- evaluationResult(evaluation, defaultTreatment);
13
+ var Engine = /** @class */ (function () {
14
+ function Engine(baseInfo, evaluator) {
15
+ this.baseInfo = baseInfo;
16
+ this.evaluator = evaluator;
17
+ // in case we don't have a default treatment in the instantiation, use 'control'
18
+ if (typeof this.baseInfo.defaultTreatment !== 'string') {
19
+ this.baseInfo.defaultTreatment = CONTROL;
20
+ }
21
+ }
22
+ Engine.parse = function (log, splitFlatStructure, storage) {
23
+ var conditions = splitFlatStructure.conditions;
24
+ var evaluator = parser(log, conditions, storage);
25
+ return new Engine(splitFlatStructure, evaluator);
26
+ };
27
+ Engine.prototype.getKey = function () {
28
+ return this.baseInfo.name;
29
+ };
30
+ Engine.prototype.getTreatment = function (key, attributes, splitEvaluator) {
31
+ var _a = this.baseInfo, killed = _a.killed, seed = _a.seed, defaultTreatment = _a.defaultTreatment, trafficAllocation = _a.trafficAllocation, trafficAllocationSeed = _a.trafficAllocationSeed;
32
+ var parsedKey;
33
+ var treatment;
34
+ var label;
35
+ try {
36
+ parsedKey = keyParser(key);
37
+ }
38
+ catch (err) {
39
+ return {
40
+ treatment: CONTROL,
41
+ label: EXCEPTION
42
+ };
43
+ }
44
+ if (this.isGarbage()) {
45
+ treatment = CONTROL;
46
+ label = SPLIT_ARCHIVED;
47
+ }
48
+ else if (killed) {
49
+ treatment = defaultTreatment;
50
+ label = SPLIT_KILLED;
51
+ }
52
+ else {
53
+ var evaluation = this.evaluator(parsedKey, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator);
54
+ // Evaluation could be async, so we should handle that case checking for a
55
+ // thenable object
56
+ if (thenable(evaluation)) {
57
+ return evaluation.then(function (result) { return evaluationResult(result, defaultTreatment); });
35
58
  }
36
- if (status === 'ARCHIVED')
37
- return {
38
- treatment: CONTROL,
39
- label: SPLIT_ARCHIVED
40
- };
41
- if (killed) {
42
- log.debug(ENGINE_DEFAULT, ['Flag is killed']);
43
- return {
44
- treatment: defaultTreatment,
45
- label: SPLIT_KILLED
46
- };
59
+ else {
60
+ return evaluationResult(evaluation, defaultTreatment);
47
61
  }
48
- var prerequisitesMet = prerequisiteMatcher({ key: key, attributes: attributes }, splitEvaluator);
49
- return thenable(prerequisitesMet) ?
50
- prerequisitesMet.then(evaluate) :
51
- evaluate(prerequisitesMet);
52
62
  }
63
+ return {
64
+ treatment: treatment,
65
+ label: label
66
+ };
53
67
  };
54
- }
68
+ Engine.prototype.isGarbage = function () {
69
+ return this.baseInfo.status === 'ARCHIVED';
70
+ };
71
+ Engine.prototype.getChangeNumber = function () {
72
+ return this.baseInfo.changeNumber;
73
+ };
74
+ return Engine;
75
+ }());
76
+ export { Engine };
@@ -8,8 +8,12 @@ export function andCombinerContext(log, matchers) {
8
8
  log.debug(ENGINE_COMBINER_AND, [hasMatchedAll]);
9
9
  return hasMatchedAll;
10
10
  }
11
- return function andCombiner(key, attributes, splitEvaluator) {
12
- var matcherResults = matchers.map(function (matcher) { return matcher(key, attributes, splitEvaluator); });
11
+ return function andCombiner() {
12
+ var params = [];
13
+ for (var _i = 0; _i < arguments.length; _i++) {
14
+ params[_i] = arguments[_i];
15
+ }
16
+ var matcherResults = matchers.map(function (matcher) { return matcher.apply(void 0, params); });
13
17
  // If any matching result is a thenable we should use Promise.all
14
18
  if (findIndex(matcherResults, thenable) !== -1) {
15
19
  return Promise.all(matcherResults).then(andResults);
@@ -1,4 +1,4 @@
1
- import { findIndex, isBoolean } from '../../utils/lang';
1
+ import { findIndex } from '../../utils/lang';
2
2
  import { thenable } from '../../utils/promise/thenable';
3
3
  import { UNSUPPORTED_MATCHER_TYPE } from '../../utils/labels';
4
4
  import { CONTROL } from '../../utils/constants';
@@ -11,12 +11,12 @@ export function ifElseIfCombinerContext(log, predicates) {
11
11
  label: UNSUPPORTED_MATCHER_TYPE
12
12
  };
13
13
  }
14
- function computeEvaluation(predicateResults) {
15
- for (var i = 0, len = predicateResults.length; i < len; i++) {
14
+ function computeTreatment(predicateResults) {
15
+ var len = predicateResults.length;
16
+ for (var i = 0; i < len; i++) {
16
17
  var evaluation = predicateResults[i];
17
18
  if (evaluation !== undefined) {
18
- if (!isBoolean(evaluation))
19
- log.debug(ENGINE_COMBINER_IFELSEIF, [evaluation.treatment]);
19
+ log.debug(ENGINE_COMBINER_IFELSEIF, [evaluation.treatment]);
20
20
  return evaluation;
21
21
  }
22
22
  }
@@ -30,9 +30,9 @@ export function ifElseIfCombinerContext(log, predicates) {
30
30
  var predicateResults = predicates.map(function (evaluator) { return evaluator(key, seed, trafficAllocation, trafficAllocationSeed, attributes, splitEvaluator); });
31
31
  // if we find a thenable
32
32
  if (findIndex(predicateResults, thenable) !== -1) {
33
- return Promise.all(predicateResults).then(function (results) { return computeEvaluation(results); });
33
+ return Promise.all(predicateResults).then(function (results) { return computeTreatment(results); });
34
34
  }
35
- return computeEvaluation(predicateResults);
35
+ return computeTreatment(predicateResults);
36
36
  }
37
37
  // if there is none predicates, then there was an error in parsing phase
38
38
  if (!Array.isArray(predicates) || predicates.length === 0) {
@@ -4,12 +4,11 @@ import { NOT_IN_SPLIT } from '../../utils/labels';
4
4
  // Build Evaluation object if and only if matchingResult is true
5
5
  function match(log, matchingResult, bucketingKey, seed, treatments, label) {
6
6
  if (matchingResult) {
7
- return treatments ? // Feature flag
8
- {
9
- treatment: getTreatment(log, bucketingKey, seed, treatments),
10
- label: label
11
- } : // Rule-based segment
12
- true;
7
+ var treatment = getTreatment(log, bucketingKey, seed, treatments);
8
+ return {
9
+ treatment: treatment,
10
+ label: label
11
+ };
13
12
  }
14
13
  // else we should notify the engine to continue evaluating
15
14
  return undefined;
@@ -1,4 +1,4 @@
1
- import { engineParser } from './Engine';
1
+ import { Engine } from './Engine';
2
2
  import { thenable } from '../utils/promise/thenable';
3
3
  import { EXCEPTION, SPLIT_NOT_FOUND } from '../utils/labels';
4
4
  import { CONTROL } from '../utils/constants';
@@ -26,12 +26,12 @@ export function evaluateFeature(log, key, splitName, attributes, storage) {
26
26
  return treatmentException;
27
27
  }
28
28
  if (thenable(parsedSplit)) {
29
- return parsedSplit.then(function (split) { return getEvaluation(log, key, split, attributes, storage); }).catch(
29
+ return parsedSplit.then(function (split) { return getEvaluation(log, split, key, attributes, storage); }).catch(
30
30
  // Exception on async `getSplit` storage. For example, when the storage is redis or
31
31
  // pluggable and there is a connection issue and we can't retrieve the split to be evaluated
32
32
  function () { return treatmentException; });
33
33
  }
34
- return getEvaluation(log, key, parsedSplit, attributes, storage);
34
+ return getEvaluation(log, parsedSplit, key, attributes, storage);
35
35
  }
36
36
  export function evaluateFeatures(log, key, splitNames, attributes, storage) {
37
37
  var parsedSplits;
@@ -43,13 +43,13 @@ export function evaluateFeatures(log, key, splitNames, attributes, storage) {
43
43
  return treatmentsException(splitNames);
44
44
  }
45
45
  return thenable(parsedSplits) ?
46
- parsedSplits.then(function (splits) { return getEvaluations(log, key, splitNames, splits, attributes, storage); })
46
+ parsedSplits.then(function (splits) { return getEvaluations(log, splitNames, splits, key, attributes, storage); })
47
47
  .catch(function () {
48
48
  // Exception on async `getSplits` storage. For example, when the storage is redis or
49
49
  // pluggable and there is a connection issue and we can't retrieve the split to be evaluated
50
50
  return treatmentsException(splitNames);
51
51
  }) :
52
- getEvaluations(log, key, splitNames, parsedSplits, attributes, storage);
52
+ getEvaluations(log, splitNames, parsedSplits, key, attributes, storage);
53
53
  }
54
54
  export function evaluateFeaturesByFlagSets(log, key, flagSets, attributes, storage, method) {
55
55
  var storedFlagNames;
@@ -84,37 +84,37 @@ export function evaluateFeaturesByFlagSets(log, key, flagSets, attributes, stora
84
84
  }) :
85
85
  evaluate(storedFlagNames);
86
86
  }
87
- function getEvaluation(log, key, splitJSON, attributes, storage) {
87
+ function getEvaluation(log, splitJSON, key, attributes, storage) {
88
88
  var evaluation = {
89
89
  treatment: CONTROL,
90
90
  label: SPLIT_NOT_FOUND,
91
91
  config: null
92
92
  };
93
93
  if (splitJSON) {
94
- var split = engineParser(log, splitJSON, storage);
95
- evaluation = split.getTreatment(key, attributes, evaluateFeature);
94
+ var split_1 = Engine.parse(log, splitJSON, storage);
95
+ evaluation = split_1.getTreatment(key, attributes, evaluateFeature);
96
96
  // If the storage is async and the evaluated flag uses segments or dependencies, evaluation is thenable
97
97
  if (thenable(evaluation)) {
98
98
  return evaluation.then(function (result) {
99
- result.changeNumber = splitJSON.changeNumber;
99
+ result.changeNumber = split_1.getChangeNumber();
100
100
  result.config = splitJSON.configurations && splitJSON.configurations[result.treatment] || null;
101
101
  result.impressionsDisabled = splitJSON.impressionsDisabled;
102
102
  return result;
103
103
  });
104
104
  }
105
105
  else {
106
- evaluation.changeNumber = splitJSON.changeNumber;
106
+ evaluation.changeNumber = split_1.getChangeNumber(); // Always sync and optional
107
107
  evaluation.config = splitJSON.configurations && splitJSON.configurations[evaluation.treatment] || null;
108
108
  evaluation.impressionsDisabled = splitJSON.impressionsDisabled;
109
109
  }
110
110
  }
111
111
  return evaluation;
112
112
  }
113
- function getEvaluations(log, key, splitNames, splits, attributes, storage) {
113
+ function getEvaluations(log, splitNames, splits, key, attributes, storage) {
114
114
  var result = {};
115
115
  var thenables = [];
116
116
  splitNames.forEach(function (splitName) {
117
- var evaluation = getEvaluation(log, key, splits[splitName], attributes, storage);
117
+ var evaluation = getEvaluation(log, splits[splitName], key, attributes, storage);
118
118
  if (thenable(evaluation)) {
119
119
  thenables.push(evaluation.then(function (res) {
120
120
  result[splitName] = res;
@@ -21,7 +21,6 @@ import { greaterThanEqualToSemverMatcherContext } from './semver_gte';
21
21
  import { lessThanEqualToSemverMatcherContext } from './semver_lte';
22
22
  import { betweenSemverMatcherContext } from './semver_between';
23
23
  import { inListSemverMatcherContext } from './semver_inlist';
24
- import { ruleBasedSegmentMatcherContext } from './rbsegment';
25
24
  var matchers = [
26
25
  undefined,
27
26
  allMatcherContext,
@@ -46,8 +45,7 @@ var matchers = [
46
45
  lessThanEqualToSemverMatcherContext,
47
46
  betweenSemverMatcherContext,
48
47
  inListSemverMatcherContext,
49
- largeSegmentMatcherContext,
50
- ruleBasedSegmentMatcherContext // IN_RULE_BASED_SEGMENT: 24
48
+ largeSegmentMatcherContext, // IN_LARGE_SEGMENT: 23
51
49
  ];
52
50
  /**
53
51
  * Matcher factory.
@@ -23,7 +23,6 @@ export var matcherTypes = {
23
23
  BETWEEN_SEMVER: 21,
24
24
  IN_LIST_SEMVER: 22,
25
25
  IN_LARGE_SEGMENT: 23,
26
- IN_RULE_BASED_SEGMENT: 24,
27
26
  };
28
27
  export var matcherDataTypes = {
29
28
  BOOLEAN: 'BOOLEAN',
@@ -78,10 +78,6 @@ export function matchersTransform(matchers) {
78
78
  type === matcherTypes.LESS_THAN_OR_EQUAL_TO_SEMVER) {
79
79
  value = stringMatcherData;
80
80
  }
81
- else if (type === matcherTypes.IN_RULE_BASED_SEGMENT) {
82
- value = segmentTransform(userDefinedSegmentMatcherData);
83
- dataType = matcherDataTypes.NOT_SPECIFIED;
84
- }
85
81
  return {
86
82
  attribute: attribute,
87
83
  negate: negate,
@@ -50,8 +50,8 @@ export function parser(log, conditions, storage) {
50
50
  // and break the loop
51
51
  break;
52
52
  }
53
- predicates.push(conditionContext(log, andCombinerContext(log, expressions), partitions && Treatments.parse(partitions), label, conditionType));
53
+ predicates.push(conditionContext(log, andCombinerContext(log, expressions), Treatments.parse(partitions), label, conditionType));
54
54
  }
55
- // Instantiate evaluator given the set of conditions using if else if logic
55
+ // Instanciate evaluator given the set of conditions using if else if logic
56
56
  return ifElseIfCombinerContext(log, predicates);
57
57
  }
@@ -49,7 +49,6 @@ function getProcessingFunction(matcherTypeID, dataType) {
49
49
  case matcherTypes.BETWEEN:
50
50
  return dataType === 'DATETIME' ? zeroSinceSS : undefined;
51
51
  case matcherTypes.IN_SPLIT_TREATMENT:
52
- case matcherTypes.IN_RULE_BASED_SEGMENT:
53
52
  return dependencyProcessor;
54
53
  default:
55
54
  return undefined;
@@ -21,14 +21,12 @@ export var RETRIEVE_MANAGER = 29;
21
21
  export var SYNC_OFFLINE_DATA = 30;
22
22
  export var SYNC_SPLITS_FETCH = 31;
23
23
  export var SYNC_SPLITS_UPDATE = 32;
24
- export var SYNC_RBS_UPDATE = 33;
25
24
  export var STREAMING_NEW_MESSAGE = 35;
26
25
  export var SYNC_TASK_START = 36;
27
26
  export var SYNC_TASK_EXECUTE = 37;
28
27
  export var SYNC_TASK_STOP = 38;
29
28
  export var SETTINGS_SPLITS_FILTER = 39;
30
29
  export var ENGINE_MATCHER_RESULT = 40;
31
- export var ENGINE_DEFAULT = 41;
32
30
  export var CLIENT_READY_FROM_CACHE = 100;
33
31
  export var CLIENT_READY = 101;
34
32
  export var IMPRESSION = 102;
@@ -11,7 +11,6 @@ export var codesDebug = codesInfo.concat([
11
11
  [c.ENGINE_VALUE, c.LOG_PREFIX_ENGINE_VALUE + 'Extracted attribute `%s`. %s will be used for matching.'],
12
12
  [c.ENGINE_SANITIZE, c.LOG_PREFIX_ENGINE + ':sanitize: Attempted to sanitize %s which should be of type %s. Sanitized and processed value => %s'],
13
13
  [c.ENGINE_MATCHER_RESULT, c.LOG_PREFIX_ENGINE_MATCHER + '[%s] Result: %s. Rule value: %s. Evaluation value: %s'],
14
- [c.ENGINE_DEFAULT, c.LOG_PREFIX_ENGINE + 'Evaluates to default treatment. %s'],
15
14
  // SDK
16
15
  [c.CLEANUP_REGISTERING, c.LOG_PREFIX_CLEANUP + 'Registering cleanup handler %s'],
17
16
  [c.CLEANUP_DEREGISTERING, c.LOG_PREFIX_CLEANUP + 'Deregistering cleanup handler %s'],
@@ -20,9 +19,8 @@ export var codesDebug = codesInfo.concat([
20
19
  [c.RETRIEVE_MANAGER, 'Retrieving manager instance.'],
21
20
  // synchronizer
22
21
  [c.SYNC_OFFLINE_DATA, c.LOG_PREFIX_SYNC_OFFLINE + 'Feature flags data: \n%s'],
23
- [c.SYNC_SPLITS_FETCH, c.LOG_PREFIX_SYNC_SPLITS + 'Spin up feature flags update using since = %s and rbSince = %s.'],
24
- [c.SYNC_SPLITS_UPDATE, c.LOG_PREFIX_SYNC_SPLITS + 'New feature flags %s. Removed feature flags %s.'],
25
- [c.SYNC_RBS_UPDATE, c.LOG_PREFIX_SYNC_SPLITS + 'New rule-based segments %s. Removed rule-based segments %s.'],
22
+ [c.SYNC_SPLITS_FETCH, c.LOG_PREFIX_SYNC_SPLITS + 'Spin up feature flags update using since = %s'],
23
+ [c.SYNC_SPLITS_UPDATE, c.LOG_PREFIX_SYNC_SPLITS + 'New feature flags %s. Removed feature flags %s. Segment names collected %s'],
26
24
  [c.STREAMING_NEW_MESSAGE, c.LOG_PREFIX_SYNC_STREAMING + 'New SSE message received, with data: %s.'],
27
25
  [c.SYNC_TASK_START, c.LOG_PREFIX_SYNC + ': Starting %s. Running each %s millis'],
28
26
  [c.SYNC_TASK_EXECUTE, c.LOG_PREFIX_SYNC + ': Running %s'],
@@ -31,7 +31,7 @@ export var codesWarn = codesError.concat([
31
31
  [c.WARN_SPLITS_FILTER_EMPTY, c.LOG_PREFIX_SETTINGS + ': feature flag filter configuration must be a non-empty array of filter objects.'],
32
32
  [c.WARN_SDK_KEY, c.LOG_PREFIX_SETTINGS + ': You already have %s. We recommend keeping only one instance of the factory at all times (Singleton pattern) and reusing it throughout your application'],
33
33
  [c.STREAMING_PARSING_MEMBERSHIPS_UPDATE, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching Memberships due to an error processing %s notification: %s'],
34
- [c.STREAMING_PARSING_SPLIT_UPDATE, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching SplitChanges due to an error processing %s notification: %s'],
34
+ [c.STREAMING_PARSING_SPLIT_UPDATE, c.LOG_PREFIX_SYNC_STREAMING + 'Fetching SplitChanges due to an error processing SPLIT_UPDATE notification: %s'],
35
35
  [c.WARN_INVALID_FLAGSET, '%s: you passed %s, flag set must adhere to the regular expressions %s. This means a flag set must start with a letter or number, be in lowercase, alphanumeric and have a max length of 50 characters. %s was discarded.'],
36
36
  [c.WARN_LOWERCASE_FLAGSET, '%s: flag set %s should be all lowercase - converting string to lowercase.'],
37
37
  [c.WARN_FLAGSET_WITHOUT_FLAGS, '%s: you passed %s flag set that does not contain cached feature flag names. Please double check what flag sets are in use in the Split user interface.'],
@@ -26,8 +26,7 @@ function objectToView(splitObject) {
26
26
  configs: splitObject.configurations || {},
27
27
  sets: splitObject.sets || [],
28
28
  defaultTreatment: splitObject.defaultTreatment,
29
- impressionsDisabled: splitObject.impressionsDisabled === true,
30
- prerequisites: (splitObject.prerequisites || []).map(function (p) { return ({ flagName: p.n, treatments: p.ts }); }),
29
+ impressionsDisabled: splitObject.impressionsDisabled === true
31
30
  };
32
31
  }
33
32
  function objectsToViews(splitObjects) {
@@ -17,6 +17,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
17
17
  var urls = settings.urls;
18
18
  var filterQueryString = settings.sync.__splitFiltersValidation && settings.sync.__splitFiltersValidation.queryString;
19
19
  var SplitSDKImpressionsMode = settings.sync.impressionsMode;
20
+ var flagSpecVersion = settings.sync.flagSpecVersion;
20
21
  var splitHttpClient = splitHttpClientFactory(settings, platform);
21
22
  return {
22
23
  // @TODO throw errors if health check requests fail, to log them in the Synchronizer
@@ -29,7 +30,7 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
29
30
  return splitHttpClient(url).then(function () { return true; }).catch(function () { return false; });
30
31
  },
31
32
  fetchAuth: function (userMatchingKeys) {
32
- var url = urls.auth + "/v2/auth?s=" + settings.sync.flagSpecVersion;
33
+ var url = urls.auth + "/v2/auth?s=" + flagSpecVersion;
33
34
  if (userMatchingKeys) { // `userMatchingKeys` is undefined in server-side
34
35
  var queryParams = userMatchingKeys.map(userKeyToQueryParam).join('&');
35
36
  if (queryParams)
@@ -37,8 +38,8 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
37
38
  }
38
39
  return splitHttpClient(url, undefined, telemetryTracker.trackHttp(TOKEN));
39
40
  },
40
- fetchSplitChanges: function (since, noCache, till, rbSince) {
41
- var url = urls.sdk + "/splitChanges?s=" + settings.sync.flagSpecVersion + "&since=" + since + (rbSince ? '&rbSince=' + rbSince : '') + (filterQueryString || '') + (till ? '&till=' + till : '');
41
+ fetchSplitChanges: function (since, noCache, till) {
42
+ var url = urls.sdk + "/splitChanges?s=" + flagSpecVersion + "&since=" + since + (filterQueryString || '') + (till ? '&till=' + till : '');
42
43
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(SPLITS))
43
44
  .catch(function (err) {
44
45
  if (err.statusCode === 414)
@@ -50,8 +50,8 @@ export { AbstractSplitsCacheSync };
50
50
  * Given a parsed split, it returns a boolean flagging if its conditions use segments matchers (rules & whitelists).
51
51
  * This util is intended to simplify the implementation of `splitsCache::usesSegments` method
52
52
  */
53
- export function usesSegments(ruleEntity) {
54
- var conditions = ruleEntity.conditions || [];
53
+ export function usesSegments(split) {
54
+ var conditions = split.conditions || [];
55
55
  for (var i = 0; i < conditions.length; i++) {
56
56
  var matchers = conditions[i].matcherGroup.matchers;
57
57
  for (var j = 0; j < matchers.length; j++) {
@@ -60,8 +60,5 @@ export function usesSegments(ruleEntity) {
60
60
  return true;
61
61
  }
62
62
  }
63
- var excluded = ruleEntity.excluded;
64
- if (excluded && excluded.segments && excluded.segments.length > 0)
65
- return true;
66
63
  return false;
67
64
  }
@@ -24,15 +24,6 @@ var KeyBuilder = /** @class */ (function () {
24
24
  KeyBuilder.prototype.buildSplitKeyPrefix = function () {
25
25
  return this.prefix + ".split.";
26
26
  };
27
- KeyBuilder.prototype.buildRBSegmentKey = function (rbsegmentName) {
28
- return this.prefix + ".rbsegment." + rbsegmentName;
29
- };
30
- KeyBuilder.prototype.buildRBSegmentsTillKey = function () {
31
- return this.prefix + ".rbsegments.till";
32
- };
33
- KeyBuilder.prototype.buildRBSegmentKeyPrefix = function () {
34
- return this.prefix + ".rbsegment.";
35
- };
36
27
  KeyBuilder.prototype.buildSegmentNameKey = function (segmentName) {
37
28
  return this.prefix + ".segment." + segmentName;
38
29
  };
@@ -32,9 +32,6 @@ var KeyBuilderCS = /** @class */ (function (_super) {
32
32
  KeyBuilderCS.prototype.isSplitKey = function (key) {
33
33
  return startsWith(key, this.prefix + ".split.");
34
34
  };
35
- KeyBuilderCS.prototype.isRBSegmentKey = function (key) {
36
- return startsWith(key, this.prefix + ".rbsegment.");
37
- };
38
35
  KeyBuilderCS.prototype.buildSplitsWithSegmentCountKey = function () {
39
36
  return this.prefix + ".splits.usingSegments";
40
37
  };
@@ -39,9 +39,6 @@ var KeyBuilderSS = /** @class */ (function (_super) {
39
39
  KeyBuilderSS.prototype.searchPatternForSplitKeys = function () {
40
40
  return this.buildSplitKeyPrefix() + "*";
41
41
  };
42
- KeyBuilderSS.prototype.searchPatternForRBSegmentKeys = function () {
43
- return this.buildRBSegmentKeyPrefix() + "*";
44
- };
45
42
  /* Telemetry keys */
46
43
  KeyBuilderSS.prototype.buildLatencyKey = function (method, bucket) {
47
44
  return this.latencyPrefix + "::" + this.versionablePrefix + "/" + METHOD_NAMES[method] + "/" + bucket;
@@ -38,13 +38,15 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
38
38
  };
39
39
  SplitsCacheInLocal.prototype._incrementCounts = function (split) {
40
40
  try {
41
- var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
42
- // @ts-expect-error
43
- localStorage.setItem(ttKey, toNumber(localStorage.getItem(ttKey)) + 1);
44
- if (usesSegments(split)) {
45
- var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
41
+ if (split) {
42
+ var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
46
43
  // @ts-expect-error
47
- localStorage.setItem(segmentsCountKey, toNumber(localStorage.getItem(segmentsCountKey)) + 1);
44
+ localStorage.setItem(ttKey, toNumber(localStorage.getItem(ttKey)) + 1);
45
+ if (usesSegments(split)) {
46
+ var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
47
+ // @ts-expect-error
48
+ localStorage.setItem(segmentsCountKey, toNumber(localStorage.getItem(segmentsCountKey)) + 1);
49
+ }
48
50
  }
49
51
  }
50
52
  catch (e) {
@@ -153,9 +155,12 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
153
155
  return true;
154
156
  var storedCount = localStorage.getItem(this.keys.buildSplitsWithSegmentCountKey());
155
157
  var splitsWithSegmentsCount = storedCount === null ? 0 : toNumber(storedCount);
156
- return isFiniteNumber(splitsWithSegmentsCount) ?
157
- splitsWithSegmentsCount > 0 :
158
- true;
158
+ if (isFiniteNumber(splitsWithSegmentsCount)) {
159
+ return splitsWithSegmentsCount > 0;
160
+ }
161
+ else {
162
+ return true;
163
+ }
159
164
  };
160
165
  SplitsCacheInLocal.prototype.getNamesByFlagSets = function (flagSets) {
161
166
  var _this = this;