import { Template } from '@mdfriday/text-template';
import { TemplateNamespace, TemplateState } from '../type';
declare abstract class BaseNamespace<T extends TemplateState> {
    protected templates: Map<string, T>;
    protected readonly mutex: Set<string>;
    addTemplate(name: string, state: T): void;
    findTemplate(name: string): T | null;
    getTemplates(): Map<string, T>;
    hasTemplate(name: string): boolean;
    getTemplateNames(): string[];
    removeTemplate(name: string): boolean;
    clear(): void;
    size(): number;
    getTemplatesByPattern(pattern: RegExp): T[];
    protected withLock<R>(fn: () => R): R;
    protected withReadLock<R>(fn: () => R): R;
    abstract lookup(name: string): Template | null;
}
export declare class RegularTemplateNamespace extends BaseNamespace<TemplateState> implements TemplateNamespace {
    lookup(name: string): Template | null;
    findTemplateWithDependencies(name: string): TemplateState | null;
    getTemplatesNeedingBase(): TemplateState[];
}
export declare class PartialTemplateNamespace extends BaseNamespace<TemplateState> {
    lookup(name: string): Template | null;
    addPartialTemplate(name: string, state: TemplateState): void;
}
export declare class ShortcodeTemplateNamespace extends BaseNamespace<TemplateState> {
    lookup(name: string): Template | null;
    addShortcodeTemplate(name: string, state: TemplateState): void;
    getShortcode(name: string): Template | null;
    hasShortcode(name: string): boolean;
    getShortcodeNames(): string[];
}
export declare function newRegularTemplateNamespace(): RegularTemplateNamespace;
export declare function newPartialTemplateNamespace(): PartialTemplateNamespace;
export declare function newShortcodeTemplateNamespace(): ShortcodeTemplateNamespace;
export {};
