UNPKG

@splitsoftware/splitio-commons

Version:
118 lines (117 loc) 5.13 kB
"use strict"; 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;