import * as cdk from "../../../core";
import { StageDeployment } from './stage-deployment';
import { StackSteps, Step } from './step';
/**
 * (experimental) Construction properties for a `Wave`.
 *
 * @experimental
 */
export interface WaveProps {
    /**
     * (experimental) Additional steps to run before any of the stages in the wave.
     *
     * @default - No additional steps
     * @experimental
     */
    readonly pre?: Step[];
    /**
     * (experimental) Additional steps to run after all of the stages in the wave.
     *
     * @default - No additional steps
     * @experimental
     */
    readonly post?: Step[];
}
/**
 * (experimental) Multiple stages that are deployed in parallel.
 *
 * @experimental
 */
export declare class Wave {
    /** Identifier for this Wave */
    readonly id: string;
    /**
     * (experimental) Additional steps that are run before any of the stages in the wave.
     *
     * @experimental
     */
    readonly pre: Step[];
    /**
     * (experimental) Additional steps that are run after all of the stages in the wave.
     *
     * @experimental
     */
    readonly post: Step[];
    /**
     * (experimental) The stages that are deployed in this wave.
     *
     * @experimental
     */
    readonly stages: StageDeployment[];
    /**
     * @param id Identifier for this Wave.
     * @experimental
     */
    constructor(
    /** Identifier for this Wave */
    id: string, props?: WaveProps);
    /**
     * (experimental) Add a Stage to this wave.
     *
     * It will be deployed in parallel with all other stages in this
     * wave.
     *
     * @experimental
     */
    addStage(stage: cdk.Stage, options?: AddStageOpts): StageDeployment;
    /**
     * (experimental) Add an additional step to run before any of the stages in this wave.
     *
     * @experimental
     */
    addPre(...steps: Step[]): void;
    /**
     * (experimental) Add an additional step to run after all of the stages in this wave.
     *
     * @experimental
     */
    addPost(...steps: Step[]): void;
}
/**
 * (experimental) Options to pass to `addStage`.
 *
 * @experimental
 */
export interface AddStageOpts {
    /**
     * (experimental) Additional steps to run before any of the stacks in the stage.
     *
     * @default - No additional steps
     * @experimental
     */
    readonly pre?: Step[];
    /**
     * (experimental) Additional steps to run after all of the stacks in the stage.
     *
     * @default - No additional steps
     * @experimental
     */
    readonly post?: Step[];
    /**
     * (experimental) Instructions for stack level steps.
     *
     * @default - No additional instructions
     * @experimental
     */
    readonly stackSteps?: StackSteps[];
}
/**
 * (experimental) Options to pass to `addWave`.
 *
 * @experimental
 */
export interface WaveOptions {
    /**
     * (experimental) Additional steps to run before any of the stages in the wave.
     *
     * @default - No additional steps
     * @experimental
     */
    readonly pre?: Step[];
    /**
     * (experimental) Additional steps to run after all of the stages in the wave.
     *
     * @default - No additional steps
     * @experimental
     */
    readonly post?: Step[];
}
