import type { AbstractBaseCommand, CommandMetaData, LoadersContract } from '../types.ts';
/**
 * List loader exposes the API to register commands as classes
 *
 * @example
 * ```ts
 * const loader = new ListLoader([MyCommand, AnotherCommand])
 * const metadata = await loader.getMetaData()
 * const command = await loader.getCommand(metadata[0])
 * ```
 */
export declare class ListLoader<Command extends AbstractBaseCommand> implements LoadersContract<Command> {
    #private;
    /**
     * Create a new list loader
     *
     * @param commands - Array of command classes to register
     */
    constructor(commands: Command[]);
    /**
     * Returns an array of command metadata for all registered commands
     *
     * @example
     * ```ts
     * const metadata = await loader.getMetaData()
     * metadata.forEach(cmd => console.log(cmd.commandName))
     * ```
     */
    getMetaData(): Promise<CommandMetaData[]>;
    /**
     * Returns the command class constructor for a given command. Null
     * is returned when unable to lookup the command
     *
     * @param metaData - The command metadata to find
     *
     * @example
     * ```ts
     * const command = await loader.getCommand(metadata)
     * if (command) {
     *   const instance = new command(kernel, parsed, ui, prompt)
     * }
     * ```
     */
    getCommand(metaData: CommandMetaData): Promise<Command | null>;
}
