import * as zod from 'zod';
import { TypeOf } from 'zod';

declare const driver: zod.ZodUnion<[zod.ZodUnion<[zod.ZodLiteral<"better-sqlite">, zod.ZodLiteral<"turso">, zod.ZodLiteral<"libsql">, zod.ZodLiteral<"d1">, zod.ZodLiteral<"expo">]>, zod.ZodLiteral<"aws-data-api">, zod.ZodLiteral<"mysql2">]>;
type Driver = TypeOf<typeof driver>;

declare const dialect: zod.ZodEnum<["postgresql", "mysql", "sqlite"]>;
type Dialect = TypeOf<typeof dialect>;

type Verify<T, U extends T> = U;
type Config = {
    dialect: Dialect;
    out?: string;
    breakpoints?: boolean;
    tablesFilter?: string | string[];
    schemaFilter?: string | string[];
    schema?: string | string[];
    verbose?: boolean;
    strict?: boolean;
    migrations?: {
        table?: string;
        schema?: string;
    };
    introspect?: {
        casing: "camel" | "preserve";
    };
} & ({
    dialect: Verify<Dialect, "sqlite">;
    driver: Verify<Driver, "turso">;
    dbCredentials: {
        url: string;
        authToken?: string;
    };
} | {
    dialect: "sqlite";
    dbCredentials: {
        url: string;
    };
} | {
    dialect: Verify<Dialect, "postgresql">;
    dbCredentials: {
        host: string;
        port?: number;
        user?: string;
        password?: string;
        database: string;
        ssl?: boolean;
    } | {
        url: string;
    };
} | {
    dialect: Verify<Dialect, "postgresql">;
    driver: Verify<Driver, "aws-data-api">;
    dbCredentials: {
        database: string;
        secretArn: string;
        resourceArn: string;
    };
} | {
    dialect: Verify<Dialect, "mysql">;
    dbCredentials: {
        host: string;
        port?: number;
        user?: string;
        password?: string;
        database: string;
    } | {
        url: string;
    };
} | {
    dialect: Verify<Dialect, "sqlite">;
    driver: Verify<Driver, "d1">;
    dbCredentials: {
        wranglerConfigPath: string;
        dbName: string;
    };
} | {
    dialect: Verify<Dialect, "sqlite">;
    driver: Verify<Driver, "expo">;
} | {});
declare function defineConfig(config: Config): Config;

export { type Config, defineConfig };
