import { F } from "./util/Utils.js";
import { Operation, MemberOptions, LoggingOptions, ProfilingOptions, SnapshotOptions } from "./Options.js";
export declare class ReactiveSystem {
    static why(brief?: boolean): string;
    static getOperation<T>(method: F<T>): Operation<T>;
    static pullLastResult<T>(method: F<Promise<T>>, args?: any[]): T | undefined;
    static configureCurrentOperation(options: Partial<MemberOptions>): MemberOptions;
    static getRevisionOf(obj: any): number;
    static takeSnapshot<T>(obj: T): T;
    static dispose(obj: any): void;
    static get reactivityAutoStartDisabled(): boolean;
    static set reactivityAutoStartDisabled(value: boolean);
    static get isLogging(): boolean;
    static get loggingOptions(): LoggingOptions;
    static setLoggingMode(isOn: boolean, options?: LoggingOptions): void;
    static setLoggingHint<T extends object>(obj: T, name: string | undefined): void;
    static getLoggingHint<T extends object>(obj: T, full?: boolean): string | undefined;
    static setProfilingMode(isOn: boolean, options?: Partial<ProfilingOptions>): void;
}
export declare function atomicRun<T>(func: F<T>, ...args: any[]): T;
export declare function atomicRun<T>(options: SnapshotOptions, func: F<T>, ...args: any[]): T;
export declare function nonReactiveRun<T>(func: F<T>, ...args: any[]): T;
export declare function sensitiveRun<T>(sensitivity: boolean, func: F<T>, ...args: any[]): T;
export declare function contextualRun<T>(p: Promise<T>): Promise<T>;
export declare function trigger(enabled: boolean): (proto: object, prop: PropertyKey) => any;
export declare function trigger<T>(proto: object, prop: PropertyKey): any;
export declare function atomicBlock(proto: object, prop: PropertyKey, pd: PropertyDescriptor): any;
export declare function reaction(proto: object, prop: PropertyKey, pd: PropertyDescriptor): any;
export declare function cache(proto: object, prop: PropertyKey, pd: PropertyDescriptor): any;
export declare function options(value: Partial<MemberOptions>): F<any>;
