Repository URL to install this package:
|
Version:
2.0.2 ▾
|
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @todo replace oneStorage everywhere
*/
const indexdb_1 = __importDefault(require("./adapters/indexdb"));
const local_storage_1 = __importDefault(require("./adapters/local-storage"));
const in_memory_1 = __importDefault(require("./adapters/in-memory"));
const IS_BROWSER = typeof window === 'object';
const HAS_INDEX_DB = IS_BROWSER && 'indexedDB' in window;
/**
* keys, values...
* @alias OmniStorage
*
* @todo only use the adapters (means use this.ls > ls)
* so they can be overwritten
*/
class OneStorage {
constructor() {
this.inMemory = in_memory_1.default;
this.indexdb = indexdb_1.default;
this.ls = local_storage_1.default;
}
// parse when reading back out of ls...?
get(key) {
if (in_memory_1.default.has(key) === true) {
return in_memory_1.default.get(key);
}
if (local_storage_1.default.has(key) === true) {
return local_storage_1.default.get(key);
}
// not sure this is needed
const existing = in_memory_1.default.get(key);
/**
* @note - very weird to do a set on a get
* @todo - this was here for good reason, but not good for tests
*/
// if (HAS_INDEX_DB) {
// indexdb.get(key).then(saved => {
// if (existing !== saved) {
// inMemory.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_1.default.set(key, value)
: Promise.resolve(-42);
// not putting it in ls, took 1s
if (key !== 'graphql-client-cache') {
local_storage_1.default.set(key, value);
}
in_memory_1.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) {
const resolving = HAS_INDEX_DB
? indexdb_1.default.delete(key)
: Promise.resolve(-42);
in_memory_1.default.delete(key);
local_storage_1.default.remove(key);
return resolving;
}
clear() {
const resolving = HAS_INDEX_DB
? indexdb_1.default.clear()
: Promise.resolve(-42);
in_memory_1.default.clear();
local_storage_1.default.clear();
return resolving;
}
// async size() {
// const keys = await indexdb.keys()
// return keys.length
// }
get length() {
return in_memory_1.default.size || local_storage_1.default.length || 0;
}
}
exports.OneStorage = OneStorage;
// eslint-disable-next-line
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;
exports.default = OneStorage;
//# sourceMappingURL=OneStorage.js.map