///
import internal from "stream";
import { Knex } from "knex";
import { TransactionScope } from "./Model.connection";
import { EntityColumnOptions } from "./Model.entity";
import { EntityRelationColumnOptions } from "./Model.entity.relation";
import { CountOptions, DeleteOptions, FindOneOptions, FindOptions, InsertId, Paginatable, PaginationOptions, StreamFunctions, UpdateBulkOptions, UpdateOptions, UpsertOptions } from "./Model.query";
import { ClassType } from "../types";
interface RelationalRepositoryInfo {
options: EntityRelationColumnOptions;
repository: RepositoryInfo;
}
export interface RepositoryInfo {
target: ClassType;
tableName: string;
columns: Array;
fields: {
[key: string | symbol]: EntityColumnOptions;
};
primaryColumns: Array;
criteriaColumns: Array;
oneToOneRelationColumns: Array;
oneToOneRelations: {
[key: string | symbol]: RelationalRepositoryInfo;
};
}
export declare const symRepositoryInfo: unique symbol;
interface HasSymRepositoryInfo {
[symRepositoryInfo]?: RepositoryInfo;
}
export declare class Repository> {
private readonly repositoryInfo;
private readonly kx;
constructor(scopeOrKnex: TransactionScope | Knex, entity: ClassType);
static getRepositoryInfo(entity: ClassType & HasSymRepositoryInfo): RepositoryInfo;
save(entity: T, trx?: TransactionScope): Promise;
saveBulk(entities: Array, trx?: TransactionScope): Promise;
update(entity: T, options?: UpdateOptions, trx?: TransactionScope): Promise;
updateBulk(entities: Array, options: UpdateBulkOptions, trx?: TransactionScope): Promise;
upsert(entity: T, options: UpsertOptions, trx?: TransactionScope): Promise;
delete(entity: T, options?: DeleteOptions, trx?: TransactionScope): Promise;
findOne(options?: FindOneOptions, trx?: TransactionScope): Promise;
find(options?: FindOptions, trx?: TransactionScope): Promise;
pagination(options?: PaginationOptions, trx?: TransactionScope): Promise>;
streaming(options: FindOptions, trx?: TransactionScope): internal.PassThrough & AsyncIterable;
streamAsync(options: FindOptions, streamFn: StreamFunctions, trx?: TransactionScope): Promise;
private prepareQuery;
private select;
count(options: CountOptions, trx?: TransactionScope): Promise;
private joinWith;
private join;
private where;
private order;
private mapping;
}
export {};