interface IStringHash { [key: string]: T; } type TDataBlock = { in: string[]; out: string[]; exec: (ctx: TDataConfig) => void; length?: number; }; type Parser = (val: any) => any; type TDataConfig = TDataBlock[]; type TParserHash = IStringHash; type TID = number | string; interface IHasID { id?: TID; } interface IEventConfig { intercept?: boolean; tag?: number | string | symbol; } interface IHasIDAndParent { id?: TID; parent: TID; $level: number; data?: IHasIDAndParent[]; open?: boolean; } type TDispatch = (action: A, data: T[A]) => void; interface DataHash { [key: string]: any; } interface IWritable { subscribe: (fn: (v: T) => void) => void; update: (fn: (v: T) => T) => void; set: (val: T) => void; } type TTrigger = (v: T) => void; type SomeCallback = () => void; type TAsyncSignals = { [key: string]: SomeCallback | null; }; interface IPublicWritable { subscribe: (fn: TTrigger) => void; __trigger(): void; __parse: (val: T, key: string, signals: TAsyncSignals, mode: TStateMode) => void; } type TWritableCreator = (val: any) => IWritable; interface IEventBus { exec(name: keyof T, ev: T[keyof T]): Promise; setNext(next: IEventBus): IEventBus; } type ToReactive = { [Property in keyof Type]: IWritable; }; type TStateMode = number; declare class _DataArray { private _pool; private _data; constructor(raw: T[]); add(raw: T): void; update(id: TID, raw: T): void; remove(id: TID): void; filter(cb: (value: T) => boolean): void; byId(id: TID): T; map(cb: (value: T, index: number, array: T[]) => D): D[]; forEach(cb: (value: T, index: number, array: T[]) => void): void; } declare class DataTree { _pool: Map; constructor(raw?: T[]); parse(raw: T[], parent: TID): void; add(raw: T, index: number): void; addAfter(raw: T, after: TID): void; remove(id: TID): void; _remove(obj: T): void; update(id: TID, values: Data): void; move(id: TID, mode: string, target: TID): void; private _clearBranch; toArray(): T[]; byId(id: TID): T; getBranch(id: TID): T[]; forEach(cb: (value: T) => void): void; eachChild(cb: (value: T, index: number) => void, parent: TID): void; setLevel(root: IHasIDAndParent, level: number, copy: boolean): void; } declare class EventBus { private _handlers; protected _nextHandler: IEventBus; protected _tag: WeakMap<{ (v: T[A]): void | boolean | Promise; }, number | string | symbol>; constructor(); on(name: A, handler: (v: T[A]) => void | boolean | Promise, config?: IEventConfig): void; intercept(name: A, handler: (v: T[A]) => void | boolean | Promise, config?: IEventConfig): void; detach(tag: number | string | symbol): void; exec(name: A, ev: T[A]): Promise; setNext(next: IEventBus): IEventBus; } type TSetter = (data: Partial, mode?: TStateMode) => TAsyncSignals; type TStoreLike = { setState: TSetter; }; declare class DataRouter { private _setter; private _routes; private _triggers; private _sources; private _prev; private _parsers; private _bus; private _async; constructor(s: TSetter | TStoreLike, r: TDataConfig, p: TParserHash, b?: EventBus); init(cfg: Partial): void; setStateAsync(updates: Partial): TAsyncSignals; _applyState(): void; setState(updates: Partial, ctx?: TDataConfig): TAsyncSignals; private _triggerUpdates; private _execNext; } type TState = { [Property in keyof Type]: IPublicWritable; }; type StoreConfig = { writable: TWritableCreator; async: boolean; }; declare class Store { private _state; private _values; private _writable; private _async; constructor(config: StoreConfig); setState(data: Partial, mode?: TStateMode | TDataConfig): TAsyncSignals; getState(): T; getReactive(): TState; private _wrapProperties; private _wrapNested; private _wrapWritable; } declare function markReactive(t: T, nested?: boolean): T; declare class EventResolver implements IEventBus { private _key; protected _nextHandler: IEventBus; constructor(key: string); exec(name: keyof T, ev: T[keyof T]): Promise; setNext(next: IEventBus): IEventBus; } declare class EventBusRouter implements IEventBus { private _dispatch; protected _nextHandler: IEventBus; constructor(dispatch: TDispatch); exec(name: keyof T, ev: T[keyof T]): Promise; setNext(next: IEventBus): IEventBus; } declare const uid: () => number; declare function tempID(): string; declare function isTempID(v: string | number): boolean; declare function isSame(v: any, nv: any): boolean; declare function deepCopy(obj: T): T; export { _DataArray as DataArray, DataRouter, DataTree, EventBus, EventBusRouter, EventResolver, type IEventBus, type IEventConfig, type IPublicWritable, type IWritable, Store, type TDataConfig, type TDispatch, type TID, type TWritableCreator, type ToReactive, deepCopy, isSame, isTempID, markReactive, tempID, uid };