reactronic
Version:
Reactronic - Transactional Reactive State Management
78 lines (77 loc) • 2.88 kB
TypeScript
export type Extractor<T, Result> = (item: T) => Result;
export type KeyExtractor<T> = Extractor<T, string | undefined>;
export declare class LinkedList<T extends LinkedItem<T>> {
readonly keyExtractor: KeyExtractor<T>;
private isStrictOrder$;
private map;
items$: LinkedSubList<T>;
private renovation$;
constructor(keyExtractor: KeyExtractor<T>, isStrictOrder?: boolean);
get isStrictOrder(): boolean;
set isStrictOrder(value: boolean);
get renovation(): LinkedListRenovation<T>;
get isRenovationInProgress(): boolean;
get count(): number;
get firstItem(): T | undefined;
get lastItem(): T | undefined;
items(after?: T): Generator<T>;
tryLookup(key: string): T | undefined;
lookup(key: string): T;
add(item: T, before?: T): void;
move(item: T, before: T | undefined): void;
remove(item: T): void;
beginRenovation(diff?: Array<T>): LinkedListRenovation<T>;
endRenovation(error?: unknown): LinkedListRenovation<T>;
extractKey(item: T): string;
static move$<T extends LinkedItem<T>>(list: LinkedList<T>, item: T, before: T | undefined): void;
static remove$<T extends LinkedItem<T>>(list: LinkedList<T>, item: T): void;
static removeKey$<T extends LinkedItem<T>>(list: LinkedList<T>, key: string): void;
}
export declare enum Mark {
reaffirmed = 0,
added = 1,
moved = 2,
removed = 3
}
export declare class LinkedItem<T extends LinkedItem<T>> {
private list$;
private next$;
private prev$;
private status;
constructor();
get list(): LinkedSubList<T> | undefined;
get next(): T | undefined;
get prev(): T | undefined;
get mark(): Mark;
get rank(): number;
get isManagedExternally(): boolean;
static setStatus$<T extends LinkedItem<T>>(item: T, mark: Mark, rank: number): void;
static link$<T extends LinkedItem<T>>(list: LinkedSubList<T> | undefined, item: T, before: T | undefined): void;
private static unlink;
}
export declare class LinkedSubList<T extends LinkedItem<T>> {
count: number;
first?: T;
last?: T;
items(after?: T): Generator<T>;
clear(): void;
grab(from: LinkedSubList<T>, join: boolean): void;
}
export declare class LinkedListRenovation<T extends LinkedItem<T>> {
readonly list: LinkedList<T>;
readonly diff: Array<T> | undefined;
private former;
private expected;
private absent;
constructor(list: LinkedList<T>, former: LinkedSubList<T>, diff?: Array<T>);
tryLookup(key: string): T | undefined;
tryReaffirm(key: string, resolution?: {
isDuplicate: boolean;
}, error?: string): T | undefined;
thisIsAdded(item: T, before?: T): T;
thisIsModified(item: T): void;
thisIsMoved(item: T, before: T | undefined): void;
thisIsRemoved(item: T): void;
get lostItemCount(): number;
lostItems(): Generator<T>;
}