reactronic
Version:
Reactronic - Transactional Reactive State Management
73 lines (72 loc) • 2.69 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 keyOf: 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 isRenovationInProgress(): boolean;
get count(): number;
items(): Generator<T>;
lookup(key: string | undefined): T | undefined;
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): void;
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 | undefined): void;
}
export declare enum Mark {
prolonged = 0,
added = 1,
modified = 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(): 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>);
lookup(key: string | undefined): T | undefined;
tryToProlong(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>;
}