@splitsoftware/splitio-commons 1.15.1-rc.3 → 1.16.1-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 (141) hide show
  1. package/CHANGES.txt +5 -3
  2. package/cjs/evaluator/matchers/index.js +3 -1
  3. package/cjs/evaluator/matchers/large_segment.js +16 -0
  4. package/cjs/evaluator/matchers/matcherTypes.js +1 -0
  5. package/cjs/evaluator/matchersTransform/index.js +1 -1
  6. package/cjs/logger/constants.js +4 -4
  7. package/cjs/logger/messages/info.js +0 -1
  8. package/cjs/readiness/readinessManager.js +11 -6
  9. package/cjs/readiness/sdkReadinessManager.js +5 -6
  10. package/cjs/sdkClient/sdkClientMethodCS.js +3 -4
  11. package/cjs/sdkClient/sdkClientMethodCSWithTT.js +4 -5
  12. package/cjs/sdkFactory/index.js +1 -1
  13. package/cjs/services/splitApi.js +4 -0
  14. package/cjs/storages/AbstractSplitsCacheAsync.js +2 -2
  15. package/cjs/storages/AbstractSplitsCacheSync.js +5 -5
  16. package/cjs/storages/KeyBuilder.js +3 -0
  17. package/cjs/storages/KeyBuilderCS.js +17 -5
  18. package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +16 -4
  19. package/cjs/storages/inLocalStorage/index.js +6 -2
  20. package/cjs/storages/inMemory/InMemoryStorageCS.js +5 -0
  21. package/cjs/storages/inMemory/SplitsCacheInMemory.js +20 -11
  22. package/cjs/storages/inMemory/TelemetryCacheInMemory.js +7 -10
  23. package/cjs/sync/polling/pollingManagerCS.js +54 -30
  24. package/cjs/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  25. package/cjs/sync/polling/updaters/mySegmentsUpdater.js +13 -8
  26. package/cjs/sync/polling/updaters/splitChangesUpdater.js +2 -1
  27. package/cjs/sync/streaming/SSEHandler/index.js +1 -0
  28. package/cjs/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +6 -5
  29. package/cjs/sync/streaming/constants.js +2 -1
  30. package/cjs/sync/streaming/pushManager.js +96 -64
  31. package/cjs/sync/submitters/telemetrySubmitter.js +2 -0
  32. package/cjs/sync/syncManagerOnline.js +24 -14
  33. package/cjs/utils/constants/index.js +5 -1
  34. package/cjs/utils/settingsValidation/index.js +9 -4
  35. package/esm/evaluator/matchers/index.js +3 -1
  36. package/esm/evaluator/matchers/large_segment.js +12 -0
  37. package/esm/evaluator/matchers/matcherTypes.js +1 -0
  38. package/esm/evaluator/matchersTransform/index.js +1 -1
  39. package/esm/logger/constants.js +1 -1
  40. package/esm/logger/messages/info.js +0 -1
  41. package/esm/readiness/readinessManager.js +11 -6
  42. package/esm/readiness/sdkReadinessManager.js +5 -6
  43. package/esm/sdkClient/sdkClientMethodCS.js +4 -5
  44. package/esm/sdkClient/sdkClientMethodCSWithTT.js +5 -6
  45. package/esm/sdkFactory/index.js +1 -1
  46. package/esm/services/splitApi.js +5 -1
  47. package/esm/storages/AbstractSplitsCacheAsync.js +2 -2
  48. package/esm/storages/AbstractSplitsCacheSync.js +3 -3
  49. package/esm/storages/KeyBuilder.js +3 -0
  50. package/esm/storages/KeyBuilderCS.js +15 -4
  51. package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +17 -5
  52. package/esm/storages/inLocalStorage/index.js +7 -3
  53. package/esm/storages/inMemory/InMemoryStorageCS.js +5 -0
  54. package/esm/storages/inMemory/SplitsCacheInMemory.js +21 -12
  55. package/esm/storages/inMemory/TelemetryCacheInMemory.js +7 -10
  56. package/esm/sync/polling/pollingManagerCS.js +55 -31
  57. package/esm/sync/polling/syncTasks/mySegmentsSyncTask.js +2 -2
  58. package/esm/sync/polling/updaters/mySegmentsUpdater.js +11 -6
  59. package/esm/sync/polling/updaters/splitChangesUpdater.js +2 -1
  60. package/esm/sync/streaming/SSEHandler/index.js +2 -1
  61. package/esm/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.js +6 -5
  62. package/esm/sync/streaming/constants.js +1 -0
  63. package/esm/sync/streaming/pushManager.js +96 -65
  64. package/esm/sync/submitters/telemetrySubmitter.js +2 -0
  65. package/esm/sync/syncManagerOnline.js +25 -15
  66. package/esm/utils/constants/index.js +4 -0
  67. package/esm/utils/settingsValidation/index.js +10 -5
  68. package/package.json +1 -1
  69. package/src/dtos/types.ts +7 -1
  70. package/src/evaluator/matchers/index.ts +2 -0
  71. package/src/evaluator/matchers/large_segment.ts +18 -0
  72. package/src/evaluator/matchers/matcherTypes.ts +1 -0
  73. package/src/evaluator/matchersTransform/index.ts +1 -1
  74. package/src/logger/constants.ts +1 -1
  75. package/src/logger/messages/info.ts +0 -1
  76. package/src/readiness/readinessManager.ts +11 -5
  77. package/src/readiness/sdkReadinessManager.ts +7 -7
  78. package/src/readiness/types.ts +3 -2
  79. package/src/sdkClient/sdkClientMethodCS.ts +4 -6
  80. package/src/sdkClient/sdkClientMethodCSWithTT.ts +5 -7
  81. package/src/sdkFactory/index.ts +1 -1
  82. package/src/services/splitApi.ts +6 -1
  83. package/src/services/types.ts +1 -0
  84. package/src/storages/AbstractSplitsCacheAsync.ts +2 -2
  85. package/src/storages/AbstractSplitsCacheSync.ts +4 -4
  86. package/src/storages/KeyBuilder.ts +3 -0
  87. package/src/storages/KeyBuilderCS.ts +25 -5
  88. package/src/storages/inLocalStorage/MySegmentsCacheInLocal.ts +3 -3
  89. package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +20 -5
  90. package/src/storages/inLocalStorage/index.ts +8 -4
  91. package/src/storages/inMemory/InMemoryStorageCS.ts +5 -0
  92. package/src/storages/inMemory/SplitsCacheInMemory.ts +15 -10
  93. package/src/storages/inMemory/TelemetryCacheInMemory.ts +7 -11
  94. package/src/storages/types.ts +6 -4
  95. package/src/sync/polling/pollingManagerCS.ts +62 -27
  96. package/src/sync/polling/syncTasks/mySegmentsSyncTask.ts +8 -9
  97. package/src/sync/polling/types.ts +4 -3
  98. package/src/sync/polling/updaters/mySegmentsUpdater.ts +13 -10
  99. package/src/sync/polling/updaters/splitChangesUpdater.ts +4 -3
  100. package/src/sync/streaming/SSEHandler/index.ts +2 -1
  101. package/src/sync/streaming/SSEHandler/types.ts +14 -2
  102. package/src/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.ts +7 -5
  103. package/src/sync/streaming/constants.ts +1 -0
  104. package/src/sync/streaming/pushManager.ts +101 -63
  105. package/src/sync/streaming/types.ts +5 -3
  106. package/src/sync/submitters/telemetrySubmitter.ts +2 -0
  107. package/src/sync/submitters/types.ts +10 -4
  108. package/src/sync/syncManagerOnline.ts +19 -11
  109. package/src/types.ts +26 -1
  110. package/src/utils/constants/index.ts +5 -0
  111. package/src/utils/settingsValidation/index.ts +11 -6
  112. package/src/utils/settingsValidation/types.ts +1 -1
  113. package/types/dtos/types.d.ts +5 -1
  114. package/types/evaluator/matchers/large_segment.d.ts +5 -0
  115. package/types/logger/constants.d.ts +1 -1
  116. package/types/readiness/readinessManager.d.ts +2 -2
  117. package/types/readiness/sdkReadinessManager.d.ts +2 -3
  118. package/types/readiness/types.d.ts +3 -2
  119. package/types/services/types.d.ts +1 -0
  120. package/types/storages/AbstractSplitsCacheAsync.d.ts +1 -1
  121. package/types/storages/AbstractSplitsCacheSync.d.ts +3 -3
  122. package/types/storages/KeyBuilder.d.ts +1 -0
  123. package/types/storages/KeyBuilderCS.d.ts +7 -2
  124. package/types/storages/inLocalStorage/MySegmentsCacheInLocal.d.ts +2 -2
  125. package/types/storages/inLocalStorage/SplitsCacheInLocal.d.ts +1 -1
  126. package/types/storages/inMemory/SplitsCacheInMemory.d.ts +3 -2
  127. package/types/storages/inMemory/TelemetryCacheInMemory.d.ts +4 -6
  128. package/types/storages/types.d.ts +4 -3
  129. package/types/sync/polling/syncTasks/mySegmentsSyncTask.d.ts +2 -3
  130. package/types/sync/polling/types.d.ts +10 -3
  131. package/types/sync/polling/updaters/mySegmentsUpdater.d.ts +4 -4
  132. package/types/sync/streaming/SSEHandler/types.d.ts +13 -2
  133. package/types/sync/streaming/UpdateWorkers/MySegmentsUpdateWorker.d.ts +2 -1
  134. package/types/sync/streaming/constants.d.ts +1 -0
  135. package/types/sync/streaming/pushManager.d.ts +2 -0
  136. package/types/sync/streaming/types.d.ts +5 -4
  137. package/types/sync/submitters/types.d.ts +9 -3
  138. package/types/types.d.ts +25 -0
  139. package/types/utils/constants/index.d.ts +3 -0
  140. package/types/utils/settingsValidation/index.d.ts +2 -0
  141. package/types/utils/settingsValidation/types.d.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MY_SEGMENT = 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.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 = exports.MY_LARGE_SEGMENT = void 0;
5
5
  // Special treatments
6
6
  exports.CONTROL = 'control';
7
7
  exports.CONTROL_WITH_CONFIG = {
@@ -65,6 +65,7 @@ exports.TELEMETRY = 'te';
65
65
  exports.TOKEN = 'to';
66
66
  exports.SEGMENT = 'se';
67
67
  exports.MY_SEGMENT = 'ms';
68
+ exports.MY_LARGE_SEGMENT = 'mls';
68
69
  exports.TREATMENT = 't';
69
70
  exports.TREATMENTS = 'ts';
70
71
  exports.TREATMENT_WITH_CONFIG = 'tc';
@@ -91,3 +92,6 @@ exports.DISABLED = 0;
91
92
  exports.ENABLED = 1;
92
93
  exports.PAUSED = 2;
93
94
  exports.FLAG_SPEC_VERSION = '1.1';
95
+ // Matcher types
96
+ exports.IN_SEGMENT = 'IN_SEGMENT';
97
+ exports.IN_LARGE_SEGMENT = 'IN_LARGE_SEGMENT';
@@ -30,6 +30,8 @@ exports.base = {
30
30
  featuresRefreshRate: 60,
31
31
  // fetch segments updates each 60 sec
32
32
  segmentsRefreshRate: 60,
33
+ // fetch large segments updates each 60 sec
34
+ largeSegmentsRefreshRate: 60,
33
35
  // publish telemetry stats each 3600 secs (1 hour)
34
36
  telemetryRefreshRate: 3600,
35
37
  // publish evaluations each 300 sec (default value for OPTIMIZED impressions mode)
@@ -75,7 +77,8 @@ exports.base = {
75
77
  impressionsMode: constants_1.OPTIMIZED,
76
78
  localhostMode: undefined,
77
79
  enabled: true,
78
- flagSpecVersion: constants_1.FLAG_SPEC_VERSION
80
+ flagSpecVersion: constants_1.FLAG_SPEC_VERSION,
81
+ largeSegmentsEnabled: false
79
82
  },
80
83
  // Logger
81
84
  log: undefined
@@ -114,6 +117,7 @@ function settingsValidation(config, validationParams) {
114
117
  var scheduler = withDefaults.scheduler, startup = withDefaults.startup;
115
118
  scheduler.featuresRefreshRate = fromSecondsToMillis(scheduler.featuresRefreshRate);
116
119
  scheduler.segmentsRefreshRate = fromSecondsToMillis(scheduler.segmentsRefreshRate);
120
+ scheduler.largeSegmentsRefreshRate = fromSecondsToMillis(scheduler.largeSegmentsRefreshRate);
117
121
  scheduler.offlineRefreshRate = fromSecondsToMillis(scheduler.offlineRefreshRate);
118
122
  scheduler.eventsPushRate = fromSecondsToMillis(scheduler.eventsPushRate);
119
123
  scheduler.telemetryRefreshRate = fromSecondsToMillis(validateMinValue('telemetryRefreshRate', scheduler.telemetryRefreshRate, 60));
@@ -146,12 +150,12 @@ function settingsValidation(config, validationParams) {
146
150
  // Keeping same behaviour than JS SDK: if settings key or TT are invalid,
147
151
  // `false` value is used as bound key/TT of the default client, which leads to some issues.
148
152
  // @ts-ignore, @TODO handle invalid keys as a non-recoverable error?
149
- withDefaults.core.key = (0, key_1.validateKey)(log, maybeKey, 'Client instantiation');
153
+ withDefaults.core.key = (0, key_1.validateKey)(log, maybeKey, constants_2.LOG_PREFIX_CLIENT_INSTANTIATION);
150
154
  }
151
155
  if (validationParams.acceptTT) {
152
156
  var maybeTT = withDefaults.core.trafficType;
153
157
  if (maybeTT !== undefined) { // @ts-ignore
154
- withDefaults.core.trafficType = (0, trafficType_1.validateTrafficType)(log, maybeTT, 'Client instantiation');
158
+ withDefaults.core.trafficType = (0, trafficType_1.validateTrafficType)(log, maybeTT, constants_2.LOG_PREFIX_CLIENT_INSTANTIATION);
155
159
  }
156
160
  }
157
161
  }
@@ -186,10 +190,11 @@ function settingsValidation(config, validationParams) {
186
190
  var splitFiltersValidation = (0, splitFilters_1.validateSplitFilters)(log, sync.splitFilters, withDefaults.mode);
187
191
  sync.splitFilters = splitFiltersValidation.validFilters;
188
192
  sync.__splitFiltersValidation = splitFiltersValidation;
193
+ // ensure a valid flag spec version
189
194
  sync.flagSpecVersion = flagSpec ? flagSpec(withDefaults) : constants_1.FLAG_SPEC_VERSION;
190
195
  // ensure a valid user consent value
191
196
  // @ts-ignore, modify readonly prop
192
- withDefaults.userConsent = consent(withDefaults);
197
+ withDefaults.userConsent = consent ? consent(withDefaults) : undefined;
193
198
  return withDefaults;
194
199
  }
195
200
  exports.settingsValidation = settingsValidation;
@@ -1,5 +1,6 @@
1
1
  import { allMatcherContext } from './all';
2
2
  import { segmentMatcherContext } from './segment';
3
+ import { largeSegmentMatcherContext } from './large_segment';
3
4
  import { whitelistMatcherContext } from './whitelist';
4
5
  import { equalToMatcherContext } from './eq';
5
6
  import { greaterThanEqualMatcherContext } from './gte';
@@ -43,7 +44,8 @@ var matchers = [
43
44
  greaterThanEqualToSemverMatcherContext,
44
45
  lessThanEqualToSemverMatcherContext,
45
46
  betweenSemverMatcherContext,
46
- inListSemverMatcherContext, // IN_LIST_SEMVER: 22
47
+ inListSemverMatcherContext,
48
+ largeSegmentMatcherContext, // IN_LARGE_SEGMENT: 23
47
49
  ];
48
50
  /**
49
51
  * Matcher factory.
@@ -0,0 +1,12 @@
1
+ import { thenable } from '../../utils/promise/thenable';
2
+ export function largeSegmentMatcherContext(largeSegmentName, storage) {
3
+ return function largeSegmentMatcher(key) {
4
+ var isInLargeSegment = storage.largeSegments ? storage.largeSegments.isInSegment(largeSegmentName, key) : false;
5
+ if (thenable(isInLargeSegment)) {
6
+ isInLargeSegment.then(function (result) {
7
+ return result;
8
+ });
9
+ }
10
+ return isInLargeSegment;
11
+ };
12
+ }
@@ -22,6 +22,7 @@ export var matcherTypes = {
22
22
  LESS_THAN_OR_EQUAL_TO_SEMVER: 20,
23
23
  BETWEEN_SEMVER: 21,
24
24
  IN_LIST_SEMVER: 22,
25
+ IN_LARGE_SEGMENT: 23,
25
26
  };
26
27
  export var matcherDataTypes = {
27
28
  BOOLEAN: 'BOOLEAN',
@@ -15,7 +15,7 @@ export function matchersTransform(matchers) {
15
15
  // As default input data type we use string (even for ALL_KEYS)
16
16
  var dataType = matcherDataTypes.STRING;
17
17
  var value = undefined;
18
- if (type === matcherTypes.IN_SEGMENT) {
18
+ if (type === matcherTypes.IN_SEGMENT || type === matcherTypes.IN_LARGE_SEGMENT) {
19
19
  value = segmentTransform(userDefinedSegmentMatcherData);
20
20
  }
21
21
  else if (type === matcherTypes.EQUAL_TO) {
@@ -35,7 +35,6 @@ export var IMPRESSION = 102;
35
35
  export var IMPRESSION_QUEUEING = 103;
36
36
  export var NEW_SHARED_CLIENT = 104;
37
37
  export var NEW_FACTORY = 105;
38
- export var POLLING_SMART_PAUSING = 106;
39
38
  export var POLLING_START = 107;
40
39
  export var POLLING_STOP = 108;
41
40
  export var SYNC_SPLITS_FETCH_RETRY = 109;
@@ -116,6 +115,7 @@ export var ENGINE_MATCHER_ERROR = 329;
116
115
  // Log prefixes (a.k.a. tags or categories)
117
116
  export var LOG_PREFIX_SETTINGS = 'settings';
118
117
  export var LOG_PREFIX_INSTANTIATION = 'Factory instantiation';
118
+ export var LOG_PREFIX_CLIENT_INSTANTIATION = 'Client instantiation';
119
119
  export var LOG_PREFIX_ENGINE = 'engine';
120
120
  export var LOG_PREFIX_ENGINE_COMBINER = LOG_PREFIX_ENGINE + ':combiner: ';
121
121
  export var LOG_PREFIX_ENGINE_MATCHER = LOG_PREFIX_ENGINE + ':matcher: ';
@@ -16,7 +16,6 @@ export var codesInfo = codesWarn.concat([
16
16
  [c.USER_CONSENT_NOT_UPDATED, 'UserConsent: call had no effect because it was the current consent status (%s).'],
17
17
  [c.USER_CONSENT_INITIAL, 'Starting the SDK with %s user consent. No data will be sent.'],
18
18
  // synchronizer
19
- [c.POLLING_SMART_PAUSING, c.LOG_PREFIX_SYNC_POLLING + 'Turning segments data polling %s.'],
20
19
  [c.POLLING_START, c.LOG_PREFIX_SYNC_POLLING + 'Starting polling'],
21
20
  [c.POLLING_STOP, c.LOG_PREFIX_SYNC_POLLING + 'Stopping polling'],
22
21
  [c.SYNC_SPLITS_FETCH_RETRY, c.LOG_PREFIX_SYNC_SPLITS + 'Retrying download of feature flags #%s. Reason: %s'],
@@ -23,10 +23,11 @@ function segmentsEventEmitterFactory(EventEmitter) {
23
23
  /**
24
24
  * Factory of readiness manager, which handles the ready / update event propagation.
25
25
  */
26
- export function readinessManagerFactory(EventEmitter, readyTimeout, splits) {
27
- if (readyTimeout === void 0) { readyTimeout = 0; }
26
+ export function readinessManagerFactory(EventEmitter, settings, splits) {
28
27
  if (splits === void 0) { splits = splitsEventEmitterFactory(EventEmitter); }
28
+ var _a = settings.startup, readyTimeout = _a.readyTimeout, waitForLargeSegments = _a.waitForLargeSegments, largeSegmentsEnabled = settings.sync.largeSegmentsEnabled;
29
29
  var segments = segmentsEventEmitterFactory(EventEmitter);
30
+ var largeSegments = largeSegmentsEnabled && waitForLargeSegments ? segmentsEventEmitterFactory(EventEmitter) : undefined;
30
31
  var gate = new EventEmitter();
31
32
  // emit SDK_READY_FROM_CACHE
32
33
  var isReadyFromCache = false;
@@ -50,6 +51,8 @@ export function readinessManagerFactory(EventEmitter, readyTimeout, splits) {
50
51
  var isReady = false;
51
52
  splits.on(SDK_SPLITS_ARRIVED, checkIsReadyOrUpdate);
52
53
  segments.on(SDK_SEGMENTS_ARRIVED, checkIsReadyOrUpdate);
54
+ if (largeSegments)
55
+ largeSegments.on(SDK_SEGMENTS_ARRIVED, checkIsReadyOrUpdate);
53
56
  var isDestroyed = false;
54
57
  function checkIsReadyFromCache() {
55
58
  isReadyFromCache = true;
@@ -75,7 +78,7 @@ export function readinessManagerFactory(EventEmitter, readyTimeout, splits) {
75
78
  }
76
79
  }
77
80
  else {
78
- if (splits.splitsArrived && segments.segmentsArrived) {
81
+ if (splits.splitsArrived && segments.segmentsArrived && (!largeSegments || largeSegments.segmentsArrived)) {
79
82
  clearTimeout(readyTimeoutId);
80
83
  isReady = true;
81
84
  try {
@@ -92,11 +95,11 @@ export function readinessManagerFactory(EventEmitter, readyTimeout, splits) {
92
95
  return {
93
96
  splits: splits,
94
97
  segments: segments,
98
+ largeSegments: largeSegments,
95
99
  gate: gate,
96
- shared: function (readyTimeout) {
97
- if (readyTimeout === void 0) { readyTimeout = 0; }
100
+ shared: function () {
98
101
  refCount++;
99
- return readinessManagerFactory(EventEmitter, readyTimeout, splits);
102
+ return readinessManagerFactory(EventEmitter, settings, splits);
100
103
  },
101
104
  // @TODO review/remove next methods when non-recoverable errors are reworked
102
105
  // Called on consumer mode, when storage fails to connect
@@ -107,6 +110,8 @@ export function readinessManagerFactory(EventEmitter, readyTimeout, splits) {
107
110
  destroy: function () {
108
111
  isDestroyed = true;
109
112
  segments.removeAllListeners();
113
+ if (largeSegments)
114
+ largeSegments.removeAllListeners();
110
115
  gate.removeAllListeners();
111
116
  clearTimeout(readyTimeoutId);
112
117
  if (refCount > 0)
@@ -12,9 +12,9 @@ var REMOVE_LISTENER_EVENT = 'removeListener';
12
12
  * @param readyTimeout time in millis to emit SDK_READY_TIME_OUT event
13
13
  * @param readinessManager optional readinessManager to use. only used internally for `shared` method
14
14
  */
15
- export function sdkReadinessManagerFactory(log, EventEmitter, readyTimeout, readinessManager) {
16
- if (readyTimeout === void 0) { readyTimeout = 0; }
17
- if (readinessManager === void 0) { readinessManager = readinessManagerFactory(EventEmitter, readyTimeout); }
15
+ export function sdkReadinessManagerFactory(EventEmitter, settings, readinessManager) {
16
+ if (readinessManager === void 0) { readinessManager = readinessManagerFactory(EventEmitter, settings); }
17
+ var log = settings.log;
18
18
  /** Ready callback warning */
19
19
  var internalReadyCbCount = 0;
20
20
  var readyCbCount = 0;
@@ -57,9 +57,8 @@ export function sdkReadinessManagerFactory(log, EventEmitter, readyTimeout, read
57
57
  }
58
58
  return {
59
59
  readinessManager: readinessManager,
60
- shared: function (readyTimeout) {
61
- if (readyTimeout === void 0) { readyTimeout = 0; }
62
- return sdkReadinessManagerFactory(log, EventEmitter, readyTimeout, readinessManager.shared(readyTimeout));
60
+ shared: function () {
61
+ return sdkReadinessManagerFactory(EventEmitter, settings, readinessManager.shared());
63
62
  },
64
63
  incInternalReadyCbCount: function () {
65
64
  internalReadyCbCount++;
@@ -3,19 +3,18 @@ import { validateKey } from '../utils/inputValidation/key';
3
3
  import { getMatching, keyParser } from '../utils/key';
4
4
  import { sdkClientFactory } from './sdkClient';
5
5
  import { objectAssign } from '../utils/lang/objectAssign';
6
- import { RETRIEVE_CLIENT_DEFAULT, NEW_SHARED_CLIENT, RETRIEVE_CLIENT_EXISTING } from '../logger/constants';
6
+ import { RETRIEVE_CLIENT_DEFAULT, NEW_SHARED_CLIENT, RETRIEVE_CLIENT_EXISTING, LOG_PREFIX_CLIENT_INSTANTIATION } from '../logger/constants';
7
7
  import { SDK_SEGMENTS_ARRIVED } from '../readiness/constants';
8
8
  function buildInstanceId(key) {
9
9
  // @ts-ignore
10
10
  return (key.matchingKey ? key.matchingKey : key) + "-" + (key.bucketingKey ? key.bucketingKey : key) + "-";
11
11
  }
12
- var method = 'Client instantiation';
13
12
  /**
14
13
  * Factory of client method for the client-side API variant where TT is ignored.
15
14
  * Therefore, clients don't have a bound TT for the track method.
16
15
  */
17
16
  export function sdkClientMethodCSFactory(params) {
18
- var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, key = _a.core.key, readyTimeout = _a.startup.readyTimeout, log = _a.log;
17
+ var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, key = _a.core.key, log = _a.log;
19
18
  var mainClientInstance = clientCSDecorator(log, sdkClientFactory(params), key);
20
19
  var parsedDefaultKey = keyParser(key);
21
20
  var defaultInstanceId = buildInstanceId(parsedDefaultKey);
@@ -28,14 +27,14 @@ export function sdkClientMethodCSFactory(params) {
28
27
  return mainClientInstance;
29
28
  }
30
29
  // Validate the key value. The trafficType (2nd argument) is ignored
31
- var validKey = validateKey(log, key, method);
30
+ var validKey = validateKey(log, key, LOG_PREFIX_CLIENT_INSTANTIATION);
32
31
  if (validKey === false) {
33
32
  throw new Error('Shared Client needs a valid key.');
34
33
  }
35
34
  var instanceId = buildInstanceId(validKey);
36
35
  if (!clientInstances[instanceId]) {
37
36
  var matchingKey = getMatching(validKey);
38
- var sharedSdkReadiness_1 = sdkReadinessManager.shared(readyTimeout);
37
+ var sharedSdkReadiness_1 = sdkReadinessManager.shared();
39
38
  var sharedStorage = storage.shared && storage.shared(matchingKey, function (err) {
40
39
  if (err) {
41
40
  sharedSdkReadiness_1.readinessManager.timeout();
@@ -4,20 +4,19 @@ import { validateTrafficType } from '../utils/inputValidation/trafficType';
4
4
  import { getMatching, keyParser } from '../utils/key';
5
5
  import { sdkClientFactory } from './sdkClient';
6
6
  import { objectAssign } from '../utils/lang/objectAssign';
7
- import { RETRIEVE_CLIENT_DEFAULT, NEW_SHARED_CLIENT, RETRIEVE_CLIENT_EXISTING } from '../logger/constants';
7
+ import { RETRIEVE_CLIENT_DEFAULT, NEW_SHARED_CLIENT, RETRIEVE_CLIENT_EXISTING, LOG_PREFIX_CLIENT_INSTANTIATION } from '../logger/constants';
8
8
  import { SDK_SEGMENTS_ARRIVED } from '../readiness/constants';
9
9
  function buildInstanceId(key, trafficType) {
10
10
  // @ts-ignore
11
11
  return (key.matchingKey ? key.matchingKey : key) + "-" + (key.bucketingKey ? key.bucketingKey : key) + "-" + (trafficType !== undefined ? trafficType : '');
12
12
  }
13
- var method = 'Client instantiation';
14
13
  /**
15
14
  * Factory of client method for the client-side (browser) variant of the Isomorphic JS SDK,
16
15
  * where clients can have a bound TT for the track method, which is provided via the settings
17
16
  * (default client) or the client method (shared clients).
18
17
  */
19
18
  export function sdkClientMethodCSFactory(params) {
20
- var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, _b = _a.core, key = _b.key, trafficType = _b.trafficType, readyTimeout = _a.startup.readyTimeout, log = _a.log;
19
+ var storage = params.storage, syncManager = params.syncManager, sdkReadinessManager = params.sdkReadinessManager, _a = params.settings, _b = _a.core, key = _b.key, trafficType = _b.trafficType, log = _a.log;
21
20
  var mainClientInstance = clientCSDecorator(log, sdkClientFactory(params), key, trafficType);
22
21
  var parsedDefaultKey = keyParser(key);
23
22
  var defaultInstanceId = buildInstanceId(parsedDefaultKey, trafficType);
@@ -30,13 +29,13 @@ export function sdkClientMethodCSFactory(params) {
30
29
  return mainClientInstance;
31
30
  }
32
31
  // Validate the key value
33
- var validKey = validateKey(log, key, "Shared " + method);
32
+ var validKey = validateKey(log, key, LOG_PREFIX_CLIENT_INSTANTIATION);
34
33
  if (validKey === false) {
35
34
  throw new Error('Shared Client needs a valid key.');
36
35
  }
37
36
  var validTrafficType;
38
37
  if (trafficType !== undefined) {
39
- validTrafficType = validateTrafficType(log, trafficType, "Shared " + method);
38
+ validTrafficType = validateTrafficType(log, trafficType, LOG_PREFIX_CLIENT_INSTANTIATION);
40
39
  if (validTrafficType === false) {
41
40
  throw new Error('Shared Client needs a valid traffic type or no traffic type at all.');
42
41
  }
@@ -44,7 +43,7 @@ export function sdkClientMethodCSFactory(params) {
44
43
  var instanceId = buildInstanceId(validKey, validTrafficType);
45
44
  if (!clientInstances[instanceId]) {
46
45
  var matchingKey = getMatching(validKey);
47
- var sharedSdkReadiness_1 = sdkReadinessManager.shared(readyTimeout);
46
+ var sharedSdkReadiness_1 = sdkReadinessManager.shared();
48
47
  var sharedStorage = storage.shared && storage.shared(matchingKey, function (err) {
49
48
  if (err) {
50
49
  sharedSdkReadiness_1.readinessManager.timeout();
@@ -22,7 +22,7 @@ export function sdkFactory(params) {
22
22
  // On non-recoverable errors, we should mark the SDK as destroyed and not start synchronization.
23
23
  // We will just log and allow for the SDK to end up throwing an SDK_TIMEOUT event for devs to handle.
24
24
  validateAndTrackApiKey(log, settings.core.authorizationKey);
25
- var sdkReadinessManager = sdkReadinessManagerFactory(log, platform.EventEmitter, settings.startup.readyTimeout);
25
+ var sdkReadinessManager = sdkReadinessManagerFactory(platform.EventEmitter, settings);
26
26
  var readiness = sdkReadinessManager.readinessManager;
27
27
  var storage = storageFactory({
28
28
  settings: settings,
@@ -1,6 +1,6 @@
1
1
  import { splitHttpClientFactory } from './splitHttpClient';
2
2
  import { objectAssign } from '../utils/lang/objectAssign';
3
- import { SPLITS, IMPRESSIONS, IMPRESSIONS_COUNT, EVENTS, TELEMETRY, TOKEN, SEGMENT, MY_SEGMENT } from '../utils/constants';
3
+ import { SPLITS, IMPRESSIONS, IMPRESSIONS_COUNT, EVENTS, TELEMETRY, TOKEN, SEGMENT, MY_SEGMENT, MY_LARGE_SEGMENT } from '../utils/constants';
4
4
  import { ERROR_TOO_MANY_SETS } from '../logger/constants';
5
5
  var noCacheHeaderOptions = { headers: { 'Cache-Control': 'no-cache' } };
6
6
  function userKeyToQueryParam(userKey) {
@@ -61,6 +61,10 @@ export function splitApiFactory(settings, platform, telemetryTracker) {
61
61
  var url = urls.sdk + "/mySegments/" + encodeURIComponent(userMatchingKey);
62
62
  return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MY_SEGMENT));
63
63
  },
64
+ fetchMyLargeSegments: function (userMatchingKey, noCache) {
65
+ var url = urls.sdk + "/myLargeSegments/" + encodeURIComponent(userMatchingKey);
66
+ return splitHttpClient(url, noCache ? noCacheHeaderOptions : undefined, telemetryTracker.trackHttp(MY_LARGE_SEGMENT));
67
+ },
64
68
  /**
65
69
  * Post events.
66
70
  *
@@ -6,9 +6,9 @@ import { objectAssign } from '../utils/lang/objectAssign';
6
6
  var AbstractSplitsCacheAsync = /** @class */ (function () {
7
7
  function AbstractSplitsCacheAsync() {
8
8
  }
9
- // @TODO revisit segment-related methods ('usesSegments', 'getRegisteredSegments', 'registerSegments')
9
+ // @TODO revisit segment-related methods ('usesMatcher', 'getRegisteredSegments', 'registerSegments')
10
10
  // noop, just keeping the interface. This is used by standalone client-side API only, and so only implemented by InMemory and InLocalStorage.
11
- AbstractSplitsCacheAsync.prototype.usesSegments = function () {
11
+ AbstractSplitsCacheAsync.prototype.usesMatcher = function () {
12
12
  return Promise.resolve(true);
13
13
  };
14
14
  /**
@@ -59,14 +59,14 @@ var AbstractSplitsCacheSync = /** @class */ (function () {
59
59
  export { AbstractSplitsCacheSync };
60
60
  /**
61
61
  * Given a parsed split, it returns a boolean flagging if its conditions use segments matchers (rules & whitelists).
62
- * This util is intended to simplify the implementation of `splitsCache::usesSegments` method
62
+ * This util is intended to simplify the implementation of `splitsCache::usesMatcher` method
63
63
  */
64
- export function usesSegments(split) {
64
+ export function usesMatcher(split, matcherType) {
65
65
  var conditions = split.conditions || [];
66
66
  for (var i = 0; i < conditions.length; i++) {
67
67
  var matchers = conditions[i].matcherGroup.matchers;
68
68
  for (var j = 0; j < matchers.length; j++) {
69
- if (matchers[j].matcherType === 'IN_SEGMENT')
69
+ if (matchers[j].matcherType === matcherType)
70
70
  return true;
71
71
  }
72
72
  }
@@ -36,6 +36,9 @@ var KeyBuilder = /** @class */ (function () {
36
36
  KeyBuilder.prototype.buildSplitsWithSegmentCountKey = function () {
37
37
  return this.prefix + ".splits.usingSegments";
38
38
  };
39
+ KeyBuilder.prototype.buildSplitsWithLargeSegmentCountKey = function () {
40
+ return this.prefix + ".splits.usingLargeSegments";
41
+ };
39
42
  KeyBuilder.prototype.buildSegmentNameKey = function (segmentName) {
40
43
  return this.prefix + ".segment." + segmentName;
41
44
  };
@@ -21,10 +21,6 @@ var KeyBuilderCS = /** @class */ (function (_super) {
21
21
  return builtSegmentKeyName.substr(prefix.length);
22
22
  };
23
23
  // @BREAKING: The key used to start with the matching key instead of the prefix, this was changed on version 10.17.3
24
- KeyBuilderCS.prototype.buildOldSegmentNameKey = function (segmentName) {
25
- return this.matchingKey + "." + this.prefix + ".segment." + segmentName;
26
- };
27
- // @BREAKING: The key used to start with the matching key instead of the prefix, this was changed on version 10.17.3
28
24
  KeyBuilderCS.prototype.extractOldSegmentKey = function (builtSegmentKeyName) {
29
25
  var prefix = this.matchingKey + "." + this.prefix + ".segment.";
30
26
  if (startsWith(builtSegmentKeyName, prefix))
@@ -39,3 +35,18 @@ var KeyBuilderCS = /** @class */ (function (_super) {
39
35
  return KeyBuilderCS;
40
36
  }(KeyBuilder));
41
37
  export { KeyBuilderCS };
38
+ export function myLargeSegmentsKeyBuilder(prefix, matchingKey) {
39
+ return {
40
+ buildSegmentNameKey: function (segmentName) {
41
+ return prefix + "." + matchingKey + ".largeSegment." + segmentName;
42
+ },
43
+ extractSegmentName: function (builtSegmentKeyName) {
44
+ var p = prefix + "." + matchingKey + ".largeSegment.";
45
+ if (startsWith(builtSegmentKeyName, p))
46
+ return builtSegmentKeyName.substr(p.length);
47
+ },
48
+ extractOldSegmentKey: function () {
49
+ return undefined;
50
+ }
51
+ };
52
+ }
@@ -1,9 +1,10 @@
1
1
  import { __extends } from "tslib";
2
- import { AbstractSplitsCacheSync, usesSegments } from '../AbstractSplitsCacheSync';
2
+ import { AbstractSplitsCacheSync, usesMatcher } from '../AbstractSplitsCacheSync';
3
3
  import { isFiniteNumber, toNumber, isNaNNumber } from '../../utils/lang';
4
4
  import { LOG_PREFIX } from './constants';
5
5
  import { _Set, setToArray } from '../../utils/lang/sets';
6
6
  import { getStorageHash } from '../KeyBuilder';
7
+ import { IN_LARGE_SEGMENT, IN_SEGMENT } from '../../utils/constants';
7
8
  /**
8
9
  * ISplitsCacheSync implementation that stores split definitions in browser LocalStorage.
9
10
  */
@@ -37,10 +38,14 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
37
38
  if (split) {
38
39
  var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
39
40
  this._decrementCount(ttKey);
40
- if (usesSegments(split)) {
41
+ if (usesMatcher(split, IN_SEGMENT)) {
41
42
  var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
42
43
  this._decrementCount(segmentsCountKey);
43
44
  }
45
+ if (usesMatcher(split, IN_LARGE_SEGMENT)) {
46
+ var segmentsCountKey = this.keys.buildSplitsWithLargeSegmentCountKey();
47
+ this._decrementCount(segmentsCountKey);
48
+ }
44
49
  }
45
50
  }
46
51
  catch (e) {
@@ -53,11 +58,16 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
53
58
  var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
54
59
  // @ts-expect-error
55
60
  localStorage.setItem(ttKey, toNumber(localStorage.getItem(ttKey)) + 1);
56
- if (usesSegments(split)) {
61
+ if (usesMatcher(split, IN_SEGMENT)) {
57
62
  var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
58
63
  // @ts-expect-error
59
64
  localStorage.setItem(segmentsCountKey, toNumber(localStorage.getItem(segmentsCountKey)) + 1);
60
65
  }
66
+ if (usesMatcher(split, IN_LARGE_SEGMENT)) {
67
+ var segmentsCountKey = this.keys.buildSplitsWithLargeSegmentCountKey();
68
+ // @ts-expect-error
69
+ localStorage.setItem(segmentsCountKey, toNumber(localStorage.getItem(segmentsCountKey)) + 1);
70
+ }
61
71
  }
62
72
  }
63
73
  catch (e) {
@@ -170,11 +180,13 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
170
180
  var ttCount = toNumber(localStorage.getItem(this.keys.buildTrafficTypeKey(trafficType)));
171
181
  return isFiniteNumber(ttCount) && ttCount > 0;
172
182
  };
173
- SplitsCacheInLocal.prototype.usesSegments = function () {
183
+ SplitsCacheInLocal.prototype.usesMatcher = function (matcherType) {
174
184
  // If cache hasn't been synchronized with the cloud, assume we need them.
175
185
  if (!this.hasSync)
176
186
  return true;
177
- var storedCount = localStorage.getItem(this.keys.buildSplitsWithSegmentCountKey());
187
+ var storedCount = localStorage.getItem(matcherType === IN_SEGMENT ?
188
+ this.keys.buildSplitsWithSegmentCountKey() :
189
+ this.keys.buildSplitsWithLargeSegmentCountKey());
178
190
  var splitsWithSegmentsCount = storedCount === null ? 0 : toNumber(storedCount);
179
191
  if (isFiniteNumber(splitsWithSegmentsCount)) {
180
192
  return splitsWithSegmentsCount > 0;
@@ -2,7 +2,7 @@ import { ImpressionsCacheInMemory } from '../inMemory/ImpressionsCacheInMemory';
2
2
  import { ImpressionCountsCacheInMemory } from '../inMemory/ImpressionCountsCacheInMemory';
3
3
  import { EventsCacheInMemory } from '../inMemory/EventsCacheInMemory';
4
4
  import { validatePrefix } from '../KeyBuilder';
5
- import { KeyBuilderCS } from '../KeyBuilderCS';
5
+ import { KeyBuilderCS, myLargeSegmentsKeyBuilder } from '../KeyBuilderCS';
6
6
  import { isLocalStorageAvailable } from '../../utils/env/isLocalStorageAvailable';
7
7
  import { SplitsCacheInLocal } from './SplitsCacheInLocal';
8
8
  import { MySegmentsCacheInLocal } from './MySegmentsCacheInLocal';
@@ -33,9 +33,11 @@ export function InLocalStorage(options) {
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
+ var largeSegments = new MySegmentsCacheInLocal(log, myLargeSegmentsKeyBuilder(prefix, matchingKey));
36
37
  return {
37
38
  splits: splits,
38
39
  segments: segments,
40
+ largeSegments: largeSegments,
39
41
  impressions: new ImpressionsCacheInMemory(impressionsQueueSize),
40
42
  impressionCounts: impressionsMode !== DEBUG ? new ImpressionCountsCacheInMemory() : undefined,
41
43
  events: new EventsCacheInMemory(eventsQueueSize),
@@ -45,6 +47,7 @@ export function InLocalStorage(options) {
45
47
  var _a;
46
48
  this.splits = new SplitsCacheInMemory(__splitFiltersValidation);
47
49
  this.segments = new MySegmentsCacheInMemory();
50
+ this.largeSegments = new MySegmentsCacheInMemory();
48
51
  this.impressions.clear();
49
52
  this.impressionCounts && this.impressionCounts.clear();
50
53
  this.events.clear();
@@ -52,10 +55,10 @@ export function InLocalStorage(options) {
52
55
  },
53
56
  // When using shared instanciation with MEMORY we reuse everything but segments (they are customer per key).
54
57
  shared: function (matchingKey) {
55
- var childKeysBuilder = new KeyBuilderCS(prefix, matchingKey);
56
58
  return {
57
59
  splits: this.splits,
58
- segments: new MySegmentsCacheInLocal(log, childKeysBuilder),
60
+ segments: new MySegmentsCacheInLocal(log, new KeyBuilderCS(prefix, matchingKey)),
61
+ largeSegments: new MySegmentsCacheInLocal(log, myLargeSegmentsKeyBuilder(prefix, matchingKey)),
59
62
  impressions: this.impressions,
60
63
  impressionCounts: this.impressionCounts,
61
64
  events: this.events,
@@ -63,6 +66,7 @@ export function InLocalStorage(options) {
63
66
  destroy: function () {
64
67
  this.splits = new SplitsCacheInMemory(__splitFiltersValidation);
65
68
  this.segments = new MySegmentsCacheInMemory();
69
+ this.largeSegments = new MySegmentsCacheInMemory();
66
70
  }
67
71
  };
68
72
  },
@@ -15,9 +15,11 @@ export function InMemoryStorageCSFactory(params) {
15
15
  var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, _c = _a.sync, impressionsMode = _c.impressionsMode, __splitFiltersValidation = _c.__splitFiltersValidation;
16
16
  var splits = new SplitsCacheInMemory(__splitFiltersValidation);
17
17
  var segments = new MySegmentsCacheInMemory();
18
+ var largeSegments = new MySegmentsCacheInMemory();
18
19
  var storage = {
19
20
  splits: splits,
20
21
  segments: segments,
22
+ largeSegments: largeSegments,
21
23
  impressions: new ImpressionsCacheInMemory(impressionsQueueSize),
22
24
  impressionCounts: impressionsMode !== DEBUG ? new ImpressionCountsCacheInMemory() : undefined,
23
25
  events: new EventsCacheInMemory(eventsQueueSize),
@@ -27,6 +29,7 @@ export function InMemoryStorageCSFactory(params) {
27
29
  destroy: function () {
28
30
  this.splits.clear();
29
31
  this.segments.clear();
32
+ this.largeSegments.clear();
30
33
  this.impressions.clear();
31
34
  this.impressionCounts && this.impressionCounts.clear();
32
35
  this.events.clear();
@@ -37,6 +40,7 @@ export function InMemoryStorageCSFactory(params) {
37
40
  return {
38
41
  splits: this.splits,
39
42
  segments: new MySegmentsCacheInMemory(),
43
+ largeSegments: new MySegmentsCacheInMemory(),
40
44
  impressions: this.impressions,
41
45
  impressionCounts: this.impressionCounts,
42
46
  events: this.events,
@@ -45,6 +49,7 @@ export function InMemoryStorageCSFactory(params) {
45
49
  destroy: function () {
46
50
  this.splits = new SplitsCacheInMemory(__splitFiltersValidation);
47
51
  this.segments.clear();
52
+ this.largeSegments.clear();
48
53
  }
49
54
  };
50
55
  },