import { DynamoDBSchemaProvider } from "../mappers/schemaBuilders";
import { DynamoDBRecordMapper } from "../mappers/recordMapper";
import { DynamoDBClientResolver } from "../client";
import { TransactUpdateItemBuilder } from "./updateBuilder";
import { TransactPutItemBuilder } from "./putBuilder";
import { TransactDeleteItemBuilder } from "./deleteBuilder";
import { ArrowStoreRecord, ArrowStoreRecordId, ArrowStoreTypeRecordId } from "../types";
export declare type TransactWriteBuilder = {
    when<TRecord extends ArrowStoreRecord, TContext>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>, predicate: (record: TRecord, context: TContext) => boolean, context?: TContext): TransactWriteBuilder;
    delete<TRecord extends {}, TContext>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>, deleteBuilder?: (query: TransactDeleteItemBuilder<TRecord>) => void): TransactWriteBuilder;
    update<TRecord extends {}>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>, updateBuilder: (query: TransactUpdateItemBuilder<TRecord>) => void): TransactWriteBuilder;
    put<TRecord extends ArrowStoreRecord, TContext>(record: TRecord, putBuilder?: (query: TransactPutItemBuilder<TRecord>) => void): TransactWriteBuilder;
    executeAsync(): Promise<boolean>;
};
export declare class DynamoDBTransactWriteItemBuilder implements TransactWriteBuilder {
    private readonly _schemaProvider;
    private readonly _recordMapper;
    private readonly _clientResolver;
    private readonly _clientRequestToken;
    private readonly _transactWriteItems;
    constructor(schemaProvider: DynamoDBSchemaProvider, recordMapper: DynamoDBRecordMapper, clientResolver: DynamoDBClientResolver, clientRequestToken?: string);
    when<TRecord extends {}, TContext>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>, predicate: (record: TRecord, context: TContext) => boolean, context?: TContext): TransactWriteBuilder;
    delete<TRecord extends {}, TContext>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>, deleteBuilder?: (query: TransactDeleteItemBuilder<TRecord>) => void): TransactWriteBuilder;
    update<TRecord extends {}>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>, updateBuilder: (query: TransactUpdateItemBuilder<TRecord>) => void): TransactWriteBuilder;
    put<TRecord extends ArrowStoreRecord, TContext>(record: TRecord, putBuilder?: (query: TransactPutItemBuilder<TRecord>) => void): TransactWriteBuilder;
    executeAsync(): Promise<boolean>;
}
