import type { Resolver } from 'awilix';
import type { DependencyInjectionOptions } from './DIContext.js';
export type MandatoryNameAndRegistrationPair<T> = {
    [U in keyof T]: Resolver<T[U]>;
};
/**
 * Use this utility type to combine dependencies from multiple modules into full context list of dependencies
 */
export type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
export declare abstract class AbstractModule<ModuleDependencies, ExternalDependencies = never> {
    abstract resolveDependencies(diOptions: DependencyInjectionOptions, externalDependencies: ExternalDependencies): MandatoryNameAndRegistrationPair<ModuleDependencies>;
    abstract resolveControllers(): MandatoryNameAndRegistrationPair<unknown>;
}
