import { CdmCorpusContext, CdmObject, cdmObjectSimple, cdmObjectType, CdmTypeAttributeDefinition, resolveOptions, VisitCallback } from '../internal';
/**
 * @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
 */
export declare class CdmAttributeResolutionGuidance extends cdmObjectSimple implements CdmAttributeResolutionGuidance {
    removeAttribute?: boolean;
    /**
     * A list of strings, one for each 'directive' that should be always imposed at this attribute definition
     */
    imposedDirectives?: string[];
    /**
     * A list of strings, one for each 'directive' that should be removed if previously imposed
     */
    removedDirectives?: string[];
    /**
     * The supplied attribute definition will be added to the Entity after this attribute definition with a trait indicating its supporting role on this.
     */
    addSupportingAttribute?: CdmTypeAttributeDefinition;
    /**
     * If 'one' then there is a single instance of the attribute or entity used. 'many' indicates multiple instances and the 'expansion' properties will describe array enumeration to use when needed.
     */
    cardinality?: string;
    /**
     * Format specifier for generated attribute names. May contain a single occurence of ('{a} or 'A'), ('{m}' or '{M}') and '{o}' for the base (a/A)ttribute name, any (m/M)ember attributes from entities and array (o)rdinal. examples: '{a}{o}.{m}' could produce 'address2.city', '{a}{o}' gives 'city1'. Using '{A}' or '{M}' will uppercase the first letter of the name portions.
     */
    renameFormat?: string;
    expansion?: {
        startingOrdinal?: number;
        /**
         * the greatest number of time that the attribute pattern should be repeated.
         */
        maximumExpansion?: number;
        /**
         * The supplied attribute definition will be added to the Entity to represent the total number of instances found in the data.
         */
        countAttribute?: CdmTypeAttributeDefinition;
    };
    /**
     * Parameters that control the use of foreign keys to reference entity instances instead of imbedding the entity in a nested way.
     */
    entityByReference?: {
        /**
         * explicitly, is a reference allowed?
         */
        allowReference?: boolean;
        /**
         * if true, a foreign key attribute will be added to the entity even when the entity attribute is imbedded in a nested way.
         */
        alwaysIncludeForeignKey?: boolean;
        /**
         * After a given depth of non-reference nesting using entity attributes, the 'referenceOnly' directive will be imposed.
         */
        referenceOnlyAfterDepth?: number;
        /**
         * The supplied attribute definition will be added to the Entity to hold a foreign key value for the referenced entity.
         */
        foreignKeyAttribute?: CdmTypeAttributeDefinition;
    };
    /**
     * used to indicate that this attribute select either 'one' or 'all' of the sub-attributes from an entity. If the 'structured' directive is set, this trait causes resolved attributes to end up in groups rather than a flattend list.
     */
    selectsSubAttribute?: {
        /**
         * used to indicate either 'one' or 'all' sub-attributes selected.
         */
        selects?: string;
        /**
         * The supplied attribute definition will be added to the Entity to hold a description of the single attribute that was selected from the sub-entity when selects is 'one'
         */
        selectedTypeAttribute?: CdmTypeAttributeDefinition;
        selectsSomeTakeNames?: string[];
        selectsSomeAvoidNames?: string[];
    };
    static get objectType(): cdmObjectType;
    constructor(ctx: CdmCorpusContext);
    getObjectType(): cdmObjectType;
    copy(resOpt?: resolveOptions, host?: CdmObject): CdmObject;
    /**
     * @internal
     */
    updateAttributeDefaults(attName: string, owner: CdmObject): void;
    validate(): boolean;
    visit(pathFrom: string, preChildren: VisitCallback, postChildren: VisitCallback): boolean;
    /**
     * @internal
     */
    combineResolutionGuidance(addIn: CdmAttributeResolutionGuidance): CdmAttributeResolutionGuidance;
}
