storage-manager-js
Version:
A little way to control Cookies, LocalStorage and SessionStorage without tears
40 lines (34 loc) • 1.31 kB
text/typescript
import { Subscribe, TypeStorage } from "../types";
import { getStorage, isNil, json, map } from "../utils";
export const createStorage = (getStorageProvider: () => Storage): TypeStorage => {
const listeners = new Set<Subscribe>();
const deleteItem = (key: string) => {
getStorageProvider().removeItem(key);
const store = json(getStorageProvider());
listeners.forEach((fn) => fn(store));
};
return {
delete: deleteItem,
listener: (fn) => {
listeners.add(fn);
return () => listeners.delete(fn);
},
clearListeners: () => listeners.clear(),
json: <T>(parse: boolean = false) => (parse ? json(getStorageProvider()) : (getStorageProvider() as unknown as T)),
has: (key: string) => {
const item = getStorageProvider().getItem(key);
return !isNil(item);
},
deleteAll: () => {
map(getStorageProvider(), deleteItem);
listeners.forEach((fn) => fn(getStorageProvider()));
},
get: <T>(key: string) => getStorage<T>(key, getStorageProvider()),
set: (key, object) => {
getStorageProvider().setItem(key, JSON.stringify(object));
listeners.forEach((fn) => fn(getStorageProvider()));
},
};
};
export const SessionStorage: TypeStorage = createStorage(() => window.sessionStorage);
export const LocalStorage: TypeStorage = createStorage(() => window.localStorage);