import type { ClassType } from '../types';
import type { Provider, Token } from './provider';
export interface ModuleDefinition<C = unknown> {
    config?: ClassType<C>;
    defaultConfig?: Partial<C>;
    imports?: ModuleLike[];
    exports?: Token[];
    providers?: Provider[];
    controllers?: ClassType[];
    listeners?: ClassType[];
    commands?: ClassType[];
}
export type ModuleLike = ModuleDefinition | ClassType | ModuleInstance;
export interface ModuleInstance {
    definition: ModuleDefinition;
}
export declare class AppModule<C = unknown> {
    readonly definition: ModuleDefinition<C>;
    constructor(definition?: ModuleDefinition<C>);
}
export declare function createModule(definition: ModuleDefinition): AppModule;
export declare function createModuleClass<C = unknown>(definition: ModuleDefinition<C>): {
    new (): {
        readonly definition: ModuleDefinition<C>;
    };
    readonly definition: ModuleDefinition<C>;
};
export declare function normalizeModule(moduleLike: ModuleLike): ModuleDefinition;
//# sourceMappingURL=module.d.ts.map