/// <reference types="node" />
import { ChildProcess } from "child_process";
import * as pacote from "pacote";
import { Extension, Package } from "./extension";
import { PackageManagerProgress, PackageManagerType } from "./package-manager";
export interface PackageInstallProgress extends PackageManagerProgress {
    pkg: Package;
}
/**
 * Resolve given package metadata.
 * @param spec This can be a package name with version, the url to a tgz or a local folder.
 * @returns Package metadata.
 */
export declare function fetchPackageMetadata(spec: string): Promise<pacote.ManifestResult>;
export declare class ExtensionManager {
    private installationPath;
    private sharedLock;
    private disposeLock;
    private packageManager;
    dotnetPath: string;
    static Create(installationPath: string, packageManagerType?: PackageManagerType, packageManagerPath?: string | undefined): Promise<ExtensionManager>;
    dispose(): Promise<void>;
    reset(): Promise<void>;
    private constructor();
    /**
     * Return the list of version for the given package name [+ version range]
     *
     * @param name Name of the package with or without version range.
     * @returns List of semver versions
     */
    getPackageVersions(name: string): Promise<string[]>;
    findPackage(name: string, version?: string): Promise<Package>;
    getInstalledExtension(name: string, version: string): Promise<Extension | null>;
    getInstalledExtensions(): Promise<Array<Extension>>;
    private static lock;
    installPackage(pkg: Package, force?: boolean, maxWait?: number, reportProgress?: (progress: PackageInstallProgress) => void): Promise<Extension>;
    removeExtension(extension: Extension): Promise<void>;
    start(extension: Extension, enableDebugger?: boolean): Promise<ChildProcess>;
    /**
     * Validate if present the extension system requirements.
     * @param extension Extension to validate.
     */
    private validateExtensionSystemRequirements;
}
//# sourceMappingURL=main.d.ts.map