@obsidize/rx-map
Version:
ES6 Map with rxjs extensions for change detection
79 lines (78 loc) • 3.11 kB
TypeScript
import { Predicate, PropertySelector } from '../common/utility';
export declare type EntityTransform<T> = (entity: T) => T;
export interface Update<K, V> {
key: K;
changes: Partial<V>;
}
export interface EntityMapLike<K, V> {
keyOf(entity: V): K | undefined;
keys(): K[];
values(): V[];
entries(): [K, V][];
getOne(key: K): V | undefined;
getMany(keys: K[]): V[];
getManyExisting(keys: K[]): V[];
hasOne(key: K): boolean;
hasEvery(keys: K[]): boolean;
hasSome(keys: K[]): boolean;
addOne(entity: V): V | undefined;
addMany(entities: V[]): V[];
setOne(entity: V): V;
setMany(entities: V[]): V[];
setAll(entities: V[]): V[];
removeOne(key: K): boolean;
removeMany(keys: K[]): boolean[];
removeWhere(predicate: Predicate<V>): V[];
removeAll(): void;
updateOne(update: Update<K, V>): V | undefined;
updateMany(updates: Update<K, V>[]): V[];
updateOneByKey(key: K, changes: Partial<V>): V | undefined;
upsertOne(entity: V): V | undefined;
upsertMany(entities: V[]): V[];
transformOne(key: K, transform: EntityTransform<V>): V | undefined;
transformMany(transform: EntityTransform<V>): V[];
}
/**
* Heavily influenced by @ngrx/entity's entity adapter interface.
* The methods defined here are intended to follow the same paradigm as the ngrx adapter collection methods:
* https://ngrx.io/guide/entity/adapter#adapter-collection-methods
*/
export declare class EntityMap<K, V, T extends Map<K, V>> implements EntityMapLike<K, V> {
protected readonly store: T;
protected readonly selectKey: PropertySelector<K, V>;
constructor(store: T, selectKey: PropertySelector<K, V>);
protected onSetEntry(key: K, value: V): void;
protected onDeleteEntry(key: K): boolean;
protected onMergeEntries(a?: Partial<V>, b?: Partial<V>): V;
get count(): number;
keyOf(entity: V): K | undefined;
isValidKey(key: K | undefined | null): boolean;
iterableKeys(): IterableIterator<K>;
keys(): K[];
iterableValues(): IterableIterator<V>;
values(): V[];
iterableEntries(): IterableIterator<[K, V]>;
entries(): [K, V][];
getOne(key: K): V | undefined;
getMany(keys: K[]): V[];
getManyExisting(keys: K[]): V[];
hasOne(key: K): boolean;
hasEvery(keys: K[]): boolean;
hasSome(keys: K[]): boolean;
addOne(entity: V): V | undefined;
addMany(entities: V[]): V[];
setOne(entity: V): V;
setMany(entities: V[]): V[];
setAll(entities: V[]): V[];
removeOne(key: K): boolean;
removeMany(keys: K[]): boolean[];
removeWhere(predicate: Predicate<V>): V[];
removeAll(): void;
updateOneByKey(key: K, changes: Partial<V>): V | undefined;
updateOne(update: Update<K, V>): V | undefined;
updateMany(updates: Update<K, V>[]): V[];
upsertOne(entity: V): V | undefined;
upsertMany(entities: V[]): V[];
transformOne(key: K, transform: EntityTransform<V>): V | undefined;
transformMany(transform: EntityTransform<V>): V[];
}