import { GeneralItem, Incrementable } from 'lemon-model';
import 'dotenv/config';
export interface CosmosOption {
    databaseName: string;
    tableName: string;
    idName: string;
    sortName?: string;
}
/**
 * type `Updatable`: parameter for updateItem
 *  - update field
 *  - 'setIndex': array of [index, value] - replace elements in list field
 *  - 'removeIndex': array of indices - remove elements from list field
 */
interface Updatable {
    [key: string]: GeneralItem['key'] | {
        setIndex: [number, string | number][];
    } | {
        removeIndex: number[];
    };
}
/**
 * class: `CosmosService`
 * - basic CRUD service for AZURE CosmosDB.
 */
export declare class CosmosService<T extends GeneralItem> {
    protected options: CosmosOption;
    constructor(options: CosmosOption);
    hello: () => string;
    static instance(): Promise<{
        client: any;
    }>;
    createTable(): Promise<void>;
    /**
     * save-item
     * - save whole data with param (use update if partial save)
     *
     * **WARN** overwrited if exists.
     *
     * @param id
     * @param item
     */
    saveItem(_id: string, item: T): Promise<any>;
    /**
     * read-item
     * - read whole data of item.
     *
     * @param id
     * @param sort
     */
    readItem(_id: string, sort?: string | number): Promise<any>;
    /**
     * delete-item
     *  - destroy whole data of item.
     *
     * @param id
     * @param sort
     */
    deleteItem(_id: string, sort?: string | number): Promise<any>;
    /**
     * update-item (or increment-item)
     * - update or create if not exists.
     *
     * @param id
     * @param sort
     * @param updates
     * @param increments
     */
    updateItem(_id: string, sort: string | number, updates: Updatable, increments?: Incrementable): Promise<any>;
}
export {};
