@splitsoftware/splitio-commons 1.17.1-rc.2 → 2.0.0-rc.0

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 (195) hide show
  1. package/CHANGES.txt +7 -3
  2. package/cjs/evaluator/index.js +2 -2
  3. package/cjs/evaluator/matchers/semver_inlist.js +1 -2
  4. package/cjs/evaluator/matchers/whitelist.js +1 -2
  5. package/cjs/listeners/browser.js +1 -2
  6. package/cjs/logger/browser/DebugLogger.js +1 -2
  7. package/cjs/logger/browser/ErrorLogger.js +1 -2
  8. package/cjs/logger/browser/InfoLogger.js +1 -2
  9. package/cjs/logger/browser/WarnLogger.js +1 -2
  10. package/cjs/logger/index.js +1 -2
  11. package/cjs/sdkClient/clientCS.js +5 -8
  12. package/cjs/sdkClient/sdkClientMethodCS.js +1 -1
  13. package/cjs/sdkFactory/index.js +1 -3
  14. package/cjs/services/decorateHeaders.js +1 -2
  15. package/cjs/storages/AbstractSplitsCacheAsync.js +7 -0
  16. package/cjs/storages/AbstractSplitsCacheSync.js +7 -0
  17. package/cjs/storages/KeyBuilderCS.js +0 -9
  18. package/cjs/storages/dataLoader.js +32 -65
  19. package/cjs/storages/inLocalStorage/MySegmentsCacheInLocal.js +1 -21
  20. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +14 -7
  21. package/cjs/storages/inLocalStorage/index.js +1 -4
  22. package/cjs/storages/inMemory/InMemoryStorageCS.js +4 -16
  23. package/cjs/storages/inMemory/SegmentsCacheInMemory.js +3 -4
  24. package/cjs/storages/inMemory/SplitsCacheInMemory.js +2 -3
  25. package/cjs/storages/inMemory/UniqueKeysCacheInMemory.js +2 -3
  26. package/cjs/storages/inMemory/UniqueKeysCacheInMemoryCS.js +2 -3
  27. package/cjs/storages/inRedis/RedisAdapter.js +2 -3
  28. package/cjs/storages/inRedis/SplitsCacheInRedis.js +1 -1
  29. package/cjs/storages/inRedis/TelemetryCacheInRedis.js +3 -4
  30. package/cjs/storages/inRedis/UniqueKeysCacheInRedis.js +1 -2
  31. package/cjs/storages/pluggable/SplitsCachePluggable.js +1 -1
  32. package/cjs/storages/pluggable/TelemetryCachePluggable.js +6 -7
  33. package/cjs/storages/pluggable/UniqueKeysCachePluggable.js +1 -2
  34. package/cjs/storages/pluggable/inMemoryWrapper.js +7 -8
  35. package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +7 -2
  36. package/cjs/sync/polling/pollingManagerSS.js +3 -3
  37. package/cjs/sync/polling/updaters/splitChangesUpdater.js +13 -5
  38. package/cjs/sync/streaming/parseUtils.js +0 -1
  39. package/cjs/sync/streaming/pushManager.js +2 -3
  40. package/cjs/utils/LRUCache/index.js +1 -2
  41. package/cjs/utils/constants/browser.js +1 -4
  42. package/cjs/utils/lang/index.js +6 -9
  43. package/cjs/utils/lang/objectAssign.js +12 -77
  44. package/cjs/utils/lang/sets.js +3 -110
  45. package/cjs/utils/settingsValidation/index.js +0 -9
  46. package/cjs/utils/settingsValidation/logger/builtinLogger.js +1 -2
  47. package/cjs/utils/settingsValidation/storage/storageCS.js +12 -1
  48. package/esm/evaluator/index.js +3 -3
  49. package/esm/evaluator/matchers/semver_inlist.js +1 -2
  50. package/esm/evaluator/matchers/whitelist.js +1 -2
  51. package/esm/listeners/browser.js +1 -2
  52. package/esm/logger/browser/DebugLogger.js +1 -2
  53. package/esm/logger/browser/ErrorLogger.js +1 -2
  54. package/esm/logger/browser/InfoLogger.js +1 -2
  55. package/esm/logger/browser/WarnLogger.js +1 -2
  56. package/esm/logger/index.js +1 -2
  57. package/esm/sdkClient/clientCS.js +5 -8
  58. package/esm/sdkClient/sdkClientMethodCS.js +1 -1
  59. package/esm/sdkFactory/index.js +2 -4
  60. package/esm/services/decorateHeaders.js +1 -2
  61. package/esm/storages/AbstractSplitsCacheAsync.js +7 -0
  62. package/esm/storages/AbstractSplitsCacheSync.js +7 -0
  63. package/esm/storages/KeyBuilderCS.js +0 -9
  64. package/esm/storages/dataLoader.js +30 -62
  65. package/esm/storages/inLocalStorage/MySegmentsCacheInLocal.js +1 -21
  66. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +14 -7
  67. package/esm/storages/inLocalStorage/index.js +2 -5
  68. package/esm/storages/inMemory/InMemoryStorageCS.js +4 -16
  69. package/esm/storages/inMemory/SegmentsCacheInMemory.js +3 -4
  70. package/esm/storages/inMemory/SplitsCacheInMemory.js +2 -3
  71. package/esm/storages/inMemory/UniqueKeysCacheInMemory.js +2 -3
  72. package/esm/storages/inMemory/UniqueKeysCacheInMemoryCS.js +2 -3
  73. package/esm/storages/inRedis/RedisAdapter.js +2 -3
  74. package/esm/storages/inRedis/SplitsCacheInRedis.js +2 -2
  75. package/esm/storages/inRedis/TelemetryCacheInRedis.js +3 -4
  76. package/esm/storages/inRedis/UniqueKeysCacheInRedis.js +1 -2
  77. package/esm/storages/pluggable/SplitsCachePluggable.js +2 -2
  78. package/esm/storages/pluggable/TelemetryCachePluggable.js +6 -7
  79. package/esm/storages/pluggable/UniqueKeysCachePluggable.js +1 -2
  80. package/esm/storages/pluggable/inMemoryWrapper.js +7 -8
  81. package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +8 -3
  82. package/esm/sync/polling/pollingManagerSS.js +3 -3
  83. package/esm/sync/polling/updaters/splitChangesUpdater.js +14 -6
  84. package/esm/sync/streaming/parseUtils.js +0 -1
  85. package/esm/sync/streaming/pushManager.js +2 -3
  86. package/esm/utils/LRUCache/index.js +1 -2
  87. package/esm/utils/constants/browser.js +0 -3
  88. package/esm/utils/lang/index.js +6 -9
  89. package/esm/utils/lang/objectAssign.js +12 -77
  90. package/esm/utils/lang/sets.js +2 -107
  91. package/esm/utils/settingsValidation/index.js +0 -9
  92. package/esm/utils/settingsValidation/logger/builtinLogger.js +1 -2
  93. package/esm/utils/settingsValidation/storage/storageCS.js +10 -0
  94. package/package.json +2 -2
  95. package/src/evaluator/index.ts +5 -5
  96. package/src/evaluator/matchers/semver_inlist.ts +1 -2
  97. package/src/evaluator/matchers/whitelist.ts +1 -3
  98. package/src/listeners/browser.ts +1 -2
  99. package/src/logger/browser/DebugLogger.ts +1 -2
  100. package/src/logger/browser/ErrorLogger.ts +1 -2
  101. package/src/logger/browser/InfoLogger.ts +1 -2
  102. package/src/logger/browser/WarnLogger.ts +1 -2
  103. package/src/logger/index.ts +3 -4
  104. package/src/sdkClient/clientCS.ts +5 -8
  105. package/src/sdkClient/sdkClientMethodCS.ts +1 -1
  106. package/src/sdkFactory/index.ts +2 -5
  107. package/src/sdkFactory/types.ts +1 -1
  108. package/src/services/decorateHeaders.ts +1 -2
  109. package/src/storages/AbstractSplitsCacheAsync.ts +9 -2
  110. package/src/storages/AbstractSplitsCacheSync.ts +9 -2
  111. package/src/storages/KeyBuilderCS.ts +0 -13
  112. package/src/storages/dataLoader.ts +32 -63
  113. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +1 -21
  114. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +16 -8
  115. package/src/storages/inLocalStorage/index.ts +2 -6
  116. package/src/storages/inMemory/InMemoryStorageCS.ts +4 -19
  117. package/src/storages/inMemory/SegmentsCacheInMemory.ts +4 -5
  118. package/src/storages/inMemory/SplitsCacheInMemory.ts +4 -5
  119. package/src/storages/inMemory/UniqueKeysCacheInMemory.ts +4 -5
  120. package/src/storages/inMemory/UniqueKeysCacheInMemoryCS.ts +4 -5
  121. package/src/storages/inRedis/RedisAdapter.ts +3 -4
  122. package/src/storages/inRedis/SplitsCacheInRedis.ts +3 -3
  123. package/src/storages/inRedis/TelemetryCacheInRedis.ts +3 -4
  124. package/src/storages/inRedis/UniqueKeysCacheInRedis.ts +1 -2
  125. package/src/storages/pluggable/SegmentsCachePluggable.ts +0 -1
  126. package/src/storages/pluggable/SplitsCachePluggable.ts +3 -3
  127. package/src/storages/pluggable/TelemetryCachePluggable.ts +6 -7
  128. package/src/storages/pluggable/UniqueKeysCachePluggable.ts +1 -2
  129. package/src/storages/pluggable/inMemoryWrapper.ts +8 -9
  130. package/src/storages/types.ts +9 -5
  131. package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +7 -3
  132. package/src/sync/polling/pollingManagerSS.ts +2 -3
  133. package/src/sync/polling/updaters/splitChangesUpdater.ts +15 -8
  134. package/src/sync/streaming/parseUtils.ts +0 -1
  135. package/src/sync/streaming/pushManager.ts +3 -4
  136. package/src/sync/submitters/types.ts +3 -4
  137. package/src/types.ts +9 -18
  138. package/src/utils/LRUCache/index.ts +2 -3
  139. package/src/utils/constants/browser.ts +0 -4
  140. package/src/utils/lang/index.ts +6 -7
  141. package/src/utils/lang/objectAssign.ts +13 -92
  142. package/src/utils/lang/sets.ts +3 -125
  143. package/src/utils/settingsValidation/index.ts +0 -10
  144. package/src/utils/settingsValidation/logger/builtinLogger.ts +1 -2
  145. package/src/utils/settingsValidation/storage/storageCS.ts +13 -0
  146. package/src/utils/settingsValidation/types.ts +0 -2
  147. package/types/logger/index.d.ts +1 -2
  148. package/types/sdkClient/clientCS.d.ts +2 -3
  149. package/types/sdkFactory/types.d.ts +1 -1
  150. package/types/storages/AbstractSplitsCacheAsync.d.ts +6 -2
  151. package/types/storages/AbstractSplitsCacheSync.d.ts +6 -2
  152. package/types/storages/KeyBuilderCS.d.ts +0 -2
  153. package/types/storages/dataLoader.d.ts +6 -17
  154. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +7 -2
  155. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +1 -2
  156. package/types/storages/inMemory/UniqueKeysCacheInMemory.d.ts +2 -3
  157. package/types/storages/inRedis/SplitsCacheInRedis.d.ts +1 -2
  158. package/types/storages/pluggable/SplitsCachePluggable.d.ts +1 -2
  159. package/types/storages/pluggable/inMemoryWrapper.d.ts +1 -2
  160. package/types/storages/types.d.ts +7 -5
  161. package/types/sync/polling/updaters/splitChangesUpdater.d.ts +1 -2
  162. package/types/sync/submitters/types.d.ts +3 -4
  163. package/types/types.d.ts +9 -17
  164. package/types/utils/LRUCache/index.d.ts +1 -2
  165. package/types/utils/constants/browser.d.ts +0 -2
  166. package/types/utils/lang/objectAssign.d.ts +3 -0
  167. package/types/utils/lang/sets.d.ts +1 -61
  168. package/types/utils/settingsValidation/index.d.ts +0 -1
  169. package/types/utils/settingsValidation/storage/storageCS.d.ts +5 -0
  170. package/types/utils/settingsValidation/types.d.ts +0 -2
  171. package/cjs/integrations/browser.js +0 -31
  172. package/cjs/integrations/ga/GaToSplit.js +0 -257
  173. package/cjs/integrations/ga/GoogleAnalyticsToSplit.js +0 -14
  174. package/cjs/integrations/ga/SplitToGa.js +0 -123
  175. package/cjs/integrations/ga/SplitToGoogleAnalytics.js +0 -14
  176. package/cjs/integrations/ga/types.js +0 -2
  177. package/cjs/sdkClient/sdkClientMethodCSWithTT.js +0 -76
  178. package/cjs/utils/lang/maps.js +0 -96
  179. package/esm/integrations/browser.js +0 -27
  180. package/esm/integrations/ga/GaToSplit.js +0 -250
  181. package/esm/integrations/ga/GoogleAnalyticsToSplit.js +0 -10
  182. package/esm/integrations/ga/SplitToGa.js +0 -120
  183. package/esm/integrations/ga/SplitToGoogleAnalytics.js +0 -10
  184. package/esm/integrations/ga/types.js +0 -1
  185. package/esm/sdkClient/sdkClientMethodCSWithTT.js +0 -72
  186. package/esm/utils/lang/maps.js +0 -92
  187. package/src/integrations/browser.ts +0 -35
  188. package/src/integrations/ga/GaToSplit.ts +0 -299
  189. package/src/integrations/ga/GoogleAnalyticsToSplit.ts +0 -14
  190. package/src/integrations/ga/SplitToGa.ts +0 -135
  191. package/src/integrations/ga/SplitToGoogleAnalytics.ts +0 -14
  192. package/src/integrations/ga/autoRequire.js +0 -33
  193. package/src/integrations/ga/types.ts +0 -153
  194. package/src/sdkClient/sdkClientMethodCSWithTT.ts +0 -98
  195. package/src/utils/lang/maps.ts +0 -108
@@ -2,7 +2,6 @@ import { __extends } from "tslib";
2
2
  import { AbstractSplitsCacheSync, usesSegments } from '../AbstractSplitsCacheSync';
3
3
  import { isFiniteNumber, toNumber, isNaNNumber } from '../../utils/lang';
4
4
  import { LOG_PREFIX } from './constants';
5
- import { _Set, setToArray } from '../../utils/lang/sets';
6
5
  import { getStorageHash } from '../KeyBuilder';
7
6
  /**
8
7
  * ISplitsCacheSync implementation that stores split definitions in browser LocalStorage.
@@ -183,6 +182,14 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
183
182
  return true;
184
183
  }
185
184
  };
185
+ /**
186
+ * Check if the splits information is already stored in browser LocalStorage.
187
+ * In this function we could add more code to check if the data is valid.
188
+ * @override
189
+ */
190
+ SplitsCacheInLocal.prototype.checkCache = function () {
191
+ return this.getChangeNumber() > -1;
192
+ };
186
193
  /**
187
194
  * Clean Splits cache if its `lastUpdated` timestamp is older than the given `expirationTimestamp`,
188
195
  *
@@ -205,7 +212,7 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
205
212
  // mark cache to update the new query filter on first successful splits fetch
206
213
  this.updateNewFilter = true;
207
214
  // if there is cache, clear it
208
- if (this.getChangeNumber() > -1)
215
+ if (this.checkCache())
209
216
  this.clear();
210
217
  }
211
218
  catch (e) {
@@ -219,7 +226,7 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
219
226
  return flagSets.map(function (flagSet) {
220
227
  var flagSetKey = _this.keys.buildFlagSetKey(flagSet);
221
228
  var flagSetFromLocalStorage = localStorage.getItem(flagSetKey);
222
- return new _Set(flagSetFromLocalStorage ? JSON.parse(flagSetFromLocalStorage) : []);
229
+ return new Set(flagSetFromLocalStorage ? JSON.parse(flagSetFromLocalStorage) : []);
223
230
  });
224
231
  };
225
232
  SplitsCacheInLocal.prototype.addToFlagSets = function (featureFlag) {
@@ -231,9 +238,9 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
231
238
  return;
232
239
  var flagSetKey = _this.keys.buildFlagSetKey(featureFlagSet);
233
240
  var flagSetFromLocalStorage = localStorage.getItem(flagSetKey);
234
- var flagSetCache = new _Set(flagSetFromLocalStorage ? JSON.parse(flagSetFromLocalStorage) : []);
241
+ var flagSetCache = new Set(flagSetFromLocalStorage ? JSON.parse(flagSetFromLocalStorage) : []);
235
242
  flagSetCache.add(featureFlag.name);
236
- localStorage.setItem(flagSetKey, JSON.stringify(setToArray(flagSetCache)));
243
+ localStorage.setItem(flagSetKey, JSON.stringify(Array.from(flagSetCache)));
237
244
  });
238
245
  };
239
246
  SplitsCacheInLocal.prototype.removeFromFlagSets = function (featureFlagName, flagSets) {
@@ -249,13 +256,13 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
249
256
  var flagSetFromLocalStorage = localStorage.getItem(flagSetKey);
250
257
  if (!flagSetFromLocalStorage)
251
258
  return;
252
- var flagSetCache = new _Set(JSON.parse(flagSetFromLocalStorage));
259
+ var flagSetCache = new Set(JSON.parse(flagSetFromLocalStorage));
253
260
  flagSetCache.delete(featureFlagName);
254
261
  if (flagSetCache.size === 0) {
255
262
  localStorage.removeItem(flagSetKey);
256
263
  return;
257
264
  }
258
- localStorage.setItem(flagSetKey, JSON.stringify(setToArray(flagSetCache)));
265
+ localStorage.setItem(flagSetKey, JSON.stringify(Array.from(flagSetCache)));
259
266
  };
260
267
  return SplitsCacheInLocal;
261
268
  }(AbstractSplitsCacheSync));
@@ -11,7 +11,7 @@ import { SplitsCacheInMemory } from '../inMemory/SplitsCacheInMemory';
11
11
  import { DEFAULT_CACHE_EXPIRATION_IN_MILLIS } from '../../utils/constants/browser';
12
12
  import { InMemoryStorageCSFactory } from '../inMemory/InMemoryStorageCS';
13
13
  import { LOG_PREFIX } from './constants';
14
- import { DEBUG, LOCALHOST_MODE, NONE, STORAGE_LOCALSTORAGE } from '../../utils/constants';
14
+ import { DEBUG, NONE, STORAGE_LOCALSTORAGE } from '../../utils/constants';
15
15
  import { shouldRecordTelemetry, TelemetryCacheInMemory } from '../inMemory/TelemetryCacheInMemory';
16
16
  import { UniqueKeysCacheInMemoryCS } from '../inMemory/UniqueKeysCacheInMemoryCS';
17
17
  import { getMatching } from '../../utils/key';
@@ -27,16 +27,13 @@ export function InLocalStorage(options) {
27
27
  params.settings.log.warn(LOG_PREFIX + 'LocalStorage API is unavailable. Falling back to default MEMORY storage');
28
28
  return InMemoryStorageCSFactory(params);
29
29
  }
30
- var onReadyFromCacheCb = params.onReadyFromCacheCb, settings = params.settings, _a = params.settings, log = _a.log, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, _c = _a.sync, impressionsMode = _c.impressionsMode, __splitFiltersValidation = _c.__splitFiltersValidation;
30
+ var settings = params.settings, _a = params.settings, log = _a.log, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, _c = _a.sync, impressionsMode = _c.impressionsMode, __splitFiltersValidation = _c.__splitFiltersValidation;
31
31
  var matchingKey = getMatching(settings.core.key);
32
32
  var keys = new KeyBuilderCS(prefix, matchingKey);
33
33
  var expirationTimestamp = Date.now() - DEFAULT_CACHE_EXPIRATION_IN_MILLIS;
34
34
  var splits = new SplitsCacheInLocal(settings, keys, expirationTimestamp);
35
35
  var segments = new MySegmentsCacheInLocal(log, keys);
36
36
  var largeSegments = new MySegmentsCacheInLocal(log, myLargeSegmentsKeyBuilder(prefix, matchingKey));
37
- if (settings.mode === LOCALHOST_MODE || splits.getChangeNumber() > -1) {
38
- Promise.resolve().then(onReadyFromCacheCb);
39
- }
40
37
  return {
41
38
  splits: splits,
42
39
  segments: segments,
@@ -6,15 +6,13 @@ import { ImpressionCountsCacheInMemory } from './ImpressionCountsCacheInMemory';
6
6
  import { DEBUG, LOCALHOST_MODE, NONE, STORAGE_MEMORY } from '../../utils/constants';
7
7
  import { shouldRecordTelemetry, TelemetryCacheInMemory } from './TelemetryCacheInMemory';
8
8
  import { UniqueKeysCacheInMemoryCS } from './UniqueKeysCacheInMemoryCS';
9
- import { getMatching } from '../../utils/key';
10
- import { loadData } from '../dataLoader';
11
9
  /**
12
10
  * InMemory storage factory for standalone client-side SplitFactory
13
11
  *
14
12
  * @param params parameters required by EventsCacheSync
15
13
  */
16
14
  export function InMemoryStorageCSFactory(params) {
17
- var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, _c = _a.sync, impressionsMode = _c.impressionsMode, __splitFiltersValidation = _c.__splitFiltersValidation, preloadedData = _a.preloadedData, onReadyFromCacheCb = params.onReadyFromCacheCb;
15
+ var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, _c = _a.sync, impressionsMode = _c.impressionsMode, __splitFiltersValidation = _c.__splitFiltersValidation;
18
16
  var splits = new SplitsCacheInMemory(__splitFiltersValidation);
19
17
  var segments = new MySegmentsCacheInMemory();
20
18
  var largeSegments = new MySegmentsCacheInMemory();
@@ -38,16 +36,11 @@ export function InMemoryStorageCSFactory(params) {
38
36
  this.uniqueKeys && this.uniqueKeys.clear();
39
37
  },
40
38
  // When using shared instanciation with MEMORY we reuse everything but segments (they are unique per key)
41
- shared: function (matchingKey) {
42
- var segments = new MySegmentsCacheInMemory();
43
- var largeSegments = new MySegmentsCacheInMemory();
44
- if (preloadedData) {
45
- loadData(preloadedData, { segments: segments, largeSegments: largeSegments }, matchingKey);
46
- }
39
+ shared: function () {
47
40
  return {
48
41
  splits: this.splits,
49
- segments: segments,
50
- largeSegments: largeSegments,
42
+ segments: new MySegmentsCacheInMemory(),
43
+ largeSegments: new MySegmentsCacheInMemory(),
51
44
  impressions: this.impressions,
52
45
  impressionCounts: this.impressionCounts,
53
46
  events: this.events,
@@ -72,11 +65,6 @@ export function InMemoryStorageCSFactory(params) {
72
65
  if (storage.uniqueKeys)
73
66
  storage.uniqueKeys.track = noopTrack;
74
67
  }
75
- if (preloadedData) {
76
- loadData(preloadedData, storage, getMatching(params.settings.core.key));
77
- if (splits.getChangeNumber() > -1)
78
- onReadyFromCacheCb();
79
- }
80
68
  return storage;
81
69
  }
82
70
  InMemoryStorageCSFactory.type = STORAGE_MEMORY;
@@ -1,6 +1,5 @@
1
1
  import { __extends } from "tslib";
2
2
  import { AbstractSegmentsCacheSync } from '../AbstractSegmentsCacheSync';
3
- import { _Set } from '../../utils/lang/sets';
4
3
  import { isIntegerNumber } from '../../utils/lang';
5
4
  /**
6
5
  * Default ISplitsCacheSync implementation that stores split definitions in memory.
@@ -16,14 +15,14 @@ var SegmentsCacheInMemory = /** @class */ (function (_super) {
16
15
  }
17
16
  SegmentsCacheInMemory.prototype.addToSegment = function (name, segmentKeys) {
18
17
  var values = this.segmentCache[name];
19
- var keySet = values ? values : new _Set();
18
+ var keySet = values ? values : new Set();
20
19
  segmentKeys.forEach(function (k) { return keySet.add(k); });
21
20
  this.segmentCache[name] = keySet;
22
21
  return true;
23
22
  };
24
23
  SegmentsCacheInMemory.prototype.removeFromSegment = function (name, segmentKeys) {
25
24
  var values = this.segmentCache[name];
26
- var keySet = values ? values : new _Set();
25
+ var keySet = values ? values : new Set();
27
26
  segmentKeys.forEach(function (k) { return keySet.delete(k); });
28
27
  this.segmentCache[name] = keySet;
29
28
  return true;
@@ -41,7 +40,7 @@ var SegmentsCacheInMemory = /** @class */ (function (_super) {
41
40
  };
42
41
  SegmentsCacheInMemory.prototype._registerSegment = function (name) {
43
42
  if (!this.segmentCache[name]) {
44
- this.segmentCache[name] = new _Set();
43
+ this.segmentCache[name] = new Set();
45
44
  }
46
45
  return true;
47
46
  };
@@ -1,7 +1,6 @@
1
1
  import { __extends } from "tslib";
2
2
  import { AbstractSplitsCacheSync, usesSegments } from '../AbstractSplitsCacheSync';
3
3
  import { isFiniteNumber } from '../../utils/lang';
4
- import { _Set } from '../../utils/lang/sets';
5
4
  /**
6
5
  * Default ISplitsCacheSync implementation that stores split definitions in memory.
7
6
  * Supported by all JS runtimes.
@@ -92,7 +91,7 @@ var SplitsCacheInMemory = /** @class */ (function (_super) {
92
91
  };
93
92
  SplitsCacheInMemory.prototype.getNamesByFlagSets = function (flagSets) {
94
93
  var _this = this;
95
- return flagSets.map(function (flagSet) { return _this.flagSetsCache[flagSet] || new _Set(); });
94
+ return flagSets.map(function (flagSet) { return _this.flagSetsCache[flagSet] || new Set(); });
96
95
  };
97
96
  SplitsCacheInMemory.prototype.addToFlagSets = function (featureFlag) {
98
97
  var _this = this;
@@ -102,7 +101,7 @@ var SplitsCacheInMemory = /** @class */ (function (_super) {
102
101
  if (_this.flagSetsFilter.length > 0 && !_this.flagSetsFilter.some(function (filterFlagSet) { return filterFlagSet === featureFlagSet; }))
103
102
  return;
104
103
  if (!_this.flagSetsCache[featureFlagSet])
105
- _this.flagSetsCache[featureFlagSet] = new _Set([]);
104
+ _this.flagSetsCache[featureFlagSet] = new Set([]);
106
105
  _this.flagSetsCache[featureFlagSet].add(featureFlag.name);
107
106
  });
108
107
  };
@@ -1,4 +1,3 @@
1
- import { setToArray, _Set } from '../../utils/lang/sets';
2
1
  import { DEFAULT_CACHE_SIZE } from '../inRedis/constants';
3
2
  /**
4
3
  * Converts `uniqueKeys` data from cache into request payload for SS.
@@ -8,7 +7,7 @@ export function fromUniqueKeysCollector(uniqueKeys) {
8
7
  var featureNames = Object.keys(uniqueKeys);
9
8
  for (var i = 0; i < featureNames.length; i++) {
10
9
  var featureName = featureNames[i];
11
- var userKeys = setToArray(uniqueKeys[featureName]);
10
+ var userKeys = Array.from(uniqueKeys[featureName]);
12
11
  var uniqueKeysPayload = {
13
12
  f: featureName,
14
13
  ks: userKeys
@@ -32,7 +31,7 @@ var UniqueKeysCacheInMemory = /** @class */ (function () {
32
31
  */
33
32
  UniqueKeysCacheInMemory.prototype.track = function (userKey, featureName) {
34
33
  if (!this.uniqueKeysTracker[featureName])
35
- this.uniqueKeysTracker[featureName] = new _Set();
34
+ this.uniqueKeysTracker[featureName] = new Set();
36
35
  var tracker = this.uniqueKeysTracker[featureName];
37
36
  if (!tracker.has(userKey)) {
38
37
  tracker.add(userKey);
@@ -1,4 +1,3 @@
1
- import { setToArray, _Set } from '../../utils/lang/sets';
2
1
  import { DEFAULT_CACHE_SIZE } from '../inRedis/constants';
3
2
  var UniqueKeysCacheInMemoryCS = /** @class */ (function () {
4
3
  /**
@@ -20,7 +19,7 @@ var UniqueKeysCacheInMemoryCS = /** @class */ (function () {
20
19
  */
21
20
  UniqueKeysCacheInMemoryCS.prototype.track = function (userKey, featureName) {
22
21
  if (!this.uniqueKeysTracker[userKey])
23
- this.uniqueKeysTracker[userKey] = new _Set();
22
+ this.uniqueKeysTracker[userKey] = new Set();
24
23
  var tracker = this.uniqueKeysTracker[userKey];
25
24
  if (!tracker.has(featureName)) {
26
25
  tracker.add(featureName);
@@ -59,7 +58,7 @@ var UniqueKeysCacheInMemoryCS = /** @class */ (function () {
59
58
  var userKeys = Object.keys(uniqueKeys);
60
59
  for (var k = 0; k < userKeys.length; k++) {
61
60
  var userKey = userKeys[k];
62
- var featureNames = setToArray(uniqueKeys[userKey]);
61
+ var featureNames = Array.from(uniqueKeys[userKey]);
63
62
  var uniqueKeysPayload = {
64
63
  k: userKey,
65
64
  fs: featureNames
@@ -1,7 +1,6 @@
1
1
  import { __extends } from "tslib";
2
2
  import ioredis from 'ioredis';
3
3
  import { merge, isString } from '../../utils/lang';
4
- import { _Set, setToArray } from '../../utils/lang/sets';
5
4
  import { thenable } from '../../utils/promise/thenable';
6
5
  import { timeout } from '../../utils/promise/timeout';
7
6
  var LOG_PREFIX = 'storage:redis-adapter: ';
@@ -33,7 +32,7 @@ var RedisAdapter = /** @class */ (function (_super) {
33
32
  _this.log = log;
34
33
  _this._options = options;
35
34
  _this._notReadyCommandsQueue = [];
36
- _this._runningCommands = new _Set();
35
+ _this._runningCommands = new Set();
37
36
  _this._listenToEvents();
38
37
  _this._setTimeoutWrappers();
39
38
  _this._setDisconnectWrapper();
@@ -126,7 +125,7 @@ var RedisAdapter = /** @class */ (function (_super) {
126
125
  setTimeout(function deferredDisconnect() {
127
126
  if (instance._runningCommands.size > 0) {
128
127
  instance.log.info(LOG_PREFIX + ("Attempting to disconnect but there are " + instance._runningCommands.size + " commands still waiting for resolution. Defering disconnection until those finish."));
129
- Promise.all(setToArray(instance._runningCommands))
128
+ Promise.all(Array.from(instance._runningCommands))
130
129
  .then(function () {
131
130
  instance.log.debug(LOG_PREFIX + 'Pending commands finished successfully, disconnecting.');
132
131
  originalMethod.apply(instance, params);
@@ -2,7 +2,7 @@ import { __extends, __spreadArray } from "tslib";
2
2
  import { isFiniteNumber, isNaNNumber } from '../../utils/lang';
3
3
  import { LOG_PREFIX } from './constants';
4
4
  import { AbstractSplitsCacheAsync } from '../AbstractSplitsCacheAsync';
5
- import { _Set, returnDifference } from '../../utils/lang/sets';
5
+ import { returnDifference } from '../../utils/lang/sets';
6
6
  /**
7
7
  * Discard errors for an answer of multiple operations.
8
8
  */
@@ -197,7 +197,7 @@ var SplitsCacheInRedis = /** @class */ (function (_super) {
197
197
  return value;
198
198
  _this.log.error(LOG_PREFIX + ("Could not read result from get members of flag set " + flagSets[index] + " due to an error: " + e));
199
199
  }); })
200
- .then(function (namesByFlagSets) { return namesByFlagSets.map(function (namesByFlagSet) { return new _Set(namesByFlagSet); }); });
200
+ .then(function (namesByFlagSets) { return namesByFlagSets.map(function (namesByFlagSet) { return new Set(namesByFlagSet); }); });
201
201
  };
202
202
  /**
203
203
  * Check traffic type existence.
@@ -2,7 +2,6 @@ import { findLatencyIndex } from '../findLatencyIndex';
2
2
  import { getTelemetryConfigStats } from '../../sync/submitters/telemetrySubmitter';
3
3
  import { CONSUMER_MODE, STORAGE_REDIS } from '../../utils/constants';
4
4
  import { isNaNNumber, isString } from '../../utils/lang';
5
- import { _Map } from '../../utils/lang/maps';
6
5
  import { MAX_LATENCY_BUCKET_COUNT, newBuckets } from '../inMemory/TelemetryCacheInMemory';
7
6
  import { parseLatencyField, parseExceptionField, parseMetadata } from '../utils';
8
7
  var TelemetryCacheInRedis = /** @class */ (function () {
@@ -39,7 +38,7 @@ var TelemetryCacheInRedis = /** @class */ (function () {
39
38
  TelemetryCacheInRedis.prototype.popLatencies = function () {
40
39
  var _this = this;
41
40
  return this.redis.hgetall(this.keys.latencyPrefix).then(function (latencies) {
42
- var result = new _Map();
41
+ var result = new Map();
43
42
  Object.keys(latencies).forEach(function (field) {
44
43
  var parsedField = parseLatencyField(field);
45
44
  if (isString(parsedField)) {
@@ -71,7 +70,7 @@ var TelemetryCacheInRedis = /** @class */ (function () {
71
70
  TelemetryCacheInRedis.prototype.popExceptions = function () {
72
71
  var _this = this;
73
72
  return this.redis.hgetall(this.keys.exceptionPrefix).then(function (exceptions) {
74
- var result = new _Map();
73
+ var result = new Map();
75
74
  Object.keys(exceptions).forEach(function (field) {
76
75
  var parsedField = parseExceptionField(field);
77
76
  if (isString(parsedField)) {
@@ -98,7 +97,7 @@ var TelemetryCacheInRedis = /** @class */ (function () {
98
97
  TelemetryCacheInRedis.prototype.popConfigs = function () {
99
98
  var _this = this;
100
99
  return this.redis.hgetall(this.keys.initPrefix).then(function (configs) {
101
- var result = new _Map();
100
+ var result = new Map();
102
101
  Object.keys(configs).forEach(function (field) {
103
102
  var parsedField = parseMetadata(field);
104
103
  if (isString(parsedField)) {
@@ -1,6 +1,5 @@
1
1
  import { __extends } from "tslib";
2
2
  import { UniqueKeysCacheInMemory } from '../inMemory/UniqueKeysCacheInMemory';
3
- import { setToArray } from '../../utils/lang/sets';
4
3
  import { DEFAULT_CACHE_SIZE, REFRESH_RATE, TTL_REFRESH } from './constants';
5
4
  import { LOG_PREFIX } from './constants';
6
5
  var UniqueKeysCacheInRedis = /** @class */ (function (_super) {
@@ -22,7 +21,7 @@ var UniqueKeysCacheInRedis = /** @class */ (function (_super) {
22
21
  if (!featureNames.length)
23
22
  return Promise.resolve(false);
24
23
  var uniqueKeysArray = featureNames.map(function (featureName) {
25
- var featureKeys = setToArray(_this.uniqueKeysTracker[featureName]);
24
+ var featureKeys = Array.from(_this.uniqueKeysTracker[featureName]);
26
25
  var uniqueKeysPayload = {
27
26
  f: featureName,
28
27
  ks: featureKeys
@@ -2,7 +2,7 @@ import { __extends, __spreadArray } from "tslib";
2
2
  import { isFiniteNumber, isNaNNumber } from '../../utils/lang';
3
3
  import { LOG_PREFIX } from './constants';
4
4
  import { AbstractSplitsCacheAsync } from '../AbstractSplitsCacheAsync';
5
- import { _Set, returnDifference } from '../../utils/lang/sets';
5
+ import { returnDifference } from '../../utils/lang/sets';
6
6
  /**
7
7
  * ISplitsCacheAsync implementation for pluggable storages.
8
8
  */
@@ -167,7 +167,7 @@ var SplitsCachePluggable = /** @class */ (function (_super) {
167
167
  return Promise.all(flagSets.map(function (flagSet) {
168
168
  var flagSetKey = _this.keys.buildFlagSetKey(flagSet);
169
169
  return _this.wrapper.getItems(flagSetKey).catch(function () { return []; });
170
- })).then(function (namesByFlagSets) { return namesByFlagSets.map(function (namesByFlagSet) { return new _Set(namesByFlagSet); }); });
170
+ })).then(function (namesByFlagSets) { return namesByFlagSets.map(function (namesByFlagSet) { return new Set(namesByFlagSet); }); });
171
171
  };
172
172
  /**
173
173
  * Check traffic type existence.
@@ -2,7 +2,6 @@ import { findLatencyIndex } from '../findLatencyIndex';
2
2
  import { getTelemetryConfigStats } from '../../sync/submitters/telemetrySubmitter';
3
3
  import { CONSUMER_MODE, STORAGE_PLUGGABLE } from '../../utils/constants';
4
4
  import { isString, isNaNNumber } from '../../utils/lang';
5
- import { _Map } from '../../utils/lang/maps';
6
5
  import { MAX_LATENCY_BUCKET_COUNT, newBuckets } from '../inMemory/TelemetryCacheInMemory';
7
6
  import { parseLatencyField, parseExceptionField, parseMetadata } from '../utils';
8
7
  var TelemetryCachePluggable = /** @class */ (function () {
@@ -38,7 +37,7 @@ var TelemetryCachePluggable = /** @class */ (function () {
38
37
  return this.wrapper.getKeysByPrefix(this.keys.latencyPrefix).then(function (latencyKeys) {
39
38
  return latencyKeys.length ?
40
39
  _this.wrapper.getMany(latencyKeys).then(function (latencies) {
41
- var result = new _Map();
40
+ var result = new Map();
42
41
  for (var i = 0; i < latencyKeys.length; i++) {
43
42
  var field = latencyKeys[i].split('::')[1];
44
43
  var parsedField = parseLatencyField(field);
@@ -65,7 +64,7 @@ var TelemetryCachePluggable = /** @class */ (function () {
65
64
  return Promise.all(latencyKeys.map(function (latencyKey) { return _this.wrapper.del(latencyKey); })).then(function () { return result; });
66
65
  }) :
67
66
  // If latencyKeys is empty, return an empty map.
68
- new _Map();
67
+ new Map();
69
68
  });
70
69
  };
71
70
  /**
@@ -77,7 +76,7 @@ var TelemetryCachePluggable = /** @class */ (function () {
77
76
  return this.wrapper.getKeysByPrefix(this.keys.exceptionPrefix).then(function (exceptionKeys) {
78
77
  return exceptionKeys.length ?
79
78
  _this.wrapper.getMany(exceptionKeys).then(function (exceptions) {
80
- var result = new _Map();
79
+ var result = new Map();
81
80
  for (var i = 0; i < exceptionKeys.length; i++) {
82
81
  var field = exceptionKeys[i].split('::')[1];
83
82
  var parsedField = parseExceptionField(field);
@@ -99,7 +98,7 @@ var TelemetryCachePluggable = /** @class */ (function () {
99
98
  return Promise.all(exceptionKeys.map(function (exceptionKey) { return _this.wrapper.del(exceptionKey); })).then(function () { return result; });
100
99
  }) :
101
100
  // If exceptionKeys is empty, return an empty map.
102
- new _Map();
101
+ new Map();
103
102
  });
104
103
  };
105
104
  /**
@@ -111,7 +110,7 @@ var TelemetryCachePluggable = /** @class */ (function () {
111
110
  return this.wrapper.getKeysByPrefix(this.keys.initPrefix).then(function (configKeys) {
112
111
  return configKeys.length ?
113
112
  _this.wrapper.getMany(configKeys).then(function (configs) {
114
- var result = new _Map();
113
+ var result = new Map();
115
114
  for (var i = 0; i < configKeys.length; i++) {
116
115
  var field = configKeys[i].split('::')[1];
117
116
  var parsedField = parseMetadata(field);
@@ -131,7 +130,7 @@ var TelemetryCachePluggable = /** @class */ (function () {
131
130
  return Promise.all(configKeys.map(function (configKey) { return _this.wrapper.del(configKey); })).then(function () { return result; });
132
131
  }) :
133
132
  // If configKeys is empty, return an empty map.
134
- new _Map();
133
+ new Map();
135
134
  });
136
135
  };
137
136
  return TelemetryCachePluggable;
@@ -1,6 +1,5 @@
1
1
  import { __extends } from "tslib";
2
2
  import { UniqueKeysCacheInMemory } from '../inMemory/UniqueKeysCacheInMemory';
3
- import { setToArray } from '../../utils/lang/sets';
4
3
  import { DEFAULT_CACHE_SIZE, REFRESH_RATE } from '../inRedis/constants';
5
4
  import { LOG_PREFIX } from './constants';
6
5
  var UniqueKeysCachePluggable = /** @class */ (function (_super) {
@@ -22,7 +21,7 @@ var UniqueKeysCachePluggable = /** @class */ (function (_super) {
22
21
  if (!featureNames.length)
23
22
  return Promise.resolve(false);
24
23
  var uniqueKeysArray = featureNames.map(function (featureName) {
25
- var featureKeys = setToArray(_this.uniqueKeysTracker[featureName]);
24
+ var featureKeys = Array.from(_this.uniqueKeysTracker[featureName]);
26
25
  var uniqueKeysPayload = {
27
26
  f: featureName,
28
27
  ks: featureKeys
@@ -1,5 +1,4 @@
1
1
  import { startsWith, toNumber } from '../../utils/lang';
2
- import { setToArray, _Set } from '../../utils/lang/sets';
3
2
  /**
4
3
  * Creates a IPluggableStorageWrapper implementation that stores items in memory.
5
4
  * The `_cache` property is the object were items are stored.
@@ -87,15 +86,15 @@ export function inMemoryWrapperFactory(connDelay) {
87
86
  var set = _cache[key];
88
87
  if (!set)
89
88
  return Promise.resolve(false);
90
- if (set instanceof _Set)
89
+ if (set instanceof Set)
91
90
  return Promise.resolve(set.has(item));
92
91
  return Promise.reject('key is not a set');
93
92
  },
94
93
  addItems: function (key, items) {
95
94
  if (!(key in _cache))
96
- _cache[key] = new _Set();
95
+ _cache[key] = new Set();
97
96
  var set = _cache[key];
98
- if (set instanceof _Set) {
97
+ if (set instanceof Set) {
99
98
  items.forEach(function (item) { return set.add(item); });
100
99
  return Promise.resolve();
101
100
  }
@@ -103,9 +102,9 @@ export function inMemoryWrapperFactory(connDelay) {
103
102
  },
104
103
  removeItems: function (key, items) {
105
104
  if (!(key in _cache))
106
- _cache[key] = new _Set();
105
+ _cache[key] = new Set();
107
106
  var set = _cache[key];
108
- if (set instanceof _Set) {
107
+ if (set instanceof Set) {
109
108
  items.forEach(function (item) { return set.delete(item); });
110
109
  return Promise.resolve();
111
110
  }
@@ -115,8 +114,8 @@ export function inMemoryWrapperFactory(connDelay) {
115
114
  var set = _cache[key];
116
115
  if (!set)
117
116
  return Promise.resolve([]);
118
- if (set instanceof _Set)
119
- return Promise.resolve(setToArray(set));
117
+ if (set instanceof Set)
118
+ return Promise.resolve(Array.from(set));
120
119
  return Promise.reject('key is not a set');
121
120
  },
122
121
  // always connects and disconnects
@@ -1,7 +1,7 @@
1
1
  import { forOwn } from '../../../utils/lang';
2
2
  import { syncTaskFactory } from '../../syncTask';
3
3
  import { CONTROL } from '../../../utils/constants';
4
- import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED } from '../../../readiness/constants';
4
+ import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants';
5
5
  import { SYNC_OFFLINE_DATA, ERROR_SYNC_OFFLINE_LOADING } from '../../../logger/constants';
6
6
  /**
7
7
  * Offline equivalent of `splitChangesUpdaterFactory`
@@ -43,8 +43,13 @@ export function fromObjectUpdaterFactory(splitsParser, storage, readiness, setti
43
43
  readiness.splits.emit(SDK_SPLITS_ARRIVED);
44
44
  if (startingUp) {
45
45
  startingUp = false;
46
- // Emits SDK_READY
47
- readiness.segments.emit(SDK_SEGMENTS_ARRIVED);
46
+ Promise.resolve(splitsCache.checkCache()).then(function (cacheReady) {
47
+ // Emits SDK_READY_FROM_CACHE
48
+ if (cacheReady)
49
+ readiness.splits.emit(SDK_SPLITS_CACHE_LOADED);
50
+ // Emits SDK_READY
51
+ readiness.segments.emit(SDK_SEGMENTS_ARRIVED);
52
+ });
48
53
  }
49
54
  return true;
50
55
  });
@@ -1,6 +1,5 @@
1
1
  import { splitsSyncTaskFactory } from './syncTasks/splitsSyncTask';
2
2
  import { segmentsSyncTaskFactory } from './syncTasks/segmentsSyncTask';
3
- import { thenable } from '../../utils/promise/thenable';
4
3
  import { POLLING_START, POLLING_STOP, LOG_PREFIX_SYNC_POLLING } from '../../logger/constants';
5
4
  /**
6
5
  * Expose start / stop mechanism for pulling data from services.
@@ -19,9 +18,10 @@ export function pollingManagerSSFactory(params) {
19
18
  log.debug(LOG_PREFIX_SYNC_POLLING + ("Splits will be refreshed each " + settings.scheduler.featuresRefreshRate + " millis"));
20
19
  log.debug(LOG_PREFIX_SYNC_POLLING + ("Segments will be refreshed each " + settings.scheduler.segmentsRefreshRate + " millis"));
21
20
  var startingUp = splitsSyncTask.start();
22
- if (thenable(startingUp)) {
21
+ if (startingUp) {
23
22
  startingUp.then(function () {
24
- segmentsSyncTask.start();
23
+ if (splitsSyncTask.isRunning())
24
+ segmentsSyncTask.start();
25
25
  });
26
26
  }
27
27
  },
@@ -1,6 +1,5 @@
1
- import { _Set, setToArray } from '../../../utils/lang/sets';
2
1
  import { timeout } from '../../../utils/promise/timeout';
3
- import { SDK_SPLITS_ARRIVED } from '../../../readiness/constants';
2
+ import { SDK_SPLITS_ARRIVED, SDK_SPLITS_CACHE_LOADED } from '../../../readiness/constants';
4
3
  import { SYNC_SPLITS_FETCH, SYNC_SPLITS_NEW, SYNC_SPLITS_REMOVED, SYNC_SPLITS_SEGMENTS, SYNC_SPLITS_FETCH_FAILS, SYNC_SPLITS_FETCH_RETRY } from '../../../logger/constants';
5
4
  import { startsWith } from '../../../utils/lang';
6
5
  import { IN_SEGMENT } from '../../../utils/constants';
@@ -20,7 +19,7 @@ function checkAllSegmentsExist(segments) {
20
19
  */
21
20
  export function parseSegments(_a) {
22
21
  var conditions = _a.conditions;
23
- var segments = new _Set();
22
+ var segments = new Set();
24
23
  for (var i = 0; i < conditions.length; i++) {
25
24
  var matchers = conditions[i].matcherGroup.matchers;
26
25
  matchers.forEach(function (matcher) {
@@ -55,7 +54,7 @@ function matchFilters(featureFlag, filters) {
55
54
  * Exported for testing purposes.
56
55
  */
57
56
  export function computeSplitsMutation(entries, filters) {
58
- var segments = new _Set();
57
+ var segments = new Set();
59
58
  var computed = entries.reduce(function (accum, split) {
60
59
  if (split.status === 'ACTIVE' && matchFilters(split, filters)) {
61
60
  accum.added.push([split.name, split]);
@@ -68,7 +67,7 @@ export function computeSplitsMutation(entries, filters) {
68
67
  }
69
68
  return accum;
70
69
  }, { added: [], removed: [], segments: [] });
71
- computed.segments = setToArray(segments);
70
+ computed.segments = Array.from(segments);
72
71
  return computed;
73
72
  }
74
73
  /**
@@ -121,7 +120,7 @@ export function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, seg
121
120
  function _splitChangesUpdater(since, retry) {
122
121
  if (retry === void 0) { retry = 0; }
123
122
  log.debug(SYNC_SPLITS_FETCH, [since]);
124
- return Promise.resolve(splitUpdateNotification ?
123
+ var fetcherPromise = Promise.resolve(splitUpdateNotification ?
125
124
  { splits: [splitUpdateNotification.payload], till: splitUpdateNotification.changeNumber } :
126
125
  splitChangesFetcher(since, noCache, till, _promiseDecorator))
127
126
  .then(function (splitChanges) {
@@ -165,6 +164,15 @@ export function splitChangesUpdaterFactory(log, splitChangesFetcher, splits, seg
165
164
  }
166
165
  return false;
167
166
  });
167
+ // After triggering the requests, if we have cached splits information let's notify that to emit SDK_READY_FROM_CACHE.
168
+ // Wrapping in a promise since checkCache can be async.
169
+ if (splitsEventEmitter && startingUp) {
170
+ Promise.resolve(splits.checkCache()).then(function (isCacheReady) {
171
+ if (isCacheReady)
172
+ splitsEventEmitter.emit(SDK_SPLITS_CACHE_LOADED);
173
+ });
174
+ }
175
+ return fetcherPromise;
168
176
  }
169
177
  var sincePromise = Promise.resolve(splits.getChangeNumber()); // `getChangeNumber` never rejects or throws error
170
178
  return sincePromise.then(_splitChangesUpdater);
@@ -8,7 +8,6 @@ function Uint8ArrayToString(myUint8Arr) {
8
8
  }
9
9
  function StringToUint8Array(myString) {
10
10
  var charCodes = myString.split('').map(function (e) { return e.charCodeAt(0); });
11
- // eslint-disable-next-line compat/compat
12
11
  return new Uint8Array(charCodes);
13
12
  }
14
13
  /**
@@ -12,7 +12,6 @@ import { MEMBERSHIPS_MS_UPDATE, MEMBERSHIPS_LS_UPDATE, PUSH_NONRETRYABLE_ERROR,
12
12
  import { STREAMING_FALLBACK, STREAMING_REFRESH_TOKEN, STREAMING_CONNECTING, STREAMING_DISABLED, ERROR_STREAMING_AUTH, STREAMING_DISCONNECTING, STREAMING_RECONNECT, STREAMING_PARSING_MEMBERSHIPS_UPDATE, STREAMING_PARSING_SPLIT_UPDATE } from '../../logger/constants';
13
13
  import { UpdateStrategy } from './SSEHandler/types';
14
14
  import { getDelay, isInBitmap, parseBitmap, parseFFUpdatePayload, parseKeyList } from './parseUtils';
15
- import { _Set } from '../../utils/lang/sets';
16
15
  import { hash64 } from '../../utils/murmur3/murmur3_64';
17
16
  import { TOKEN_REFRESH, AUTH_REJECTION } from '../../utils/constants';
18
17
  /**
@@ -218,8 +217,8 @@ export function pushManagerFactory(params, pollingManager) {
218
217
  var keyList = void 0, added_1, removed_1;
219
218
  try {
220
219
  keyList = parseKeyList(parsedData.d, parsedData.c);
221
- added_1 = new _Set(keyList.a);
222
- removed_1 = new _Set(keyList.r);
220
+ added_1 = new Set(keyList.a);
221
+ removed_1 = new Set(keyList.r);
223
222
  }
224
223
  catch (e) {
225
224
  log.warn(STREAMING_PARSING_MEMBERSHIPS_UPDATE, ['KeyList', e]);
@@ -1,9 +1,8 @@
1
- import { _Map } from '../lang/maps';
2
1
  import { LinkedList, Node } from './LinkedList';
3
2
  var LRUCache = /** @class */ (function () {
4
3
  function LRUCache(maxSize) {
5
4
  this.maxLen = maxSize || 1;
6
- this.items = new _Map();
5
+ this.items = new Map();
7
6
  this.lru = new LinkedList();
8
7
  }
9
8
  LRUCache.prototype.get = function (key) {