"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.CfnHostedConfigurationVersionPropsMixin = exports.CfnExtensionAssociationPropsMixin = exports.CfnExtensionPropsMixin = exports.CfnEnvironmentPropsMixin = exports.CfnDeploymentStrategyPropsMixin = exports.CfnDeploymentPropsMixin = exports.CfnConfigurationProfilePropsMixin = exports.CfnApplicationPropsMixin = 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-appconfig"));
/**
 * The `AWS::AppConfig::Application` resource creates an application.
 *
 * In AWS AppConfig , an application is simply an organizational construct like a folder. This organizational construct has a relationship with some unit of executable code. For example, you could create an application called MyMobileApp to organize and manage configuration data for a mobile application installed by your users.
 *
 * AWS AppConfig requires that you create resources and deploy a configuration in the following order:
 *
 * - Create an application
 * - Create an environment
 * - Create a configuration profile
 * - Choose a pre-defined deployment strategy or create your own
 * - Deploy the configuration
 *
 * For more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .
 *
 * @cloudformationResource AWS::AppConfig::Application
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-application.html
 */
class CfnApplicationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appconfig.CfnApplicationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppConfig::Application`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appconfig_CfnApplicationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnApplicationPropsMixin);
            }
            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.CfnApplication.isCfnApplication(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnApplicationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnApplicationPropsMixin = CfnApplicationPropsMixin;
/**
 * The `AWS::AppConfig::ConfigurationProfile` resource creates a configuration profile that enables AWS AppConfig to access the configuration source.
 *
 * Valid configuration sources include AWS Systems Manager (SSM) documents, SSM Parameter Store parameters, and Amazon S3 . A configuration profile includes the following information.
 *
 * - The Uri location of the configuration data.
 * - The AWS Identity and Access Management ( IAM ) role that provides access to the configuration data.
 * - A validator for the configuration data. Available validators include either a JSON Schema or the Amazon Resource Name (ARN) of an AWS Lambda function.
 *
 * AWS AppConfig requires that you create resources and deploy a configuration in the following order:
 *
 * - Create an application
 * - Create an environment
 * - Create a configuration profile
 * - Choose a pre-defined deployment strategy or create your own
 * - Deploy the configuration
 *
 * For more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .
 *
 * @cloudformationResource AWS::AppConfig::ConfigurationProfile
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-configurationprofile.html
 */
class CfnConfigurationProfilePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appconfig.CfnConfigurationProfilePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["applicationId", "deletionProtectionCheck", "description", "kmsKeyIdentifier", "locationUri", "name", "retrievalRoleArn", "tags", "type", "validators"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppConfig::ConfigurationProfile`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appconfig_CfnConfigurationProfileMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnConfigurationProfilePropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnConfigurationProfileMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnConfigurationProfile.isCfnConfigurationProfile(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnConfigurationProfilePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnConfigurationProfilePropsMixin = CfnConfigurationProfilePropsMixin;
// @ts-ignore TS6133
function flattenCfnConfigurationProfilePropsMixinValidatorsProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        content: (!props.content ? undefined : cdk.getRefProperty(props.content?.functionRef, 'functionArn') ?? cdk.ensureStringOrUndefined(props.content, "content", "lambda.IFunctionRef | string")),
        type: (!props.type ? undefined : props.type)
    };
}
// @ts-ignore TS6133
function flattenCfnConfigurationProfileMixinProps(props) {
    const ret = {};
    if ((props.applicationId !== undefined))
        ret.applicationId = cdk.getRefProperty(props.applicationId?.applicationRef, 'applicationId') ?? cdk.ensureStringOrUndefined(props.applicationId, "applicationId", "appconfig.IApplicationRef | string");
    if ((props.retrievalRoleArn !== undefined))
        ret.retrievalRoleArn = cdk.getRefProperty(props.retrievalRoleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.retrievalRoleArn, "retrievalRoleArn", "iam.IRoleRef | string");
    if ((props.validators !== undefined))
        ret.validators = (cdk.isResolvableObject(props.validators) ? props.validators : cdk.mapArrayInPlace(props.validators, (item) => flattenCfnConfigurationProfilePropsMixinValidatorsProperty(item)));
    return ret;
}
/**
 * The `AWS::AppConfig::Deployment` resource starts a deployment.
 *
 * Starting a deployment in AWS AppConfig calls the `StartDeployment` API action. This call includes the IDs of the AWS AppConfig application, the environment, the configuration profile, and (optionally) the configuration data version to deploy. The call also includes the ID of the deployment strategy to use, which determines how the configuration data is deployed.
 *
 * AWS AppConfig monitors the distribution to all hosts and reports status. If a distribution fails, then AWS AppConfig rolls back the configuration.
 *
 * AWS AppConfig requires that you create resources and deploy a configuration in the following order:
 *
 * - Create an application
 * - Create an environment
 * - Create a configuration profile
 * - Choose a pre-defined deployment strategy or create your own
 * - Deploy the configuration
 *
 * For more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .
 *
 * @cloudformationResource AWS::AppConfig::Deployment
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-deployment.html
 */
class CfnDeploymentPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appconfig.CfnDeploymentPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["applicationId", "configurationProfileId", "configurationVersion", "deploymentStrategyId", "description", "dynamicExtensionParameters", "environmentId", "kmsKeyIdentifier", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppConfig::Deployment`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appconfig_CfnDeploymentMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDeploymentPropsMixin);
            }
            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.CfnDeployment.isCfnDeployment(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDeploymentPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDeploymentPropsMixin = CfnDeploymentPropsMixin;
/**
 * The `AWS::AppConfig::DeploymentStrategy` resource creates an AWS AppConfig deployment strategy.
 *
 * A deployment strategy defines important criteria for rolling out your configuration to the designated targets. A deployment strategy includes: the overall duration required, a percentage of targets to receive the deployment during each interval, an algorithm that defines how percentage grows, and bake time.
 *
 * AWS AppConfig requires that you create resources and deploy a configuration in the following order:
 *
 * - Create an application
 * - Create an environment
 * - Create a configuration profile
 * - Choose a pre-defined deployment strategy or create your own
 * - Deploy the configuration
 *
 * For more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .
 *
 * @cloudformationResource AWS::AppConfig::DeploymentStrategy
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-deploymentstrategy.html
 */
class CfnDeploymentStrategyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appconfig.CfnDeploymentStrategyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["deploymentDurationInMinutes", "description", "finalBakeTimeInMinutes", "growthFactor", "growthType", "name", "replicateTo", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppConfig::DeploymentStrategy`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appconfig_CfnDeploymentStrategyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDeploymentStrategyPropsMixin);
            }
            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.CfnDeploymentStrategy.isCfnDeploymentStrategy(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDeploymentStrategyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDeploymentStrategyPropsMixin = CfnDeploymentStrategyPropsMixin;
/**
 * The `AWS::AppConfig::Environment` resource creates an environment, which is a logical deployment group of AWS AppConfig targets, such as applications in a `Beta` or `Production` environment.
 *
 * You define one or more environments for each AWS AppConfig application. You can also define environments for application subcomponents such as the `Web` , `Mobile` and `Back-end` components for your application. You can configure Amazon CloudWatch alarms for each environment. The system monitors alarms during a configuration deployment. If an alarm is triggered, the system rolls back the configuration.
 *
 * AWS AppConfig requires that you create resources and deploy a configuration in the following order:
 *
 * - Create an application
 * - Create an environment
 * - Create a configuration profile
 * - Choose a pre-defined deployment strategy or create your own
 * - Deploy the configuration
 *
 * For more information, see [AWS AppConfig](https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html) in the *AWS AppConfig User Guide* .
 *
 * @cloudformationResource AWS::AppConfig::Environment
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-environment.html
 */
class CfnEnvironmentPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appconfig.CfnEnvironmentPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["applicationId", "deletionProtectionCheck", "description", "monitors", "name", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppConfig::Environment`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appconfig_CfnEnvironmentMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnEnvironmentPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnEnvironmentMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnEnvironment.isCfnEnvironment(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnEnvironmentPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnEnvironmentPropsMixin = CfnEnvironmentPropsMixin;
// @ts-ignore TS6133
function flattenCfnEnvironmentPropsMixinMonitorProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        alarmArn: (!props.alarmArn ? undefined : cdk.getRefProperty(props.alarmArn?.alarmRef, 'alarmArn') ?? cdk.getRefProperty(props.alarmArn?.compositeAlarmRef, 'compositeAlarmArn') ?? cdk.ensureStringOrUndefined(props.alarmArn, "alarmArn", "cloudwatch.IAlarmRef | cloudwatch.ICompositeAlarmRef | string")),
        alarmRoleArn: (!props.alarmRoleArn ? undefined : cdk.getRefProperty(props.alarmRoleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.alarmRoleArn, "alarmRoleArn", "iam.IRoleRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnEnvironmentPropsMixinMonitorsProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        alarmArn: (!props.alarmArn ? undefined : cdk.getRefProperty(props.alarmArn?.alarmRef, 'alarmArn') ?? cdk.getRefProperty(props.alarmArn?.compositeAlarmRef, 'compositeAlarmArn') ?? cdk.ensureStringOrUndefined(props.alarmArn, "alarmArn", "cloudwatch.IAlarmRef | cloudwatch.ICompositeAlarmRef | string")),
        alarmRoleArn: (!props.alarmRoleArn ? undefined : cdk.getRefProperty(props.alarmRoleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.alarmRoleArn, "alarmRoleArn", "iam.IRoleRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnEnvironmentMixinProps(props) {
    const ret = {};
    if ((props.applicationId !== undefined))
        ret.applicationId = cdk.getRefProperty(props.applicationId?.applicationRef, 'applicationId') ?? cdk.ensureStringOrUndefined(props.applicationId, "applicationId", "appconfig.IApplicationRef | string");
    if ((props.monitors !== undefined))
        ret.monitors = (cdk.isResolvableObject(props.monitors) ? props.monitors : cdk.mapArrayInPlace(props.monitors, (item) => flattenCfnEnvironmentPropsMixinMonitorsProperty(item)));
    return ret;
}
/**
 * Creates an AWS AppConfig extension.
 *
 * An extension augments your ability to inject logic or behavior at different points during the AWS AppConfig workflow of creating or deploying a configuration.
 *
 * You can create your own extensions or use the AWS authored extensions provided by AWS AppConfig . For an AWS AppConfig extension that uses AWS Lambda , you must create a Lambda function to perform any computation and processing defined in the extension. If you plan to create custom versions of the AWS authored notification extensions, you only need to specify an Amazon Resource Name (ARN) in the `Uri` field for the new extension version.
 *
 * - For a custom EventBridge notification extension, enter the ARN of the EventBridge default events in the `Uri` field.
 * - For a custom Amazon SNS notification extension, enter the ARN of an Amazon SNS topic in the `Uri` field.
 * - For a custom Amazon SQS notification extension, enter the ARN of an Amazon SQS message queue in the `Uri` field.
 *
 * For more information about extensions, see [Extending workflows](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html) in the *AWS AppConfig User Guide* .
 *
 * @cloudformationResource AWS::AppConfig::Extension
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-extension.html
 */
class CfnExtensionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appconfig.CfnExtensionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["actions", "description", "latestVersionNumber", "name", "parameters", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppConfig::Extension`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appconfig_CfnExtensionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnExtensionPropsMixin);
            }
            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.CfnExtension.isCfnExtension(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnExtensionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnExtensionPropsMixin = CfnExtensionPropsMixin;
/**
 * When you create an extension or configure an AWS authored extension, you associate the extension with an AWS AppConfig application, environment, or configuration profile.
 *
 * For example, you can choose to run the `AWS AppConfig deployment events to Amazon SNS` AWS authored extension and receive notifications on an Amazon SNS topic anytime a configuration deployment is started for a specific application. Defining which extension to associate with an AWS AppConfig resource is called an *extension association* . An extension association is a specified relationship between an extension and an AWS AppConfig resource, such as an application or a configuration profile. For more information about extensions and associations, see [Extending workflows](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions.html) in the *AWS AppConfig User Guide* .
 *
 * @cloudformationResource AWS::AppConfig::ExtensionAssociation
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-extensionassociation.html
 */
class CfnExtensionAssociationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appconfig.CfnExtensionAssociationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["extensionIdentifier", "extensionVersionNumber", "parameters", "resourceIdentifier", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppConfig::ExtensionAssociation`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appconfig_CfnExtensionAssociationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnExtensionAssociationPropsMixin);
            }
            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.CfnExtensionAssociation.isCfnExtensionAssociation(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnExtensionAssociationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnExtensionAssociationPropsMixin = CfnExtensionAssociationPropsMixin;
/**
 * Create a new configuration in the AWS AppConfig hosted configuration store.
 *
 * Configurations must be 1 MB or smaller. The AWS AppConfig hosted configuration store provides the following benefits over other configuration store options.
 *
 * - You don't need to set up and configure other services such as Amazon Simple Storage Service ( Amazon S3 ) or Parameter Store.
 * - You don't need to configure AWS Identity and Access Management ( IAM ) permissions to use the configuration store.
 * - You can store configurations in any content type.
 * - There is no cost to use the store.
 * - You can create a configuration and add it to the store when you create a configuration profile.
 *
 * @cloudformationResource AWS::AppConfig::HostedConfigurationVersion
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-hostedconfigurationversion.html
 */
class CfnHostedConfigurationVersionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appconfig.CfnHostedConfigurationVersionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["applicationId", "configurationProfileId", "content", "contentType", "description", "latestVersionNumber", "versionLabel"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppConfig::HostedConfigurationVersion`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appconfig_CfnHostedConfigurationVersionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnHostedConfigurationVersionPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnHostedConfigurationVersionMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnHostedConfigurationVersion.isCfnHostedConfigurationVersion(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnHostedConfigurationVersionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnHostedConfigurationVersionPropsMixin = CfnHostedConfigurationVersionPropsMixin;
// @ts-ignore TS6133
function flattenCfnHostedConfigurationVersionMixinProps(props) {
    const ret = {};
    if ((props.applicationId !== undefined))
        ret.applicationId = cdk.getRefProperty(props.applicationId?.applicationRef, 'applicationId') ?? cdk.ensureStringOrUndefined(props.applicationId, "applicationId", "appconfig.IApplicationRef | string");
    if ((props.configurationProfileId !== undefined))
        ret.configurationProfileId = cdk.getRefProperty(props.configurationProfileId?.configurationProfileRef, 'configurationProfileId') ?? cdk.ensureStringOrUndefined(props.configurationProfileId, "configurationProfileId", "appconfig.IConfigurationProfileRef | string");
    return ret;
}
