@piotr-cz/redux-persist-idb-storage
Version:
Redux Persist adapter for IndexedDB storage
124 lines (106 loc) • 3.11 kB
JavaScript
var idb = require('idb');
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function createIdbStorage(definedOptions) {
if (definedOptions === void 0) {
definedOptions = {};
}
/** @var {Object} */
var options = _extends({
/** Database name */
name: 'keyval-store',
/** Store name */
storeName: 'keyval',
/** Database version */
version: 1,
/** Upgrade callback. Useful when for example switching storeName */
upgradeCallback: function upgradeCallback(upgradeDb) {
return upgradeDb.createObjectStore(options.storeName);
}
}, definedOptions);
/** @var {Promise} */
var dbPromise = idb.openDb(options.name, options.version, options.upgradeCallback);
return {
/**
* Get
* @param {string} key
* @return {Promise}
*/
getItem: function getItem(key) {
return Promise.resolve(dbPromise).then(function (db) {
var tx = db.transaction(options.storeName);
return tx.objectStore(options.storeName).get(key);
});
},
/**
* Set
* @param {string} key
* @param {any} item
* @return {Promise}
*/
setItem: function setItem(key, item) {
return Promise.resolve(dbPromise).then(function (db) {
var tx = db.transaction(options.storeName, 'readwrite');
tx.objectStore(options.storeName).put(item, key);
return tx.complete;
});
},
/**
* Remove
* @param {string} key
* @return {Promise}
*/
removeItem: function removeItem(key) {
return Promise.resolve(dbPromise).then(function (db) {
var tx = db.transaction(options.storeName, 'readwrite');
tx.objectStore(options.storeName)["delete"](key);
return tx.complete;
});
},
/**
* Get all keys
* @return {Promise}
*/
getAllKeys: function getAllKeys() {
return Promise.resolve(dbPromise).then(function (db) {
var tx = db.transaction(options.storeName);
return tx.objectStore(options.storeName).getAllKeys();
});
},
/**
* Get all data
* @return {Promise}
*/
getAll: function getAll() {
return Promise.resolve(dbPromise).then(function (db) {
var tx = db.transaction(options.storeName);
return tx.objectStore(options.storeName).getAll();
});
},
/**
* Clear storage
* @return {Promise}
*/
clear: function clear() {
return Promise.resolve(dbPromise).then(function (db) {
var tx = db.transaction(options.storeName, 'readwrite');
tx.objectStore(options.storeName).clear();
return tx.complete;
});
}
};
}
module.exports = createIdbStorage;
//# sourceMappingURL=redux-persist-idb-storage.js.map