import { DataSource } from 'typeorm';
import { BaseDataSourceOptions } from 'typeorm/data-source/BaseDataSourceOptions';
import { AuroraMysqlConnectionOptions } from 'typeorm/driver/aurora-mysql/AuroraMysqlConnectionOptions';
import { AuroraPostgresConnectionOptions } from 'typeorm/driver/aurora-postgres/AuroraPostgresConnectionOptions';
import { MysqlConnectionOptions } from 'typeorm/driver/mysql/MysqlConnectionOptions';
import { OracleConnectionOptions } from 'typeorm/driver/oracle/OracleConnectionOptions';
import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
import { SqliteConnectionOptions } from 'typeorm/driver/sqlite/SqliteConnectionOptions';
import { BetterSqlite3ConnectionOptions } from 'typeorm/driver/better-sqlite3/BetterSqlite3ConnectionOptions';
export interface AbstractShardingDataSource<S, T extends BaseDataSourceOptions> extends BaseDataSourceOptions {
    shards: Array<Omit<T, keyof BaseDataSourceOptions> & {
        onInitialize?: (dataSource: DataSource) => Promise<void>;
    } & S>;
}
export interface PostgresShardingDataSource<S> extends AbstractShardingDataSource<S, PostgresConnectionOptions> {
    type: 'postgres';
}
export interface AuroraPostgresShardingDataSource<S> extends AbstractShardingDataSource<S, AuroraPostgresConnectionOptions> {
    type: 'aurora-postgres';
}
export interface MysqlShardingDataSource<S> extends AbstractShardingDataSource<S, MysqlConnectionOptions> {
    type: 'mysql' | 'mariadb';
}
export interface AuroraMysqlShardingDataSource<S> extends AbstractShardingDataSource<S, AuroraMysqlConnectionOptions> {
    type: 'aurora-mysql';
}
export interface OracleShardingDataSource<S> extends AbstractShardingDataSource<S, OracleConnectionOptions> {
    type: 'oracle';
}
export interface SqliteShardingDataSource<S> extends AbstractShardingDataSource<S, SqliteConnectionOptions> {
    type: 'sqlite';
}
export interface BetterSqlite3ShardingDataSource<S> extends AbstractShardingDataSource<S, BetterSqlite3ConnectionOptions> {
    type: 'better-sqlite3';
}
export declare type AbstractShardingDataSourceOptions<S = {}> = PostgresShardingDataSource<S> | AuroraPostgresShardingDataSource<S> | MysqlShardingDataSource<S> | AuroraMysqlShardingDataSource<S> | OracleShardingDataSource<S> | SqliteShardingDataSource<S> | BetterSqlite3ShardingDataSource<S>;
export declare enum ShardingType {
    RANGE = "RANGE"
}
export declare type DefaultShardingKeyType = number | string;
export interface RangeShardingRule<T> {
    /**
     * greater or equals
     */
    minKey: T;
    /**
     * lesser
     */
    maxKey: T;
}
export declare type RangeShardingDataSourceOptions<T = DefaultShardingKeyType> = AbstractShardingDataSourceOptions<RangeShardingRule<T>> & {
    shardingType: ShardingType.RANGE;
};
export declare type ShardingDataSourceOptions = RangeShardingDataSourceOptions;
