| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import localforage from 'localforage';
- /** The storage type */
- export type StorageType = 'local' | 'session';
- export function createStorage<T extends object>(type: StorageType, storagePrefix: string) {
- const stg = type === 'session' ? window.sessionStorage : window.localStorage;
- const storage = {
- /**
- * Set session
- *
- * @param key Session key
- * @param value Session value
- */
- set<K extends keyof T>(key: K, value: T[K]) {
- const json = JSON.stringify(value);
- stg.setItem(`${storagePrefix}${key as string}`, json);
- },
- /**
- * Get session
- *
- * @param key Session key
- */
- get<K extends keyof T>(key: K): T[K] | null {
- const json = stg.getItem(`${storagePrefix}${key as string}`);
- if (json) {
- let storageData: T[K] | null = null;
- try {
- storageData = JSON.parse(json);
- } catch {}
- // storageData may be `false` if it is boolean type
- if (storageData !== null) {
- return storageData as T[K];
- }
- }
- stg.removeItem(`${storagePrefix}${key as string}`);
- return null;
- },
- remove(key: keyof T) {
- stg.removeItem(`${storagePrefix}${key as string}`);
- },
- clear() {
- stg.clear();
- }
- };
- return storage;
- }
- type LocalForage<T extends object> = Omit<typeof localforage, 'getItem' | 'setItem' | 'removeItem'> & {
- getItem<K extends keyof T>(key: K, callback?: (err: any, value: T[K] | null) => void): Promise<T[K] | null>;
- setItem<K extends keyof T>(key: K, value: T[K], callback?: (err: any, value: T[K]) => void): Promise<T[K]>;
- removeItem(key: keyof T, callback?: (err: any) => void): Promise<void>;
- };
- type LocalforageDriver = 'local' | 'indexedDB' | 'webSQL';
- export function createLocalforage<T extends object>(driver: LocalforageDriver) {
- const driverMap: Record<LocalforageDriver, string> = {
- local: localforage.LOCALSTORAGE,
- indexedDB: localforage.INDEXEDDB,
- webSQL: localforage.WEBSQL
- };
- localforage.config({
- driver: driverMap[driver]
- });
- return localforage as LocalForage<T>;
- }
|