@lesjoursfr/browser-tools
Version:
Some browser tools for events & DOM manipulation.
74 lines (73 loc) • 2.08 kB
JavaScript
import Cookies from "js-cookie";
export var KeyValueStorageTypes;
(function (KeyValueStorageTypes) {
KeyValueStorageTypes[KeyValueStorageTypes["localStorage"] = 1] = "localStorage";
KeyValueStorageTypes[KeyValueStorageTypes["cookies"] = 2] = "cookies";
})(KeyValueStorageTypes || (KeyValueStorageTypes = {}));
export class AbstractKeyValueStore {
type;
constructor(type) {
this.type = type;
}
}
export class LocalStorageKeyValueStore extends AbstractKeyValueStore {
constructor() {
super(KeyValueStorageTypes.localStorage);
}
getItem(key) {
const value = window.localStorage.getItem(key);
return value === null ? undefined : value;
}
setItem(key, value) {
window.localStorage.setItem(key, value);
}
removeItem(key) {
window.localStorage.removeItem(key);
}
}
export class CookiesKeyValueStore extends AbstractKeyValueStore {
expires;
constructor(expires) {
super(KeyValueStorageTypes.cookies);
this.expires = expires;
}
getItem(key) {
const value = Cookies.get(key);
return value;
}
setItem(key, value) {
Cookies.set(key, value, { expires: this.expires });
}
removeItem(key) {
Cookies.remove(key);
}
}
/**
* Check if we can use the localStorage.
* @returns {boolean}
*/
export function isLocalStorageAvailable() {
const mod = "localStorageTest";
try {
localStorage.setItem(mod, mod);
localStorage.removeItem(mod);
return true;
}
catch (_err) {
return false;
}
}
let store = null;
/**
* Get the default store for the browser.
* The default store is the localStorage if it's available or the cookies.
*
* @param {number} expires the expires value for the cookies
* @returns {AbstractKeyValueStore} the default store
*/
export function getDefaultKeyValueStore(expires = 365) {
if (store === null) {
store = isLocalStorageAvailable() ? new LocalStorageKeyValueStore() : new CookiesKeyValueStore(expires);
}
return store;
}