import { ArrowStoreRecord, ArrowStoreRecordId, ArrowStoreTypeRecordId } from "./types";
import { DynamoDBRecordMapper } from "./mappers/recordMapper";
import { DynamoDBSchemaProvider } from "./mappers/schemaBuilders";
import { ListQueryBuilder } from "./builders/listQueryBuilder";
import { DeleteBuilder } from "./builders/deleteBuilder";
import { PutBuilder } from "./builders/putBuilder";
import { UpdateBuilder } from "./builders/updateBuilder";
import { BatchWriteBuilder } from "./builders/batchWriteBuilder";
import { TransactWriteBuilder } from "./builders/transactWriteBuilder";
import { DynamoDB } from "aws-sdk";
export declare type DynamoDBClientResolver = {
    resolve(): DynamoDB;
};
export declare type DynamoDBClient = {
    getAsync<TRecord>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>): Promise<TRecord | null>;
    batchGetAsync(recordIds: ArrowStoreRecordId[]): Promise<{}[]>;
    transactGetItemsAsync(recordIds: ArrowStoreRecordId[]): Promise<{}[]>;
    query<TRecord>(query: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>): ListQueryBuilder<TRecord>;
    delete<TRecord>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>): DeleteBuilder<TRecord>;
    put<TRecord extends ArrowStoreRecord>(record: TRecord): PutBuilder<TRecord>;
    update<TRecord>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>): UpdateBuilder<TRecord>;
    batchWriteAsync(builder: (query: BatchWriteBuilder) => void): Promise<void>;
    transactWriteItems(clientRequestToken?: string): TransactWriteBuilder;
};
export declare class DefaultDynamoDBClient implements DynamoDBClient {
    private readonly _clientResolver;
    private readonly _schemaProvider;
    private readonly _recordMapper;
    constructor(clientResolver: DynamoDBClientResolver, schemaProvider: DynamoDBSchemaProvider, recordMapper: DynamoDBRecordMapper);
    getAsync<TRecord>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>): Promise<TRecord | null>;
    batchGetAsync(recordIds: ArrowStoreRecordId[]): Promise<{}[]>;
    transactGetItemsAsync(recordIds: ArrowStoreRecordId[]): Promise<{}[]>;
    query<TRecord>(query: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>): ListQueryBuilder<TRecord>;
    delete<TRecord>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>): DeleteBuilder<TRecord>;
    put<TRecord extends ArrowStoreRecord>(record: TRecord): PutBuilder<TRecord>;
    update<TRecord>(recordId: ArrowStoreRecordId | ArrowStoreTypeRecordId<TRecord>): UpdateBuilder<TRecord>;
    batchWriteAsync(builder: (query: BatchWriteBuilder) => void): Promise<void>;
    transactWriteItems(clientRequestToken?: string): TransactWriteBuilder;
    private static _toRecordIdHash;
    private static _findRecordType;
}
