import type { Draft } from 'immer'; import type { InfiniteAction, Action } from './types.js'; import { Accessor } from './Accessor.js'; import { InfiniteAccessor } from './InfiniteAccessor.js'; interface BaseAccessorCreator { mutate: (fn: (draft: Draft) => void) => void; invalidate(): void; } export interface AccessorCreator extends BaseAccessorCreator { (arg: Arg): Accessor; syncState: Action['syncState']; } export interface InfiniteAccessorCreator extends BaseAccessorCreator { (arg: Arg): InfiniteAccessor; syncState: InfiniteAction['syncState']; } export interface CreateModelOptions { initialState: S; } export interface Model { getCreator(creatorName: string): InfiniteAccessorCreator | AccessorCreator | undefined; mutate(fn: (draft: Draft) => void, serverStateKey?: object): void; defineInfiniteAccessor(action: InfiniteAction): InfiniteAccessorCreator; defineAccessor(action: Action): AccessorCreator; getState(serverStateKey?: object): S; /** * Invalidate all accessor generated from this model. */ invalidate(): void; } export declare function createModel({ initialState, onServerStateChange, }: CreateModelOptions): Model; export {};