import { ClusterProviderAPI } from './clusterprovider/versions';
import { ClusterProviderV1 } from './clusterprovider/v1';
import { KubectlAPI } from './kubectl/versions';
import { KubectlV1 } from './kubectl/v1';
import { ClusterExplorerAPI } from './cluster-explorer/versions';
import { ClusterExplorerV1 } from './cluster-explorer/v1';
import { ClusterExplorerV1_1 } from './cluster-explorer/v1_1';
import { HelmAPI } from './helm/versions';
import { HelmV1 } from './helm/v1';
import { CloudExplorerAPI } from './cloudexplorer/versions';
import { CloudExplorerV1 } from './cloudexplorer/v1';
import { ConfigurationAPI } from './configuration/versions';
import { ConfigurationV1 } from './configuration/v1';
import { LocalTunnelDebuggerAPI } from './localtunneldebugger/versions';
import { LocalTunnelDebuggerV1 } from './localtunneldebugger/v1';
import { ConfigurationV1_1 } from './configuration/v1_1';
export { ClusterProviderAPI } from './clusterprovider/versions';
export { ClusterProviderV1 } from './clusterprovider/v1';
export { KubectlAPI } from './kubectl/versions';
export { KubectlV1 } from './kubectl/v1';
export { ClusterExplorerAPI } from './cluster-explorer/versions';
export { ClusterExplorerV1 } from './cluster-explorer/v1';
export { ClusterExplorerV1_1 } from './cluster-explorer/v1_1';
export { HelmAPI } from './helm/versions';
export { HelmV1 } from './helm/v1';
export { CloudExplorerAPI } from './cloudexplorer/versions';
export { CloudExplorerV1 } from './cloudexplorer/v1';
export { ConfigurationAPI } from './configuration/versions';
export { ConfigurationV1 } from './configuration/v1';
export { LocalTunnelDebuggerAPI } from './localtunneldebugger/versions';
export { LocalTunnelDebuggerV1 } from './localtunneldebugger/v1';
/**
 * Provides convenient access to the Kubernetes extension's API.
 * @example
 * import * as k8s from 'vscode-kubernetes-tools-api';
 * const clusterProviderAPI = await k8s.extension.clusterProvider.v1;
 */
export declare const extension: Extension;
export { MS_KUBERNETES_EXTENSION_ID } from './constants';
/**
 * Provides convenient access to the Kubernetes extension's API.
 */
export interface Extension {
    /**
     * Accesses a specific API version within the Kubernetes extension in a weakly typed way.
     * This differs from 'get' in that the TypeScript compiler will not infer the type of
     * the returned API from the component and version. You do not normally need to call this
     * method directly; in most cases you should use 'get'or one of the pre-defined accessors
     * instead.
     * @param component The component whose API you want to access.
     * @param version The version of the component API you want to access.
     * @returns An object containing either the API, or an indication of why the
     * API is not available.
     */
    getCore(component: string, version: string): Promise<API<any>>;
    /**
     * Accesses a specific API version within the Kubernetes extension. You do not normally need
     * to call this method directly: in most cases you should use one of the pre-defined accessors
     * instead.
     * @param component The component whose API you want to access.
     * @param version The version of the component API you want to access.
     * @returns An object containing either the API, or an indication of why the
     * API is not available.
     */
    get<T>(component: ComponentKey<T>, version: Version<T>): Promise<API<T>>;
    /**
     * Provides access to the Kubernetes extension's Cluster Provider API.
     */
    readonly clusterProvider: ClusterProviderAPI;
    /**
     * Provides access to the Kubernetes extension's Kubectl API.
     */
    readonly kubectl: KubectlAPI;
    /**
     * Provides access to the Kubernetes extension's Cluster Explorer API.
     */
    readonly clusterExplorer: ClusterExplorerAPI;
    /**
     * Provides access to the Kubernetes extension's Helm API.
     */
    readonly helm: HelmAPI;
    /**
     * Provides access to the Kubernetes extension's Cloud Explorer API.
     */
    readonly cloudExplorer: CloudExplorerAPI;
    /**
     * Provides access to the Kubernetes extension's Configuration API.
     */
    readonly configuration: ConfigurationAPI;
    /**
     * Provides access to the Kubernetes extension's Local Tunnel Debugger API.
     */
    readonly localTunnelDebugger: LocalTunnelDebuggerAPI;
}
/**
 * The result of unsuccessfully requesting an API from the Kubernetes extension.
 */
export interface APIUnavailable {
    /**
     * Contains the boolean value false, indicating that the requested API was unavailable.
     */
    readonly available: false;
    /**
     * The reason the API was unavailable.  This may be:
     * * 'version-unknown': The installed version of the extension does not know about the API
     *   you requested. This means the installed version is older than the API you are asking for.
     *   Typically you can prompt the user to upgrade the Kubernetes extension.
     * * 'version-removed': The installed version of the extension no longer supports the API
     *   you requested. This means you are asking for a version so old that it has been retired.
     *   You might prompt the user to upgrade *your* extension.
     * * 'extension-not-available': Visual Studio Code could not activate the Kubernetes extension,
     *   for example because it was not installed. Your extension should declare the Kubernetes
     *   extension as a dependency; you can also prompt the user to install the Kubernetes extension.
     */
    readonly reason: 'version-unknown' | 'version-removed' | 'extension-not-available';
}
/**
 * The result of successfully requesting an API from the Kubernetes extension.
 */
export interface APIAvailable<T> {
    /**
     * Contains the boolean value true, indicating that the requested API was available.
     */
    readonly available: true;
    /**
     * The API interface from the Kubernetes extension.
     */
    readonly api: T;
}
/**
 * The result of requesting an API from the Kubernetes extension - either the API object,
 * or an indication of why the API is not available. Use the 'available' property to
 * distinguish the two cases.
 */
export declare type API<T> = APIAvailable<T> | APIUnavailable;
/**
 * The type of the Kubernetes extension's raw API. You will not normally use this
 * directly: it is generally more convenient to use the 'extension' wrapper object.
 * But if you activate the extension directly using the Visual Studio Code
 * extensions API, then the result of that will be an APIBroker instance.
 */
export interface APIBroker {
    /**
     * Gets an API object for a particular version of a particular component within
     * the Kubernetes extension.
     * @param component The component whose API you want to access.
     * @param version The version of the component API that you want to access.
     */
    get(component: string, version: string): API<any>;
}
/**
 * A TypeScript type associating Kubernetes extension API component IDs with
 * API interface types in this package.
 */
export declare type ComponentKey<T> = T extends ClusterProviderV1 ? "clusterprovider" : T extends KubectlV1 ? "kubectl" : T extends ClusterExplorerV1 | ClusterExplorerV1_1 ? "clusterexplorer" : T extends HelmV1 ? "helm" : T extends CloudExplorerV1 ? "cloudexplorer" : T extends ConfigurationV1 ? "configuration" : T extends LocalTunnelDebuggerV1 ? "localtunneldebugger" : "invalid_api_interface";
/**
 * A TypeScript type associating Kubernetes extension API version IDs with
 * API interface types in this package.
 */
export declare type Version<T> = T extends ClusterProviderV1 ? "v1" : T extends KubectlV1 ? "v1" : T extends ClusterExplorerV1 | ClusterExplorerV1_1 ? "v1" | "v1_1" : T extends HelmV1 ? "v1" : T extends CloudExplorerV1 ? "v1" : T extends ConfigurationV1 | ConfigurationV1_1 ? "v1" | "v1_1" : T extends LocalTunnelDebuggerV1 ? "v1" : "invalid_api_interface";
