import { ModuleMetadata, InjectionToken, OptionalFactoryDependency, Type, DynamicModule, OnApplicationBootstrap, OnApplicationShutdown } from '@nestjs/common';
import { MigratorOptions, Migrator } from '../index.mjs';
import 'mongoose';

interface MigrationModuleOptions extends MigratorOptions {
    onBootstrap?: (migrator: Migrator) => Promise<void>;
}
interface MigrationOptionsFactory {
    createMigrationOptions(): MigrationModuleOptions | Promise<MigrationModuleOptions>;
}
interface MigrationModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
    isGlobal?: boolean;
    inject?: (InjectionToken | OptionalFactoryDependency)[];
    useClass?: Type<MigrationOptionsFactory>;
    useExisting?: Type<MigrationOptionsFactory>;
    useFactory?: (...args: any[]) => MigrationModuleOptions | Promise<MigrationModuleOptions>;
}

declare class MigrationModule {
    static forRoot(options: MigrationModuleOptions & {
        isGlobal?: boolean;
    }): DynamicModule;
    static forRootAsync(options: MigrationModuleAsyncOptions): DynamicModule;
    private static createAsyncProviders;
}

declare const MIGRATION_OPTIONS: unique symbol;
declare class MigrationService implements OnApplicationBootstrap, OnApplicationShutdown {
    private readonly logger;
    private readonly options;
    private migrator;
    constructor(options: MigrationModuleOptions);
    get instance(): Migrator;
    onApplicationBootstrap(): Promise<void>;
    onApplicationShutdown(): Promise<void>;
    private runDefaultMigrations;
}

export { MIGRATION_OPTIONS, MigrationModule, MigrationService };
export type { MigrationModuleAsyncOptions, MigrationModuleOptions, MigrationOptionsFactory };
//# sourceMappingURL=index.d.mts.map
