import StoreEvent from "./StoreEvent"; declare type PrimitiveTypes = string | number | boolean | null; export declare type DataValues = PrimitiveTypes | DataValues[] | { [key: string]: DataValues; }; declare type MapCallbackFn = (value: DataStore, index: number, array: DataStore[]) => T; declare type Mutator = (value: DataValues) => DataValues; export declare enum HierarchyDirection { INCLUSIVE_UP = 0, EXCLUSIVE_UP = 1, INCLUSIVE_DOWN = 2, EXCLUSIVE_DOWN = 3 } export interface Listener { eventName: string; callback: (e: StoreEvent) => void; } declare class DataStore { uuid: string; __timestamp: number; __initialTimestamp: number; root: DataStore; parent: DataStore; __initialValues: DataValues; constructor(values?: DataValues, root?: DataStore, parent?: DataStore); static createStore(values?: DataValues): DataStore; touched: () => boolean; timestamp: () => number; protected touch: (timestamp?: number) => DataStore; protected getRoot(): DataStore; protected isRoot(): boolean; protected getThisPath(): number | string; getPath(): (number | string)[]; getPath(encoded: boolean): string; protected storePrimitive: PrimitiveTypes; protected storeArray: Array; protected storeMap: Map; protected isPrimitive(): boolean; protected initData(values: DataValues): void; protected createChildStore(value: DataValues): DataStore; get(name: string): DataStore; get(index: number): DataStore; get(key: number | string): DataStore; set(value: DataValues): DataStore; set(name: string, value: DataValues): DataStore; set(index: number, value: DataValues): DataStore; set(key: number | string, value: DataValues): DataStore; unset(key: string): DataStore; reset(): DataStore; toJSON(): T; toObject: () => T; toValue: () => PrimitiveTypes; map(callbackFn: MapCallbackFn): T[]; map(name: string, callbackFn: MapCallbackFn): T[]; pop(): void; push(value: DataValues): DataStore; remove(index: number): DataStore; removeFromParent(): void; protected listeners: Listener[]; on(eventName: Listener["eventName"], callback: Listener["callback"]): DataStore; off(eventName: Listener["eventName"], callback?: Listener["callback"]): DataStore; emit(eventName: Listener["eventName"], direction?: HierarchyDirection): DataStore; protected release(): DataStore; protected dispatch(e: StoreEvent, listeners: Listener[]): void; getListeners(direction?: HierarchyDirection): Listener[]; getParentListeners(include?: boolean): Listener[]; getChildListeners(include?: boolean): Listener[]; getChildren(include?: boolean): DataStore[]; mutate(mutator: Mutator): DataStore; mutate(key: string | number, mutator: Mutator): DataStore; } export default DataStore;