type Listener = (state: T, prev: T) => void; type Selector = (state: T) => U; type EqualityFn = (a: T, b: T) => boolean; type SetState = (partial: T | Partial | ((s: T) => T | Partial), replace?: boolean) => void; type ModelHook = { (): T; (sel: Selector, eq?: EqualityFn): U; }; type StorageEngine = { getItem(key: string): string | null | Promise; setItem(key: string, value: string): void | Promise; removeItem(key: string): void | Promise; }; interface PersistOptions { key: string; storage?: StorageEngine; debounce?: number; beforePersist?(state: T): any; beforeRecover?(value: any): T | Partial; } interface CreateModelOptions { persist?: string | PersistOptions; logger?: { warn(...a: any[]): void; error(...a: any[]): void; }; strict?: { forbidSetStateAfterDestroy?: boolean; }; } interface SubscribeWithSelectorOptions { equalityFn?(a: U, b: U): boolean; fireImmediately?: boolean; } interface Subscribe { (listener: Listener): () => void; (sel: Selector, fn: (s: U, p: U) => void, opts?: SubscribeWithSelectorOptions): () => void; } interface ModelData { getState(): T; setState: SetState; subscribe: Subscribe; destroy(): void; reset(): void; state: T; } type Model = ModelHook & { getState: ModelHook; useState: ModelHook; use: ModelHook; setState: SetState; destroy(): void; reset(): void; data: ModelData; }; declare function shallow(a: T, b: T): boolean; declare function debounce any>(fn: T, ms: number): { (...a: Parameters): void; flush(): void; cancel(): void; }; declare const createStore: (init: T) => { getState: () => T; getInitialState: () => T; setState(partial: T | Partial | ((s: T) => T | Partial), replace?: boolean): void; subscribe(l: Listener): () => void; destroy(): void; }; declare function createModel(initialState: T | (() => T), options?: CreateModelOptions): Model; export { type CreateModelOptions, type Model, type ModelData, type PersistOptions, type StorageEngine, type SubscribeWithSelectorOptions, createModel, createStore, debounce, shallow };