import type { firestore } from 'firebase-admin';
import type { BatchMigrator, Traversable, TraversalConfig, Traverser } from './interfaces';
/**
 * Creates a migrator that facilitates database migrations. Accepts a custom traverser object as argument which the
 * migrator will use when traversing the collection and writing to documents. This migrator uses atomic batch writes
 * when writing to docs so the entire operation will fail if a single write isn't successful.
 *
 * @remarks
 *
 * Note that the {@link TraversalConfig.batchSize} config value must not exceed 500 for a traverser used in a {@link BatchMigrator}.
 * This is because in Firestore, each write batch can write to a maximum of 500 documents.
 *
 * @param traverser - The traverser object that this migrator will use when traversing the collection and writing to documents.
 * @returns A new {@link BatchMigrator} object.
 * @throws {@link InvalidConfigError} Thrown if the traversal config of the specified traverser is not compatible with this migrator.
 */
export declare function createBatchMigrator<AppModelType = firestore.DocumentData, DbModelType extends firestore.DocumentData = firestore.DocumentData>(traverser: Traverser<AppModelType, DbModelType>): BatchMigrator<AppModelType, DbModelType>;
/**
 * Creates a migrator that facilitates database migrations. The migrator creates a default traverser that
 * it uses when traversing the collection and writing to documents. This migrator uses atomic batch writes when writing
 * to docs so the entire operation will fail if a single write isn't successful.
 *
 * @remarks
 *
 * Note that the {@link TraversalConfig.batchSize} config value must not exceed 500 for a traverser used in a {@link BatchMigrator}.
 * This is because in Firestore, each write batch can write to a maximum of 500 documents.
 *
 * @param traversable - A collection-like traversable group of documents.
 * @param traversalConfig - Optional. The traversal configuration with which the default traverser will be created.
 * @returns A new {@link BatchMigrator} object.
 * @throws {@link InvalidConfigError} Thrown if the specified `traversalConfig` is invalid or incompatible with this migrator.
 */
export declare function createBatchMigrator<AppModelType = firestore.DocumentData, DbModelType extends firestore.DocumentData = firestore.DocumentData>(traversable: Traversable<AppModelType, DbModelType>, traversalConfig?: Partial<TraversalConfig>): BatchMigrator<AppModelType, DbModelType>;
