import { Metadata } from '../../decorator/metadata/metadata';
import { BaseRequest } from '../request/base.request';
import { ConditionExpressionDefinitionChain } from './type/condition-expression-definition-chain';
import { ExpressionType } from './type/expression-type.type';
import { RequestConditionFunction } from './type/request-condition-function';
import { RequestSortKeyConditionFunction } from './type/sort-key-condition-function';
import { UpdateExpressionDefinitionChain, UpdateExpressionDefinitionChainTyped } from './type/update-expression-definition-chain';
/**
 *
 */
export declare class RequestExpressionBuilder {
    /**
     * Adds a condition to the given query.
     */
    static addCondition<T extends BaseRequest<any, any>>(expressionType: ExpressionType, attributePath: string, request: T, metadata?: Metadata<any>): RequestConditionFunction<T>;
    static addSortKeyCondition<T extends BaseRequest<any, any>>(keyName: string, request: T, metadata?: Metadata<any>): RequestSortKeyConditionFunction<T>;
    private static doAddCondition;
    static addPartitionKeyCondition<T extends BaseRequest<any, any>>(keyName: string, keyValue: any, request: T, metadata?: Metadata<any>): T;
    static updateDefinitionFunction(attributePath: string): UpdateExpressionDefinitionChain;
    static updateDefinitionFunction<T>(attributePath: keyof T): UpdateExpressionDefinitionChain;
    static updateDefinitionFunction<T, K extends keyof T>(attributePath: K): UpdateExpressionDefinitionChainTyped<T, K>;
    static propertyDefinitionFunction<T>(attributePath: keyof T): ConditionExpressionDefinitionChain;
    /**
     * Creates an object which contains callable functions for all update operations defined in update-operation type
     * for all the values included in operators
     *
     * @param {(operator: ConditionOperator) => any} impl The function which is called with the operator and returns a function which expects the value
     * for the condition. when executed the implementation defines what to do with the condition, just return it for example or add the condition to the request
     * parameters as another example
     */
    private static createUpdateFunctions;
    /**
     * Creates an object which contains callable functions for all aliases defined in CONDITION_OPERATOR_ALIAS or if operators parameter is defined,
     * for all the values included in operators
     *
     * @param {(operator: ConditionOperator) => any} impl The function which is called with the operator and returns a function which expects the value
     * for the condition. when executed the implementation defines what to do with the condition, just return it for example or add the condition to the request
     * parameters as another example
     */
    private static createConditionFunctions;
}
