@turbox3d/reactivity
Version:
Large-scale reactive state management library
65 lines (64 loc) • 2.44 kB
TypeScript
import { ECollectType } from '../const/enums';
import { KeyPathType } from '../core/domain';
import { MaterialCallStackRecord } from './materialCallStack';
export declare enum EEventName {
storeOnActive = "storeOnActive",
beforeStoreChange = "beforeStoreChange",
afterStoreChange = "afterStoreChange",
asyncAfterStoreChange = "asyncAfterStoreChange",
setProperty = "setProperty",
materialCallStackChange = "materialCallStackChange"
}
export interface SetPropertyEvent {
stackId?: number;
domain: string;
keyPath: Array<{
type: KeyPathType;
value: string;
}>;
newValue: any;
oldValue: any;
time: number;
type: ECollectType;
}
export interface BeforeStoreChangeEvent {
domain?: string;
method: string;
args: any[];
state: any;
time: number;
stackId?: number;
}
export interface AfterStoreChangeEvent {
domain?: string;
method: string;
args: any[];
state: any;
async: boolean;
time: number;
stackId?: number;
}
export interface MaterialCallStackChangeEvent {
stack: MaterialCallStackRecord[];
action: 'POP' | 'PUSH';
time: number;
currentStack?: MaterialCallStackRecord;
}
declare class Emitter {
private listeners;
on(eventName: EEventName.storeOnActive, callback: () => void): void;
on(eventName: EEventName.setProperty, callback: (event: SetPropertyEvent) => void): void;
on(eventName: EEventName.beforeStoreChange, callback: (event: BeforeStoreChangeEvent) => void): void;
on(eventName: EEventName.afterStoreChange, callback: (event: AfterStoreChangeEvent) => void): void;
on(eventName: EEventName.asyncAfterStoreChange, callback: (event: AfterStoreChangeEvent) => void): void;
on(eventName: EEventName.materialCallStackChange, callback: (event: MaterialCallStackChangeEvent) => void): void;
emit(eventName: EEventName.storeOnActive): void;
emit(eventName: EEventName.setProperty, args: SetPropertyEvent): void;
emit(eventName: EEventName.beforeStoreChange, args: BeforeStoreChangeEvent): void;
emit(eventName: EEventName.afterStoreChange, args: AfterStoreChangeEvent): void;
emit(eventName: EEventName.asyncAfterStoreChange, args: AfterStoreChangeEvent): void;
emit(eventName: EEventName.materialCallStackChange, args: MaterialCallStackChangeEvent): void;
off(eventName: EEventName): void;
}
export declare const emitter: Emitter;
export {};