import { GeneralItem } from 'lemon-model';
import { DynamoOption } from './dynamo-service';
interface ComparisonCondition {
    key: string;
    comparator: '=' | '!=' | '<=' | '<' | '>=' | '>';
    value: number | string;
}
interface BetweenCondition {
    key: string;
    from: number | string;
    to: number | string;
}
interface ExistenceCondition {
    key: string;
    exists: boolean;
}
interface StringCondition {
    key: string;
    operator: 'begins_with' | 'contains';
    value: string;
}
/**
 * interface: DynamoScanFilter
 * - for joining multiple conditions with logical AND -> Array
 * - for joining multiple conditions with logical OR -> { or: Array }
 */
declare type Condition = ComparisonCondition | BetweenCondition | ExistenceCondition | StringCondition;
export declare type DynamoScanFilter = (Condition | {
    not: Condition;
}) | DynamoScanFilter[] | {
    or: DynamoScanFilter[];
};
/**
 * class: DynamoScanResult
 * - result information of scan.
 */
export interface DynamoScanResult<T> {
    list: T[];
    count?: number;
    last?: any;
}
/**
 * feature: `DynamoSimpleScannable`
 * - simple scan capable class.
 */
export interface DynamoSimpleScannable<T extends GeneralItem> {
    /**
     * simple filtered scan w/ limit.
     *
     * @param limit     limit of page
     * @param last      the last evaluated key
     * @param filter    scan filter
     */
    scan(limit?: number, last?: any, filter?: DynamoScanFilter): Promise<DynamoScanResult<T>>;
}
/**
 * class: `DynamoScanService`
 * - support simple scan like range scan.
 */
export declare class DynamoScanService<T extends GeneralItem> implements DynamoSimpleScannable<T> {
    protected options: DynamoOption;
    constructor(options: DynamoOption);
    /**
     * say hello of identity.
     */
    hello: () => string;
    scan(limit?: number, last?: any, filter?: DynamoScanFilter): Promise<DynamoScanResult<T>>;
    private buildPayload;
}
export {};
