import { StateCreator, StoreMutatorIdentifier } from '../vanilla'; export interface StateStorage { getItem: (name: string) => string | null | Promise; setItem: (name: string, value: string) => R; removeItem: (name: string) => R; } export type StorageValue = { state: S; version?: number; }; export interface PersistStorage { getItem: (name: string) => StorageValue | null | Promise | null>; setItem: (name: string, value: StorageValue) => R; removeItem: (name: string) => R; } type JsonStorageOptions = { reviver?: (key: string, value: unknown) => unknown; replacer?: (key: string, value: unknown) => unknown; }; export declare function createJSONStorage(getStorage: () => StateStorage, options?: JsonStorageOptions): PersistStorage | undefined; export interface PersistOptions { name: string; storage?: PersistStorage | undefined; partialize?: (state: S) => PersistedState; onRehydrateStorage?: (state: S) => ((state?: S, error?: unknown) => void) | void; version?: number; migrate?: (persistedState: unknown, version: number) => PersistedState | Promise; merge?: (persistedState: unknown, currentState: S) => S; skipHydration?: boolean; } type PersistListener = (state: S) => void; type StorePersist = S extends { getState: () => infer T; setState: { (...args: infer Sa1): infer Sr1; (...args: infer Sa2): infer Sr2; }; } ? { setState(...args: Sa1): Sr1 | Pr; setState(...args: Sa2): Sr2 | Pr; persist: { setOptions: (options: Partial>) => void; clearStorage: () => void; rehydrate: () => Promise | void; hasHydrated: () => boolean; onHydrate: (fn: PersistListener) => () => void; onFinishHydration: (fn: PersistListener) => () => void; getOptions: () => Partial>; }; } : never; type Persist = (initializer: StateCreator, options: PersistOptions) => StateCreator; declare module '../vanilla' { interface StoreMutators { 'zustand/persist': WithPersist; } } type Write = Omit & U; type WithPersist = Write>; export declare const persist: Persist; export {};