import { XmlElement, XmlElementNode } from "./XmlModel.js";
import { IXmlTransformer } from "./XmlTransformStream.js";
import StreamerState from "./StreamerState.js";
import { ValueOrPromise } from "./util.js";
import { IEsiVariables } from "./EsiVariables.js";
import { EsiExpressionEvaluator } from "./EsiExpressions.js";
export declare class EsiError extends Error {
    constructor(message: string);
}
export declare class EsiElementError extends EsiError {
    el: XmlElement;
    constructor(el: XmlElement, message: string);
}
export declare class EsiIncludeError extends EsiElementError {
    constructor(el: XmlElement, message: string);
}
export declare class EsiStructureError extends EsiElementError {
    constructor(el: XmlElement, message: string);
}
export type EsiIncludeResult = {
    url: URL;
    headers: Headers;
    res: Response;
};
export type ProcessIncludeResponseFunc = (esiIncludeResult: EsiIncludeResult) => ValueOrPromise<string>;
export interface HandleIncludeErrorEvent {
    url: URL;
    headers: Headers;
    el: XmlElement;
    customErrorString: string | null;
}
export type HandleIncludeErrorFunc = (e: HandleIncludeErrorEvent) => ValueOrPromise<void>;
export type EsiTransformerOptions = {
    vars?: IEsiVariables;
    fetch?: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
    processIncludeResponse?: ProcessIncludeResponseFunc;
    handleIncludeError?: HandleIncludeErrorFunc;
};
export default class EsiTransformer implements IXmlTransformer {
    static namespace: string;
    static depthLimit: number;
    url: URL;
    headers: Headers;
    options: EsiTransformerOptions;
    depth: number;
    expressionEvaluator?: EsiExpressionEvaluator;
    applyVars: boolean;
    /**
     * Construct an instance of EsiTransformer.
     * @param url Absolute URL of request that was used when fetching the stream
     * @param headers The request headers that were used when fetching the stream
     * @param options Transformer options
     * @param depth Depth of recursion
     */
    constructor(url: string | URL, headers?: HeadersInit, options?: EsiTransformerOptions, depth?: number);
    transformChildElements(el: XmlElement): Promise<XmlElementNode[]>;
    transformElementNode(node: XmlElementNode): Promise<XmlElementNode | null>;
    isInEsiComment: boolean;
    xmlStreamerBeforeProcess(streamerState: StreamerState): void;
}
//# sourceMappingURL=EsiTransformer.d.ts.map