import type { KubernetesCluster } from "../catalog-entities";
import type { AsyncResult } from "@openlens/utilities";
import type { Logger } from "@openlens/logger";
import type { KubectlApplyAll, KubectlDeleteAll } from "../kube-helpers/channels";
import type { ReadDirectory } from "../fs/read-directory.injectable";
import type { JoinPaths } from "../path/join-paths.injectable";
import type { ReadFile } from "../fs/read-file.injectable";
export interface ResourceApplyingStack {
    kubectlApplyFolder(folderPath: string, templateContext?: any, extraArgs?: string[]): Promise<string>;
    kubectlDeleteFolder(folderPath: string, templateContext?: any, extraArgs?: string[]): Promise<string>;
}
export interface ResourceStackDependencies {
    readonly logger: Logger;
    kubectlApplyAll: KubectlApplyAll;
    kubectlDeleteAll: KubectlDeleteAll;
    readDirectory: ReadDirectory;
    joinPaths: JoinPaths;
    readFile: ReadFile;
}
export declare class ResourceStack {
    protected readonly dependencies: ResourceStackDependencies;
    protected readonly cluster: KubernetesCluster;
    protected readonly name: string;
    constructor(dependencies: ResourceStackDependencies, cluster: KubernetesCluster, name: string);
    /**
     *
     * @param folderPath folder path that is searched for files defining kubernetes resources.
     * @param templateContext sets the template parameters that are to be applied to any templated kubernetes resources that are to be applied.
     */
    kubectlApplyFolder(folderPath: string, templateContext?: any, extraArgs?: string[]): Promise<string>;
    /**
     *
     * @param folderPath folder path that is searched for files defining kubernetes resources.
     * @param templateContext sets the template parameters that are to be applied to any templated kubernetes resources that are to be applied.
     */
    kubectlDeleteFolder(folderPath: string, templateContext?: any, extraArgs?: string[]): Promise<string>;
    protected applyResources(resources: string[], extraArgs?: string[]): AsyncResult<string, string>;
    protected deleteResources(resources: string[], extraArgs?: string[]): AsyncResult<string, string>;
    protected getAdditionalArgs(kubectlArgs: string[]): string[];
    protected renderTemplates(folderPath: string, templateContext: any): Promise<string[]>;
}
