import { ProxyPropertyKey } from './shared';
declare type ValueObservedCallback = (obj: any, key: ProxyPropertyKey) => void;
declare type ValueMutatedCallback = (obj: any, key: ProxyPropertyKey) => void;
declare type IsObservableCallback = (value: any) => boolean;
export interface ObservableMembraneInit {
    valueMutated?: ValueMutatedCallback;
    valueObserved?: ValueObservedCallback;
    valueIsObservable?: IsObservableCallback;
    tagPropertyKey?: ProxyPropertyKey;
}
export declare class ObservableMembrane {
    valueMutated: ValueMutatedCallback;
    valueObserved: ValueObservedCallback;
    valueIsObservable: IsObservableCallback;
    tagPropertyKey: ProxyPropertyKey | undefined;
    private readOnlyObjectGraph;
    private reactiveObjectGraph;
    constructor(options?: ObservableMembraneInit);
    getProxy(value: any): any;
    getReadOnlyProxy(value: any): any;
    unwrapProxy(p: any): any;
    private getReactiveHandler;
    private getReadOnlyHandler;
}
export {};
