import type { CommandCatalog, Domain, Stop } from './types.js'; export interface PersistencePort { load(key: string): Promise; save(key: string, value: string): Promise; remove(key: string): Promise; } export interface PersistenceCodec { encode(value: Value): string; decode(value: string): unknown; } export interface PersistenceOptions { readonly key: string; readonly version: number; readonly debounceMs?: number; readonly codec?: PersistenceCodec; readonly migrate?: (stored: unknown, fromVersion: number, toVersion: number) => State | Promise; readonly select?: (state: Readonly) => Persisted; readonly merge?: (persisted: Persisted, current: Readonly) => State; readonly validate?: (value: unknown) => value is Persisted; readonly skipHydration?: boolean; readonly onHydrate?: (current: Readonly) => void; readonly onFinishHydration?: (state: Readonly | undefined, error?: unknown) => void; readonly onFault?: (error: unknown) => void; } export interface PersistenceBinding { readonly ready: Promise; flush(): Promise; clear(): Promise; rehydrate(): Promise; hasHydrated(): boolean; setOptions(options: Partial>): void; getOptions(): Readonly>; onHydrate(listener: () => void): Stop; onFinishHydration(listener: (state: Readonly) => void): Stop; stop(): void; } export declare function memoryPersistence(): PersistencePort; export declare function browserPersistence(storage: Storage): PersistencePort; export declare function bindPersistence, Persisted = State>(domain: Domain, port: PersistencePort, initialOptions: PersistenceOptions): PersistenceBinding; //# sourceMappingURL=persistence.d.ts.map