@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
55 lines (54 loc) • 1.85 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.storageAdapter = void 0;
var constants_1 = require("./constants");
function storageAdapter(log, prefix, wrapper) {
var keys = [];
var cache = {};
var loadPromise;
var savePromise = Promise.resolve();
return {
load: function () {
return loadPromise || (loadPromise = Promise.resolve().then(function () {
return wrapper.getItem(prefix);
}).then(function (storedCache) {
cache = JSON.parse(storedCache || '{}');
keys = Object.keys(cache);
}).catch(function (e) {
log.error(constants_1.LOG_PREFIX + 'Error calling wrapper `getItem` method: ' + e);
}));
},
save: function () {
return savePromise = savePromise.then(function () {
return Promise.resolve(wrapper.setItem(prefix, JSON.stringify(cache)));
}).catch(function (e) {
log.error(constants_1.LOG_PREFIX + 'Error calling wrapper `setItem` method: ' + e);
});
},
whenSaved: function () {
return savePromise;
},
get length() {
return keys.length;
},
getItem: function (key) {
return cache[key] || null;
},
key: function (index) {
return keys[index] || null;
},
removeItem: function (key) {
var index = keys.indexOf(key);
if (index === -1)
return;
keys.splice(index, 1);
delete cache[key];
},
setItem: function (key, value) {
if (keys.indexOf(key) === -1)
keys.push(key);
cache[key] = value;
}
};
}
exports.storageAdapter = storageAdapter;
;