import { modelSymbol, parentSymbol, apc, vpc, modelName } from './symbols'; import { EventHandler } from './emitter'; export declare type EmitFn = (evt: string, val: Event) => void; interface ModelCommons { onAction(fn: EventHandler, after?: boolean): () => void; onSnapshot(fn: EventHandler): () => void; onPatch(fn: EventHandler): () => void; getSnapshot(): object; applySnapshot(snapshot: object, dontemit?: boolean): void; getParent(): (UnknownObj & Model) | null; getRoot(): UnknownObj & Model; } export declare type FnMap = { [index: string]: Function; }; declare type Obj = { [index: string]: any; }; declare type UnknownObj = { [index: string]: unknown; }; export interface Model extends ModelCommons { [vpc]: S & Model; [apc]: S & Model; [modelName]: string; [modelSymbol]: boolean; [parentSymbol]: (emit: EmitFn, _parent: Model, _path: string) => void; } export declare type Event = { path?: string; value?: string; [index: string]: any; }; export declare type ModelArgs = { initial: () => S; actions?: (self: S & Model) => A; views?: (self: S & Model) => V; }; export declare function model(name: string, { initial, actions, views }: ModelArgs): (obj?: object | undefined) => S & A & V & Model; export declare function clearCache(): void; export {};