UNPKG

@splitsoftware/splitio-commons

Version:
70 lines (69 loc) 2.39 kB
import { DEFAULT_CACHE_SIZE } from '../inRedis/constants'; import { setToArray } from '../../utils/lang/sets'; /** * Converts `uniqueKeys` data from cache into request payload for SS. */ export function fromUniqueKeysCollector(uniqueKeys) { var payload = []; var featureNames = Object.keys(uniqueKeys); for (var i = 0; i < featureNames.length; i++) { var featureName = featureNames[i]; var userKeys = setToArray(uniqueKeys[featureName]); var uniqueKeysPayload = { f: featureName, ks: userKeys }; payload.push(uniqueKeysPayload); } return { keys: payload }; } var UniqueKeysCacheInMemory = /** @class */ (function () { function UniqueKeysCacheInMemory(uniqueKeysQueueSize) { if (uniqueKeysQueueSize === void 0) { uniqueKeysQueueSize = DEFAULT_CACHE_SIZE; } this.name = 'unique keys'; this.uniqueTrackerSize = 0; this.uniqueKeysTracker = {}; this.maxStorage = uniqueKeysQueueSize; } UniqueKeysCacheInMemory.prototype.setOnFullQueueCb = function (cb) { this.onFullQueue = cb; }; /** * Store unique keys per feature. */ UniqueKeysCacheInMemory.prototype.track = function (userKey, featureName) { if (!this.uniqueKeysTracker[featureName]) this.uniqueKeysTracker[featureName] = new Set(); var tracker = this.uniqueKeysTracker[featureName]; if (!tracker.has(userKey)) { tracker.add(userKey); this.uniqueTrackerSize++; } if (this.uniqueTrackerSize >= this.maxStorage && this.onFullQueue) { this.onFullQueue(); } }; /** * Clear the data stored on the cache. */ UniqueKeysCacheInMemory.prototype.clear = function () { this.uniqueTrackerSize = 0; this.uniqueKeysTracker = {}; }; /** * Pop the collected data, used as payload for posting. */ UniqueKeysCacheInMemory.prototype.pop = function () { var data = this.uniqueKeysTracker; this.clear(); return fromUniqueKeysCollector(data); }; /** * Check if the cache is empty. */ UniqueKeysCacheInMemory.prototype.isEmpty = function () { return Object.keys(this.uniqueKeysTracker).length === 0; }; return UniqueKeysCacheInMemory; }()); export { UniqueKeysCacheInMemory };