import { BaseObservable } from "../BaseObservable"; import { JoinedMap } from "./index"; import { MappedMap } from "./index"; import { FilteredMap } from "./index"; import { BaseObservableValue } from "../value/index"; import { SortedMapList } from "../list/SortedMapList.js"; export interface IMapObserver { onReset(): void; onAdd(key: K, value: V): void; onUpdate(key: K, value: V, params: any): void; onRemove(key: K, value: V): void; } export declare abstract class BaseObservableMap extends BaseObservable> { constructor(); emitReset(): void; emitAdd(key: K, value: V): void; emitUpdate(key: K, value: V, params: any): void; emitRemove(key: K, value: V): void; join>(...otherMaps: Array): JoinedMap; mapValues(mapper: Mapper, updater?: Updater): MappedMap; sortValues(comparator: Comparator): SortedMapList; filterValues(filter: Filter): FilteredMap; observeSize(): BaseObservableValue; abstract [Symbol.iterator](): Iterator<[K, V]>; abstract get size(): number; abstract get(key: K): V | undefined; } export type Mapper = (value: V, emitSpontaneousUpdate: any) => MappedV; export type Updater = (params: any, mappedValue?: MappedV, value?: V) => void; export type Comparator = (a: V, b: V) => number; export type Filter = (v: V, k: K) => boolean;