import { type AwilixContainer, type NameAndRegistrationPair } from 'awilix';
import type { AbstractModule } from './AbstractModule.js';
import type { NestedPartial } from './configUtils.js';
import { type DependencyInjectionOptions, DIContext } from './DIContext.js';
export type CreateTestContextParams<Dependencies, Config extends object> = {
    modules?: readonly AbstractModule<unknown>[];
    secondaryModules?: readonly AbstractModule<unknown>[];
    diOptions?: DependencyInjectionOptions;
    dependencyOverrides?: NameAndRegistrationPair<Dependencies>;
    configOverrides?: NestedPartial<Config>;
};
export declare abstract class AbstractTestContextFactory<Dependencies extends object, ExternalDependencies, Config extends object> {
    diContainer: AwilixContainer<Dependencies>;
    private readonly externalDependencies;
    protected configDependencyId: string;
    private readonly allModules;
    constructor(externalDependencies: ExternalDependencies, allModules: readonly AbstractModule<unknown>[], diContainer?: AwilixContainer<Dependencies>);
    resetExternalDependencies(): void;
    abstract resolveBaseAppConfig(): Config;
    createTestContext(params?: CreateTestContextParams<Dependencies, Config>): Promise<DIContext<Dependencies, Config, ExternalDependencies>>;
}
