import { NetlifyDbClient, NetlifyDbSession } from "./session.cjs";
import { entityKind } from "../entity.cjs";
import { AnyRelations, EmptyRelations } from "../relations.cjs";
import { PgCodecs } from "../pg-core/codecs.cjs";
import { PgAsyncDatabase } from "../pg-core/async/db.cjs";
import { DrizzlePgConfig } from "../pg-core/utils.cjs";
import { BatchItem, BatchResponse } from "../batch.cjs";
import { HTTPQueryOptions, Pool } from "@neondatabase/serverless";
import { NeonHttpClient, NeonHttpQueryResultHKT } from "../neon-http/session.cjs";
import { NodePgDatabase } from "../node-postgres/driver.cjs";
import { NodePgClient } from "../node-postgres/session.cjs";

//#region src/netlify-db/driver.d.ts
interface ServerlessDrizzleClient {
  driver: 'serverless';
  httpClient: NeonHttpClient;
  pool: Pool;
  connectionString: string;
}
interface ServerDrizzleClient {
  driver: 'server';
  pool: NodePgClient;
  connectionString: string;
}
type DrizzleClient = ServerlessDrizzleClient | ServerDrizzleClient;
interface DrizzleNetlifyConfig<TRelations extends AnyRelations = EmptyRelations> extends DrizzlePgConfig<TRelations> {
  /** Netlify utilizes different driver for transactions, thus requiring separate set of codecs */
  transactionCodecs?: PgCodecs | undefined;
}
declare class NetlifyDbDatabase<TRelations extends AnyRelations = EmptyRelations> extends PgAsyncDatabase<NeonHttpQueryResultHKT, TRelations> {
  static readonly [entityKind]: string;
  session: NetlifyDbSession<TRelations>;
  $withAuth(token: Exclude<HTTPQueryOptions<true, true>['authToken'], undefined>): Omit<this, '$withAuth'>;
  batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(batch: T): Promise<BatchResponse<T>>;
}
declare function drizzle<TRelations extends AnyRelations = EmptyRelations>(): (NetlifyDbDatabase<TRelations> & {
  $client: NetlifyDbClient;
}) | (NodePgDatabase<TRelations> & {
  $client: NodePgClient;
});
declare function drizzle<TRelations extends AnyRelations = EmptyRelations>(config: DrizzleNetlifyConfig<TRelations>): (NetlifyDbDatabase<TRelations> & {
  $client: NetlifyDbClient;
}) | (NodePgDatabase<TRelations> & {
  $client: NodePgClient;
});
declare function drizzle<TRelations extends AnyRelations = EmptyRelations>(config: DrizzleNetlifyConfig<TRelations> & {
  client: ServerlessDrizzleClient;
}): NetlifyDbDatabase<TRelations> & {
  $client: NetlifyDbClient;
};
declare function drizzle<TRelations extends AnyRelations = EmptyRelations>(config: DrizzleNetlifyConfig<TRelations> & {
  client: ServerDrizzleClient;
}): NodePgDatabase<TRelations> & {
  $client: NodePgClient;
};
declare function drizzle<TRelations extends AnyRelations = EmptyRelations>(config: DrizzleNetlifyConfig<TRelations> & {
  client: DrizzleClient;
}): (NetlifyDbDatabase<TRelations> & {
  $client: NetlifyDbClient;
}) | (NodePgDatabase<TRelations> & {
  $client: NodePgClient;
});
declare function drizzle<TRelations extends AnyRelations = EmptyRelations>(...params: [string] | [string, DrizzleNetlifyConfig<TRelations>] | [(DrizzleNetlifyConfig<TRelations> & ({
  connection: string | {
    connectionString: string;
  };
} | {
  client: NetlifyDbClient | DrizzleClient;
}))]): NetlifyDbDatabase<TRelations> & {
  $client: NetlifyDbClient;
};
declare namespace drizzle {
  function mock<TRelations extends AnyRelations = EmptyRelations>(config?: DrizzleNetlifyConfig<TRelations>): NetlifyDbDatabase<TRelations> & {
    $client: '$client is not available on drizzle.mock()';
  };
}
//#endregion
export { DrizzleClient, DrizzleNetlifyConfig, NetlifyDbDatabase, ServerDrizzleClient, ServerlessDrizzleClient, drizzle };
//# sourceMappingURL=driver.d.cts.map