import type { TemplateDescriptor } from "./Common";
import { EmptyTemplate } from "./Template";
import type { Template } from "./Template";
import type { TemplatesProvider } from "./TemplatesProvider";
/**
 * A class to manage list and retrieval of project-templates
 */
export declare class TemplatesManager {
    readonly emptyProjectTemplate: EmptyTemplate;
    static readonly emptyProjectTemplate: EmptyTemplate;
    /**
     * Initialize new instance of template manager
     */
    constructor();
    /**
     * Gets an array of registered templates provider types
     */
    get providerTypes(): string[];
    /**
     * Gets a templates provider by its `type`
     * @param type The providers type
     * @returns The
     */
    getProvider<TType extends string>(type: TType): TemplatesProvider<TType, Template<TType>>;
    /**
     * Lists all provided templates
     * @param all [Optional] If `true`, lists all templates including empty template; otherwise,
     * lists only providers' templates
     * @returns A promise which resolves to an array of template descriptors, describing the available templates
     */
    list(all?: boolean): Promise<TemplateDescriptor[]>;
    /**
     * Registers a templates provider with the current instance of templates manager
     * @param provider The provider to register
     */
    registerProvider<TType extends string>(provider: TemplatesProvider<TType, Template<TType>>): void;
    /**
     * Gets a template for the specified *template descriptor*
     * @param template A *template descriptor* that describe the template to get
     * @returns The described template
     */
    get<TTemplatesProviderType extends string>(template: TemplateDescriptor<TTemplatesProviderType>): Promise<Template<TTemplatesProviderType>>;
    /**
     * Gets a template by the specified *provider type* and name
     * @param type The *provider type* of the template to get
     * @param name The name of the template to get
     * @returns The specified template
     */
    get<TTemplatesProviderType extends string>(type: TTemplatesProviderType, name: string): Promise<Template<TTemplatesProviderType>>;
}
