import { Observable } from 'rxjs';
import { Dexie } from 'dexie';
import { DatabaseChange } from './dexie.extends';
import { DexieDatabase } from './dexie.database';
export declare class DexieService<T extends object = any> {
    protected db: DexieDatabase;
    constructor(db: DexieDatabase);
    /**
     * Adds the entry ```object``` to the dexie table ```table```.
     * Returns a promise which when resolved gives the key of the object added, when rejected gives the error that occured.
     *
     * @param table table name
     * @param object object to add
     */
    addOne<TKey extends keyof T>(table: TKey, object: T[TKey]): Observable<any>;
    /**
     * Adds multiple ```objects``` to the dexie table ```table```
     * Returns a promise which works similar to Dexie ```bulkAdd()```
     *
     * @param table table name
     * @param objects objects to add
     */
    addMultiple<TKey extends keyof T>(table: TKey, objects: T[TKey][]): Observable<any>;
    /**
     * Returns a promise which when resolved gives the number of objects in the table ```table```
     *
     * @param table table name
     */
    count<TKey extends keyof T>(table: TKey): Observable<number>;
    /**
     * Works similar to Dexie ```put()```
     *
     * @param table table name
     * @param object
     * @param key
     */
    addOrUpdateOne<TKey extends keyof T>(table: TKey, object: T[TKey], key?: any): Observable<any>;
    /**
     * Works similar to Dexie ```bulkPut()```
     *
     * @param table table name
     * @param objects
     * @param keys
     */
    addOrUpdateMultiple<TKey extends keyof T>(table: TKey, objects: T[TKey][], keys?: any): Observable<any>;
    /**
     * Works similar to Dexie ```delete()```
     *
     * @param table table name
     * @param primaryKey
     */
    deleteOne<TKey extends keyof T>(table: TKey, primaryKey: any): Observable<void>;
    /**
     * Works similar to Dexie ```bulkDelete()```
     *
     * @param table table name
     * @param primaryKeys
     */
    deleteMultiple<TKey extends keyof T>(table: TKey, primaryKeys: any[]): Observable<void>;
    /**
     * Works similar to Dexie ```clear()```
     *
     * @param table table name
     */
    clearAll<TKey extends keyof T>(table: TKey): Observable<void>;
    /**
     * Works similar to Dexie ```each()```
     *
     * @param table table name
     * @param callback
     */
    operateOnEach<TKey extends keyof T>(table: TKey, callback: (item: T[TKey], idbCursor: any) => any): Observable<void>;
    /**
     * Works similar to Dexie ```filter()```
     *
     * @param table table name
     * @param filterFunction
     */
    filter<TKey extends keyof T>(table: TKey, filterFunction: (value: T[TKey]) => boolean): Dexie.Collection<T[TKey], TKey>;
    /**
     * Works similar to Dexie ```get()```
     *
     * @param table table name
     * @param primaryKey
     * @param callback
     */
    getByPrimaryKey<TKey extends keyof T>(table: TKey, primaryKey: any, callback?: (item: T[TKey]) => any): Observable<any>;
    /**
     * Works similar to Dexie ```get()```
     *
     * @param table table name
     * @param keyValueMap
     * @param callback
     */
    getByKeyToValueMap<TKey extends keyof T>(table: TKey, keyValueMap: Object, callback?: (item: T[TKey]) => any): Observable<any>;
    /**
     * Works similar to Dexie ```limit()```
     *
     * @param table table name
     * @param num
     */
    getFirstNItemsOfTable<TKey extends keyof T>(table: TKey, num: number): Dexie.Collection<T[TKey], TKey>;
    /**
     * Works similar to Dexie ```orderBy()```
     *
     * @param table table name
     * @param index
     */
    orderBy<TKey extends keyof T>(table: TKey, index: string): Dexie.Collection<T[TKey], TKey>;
    /**
     * Works similar to Dexie ```offset()```
     *
     * @param table table name
     * @param ignoreUpto
     */
    offset<TKey extends keyof T>(table: TKey, ignoreUpto: number): Dexie.Collection<T[TKey], TKey>;
    /**
     * Works similar to Dexie ```reverse()```
     *
     * @param table table name
     */
    reverse<TKey extends keyof T>(table: TKey): Dexie.Collection<T[TKey], TKey>;
    /**
     * Works similar to Dexie ```toArray()```
     *
     * @param table table name
     * @param callback
     */
    toArray<TKey extends keyof T>(table: TKey): Observable<T[TKey][]>;
    /**
     * Works similar to Dexie ```toCollection()```
     *
     * @param table table name
     */
    toCollection<TKey extends keyof T>(table: TKey): Dexie.Collection<T[TKey], TKey>;
    /**
     * Works similar to Dexie ```update()```
     *
     * @param table table name
     * @param key
     * @param changes
     */
    update<TKey extends keyof T>(table: TKey, key: any, changes: T[TKey]): Observable<number>;
    /**
     * List to database change events
     *
     * @param table table name or empty to listen to all tables
     */
    onChanges<TKey extends keyof T>(table?: TKey): Observable<DatabaseChange<T[TKey]>[]>;
    /**
     * Return a observable that emits the current values on every data change
     *
     * @param table table name
     */
    valueChanges<TKey extends keyof T>(table: TKey): Observable<T[TKey][]>;
}
