import {
  DataSource,
  type MixedList,
  type EntityTarget,
  type FindOptionsWhere,
  type FindOptionsOrder,
  type FindOptionsRelations,
  type EntitySchema,
} from "typeorm";
import { ExcludeFuctionsMapper, OptionalKeysMapper } from "../utils/mappers";
export interface LocalDataSourceOpts {
  /**
   * Port number. Defaults to 5432.
   */
  port?: number;
  /**
   * Username to connect with.
   */
  username?: string;
  /**
   * Password to connect with.
   */
  password?: string;
  /**
   * Migrations to run.
   */
  migrations?: MixedList<string | Function>;
  /**
   * Whether to log SQL queries.
   */
  log?: boolean;
  /**
   * Database name.
   */
  databaseName?: string;
  /**
   * Typeorm subscribers
   */
  subscribers?: MixedList<string | Function>;
  /**
   * Typeorm entities
   */
  entities?: MixedList<string | Function | EntitySchema<any>>;
  /**
   * Whether to use localhost instead of Docker environment
   */
  shouldUseLocalhost?: boolean;
  /**
   * Docker service name if localhost is disabled
   */
  serviceName?: string;
}
declare class LocalDataSource {
  DS: DataSource;
  constructor(opts?: LocalDataSourceOpts);
  static constructDataSource(): LocalDataSource;
  /**
   *
   * @param silenceInfoLogs Don't log connection info.
   */
  connect(silenceInfoLogs?: boolean): void;
  /**
   *
   * @param silenceInfoLogs Don't log connection info.
   */
  disconnect(silenceInfoLogs?: boolean): void;
  isConnected(): boolean;
  insertEntity<T>(target: EntityTarget<T>, values: T): Promise<T>;
  insertManyEntities<T>(target: EntityTarget<T>, values: T[]): Promise<T[]>;
  querySingleEntity<T>(
    target: EntityTarget<T>,
    where: FindOptionsWhere<T> | FindOptionsWhere<T>[],
    relations?: FindOptionsRelations<T>
  ): Promise<T>;
  queryManyEntities<T>(
    target: EntityTarget<T>,
    where?: FindOptionsWhere<T> | FindOptionsWhere<T>[],
    order?: FindOptionsOrder<T>,
    relations?: FindOptionsRelations<T>,
    skip?: number,
    take?: number
  ): Promise<T[]>;
  updateEntity<T>(
    target: EntityTarget<T>,
    values: ExcludeFuctionsMapper<OptionalKeysMapper<T>>
  ): Promise<ExcludeFuctionsMapper<OptionalKeysMapper<T>> & T>;
  deleteEntity<T>(target: EntityTarget<T>, where: FindOptionsWhere<T>): Promise<import("typeorm").DeleteResult>;
  entityExists<T>(target: EntityTarget<T>, where: FindOptionsWhere<T>): Promise<boolean>;
  countEntities<T>(target: EntityTarget<T>, where?: FindOptionsWhere<T>): Promise<number>;
}
/**
 * Construct datasource object with default options.
 *
 */
export declare const initializeDSWithDefaultOptions: () => LocalDataSource;
/**
 *  Construct datasource object.
 * @param opts Initialization options. {@link LocalDataSourceOpts | See implementation}
 */
export declare const initializeDS: (opts?: LocalDataSourceOpts) => LocalDataSource;
/**
 * Construct datasource object with default options, and connect immediately.
 * @param silenceInfoLogs Don't log connection info.
 * @returns
 */
export declare const initializeConnectedDSWithDefaultOptions: (silenceInfoLogs?: boolean) => LocalDataSource;
/**
 * Construct datasource object, and connect immediately.
 * @param opts Initialization options. {@link LocalDataSourceOpts | See implementation}.
 * @param silenceInfoLogs Don't log connection info.
 * @returns
 */
export declare const initializeConnectedDS: (opts?: LocalDataSourceOpts, silenceInfoLogs?: boolean) => LocalDataSource;
export type LocalDataSourceType = LocalDataSource;
export {};
//# sourceMappingURL=database.d.ts.map
