import { AttributeResolutionDirectiveSet, CdmCollection, CdmCorpusContext, CdmDocumentDefinition, CdmE2ERelationship, CdmEntityCollection, CdmEntityDeclarationDefinition, CdmFileStatus, cdmIncrementalPartitionType, CdmManifestDeclarationDefinition, CdmObject, CdmObjectDefinition, cdmObjectType, cdmRelationshipDiscoveryStyle, CdmTraitCollection, copyOptions, partitionFileStatusCheckType, resolveOptions, VisitCallback } from '../internal';
export declare class CdmManifestDefinition extends CdmDocumentDefinition implements CdmObjectDefinition, CdmFileStatus {
    private _TAG;
    static get objectType(): cdmObjectType;
    manifestName: string;
    readonly subManifests: CdmCollection<CdmManifestDeclarationDefinition>;
    readonly entities: CdmEntityCollection;
    readonly relationships: CdmCollection<CdmE2ERelationship>;
    readonly exhibitsTraits: CdmTraitCollection;
    explanation: string;
    lastFileStatusCheckTime: Date;
    lastFileModifiedTime: Date;
    lastChildFileModifiedTime: Date;
    constructor(ctx: CdmCorpusContext, name: string);
    getExplanation(): string;
    setExplanation(explanation: string): string;
    isDerivedFrom(base: string, resOpt?: resolveOptions): boolean;
    /**
     * @internal
     */
    getObjectPath(): string;
    visit(pathFrom: string, preChildren: VisitCallback, postChildren: VisitCallback): boolean;
    copy(resOpt?: resolveOptions, host?: CdmObject): CdmObject;
    /**
     * creates a resolved copy of the manifest.
     * newEntityDocumentNameFormat specifies a pattern to use when creating documents for resolved entites
     * the default is "{f}resolved/{n}.cdm.json" to avoid a document name conflict with documents in the same
     * folder as the manifest. every instance of the string {n} is replaced with the entity name from the source manifest
     * every instance of the string {f} is replaced with the folder path from the source manifest to the source entity
     * (if there is one that is possible as a relative location, else nothing)
     */
    createResolvedManifestAsync(newManifestName: string, newEntityDocumentNameFormat: string, directives?: AttributeResolutionDirectiveSet): Promise<CdmManifestDefinition>;
    populateManifestRelationshipsAsync(option?: cdmRelationshipDiscoveryStyle): Promise<void>;
    /**
     * @inheritdoc
     */
    fileStatusCheckAsync(partitionCheckType?: partitionFileStatusCheckType, incrementalType?: cdmIncrementalPartitionType): Promise<void>;
    /**
     * @inheritdoc
     */
    reportMostRecentTimeAsync(childTime: Date): Promise<void>;
    /**
     * @internal
     * Helper that fixes a path from local to absolute, gets the object from that path
     * then looks at the document where the object is found.
     * If dirty, the document is saved with the original name.
     */
    saveDirtyLink(relative: string, options: copyOptions): Promise<boolean>;
    /**
     * @internal
     * Helper that fixes a path from local to absolute.Gets the object from that path.
     * Created from saveDirtyLink in order to be able to save docs in parallel.
     * Represents the part of saveDirtyLink that could not be parallelized.
     */
    fetchDocumentDefinition(relativePath: string): Promise<CdmDocumentDefinition>;
    /**
     * @internal
     * Saves CdmDocumentDefinition if dirty.
     * Was created from SaveDirtyLink in order to be able to save docs in parallel.
     * Represents the part of SaveDirtyLink that could be parallelized.
     */
    saveDocumentIfDirty(docImp: CdmDocumentDefinition, options: copyOptions): Promise<boolean>;
    /**
     * @internal
     */
    saveLinkedDocuments(options?: copyOptions): Promise<boolean>;
    /**
     * @internal
     */
    getEntityPathFromDeclaration(entityDec: CdmEntityDeclarationDefinition, obj?: CdmObject): Promise<string>;
    /**
     * Query the manifest for a set of entities that match an input query
     * querySpec = a JSON object (or a string that can be parsed into one) of the form
     * {"entityName":"", "attributes":[{see QueryOnTraits for CdmEntityDefinition for details}]}
     * returns null for 0 results or an array of json objects, each matching the shape of the input query,
     * with entity and attribute names filled in
     */
    private queryOnTraitsAsync;
    private localizeRelToManifest;
    private isRelAllowed;
    /**
     * Adds imports for elevated purpose traits for relationships, then adds the relationships to the manifest.
     * The last import has the highest priority, so we insert the imports for traits to the beginning of the list.
     */
    private addElevatedTraitsAndRelationships;
}
