"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
    var ownKeys = function(o) {
        ownKeys = Object.getOwnPropertyNames || function (o) {
            var ar = [];
            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
            return ar;
        };
        return ownKeys(o);
    };
    return function (mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
        __setModuleDefault(result, mod);
        return result;
    };
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnVpcOriginPropsMixin = exports.CfnTrustStorePropsMixin = exports.CfnKeyValueStorePropsMixin = exports.CfnDistributionTenantPropsMixin = exports.CfnConnectionGroupPropsMixin = exports.CfnConnectionFunctionPropsMixin = exports.CfnAnycastIpListPropsMixin = exports.CfnStreamingDistributionPropsMixin = exports.CfnResponseHeadersPolicyPropsMixin = exports.CfnRealtimeLogConfigPropsMixin = exports.CfnPublicKeyPropsMixin = exports.CfnOriginRequestPolicyPropsMixin = exports.CfnOriginAccessControlPropsMixin = exports.CfnMonitoringSubscriptionPropsMixin = exports.CfnKeyGroupPropsMixin = exports.CfnFunctionPropsMixin = exports.CfnDistributionPropsMixin = exports.CfnContinuousDeploymentPolicyPropsMixin = exports.CfnCloudFrontOriginAccessIdentityPropsMixin = exports.CfnCachePolicyPropsMixin = void 0;
const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/* eslint-disable @stylistic/max-len, eol-last */
const cdk = __importStar(require("aws-cdk-lib/core"));
const service = __importStar(require("aws-cdk-lib/aws-cloudfront"));
/**
 * A cache policy.
 *
 * When it's attached to a cache behavior, the cache policy determines the following:
 *
 * - The values that CloudFront includes in the cache key. These values can include HTTP headers, cookies, and URL query strings. CloudFront uses the cache key to find an object in its cache that it can return to the viewer.
 * - The default, minimum, and maximum time to live (TTL) values that you want objects to stay in the CloudFront cache.
 *
 * The headers, cookies, and query strings that are included in the cache key are also included in requests that CloudFront sends to the origin. CloudFront sends a request when it can't find a valid object in its cache that matches the request's cache key. If you want to send values to the origin but *not* include them in the cache key, use `OriginRequestPolicy` .
 *
 * @cloudformationResource AWS::CloudFront::CachePolicy
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-cachepolicy.html
 */
class CfnCachePolicyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnCachePolicyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["cachePolicyConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::CachePolicy`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnCachePolicyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnCachePolicyPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCachePolicy.isCfnCachePolicy(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnCachePolicyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnCachePolicyPropsMixin = CfnCachePolicyPropsMixin;
/**
 * The request to create a new origin access identity (OAI).
 *
 * An origin access identity is a special CloudFront user that you can associate with Amazon S3 origins, so that you can secure all or just some of your Amazon S3 content. For more information, see [Restricting Access to Amazon S3 Content by Using an Origin Access Identity](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html) in the *Amazon CloudFront Developer Guide* .
 *
 * @cloudformationResource AWS::CloudFront::CloudFrontOriginAccessIdentity
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-cloudfrontoriginaccessidentity.html
 */
class CfnCloudFrontOriginAccessIdentityPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnCloudFrontOriginAccessIdentityPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["cloudFrontOriginAccessIdentityConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::CloudFrontOriginAccessIdentity`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnCloudFrontOriginAccessIdentityMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnCloudFrontOriginAccessIdentityPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCloudFrontOriginAccessIdentity.isCfnCloudFrontOriginAccessIdentity(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnCloudFrontOriginAccessIdentityPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnCloudFrontOriginAccessIdentityPropsMixin = CfnCloudFrontOriginAccessIdentityPropsMixin;
/**
 * Creates a continuous deployment policy that routes a subset of production traffic from a primary distribution to a staging distribution.
 *
 * After you create and update a staging distribution, you can use a continuous deployment policy to incrementally move traffic to the staging distribution. This enables you to test changes to a distribution's configuration before moving all of your production traffic to the new configuration.
 *
 * For more information, see [Using CloudFront continuous deployment to safely test CDN configuration changes](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/continuous-deployment.html) in the *Amazon CloudFront Developer Guide* .
 *
 * @cloudformationResource AWS::CloudFront::ContinuousDeploymentPolicy
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-continuousdeploymentpolicy.html
 */
class CfnContinuousDeploymentPolicyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnContinuousDeploymentPolicyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["continuousDeploymentPolicyConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::ContinuousDeploymentPolicy`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnContinuousDeploymentPolicyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnContinuousDeploymentPolicyPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnContinuousDeploymentPolicy.isCfnContinuousDeploymentPolicy(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnContinuousDeploymentPolicyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnContinuousDeploymentPolicyPropsMixin = CfnContinuousDeploymentPolicyPropsMixin;
/**
 * A distribution tells CloudFront where you want content to be delivered from, and the details about how to track and manage content delivery.
 *
 * @cloudformationResource AWS::CloudFront::Distribution
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distribution.html
 */
class CfnDistributionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnDistributionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["distributionConfig", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::Distribution`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnDistributionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDistributionPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnDistributionMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnDistribution.isCfnDistribution(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDistributionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDistributionPropsMixin = CfnDistributionPropsMixin;
// @ts-ignore TS6133
function flattenCfnDistributionPropsMixinOriginProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        connectionAttempts: (!props.connectionAttempts ? undefined : props.connectionAttempts),
        connectionTimeout: (!props.connectionTimeout ? undefined : props.connectionTimeout),
        customOriginConfig: (!props.customOriginConfig ? undefined : props.customOriginConfig),
        domainName: (!props.domainName ? undefined : cdk.getRefProperty(props.domainName?.domainNameRef, 'domainName') ?? cdk.ensureStringOrUndefined(props.domainName, "domainName", "apigateway.IDomainNameRef | string")),
        id: (!props.id ? undefined : cdk.getRefProperty(props.id?.loadBalancerRef, 'loadBalancerArn') ?? cdk.ensureStringOrUndefined(props.id, "id", "elasticloadbalancingv2.ILoadBalancerRef | string")),
        originAccessControlId: (!props.originAccessControlId ? undefined : cdk.getRefProperty(props.originAccessControlId?.originAccessControlRef, 'originAccessControlId') ?? cdk.ensureStringOrUndefined(props.originAccessControlId, "originAccessControlId", "cloudfront.IOriginAccessControlRef | string")),
        originCustomHeaders: (!props.originCustomHeaders ? undefined : props.originCustomHeaders),
        originPath: (!props.originPath ? undefined : props.originPath),
        originShield: (!props.originShield ? undefined : props.originShield),
        responseCompletionTimeout: (!props.responseCompletionTimeout ? undefined : props.responseCompletionTimeout),
        s3OriginConfig: (!props.s3OriginConfig ? undefined : props.s3OriginConfig),
        vpcOriginConfig: (!props.vpcOriginConfig ? undefined : props.vpcOriginConfig)
    };
}
// @ts-ignore TS6133
function flattenCfnDistributionPropsMixinFunctionAssociationProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        eventType: (!props.eventType ? undefined : props.eventType),
        functionArn: (!props.functionArn ? undefined : cdk.getRefProperty(props.functionArn?.functionRef, 'functionArn') ?? cdk.ensureStringOrUndefined(props.functionArn, "functionArn", "cloudfront.IFunctionRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnDistributionPropsMixinLambdaFunctionAssociationProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        eventType: (!props.eventType ? undefined : props.eventType),
        includeBody: (!props.includeBody ? undefined : props.includeBody),
        lambdaFunctionArn: (!props.lambdaFunctionArn ? undefined : cdk.getRefProperty(props.lambdaFunctionArn?.versionRef, 'functionArn') ?? cdk.ensureStringOrUndefined(props.lambdaFunctionArn, "lambdaFunctionArn", "lambda.IVersionRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnDistributionPropsMixinDefaultCacheBehaviorProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        allowedMethods: (!props.allowedMethods ? undefined : props.allowedMethods),
        cachedMethods: (!props.cachedMethods ? undefined : props.cachedMethods),
        cachePolicyId: (!props.cachePolicyId ? undefined : cdk.getRefProperty(props.cachePolicyId?.cachePolicyRef, 'cachePolicyId') ?? cdk.ensureStringOrUndefined(props.cachePolicyId, "cachePolicyId", "cloudfront.ICachePolicyRef | string")),
        compress: (!props.compress ? undefined : props.compress),
        defaultTtl: (!props.defaultTtl ? undefined : props.defaultTtl),
        fieldLevelEncryptionId: (!props.fieldLevelEncryptionId ? undefined : props.fieldLevelEncryptionId),
        forwardedValues: (!props.forwardedValues ? undefined : props.forwardedValues),
        functionAssociations: (!props.functionAssociations ? undefined : (cdk.isResolvableObject(props.functionAssociations) ? props.functionAssociations : (!props.functionAssociations ? undefined : cdk.mapArrayInPlace(props.functionAssociations, (item) => flattenCfnDistributionPropsMixinFunctionAssociationProperty(item))))),
        grpcConfig: (!props.grpcConfig ? undefined : props.grpcConfig),
        lambdaFunctionAssociations: (!props.lambdaFunctionAssociations ? undefined : (cdk.isResolvableObject(props.lambdaFunctionAssociations) ? props.lambdaFunctionAssociations : (!props.lambdaFunctionAssociations ? undefined : cdk.mapArrayInPlace(props.lambdaFunctionAssociations, (item) => flattenCfnDistributionPropsMixinLambdaFunctionAssociationProperty(item))))),
        maxTtl: (!props.maxTtl ? undefined : props.maxTtl),
        minTtl: (!props.minTtl ? undefined : props.minTtl),
        originRequestPolicyId: (!props.originRequestPolicyId ? undefined : cdk.getRefProperty(props.originRequestPolicyId?.originRequestPolicyRef, 'originRequestPolicyId') ?? cdk.ensureStringOrUndefined(props.originRequestPolicyId, "originRequestPolicyId", "cloudfront.IOriginRequestPolicyRef | string")),
        realtimeLogConfigArn: (!props.realtimeLogConfigArn ? undefined : cdk.getRefProperty(props.realtimeLogConfigArn?.realtimeLogConfigRef, 'realtimeLogConfigArn') ?? cdk.ensureStringOrUndefined(props.realtimeLogConfigArn, "realtimeLogConfigArn", "cloudfront.IRealtimeLogConfigRef | string")),
        responseHeadersPolicyId: (!props.responseHeadersPolicyId ? undefined : cdk.getRefProperty(props.responseHeadersPolicyId?.responseHeadersPolicyRef, 'responseHeadersPolicyId') ?? cdk.ensureStringOrUndefined(props.responseHeadersPolicyId, "responseHeadersPolicyId", "cloudfront.IResponseHeadersPolicyRef | string")),
        smoothStreaming: (!props.smoothStreaming ? undefined : props.smoothStreaming),
        targetOriginId: (!props.targetOriginId ? undefined : cdk.getRefProperty(props.targetOriginId?.loadBalancerRef, 'loadBalancerArn') ?? cdk.ensureStringOrUndefined(props.targetOriginId, "targetOriginId", "elasticloadbalancingv2.ILoadBalancerRef | string")),
        trustedKeyGroups: (!props.trustedKeyGroups ? undefined : cdk.mapArrayInPlace(props.trustedKeyGroups, (item) => cdk.getRefProperty(item?.keyGroupRef, 'keyGroupId') ?? cdk.ensureStringOrUndefined(item, "trustedKeyGroups", "cloudfront.IKeyGroupRef | string"))),
        trustedSigners: (!props.trustedSigners ? undefined : props.trustedSigners),
        viewerProtocolPolicy: (!props.viewerProtocolPolicy ? undefined : props.viewerProtocolPolicy)
    };
}
// @ts-ignore TS6133
function flattenCfnDistributionPropsMixinCacheBehaviorProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        allowedMethods: (!props.allowedMethods ? undefined : props.allowedMethods),
        cachedMethods: (!props.cachedMethods ? undefined : props.cachedMethods),
        cachePolicyId: (!props.cachePolicyId ? undefined : cdk.getRefProperty(props.cachePolicyId?.cachePolicyRef, 'cachePolicyId') ?? cdk.ensureStringOrUndefined(props.cachePolicyId, "cachePolicyId", "cloudfront.ICachePolicyRef | string")),
        compress: (!props.compress ? undefined : props.compress),
        defaultTtl: (!props.defaultTtl ? undefined : props.defaultTtl),
        fieldLevelEncryptionId: (!props.fieldLevelEncryptionId ? undefined : props.fieldLevelEncryptionId),
        forwardedValues: (!props.forwardedValues ? undefined : props.forwardedValues),
        functionAssociations: (!props.functionAssociations ? undefined : (cdk.isResolvableObject(props.functionAssociations) ? props.functionAssociations : (!props.functionAssociations ? undefined : cdk.mapArrayInPlace(props.functionAssociations, (item) => flattenCfnDistributionPropsMixinFunctionAssociationProperty(item))))),
        grpcConfig: (!props.grpcConfig ? undefined : props.grpcConfig),
        lambdaFunctionAssociations: (!props.lambdaFunctionAssociations ? undefined : (cdk.isResolvableObject(props.lambdaFunctionAssociations) ? props.lambdaFunctionAssociations : (!props.lambdaFunctionAssociations ? undefined : cdk.mapArrayInPlace(props.lambdaFunctionAssociations, (item) => flattenCfnDistributionPropsMixinLambdaFunctionAssociationProperty(item))))),
        maxTtl: (!props.maxTtl ? undefined : props.maxTtl),
        minTtl: (!props.minTtl ? undefined : props.minTtl),
        originRequestPolicyId: (!props.originRequestPolicyId ? undefined : cdk.getRefProperty(props.originRequestPolicyId?.originRequestPolicyRef, 'originRequestPolicyId') ?? cdk.ensureStringOrUndefined(props.originRequestPolicyId, "originRequestPolicyId", "cloudfront.IOriginRequestPolicyRef | string")),
        pathPattern: (!props.pathPattern ? undefined : props.pathPattern),
        realtimeLogConfigArn: (!props.realtimeLogConfigArn ? undefined : props.realtimeLogConfigArn),
        responseHeadersPolicyId: (!props.responseHeadersPolicyId ? undefined : cdk.getRefProperty(props.responseHeadersPolicyId?.responseHeadersPolicyRef, 'responseHeadersPolicyId') ?? cdk.ensureStringOrUndefined(props.responseHeadersPolicyId, "responseHeadersPolicyId", "cloudfront.IResponseHeadersPolicyRef | string")),
        smoothStreaming: (!props.smoothStreaming ? undefined : props.smoothStreaming),
        targetOriginId: (!props.targetOriginId ? undefined : props.targetOriginId),
        trustedKeyGroups: (!props.trustedKeyGroups ? undefined : cdk.mapArrayInPlace(props.trustedKeyGroups, (item) => cdk.getRefProperty(item?.keyGroupRef, 'keyGroupId') ?? cdk.ensureStringOrUndefined(item, "trustedKeyGroups", "cloudfront.IKeyGroupRef | string"))),
        trustedSigners: (!props.trustedSigners ? undefined : props.trustedSigners),
        viewerProtocolPolicy: (!props.viewerProtocolPolicy ? undefined : props.viewerProtocolPolicy)
    };
}
// @ts-ignore TS6133
function flattenCfnDistributionPropsMixinDistributionConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        aliases: (!props.aliases ? undefined : props.aliases),
        anycastIpListId: (!props.anycastIpListId ? undefined : props.anycastIpListId),
        cacheBehaviors: (!props.cacheBehaviors ? undefined : (cdk.isResolvableObject(props.cacheBehaviors) ? props.cacheBehaviors : (!props.cacheBehaviors ? undefined : cdk.mapArrayInPlace(props.cacheBehaviors, (item) => flattenCfnDistributionPropsMixinCacheBehaviorProperty(item))))),
        cacheTagConfig: (!props.cacheTagConfig ? undefined : props.cacheTagConfig),
        cnamEs: (!props.cnamEs ? undefined : props.cnamEs),
        comment: (!props.comment ? undefined : props.comment),
        connectionFunctionAssociation: (!props.connectionFunctionAssociation ? undefined : props.connectionFunctionAssociation),
        connectionMode: (!props.connectionMode ? undefined : props.connectionMode),
        continuousDeploymentPolicyId: (!props.continuousDeploymentPolicyId ? undefined : props.continuousDeploymentPolicyId),
        customErrorResponses: (!props.customErrorResponses ? undefined : props.customErrorResponses),
        customOrigin: (!props.customOrigin ? undefined : props.customOrigin),
        defaultCacheBehavior: (!props.defaultCacheBehavior ? undefined : flattenCfnDistributionPropsMixinDefaultCacheBehaviorProperty(props.defaultCacheBehavior)),
        defaultRootObject: (!props.defaultRootObject ? undefined : props.defaultRootObject),
        enabled: (!props.enabled ? undefined : props.enabled),
        httpVersion: (!props.httpVersion ? undefined : props.httpVersion),
        ipv6Enabled: (!props.ipv6Enabled ? undefined : props.ipv6Enabled),
        logging: (!props.logging ? undefined : props.logging),
        originGroups: (!props.originGroups ? undefined : props.originGroups),
        origins: (!props.origins ? undefined : (cdk.isResolvableObject(props.origins) ? props.origins : (!props.origins ? undefined : cdk.mapArrayInPlace(props.origins, (item) => flattenCfnDistributionPropsMixinOriginProperty(item))))),
        priceClass: (!props.priceClass ? undefined : props.priceClass),
        restrictions: (!props.restrictions ? undefined : props.restrictions),
        s3Origin: (!props.s3Origin ? undefined : props.s3Origin),
        staging: (!props.staging ? undefined : props.staging),
        tenantConfig: (!props.tenantConfig ? undefined : props.tenantConfig),
        viewerCertificate: (!props.viewerCertificate ? undefined : props.viewerCertificate),
        viewerMtlsConfig: (!props.viewerMtlsConfig ? undefined : props.viewerMtlsConfig),
        webAclId: (!props.webAclId ? undefined : cdk.getRefProperty(props.webAclId?.webAclRef, 'webAclArn') ?? cdk.ensureStringOrUndefined(props.webAclId, "webAclId", "wafv2.IWebACLRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnDistributionMixinProps(props) {
    const ret = {};
    if ((props.distributionConfig !== undefined))
        ret.distributionConfig = flattenCfnDistributionPropsMixinDistributionConfigProperty(props.distributionConfig);
    return ret;
}
/**
 * Creates a CloudFront function.
 *
 * To create a function, you provide the function code and some configuration information about the function. The response contains an Amazon Resource Name (ARN) that uniquely identifies the function, and the function’s stage.
 *
 * By default, when you create a function, it’s in the `DEVELOPMENT` stage. In this stage, you can [test the function](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/test-function.html) in the CloudFront console (or with `TestFunction` in the CloudFront API).
 *
 * When you’re ready to use your function with a CloudFront distribution, publish the function to the `LIVE` stage. You can do this in the CloudFront console, with `PublishFunction` in the CloudFront API, or by updating the `AWS::CloudFront::Function` resource with the `AutoPublish` property set to `true` . When the function is published to the `LIVE` stage, you can attach it to a distribution’s cache behavior, using the function’s ARN.
 *
 * To automatically publish the function to the `LIVE` stage when it’s created, set the `AutoPublish` property to `true` .
 *
 * @cloudformationResource AWS::CloudFront::Function
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-function.html
 */
class CfnFunctionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnFunctionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["autoPublish", "functionCode", "functionConfig", "functionMetadata", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::Function`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnFunctionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFunctionPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnFunction.isCfnFunction(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFunctionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFunctionPropsMixin = CfnFunctionPropsMixin;
/**
 * A key group.
 *
 * A key group contains a list of public keys that you can use with [CloudFront signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) .
 *
 * @cloudformationResource AWS::CloudFront::KeyGroup
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-keygroup.html
 */
class CfnKeyGroupPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnKeyGroupPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["keyGroupConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::KeyGroup`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnKeyGroupMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnKeyGroupPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnKeyGroupMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnKeyGroup.isCfnKeyGroup(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnKeyGroupPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnKeyGroupPropsMixin = CfnKeyGroupPropsMixin;
// @ts-ignore TS6133
function flattenCfnKeyGroupPropsMixinKeyGroupConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        comment: (!props.comment ? undefined : props.comment),
        items: (!props.items ? undefined : cdk.mapArrayInPlace(props.items, (item) => cdk.getRefProperty(item?.publicKeyRef, 'publicKeyId') ?? cdk.ensureStringOrUndefined(item, "items", "cloudfront.IPublicKeyRef | string"))),
        name: (!props.name ? undefined : props.name)
    };
}
// @ts-ignore TS6133
function flattenCfnKeyGroupMixinProps(props) {
    const ret = {};
    if ((props.keyGroupConfig !== undefined))
        ret.keyGroupConfig = flattenCfnKeyGroupPropsMixinKeyGroupConfigProperty(props.keyGroupConfig);
    return ret;
}
/**
 * A monitoring subscription.
 *
 * This structure contains information about whether additional CloudWatch metrics are enabled for a given CloudFront distribution.
 *
 * @cloudformationResource AWS::CloudFront::MonitoringSubscription
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-monitoringsubscription.html
 */
class CfnMonitoringSubscriptionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnMonitoringSubscriptionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["distributionId", "monitoringSubscription"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::MonitoringSubscription`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnMonitoringSubscriptionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnMonitoringSubscriptionPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnMonitoringSubscriptionMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnMonitoringSubscription.isCfnMonitoringSubscription(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnMonitoringSubscriptionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnMonitoringSubscriptionPropsMixin = CfnMonitoringSubscriptionPropsMixin;
// @ts-ignore TS6133
function flattenCfnMonitoringSubscriptionMixinProps(props) {
    const ret = {};
    if ((props.distributionId !== undefined))
        ret.distributionId = cdk.getRefProperty(props.distributionId?.distributionRef, 'distributionId') ?? cdk.ensureStringOrUndefined(props.distributionId, "distributionId", "cloudfront.IDistributionRef | string");
    return ret;
}
/**
 * Creates a new origin access control in CloudFront.
 *
 * After you create an origin access control, you can add it to an origin in a CloudFront distribution so that CloudFront sends authenticated (signed) requests to the origin.
 *
 * This makes it possible to block public access to the origin, allowing viewers (users) to access the origin's content only through CloudFront.
 *
 * For more information about using a CloudFront origin access control, see [Restricting access to an AWS origin](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html) in the *Amazon CloudFront Developer Guide* .
 *
 * @cloudformationResource AWS::CloudFront::OriginAccessControl
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html
 */
class CfnOriginAccessControlPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnOriginAccessControlPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["originAccessControlConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::OriginAccessControl`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnOriginAccessControlMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnOriginAccessControlPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnOriginAccessControl.isCfnOriginAccessControl(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnOriginAccessControlPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnOriginAccessControlPropsMixin = CfnOriginAccessControlPropsMixin;
/**
 * An origin request policy.
 *
 * When it's attached to a cache behavior, the origin request policy determines the values that CloudFront includes in requests that it sends to the origin. Each request that CloudFront sends to the origin includes the following:
 *
 * - The request body and the URL path (without the domain name) from the viewer request.
 * - The headers that CloudFront automatically includes in every origin request, including `Host` , `User-Agent` , and `X-Amz-Cf-Id` .
 * - All HTTP headers, cookies, and URL query strings that are specified in the cache policy or the origin request policy. These can include items from the viewer request and, in the case of headers, additional ones that are added by CloudFront.
 *
 * CloudFront sends a request when it can't find an object in its cache that matches the request. If you want to send values to the origin and also include them in the cache key, use `CachePolicy` .
 *
 * @cloudformationResource AWS::CloudFront::OriginRequestPolicy
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originrequestpolicy.html
 */
class CfnOriginRequestPolicyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnOriginRequestPolicyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["originRequestPolicyConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::OriginRequestPolicy`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnOriginRequestPolicyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnOriginRequestPolicyPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnOriginRequestPolicy.isCfnOriginRequestPolicy(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnOriginRequestPolicyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnOriginRequestPolicyPropsMixin = CfnOriginRequestPolicyPropsMixin;
/**
 * A public key that you can use with [signed URLs and signed cookies](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html) , or with [field-level encryption](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html) .
 *
 * CloudFront supports signed URLs and signed cookies with RSA 2048 or ECDSA 256 key signatures. Field-level encryption is only compatible with RSA 2048 key signatures.
 *
 * @cloudformationResource AWS::CloudFront::PublicKey
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-publickey.html
 */
class CfnPublicKeyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnPublicKeyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["publicKeyConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::PublicKey`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnPublicKeyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnPublicKeyPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnPublicKey.isCfnPublicKey(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnPublicKeyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnPublicKeyPropsMixin = CfnPublicKeyPropsMixin;
/**
 * A real-time log configuration.
 *
 * @cloudformationResource AWS::CloudFront::RealtimeLogConfig
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-realtimelogconfig.html
 */
class CfnRealtimeLogConfigPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnRealtimeLogConfigPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["endPoints", "fields", "name", "samplingRate"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::RealtimeLogConfig`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnRealtimeLogConfigMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnRealtimeLogConfigPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnRealtimeLogConfigMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnRealtimeLogConfig.isCfnRealtimeLogConfig(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnRealtimeLogConfigPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnRealtimeLogConfigPropsMixin = CfnRealtimeLogConfigPropsMixin;
// @ts-ignore TS6133
function flattenCfnRealtimeLogConfigPropsMixinKinesisStreamConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string")),
        streamArn: (!props.streamArn ? undefined : cdk.getRefProperty(props.streamArn?.streamRef, 'streamArn') ?? cdk.ensureStringOrUndefined(props.streamArn, "streamArn", "kinesis.IStreamRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnRealtimeLogConfigPropsMixinEndPointProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        kinesisStreamConfig: (!props.kinesisStreamConfig ? undefined : flattenCfnRealtimeLogConfigPropsMixinKinesisStreamConfigProperty(props.kinesisStreamConfig)),
        streamType: (!props.streamType ? undefined : props.streamType)
    };
}
// @ts-ignore TS6133
function flattenCfnRealtimeLogConfigMixinProps(props) {
    const ret = {};
    if ((props.endPoints !== undefined))
        ret.endPoints = (cdk.isResolvableObject(props.endPoints) ? props.endPoints : cdk.mapArrayInPlace(props.endPoints, (item) => flattenCfnRealtimeLogConfigPropsMixinEndPointProperty(item)));
    return ret;
}
/**
 * A response headers policy.
 *
 * A response headers policy contains information about a set of HTTP response headers.
 *
 * After you create a response headers policy, you can use its ID to attach it to one or more cache behaviors in a CloudFront distribution. When it's attached to a cache behavior, the response headers policy affects the HTTP headers that CloudFront includes in HTTP responses to requests that match the cache behavior. CloudFront adds or removes response headers according to the configuration of the response headers policy.
 *
 * For more information, see [Adding or removing HTTP headers in CloudFront responses](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/modifying-response-headers.html) in the *Amazon CloudFront Developer Guide* .
 *
 * @cloudformationResource AWS::CloudFront::ResponseHeadersPolicy
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-responseheaderspolicy.html
 */
class CfnResponseHeadersPolicyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnResponseHeadersPolicyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["responseHeadersPolicyConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::ResponseHeadersPolicy`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnResponseHeadersPolicyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResponseHeadersPolicyPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnResponseHeadersPolicy.isCfnResponseHeadersPolicy(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResponseHeadersPolicyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResponseHeadersPolicyPropsMixin = CfnResponseHeadersPolicyPropsMixin;
/**
 * This resource is deprecated.
 *
 * Amazon CloudFront is deprecating real-time messaging protocol (RTMP) distributions on December 31, 2020. For more information, [read the announcement](https://docs.aws.amazon.com/ann.jspa?annID=7356) on the Amazon CloudFront discussion forum.
 *
 * @cloudformationResource AWS::CloudFront::StreamingDistribution
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-streamingdistribution.html
 */
class CfnStreamingDistributionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnStreamingDistributionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["streamingDistributionConfig", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::StreamingDistribution`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnStreamingDistributionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnStreamingDistributionPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnStreamingDistribution.isCfnStreamingDistribution(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnStreamingDistributionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnStreamingDistributionPropsMixin = CfnStreamingDistributionPropsMixin;
/**
 * An Anycast static IP list.
 *
 * For more information, see [Request Anycast static IPs to use for allowlisting](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/request-static-ips.html) in the *Amazon CloudFront Developer Guide* .
 *
 * @cloudformationResource AWS::CloudFront::AnycastIpList
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-anycastiplist.html
 */
class CfnAnycastIpListPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnAnycastIpListPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["ipAddressType", "ipamCidrConfigs", "ipCount", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::AnycastIpList`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnAnycastIpListMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnAnycastIpListPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnAnycastIpList.isCfnAnycastIpList(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnAnycastIpListPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnAnycastIpListPropsMixin = CfnAnycastIpListPropsMixin;
/**
 * A connection function.
 *
 * @cloudformationResource AWS::CloudFront::ConnectionFunction
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-connectionfunction.html
 */
class CfnConnectionFunctionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnConnectionFunctionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["autoPublish", "connectionFunctionCode", "connectionFunctionConfig", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::ConnectionFunction`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnConnectionFunctionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnConnectionFunctionPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnConnectionFunction.isCfnConnectionFunction(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnConnectionFunctionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnConnectionFunctionPropsMixin = CfnConnectionFunctionPropsMixin;
/**
 * The connection group for your distribution tenants.
 *
 * When you first create a distribution tenant and you don't specify a connection group, CloudFront will automatically create a default connection group for you. When you create a new distribution tenant and don't specify a connection group, the default one will be associated with your distribution tenant.
 *
 * @cloudformationResource AWS::CloudFront::ConnectionGroup
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-connectiongroup.html
 */
class CfnConnectionGroupPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnConnectionGroupPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["anycastIpListId", "enabled", "ipv6Enabled", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::ConnectionGroup`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnConnectionGroupMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnConnectionGroupPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnConnectionGroup.isCfnConnectionGroup(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnConnectionGroupPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnConnectionGroupPropsMixin = CfnConnectionGroupPropsMixin;
/**
 * The distribution tenant.
 *
 * @cloudformationResource AWS::CloudFront::DistributionTenant
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-distributiontenant.html
 */
class CfnDistributionTenantPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnDistributionTenantPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["connectionGroupId", "customizations", "distributionId", "domains", "enabled", "managedCertificateRequest", "name", "parameters", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::DistributionTenant`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnDistributionTenantMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDistributionTenantPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnDistributionTenant.isCfnDistributionTenant(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDistributionTenantPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDistributionTenantPropsMixin = CfnDistributionTenantPropsMixin;
/**
 * The key value store.
 *
 * Use this to separate data from function code, allowing you to update data without having to publish a new version of a function. The key value store holds keys and their corresponding values.
 *
 * @cloudformationResource AWS::CloudFront::KeyValueStore
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-keyvaluestore.html
 */
class CfnKeyValueStorePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnKeyValueStorePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["comment", "importSource", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::KeyValueStore`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnKeyValueStoreMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnKeyValueStorePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnKeyValueStore.isCfnKeyValueStore(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnKeyValueStorePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnKeyValueStorePropsMixin = CfnKeyValueStorePropsMixin;
/**
 * A trust store.
 *
 * @cloudformationResource AWS::CloudFront::TrustStore
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-truststore.html
 */
class CfnTrustStorePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnTrustStorePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["caCertificatesBundleSource", "name", "tags", "useClientCertificateOcspEndpoint"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::TrustStore`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnTrustStoreMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnTrustStorePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnTrustStore.isCfnTrustStore(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnTrustStorePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnTrustStorePropsMixin = CfnTrustStorePropsMixin;
/**
 * An Amazon CloudFront VPC origin.
 *
 * @cloudformationResource AWS::CloudFront::VpcOrigin
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-vpcorigin.html
 */
class CfnVpcOriginPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_cloudfront.CfnVpcOriginPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["tags", "vpcOriginEndpointConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::CloudFront::VpcOrigin`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_cloudfront_CfnVpcOriginMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnVpcOriginPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnVpcOrigin.isCfnVpcOrigin(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnVpcOriginPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnVpcOriginPropsMixin = CfnVpcOriginPropsMixin;
