/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { type Clazz } from '@finos/legend-shared';
import type { PackageableElement } from '../graph/metamodel/pure/packageableElements/PackageableElement.js';
import type { Enumeration } from '../graph/metamodel/pure/packageableElements/domain/Enumeration.js';
import type { Type } from '../graph/metamodel/pure/packageableElements/domain/Type.js';
import type { Class } from '../graph/metamodel/pure/packageableElements/domain/Class.js';
import type { Mapping } from '../graph/metamodel/pure/packageableElements/mapping/Mapping.js';
import type { Profile } from '../graph/metamodel/pure/packageableElements/domain/Profile.js';
import { Package } from '../graph/metamodel/pure/packageableElements/domain/Package.js';
import type { ConcreteFunctionDefinition } from './metamodel/pure/packageableElements/function/ConcreteFunctionDefinition.js';
import type { Store } from '../graph/metamodel/pure/packageableElements/store/Store.js';
import type { Association } from '../graph/metamodel/pure/packageableElements/domain/Association.js';
import type { Service } from '../graph/metamodel/pure/packageableElements/service/Service.js';
import { BasicModel } from '../graph/BasicModel.js';
import type { PackageableRuntime } from '../graph/metamodel/pure/packageableElements/runtime/PackageableRuntime.js';
import type { PackageableConnection } from '../graph/metamodel/pure/packageableElements/connection/PackageableConnection.js';
import type { FileGenerationSpecification } from '../graph/metamodel/pure/packageableElements/fileGeneration/FileGenerationSpecification.js';
import type { GenerationSpecification } from '../graph/metamodel/pure/packageableElements/generationSpecification/GenerationSpecification.js';
import type { Measure } from '../graph/metamodel/pure/packageableElements/domain/Measure.js';
import type { SectionIndex } from '../graph/metamodel/pure/packageableElements/section/SectionIndex.js';
import { type EntitiesWithOrigin } from '@finos/legend-storage';
import type { Database } from './metamodel/pure/packageableElements/store/relational/model/Database.js';
import type { DataElement } from './metamodel/pure/packageableElements/data/DataElement.js';
import type { ExecutionEnvironmentInstance } from './metamodel/pure/packageableElements/service/ExecutionEnvironmentInstance.js';
import { type GraphDataOrigin } from './GraphDataOrigin.js';
import type { FunctionActivator } from './metamodel/pure/packageableElements/function/FunctionActivator.js';
import type { PureGraphPlugin } from './PureGraphPlugin.js';
import type { Testable } from './metamodel/pure/test/Testable.js';
import type { IngestDefinition } from './metamodel/pure/packageableElements/ingest/IngestDefinition.js';
import type { DataProduct } from './metamodel/pure/dataProduct/DataProduct.js';
export declare const DEPENDENCY_ROOT_PACKAGE_PREFIX = "@dependency__";
export declare const generateDependencyRootPackageName: (dependencyKey: string) => string;
export declare const extractDependencyGACoordinateFromRootPackageName: (packageName: string) => string | undefined;
export declare class DependencyModel extends BasicModel {
    constructor(extensionElementClasses: PureGraphPlugin[], root: Package, origin: GraphDataOrigin);
}
export declare class DependencyManager {
    private readonly graphPlugins;
    private _origin;
    roots: Package[];
    projectDependencyModelsIndex: Map<string, BasicModel>;
    constructor(graphPlugins: PureGraphPlugin[]);
    /**
     * Here we create and index a graph for each dependency
     */
    initialize(dependencyEntitiesIndex: Map<string, EntitiesWithOrigin>): void;
    get numberOfDependencies(): number;
    get hasDependencies(): boolean;
    get dependencyGraphs(): BasicModel[];
    get allOwnElements(): PackageableElement[];
    get origin(): GraphDataOrigin | undefined;
    setOrigin(val: GraphDataOrigin): void;
    getOwnNullableSectionIndex: (path: string) => SectionIndex | undefined;
    getOwnNullableProfile: (path: string) => Profile | undefined;
    getOwnNullableType: (path: string) => Type | undefined;
    getOwnNullableClass: (path: string) => Class | undefined;
    getOwnNullableEnumeration: (path: string) => Enumeration | undefined;
    getOwnNullableMeasure: (path: string) => Measure | undefined;
    getOwnNullableAssociation: (path: string) => Association | undefined;
    getOwnNullableFunction: (path: string) => ConcreteFunctionDefinition | undefined;
    getOwnNullableFunctionActivator: (path: string) => FunctionActivator | undefined;
    getOwnNullableStore: (path: string) => Store | undefined;
    getOwnNullableDataProduct: (path: string) => DataProduct | undefined;
    getOwnNullableIngestDefinition: (path: string) => IngestDefinition | undefined;
    getOwnNullableMapping: (path: string) => Mapping | undefined;
    getOwnNullableConnection: (path: string) => PackageableConnection | undefined;
    getOwnNullableRuntime: (path: string) => PackageableRuntime | undefined;
    getOwnNullableService: (path: string) => Service | undefined;
    getOwnNullableGenerationSpecification: (path: string) => GenerationSpecification | undefined;
    getOwnNullableFileGeneration: (path: string) => FileGenerationSpecification | undefined;
    getOwnNullableDataElement: (path: string) => DataElement | undefined;
    getOwnExecutionEnvironment: (path: string) => ExecutionEnvironmentInstance | undefined;
    getOwnNullableExtensionElement<T extends PackageableElement>(path: string, extensionElementClass: Clazz<T>): T | undefined;
    get sectionIndices(): SectionIndex[];
    get profiles(): Profile[];
    get enumerations(): Enumeration[];
    get measures(): Measure[];
    get classes(): Class[];
    get types(): Type[];
    get associations(): Association[];
    get functions(): ConcreteFunctionDefinition[];
    get functionActivators(): FunctionActivator[];
    get stores(): Store[];
    get databases(): Database[];
    get mappings(): Mapping[];
    get services(): Service[];
    get runtimes(): PackageableRuntime[];
    get connections(): PackageableConnection[];
    get dataElements(): DataElement[];
    get generationSpecifications(): GenerationSpecification[];
    get fileGenerations(): FileGenerationSpecification[];
    get testables(): Testable[];
    get executionEnvironments(): ExecutionEnvironmentInstance[];
    get ingests(): IngestDefinition[];
    get dataProducts(): DataProduct[];
    getExtensionElements<T extends PackageableElement>(extensionElementClass: Clazz<T>): T[];
    getModel(projectId: string): BasicModel;
    getNullableElement(path: string, includePackage?: boolean): PackageableElement | undefined;
    getPackages(path: string): Package[];
    getElementOrigin(element: PackageableElement): string | undefined;
}
//# sourceMappingURL=DependencyManager.d.ts.map