"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.CfnChannelNamespacePropsMixin = exports.CfnApiPropsMixin = exports.CfnSourceApiAssociationPropsMixin = exports.CfnResolverPropsMixin = exports.CfnGraphQLSchemaPropsMixin = exports.CfnGraphQLApiPropsMixin = exports.CfnFunctionConfigurationPropsMixin = exports.CfnDomainNameApiAssociationPropsMixin = exports.CfnDomainNamePropsMixin = exports.CfnDataSourcePropsMixin = exports.CfnApiKeyPropsMixin = exports.CfnApiCachePropsMixin = 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-appsync"));
/**
 * The `AWS::AppSync::ApiCache` resource represents the input of a `CreateApiCache` operation.
 *
 * @cloudformationResource AWS::AppSync::ApiCache
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apicache.html
 */
class CfnApiCachePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnApiCachePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiCachingBehavior", "apiId", "atRestEncryptionEnabled", "healthMetricsConfig", "transitEncryptionEnabled", "ttl", "type"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::ApiCache`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnApiCacheMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnApiCachePropsMixin);
            }
            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.CfnApiCache.isCfnApiCache(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnApiCachePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnApiCachePropsMixin = CfnApiCachePropsMixin;
/**
 * The `AWS::AppSync::ApiKey` resource creates a unique key that you can distribute to clients who are executing GraphQL operations with AWS AppSync that require an API key.
 *
 * @cloudformationResource AWS::AppSync::ApiKey
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-apikey.html
 */
class CfnApiKeyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnApiKeyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "description", "expires"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::ApiKey`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnApiKeyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnApiKeyPropsMixin);
            }
            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.CfnApiKey.isCfnApiKey(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnApiKeyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnApiKeyPropsMixin = CfnApiKeyPropsMixin;
/**
 * The `AWS::AppSync::DataSource` resource creates data sources for resolvers in AWS AppSync to connect to, such as Amazon DynamoDB , AWS Lambda , and Amazon OpenSearch Service .
 *
 * Resolvers use these data sources to fetch data when clients make GraphQL calls.
 *
 * @cloudformationResource AWS::AppSync::DataSource
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-datasource.html
 */
class CfnDataSourcePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnDataSourcePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "description", "dynamoDbConfig", "elasticsearchConfig", "eventBridgeConfig", "httpConfig", "lambdaConfig", "metricsConfig", "name", "openSearchServiceConfig", "relationalDatabaseConfig", "serviceRoleArn", "type"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::DataSource`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnDataSourceMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDataSourcePropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnDataSourceMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnDataSource.isCfnDataSource(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDataSourcePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDataSourcePropsMixin = CfnDataSourcePropsMixin;
// @ts-ignore TS6133
function flattenCfnDataSourcePropsMixinEventBridgeConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        eventBusArn: (!props.eventBusArn ? undefined : cdk.getRefProperty(props.eventBusArn?.eventBusRef, 'eventBusArn') ?? cdk.ensureStringOrUndefined(props.eventBusArn, "eventBusArn", "events.IEventBusRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnDataSourcePropsMixinHttpConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        authorizationConfig: (!props.authorizationConfig ? undefined : props.authorizationConfig),
        endpoint: (!props.endpoint ? undefined : cdk.getRefProperty(props.endpoint?.bucketRef, 'bucketName') ?? cdk.ensureStringOrUndefined(props.endpoint, "endpoint", "s3.IBucketRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnDataSourcePropsMixinRdsHttpEndpointConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        awsRegion: (!props.awsRegion ? undefined : props.awsRegion),
        awsSecretStoreArn: (!props.awsSecretStoreArn ? undefined : cdk.getRefProperty(props.awsSecretStoreArn?.secretRef, 'secretId') ?? cdk.ensureStringOrUndefined(props.awsSecretStoreArn, "awsSecretStoreArn", "secretsmanager.ISecretRef | string")),
        databaseName: (!props.databaseName ? undefined : props.databaseName),
        dbClusterIdentifier: (!props.dbClusterIdentifier ? undefined : cdk.getRefProperty(props.dbClusterIdentifier?.dbClusterRef, 'dbClusterArn') ?? cdk.ensureStringOrUndefined(props.dbClusterIdentifier, "dbClusterIdentifier", "rds.IDBClusterRef | string")),
        schema: (!props.schema ? undefined : props.schema)
    };
}
// @ts-ignore TS6133
function flattenCfnDataSourcePropsMixinRelationalDatabaseConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        rdsHttpEndpointConfig: (!props.rdsHttpEndpointConfig ? undefined : (!props.rdsHttpEndpointConfig ? undefined : flattenCfnDataSourcePropsMixinRdsHttpEndpointConfigProperty(props.rdsHttpEndpointConfig))),
        relationalDatabaseSourceType: (!props.relationalDatabaseSourceType ? undefined : props.relationalDatabaseSourceType)
    };
}
// @ts-ignore TS6133
function flattenCfnDataSourcePropsMixinLambdaConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        lambdaFunctionArn: (!props.lambdaFunctionArn ? undefined : cdk.getRefProperty(props.lambdaFunctionArn?.functionRef, 'functionArn') ?? cdk.ensureStringOrUndefined(props.lambdaFunctionArn, "lambdaFunctionArn", "lambda.IFunctionRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnDataSourcePropsMixinDynamoDBConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        awsRegion: (!props.awsRegion ? undefined : props.awsRegion),
        deltaSyncConfig: (!props.deltaSyncConfig ? undefined : props.deltaSyncConfig),
        tableName: (!props.tableName ? undefined : cdk.getRefProperty(props.tableName?.tableRef, 'tableName') ?? cdk.ensureStringOrUndefined(props.tableName, "tableName", "dynamodb.ITableRef | string")),
        useCallerCredentials: (!props.useCallerCredentials ? undefined : props.useCallerCredentials),
        versioned: (!props.versioned ? undefined : props.versioned)
    };
}
// @ts-ignore TS6133
function flattenCfnDataSourceMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = props.apiId;
    if ((props.dynamoDbConfig !== undefined))
        ret.dynamoDbConfig = flattenCfnDataSourcePropsMixinDynamoDBConfigProperty(props.dynamoDbConfig);
    if ((props.eventBridgeConfig !== undefined))
        ret.eventBridgeConfig = flattenCfnDataSourcePropsMixinEventBridgeConfigProperty(props.eventBridgeConfig);
    if ((props.httpConfig !== undefined))
        ret.httpConfig = flattenCfnDataSourcePropsMixinHttpConfigProperty(props.httpConfig);
    if ((props.lambdaConfig !== undefined))
        ret.lambdaConfig = flattenCfnDataSourcePropsMixinLambdaConfigProperty(props.lambdaConfig);
    if ((props.relationalDatabaseConfig !== undefined))
        ret.relationalDatabaseConfig = flattenCfnDataSourcePropsMixinRelationalDatabaseConfigProperty(props.relationalDatabaseConfig);
    if ((props.serviceRoleArn !== undefined))
        ret.serviceRoleArn = cdk.getRefProperty(props.serviceRoleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.serviceRoleArn, "serviceRoleArn", "iam.IRoleRef | string");
    return ret;
}
/**
 * The `AWS::AppSync::DomainName` resource creates a `DomainNameConfig` object to configure a custom domain.
 *
 * @cloudformationResource AWS::AppSync::DomainName
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainname.html
 */
class CfnDomainNamePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnDomainNamePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["certificateArn", "description", "domainName", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::DomainName`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnDomainNameMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDomainNamePropsMixin);
            }
            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.CfnDomainName.isCfnDomainName(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDomainNamePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDomainNamePropsMixin = CfnDomainNamePropsMixin;
/**
 * The `AWS::AppSync::DomainNameApiAssociation` resource represents the mapping of your custom domain name to the assigned API URL.
 *
 * @cloudformationResource AWS::AppSync::DomainNameApiAssociation
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-domainnameapiassociation.html
 */
class CfnDomainNameApiAssociationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnDomainNameApiAssociationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "domainName"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::DomainNameApiAssociation`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnDomainNameApiAssociationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDomainNameApiAssociationPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnDomainNameApiAssociationMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnDomainNameApiAssociation.isCfnDomainNameApiAssociation(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDomainNameApiAssociationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDomainNameApiAssociationPropsMixin = CfnDomainNameApiAssociationPropsMixin;
// @ts-ignore TS6133
function flattenCfnDomainNameApiAssociationMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = props.apiId;
    if ((props.domainName !== undefined))
        ret.domainName = cdk.getRefProperty(props.domainName?.domainNameRef, 'domainName') ?? cdk.ensureStringOrUndefined(props.domainName, "domainName", "appsync.IDomainNameRef | string");
    return ret;
}
/**
 * The `AWS::AppSync::FunctionConfiguration` resource defines the functions in GraphQL APIs to perform certain operations.
 *
 * You can use pipeline resolvers to attach functions. For more information, see [Pipeline Resolvers](https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html) in the *AWS AppSync Developer Guide* .
 *
 * > When you submit an update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template. To cause this resource to be updated you must change a property value for this resource in the CloudFormation template. Changing the Amazon S3 file content without changing a property value will not result in an update operation.
 * >
 * > See [Update Behaviors of Stack Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html) in the *AWS CloudFormation User Guide* .
 *
 * @cloudformationResource AWS::AppSync::FunctionConfiguration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-functionconfiguration.html
 */
class CfnFunctionConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnFunctionConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "code", "codeS3Location", "dataSourceName", "description", "functionVersion", "maxBatchSize", "name", "requestMappingTemplate", "requestMappingTemplateS3Location", "responseMappingTemplate", "responseMappingTemplateS3Location", "runtime", "syncConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::FunctionConfiguration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnFunctionConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFunctionConfigurationPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnFunctionConfigurationMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnFunctionConfiguration.isCfnFunctionConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFunctionConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFunctionConfigurationPropsMixin = CfnFunctionConfigurationPropsMixin;
// @ts-ignore TS6133
function flattenCfnFunctionConfigurationMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = props.apiId;
    if ((props.dataSourceName !== undefined))
        ret.dataSourceName = props.dataSourceName;
    return ret;
}
/**
 * The `AWS::AppSync::GraphQLApi` resource creates a new AWS AppSync GraphQL API.
 *
 * This is the top-level construct for your application. For more information, see [Quick Start](https://docs.aws.amazon.com/appsync/latest/devguide/quickstart.html) in the *AWS AppSync Developer Guide* .
 *
 * @cloudformationResource AWS::AppSync::GraphQLApi
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlapi.html
 */
class CfnGraphQLApiPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnGraphQLApiPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["additionalAuthenticationProviders", "apiType", "authenticationType", "enhancedMetricsConfig", "environmentVariables", "introspectionConfig", "lambdaAuthorizerConfig", "logConfig", "mergedApiExecutionRoleArn", "name", "openIdConnectConfig", "ownerContact", "queryDepthLimit", "resolverCountLimit", "tags", "userPoolConfig", "visibility", "xrayEnabled"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::GraphQLApi`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnGraphQLApiMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnGraphQLApiPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnGraphQLApiMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnGraphQLApi.isCfnGraphQLApi(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnGraphQLApiPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnGraphQLApiPropsMixin = CfnGraphQLApiPropsMixin;
// @ts-ignore TS6133
function flattenCfnGraphQLApiPropsMixinLambdaAuthorizerConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        authorizerResultTtlInSeconds: (!props.authorizerResultTtlInSeconds ? undefined : props.authorizerResultTtlInSeconds),
        authorizerUri: (!props.authorizerUri ? undefined : cdk.getRefProperty(props.authorizerUri?.functionRef, 'functionArn') ?? cdk.getRefProperty(props.authorizerUri?.aliasRef, 'aliasArn') ?? cdk.ensureStringOrUndefined(props.authorizerUri, "authorizerUri", "lambda.IFunctionRef | lambda.IAliasRef | string")),
        identityValidationExpression: (!props.identityValidationExpression ? undefined : props.identityValidationExpression)
    };
}
// @ts-ignore TS6133
function flattenCfnGraphQLApiPropsMixinCognitoUserPoolConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        appIdClientRegex: (!props.appIdClientRegex ? undefined : props.appIdClientRegex),
        awsRegion: (!props.awsRegion ? undefined : props.awsRegion),
        userPoolId: (!props.userPoolId ? undefined : cdk.getRefProperty(props.userPoolId?.userPoolRef, 'userPoolId') ?? cdk.ensureStringOrUndefined(props.userPoolId, "userPoolId", "cognito.IUserPoolRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnGraphQLApiPropsMixinAdditionalAuthenticationProviderProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        authenticationType: (!props.authenticationType ? undefined : props.authenticationType),
        lambdaAuthorizerConfig: (!props.lambdaAuthorizerConfig ? undefined : (!props.lambdaAuthorizerConfig ? undefined : flattenCfnGraphQLApiPropsMixinLambdaAuthorizerConfigProperty(props.lambdaAuthorizerConfig))),
        openIdConnectConfig: (!props.openIdConnectConfig ? undefined : props.openIdConnectConfig),
        userPoolConfig: (!props.userPoolConfig ? undefined : (!props.userPoolConfig ? undefined : flattenCfnGraphQLApiPropsMixinCognitoUserPoolConfigProperty(props.userPoolConfig)))
    };
}
// @ts-ignore TS6133
function flattenCfnGraphQLApiPropsMixinUserPoolConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        appIdClientRegex: (!props.appIdClientRegex ? undefined : props.appIdClientRegex),
        awsRegion: (!props.awsRegion ? undefined : props.awsRegion),
        defaultAction: (!props.defaultAction ? undefined : props.defaultAction),
        userPoolId: (!props.userPoolId ? undefined : cdk.getRefProperty(props.userPoolId?.userPoolRef, 'userPoolId') ?? cdk.ensureStringOrUndefined(props.userPoolId, "userPoolId", "cognito.IUserPoolRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnGraphQLApiPropsMixinLogConfigProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        cloudWatchLogsRoleArn: (!props.cloudWatchLogsRoleArn ? undefined : cdk.getRefProperty(props.cloudWatchLogsRoleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.cloudWatchLogsRoleArn, "cloudWatchLogsRoleArn", "iam.IRoleRef | string")),
        excludeVerboseContent: (!props.excludeVerboseContent ? undefined : props.excludeVerboseContent),
        fieldLogLevel: (!props.fieldLogLevel ? undefined : props.fieldLogLevel)
    };
}
// @ts-ignore TS6133
function flattenCfnGraphQLApiMixinProps(props) {
    const ret = {};
    if ((props.additionalAuthenticationProviders !== undefined))
        ret.additionalAuthenticationProviders = (cdk.isResolvableObject(props.additionalAuthenticationProviders) ? props.additionalAuthenticationProviders : cdk.mapArrayInPlace(props.additionalAuthenticationProviders, (item) => flattenCfnGraphQLApiPropsMixinAdditionalAuthenticationProviderProperty(item)));
    if ((props.lambdaAuthorizerConfig !== undefined))
        ret.lambdaAuthorizerConfig = flattenCfnGraphQLApiPropsMixinLambdaAuthorizerConfigProperty(props.lambdaAuthorizerConfig);
    if ((props.logConfig !== undefined))
        ret.logConfig = flattenCfnGraphQLApiPropsMixinLogConfigProperty(props.logConfig);
    if ((props.userPoolConfig !== undefined))
        ret.userPoolConfig = flattenCfnGraphQLApiPropsMixinUserPoolConfigProperty(props.userPoolConfig);
    return ret;
}
/**
 * The `AWS::AppSync::GraphQLSchema` resource is used for your AWS AppSync GraphQL schema that controls the data model for your API.
 *
 * Schema files are text written in Schema Definition Language (SDL) format. For more information about schema authoring, see [Designing a GraphQL API](https://docs.aws.amazon.com/appsync/latest/devguide/designing-a-graphql-api.html) in the *AWS AppSync Developer Guide* .
 *
 * > When you submit an update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template. To cause this resource to be updated you must change a property value for this resource in the CloudFormation template. Changing the Amazon S3 file content without changing a property value will not result in an update operation.
 * >
 * > See [Update Behaviors of Stack Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html) in the *AWS CloudFormation User Guide* .
 *
 * @cloudformationResource AWS::AppSync::GraphQLSchema
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-graphqlschema.html
 */
class CfnGraphQLSchemaPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnGraphQLSchemaPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "definition", "definitionS3Location"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::GraphQLSchema`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnGraphQLSchemaMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnGraphQLSchemaPropsMixin);
            }
            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.CfnGraphQLSchema.isCfnGraphQLSchema(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnGraphQLSchemaPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnGraphQLSchemaPropsMixin = CfnGraphQLSchemaPropsMixin;
/**
 * The `AWS::AppSync::Resolver` resource defines the logical GraphQL resolver that you attach to fields in a schema.
 *
 * Request and response templates for resolvers are written in Apache Velocity Template Language (VTL) format. For more information about resolvers, see [Resolver Mapping Template Reference](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference.html) .
 *
 * > When you submit an update, AWS CloudFormation updates resources based on differences between what you submit and the stack's current template. To cause this resource to be updated you must change a property value for this resource in the CloudFormation template. Changing the Amazon S3 file content without changing a property value will not result in an update operation.
 * >
 * > See [Update Behaviors of Stack Resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html) in the *AWS CloudFormation User Guide* .
 *
 * @cloudformationResource AWS::AppSync::Resolver
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-resolver.html
 */
class CfnResolverPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnResolverPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "cachingConfig", "code", "codeS3Location", "dataSourceName", "fieldName", "kind", "maxBatchSize", "metricsConfig", "pipelineConfig", "requestMappingTemplate", "requestMappingTemplateS3Location", "responseMappingTemplate", "responseMappingTemplateS3Location", "runtime", "syncConfig", "typeName"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::Resolver`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnResolverMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResolverPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnResolverMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnResolver.isCfnResolver(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResolverPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResolverPropsMixin = CfnResolverPropsMixin;
// @ts-ignore TS6133
function flattenCfnResolverMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = props.apiId;
    if ((props.dataSourceName !== undefined))
        ret.dataSourceName = props.dataSourceName;
    return ret;
}
/**
 * Describes the configuration of a source API.
 *
 * A source API is a GraphQL API that is linked to a merged API. There can be multiple source APIs attached to each merged API. When linked to a merged API, the source API's schema, data sources, and resolvers will be combined with other linked source API data to form a new, singular API. Source APIs can originate from your account or from other accounts via Resource Access Manager.
 *
 * @cloudformationResource AWS::AppSync::SourceApiAssociation
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-sourceapiassociation.html
 */
class CfnSourceApiAssociationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnSourceApiAssociationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "mergedApiIdentifier", "sourceApiAssociationConfig", "sourceApiIdentifier"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::SourceApiAssociation`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnSourceApiAssociationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnSourceApiAssociationPropsMixin);
            }
            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.CfnSourceApiAssociation.isCfnSourceApiAssociation(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnSourceApiAssociationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnSourceApiAssociationPropsMixin = CfnSourceApiAssociationPropsMixin;
/**
 * The `AWS::AppSync::Api` resource creates an AWS AppSync API that you can use for an AWS AppSync API with your preferred configuration, such as an Event API that provides real-time message publishing and message subscriptions over WebSockets.
 *
 * @cloudformationResource AWS::AppSync::Api
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-api.html
 */
class CfnApiPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnApiPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["eventConfig", "name", "ownerContact", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::Api`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnApiMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnApiPropsMixin);
            }
            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.CfnApi.isCfnApi(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnApiPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnApiPropsMixin = CfnApiPropsMixin;
/**
 * The `AWS::AppSync::ChannelNamespace` resource creates a channel namespace associated with an `Api` .
 *
 * The `ChannelNamespace` contains the definitions for code handlers for the `Api` .
 *
 * @cloudformationResource AWS::AppSync::ChannelNamespace
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appsync-channelnamespace.html
 */
class CfnChannelNamespacePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_appsync.CfnChannelNamespacePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "codeHandlers", "codeS3Location", "handlerConfigs", "name", "publishAuthModes", "subscribeAuthModes", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::AppSync::ChannelNamespace`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_appsync_CfnChannelNamespaceMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnChannelNamespacePropsMixin);
            }
            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.CfnChannelNamespace.isCfnChannelNamespace(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnChannelNamespacePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnChannelNamespacePropsMixin = CfnChannelNamespacePropsMixin;
