import { type AwilixContainer, type BuildResolver, type BuildResolverOptions, type DisposableResolver } from 'awilix';
import type { FunctionReturning } from 'awilix/lib/container';
import type { Resolver } from 'awilix/lib/resolvers';
declare module 'awilix' {
    interface ResolverOptions<T> {
        asyncInit?: boolean | string | (<U extends T>(instance: U, diContainer: AwilixContainer) => Promise<unknown>);
        asyncInitPriority?: number;
        asyncDispose?: boolean | string | (<U extends T>(instance: U) => Promise<unknown>);
        asyncDisposePriority?: number;
        eagerInject?: boolean | string;
        tags?: string[];
        enabled?: boolean;
    }
}
export type AwilixManagerConfig = {
    diContainer: AwilixContainer;
    asyncInit?: boolean;
    asyncDispose?: boolean;
    eagerInject?: boolean;
    strictBooleanEnforced?: boolean;
};
export declare function asMockClass<T = object>(Type: unknown, opts?: BuildResolverOptions<T>): BuildResolver<T> & DisposableResolver<T>;
export declare function asMockValue<T = object>(value: unknown): Resolver<T>;
export declare function asMockFunction<T = object>(fn: FunctionReturning<unknown>, opts?: BuildResolverOptions<T>): BuildResolver<T> & DisposableResolver<T>;
export declare class AwilixManager {
    readonly config: AwilixManagerConfig;
    constructor(config: AwilixManagerConfig);
    executeInit(): Promise<void>;
    executeDispose(): Promise<void>;
    getWithTags(tags: string[]): Record<string, any>;
    getByPredicate(predicate: (entity: any) => boolean): Record<string, any>;
}
export declare function asyncInit(diContainer: AwilixContainer): Promise<void>;
export declare function eagerInject(diContainer: AwilixContainer): void;
export declare function getWithTags(diContainer: AwilixContainer, tags: string[]): Record<string, any>;
export declare function getByPredicate(diContainer: AwilixContainer, predicate: (entity: any) => boolean): Record<string, any>;
export declare function asyncDispose(diContainer: AwilixContainer): Promise<void>;
