70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
export interface IEffect extends Dependency, Subscriber {
|
|
nextNotify: IEffect | undefined;
|
|
notify(): void;
|
|
}
|
|
export interface IComputed extends Dependency, Subscriber {
|
|
update(): void;
|
|
}
|
|
export interface Dependency {
|
|
subs: Link | undefined;
|
|
subsTail: Link | undefined;
|
|
}
|
|
export interface Subscriber {
|
|
trackId: number;
|
|
canPropagate: boolean;
|
|
dirtyLevel: DirtyLevels;
|
|
deps: Link | undefined;
|
|
depsTail: Link | undefined;
|
|
}
|
|
export interface Link {
|
|
dep: Dependency | IComputed | IEffect;
|
|
sub: Subscriber | IComputed | IEffect;
|
|
trackId: number;
|
|
prevSub: Link | undefined;
|
|
nextSub: Link | undefined;
|
|
nextDep: Link | undefined;
|
|
}
|
|
export declare const enum DirtyLevels {
|
|
None = 0,
|
|
SideEffectsOnly = 1,
|
|
MaybeDirty = 2,
|
|
Dirty = 3
|
|
}
|
|
export declare namespace System {
|
|
let activeSub: Subscriber | undefined;
|
|
let activeTrackId: number;
|
|
let batchDepth: number;
|
|
let lastTrackId: number;
|
|
let queuedEffects: IEffect | undefined;
|
|
let queuedEffectsTail: IEffect | undefined;
|
|
}
|
|
export declare function startBatch(): void;
|
|
export declare function endBatch(): void;
|
|
export declare namespace Link {
|
|
function get(dep: Dependency, sub: Subscriber, nextDep: Link | undefined): Link;
|
|
function release(link: Link): void;
|
|
}
|
|
export declare namespace Dependency {
|
|
/**
|
|
* @deprecated Use `startTrack` instead.
|
|
*/
|
|
function linkSubscriber(dep: Dependency, sub: Subscriber): void;
|
|
function link(dep: Dependency, sub: Subscriber): void;
|
|
function propagate(subs: Link): void;
|
|
}
|
|
export declare namespace Subscriber {
|
|
function resolveMaybeDirty(sub: IComputed | IEffect, depth?: number): void;
|
|
function resolveMaybeDirtyNonRecursive(sub: IComputed | IEffect): void;
|
|
/**
|
|
* @deprecated Use `startTrack` instead.
|
|
*/
|
|
function startTrackDependencies(sub: Subscriber): Subscriber | undefined;
|
|
/**
|
|
* @deprecated Use `endTrack` instead.
|
|
*/
|
|
function endTrackDependencies(sub: Subscriber, prevSub: Subscriber | undefined): void;
|
|
function startTrack(sub: Subscriber): Subscriber | undefined;
|
|
function endTrack(sub: Subscriber, prevSub: Subscriber | undefined): void;
|
|
function clearTrack(link: Link): void;
|
|
}
|