import { Construct } from "constructs";
import { IBucket } from "aws-cdk-lib/aws-s3";
import { OriginAccessIdentity, Function, Distribution, HttpVersion, SecurityPolicyProtocol, PriceClass } from "aws-cdk-lib/aws-cloudfront";
import { ARecord, IHostedZone } from "aws-cdk-lib/aws-route53";
import { BucketDeployment } from "aws-cdk-lib/aws-s3-deployment";
import { BundlingOptions, Duration } from "aws-cdk-lib";
export declare enum SourceType {
    Custom = "Custom",
    Hugo = "Hugo",
    NpmDist = "NpmDist",
    Static = "Static"
}
export declare class DomainName {
    readonly prefix: string;
    readonly zone: string | IHostedZone;
    readonly createRecord?: boolean;
    constructor(prefix: string, zone: string | IHostedZone, createRecord?: boolean);
    toString(): string;
    toIdentifier(): string;
}
export interface WebsiteProps {
    /**
     * Bucket to use to store website content. If one is not provided, one will be generated.
     */
    readonly bucket?: IBucket;
    /**
     * Bucket to use if the primary bucket fails. If one is not provided a fallback is not setup.
     */
    readonly fallbackBucket?: IBucket;
    /**
     * The ARN to the ACM Certificate to use on the CloudFront distribution. If one is not
     * provided and domainNames is populated, one will be generated.
     */
    readonly certificateArn?: string;
    /**
     * The domain names to be serviced. The first domain name in the list is treated as the apex domain.
     */
    readonly domainNames?: DomainName[];
    /**
     * Redirect traffic to the first domain in the list of domainNames.
     *
     * @default true
     */
    readonly redirectToApexDomain?: boolean;
    /**
     * Price class for the CloudFront distribution.
     *
     * @default PriceClass.PRICE_CLASS_100
     */
    readonly priceClass?: PriceClass;
    /**
     * Minimum protocol version to allow.
     *
     * @default SecurityPolicyProtocol.TLS_V1_2_2021,
     */
    readonly minimumProtocolVersion?: SecurityPolicyProtocol;
    /**
     * Minimum HTTP version to allow.
     *
     * @default HttpVersion.HTTP1_1
     */
    readonly httpVersion?: HttpVersion;
    /**
     * Cache-control max age.
     *
     * @default Duration.minutes(60)
     */
    readonly maxAge?: Duration;
    /**
     * The source type of the website.
     *
     * @default SourceType.Static
     */
    readonly sourceType?: SourceType;
    /**
     * The directory where the website sources are located.
     */
    readonly sourceDirectory: string;
    /**
     * Custom bundling options to use to bundle website sources. The sourceType
     * must be set to SourceType.Custom.
     */
    readonly sourceBundlingOptions?: BundlingOptions;
}
export declare class Website extends Construct {
    /**
     * The default bundling options for SourceType.Hugo.
     */
    static readonly HUGO_BUNDLING_OPTIONS: BundlingOptions;
    /**
     * The default bundling options for SourceType.NpmDist. It's expected that "npm run dist" command
     * will place files in ${CDK_BUNDLING_OUTPUT_DIR}. Example: "ng build --output-path=/asset-output"
     */
    static readonly NPM_DIST_BUNDLING_OPTIONS: BundlingOptions;
    readonly bucket: IBucket;
    readonly fallbackBucket?: IBucket;
    readonly originAccessIdentity: OriginAccessIdentity;
    readonly apexDomain: string;
    readonly viewerRequestFunction: Function;
    readonly distribution: Distribution;
    readonly distributionUrl: string;
    readonly aRecords: ARecord[];
    readonly deployment: BucketDeployment;
    readonly fallbackDeployment?: BucketDeployment;
    constructor(scope: Construct, id: string, props: WebsiteProps);
}
