import { Aliases, ManifestCommand, ManifestLoaderContract, CommandConstructorContract } from '../Contracts';
/**
 * The manifest loader exposes the API to load ace commands from one
 * or more manifest files.
 */
export declare class ManifestLoader implements ManifestLoaderContract {
    private files;
    /**
     * An array of defined manifest files
     */
    private manifestFiles;
    booted: boolean;
    constructor(files: {
        basePath: string;
        manifestAbsPath: string;
    }[]);
    /**
     * Loads the manifest file from the disk
     */
    private loadManifestFile;
    /**
     * Returns the command manifest node for a give command
     */
    private getCommandManifest;
    /**
     * Boot manifest loader to read all manifest files from the disk
     */
    boot(): Promise<void>;
    /**
     * Returns base path for a given command
     */
    getCommandBasePath(commandName: string): string | undefined;
    /**
     * Returns manifest command node. One must load the command
     * in order to use it
     */
    getCommand(commandName: string): {
        basePath: string;
        command: ManifestCommand;
    } | undefined;
    /**
     * Find if a command exists or not
     */
    hasCommand(commandName: string): boolean;
    /**
     * Load command from the disk. Make sure to use [[hasCommand]] before
     * calling this method
     */
    loadCommand(commandName: string): Promise<CommandConstructorContract>;
    /**
     * Returns an array of manifest commands
     */
    getCommands(): {
        commands: ManifestCommand[];
        aliases: Aliases;
    };
}
