import { Db } from 'mongodb'; type ObjectType = { new (): T; }; type Dictionary = { [index: string]: any; }; type Query = { [index: string]: any; }; declare class QueryBuilder { private readonly ctor; private query; private queryLimit?; private queryOffset?; private queryOrder?; constructor(ctor: ObjectType); aggregate(stages: Record[]): Promise; average(key: K): Promise; count(): Promise; create(attributes: Record): Promise; delete(): Promise; find(id: string): Promise; findOne(query: Query): Promise; first(): Promise; get(): Promise; limit(length: number): QueryBuilder; max(key: K): Promise; min(key: K): Promise; orderBy(key: string, order?: 'asc' | 'desc'): QueryBuilder; percentile(key: K, n: number): Promise; pluck(key: K): Promise; save(attributes: Dictionary): Promise; search(query: string, caseSensitive?: boolean): QueryBuilder; skip(length: number): QueryBuilder; sum(key: K): Promise; where(query: Query): QueryBuilder; where(key: string, value: any): QueryBuilder; whereIn(key: string, values: any[]): QueryBuilder; whereNotIn(key: string, values: any[]): QueryBuilder; private createInstance; private execute; private useCollection; } declare class BaseModel { createdAt: number; id: string; updatedAt: number | null; static all(this: ObjectType): Promise; static create(this: ObjectType, attributes: Partial): Promise; static find(this: ObjectType, id: string): Promise; static findBy(this: ObjectType, key: K, value: K extends keyof T ? T[K] : any): Promise; static limit(this: ObjectType, length: number): QueryBuilder; static orderBy(this: ObjectType, key: string, order?: 'asc' | 'desc'): QueryBuilder; static pluck(this: ObjectType, key: K): Promise; static skip(this: ObjectType, length: number): QueryBuilder; static where(this: ObjectType, key: string, value: any): QueryBuilder; static whereIn(this: ObjectType, key: string, values: any[]): QueryBuilder; static whereNotIn(this: ObjectType, key: string, values: any[]): QueryBuilder; static firstOrCreate(this: ObjectType, filter: Partial, attributes?: Partial): Promise; delete(): Promise; hasMany(ctor: ObjectType, foreignKey?: string, localKey?: string): QueryBuilder; save(): Promise; } declare class ConnectionHandler { private client?; closeConnections(): Promise; getConnection(): Promise; private createClient; private getDatabase; } declare const connectionHandler: ConnectionHandler; export { BaseModel, QueryBuilder, connectionHandler };