proxy-state-tree
Version:
An implementation of the Mobx/Vue state tracking approach, for library authors
104 lines (103 loc) • 3.39 kB
TypeScript
export interface IProxifier<T extends object> {
proxify(state: T, path: string): T;
trackPath(path: string): void;
}
export interface IMutation {
method: string;
delimiter: string;
path: string;
args: any[];
hasChangedValue: boolean;
}
export interface IMutationCallback {
(mutation: IMutation, paths: Set<string>, flushId: number): void;
}
export interface IMutationTree<T extends object> {
addMutation(mutation: IMutation, objectChangePath?: string): void;
onMutation(callback: IMutationCallback): void;
canTrack(): boolean;
canMutate(): boolean;
getMutations(): IMutation[];
getObjectChanges(): Set<string>;
trackPaths(): () => Set<string>;
flush(async?: boolean): {
mutations: IMutation[];
flushId: number;
};
dispose(): IMutationTree<T>;
objectChanges: Set<string>;
root: IProxyStateTree<T>;
proxifier: IProxifier<T>;
mutations: IMutation[];
state: T;
trackPathListeners: Array<(path: string) => void>;
}
export interface ITrackCallback {
(mutations: IMutation[], paths: Array<string>, flushId: number, isAsync: boolean): void;
}
export interface ITrackScopedCallback<T extends object> {
(tree: ITrackStateTree<T>): any;
}
export interface ITrackStateTree<T extends object> {
addTrackingPath(path: string): void;
subscribe(cb: ITrackCallback): () => void;
track(): ITrackStateTree<T>;
trackScope(scope: ITrackScopedCallback<T>): any;
canTrack(): boolean;
canMutate(): boolean;
root: IProxyStateTree<T>;
proxifier: IProxifier<T>;
state: T;
pathDependencies: Set<string>;
trackPathListeners: Array<(path: string) => void>;
}
export interface IOptions {
delimiter?: string;
devmode?: boolean;
ssr?: boolean;
onSetFunction?: (...args: any[]) => any;
onGetFunction?: (...args: any[]) => any;
onGetter?: Function;
}
export interface IFlushCallback {
(mutations: IMutation[], paths: string[], flushId: number, isAsync: boolean): void;
}
export type TTree = IMutationTree<any> | ITrackStateTree<any>;
export interface IRemoveProxyCallback {
(path: string): void;
}
export interface IProxyStateTree<T extends object> {
addPathDependency(path: string, callback: ITrackCallback): void;
removePathDependency(path: string, callback: ITrackCallback): void;
getTrackStateTree(): ITrackStateTree<T>;
getMutationTree(): IMutationTree<T>;
setTrackStateTree(tree: ITrackStateTree<T> | null): void;
unsetTrackStateTree(tree: ITrackStateTree<T> | null): void;
clearTrackStateTree(): void;
disposeTree(proxy: TTree): void;
onMutation(cb: IMutationCallback): void;
flush(tree: IMutationTree<T>, isAsync: boolean): {
mutations: IMutation[];
flushId: number;
};
flush(trees: IMutationTree<T>[], isAsync: boolean): {
mutations: IMutation[];
flushId: number;
};
onFlush(cb: IFlushCallback): void;
rescope(value: any, tree: TTree): any;
sourceState: T;
state: T;
options: IOptions;
pathDependencies: {
[path: string]: Set<ITrackCallback>;
};
root: IProxyStateTree<T>;
proxifier: IProxifier<T>;
currentTree: TTree;
previousTree: TTree;
mutationTree: IMutationTree<T>;
mutationCallbacks: IMutationCallback[];
flushCallbacks: IFlushCallback[];
currentFlushId: number;
}