37 lines
1007 B
TypeScript
37 lines
1007 B
TypeScript
export interface ReactiveNode {
|
|
deps?: Link;
|
|
depsTail?: Link;
|
|
subs?: Link;
|
|
subsTail?: Link;
|
|
flags: ReactiveFlags;
|
|
}
|
|
export interface Link {
|
|
version: number;
|
|
dep: ReactiveNode;
|
|
sub: ReactiveNode;
|
|
prevSub: Link | undefined;
|
|
nextSub: Link | undefined;
|
|
prevDep: Link | undefined;
|
|
nextDep: Link | undefined;
|
|
}
|
|
export declare const enum ReactiveFlags {
|
|
None = 0,
|
|
Mutable = 1,
|
|
Watching = 2,
|
|
RecursedCheck = 4,
|
|
Recursed = 8,
|
|
Dirty = 16,
|
|
Pending = 32
|
|
}
|
|
export declare function createReactiveSystem({ update, notify, unwatched, }: {
|
|
update(sub: ReactiveNode): boolean;
|
|
notify(sub: ReactiveNode): void;
|
|
unwatched(sub: ReactiveNode): void;
|
|
}): {
|
|
link: (dep: ReactiveNode, sub: ReactiveNode, version: number) => void;
|
|
unlink: (link: Link, sub?: ReactiveNode) => Link | undefined;
|
|
propagate: (link: Link) => void;
|
|
checkDirty: (link: Link, sub: ReactiveNode) => boolean;
|
|
shallowPropagate: (link: Link) => void;
|
|
};
|