import { Stack } from "../../../core";
import { FileSet, IFileSetProducer } from './file-set';
/**
 * (experimental) A generic Step which can be added to a Pipeline.
 *
 * Steps can be used to add Sources, Build Actions and Validations
 * to your pipeline.
 *
 * This class is abstract. See specific subclasses of Step for
 * useful steps to add to your Pipeline
 *
 * @experimental
 */
export declare abstract class Step implements IFileSetProducer {
    /** Identifier for this step */
    readonly id: string;
    /**
     * (experimental) The list of FileSets consumed by this Step.
     *
     * @experimental
     */
    readonly dependencyFileSets: FileSet[];
    /**
     * (experimental) Whether or not this is a Source step.
     *
     * What it means to be a Source step depends on the engine.
     *
     * @experimental
     */
    readonly isSource: boolean;
    private _primaryOutput?;
    /**
     * @param id Identifier for this step.
     * @experimental
     */
    constructor(
    /** Identifier for this step */
    id: string);
    /**
     * (experimental) Return the steps this step depends on, based on the FileSets it requires.
     *
     * @experimental
     */
    get dependencies(): Step[];
    /**
     * (experimental) Return a string representation of this Step.
     *
     * @experimental
     */
    toString(): string;
    /**
     * (experimental) The primary FileSet produced by this Step.
     *
     * Not all steps produce an output FileSet--if they do
     * you can substitute the `Step` object for the `FileSet` object.
     *
     * @experimental
     */
    get primaryOutput(): FileSet | undefined;
    /**
     * (experimental) Add an additional FileSet to the set of file sets required by this step.
     *
     * This will lead to a dependency on the producer of that file set.
     *
     * @experimental
     */
    protected addDependencyFileSet(fs: FileSet): void;
    /**
     * (experimental) Configure the given FileSet as the primary output of this step.
     *
     * @experimental
     */
    protected configurePrimaryOutput(fs: FileSet): void;
}
/**
 * (experimental) Instructions for additional steps that are run at stack level.
 *
 * @experimental
 */
export interface StackSteps {
    /**
     * (experimental) The stack you want the steps to run in.
     *
     * @experimental
     */
    readonly stack: Stack;
    /**
     * (experimental) Steps that execute before stack is prepared.
     *
     * @default - no additional steps
     * @experimental
     */
    readonly pre?: Step[];
    /**
     * (experimental) Steps that execute after stack is prepared but before stack is deployed.
     *
     * @default - no additional steps
     * @experimental
     */
    readonly changeSet?: Step[];
    /**
     * (experimental) Steps that execute after stack is deployed.
     *
     * @default - no additional steps
     * @experimental
     */
    readonly post?: Step[];
}
