import { Db, MongoClient, BulkWriteOptions } from 'mongodb';
import { DeepPartial, LogFn } from '../common';
import { SeederDatabaseConfigObject } from '../config';
import { ConnectionString } from 'connection-string';
/**
 * Provides functionality for managing documents, collections in database.
 */
export declare class Database {
    /**
     * MongoDB database object
     */
    db: Db;
    /**
     * MongoDB Client.
     */
    client?: MongoClient;
    /**
     * Logger instance
     */
    log: LogFn;
    /**
     * Constructs a new `Database` object.
     *
     * @param mongoClient MongoDB Client
     * @param log Optional logger
     */
    constructor(mongoClient: MongoClient, log?: LogFn);
    /**
     * Inserts documents into a given collection.
     *
     * @param documentsToInsert Array of documents, which are being imported
     * @param collectionName Collection name
     * @param bulkWriteOptions Optional collection import options
     */
    insertDocumentsIntoCollection(documentsToInsert: object[], collectionName: string, bulkWriteOptions?: BulkWriteOptions): Promise<import("mongodb").InsertManyResult<import("bson").Document>>;
    /**
     * Drops database.
     */
    drop(): Promise<boolean>;
    /**
     * Checks if a given collection exist.
     *
     * @param collectionName Collection name
     */
    ifCollectionExist(collectionName: string): Promise<boolean>;
    /**
     * Drops a given collection if exists.
     *
     * @param collectionName Collection name
     */
    dropCollectionIfExists(collectionName: string): Promise<boolean | undefined>;
    /**
     * Remove all documents from a given collection
     * if it exists.
     *
     * @param collectionName Collection name
     */
    removeAllDocumentsIfCollectionExists(collectionName: string): Promise<import("mongodb").DeleteResult | undefined>;
    /**
     * Closes connection with database.
     */
    closeConnection(): Promise<void>;
}
/**
 * Parses a database config object or a connection URI into a ConnectionString.
 * @param input The database config object or connection URI to parse.
 * @param mergeWithDefaults Whether to merge the parsed config with default values.
 */
export declare function parseSeederDatabaseConfig(input?: string | DeepPartial<SeederDatabaseConfigObject>, disableMergingWithDefaults?: boolean): ConnectionString;
