reactronic
Version:
Reactronic - Transactional Reactive State Management
65 lines (64 loc) • 2.52 kB
TypeScript
export type GetMergedItemKey<T = unknown> = (item: T) => string | undefined;
export type MergeListReader<T> = {
readonly isStrict: boolean;
readonly count: number;
readonly addedCount: number;
readonly removedCount: number;
readonly isMergeInProgress: boolean;
lookup(key: string): MergedItem<T> | undefined;
firstMergedItem(): MergedItem<T> | undefined;
lastMergedItem(): MergedItem<T> | undefined;
items(onlyAfter?: MergedItem<T>): Generator<MergedItem<T>>;
addedItems(reset?: boolean): Generator<MergedItem<T>>;
removedItems(reset?: boolean): Generator<MergedItem<T>>;
isAdded(item: MergedItem<T>): boolean;
isMoved(item: MergedItem<T>): boolean;
isRemoved(item: MergedItem<T>): boolean;
isActual(item: MergedItem<T>): boolean;
};
export type MergedItem<T> = {
readonly instance: T;
readonly index: number;
readonly next?: MergedItem<T>;
readonly prev?: MergedItem<T>;
aux?: MergedItem<T>;
};
export declare class MergeList<T> implements MergeListReader<T> {
readonly getKey: GetMergedItemKey<T>;
private strict;
private map;
private tag;
private current;
private added;
private removed;
private lastNotFoundKey;
private strictNextItem?;
constructor(getKey: GetMergedItemKey<T>, strict?: boolean);
get isStrict(): boolean;
set isStrict(value: boolean);
get count(): number;
get addedCount(): number;
get removedCount(): number;
get isMergeInProgress(): boolean;
lookup(key: string | undefined): MergedItem<T> | undefined;
tryMergeAsExisting(key: string, resolution?: {
isDuplicate: boolean;
}, error?: string): MergedItem<T> | undefined;
mergeAsAdded(instance: T): MergedItem<T>;
mergeAsRemoved(item: MergedItem<T>): void;
move(item: MergedItem<T>, after: MergedItem<T>): void;
beginMerge(): void;
endMerge(error?: unknown): void;
resetAddedAndRemovedLists(): void;
firstMergedItem(): MergedItem<T> | undefined;
lastMergedItem(): MergedItem<T> | undefined;
items(onlyAfter?: MergedItem<T>): Generator<MergedItem<T>>;
addedItems(reset?: boolean): Generator<MergedItem<T>>;
removedItems(reset?: boolean): Generator<MergedItem<T>>;
isAdded(item: MergedItem<T>): boolean;
isMoved(item: MergedItem<T>): boolean;
isRemoved(item: MergedItem<T>): boolean;
isActual(item: MergedItem<T>): boolean;
markAsMoved(item: MergedItem<T>): void;
static createItem<T>(instance: T): MergedItem<T>;
}