import { GirXML, GirRepository, GirNamespace } from '@gi.ts/parser';
import { Logger } from './logger.js';
import { LibraryVersion } from './library-version.js';
import type { Dependency, OptionsGeneration, GirInclude, FileInfo } from './types/index.js';
import type { GirModule } from './gir-module.js';
import { GirNSRegistry } from './registry.js';
export declare class DependencyManager extends GirNSRegistry {
    protected readonly config: OptionsGeneration;
    protected log: Logger;
    protected _cache: {
        [packageName: string]: Dependency;
    };
    static instances: {
        [key: string]: DependencyManager;
    };
    protected constructor(config: OptionsGeneration);
    /**
     * Get the DependencyManager singleton instance
     */
    static getInstance(config?: OptionsGeneration): DependencyManager;
    protected parsePackageName(namespaceOrPackageName: string, version?: string): {
        packageName: string;
        namespace: string;
        version: string;
    };
    protected parseArgs(namespaceOrPackageNameOrRepo: string | GirRepository, version?: string, noOverride?: boolean): {
        repo: null;
        namespace: string;
        importNamespace: string;
        version: string;
        libraryVersion: LibraryVersion;
        packageName: string;
        importName: string;
        importPath: string;
        importDef: string;
        packageJsonImport: string;
        girXML: GirXML | null;
        path: string | null;
        filename: string;
        exists: boolean;
    } | {
        packageName: string;
        namespace: string;
        version: string;
        repo: GirRepository | null;
    };
    /**
     * Get all dependencies in the cache
     * @returns All dependencies in the cache
     */
    all(): Dependency[];
    getAllPackageNames(): string[];
    /**
     * Get the core dependencies
     * @returns
     */
    core(): Promise<Dependency[]>;
    createImportProperties(namespace: string, packageName: string, version: string): {
        importPath: string;
        importDef: string;
        packageJsonImport: string;
    };
    createImportPath(packageName: string, namespace: string, version: string): string;
    createImportDef(namespace: string, importPath: string): string;
    createPackageJsonImport(importPath: string): string;
    protected parseGir(path: string): Promise<{
        girXML: GirXML;
        repo: GirRepository;
        ns: GirNamespace | undefined;
        version: string | undefined;
    }>;
    protected parseGirAndReturnLatestVersion(filesInfo: FileInfo[]): Promise<{
        libraryVersion: LibraryVersion;
        girXML: GirXML;
        fileInfo: FileInfo;
    } | {
        libraryVersion: LibraryVersion;
        girXML: null;
        fileInfo: FileInfo;
    }>;
    /**
     * Get the dependency object by packageName
     * @param packageName The package name (with version affix) of the dependency
     * @returns The dependency object
     */
    get(packageName: string): Promise<Dependency>;
    /**
     * Get the dependency object by namespace and version
     * @param namespace The namespace of the dependency
     * @param version The version of the dependency
     * @returns The dependency object
     */
    get(namespace: string, version: string, noOverride?: boolean): Promise<Dependency>;
    /**
     * Get the dependency object by {@link GirRepository}
     * @param namespace The namespace of the dependency
     * @param version The version of the dependency
     * @returns The dependency object
     */
    get(repo: GirRepository, version?: string, noOverride?: boolean): Promise<Dependency>;
    /**
     * Get all dependencies with the given namespace
     * @param namespace The namespace of the dependency
     * @returns All dependencies with the given namespace
     */
    list(namespace: string): Dependency[];
    /**
     * Get girModule for dependency
     * @param girModules
     * @param packageName
     */
    getModule(girModules: GirModule[], dep: Dependency): GirModule | undefined;
    /**
     * Add all dependencies from an array of gir modules
     * @param girModules
     */
    addAll(girModules: GirModule[]): Promise<Dependency[]>;
    /**
     * Transforms a gir include object array to a dependency object array
     * @param girIncludes - Array of gir includes
     * @returns Array of dependencies
     */
    fromGirIncludes(girIncludes: GirInclude[]): Promise<Dependency[]>;
    /**
     * Check if multiple dependencies with the given namespace exist in the cache
     * @param namespace The namespace of the dependency
     * @returns
     */
    hasConflict(namespace: string): boolean;
    /**
     * get the latest version of the dependency with the given namespace
     * @param namespace The namespace of the dependency
     * @returns The latest version of the dependency
     */
    getLatestVersion(namespace: string): Dependency | undefined;
    /**
     * Check if the given version is the latest version of the dependency
     * @param namespace The namespace of the dependency
     * @param version The version of the dependency
     * @returns
     */
    isLatestVersion(namespace: string, version: string): boolean;
    /**
     * Find a dependency by it's namespace from the cache, if multiple versions are found, the latest version is returned
     * @param namespace The namespace of the dependency
     * @returns The dependency object or null if not found
     */
    find(namespace: string): Dependency | null;
    protected getPseudoPackage(packageName: string, namespace?: string, version?: string): Dependency;
    getGjs(): Dependency;
}
