// generated from terraform resource schema
import * as cdktf from 'cdktf';
export function appsyncGraphqlApiAdditionalAuthenticationProviderLambdaAuthorizerConfigToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        authorizer_result_ttl_in_seconds: cdktf.numberToTerraform(struct.authorizerResultTtlInSeconds),
        authorizer_uri: cdktf.stringToTerraform(struct.authorizerUri),
        identity_validation_expression: cdktf.stringToTerraform(struct.identityValidationExpression),
    };
}
export class AppsyncGraphqlApiAdditionalAuthenticationProviderLambdaAuthorizerConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._authorizerResultTtlInSeconds !== undefined) {
            hasAnyValues = true;
            internalValueResult.authorizerResultTtlInSeconds = this._authorizerResultTtlInSeconds;
        }
        if (this._authorizerUri !== undefined) {
            hasAnyValues = true;
            internalValueResult.authorizerUri = this._authorizerUri;
        }
        if (this._identityValidationExpression !== undefined) {
            hasAnyValues = true;
            internalValueResult.identityValidationExpression = this._identityValidationExpression;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._authorizerResultTtlInSeconds = undefined;
            this._authorizerUri = undefined;
            this._identityValidationExpression = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._authorizerResultTtlInSeconds = value.authorizerResultTtlInSeconds;
            this._authorizerUri = value.authorizerUri;
            this._identityValidationExpression = value.identityValidationExpression;
        }
    }
    // authorizer_result_ttl_in_seconds - computed: false, optional: true, required: false
    _authorizerResultTtlInSeconds;
    get authorizerResultTtlInSeconds() {
        return this.getNumberAttribute('authorizer_result_ttl_in_seconds');
    }
    set authorizerResultTtlInSeconds(value) {
        this._authorizerResultTtlInSeconds = value;
    }
    resetAuthorizerResultTtlInSeconds() {
        this._authorizerResultTtlInSeconds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get authorizerResultTtlInSecondsInput() {
        return this._authorizerResultTtlInSeconds;
    }
    // authorizer_uri - computed: false, optional: false, required: true
    _authorizerUri;
    get authorizerUri() {
        return this.getStringAttribute('authorizer_uri');
    }
    set authorizerUri(value) {
        this._authorizerUri = value;
    }
    // Temporarily expose input value. Use with caution.
    get authorizerUriInput() {
        return this._authorizerUri;
    }
    // identity_validation_expression - computed: false, optional: true, required: false
    _identityValidationExpression;
    get identityValidationExpression() {
        return this.getStringAttribute('identity_validation_expression');
    }
    set identityValidationExpression(value) {
        this._identityValidationExpression = value;
    }
    resetIdentityValidationExpression() {
        this._identityValidationExpression = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get identityValidationExpressionInput() {
        return this._identityValidationExpression;
    }
}
export function appsyncGraphqlApiAdditionalAuthenticationProviderOpenidConnectConfigToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        auth_ttl: cdktf.numberToTerraform(struct.authTtl),
        client_id: cdktf.stringToTerraform(struct.clientId),
        iat_ttl: cdktf.numberToTerraform(struct.iatTtl),
        issuer: cdktf.stringToTerraform(struct.issuer),
    };
}
export class AppsyncGraphqlApiAdditionalAuthenticationProviderOpenidConnectConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._authTtl !== undefined) {
            hasAnyValues = true;
            internalValueResult.authTtl = this._authTtl;
        }
        if (this._clientId !== undefined) {
            hasAnyValues = true;
            internalValueResult.clientId = this._clientId;
        }
        if (this._iatTtl !== undefined) {
            hasAnyValues = true;
            internalValueResult.iatTtl = this._iatTtl;
        }
        if (this._issuer !== undefined) {
            hasAnyValues = true;
            internalValueResult.issuer = this._issuer;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._authTtl = undefined;
            this._clientId = undefined;
            this._iatTtl = undefined;
            this._issuer = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._authTtl = value.authTtl;
            this._clientId = value.clientId;
            this._iatTtl = value.iatTtl;
            this._issuer = value.issuer;
        }
    }
    // auth_ttl - computed: false, optional: true, required: false
    _authTtl;
    get authTtl() {
        return this.getNumberAttribute('auth_ttl');
    }
    set authTtl(value) {
        this._authTtl = value;
    }
    resetAuthTtl() {
        this._authTtl = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get authTtlInput() {
        return this._authTtl;
    }
    // client_id - computed: false, optional: true, required: false
    _clientId;
    get clientId() {
        return this.getStringAttribute('client_id');
    }
    set clientId(value) {
        this._clientId = value;
    }
    resetClientId() {
        this._clientId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get clientIdInput() {
        return this._clientId;
    }
    // iat_ttl - computed: false, optional: true, required: false
    _iatTtl;
    get iatTtl() {
        return this.getNumberAttribute('iat_ttl');
    }
    set iatTtl(value) {
        this._iatTtl = value;
    }
    resetIatTtl() {
        this._iatTtl = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get iatTtlInput() {
        return this._iatTtl;
    }
    // issuer - computed: false, optional: false, required: true
    _issuer;
    get issuer() {
        return this.getStringAttribute('issuer');
    }
    set issuer(value) {
        this._issuer = value;
    }
    // Temporarily expose input value. Use with caution.
    get issuerInput() {
        return this._issuer;
    }
}
export function appsyncGraphqlApiAdditionalAuthenticationProviderUserPoolConfigToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        app_id_client_regex: cdktf.stringToTerraform(struct.appIdClientRegex),
        aws_region: cdktf.stringToTerraform(struct.awsRegion),
        user_pool_id: cdktf.stringToTerraform(struct.userPoolId),
    };
}
export class AppsyncGraphqlApiAdditionalAuthenticationProviderUserPoolConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._appIdClientRegex !== undefined) {
            hasAnyValues = true;
            internalValueResult.appIdClientRegex = this._appIdClientRegex;
        }
        if (this._awsRegion !== undefined) {
            hasAnyValues = true;
            internalValueResult.awsRegion = this._awsRegion;
        }
        if (this._userPoolId !== undefined) {
            hasAnyValues = true;
            internalValueResult.userPoolId = this._userPoolId;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._appIdClientRegex = undefined;
            this._awsRegion = undefined;
            this._userPoolId = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._appIdClientRegex = value.appIdClientRegex;
            this._awsRegion = value.awsRegion;
            this._userPoolId = value.userPoolId;
        }
    }
    // app_id_client_regex - computed: false, optional: true, required: false
    _appIdClientRegex;
    get appIdClientRegex() {
        return this.getStringAttribute('app_id_client_regex');
    }
    set appIdClientRegex(value) {
        this._appIdClientRegex = value;
    }
    resetAppIdClientRegex() {
        this._appIdClientRegex = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get appIdClientRegexInput() {
        return this._appIdClientRegex;
    }
    // aws_region - computed: true, optional: true, required: false
    _awsRegion;
    get awsRegion() {
        return this.getStringAttribute('aws_region');
    }
    set awsRegion(value) {
        this._awsRegion = value;
    }
    resetAwsRegion() {
        this._awsRegion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get awsRegionInput() {
        return this._awsRegion;
    }
    // user_pool_id - computed: false, optional: false, required: true
    _userPoolId;
    get userPoolId() {
        return this.getStringAttribute('user_pool_id');
    }
    set userPoolId(value) {
        this._userPoolId = value;
    }
    // Temporarily expose input value. Use with caution.
    get userPoolIdInput() {
        return this._userPoolId;
    }
}
export function appsyncGraphqlApiAdditionalAuthenticationProviderToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        authentication_type: cdktf.stringToTerraform(struct.authenticationType),
        lambda_authorizer_config: appsyncGraphqlApiAdditionalAuthenticationProviderLambdaAuthorizerConfigToTerraform(struct.lambdaAuthorizerConfig),
        openid_connect_config: appsyncGraphqlApiAdditionalAuthenticationProviderOpenidConnectConfigToTerraform(struct.openidConnectConfig),
        user_pool_config: appsyncGraphqlApiAdditionalAuthenticationProviderUserPoolConfigToTerraform(struct.userPoolConfig),
    };
}
export function appsyncGraphqlApiLambdaAuthorizerConfigToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        authorizer_result_ttl_in_seconds: cdktf.numberToTerraform(struct.authorizerResultTtlInSeconds),
        authorizer_uri: cdktf.stringToTerraform(struct.authorizerUri),
        identity_validation_expression: cdktf.stringToTerraform(struct.identityValidationExpression),
    };
}
export class AppsyncGraphqlApiLambdaAuthorizerConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._authorizerResultTtlInSeconds !== undefined) {
            hasAnyValues = true;
            internalValueResult.authorizerResultTtlInSeconds = this._authorizerResultTtlInSeconds;
        }
        if (this._authorizerUri !== undefined) {
            hasAnyValues = true;
            internalValueResult.authorizerUri = this._authorizerUri;
        }
        if (this._identityValidationExpression !== undefined) {
            hasAnyValues = true;
            internalValueResult.identityValidationExpression = this._identityValidationExpression;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._authorizerResultTtlInSeconds = undefined;
            this._authorizerUri = undefined;
            this._identityValidationExpression = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._authorizerResultTtlInSeconds = value.authorizerResultTtlInSeconds;
            this._authorizerUri = value.authorizerUri;
            this._identityValidationExpression = value.identityValidationExpression;
        }
    }
    // authorizer_result_ttl_in_seconds - computed: false, optional: true, required: false
    _authorizerResultTtlInSeconds;
    get authorizerResultTtlInSeconds() {
        return this.getNumberAttribute('authorizer_result_ttl_in_seconds');
    }
    set authorizerResultTtlInSeconds(value) {
        this._authorizerResultTtlInSeconds = value;
    }
    resetAuthorizerResultTtlInSeconds() {
        this._authorizerResultTtlInSeconds = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get authorizerResultTtlInSecondsInput() {
        return this._authorizerResultTtlInSeconds;
    }
    // authorizer_uri - computed: false, optional: false, required: true
    _authorizerUri;
    get authorizerUri() {
        return this.getStringAttribute('authorizer_uri');
    }
    set authorizerUri(value) {
        this._authorizerUri = value;
    }
    // Temporarily expose input value. Use with caution.
    get authorizerUriInput() {
        return this._authorizerUri;
    }
    // identity_validation_expression - computed: false, optional: true, required: false
    _identityValidationExpression;
    get identityValidationExpression() {
        return this.getStringAttribute('identity_validation_expression');
    }
    set identityValidationExpression(value) {
        this._identityValidationExpression = value;
    }
    resetIdentityValidationExpression() {
        this._identityValidationExpression = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get identityValidationExpressionInput() {
        return this._identityValidationExpression;
    }
}
export function appsyncGraphqlApiLogConfigToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        cloudwatch_logs_role_arn: cdktf.stringToTerraform(struct.cloudwatchLogsRoleArn),
        exclude_verbose_content: cdktf.booleanToTerraform(struct.excludeVerboseContent),
        field_log_level: cdktf.stringToTerraform(struct.fieldLogLevel),
    };
}
export class AppsyncGraphqlApiLogConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._cloudwatchLogsRoleArn !== undefined) {
            hasAnyValues = true;
            internalValueResult.cloudwatchLogsRoleArn = this._cloudwatchLogsRoleArn;
        }
        if (this._excludeVerboseContent !== undefined) {
            hasAnyValues = true;
            internalValueResult.excludeVerboseContent = this._excludeVerboseContent;
        }
        if (this._fieldLogLevel !== undefined) {
            hasAnyValues = true;
            internalValueResult.fieldLogLevel = this._fieldLogLevel;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._cloudwatchLogsRoleArn = undefined;
            this._excludeVerboseContent = undefined;
            this._fieldLogLevel = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._cloudwatchLogsRoleArn = value.cloudwatchLogsRoleArn;
            this._excludeVerboseContent = value.excludeVerboseContent;
            this._fieldLogLevel = value.fieldLogLevel;
        }
    }
    // cloudwatch_logs_role_arn - computed: false, optional: false, required: true
    _cloudwatchLogsRoleArn;
    get cloudwatchLogsRoleArn() {
        return this.getStringAttribute('cloudwatch_logs_role_arn');
    }
    set cloudwatchLogsRoleArn(value) {
        this._cloudwatchLogsRoleArn = value;
    }
    // Temporarily expose input value. Use with caution.
    get cloudwatchLogsRoleArnInput() {
        return this._cloudwatchLogsRoleArn;
    }
    // exclude_verbose_content - computed: false, optional: true, required: false
    _excludeVerboseContent;
    get excludeVerboseContent() {
        return this.getBooleanAttribute('exclude_verbose_content');
    }
    set excludeVerboseContent(value) {
        this._excludeVerboseContent = value;
    }
    resetExcludeVerboseContent() {
        this._excludeVerboseContent = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get excludeVerboseContentInput() {
        return this._excludeVerboseContent;
    }
    // field_log_level - computed: false, optional: false, required: true
    _fieldLogLevel;
    get fieldLogLevel() {
        return this.getStringAttribute('field_log_level');
    }
    set fieldLogLevel(value) {
        this._fieldLogLevel = value;
    }
    // Temporarily expose input value. Use with caution.
    get fieldLogLevelInput() {
        return this._fieldLogLevel;
    }
}
export function appsyncGraphqlApiOpenidConnectConfigToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        auth_ttl: cdktf.numberToTerraform(struct.authTtl),
        client_id: cdktf.stringToTerraform(struct.clientId),
        iat_ttl: cdktf.numberToTerraform(struct.iatTtl),
        issuer: cdktf.stringToTerraform(struct.issuer),
    };
}
export class AppsyncGraphqlApiOpenidConnectConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._authTtl !== undefined) {
            hasAnyValues = true;
            internalValueResult.authTtl = this._authTtl;
        }
        if (this._clientId !== undefined) {
            hasAnyValues = true;
            internalValueResult.clientId = this._clientId;
        }
        if (this._iatTtl !== undefined) {
            hasAnyValues = true;
            internalValueResult.iatTtl = this._iatTtl;
        }
        if (this._issuer !== undefined) {
            hasAnyValues = true;
            internalValueResult.issuer = this._issuer;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._authTtl = undefined;
            this._clientId = undefined;
            this._iatTtl = undefined;
            this._issuer = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._authTtl = value.authTtl;
            this._clientId = value.clientId;
            this._iatTtl = value.iatTtl;
            this._issuer = value.issuer;
        }
    }
    // auth_ttl - computed: false, optional: true, required: false
    _authTtl;
    get authTtl() {
        return this.getNumberAttribute('auth_ttl');
    }
    set authTtl(value) {
        this._authTtl = value;
    }
    resetAuthTtl() {
        this._authTtl = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get authTtlInput() {
        return this._authTtl;
    }
    // client_id - computed: false, optional: true, required: false
    _clientId;
    get clientId() {
        return this.getStringAttribute('client_id');
    }
    set clientId(value) {
        this._clientId = value;
    }
    resetClientId() {
        this._clientId = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get clientIdInput() {
        return this._clientId;
    }
    // iat_ttl - computed: false, optional: true, required: false
    _iatTtl;
    get iatTtl() {
        return this.getNumberAttribute('iat_ttl');
    }
    set iatTtl(value) {
        this._iatTtl = value;
    }
    resetIatTtl() {
        this._iatTtl = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get iatTtlInput() {
        return this._iatTtl;
    }
    // issuer - computed: false, optional: false, required: true
    _issuer;
    get issuer() {
        return this.getStringAttribute('issuer');
    }
    set issuer(value) {
        this._issuer = value;
    }
    // Temporarily expose input value. Use with caution.
    get issuerInput() {
        return this._issuer;
    }
}
export function appsyncGraphqlApiUserPoolConfigToTerraform(struct) {
    if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
        return struct;
    }
    if (cdktf.isComplexElement(struct)) {
        throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
    }
    return {
        app_id_client_regex: cdktf.stringToTerraform(struct.appIdClientRegex),
        aws_region: cdktf.stringToTerraform(struct.awsRegion),
        default_action: cdktf.stringToTerraform(struct.defaultAction),
        user_pool_id: cdktf.stringToTerraform(struct.userPoolId),
    };
}
export class AppsyncGraphqlApiUserPoolConfigOutputReference extends cdktf.ComplexObject {
    isEmptyObject = false;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param isSingleItem True if this is a block, false if it's a list
    */
    constructor(terraformResource, terraformAttribute, isSingleItem) {
        super(terraformResource, terraformAttribute, isSingleItem);
    }
    get internalValue() {
        let hasAnyValues = this.isEmptyObject;
        const internalValueResult = {};
        if (this._appIdClientRegex !== undefined) {
            hasAnyValues = true;
            internalValueResult.appIdClientRegex = this._appIdClientRegex;
        }
        if (this._awsRegion !== undefined) {
            hasAnyValues = true;
            internalValueResult.awsRegion = this._awsRegion;
        }
        if (this._defaultAction !== undefined) {
            hasAnyValues = true;
            internalValueResult.defaultAction = this._defaultAction;
        }
        if (this._userPoolId !== undefined) {
            hasAnyValues = true;
            internalValueResult.userPoolId = this._userPoolId;
        }
        return hasAnyValues ? internalValueResult : undefined;
    }
    set internalValue(value) {
        if (value === undefined) {
            this.isEmptyObject = false;
            this._appIdClientRegex = undefined;
            this._awsRegion = undefined;
            this._defaultAction = undefined;
            this._userPoolId = undefined;
        }
        else {
            this.isEmptyObject = Object.keys(value).length === 0;
            this._appIdClientRegex = value.appIdClientRegex;
            this._awsRegion = value.awsRegion;
            this._defaultAction = value.defaultAction;
            this._userPoolId = value.userPoolId;
        }
    }
    // app_id_client_regex - computed: false, optional: true, required: false
    _appIdClientRegex;
    get appIdClientRegex() {
        return this.getStringAttribute('app_id_client_regex');
    }
    set appIdClientRegex(value) {
        this._appIdClientRegex = value;
    }
    resetAppIdClientRegex() {
        this._appIdClientRegex = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get appIdClientRegexInput() {
        return this._appIdClientRegex;
    }
    // aws_region - computed: true, optional: true, required: false
    _awsRegion;
    get awsRegion() {
        return this.getStringAttribute('aws_region');
    }
    set awsRegion(value) {
        this._awsRegion = value;
    }
    resetAwsRegion() {
        this._awsRegion = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get awsRegionInput() {
        return this._awsRegion;
    }
    // default_action - computed: false, optional: false, required: true
    _defaultAction;
    get defaultAction() {
        return this.getStringAttribute('default_action');
    }
    set defaultAction(value) {
        this._defaultAction = value;
    }
    // Temporarily expose input value. Use with caution.
    get defaultActionInput() {
        return this._defaultAction;
    }
    // user_pool_id - computed: false, optional: false, required: true
    _userPoolId;
    get userPoolId() {
        return this.getStringAttribute('user_pool_id');
    }
    set userPoolId(value) {
        this._userPoolId = value;
    }
    // Temporarily expose input value. Use with caution.
    get userPoolIdInput() {
        return this._userPoolId;
    }
}
/**
* Represents a {@link https://www.terraform.io/docs/providers/aws/r/appsync_graphql_api aws_appsync_graphql_api}
*/
export class AppsyncGraphqlApi extends cdktf.TerraformResource {
    // =================
    // STATIC PROPERTIES
    // =================
    static tfResourceType = "aws_appsync_graphql_api";
    // ===========
    // INITIALIZER
    // ===========
    /**
    * Create a new {@link https://www.terraform.io/docs/providers/aws/r/appsync_graphql_api aws_appsync_graphql_api} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options AppsyncGraphqlApiConfig
    */
    constructor(scope, id, config) {
        super(scope, id, {
            terraformResourceType: 'aws_appsync_graphql_api',
            terraformGeneratorMetadata: {
                providerName: 'aws'
            },
            provider: config.provider,
            dependsOn: config.dependsOn,
            count: config.count,
            lifecycle: config.lifecycle
        });
        this._authenticationType = config.authenticationType;
        this._name = config.name;
        this._schema = config.schema;
        this._tags = config.tags;
        this._tagsAll = config.tagsAll;
        this._xrayEnabled = config.xrayEnabled;
        this._additionalAuthenticationProvider = config.additionalAuthenticationProvider;
        this._lambdaAuthorizerConfig.internalValue = config.lambdaAuthorizerConfig;
        this._logConfig.internalValue = config.logConfig;
        this._openidConnectConfig.internalValue = config.openidConnectConfig;
        this._userPoolConfig.internalValue = config.userPoolConfig;
    }
    // ==========
    // ATTRIBUTES
    // ==========
    // arn - computed: true, optional: false, required: false
    get arn() {
        return this.getStringAttribute('arn');
    }
    // authentication_type - computed: false, optional: false, required: true
    _authenticationType;
    get authenticationType() {
        return this.getStringAttribute('authentication_type');
    }
    set authenticationType(value) {
        this._authenticationType = value;
    }
    // Temporarily expose input value. Use with caution.
    get authenticationTypeInput() {
        return this._authenticationType;
    }
    // id - computed: true, optional: true, required: false
    get id() {
        return this.getStringAttribute('id');
    }
    // name - computed: false, optional: false, required: true
    _name;
    get name() {
        return this.getStringAttribute('name');
    }
    set name(value) {
        this._name = value;
    }
    // Temporarily expose input value. Use with caution.
    get nameInput() {
        return this._name;
    }
    // schema - computed: false, optional: true, required: false
    _schema;
    get schema() {
        return this.getStringAttribute('schema');
    }
    set schema(value) {
        this._schema = value;
    }
    resetSchema() {
        this._schema = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get schemaInput() {
        return this._schema;
    }
    // tags - computed: false, optional: true, required: false
    _tags;
    get tags() {
        return this.getStringMapAttribute('tags');
    }
    set tags(value) {
        this._tags = value;
    }
    resetTags() {
        this._tags = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsInput() {
        return this._tags;
    }
    // tags_all - computed: true, optional: true, required: false
    _tagsAll;
    get tagsAll() {
        return this.getStringMapAttribute('tags_all');
    }
    set tagsAll(value) {
        this._tagsAll = value;
    }
    resetTagsAll() {
        this._tagsAll = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get tagsAllInput() {
        return this._tagsAll;
    }
    // uris - computed: true, optional: false, required: false
    uris(key) {
        return new cdktf.StringMap(this, 'uris').lookup(key);
    }
    // xray_enabled - computed: false, optional: true, required: false
    _xrayEnabled;
    get xrayEnabled() {
        return this.getBooleanAttribute('xray_enabled');
    }
    set xrayEnabled(value) {
        this._xrayEnabled = value;
    }
    resetXrayEnabled() {
        this._xrayEnabled = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get xrayEnabledInput() {
        return this._xrayEnabled;
    }
    // additional_authentication_provider - computed: false, optional: true, required: false
    _additionalAuthenticationProvider;
    get additionalAuthenticationProvider() {
        // Getting the computed value is not yet implemented
        return this.interpolationForAttribute('additional_authentication_provider');
    }
    set additionalAuthenticationProvider(value) {
        this._additionalAuthenticationProvider = value;
    }
    resetAdditionalAuthenticationProvider() {
        this._additionalAuthenticationProvider = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get additionalAuthenticationProviderInput() {
        return this._additionalAuthenticationProvider;
    }
    // lambda_authorizer_config - computed: false, optional: true, required: false
    _lambdaAuthorizerConfig = new AppsyncGraphqlApiLambdaAuthorizerConfigOutputReference(this, "lambda_authorizer_config", true);
    get lambdaAuthorizerConfig() {
        return this._lambdaAuthorizerConfig;
    }
    putLambdaAuthorizerConfig(value) {
        this._lambdaAuthorizerConfig.internalValue = value;
    }
    resetLambdaAuthorizerConfig() {
        this._lambdaAuthorizerConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get lambdaAuthorizerConfigInput() {
        return this._lambdaAuthorizerConfig.internalValue;
    }
    // log_config - computed: false, optional: true, required: false
    _logConfig = new AppsyncGraphqlApiLogConfigOutputReference(this, "log_config", true);
    get logConfig() {
        return this._logConfig;
    }
    putLogConfig(value) {
        this._logConfig.internalValue = value;
    }
    resetLogConfig() {
        this._logConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get logConfigInput() {
        return this._logConfig.internalValue;
    }
    // openid_connect_config - computed: false, optional: true, required: false
    _openidConnectConfig = new AppsyncGraphqlApiOpenidConnectConfigOutputReference(this, "openid_connect_config", true);
    get openidConnectConfig() {
        return this._openidConnectConfig;
    }
    putOpenidConnectConfig(value) {
        this._openidConnectConfig.internalValue = value;
    }
    resetOpenidConnectConfig() {
        this._openidConnectConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get openidConnectConfigInput() {
        return this._openidConnectConfig.internalValue;
    }
    // user_pool_config - computed: false, optional: true, required: false
    _userPoolConfig = new AppsyncGraphqlApiUserPoolConfigOutputReference(this, "user_pool_config", true);
    get userPoolConfig() {
        return this._userPoolConfig;
    }
    putUserPoolConfig(value) {
        this._userPoolConfig.internalValue = value;
    }
    resetUserPoolConfig() {
        this._userPoolConfig.internalValue = undefined;
    }
    // Temporarily expose input value. Use with caution.
    get userPoolConfigInput() {
        return this._userPoolConfig.internalValue;
    }
    // =========
    // SYNTHESIS
    // =========
    synthesizeAttributes() {
        return {
            authentication_type: cdktf.stringToTerraform(this._authenticationType),
            name: cdktf.stringToTerraform(this._name),
            schema: cdktf.stringToTerraform(this._schema),
            tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._tags),
            tags_all: cdktf.hashMapper(cdktf.stringToTerraform)(this._tagsAll),
            xray_enabled: cdktf.booleanToTerraform(this._xrayEnabled),
            additional_authentication_provider: cdktf.listMapper(appsyncGraphqlApiAdditionalAuthenticationProviderToTerraform)(this._additionalAuthenticationProvider),
            lambda_authorizer_config: appsyncGraphqlApiLambdaAuthorizerConfigToTerraform(this._lambdaAuthorizerConfig.internalValue),
            log_config: appsyncGraphqlApiLogConfigToTerraform(this._logConfig.internalValue),
            openid_connect_config: appsyncGraphqlApiOpenidConnectConfigToTerraform(this._openidConnectConfig.internalValue),
            user_pool_config: appsyncGraphqlApiUserPoolConfigToTerraform(this._userPoolConfig.internalValue),
        };
    }
}
//# sourceMappingURL=appsync-graphql-api.js.map