import { SeederCollection, DeepPartial } from './common';
import { BulkWriteOptions, MongoClientOptions } from 'mongodb';
import { EJSONOptions } from 'bson';
import { ConnectionString } from 'connection-string';
/**
 * Defines configuration for database seeding.
 */
export interface SeederConfig {
    /**
     * Database connection URI or configuration object.
     */
    database?: SeederDatabaseConfig;
    /**
     * Maximum time of waiting for successful MongoDB connection in milliseconds. Ignored when `mongoClientOptions` are passed.
     */
    databaseReconnectTimeout: number;
    /**
     * Drops entire database before import.
     */
    dropDatabase: boolean;
    /**
     * Drops collection before importing it.
     */
    dropCollections: boolean;
    /**
     * Deletes all documents from every collection that is being imported.
     */
    removeAllDocuments: boolean;
    /**
     * Optional MongoDB client options.
     */
    mongoClientOptions?: MongoClientOptions;
    /**
     * Optional MongoDB collection write options.
     */
    bulkWriteOptions?: BulkWriteOptions;
}
export type SeederConfigWithoutDatabase = Omit<SeederConfig, 'database'>;
/**
 * Stores default configuration for database seeding.
 */
export declare const defaultSeederConfig: SeederConfigWithoutDatabase;
/**
 * Represents database connection configuration. It can be a URI string or object.
 */
export type SeederDatabaseConfig = string | SeederDatabaseConfigObject;
/**
 * Defines configuration for Database connection in a form of an object.
 */
export interface SeederDatabaseConfigObject {
    /**
     * Database connection protocol
     */
    protocol: string;
    /**
     * Database connection host
     */
    host: string;
    /**
     * Database connection port
     */
    port: number;
    /**
     * Database name.
     */
    name: string;
    /**
     * Database Username.
     */
    username?: string;
    /**
     * Database password.
     */
    password?: string;
    /**
     * Options for MongoDB Database Connection URI.
     * Read more on: https://docs.mongodb.com/manual/reference/connection-string.
     */
    options?: SeederDatabaseConfigObjectOptions;
}
/**
 * Defines options for MongoDB Database Connection URI.
 * Read more on: https://docs.mongodb.com/manual/reference/connection-string.
 */
export interface SeederDatabaseConfigObjectOptions {
    [key: string]: unknown;
}
/**
 * Merges configuration for seeding and deletes database property.
 *
 * @param partial Partial config object. If not specified, returns a default config object.
 * @param previous Previous config object. If not specified, uses a default config object as a base.
 */
export declare const mergeSeederConfigAndDeleteDb: (partial?: DeepPartial<SeederConfig>, previous?: SeederConfig) => SeederConfigWithoutDatabase;
export declare const mergeConnection: (partial?: DeepPartial<SeederDatabaseConfig>, previous?: ConnectionString) => ConnectionString;
/**
 * Defines collection reading configuration.
 */
export interface SeederCollectionReadingOptions {
    /**
     * Files extensions that should be imported
     */
    extensions: string[];
    /**
     * Options for parsing EJSON files with `.json` extension
     */
    ejsonParseOptions?: EJSONOptions;
    /**
     * Optional transformer functions that can be used to modify collection data before import.
     */
    transformers: ((collection: SeederCollection) => SeederCollection)[];
}
/**
 * Stores default collection reading configuration values.
 */
export declare const defaultCollectionReadingOptions: SeederCollectionReadingOptions;
/**
 * Merges configuration for collection reading.
 *
 * @param partial Partial config object. If not specified, returns a default config object.
 * @param previous Previous config object. If not specified, uses a default config object as a base.
 */
export declare const mergeCollectionReadingOptions: (partial?: DeepPartial<SeederCollectionReadingOptions>, previous?: SeederCollectionReadingOptions) => SeederCollectionReadingOptions;
