export type ModelDataSourceStrategy = DefaultDynamoDbModelDataSourceStrategy | AmplifyDynamoDbModelDataSourceStrategy | SQLLambdaModelDataSourceStrategy;
export interface ModelDataSourceStrategyBase {
    dbType: ModelDataSourceStrategyDbType;
}
export type ModelDataSourceStrategyDbType = 'DYNAMODB' | ModelDataSourceStrategySqlDbType;
export type ModelDataSourceStrategySqlDbType = 'MYSQL' | 'POSTGRES';
export interface DefaultDynamoDbModelDataSourceStrategy extends ModelDataSourceStrategyBase {
    readonly dbType: 'DYNAMODB';
    readonly provisionStrategy: 'DEFAULT';
}
export interface AmplifyDynamoDbModelDataSourceStrategy extends ModelDataSourceStrategyBase {
    readonly dbType: 'DYNAMODB';
    readonly provisionStrategy: 'AMPLIFY_TABLE';
}
export interface SQLLambdaModelDataSourceStrategy extends ModelDataSourceStrategyBase {
    readonly name: string;
    readonly dbType: ModelDataSourceStrategySqlDbType;
    readonly dbConnectionConfig: SqlModelDataSourceDbConnectionConfig;
    readonly vpcConfiguration?: VpcConfig;
    readonly sqlLambdaProvisionedConcurrencyConfig?: ProvisionedConcurrencyConfig;
}
export interface VpcConfig {
    readonly vpcId: string;
    readonly securityGroupIds: string[];
    readonly subnetAvailabilityZoneConfig: SubnetAvailabilityZone[];
}
export interface ProvisionedConcurrencyConfig {
    readonly provisionedConcurrentExecutions: number;
}
export interface SubnetAvailabilityZone {
    readonly subnetId: string;
    readonly availabilityZone: string;
}
export type SqlModelDataSourceDbConnectionConfig = SqlModelDataSourceSecretsManagerDbConnectionConfig | SqlModelDataSourceSsmDbConnectionConfig;
export interface SqlModelDataSourceSecretsManagerDbConnectionConfig {
    readonly secretArn: string;
    readonly keyArn?: string;
    readonly port: number;
    readonly databaseName: string;
    readonly hostname: string;
}
export interface SqlModelDataSourceSsmDbConnectionConfig {
    readonly hostnameSsmPath: string;
    readonly portSsmPath: string;
    readonly usernameSsmPath: string;
    readonly passwordSsmPath: string;
    readonly databaseNameSsmPath: string;
}
export interface SqlDirectiveDataSourceStrategy {
    readonly typeName: 'Query' | 'Mutation';
    readonly fieldName: string;
    readonly strategy: SQLLambdaModelDataSourceStrategy;
    readonly customSqlStatements?: Record<string, string>;
}
export interface DataSourceStrategiesProvider {
    dataSourceStrategies: Record<string, ModelDataSourceStrategy>;
    sqlDirectiveDataSourceStrategies?: SqlDirectiveDataSourceStrategy[];
}
export interface RDSLayerMapping {
    readonly [key: string]: {
        layerRegion: string;
    };
}
export interface RDSLayerMappingProvider {
    rdsLayerMapping?: RDSLayerMapping;
}
export declare const isSqlModelDataSourceDbConnectionConfig: (obj: any) => obj is SqlModelDataSourceDbConnectionConfig;
export declare const isSqlModelDataSourceSsmDbConnectionConfig: (obj: any) => obj is SqlModelDataSourceSsmDbConnectionConfig;
export declare const isSqlModelDataSourceSecretsManagerDbConnectionConfig: (obj: any) => obj is SqlModelDataSourceSecretsManagerDbConnectionConfig;
//# sourceMappingURL=types.d.ts.map