import type { IRepository, IDialect, EntitySchema, FilterQuery, QueryOptions, AggregateStage } from './types.js';
export declare class BaseRepository<T extends {
    id: string;
}> implements IRepository<T> {
    protected readonly schema: EntitySchema;
    protected readonly dialect: IDialect;
    constructor(schema: EntitySchema, dialect: IDialect);
    findAll(filter?: FilterQuery, options?: QueryOptions): Promise<T[]>;
    findOne(filter: FilterQuery, options?: QueryOptions): Promise<T | null>;
    findById(id: string, options?: QueryOptions): Promise<T | null>;
    findByIdWithRelations(id: string, relations?: string[], options?: QueryOptions): Promise<T | null>;
    create(data: Partial<T>): Promise<T>;
    update(id: string, data: Partial<T>): Promise<T | null>;
    updateMany(filter: FilterQuery, data: Partial<T>): Promise<number>;
    delete(id: string): Promise<boolean>;
    deleteMany(filter: FilterQuery): Promise<number>;
    count(filter?: FilterQuery): Promise<number>;
    search(query: string, options?: QueryOptions): Promise<T[]>;
    distinct(field: string, filter?: FilterQuery): Promise<unknown[]>;
    aggregate<R = Record<string, unknown>>(stages: AggregateStage[]): Promise<R[]>;
    upsert(filter: FilterQuery, data: Partial<T>): Promise<T>;
    increment(id: string, field: string, amount: number): Promise<T | null>;
    addToSet(id: string, field: string, value: unknown): Promise<T | null>;
    pull(id: string, field: string, value: unknown): Promise<T | null>;
    findWithRelations(filter: FilterQuery, relations: string[], options?: QueryOptions): Promise<T[]>;
}
