import { EntityClass, EntityKey, EntityProperty, type QBFilterQuery, QBQueryOrderMap, EntityData } from '@mikro-orm/core';
import { Knex, SqlEntityManager, QueryBuilder } from '@mikro-orm/knex';
import { EntityRelation } from '../../../utils/nestjs-shared';
import { ObjectLiteral } from '../../../types';
import { Query, QueryOne, Relationships } from '../../mixin/zod';
import { InputValidateData, ValidateReturn } from '../../type-orm/service';
export declare class MicroOrmUtilService<E extends ObjectLiteral> {
    readonly entityManager: SqlEntityManager;
    private entityRepository;
    readonly entity: EntityClass<E>;
    private _relationsName;
    private _relationMap;
    private _relationPropsMap;
    get relationsName(): EntityKey<E, false>[];
    getRelationProps(entity: EntityClass<E>): EntityKey<E, false>[];
    getRelation(name: EntityKey<E, false>): EntityProperty<E, any>;
    get currentAlias(): string;
    get metadata(): import("@mikro-orm/core").EntityMetadata<E>;
    get currentPrimaryColumn(): EntityKey<E, false>;
    get defaultOrder(): QBQueryOrderMap<E>;
    getAliasForEntity<T = E>(entity: EntityClass<T>): string;
    getAliasForPivotTable<T = E>(relName: keyof T): string;
    getAliasForPivotTable<T = E>(entity: EntityClass<T>, relName: keyof T): string;
    queryBuilder<T extends ObjectLiteral = E>(entity: EntityClass<T>, alias: string): QueryBuilder<T, typeof alias>;
    queryBuilder<T extends ObjectLiteral = E>(entity: EntityClass<T>): QueryBuilder<T, string>;
    queryBuilder<T extends ObjectLiteral = E>(alias: string): QueryBuilder<T, typeof alias>;
    queryBuilder<T extends ObjectLiteral = E>(): QueryBuilder<T, string>;
    getFilterExpressionForTarget<T extends ObjectLiteral = E>(query: Query<T>): QBFilterQuery<T>[];
    getConditionalForJoin<T extends ObjectLiteral = E>(query: Query<T>, key: string): QBFilterQuery;
    private extractedResultOperand;
    getFilterExpressionForRelation<T extends ObjectLiteral = E>(query: Query<T>): QBFilterQuery<T>[];
    getKnex(): Knex<E, E[]>;
    prePareQueryBuilder(queryBuilder: QueryBuilder<E>, query: Query<E> | QueryOne<E>): QueryBuilder<E>;
    getPrimaryNameFor(rel: EntityRelation<E>): EntityKey<E, false>;
    private getFilterObject;
    private getSubQueryForRelation;
    private getInverseFieldForManyToMany;
    createEntity(params: EntityData<E>): E;
    private asyncIterateFindRelationships;
    saveEntity(targetInstance: E, relationships?: Relationships<E>): Promise<E>;
    validateRelationInputData<Rel extends EntityRelation<E>, In extends InputValidateData | InputValidateData[]>(rel: Rel, inputData: In): Promise<ValidateReturn<In>>;
    validateRelationInputData<Rel extends EntityRelation<E>, In extends InputValidateData | InputValidateData[]>(rel: Rel, inputData: In): Promise<ValidateReturn<In>>;
    validateRelationInputData<Rel extends EntityRelation<E>, In extends null | InputValidateData | InputValidateData[]>(rel: Rel, inputData: In): Promise<ValidateReturn<In>>;
}
