import { AttributeValue, BatchWriteItemRequestMap } from "aws-sdk/clients/dynamodb";
import { ExpressionAttribute, ExpressionTransformer } from "../transformers/expressionTransformer";
import { DynamoDBSchemaProvider } from "../mappers/schemaBuilders";
import { DynamoDBRecordMapper } from "../mappers/recordMapper";
import { ArrowStoreRecord, ArrowStoreRecordId, ArrowStoreTypeRecordId } from "../types";
export declare type BatchWriteBuilder = {
    put<TRecord extends ArrowStoreRecord>(record: TRecord): BatchWriteBuilder;
    delete(recordId: ArrowStoreRecordId): BatchWriteBuilder;
};
export declare class WhenExpressionBuilder<TRecord> {
    protected readonly _recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>;
    protected readonly _schemaProvider: DynamoDBSchemaProvider;
    protected readonly _recordMapper: DynamoDBRecordMapper;
    protected readonly _conditionFilterTransformer: ExpressionTransformer;
    private readonly _attributeNames;
    private readonly _attributeValues;
    private readonly _attributeNameAliases;
    private readonly _attributeValueAliases;
    constructor(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>, schemaProvider: DynamoDBSchemaProvider, recordMapper: DynamoDBRecordMapper);
    get attributeNames(): Map<string, string>;
    get attributeNameAliases(): Map<string, ExpressionAttribute>;
    get attributeValueAliases(): Map<string, string>;
    get attributeValues(): Map<string, AttributeValue>;
    toWhereExpression<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context: TContext | undefined): string;
}
export declare class DynamoDBBatchWriteBuilder implements BatchWriteBuilder {
    private readonly _recordMapper;
    private readonly _requests;
    constructor(recordMapper: DynamoDBRecordMapper);
    buildRequests(): BatchWriteItemRequestMap;
    delete(recordId: ArrowStoreRecordId): BatchWriteBuilder;
    put<TRecord extends ArrowStoreRecord>(record: TRecord): BatchWriteBuilder;
    private _getTableGroup;
}
