| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import { StateStorage } from "zustand/middleware";
- import { get, set, del, clear } from "idb-keyval";
- import { safeLocalStorage } from "@/app/utils";
- const localStorage = safeLocalStorage();
- class IndexedDBStorage implements StateStorage {
- public async getItem(name: string): Promise<string | null> {
- 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<void> {
- 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<void> {
- try {
- await del(name);
- } catch (error) {
- localStorage.removeItem(name);
- }
- }
- public async clear(): Promise<void> {
- try {
- await clear();
- } catch (error) {
- localStorage.clear();
- }
- }
- }
- export const indexedDBStorage = new IndexedDBStorage();
|