import { ArgumentValue, CdmConstantEntityDefinition, CdmTraitDefinition, CdmTraitReferenceBase, resolveOptions } from '../internal';
export declare class traitProfile {
    traitName: string | undefined;
    explanation: string | undefined;
    IS_A: traitProfile | undefined;
    references: traitProfile | undefined;
    verb: traitProfile | undefined;
    argumentValues: Map<string, object | string | undefined> | undefined;
    classifications: Array<traitProfile> | undefined;
    metaTraits: Array<traitProfile> | undefined;
    private static nextTrId;
    trId: string;
    constructor();
    isA(extendedName: string): boolean;
    appliedVerb(): traitProfile;
    isClassification(): boolean;
    copy(): traitProfile | undefined;
    static fetchProfileArgumentFromTraitArgument(value: ArgumentValue, resOpt: resolveOptions): object | string | undefined;
    static fetchConstantEntityFromProfileArgument(argValue: object | string | undefined, resOpt: resolveOptions): CdmConstantEntityDefinition | undefined;
    static consolidateList(toConsolidate: Array<traitProfile>, cache?: traitProfileCache): Array<traitProfile> | undefined;
    consolidate(cache?: traitProfileCache): traitProfile | undefined;
    /**
     * @internal
     */
    private static _consolidateList;
    /**
     * @internal
     */
    private takePromoValues;
    /**
     * @internal
     */
    private promoteFromBase;
    /**
     * @internal
     */
    private static promoteFromBaseList;
    /**
     * @internal
     */
    private removeNakedReferences;
    /**
     * @internal
     */
    private static removeNakedReferencesList;
    /**
     * @internal
     */
    static traitDefToProfile(traitDef: CdmTraitDefinition, resOpt: resolveOptions, isVerb: boolean, isMeta: boolean, cache: traitProfileCache): traitProfile | undefined;
    /**
     * @internal
     */
    static traitRefToProfile(trb: CdmTraitReferenceBase, resOpt: resolveOptions, isVerb: boolean, isMeta: boolean, includeArgs: boolean, cache: traitProfileCache): traitProfile | undefined;
    /**
     * @internal
     */
    static traitCollectionToProfileList(trCol: Array<CdmTraitReferenceBase>, resOpt: resolveOptions, accumulateInList: Array<traitProfile>, isMeta: boolean, cache: traitProfileCache): Array<traitProfile>;
    /**
     * @internal
     */
    removeClassifiersFromMeta(): void;
}
/**
 * @internal
 * a helper object that encapsulates the work of producing a 'key' for a trait profile
 * a key is a string that can distinctly identity the trait name, arguments and any applied
 * trait combinations.
 * the goal is that two traitProfiles with the same childrent and names etc. will produce identical
 * keys and can be considered to be the same object
 */
export declare class traitProfileKeyFactory {
    /**
     * @internal
     * returns a key for a collection of trait profiles as [prof key, prof key]
     */
    static collectionGetKey(col: Array<traitProfile>): string;
    /**
     * @internal
     * get the key for a profile
     * form is traitName i:{isA key} r:{references key} v:{verb key} a:{arguments key} c:{classifications key} m:{meta traits key}
     */
    static getKey(prof: traitProfile): string;
}
export declare class traitProfileCache {
    stack: Set<string>;
    traitDefToProfile: Map<CdmTraitDefinition, traitProfile>;
    traitDefToProfileNoClassifiers: Map<CdmTraitDefinition, traitProfile>;
    traitDefToProfileNoMeta: Map<CdmTraitDefinition, traitProfile>;
    profToPromotedProfile: Map<traitProfile, traitProfile>;
    profToCleanedProfile: Map<traitProfile, traitProfile>;
    referenceCache: Map<string, traitProfile>;
    constructor();
    /**
     * @internal
     */
    addContext(level: string): boolean;
    /**
     * @internal
     */
    removeContext(level: string): boolean;
    /**
     * @internal
     */
    saveDefinitionProfile(traitDef: CdmTraitDefinition, defProf: traitProfile, noMeta: boolean, noClassifiers: boolean): traitProfile | undefined;
    /**
     * @internal
     */
    getDefinitionProfile(traitDef: CdmTraitDefinition, noMeta: boolean, noClassifiers: boolean): traitProfile | undefined;
    /**
     * @internal
     */
    savePromotedDefinitionProfile(promoted: traitProfile, defProf: traitProfile): traitProfile | undefined;
    /**
     * @internal
     */
    getPromotedDefinitionProfile(profToFind: traitProfile): traitProfile | undefined;
    /**
     * @internal
     */
    saveCleanedDefinitionProfile(cleaned: traitProfile, promoted: traitProfile): traitProfile | undefined;
    /**
     * @internal
     */
    getCleanedDefinitionProfile(promoted: traitProfile): traitProfile | undefined;
    /**
     * returns a traitProfile from the cache that is exactly like the supplied profile
     * OR adds the supplied profile to the cache
     */
    getEquivalentReference(prof: traitProfile): traitProfile | undefined;
}
