import { IAdapter } from "./IAdapter.cjs";
import { ITransformationContext } from "./ITransformationContext.cjs";
import { NameofResult } from "../NameofResult.cjs";
import { PathPart } from "../Serialization/PathPart.cjs";
/**
 * Provides the functionality to reduce a path to a single result.
 */
export declare class ResultBuilder<TInput, TNode, TContext extends ITransformationContext<TNode>> {
    /**
     * The adapter of the result builder.
     */
    private adapter;
    /**
     * The context of the operation.
     */
    private context;
    /**
     * The template parts of the result.
     */
    private templateParts;
    /**
     * The expressions of the result.
     */
    private expressions;
    /**
     * Gets the current template part of the result.
     */
    private current;
    /**
     * Initializes a new instance of the {@linkcode ResultBuilder} class.
     *
     * @param adapter
     * The adapter of the result builder.
     *
     * @param context
     * The context of the operation.
     */
    constructor(adapter: IAdapter<TInput, TNode, TContext>, context: TContext);
    /**
     * Gets the built result.
     */
    get Result(): NameofResult<TNode>;
    /**
     * Gets the adapter of the result builder.
     */
    protected get Adapter(): IAdapter<TInput, TNode, TContext>;
    /**
     * Gets the context of the operation.
     */
    protected get Context(): TContext;
    /**
     * Gets a value indicating whether the current state is empty.
     */
    protected get Empty(): boolean;
    /**
     * Gets the template parts of the result.
     */
    protected get TemplateParts(): string[];
    /**
     * Gets the expressions of the result.
     */
    protected get Expressions(): TNode[];
    /**
     * Gets or sets the current template part of the result.
     */
    protected get Current(): string;
    /**
     * @inheritdoc
     */
    protected set Current(value: string);
    /**
     * Adds the specified {@linkcode pathPart} to the result.
     *
     * @param pathPart
     * The part to add to the result.
     */
    Add(pathPart: PathPart<TNode>): void;
    /**
     * Pushes the specified expression on the expression stack.
     *
     * @param expression
     * The expression to add.
     */
    protected Push(expression: TNode): void;
}
