import type { Template } from "./Template";
/**
 * Templates provider interface
 */
export interface TemplatesProvider<TType extends string, TTemplate extends Template<TType>> {
    /**
     * The type of this template provider
     */
    readonly type: TType;
    /**
     * Lists the templates that are provided by this templates provider
     */
    list(): Promise<string[]>;
    /**
     * Gets a template by its name
     * @param name The name of the template to get
     * @returns The template with the specified name
     */
    get(name: string): Promise<TTemplate>;
}
/**
 * Provides basic `TemplatesProvider<TType, TTemplate>` implementation
 */
export declare abstract class TemplatesProviderBase<TType extends string, TTemplate extends Template<TType>> implements TemplatesProvider<TType, TTemplate> {
    readonly type: TType;
    constructor(type: TType);
    abstract list(): Promise<string[]>;
    abstract get(name: string): Promise<TTemplate>;
}
export declare function isTemplateProvider<TType extends string = string, TTemplate extends Template<TType> = Template<TType>>(val: unknown, type?: TType): val is TemplatesProvider<TType, TTemplate>;
