import { StateStorage } from "zustand/middleware"; import { get, set, del, clear } from "idb-keyval"; class IndexedDBStorage implements StateStorage { public async getItem(name: string): Promise { try { const value = (await get(name)) || localStorage.getItem(name); return value; } catch (error) { return localStorage.getItem(name); } } public async setItem(name: string, value: string): Promise { try { const _value = JSON.parse(value); if (!_value?.state?._hasHydrated) { console.warn("skip setItem", name); return; } await set(name, value); } catch (error) { localStorage.setItem(name, value); } } public async removeItem(name: string): Promise { try { await del(name); } catch (error) { localStorage.removeItem(name); } } public async clear(): Promise { try { await clear(); } catch (error) { localStorage.clear(); } } } export const indexedDBStorage = new IndexedDBStorage();