import { Key, QueryInput, QueryOutput, ScanInput, ScanOutput } from 'aws-sdk/clients/dynamodb';
import { Observable } from 'rxjs';
import { SecondaryIndex } from '../../decorator/impl';
import { Logger } from '../../logger/logger';
import { ModelConstructor } from '../../model/model-constructor';
import { DynamoRx } from '../dynamo-rx';
import { RequestConditionFunction } from '../expression';
import { ConditionExpressionDefinitionFunction } from '../expression/type';
import { QueryRequest } from './query/query.request';
import { QueryResponse } from './query/query.response';
import { ScanRequest } from './scan/scan.request';
import { ScanResponse } from './scan/scan.response';
import { StandardRequest } from './standard.request';
export declare abstract class ReadManyRequest<T, I extends QueryInput | ScanInput, O extends QueryOutput | ScanOutput, Z extends QueryResponse<T> | ScanResponse<T>, R extends QueryRequest<T> | ScanRequest<T>> extends StandardRequest<T, I, ReadManyRequest<T, I, O, Z, R>> {
    static DEFAULT_LIMIT: number;
    static INFINITE_LIMIT: number;
    protected secondaryIndex?: SecondaryIndex<T>;
    protected abstract readonly logger: Logger;
    protected abstract doRequest(params: I): Observable<O>;
    protected constructor(dynamoRx: DynamoRx, modelClazz: ModelConstructor<T>);
    /**
     *
     * @param key A map representing the start id which is included in next call, if null is delivered
     * startKey will be removed from params
     * @returns {Request}
     */
    exclusiveStartKey(key: Key | null): R;
    index(indexName: string): R;
    limit(limit: number): R;
    whereAttribute<K extends keyof T>(attributePath: K): RequestConditionFunction<R, T, K>;
    where(...conditionDefFns: ConditionExpressionDefinitionFunction[]): R;
    execNoMap(): Observable<O>;
    execSingle(): Observable<T | null>;
    execCount(): Observable<number>;
    exec(): Observable<T[]>;
    execFullResponse(): Observable<Z>;
    /**
     * fetches all pages. may uses all provisionedOutput, therefore for client side use cases rather use pagedDatasource (exec)
     */
    execFetchAll(): Observable<T[]>;
    protected mapFromDb: (output: O) => Z;
}
