UNPKG

@splitsoftware/splitio-commons

Version:
62 lines (61 loc) 2.99 kB
import { isNaNNumber } from '../../utils/lang'; import { LOG_PREFIX } from './constants'; import { setToArray } from '../../utils/lang/sets'; var RBSegmentsCacheInRedis = /** @class */ (function () { function RBSegmentsCacheInRedis(log, keys, redis) { this.log = log; this.keys = keys; this.redis = redis; } RBSegmentsCacheInRedis.prototype.get = function (name) { return this.redis.get(this.keys.buildRBSegmentKey(name)) .then(function (maybeRBSegment) { return maybeRBSegment && JSON.parse(maybeRBSegment); }); }; RBSegmentsCacheInRedis.prototype.getNames = function () { var _this = this; return this.redis.keys(this.keys.searchPatternForRBSegmentKeys()).then(function (listOfKeys) { return listOfKeys.map(_this.keys.extractKey); }); }; RBSegmentsCacheInRedis.prototype.contains = function (names) { var namesArray = setToArray(names); return this.getNames().then(function (namesInStorage) { return namesArray.every(function (name) { return namesInStorage.includes(name); }); }); }; RBSegmentsCacheInRedis.prototype.update = function (toAdd, toRemove, changeNumber) { var _this = this; return Promise.all([ this.setChangeNumber(changeNumber), Promise.all(toAdd.map(function (toAdd) { var key = _this.keys.buildRBSegmentKey(toAdd.name); var stringifiedNewRBSegment = JSON.stringify(toAdd); return _this.redis.set(key, stringifiedNewRBSegment).then(function () { return true; }); })), Promise.all(toRemove.map(function (toRemove) { var key = _this.keys.buildRBSegmentKey(toRemove); return _this.redis.del(key).then(function (status) { return status === 1; }); })) ]).then(function (_a) { var added = _a[1], removed = _a[2]; return added.some(function (result) { return result; }) || removed.some(function (result) { return result; }); }); }; RBSegmentsCacheInRedis.prototype.setChangeNumber = function (changeNumber) { return this.redis.set(this.keys.buildRBSegmentsTillKey(), changeNumber + '').then(function (status) { return status === 'OK'; }); }; RBSegmentsCacheInRedis.prototype.getChangeNumber = function () { var _this = this; return this.redis.get(this.keys.buildRBSegmentsTillKey()).then(function (value) { var i = parseInt(value, 10); return isNaNNumber(i) ? -1 : i; }).catch(function (e) { _this.log.error(LOG_PREFIX + 'Could not retrieve changeNumber from storage. Error: ' + e); return -1; }); }; // @TODO implement if required by DataLoader or producer mode RBSegmentsCacheInRedis.prototype.clear = function () { return Promise.resolve(); }; return RBSegmentsCacheInRedis; }()); export { RBSegmentsCacheInRedis };