import {
  type FindOptionsWhere,
  type ObjectLiteral,
  type FindOptionsRelations,
  type FindOptionsOrder,
  type DeleteResult,
  EntityTarget,
} from "typeorm";
import { LocalDataSourceType } from "./database";
import { OptionalKeysMapper } from "../utils/mappers";
export interface OperationResponse<T> {
  responseType: "success" | "failure";
  data?: T;
  error?: any;
}
declare class LocalDataSourceAccessor<T extends ObjectLiteral> {
  target?: EntityTarget<T>;
  DS?: LocalDataSourceType;
  constructor(DS: LocalDataSourceType, trgt: EntityTarget<T>);
  static constructMainDefault<S extends ObjectLiteral>(trgt: EntityTarget<S>): LocalDataSourceAccessor<S>;
  private checkTargetAndDataSource;
  insertEntity(value: T): Promise<OperationResponse<T & ObjectLiteral>>;
  insertManyEntities(value: T[]): Promise<OperationResponse<(T & ObjectLiteral)[]>>;
  readEntity(
    where: FindOptionsWhere<T> | FindOptionsWhere<T>[],
    relations?: FindOptionsRelations<T>
  ): Promise<OperationResponse<T | null>>;
  readManyEntities(
    where?: FindOptionsWhere<T> | FindOptionsWhere<T>[],
    order?: FindOptionsOrder<T>,
    relations?: FindOptionsRelations<T>,
    skip?: number,
    take?: number
  ): Promise<OperationResponse<T[]>>;
  updateEntity(values: OptionalKeysMapper<T>): Promise<OperationResponse<OptionalKeysMapper<T> & ObjectLiteral>>;
  deleteEntity(where: FindOptionsWhere<T>): Promise<OperationResponse<DeleteResult>>;
  entityExists(where: FindOptionsWhere<T>): Promise<OperationResponse<boolean>>;
  countEntities(where?: FindOptionsWhere<T>): Promise<OperationResponse<number>>;
}
/**
 * Initialize datasource accessor
 * @param DS The datasource.
 * @param target Target entity.
 * @returns
 */
export declare const initializeDataSourceAccessor: <T extends ObjectLiteral>(
  DS: LocalDataSourceType,
  target: EntityTarget<T>
) => LocalDataSourceAccessor<T>;
/**
 * Initialize main datasource accessor using datasource with default options.
 * @param target Target entity.
 * @returns
 */
export declare const initializeDataSourceAccessorDefault: <T extends ObjectLiteral>(
  target: EntityTarget<T>
) => LocalDataSourceAccessor<T>;
export {};
//# sourceMappingURL=datasource-accessors.d.ts.map
