Repository URL to install this package:
|
Version:
1.2.17 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.OneStorage = void 0;
var _indexdb = _interopRequireDefault(require("./indexdb"));
var _localStorage = _interopRequireDefault(require("./local-storage"));
var _inMemory = _interopRequireDefault(require("./in-memory"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @todo replace oneStorage everywhere
*/
const IS_BROWSER = typeof window === 'object';
const HAS_INDEX_DB = IS_BROWSER && 'indexedDB' in window;
/**
* keys, values...
* @alias OmniStorage
*/
class OneStorage {
constructor() {
this.inMemory = _inMemory.default;
this.indexdb = _indexdb.default;
this.ls = _localStorage.default;
} // parse when reading back out of ls...?
get(key) {
if (_inMemory.default.has(key) === true) {
return _inMemory.default.get(key);
}
if (_localStorage.default.has(key) === true) {
return _localStorage.default.get(key);
} // not sure this is needed
const existing = _inMemory.default.get(key); // could node-async-fs it, or mongo
if (HAS_INDEX_DB) {
_indexdb.default.get(key).then(saved => {
if (existing !== saved) {
_inMemory.default.set(key, saved);
}
});
}
return existing;
} // @todo is it faster to "graphql-client-cache" ignore if it always fills?
set(key, value) {
// store as string for graphql? perf?
// const final = isString(value) ? JSON.parse(value) : value
// return indexdb.set(key, final)
// @note @important - we start indexdb transaction first, it's async
const resolving = HAS_INDEX_DB ? _indexdb.default.set(key, value) : Promise.resolve(-42); // not putting it in ls, took 1s
if (key !== 'graphql-client-cache') {
_localStorage.default.set(key, value);
}
_inMemory.default.set(key, value);
return resolving; // indexdb.set(key, value)
// if (isObj(value)) {
// indexdb.set(key, JSON.stringify(value))
// } else {
// indexdb.set(key, value)
// }
}
has(key) {
return !!this.get(key);
}
remove(key) {
if (HAS_INDEX_DB) {
_indexdb.default.delete(key);
}
_inMemory.default.delete(key);
_localStorage.default.remove(key);
}
clear() {
if (HAS_INDEX_DB) {
_indexdb.default.clear();
}
_inMemory.default.clear();
_localStorage.default.clear();
}
} // eslint-disable-next-line
exports.OneStorage = OneStorage;
OneStorage.prototype['delete'] = OneStorage.prototype.remove;
OneStorage.prototype['removeItem'] = OneStorage.prototype.remove;
OneStorage.prototype['getItem'] = OneStorage.prototype.get;
OneStorage.prototype['setItem'] = OneStorage.prototype.set;
OneStorage.prototype['hasItem'] = OneStorage.prototype.has;
var _default = OneStorage;
exports.default = _default;