export type GetListItemKey = (item: T) => string | undefined; export type ReconciliationListReader = { readonly isStrict: boolean; readonly count: number; readonly countOfAdded: number; readonly countOfRemoved: number; readonly isReconciliationInProgress: boolean; lookup(key: string): LinkedItem | undefined; firstItem(): LinkedItem | undefined; lastItem(): LinkedItem | undefined; items(onlyAfter?: LinkedItem): Generator>; itemsAdded(clear?: boolean): Generator>; itemsRemoved(clear?: boolean): Generator>; isAdded(item: LinkedItem): boolean; isMoved(item: LinkedItem): boolean; isRemoved(item: LinkedItem): boolean; isActual(item: LinkedItem): boolean; isExternal(item: LinkedItem): boolean; }; export type LinkedItem = { readonly instance: T; readonly index: number; readonly next?: LinkedItem; readonly prev?: LinkedItem; aux?: LinkedItem; }; export declare class ReconciliationList implements ReconciliationListReader { readonly getKey: GetListItemKey; private strict; private map; private tag; private actual; private added; private removed; private lastNotFoundKey; private strictNextItem?; constructor(getKey: GetListItemKey, strict?: boolean); get isStrict(): boolean; set isStrict(value: boolean); get count(): number; get countOfAdded(): number; get countOfRemoved(): number; get isReconciliationInProgress(): boolean; lookup(key: string | undefined): LinkedItem | undefined; tryReuse(key: string, resolution?: { isDuplicate: boolean; }, error?: string): LinkedItem | undefined; add(instance: T): LinkedItem; remove(item: LinkedItem): void; move(item: LinkedItem, after: LinkedItem): void; beginReconciliation(): void; endReconciliation(error?: unknown): void; clearAddedAndRemoved(): void; firstItem(): LinkedItem | undefined; lastItem(): LinkedItem | undefined; items(onlyAfter?: LinkedItem): Generator>; itemsAdded(clear?: boolean): Generator>; itemsRemoved(clear?: boolean): Generator>; isAdded(item: LinkedItem): boolean; isMoved(item: LinkedItem): boolean; isRemoved(item: LinkedItem): boolean; isActual(item: LinkedItem): boolean; isExternal(item: LinkedItem): boolean; markAsMoved(item: LinkedItem): void; static createItem(instance: T): LinkedItem; }