import { ProxyPropertyKey } from './shared';
import { ObservableMembrane } from './observable-membrane';
export declare type ShadowTarget = object;
export declare abstract class BaseProxyHandler {
    originalTarget: any;
    membrane: ObservableMembrane;
    constructor(membrane: ObservableMembrane, value: any);
    abstract wrapValue(value: any): any;
    abstract wrapGetter(originalGet: () => any): () => any;
    abstract wrapSetter(originalSet: (v: any) => void): (v: any) => void;
    wrapDescriptor(descriptor: PropertyDescriptor): PropertyDescriptor;
    copyDescriptorIntoShadowTarget(shadowTarget: ShadowTarget, key: ProxyPropertyKey): void;
    lockShadowTarget(shadowTarget: ShadowTarget): void;
    abstract set(shadowTarget: ShadowTarget, key: ProxyPropertyKey, value: any): boolean;
    abstract deleteProperty(shadowTarget: ShadowTarget, key: ProxyPropertyKey): boolean;
    abstract setPrototypeOf(shadowTarget: ShadowTarget, prototype: any): any;
    abstract preventExtensions(shadowTarget: ShadowTarget): boolean;
    abstract defineProperty(shadowTarget: ShadowTarget, key: ProxyPropertyKey, descriptor: PropertyDescriptor): boolean;
    apply(shadowTarget: ShadowTarget, thisArg: any, argArray: any[]): void;
    construct(shadowTarget: ShadowTarget, argArray: any, newTarget?: any): any;
    get(shadowTarget: ShadowTarget, key: ProxyPropertyKey): any;
    has(shadowTarget: ShadowTarget, key: ProxyPropertyKey): boolean;
    ownKeys(shadowTarget: ShadowTarget): ProxyPropertyKey[];
    isExtensible(shadowTarget: ShadowTarget): boolean;
    getPrototypeOf(shadowTarget: ShadowTarget): object;
    getOwnPropertyDescriptor(shadowTarget: ShadowTarget, key: ProxyPropertyKey): PropertyDescriptor | undefined;
}
