import { ArrowStoreRecord } from "../types";
import { DynamoDBSchemaProvider } from "../mappers/schemaBuilders";
import { DynamoDBRecordMapper } from "../mappers/recordMapper";
import { WhenExpressionBuilder } from "./batchWriteBuilder";
import { Put } from "aws-sdk/clients/dynamodb";
import { DynamoDBClientResolver } from "../client";
export declare type PutBuilder<TRecord extends ArrowStoreRecord> = {
    when<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context?: TContext): PutBuilder<TRecord>;
    executeAsync(): Promise<boolean>;
};
export declare type TransactPutItemBuilder<TRecord extends ArrowStoreRecord> = {
    when<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context?: TContext): TransactPutItemBuilder<TRecord>;
};
export declare class DynamoDBTransactPutItemBuilder<TRecord extends ArrowStoreRecord> extends WhenExpressionBuilder<TRecord> implements TransactPutItemBuilder<TRecord> {
    private readonly _record;
    private readonly _conditionExpressions;
    constructor(record: TRecord, schemaProvider: DynamoDBSchemaProvider, recordMapper: DynamoDBRecordMapper);
    when<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context: TContext | undefined): TransactPutItemBuilder<TRecord>;
    build(): Put;
}
export declare class DynamoDBPutBuilder<TRecord extends ArrowStoreRecord> extends WhenExpressionBuilder<TRecord> implements PutBuilder<TRecord> {
    private readonly _record;
    private readonly _clientResolver;
    private readonly _conditionExpressions;
    constructor(record: TRecord, schemaProvider: DynamoDBSchemaProvider, recordMapper: DynamoDBRecordMapper, clientResolver: DynamoDBClientResolver);
    when<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context?: TContext): PutBuilder<TRecord>;
    executeAsync(): Promise<boolean>;
}
