import { DynamoDBSchemaProvider } from "../mappers/schemaBuilders";
import { DynamoDBRecordMapper } from "../mappers/recordMapper";
import { DynamoDBClientResolver } from "../client";
import { Update } from "aws-sdk/clients/dynamodb";
import { ArrowStoreRecordId, ArrowStoreTypeRecordId } from "../types";
export declare type TransactUpdateItemBuilder<TRecord extends {}> = {
    when<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context?: TContext): TransactUpdateItemBuilder<TRecord>;
    set<TContext>(updateExpression: (record: TRecord, context: TContext) => unknown, context?: TContext): TransactUpdateItemBuilder<TRecord>;
    setWhenNotExists<TContext>(member: (record: TRecord) => unknown, updateExpression: (record: TRecord, context: TContext) => unknown, context?: TContext): TransactUpdateItemBuilder<TRecord>;
    destroy<TMember>(expression: (record: TRecord) => TMember): TransactUpdateItemBuilder<TRecord>;
};
export declare type UpdateBuilder<TRecord extends {}> = {
    when<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context?: TContext): UpdateBuilder<TRecord>;
    set<TContext>(updateExpression: (record: TRecord, context: TContext) => unknown, context?: TContext): UpdateBuilder<TRecord>;
    setWhenNotExists<TContext>(member: (record: TRecord) => unknown, updateExpression: (record: TRecord, context: TContext) => unknown, context?: TContext): UpdateBuilder<TRecord>;
    destroy<TMember>(expression: (record: TRecord) => TMember): UpdateBuilder<TRecord>;
    executeAsync(): Promise<boolean>;
};
export declare class DynamoDBTransactUpdateItemBuilder<TRecord extends {}> implements TransactUpdateItemBuilder<TRecord> {
    private readonly _recordId;
    private readonly _recordMapper;
    private readonly _updateExpressionBuilder;
    constructor(recordId: ArrowStoreRecordId, schemaProvider: DynamoDBSchemaProvider, recordMapper: DynamoDBRecordMapper);
    destroy<TMember>(expression: (record: TRecord) => TMember): TransactUpdateItemBuilder<TRecord>;
    set<TContext>(updateExpression: (record: TRecord, context: TContext) => unknown, context: TContext | undefined): TransactUpdateItemBuilder<TRecord>;
    setWhenNotExists<TContext>(member: (record: TRecord) => unknown, updateExpression: (record: TRecord, context: TContext) => unknown, context: TContext | undefined): TransactUpdateItemBuilder<TRecord>;
    when<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context: TContext | undefined): TransactUpdateItemBuilder<TRecord>;
    build(): Update;
}
export declare class DynamoDBUpdateBuilder<TRecord extends {}> implements UpdateBuilder<TRecord> {
    private readonly _recordId;
    private readonly _recordMapper;
    private readonly _clientResolver;
    private readonly _updateExpressionBuilder;
    constructor(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>, schemaProvider: DynamoDBSchemaProvider, recordMapper: DynamoDBRecordMapper, clientResolver: DynamoDBClientResolver);
    when<TContext>(predicate: (record: TRecord, context: TContext) => boolean, context?: TContext): UpdateBuilder<TRecord>;
    destroy<TMember>(expression: (record: TRecord) => TMember): UpdateBuilder<TRecord>;
    setWhenNotExists<TContext>(member: (record: TRecord) => unknown, updateExpression: (record: TRecord, context: TContext) => unknown, context?: TContext): UpdateBuilder<TRecord>;
    set<TContext>(expression: (record: TRecord, context: TContext) => unknown, context?: TContext): UpdateBuilder<TRecord>;
    executeAsync(): Promise<boolean>;
}
