/**
 * (experimental) Bundling options.
 *
 * @experimental
 */
export interface BundlingOptions {
    /**
     * (experimental) The Docker image where the command will run.
     *
     * @experimental
     */
    readonly image: DockerImage;
    /**
     * (experimental) The entrypoint to run in the Docker container.
     *
     * @default - run the entrypoint defined in the image
     * @see https://docs.docker.com/engine/reference/builder/#entrypoint
     * @experimental
     * @example
     *
     * ['/bin/sh', '-c']
     */
    readonly entrypoint?: string[];
    /**
     * (experimental) The command to run in the Docker container.
     *
     * @default - run the command defined in the image
     * @see https://docs.docker.com/engine/reference/run/
     * @experimental
     * @example
     *
     * ['npm', 'install']
     */
    readonly command?: string[];
    /**
     * (experimental) Additional Docker volumes to mount.
     *
     * @default - no additional volumes are mounted
     * @experimental
     */
    readonly volumes?: DockerVolume[];
    /**
     * (experimental) The environment variables to pass to the Docker container.
     *
     * @default - no environment variables.
     * @experimental
     */
    readonly environment?: {
        [key: string]: string;
    };
    /**
     * (experimental) Working directory inside the Docker container.
     *
     * @default /asset-input
     * @experimental
     */
    readonly workingDirectory?: string;
    /**
     * (experimental) The user to use when running the Docker container.
     *
     * user | user:group | uid | uid:gid | user:gid | uid:group
     *
     * @default - uid:gid of the current user or 1000:1000 on Windows
     * @see https://docs.docker.com/engine/reference/run/#user
     * @experimental
     */
    readonly user?: string;
    /**
     * (experimental) Local bundling provider.
     *
     * The provider implements a method `tryBundle()` which should return `true`
     * if local bundling was performed. If `false` is returned, docker bundling
     * will be done.
     *
     * @default - bundling will only be performed in a Docker container
     * @experimental
     */
    readonly local?: ILocalBundling;
    /**
     * (experimental) The type of output that this bundling operation is producing.
     *
     * @default BundlingOutput.AUTO_DISCOVER
     * @experimental
     */
    readonly outputType?: BundlingOutput;
}
/**
 * (experimental) The type of output that a bundling operation is producing.
 *
 * @experimental
 */
export declare enum BundlingOutput {
    /**
     * (experimental) The bundling output directory includes a single .zip or .jar file which will be used as the final bundle. If the output directory does not include exactly a single archive, bundling will fail.
     *
     * @experimental
     */
    ARCHIVED = "archived",
    /**
     * (experimental) The bundling output directory contains one or more files which will be archived and uploaded as a .zip file to S3.
     *
     * @experimental
     */
    NOT_ARCHIVED = "not-archived",
    /**
     * (experimental) If the bundling output directory contains a single archive file (zip or jar) it will be used as the bundle output as-is.
     *
     * Otherwise all the files in the bundling output directory will be zipped.
     *
     * @experimental
     */
    AUTO_DISCOVER = "auto-discover"
}
/**
 * (experimental) Local bundling.
 *
 * @experimental
 */
export interface ILocalBundling {
    /**
     * (experimental) This method is called before attempting docker bundling to allow the bundler to be executed locally.
     *
     * If the local bundler exists, and bundling
     * was performed locally, return `true`. Otherwise, return `false`.
     *
     * @param outputDir the directory where the bundled asset should be output.
     * @param options bundling options for this asset.
     * @experimental
     */
    tryBundle(outputDir: string, options: BundlingOptions): boolean;
}
/**
 * (experimental) A Docker image.
 *
 * @experimental
 */
export declare class DockerImage {
    readonly image: string;
    /**
     * (experimental) Builds a Docker image.
     *
     * @param path The path to the directory containing the Docker file.
     * @param options Docker build options.
     * @experimental
     */
    static fromBuild(path: string, options?: DockerBuildOptions): DockerImage;
    /**
     * (experimental) Reference an image on DockerHub or another online registry.
     *
     * @param image the image name.
     * @experimental
     */
    static fromRegistry(image: string): DockerImage;
    /**
     * @param image The Docker image.
     * @experimental
     */
    constructor(image: string, _imageHash?: string);
    /**
     * (experimental) Provides a stable representation of this image for JSON serialization.
     *
     * @returns The overridden image name if set or image hash name in that order
     * @experimental
     */
    toJSON(): string;
    /**
     * (experimental) Runs a Docker image.
     *
     * @experimental
     */
    run(options?: DockerRunOptions): void;
    /**
     * (experimental) Copies a file or directory out of the Docker image to the local filesystem.
     *
     * If `outputPath` is omitted the destination path is a temporary directory.
     *
     * @param imagePath the path in the Docker image.
     * @param outputPath the destination path for the copy operation.
     * @returns the destination path
     * @experimental
     */
    cp(imagePath: string, outputPath?: string): string;
}
/**
 * (experimental) A Docker volume.
 *
 * @experimental
 */
export interface DockerVolume {
    /**
     * (experimental) The path to the file or directory on the host machine.
     *
     * @experimental
     */
    readonly hostPath: string;
    /**
     * (experimental) The path where the file or directory is mounted in the container.
     *
     * @experimental
     */
    readonly containerPath: string;
    /**
     * (experimental) Mount consistency.
     *
     * Only applicable for macOS
     *
     * @default DockerConsistency.DELEGATED
     * @see https://docs.docker.com/storage/bind-mounts/#configure-mount-consistency-for-macos
     * @experimental
     */
    readonly consistency?: DockerVolumeConsistency;
}
/**
 * (experimental) Supported Docker volume consistency types.
 *
 * Only valid on macOS due to the way file storage works on Mac
 *
 * @experimental
 */
export declare enum DockerVolumeConsistency {
    /**
     * (experimental) Read/write operations inside the Docker container are applied immediately on the mounted host machine volumes.
     *
     * @experimental
     */
    CONSISTENT = "consistent",
    /**
     * (experimental) Read/write operations on mounted Docker volumes are first written inside the container and then synchronized to the host machine.
     *
     * @experimental
     */
    DELEGATED = "delegated",
    /**
     * (experimental) Read/write operations on mounted Docker volumes are first applied on the host machine and then synchronized to the container.
     *
     * @experimental
     */
    CACHED = "cached"
}
/**
 * (experimental) Docker run options.
 *
 * @experimental
 */
export interface DockerRunOptions {
    /**
     * (experimental) The entrypoint to run in the container.
     *
     * @default - run the entrypoint defined in the image
     * @experimental
     */
    readonly entrypoint?: string[];
    /**
     * (experimental) The command to run in the container.
     *
     * @default - run the command defined in the image
     * @experimental
     */
    readonly command?: string[];
    /**
     * (experimental) Docker volumes to mount.
     *
     * @default - no volumes are mounted
     * @experimental
     */
    readonly volumes?: DockerVolume[];
    /**
     * (experimental) The environment variables to pass to the container.
     *
     * @default - no environment variables.
     * @experimental
     */
    readonly environment?: {
        [key: string]: string;
    };
    /**
     * (experimental) Working directory inside the container.
     *
     * @default - image default
     * @experimental
     */
    readonly workingDirectory?: string;
    /**
     * (experimental) The user to use when running the container.
     *
     * @default - root or image default
     * @experimental
     */
    readonly user?: string;
}
/**
 * (experimental) Docker build options.
 *
 * @experimental
 */
export interface DockerBuildOptions {
    /**
     * (experimental) Build args.
     *
     * @default - no build args
     * @experimental
     */
    readonly buildArgs?: {
        [key: string]: string;
    };
    /**
     * (experimental) Name of the Dockerfile, must relative to the docker build path.
     *
     * @default `Dockerfile`
     * @experimental
     */
    readonly file?: string;
}
