@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
118 lines (117 loc) • 5.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RBSegmentsCacheInLocal = void 0;
var lang_1 = require("../../utils/lang");
var sets_1 = require("../../utils/lang/sets");
var AbstractSplitsCacheSync_1 = require("../AbstractSplitsCacheSync");
var constants_1 = require("./constants");
var RBSegmentsCacheInLocal = /** @class */ (function () {
function RBSegmentsCacheInLocal(settings, keys) {
this.keys = keys;
this.log = settings.log;
}
RBSegmentsCacheInLocal.prototype.clear = function () {
var _this = this;
this.getNames().forEach(function (name) { return _this.remove(name); });
localStorage.removeItem(this.keys.buildRBSegmentsTillKey());
};
RBSegmentsCacheInLocal.prototype.update = function (toAdd, toRemove, changeNumber) {
var _this = this;
this.setChangeNumber(changeNumber);
var updated = toAdd.map(function (toAdd) { return _this.add(toAdd); }).some(function (result) { return result; });
return toRemove.map(function (toRemove) { return _this.remove(toRemove.name); }).some(function (result) { return result; }) || updated;
};
RBSegmentsCacheInLocal.prototype.setChangeNumber = function (changeNumber) {
try {
localStorage.setItem(this.keys.buildRBSegmentsTillKey(), changeNumber + '');
localStorage.setItem(this.keys.buildLastUpdatedKey(), Date.now() + '');
}
catch (e) {
this.log.error(constants_1.LOG_PREFIX + e);
}
};
RBSegmentsCacheInLocal.prototype.updateSegmentCount = function (diff) {
var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
var count = (0, lang_1.toNumber)(localStorage.getItem(segmentsCountKey)) + diff;
// @ts-expect-error
if (count > 0)
localStorage.setItem(segmentsCountKey, count);
else
localStorage.removeItem(segmentsCountKey);
};
RBSegmentsCacheInLocal.prototype.add = function (rbSegment) {
try {
var name_1 = rbSegment.name;
var rbSegmentKey = this.keys.buildRBSegmentKey(name_1);
var rbSegmentFromLocalStorage = localStorage.getItem(rbSegmentKey);
var previous = rbSegmentFromLocalStorage ? JSON.parse(rbSegmentFromLocalStorage) : null;
localStorage.setItem(rbSegmentKey, JSON.stringify(rbSegment));
var usesSegmentsDiff = 0;
if (previous && (0, AbstractSplitsCacheSync_1.usesSegments)(previous))
usesSegmentsDiff--;
if ((0, AbstractSplitsCacheSync_1.usesSegments)(rbSegment))
usesSegmentsDiff++;
if (usesSegmentsDiff !== 0)
this.updateSegmentCount(usesSegmentsDiff);
return true;
}
catch (e) {
this.log.error(constants_1.LOG_PREFIX + e);
return false;
}
};
RBSegmentsCacheInLocal.prototype.remove = function (name) {
try {
var rbSegment = this.get(name);
if (!rbSegment)
return false;
localStorage.removeItem(this.keys.buildRBSegmentKey(name));
if ((0, AbstractSplitsCacheSync_1.usesSegments)(rbSegment))
this.updateSegmentCount(-1);
return true;
}
catch (e) {
this.log.error(constants_1.LOG_PREFIX + e);
return false;
}
};
RBSegmentsCacheInLocal.prototype.getNames = function () {
var len = localStorage.length;
var accum = [];
var cur = 0;
while (cur < len) {
var key = localStorage.key(cur);
if (key != null && this.keys.isRBSegmentKey(key))
accum.push(this.keys.extractKey(key));
cur++;
}
return accum;
};
RBSegmentsCacheInLocal.prototype.get = function (name) {
var item = localStorage.getItem(this.keys.buildRBSegmentKey(name));
return item && JSON.parse(item);
};
RBSegmentsCacheInLocal.prototype.contains = function (names) {
var namesArray = (0, sets_1.setToArray)(names);
var namesInStorage = this.getNames();
return namesArray.every(function (name) { return namesInStorage.indexOf(name) !== -1; });
};
RBSegmentsCacheInLocal.prototype.getChangeNumber = function () {
var n = -1;
var value = localStorage.getItem(this.keys.buildRBSegmentsTillKey());
if (value !== null) {
value = parseInt(value, 10);
return (0, lang_1.isNaNNumber)(value) ? n : value;
}
return n;
};
RBSegmentsCacheInLocal.prototype.usesSegments = function () {
var storedCount = localStorage.getItem(this.keys.buildSplitsWithSegmentCountKey());
var splitsWithSegmentsCount = storedCount === null ? 0 : (0, lang_1.toNumber)(storedCount);
return (0, lang_1.isFiniteNumber)(splitsWithSegmentsCount) ?
splitsWithSegmentsCount > 0 :
true;
};
return RBSegmentsCacheInLocal;
}());
exports.RBSegmentsCacheInLocal = RBSegmentsCacheInLocal;