import type { NodeProcessorConfig } from '../html/NodeProcessor';
import { NodeOrText } from '../utils/node';
export type PluginContext = Record<string, any>;
export type FrontMatter = Record<string, any>;
type TagConfigAttributes = {
    name: string;
    isRelative: boolean;
    isSourceFile: boolean;
};
export type TagConfigs = {
    isSpecial?: boolean;
    attributes?: TagConfigAttributes[];
    isCustomElement?: boolean;
};
/**
 * Wrapper class around a loaded plugin module
 */
export declare class Plugin {
    pluginName: string;
    plugin: {
        beforeSiteGenerate: (...args: any[]) => any;
        getLinks: (pluginContext?: PluginContext, frontmatter?: FrontMatter, content?: string) => string[];
        getScripts: (pluginContext?: PluginContext, frontmatter?: FrontMatter, content?: string) => string[];
        postRender: (pluginContext: PluginContext, frontmatter: FrontMatter, content: string) => string;
        processNode: (pluginContext: PluginContext, node: NodeOrText, config?: NodeProcessorConfig) => string;
        postProcessNode: (pluginContext: PluginContext, node: NodeOrText, config?: NodeProcessorConfig) => string;
        tagConfig: Record<string, TagConfigs>;
    };
    pluginOptions: PluginContext;
    pluginAbsolutePath: string;
    pluginAssetOutputPath: string;
    constructor(pluginName: string, pluginPath: string, pluginOptions: PluginContext, siteOutputPath: string);
    executeBeforeSiteGenerate(): void;
    /**
     * Resolves a resource specified as an attribute in a html asset tag
     * (eg. '<script>' or '<link>') provided by a plugin, and copies said asset
     * into the plugin's asset output folder.
     * Does nothing if the resource is a url.
     * @param assetElementHtml The asset element html, as a string, such as '<script src="...">'
     * @param tagName The name of the resource tag
     * @param attrName The attribute name where the resource is specified in the tag
     * @param baseUrl baseUrl of the site
     * @return String html of the element, with the attribute's asset resolved
     */
    _getResolvedAssetElement(assetElementHtml: string, tagName: string, attrName: string, baseUrl: string): string;
    /**
     * Collect page content inserted by plugins
     */
    getPageNjkLinksAndScripts(frontmatter: FrontMatter, content: string, baseUrl: string): {
        links: string[];
        scripts: string[];
    };
    postRender(frontmatter: FrontMatter, content: string): string;
    processNode(node: NodeOrText, config: NodeProcessorConfig): void;
    postProcessNode(node: NodeOrText, config: NodeProcessorConfig): void;
    getTagConfig(): Record<string, TagConfigs>;
}
export {};
//# sourceMappingURL=Plugin.d.ts.map