import { IAdapter } from "./IAdapter.cjs";
import { ITransformationContext } from "./ITransformationContext.cjs";
import { TransformAction } from "./TransformAction.cjs";
import { TransformerFeatures } from "./TransformerFeatures.cjs";
/**
 * Provides a basic implementation of a transformer.
 *
 * @template TNode
 * The type of the nodes to transform.
 *
 * @template TFeatures
 * The type of the features
 */
export declare abstract class TransformerBase<TInput, TNode, TContext extends ITransformationContext<TNode>, TFeatures extends TransformerFeatures<TNode, TContext>> {
    /**
     * The adapter for transforming nodes.
     */
    private adapter?;
    /**
     * A set of features for performing transformations.
     */
    private features;
    /**
     * Initializes a new instance of the {@linkcode TransformerBase TransformerBase<TNode, TFeatures>} class.
     *
     * @param features
     * A set of features for performing transformations.
     */
    constructor(features: TFeatures);
    /**
     * Gets the adapter for transforming nodes.
     */
    protected get Adapter(): IAdapter<TInput, TNode, TContext>;
    /**
     * Gets a set of features for performing transformations.
     */
    protected get Features(): TFeatures;
    /**
     * Initializes an adapter.
     */
    protected abstract InitializeAdapter(): IAdapter<TInput, TNode, TContext>;
    /**
     * Monitors the transformation in the specified {@linkcode action} for errors.
     *
     * @param action
     * The action to monitor.
     *
     * @returns
     * The result of the action.
     */
    protected MonitorTransformation<T>(action: TransformAction<TNode, T>): T;
}
