import { JS_DATA_TYPES, METADATA_TYPE } from './Constants';
import { IBaseRef } from '../api/IBaseRef';
import { IClassRef } from '../api/IClassRef';
import { ILookupRegistry } from '../api/ILookupRegistry';
export declare abstract class AbstractRef implements IBaseRef {
    /**
     * Type of this entry
     */
    readonly metaType: METADATA_TYPE;
    /**
     * Namespace better registry of this entry
     */
    namespace: string;
    private _cachedOptions;
    readonly name: string;
    readonly object: IClassRef;
    constructor(type: METADATA_TYPE, name: string, object?: IClassRef | Function | string, namespace?: string);
    getNamespace(): string;
    getSourceRef(): IClassRef;
    abstract getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef;
    abstract getRegistry(): ILookupRegistry;
    protected getOptionsEntry(): any;
    getOptions(key?: string, defaultValue?: any): any;
    setOptions(options: any): void;
    setOption(key: string, value: any): void;
    hasOption(key: string): boolean;
    /**
     * Return class ref
     */
    getClassRef(): IClassRef;
    /**
     * Get class for the entry
     *
     * @param create: create anonymous placeholder if no class exists
     */
    getClass(create?: boolean): Function;
    /**
     * Return the name of the class ref, if not exits then return null
     */
    get originalName(): string;
    /**
     * Return internal name (same as calling storingName)
     */
    get internalName(): string;
    /**
     * Return name in snake case notation
     */
    get machineName(): string;
    /**
     * Return internal name, check if internalName is set else check if name options is present
     *
     */
    get storingName(): any;
    abstract id(): string;
    /**
     * Return supported primitive data types
     */
    getSupportedDataTypes(): JS_DATA_TYPES[];
}
