"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.CfnRoutingRulePropsMixin = exports.CfnVpcLinkPropsMixin = exports.CfnStagePropsMixin = exports.CfnRouteResponsePropsMixin = exports.CfnRoutePropsMixin = exports.CfnModelPropsMixin = exports.CfnIntegrationResponsePropsMixin = exports.CfnIntegrationPropsMixin = exports.CfnDomainNamePropsMixin = exports.CfnDeploymentPropsMixin = exports.CfnAuthorizerPropsMixin = exports.CfnApiMappingPropsMixin = exports.CfnApiGatewayManagedOverridesPropsMixin = exports.CfnApiPropsMixin = 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-apigatewayv2"));
/**
 * The `AWS::ApiGatewayV2::Api` resource creates an API.
 *
 * WebSocket APIs and HTTP APIs are supported. For more information about WebSocket APIs, see [About WebSocket APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-overview.html) in the *API Gateway Developer Guide* . For more information about HTTP APIs, see [HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html) in the *API Gateway Developer Guide.*
 *
 * @cloudformationResource AWS::ApiGatewayV2::Api
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-api.html
 */
class CfnApiPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnApiPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiKeySelectionExpression", "basePath", "body", "bodyS3Location", "corsConfiguration", "credentialsArn", "description", "disableExecuteApiEndpoint", "disableSchemaValidation", "failOnWarnings", "ipAddressType", "name", "protocolType", "routeKey", "routeSelectionExpression", "tags", "target", "version"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::Api`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_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,
            ...flattenCfnApiMixinProps(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;
// @ts-ignore TS6133
function flattenCfnApiMixinProps(props) {
    const ret = {};
    if ((props.target !== undefined))
        ret.target = cdk.getRefProperty(props.target?.functionRef, 'functionArn') ?? cdk.ensureStringOrUndefined(props.target, "target", "lambda.IFunctionRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::ApiGatewayManagedOverrides` resource overrides the default properties of API Gateway-managed resources that are implicitly configured for you when you use quick create.
 *
 * When you create an API by using quick create, an `AWS::ApiGatewayV2::Route` , `AWS::ApiGatewayV2::Integration` , and `AWS::ApiGatewayV2::Stage` are created for you and associated with your `AWS::ApiGatewayV2::Api` . The `AWS::ApiGatewayV2::ApiGatewayManagedOverrides` resource enables you to set, or override the properties of these implicit resources. Supported only for HTTP APIs.
 *
 * @cloudformationResource AWS::ApiGatewayV2::ApiGatewayManagedOverrides
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apigatewaymanagedoverrides.html
 */
class CfnApiGatewayManagedOverridesPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnApiGatewayManagedOverridesPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "integration", "route", "stage"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::ApiGatewayManagedOverrides`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnApiGatewayManagedOverridesMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnApiGatewayManagedOverridesPropsMixin);
            }
            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.CfnApiGatewayManagedOverrides.isCfnApiGatewayManagedOverrides(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnApiGatewayManagedOverridesPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnApiGatewayManagedOverridesPropsMixin = CfnApiGatewayManagedOverridesPropsMixin;
/**
 * The `AWS::ApiGatewayV2::ApiMapping` resource contains an API mapping.
 *
 * An API mapping relates a path of your custom domain name to a stage of your API. A custom domain name can have multiple API mappings, but the paths can't overlap. A custom domain can map only to APIs of the same protocol type. For more information, see [CreateApiMapping](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/domainnames-domainname-apimappings.html#CreateApiMapping) in the *Amazon API Gateway V2 API Reference* .
 *
 * @cloudformationResource AWS::ApiGatewayV2::ApiMapping
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-apimapping.html
 */
class CfnApiMappingPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnApiMappingPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "apiMappingKey", "domainName", "stage"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::ApiMapping`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnApiMappingMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnApiMappingPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnApiMappingMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnApiMapping.isCfnApiMapping(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnApiMappingPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnApiMappingPropsMixin = CfnApiMappingPropsMixin;
// @ts-ignore TS6133
function flattenCfnApiMappingMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = cdk.getRefProperty(props.apiId?.apiRef, 'apiId') ?? cdk.getRefProperty(props.apiId?.restApiRef, 'restApiId') ?? cdk.ensureStringOrUndefined(props.apiId, "apiId", "apigatewayv2.IApiRef | apigateway.IRestApiRef | string");
    if ((props.domainName !== undefined))
        ret.domainName = cdk.getRefProperty(props.domainName?.domainNameRef, 'domainName') ?? cdk.getRefProperty(props.domainName?.domainNameRef, 'domainName') ?? cdk.ensureStringOrUndefined(props.domainName, "domainName", "apigatewayv2.IDomainNameRef | apigateway.IDomainNameRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::Authorizer` resource creates an authorizer for a WebSocket API or an HTTP API.
 *
 * To learn more, see [Controlling and managing access to a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-control-access.html) and [Controlling and managing access to an HTTP API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-access-control.html) in the *API Gateway Developer Guide* .
 *
 * @cloudformationResource AWS::ApiGatewayV2::Authorizer
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-authorizer.html
 */
class CfnAuthorizerPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnAuthorizerPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "authorizerCredentialsArn", "authorizerPayloadFormatVersion", "authorizerResultTtlInSeconds", "authorizerType", "authorizerUri", "enableSimpleResponses", "identitySource", "identityValidationExpression", "jwtConfiguration", "name"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::Authorizer`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnAuthorizerMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnAuthorizerPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnAuthorizerMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnAuthorizer.isCfnAuthorizer(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnAuthorizerPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnAuthorizerPropsMixin = CfnAuthorizerPropsMixin;
// @ts-ignore TS6133
function flattenCfnAuthorizerMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = cdk.getRefProperty(props.apiId?.apiRef, 'apiId') ?? cdk.ensureStringOrUndefined(props.apiId, "apiId", "apigatewayv2.IApiRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::Deployment` resource creates a deployment for an API.
 *
 * @cloudformationResource AWS::ApiGatewayV2::Deployment
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-deployment.html
 */
class CfnDeploymentPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnDeploymentPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "description", "stageName"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::Deployment`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_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,
            ...flattenCfnDeploymentMixinProps(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;
// @ts-ignore TS6133
function flattenCfnDeploymentMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = cdk.getRefProperty(props.apiId?.apiRef, 'apiId') ?? cdk.ensureStringOrUndefined(props.apiId, "apiId", "apigatewayv2.IApiRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::DomainName` resource specifies a custom domain name for your API in Amazon API Gateway (API Gateway).
 *
 * You can use a custom domain name to provide a URL that's more intuitive and easier to recall. For more information about using custom domain names, see [Set up Custom Domain Name for an API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) in the *API Gateway Developer Guide* .
 *
 * @cloudformationResource AWS::ApiGatewayV2::DomainName
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-domainname.html
 */
class CfnDomainNamePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnDomainNamePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["domainName", "domainNameConfigurations", "mutualTlsAuthentication", "routingMode", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::DomainName`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_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::ApiGatewayV2::Integration` resource creates an integration for an API.
 *
 * @cloudformationResource AWS::ApiGatewayV2::Integration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integration.html
 */
class CfnIntegrationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnIntegrationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "connectionId", "connectionType", "contentHandlingStrategy", "credentialsArn", "description", "integrationMethod", "integrationSubtype", "integrationType", "integrationUri", "passthroughBehavior", "payloadFormatVersion", "requestParameters", "requestTemplates", "responseParameters", "templateSelectionExpression", "timeoutInMillis", "tlsConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::Integration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnIntegrationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnIntegrationPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnIntegrationMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnIntegration.isCfnIntegration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnIntegrationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnIntegrationPropsMixin = CfnIntegrationPropsMixin;
// @ts-ignore TS6133
function flattenCfnIntegrationMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = cdk.getRefProperty(props.apiId?.apiRef, 'apiId') ?? cdk.ensureStringOrUndefined(props.apiId, "apiId", "apigatewayv2.IApiRef | string");
    if ((props.integrationUri !== undefined))
        ret.integrationUri = cdk.getRefProperty(props.integrationUri?.functionRef, 'functionArn') ?? cdk.ensureStringOrUndefined(props.integrationUri, "integrationUri", "lambda.IFunctionRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::IntegrationResponse` resource updates an integration response for an WebSocket API.
 *
 * For more information, see [Set up WebSocket API Integration Responses in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-integration-responses.html) in the *API Gateway Developer Guide* .
 *
 * @cloudformationResource AWS::ApiGatewayV2::IntegrationResponse
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-integrationresponse.html
 */
class CfnIntegrationResponsePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnIntegrationResponsePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "contentHandlingStrategy", "integrationId", "integrationResponseKey", "responseParameters", "responseTemplates", "templateSelectionExpression"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::IntegrationResponse`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnIntegrationResponseMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnIntegrationResponsePropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnIntegrationResponseMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnIntegrationResponse.isCfnIntegrationResponse(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnIntegrationResponsePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnIntegrationResponsePropsMixin = CfnIntegrationResponsePropsMixin;
// @ts-ignore TS6133
function flattenCfnIntegrationResponseMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = cdk.getRefProperty(props.apiId?.apiRef, 'apiId') ?? cdk.ensureStringOrUndefined(props.apiId, "apiId", "apigatewayv2.IApiRef | string");
    if ((props.integrationId !== undefined))
        ret.integrationId = cdk.getRefProperty(props.integrationId?.integrationRef, 'integrationId') ?? cdk.ensureStringOrUndefined(props.integrationId, "integrationId", "apigatewayv2.IIntegrationRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::Model` resource updates data model for a WebSocket API.
 *
 * For more information, see [Model Selection Expressions](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-model-selection-expressions) in the *API Gateway Developer Guide* .
 *
 * @cloudformationResource AWS::ApiGatewayV2::Model
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-model.html
 */
class CfnModelPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnModelPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "contentType", "description", "name", "schema"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::Model`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnModelMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnModelPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnModelMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnModel.isCfnModel(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnModelPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnModelPropsMixin = CfnModelPropsMixin;
// @ts-ignore TS6133
function flattenCfnModelMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = cdk.getRefProperty(props.apiId?.apiRef, 'apiId') ?? cdk.ensureStringOrUndefined(props.apiId, "apiId", "apigatewayv2.IApiRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::Route` resource creates a route for an API.
 *
 * @cloudformationResource AWS::ApiGatewayV2::Route
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-route.html
 */
class CfnRoutePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnRoutePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "apiKeyRequired", "authorizationScopes", "authorizationType", "authorizerId", "modelSelectionExpression", "operationName", "requestModels", "requestParameters", "routeKey", "routeResponseSelectionExpression", "target"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::Route`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnRouteMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnRoutePropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnRouteMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnRoute.isCfnRoute(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnRoutePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnRoutePropsMixin = CfnRoutePropsMixin;
// @ts-ignore TS6133
function flattenCfnRouteMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = cdk.getRefProperty(props.apiId?.apiRef, 'apiId') ?? cdk.ensureStringOrUndefined(props.apiId, "apiId", "apigatewayv2.IApiRef | string");
    if ((props.authorizerId !== undefined))
        ret.authorizerId = cdk.getRefProperty(props.authorizerId?.authorizerRef, 'authorizerId') ?? cdk.ensureStringOrUndefined(props.authorizerId, "authorizerId", "apigatewayv2.IAuthorizerRef | string");
    if ((props.target !== undefined))
        ret.target = cdk.getRefProperty(props.target?.integrationRef, 'integrationId') ?? cdk.ensureStringOrUndefined(props.target, "target", "apigatewayv2.IIntegrationRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::RouteResponse` resource creates a route response for a WebSocket API.
 *
 * For more information, see [Set up Route Responses for a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-route-response.html) in the *API Gateway Developer Guide* .
 *
 * @cloudformationResource AWS::ApiGatewayV2::RouteResponse
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routeresponse.html
 */
class CfnRouteResponsePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnRouteResponsePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["apiId", "modelSelectionExpression", "responseModels", "responseParameters", "routeId", "routeResponseKey"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::RouteResponse`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnRouteResponseMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnRouteResponsePropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnRouteResponseMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnRouteResponse.isCfnRouteResponse(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnRouteResponsePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnRouteResponsePropsMixin = CfnRouteResponsePropsMixin;
// @ts-ignore TS6133
function flattenCfnRouteResponseMixinProps(props) {
    const ret = {};
    if ((props.apiId !== undefined))
        ret.apiId = cdk.getRefProperty(props.apiId?.apiRef, 'apiId') ?? cdk.ensureStringOrUndefined(props.apiId, "apiId", "apigatewayv2.IApiRef | string");
    if ((props.routeId !== undefined))
        ret.routeId = cdk.getRefProperty(props.routeId?.routeRef, 'routeId') ?? cdk.ensureStringOrUndefined(props.routeId, "routeId", "apigatewayv2.IRouteRef | string");
    return ret;
}
/**
 * The `AWS::ApiGatewayV2::Stage` resource specifies a stage for an API.
 *
 * Each stage is a named reference to a deployment of the API and is made available for client applications to call. To learn more, see [Working with stages for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-stages.html) and [Deploy a WebSocket API in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-set-up-websocket-deployment.html) .
 *
 * @cloudformationResource AWS::ApiGatewayV2::Stage
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html
 */
class CfnStagePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnStagePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["accessLogSettings", "accessPolicyId", "apiId", "autoDeploy", "clientCertificateId", "defaultRouteSettings", "deploymentId", "description", "routeSettings", "stageName", "stageVariables", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::Stage`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnStageMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnStagePropsMixin);
            }
            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.CfnStage.isCfnStage(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnStagePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnStagePropsMixin = CfnStagePropsMixin;
/**
 * The `AWS::ApiGatewayV2::VpcLink` resource creates a VPC link.
 *
 * Supported only for HTTP APIs. The VPC link status must transition from `PENDING` to `AVAILABLE` to successfully create a VPC link, which can take up to 10 minutes. To learn more, see [Working with VPC Links for HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vpc-links.html) in the *API Gateway Developer Guide* .
 *
 * @cloudformationResource AWS::ApiGatewayV2::VpcLink
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-vpclink.html
 */
class CfnVpcLinkPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnVpcLinkPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["name", "securityGroupIds", "subnetIds", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::VpcLink`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnVpcLinkMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnVpcLinkPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnVpcLinkMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnVpcLink.isCfnVpcLink(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnVpcLinkPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnVpcLinkPropsMixin = CfnVpcLinkPropsMixin;
// @ts-ignore TS6133
function flattenCfnVpcLinkMixinProps(props) {
    const ret = {};
    if ((props.securityGroupIds !== undefined))
        ret.securityGroupIds = cdk.mapArrayInPlace(props.securityGroupIds, (item) => cdk.getRefProperty(item?.securityGroupRef, 'securityGroupId') ?? cdk.ensureStringOrUndefined(item, "securityGroupIds", "ec2.ISecurityGroupRef | string"));
    if ((props.subnetIds !== undefined))
        ret.subnetIds = cdk.mapArrayInPlace(props.subnetIds, (item) => cdk.getRefProperty(item?.subnetRef, 'subnetId') ?? cdk.ensureStringOrUndefined(item, "subnetIds", "ec2.ISubnetRef | string"));
    return ret;
}
/**
 * Represents a routing rule.
 *
 * When the incoming request to a domain name matches the conditions for a rule, API Gateway invokes a stage of a target API. Supported only for REST APIs.
 *
 * @cloudformationResource AWS::ApiGatewayV2::RoutingRule
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-routingrule.html
 */
class CfnRoutingRulePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_apigatewayv2.CfnRoutingRulePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["actions", "conditions", "domainNameArn", "priority"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::ApiGatewayV2::RoutingRule`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_apigatewayv2_CfnRoutingRuleMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnRoutingRulePropsMixin);
            }
            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.CfnRoutingRule.isCfnRoutingRule(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnRoutingRulePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnRoutingRulePropsMixin = CfnRoutingRulePropsMixin;
