import { Observer } from "./Observer"; import { ProxyTarget, Target } from "./proxyObserve"; export declare class Memoization { constructor(valueFunction: () => any, target: ProxyTarget, options: MemoizationOptions); options: MemoizationOptions; lastArgumentValues: never[]; proxyTarget: ProxyTarget; lastValue: any; dependentsChanged: boolean; context: Observer; valueFunction: () => any; closureFunction: any; getValue(args: any): any; argsChanged(args: any): boolean; updateLastValue(args: any): void; cleanup(): void; } export interface MemoizationOptions { wrapper: ((obj: any) => any) | undefined; resolver: ((obj: any) => any) | undefined; preFetch: boolean; } export declare function memoize(obj?: { new (...args: any[]): C; } | C, propOrProps?: ((cls: C) => any) | string | Array, options?: MemoizationOptions): (classPrototype: any, prop: string) => void; export declare function suspendable(obj?: { new (...args: any[]): C; } | C, propOrProps?: ((cls: C) => any) | string | Array, options?: {}): (classPrototype: any, prop: string) => void; export declare function isMemoized(prop: string, target: Target): boolean; export declare function createMemoization(prop: string, target: Target, valueFunction: any): Memoization | SnapshotGetterMemo; export declare class SnapshotGetterMemo { lastValue: any; options: any; constructor(value: Memoization | SnapshotGetterMemo); getValue(): any; } export declare function getSnapshotMemos(target: Target): { [key: string]: SnapshotGetterMemo; };