import { CloudAssemblyBuilder } from "../../../cx-api";
import { DockerImageAssetLocation, DockerImageAssetSource, FileAssetLocation, FileAssetSource } from '../assets';
import { Stack } from '../stack';
/**
 * (experimental) Encodes information how a certain Stack should be deployed.
 *
 * @experimental
 */
export interface IStackSynthesizer {
    /**
     * (experimental) Bind to the stack this environment is going to be used on.
     *
     * Must be called before any of the other methods are called.
     *
     * @experimental
     */
    bind(stack: Stack): void;
    /**
     * (experimental) Register a File Asset.
     *
     * Returns the parameters that can be used to refer to the asset inside the template.
     *
     * @experimental
     */
    addFileAsset(asset: FileAssetSource): FileAssetLocation;
    /**
     * (experimental) Register a Docker Image Asset.
     *
     * Returns the parameters that can be used to refer to the asset inside the template.
     *
     * @experimental
     */
    addDockerImageAsset(asset: DockerImageAssetSource): DockerImageAssetLocation;
    /**
     * (experimental) Synthesize the associated stack to the session.
     *
     * @experimental
     */
    synthesize(session: ISynthesisSession): void;
}
/**
 * (experimental) Represents a single session of synthesis.
 *
 * Passed into `Construct.synthesize()` methods.
 *
 * @experimental
 */
export interface ISynthesisSession {
    /**
     * (experimental) The output directory for this synthesis session.
     *
     * @experimental
     */
    outdir: string;
    /**
     * (experimental) Cloud assembly builder.
     *
     * @experimental
     */
    assembly: CloudAssemblyBuilder;
    /**
     * (experimental) Whether the stack should be validated after synthesis to check for error metadata.
     *
     * @default - false
     * @experimental
     */
    validateOnSynth?: boolean;
}
