/// <reference types="node" />
import { EventEmitter } from "events";
import { IContainer, IServiceIdentifier, IServiceFactory } from "./interfaces/IContainer";
import { IService } from "@/types/services";
export declare class Container extends EventEmitter implements IContainer {
    private static instance;
    private services;
    isInitialized: boolean;
    private readonly debug;
    private constructor();
    static getInstance(debug?: boolean): Container;
    private logDebug;
    initialize(): Promise<void>;
    cleanup(): void;
    private handleError;
    register<T extends IService>(token: IServiceIdentifier, instance: T): void;
    registerFactory<T extends IService>(token: IServiceIdentifier, factory: IServiceFactory<T>): void;
    resolve<T extends IService>(token: IServiceIdentifier): T;
    hasService(token: IServiceIdentifier): boolean;
    clear(): void;
}
export declare const ServiceTokens: {
    readonly CONFIG_MANAGER: "ConfigManager";
    readonly IGNORE_HANDLER: "IgnoreHandler";
    readonly TOKEN_COUNTER: "TokenCounter";
    readonly ERROR_HANDLER: "ErrorHandler";
    readonly ERROR_UTILS: "ErrorUtils";
    readonly FILE_SYSTEM: "FileSystem";
    readonly DEPENDENCY_ANALYZER: "DependencyAnalyzer";
    readonly LOGGER: "Logger";
    readonly TOKEN_CACHE: "TokenCache";
    readonly COMPILER: "Compiler";
    readonly VALIDATOR: "Validator";
    readonly ARGUMENT_PARSER: "ArgumentParser";
    readonly TEMPLATE_MANAGER: "TemplateManager";
};
export type ServiceToken = (typeof ServiceTokens)[keyof typeof ServiceTokens];
