@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
65 lines (64 loc) • 3.16 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.RBSegmentsCacheInRedis = void 0;
var lang_1 = require("../../utils/lang");
var constants_1 = require("./constants");
var sets_1 = require("../../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 = (0, sets_1.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.name);
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 (0, lang_1.isNaNNumber)(i) ? -1 : i;
}).catch(function (e) {
_this.log.error(constants_1.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;
}());
exports.RBSegmentsCacheInRedis = RBSegmentsCacheInRedis;
;