import { LoadedResult, QueryOutput } from './../types';
import { Repository, MongoRepository } from 'typeorm';
import { BaseConnector } from '../BaseConnector';
import { FluentConnectorInterface } from '../FluentConnectorInterface';
import type { AnyObject, FluentQuery } from '../types';
import { DataSource } from 'typeorm';
import { z } from 'zod';
export interface TypeOrmConnectorParams<Input, Output> {
    entity: any;
    dataSource: DataSource;
    inputSchema: z.ZodType<Input>;
    outputSchema?: z.ZodType<Output>;
}
export declare class TypeOrmConnector<ModelDTO = AnyObject, InputDTO = ModelDTO, OutputDTO = InputDTO> extends BaseConnector<ModelDTO, InputDTO, OutputDTO> implements FluentConnectorInterface<ModelDTO, InputDTO, OutputDTO> {
    private repository;
    private readonly dataSource;
    private readonly inputSchema;
    private readonly outputSchema;
    private readonly entity;
    constructor({ entity, dataSource, inputSchema, outputSchema }: TypeOrmConnectorParams<InputDTO, OutputDTO>);
    initDB(): number;
    insert(data: InputDTO): Promise<OutputDTO>;
    insertMany(data: InputDTO[]): Promise<OutputDTO[]>;
    findMany<T extends FluentQuery<ModelDTO>>(query?: T): Promise<QueryOutput<T, ModelDTO>[]>;
    updateById(id: string, data: InputDTO): Promise<OutputDTO>;
    replaceById(id: string, data: InputDTO): Promise<OutputDTO>;
    deleteById(id: string): Promise<string>;
    clear(): Promise<boolean>;
    loadFirst(query?: FluentQuery<ModelDTO>): LoadedResult<this>;
    loadById(id: string): LoadedResult<this>;
    raw(): Repository<ModelDTO>;
    mongoRaw(): MongoRepository<ModelDTO>;
    protected clone(): any;
    private generateTypeOrmQuery;
    private customTypeOrmRelatedFind;
    private getTypeOrmQueryBuilderSelect;
    private getTypeOrmQueryBuilderSubqueries;
    private customMongoRelatedFind;
}
