import { CdmAttributeContext, CdmAttributeItem, CdmAttributeResolutionGuidance, CdmCollection, CdmCorpusContext, CdmEntityReference, CdmFolderDefinition, CdmObject, CdmObjectDefinitionBase, cdmObjectType, ResolvedAttributeSet, ResolvedAttributeSetBuilder, ResolvedEntity, ResolvedEntityReferenceSet, ResolvedTraitSetBuilder, resolveOptions, TraitSpec, VisitCallback } from '../internal';
export declare class CdmEntityDefinition extends CdmObjectDefinitionBase {
    private TAG;
    static get objectType(): cdmObjectType;
    get sourceName(): string;
    set sourceName(val: string);
    get description(): string;
    set description(val: string);
    get displayName(): string;
    set displayName(val: string);
    get version(): string;
    set version(val: string);
    get cdmSchemas(): string[];
    set cdmSchemas(val: string[]);
    get primaryKey(): string;
    /**
     * @internal
     */
    get isResolved(): boolean;
    entityName: string;
    private _extendsEntity?;
    get extendsEntity(): CdmEntityReference | undefined;
    set extendsEntity(value: CdmEntityReference);
    attributes: CdmCollection<CdmAttributeItem>;
    attributeContext?: CdmAttributeContext;
    /**
     * The resolution guidance for attributes taken from the entity extended by this entity.
     * @deprecated
     * Resolution guidance is being deprecated in favor of Projections. https://docs.microsoft.com/en-us/common-data-model/sdk/convert-logical-entities-resolved-entities#projection-overview
     */
    extendsEntityResolutionGuidance?: CdmAttributeResolutionGuidance;
    private rasb;
    private readonly traitToPropertyMap;
    private resolvingEntityReferences;
    constructor(ctx: CdmCorpusContext, entityName: string, extendsEntity?: CdmEntityReference);
    /**
     * @internal
     */
    getProperty(propertyName: string): any;
    getObjectType(): cdmObjectType;
    copy(resOpt?: resolveOptions, host?: CdmObject): CdmEntityDefinition;
    validate(): boolean;
    getName(): string;
    /**
     * @internal
     */
    addAttributeDef(attDef: CdmAttributeItem): CdmAttributeItem;
    visit(pathFrom: string, preChildren: VisitCallback, postChildren: VisitCallback): boolean;
    isDerivedFrom(base: string, resOpt?: resolveOptions): boolean;
    /**
     * @internal
     */
    constructResolvedTraits(rtsb: ResolvedTraitSetBuilder, resOpt: resolveOptions): void;
    /**
     * @internal
     */
    constructResolvedAttributes(resOpt: resolveOptions, under?: CdmAttributeContext): ResolvedAttributeSetBuilder;
    /**
     * @internal
     */
    countInheritedAttributes(resOpt: resolveOptions): number;
    /**
     * @internal
     * @deprecated
     */
    getResolvedEntity(resOpt: resolveOptions): ResolvedEntity;
    fetchResolvedEntityReference(resOpt?: resolveOptions): ResolvedEntityReferenceSet;
    /**
     * @internal
     */
    fetchAttributesWithTraits(resOpt: resolveOptions, queryFor: TraitSpec | TraitSpec[]): ResolvedAttributeSet;
    createResolvedEntityAsync(newEntName: string, resOpt?: resolveOptions, folder?: CdmFolderDefinition, newDocName?: string): Promise<CdmEntityDefinition>;
    /**
     * creates or sets the has.entitySchemaAbstractionLevel trait to logical, composition, resolved or unknown
     * todo: consider making this public API
     */
    private indicateAbstractionLevel;
    /**
     * Query the entity for a set of attributes that match an input query
     * querySpec = a JSON object (or a string that can be parsed into one) of the form
     * {"attributeName":"", "attributeOrdinal": -1, "traits":[see next]}
     * matched attributes have each of the traits in the array
     * the trait object is specified as
     * {"traitName": queried trait name or base trait name, (optional) "arguments":[{"argumentName": queried argument, "value": queried value}]}
     * null for 0 results or an array of json objects, each matching the shape of the input query, with attribute names filled in
     */
    private queryOnTraits;
}
