import { Observable } from 'rxjs';
import { DBConfig, DBMode, IndexKey, NgxIDBCursorWithValue, ObjectStoreMeta, WithID } from './ngx-indexed-db.meta';
import * as i0 from "@angular/core";
export declare class NgxIndexedDBService {
    private dbConfigs;
    private indexedDB;
    private defaultDatabaseName?;
    private selectedDb;
    constructor(dbConfigs: Record<string, DBConfig>, indexedDB: IDBFactory);
    private instanciateConfig;
    private get dbConfig();
    /**
     * The function return the current version of database
     *
     * @Return the current version of database as number
     */
    getDatabaseVersion(): Observable<number | string>;
    /**
     * Selects a database for the current context.
     * @param {string} [databaseName=undefined] Database name to select.
     */
    selectDb(databaseName?: string): void;
    /**
     * Allows to create a new object store ad-hoc
     * @param storeName The name of the store to be created
     * @param migrationFactory The migration factory if exists
     */
    createObjectStore(storeSchema: ObjectStoreMeta, migrationFactory?: () => {
        [key: number]: (db: IDBDatabase, transaction: IDBTransaction) => void;
    }): Promise<void>;
    /**
     * Create dynamic store if not already without incrementing version
     * For Dynamic store
     * @param storeName The name of the store to create
     */
    createDynamicObjectStore(storeSchema: ObjectStoreMeta, migrationFactory?: () => {
        [key: number]: (db: IDBDatabase, transaction: IDBTransaction) => void;
    }): Promise<void>;
    /**
     * Adds new entry in the store and returns its key
     * @param storeName The name of the store to add the item
     * @param value The entry to be added
     * @param key The optional key for the entry
     */
    add<T>(storeName: string, value: T, key?: any): Observable<T & WithID>;
    /**
     * Adds new entries in the store and returns its key
     * @param storeName The name of the store to add the item
     * @param values The entries to be added containing optional key attribute
     */
    bulkAdd<T>(storeName: string, values: Array<T & {
        key?: any;
    }>): Observable<number[]>;
    /**
     * Delete entries in the store and returns current entries in the store
     * @param storeName The name of the store to add the item
     * @param keys The keys to be deleted
     */
    bulkDelete(storeName: string, keys: IDBValidKey[]): Observable<number[]>;
    /**
     * Returns entry by key.
     * @param storeName The name of the store to query
     * @param key The entry key
     */
    getByKey<T>(storeName: string, key: IDBValidKey): Observable<T>;
    /**
     * Retrieve multiple entries in the store
     * @param storeName The name of the store to retrieve the items
     * @param keys The ids entries to be retrieve
     */
    bulkGet<T>(storeName: string, keys: Array<IDBValidKey>): Observable<T[]>;
    /**
     * Returns entry by id.
     * @param storeName The name of the store to query
     * @param id The entry id
     */
    getByID<T>(storeName: string, id: string | number): Observable<T>;
    /**
     * Returns entry by index.
     * @param storeName The name of the store to query
     * @param indexName The index name to filter
     * @param key The entry key.
     */
    getByIndex<T>(storeName: string, indexName: string, key: IDBValidKey): Observable<T>;
    /**
     * Return all elements from one store
     * @param storeName The name of the store to select the items
     */
    getAll<T>(storeName: string): Observable<T[]>;
    /**
     * Adds or updates a record in store with the given value and key. Return all items present in the store
     * @param storeName The name of the store to update
     * @param value The new value for the entry
     */
    update<T>(storeName: string, value: T): Observable<T>;
    /**
     * Adds or updates a record in store with the given value and key. Return all items present in the store
     * @param storeName The name of the store to update
     * @param items The values to update in the DB
     *
     * @Return The return value is an Observable with the primary key of the object that was last in given array
     *
     * @error If the call to bulkPut fails the transaction will be aborted and previously inserted entities will be deleted
     */
    bulkPut<T>(storeName: string, items: T[]): Observable<IDBValidKey>;
    /**
     * Returns all items from the store after delete.
     * @param storeName The name of the store to have the entry deleted
     * @param query The key or key range criteria to apply
     */
    delete<T>(storeName: string, query: IDBValidKey | IDBKeyRange): Observable<T[]>;
    /**
     * Returns after a successful delete.
     * @param storeName The name of the store to have the entry deleted
     * @param query The key or key range criteria to apply
     */
    deleteByKey(storeName: string, query: IDBValidKey | IDBKeyRange): Observable<void>;
    /**
    * Delete all items by an index.
    * @param storeName The name of the store to query
    * @param indexName The index name to filter
    * @param query The key or key range criteria to apply
    * @param direction A string telling the cursor which direction to travel.
    */
    deleteAllByIndex<T>(storeName: string, indexName: string, query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): Observable<void>;
    /**
     * Clear the data in the objectStore.
     * @param storeName The name of the store to have the entries deleted
     */
    clear(storeName: string): Observable<void>;
    /**
     * Delete database.
     */
    deleteDatabase(): Observable<void>;
    /**
     * Returns the open cursor
     * If no matching data are present, the observable is completed immediately.
     * @param options The options to open the cursor
     * @param options.storeName The name of the store to have the entries deleted
     * @param options.query The key or key range criteria to apply
     * @param options.direction A string telling the cursor which direction to travel
     * @param options.mode The transaction mode.
     */
    openCursor<V = any, P extends IDBValidKey = IDBValidKey, K extends IDBValidKey = IDBValidKey>(options: {
        storeName: string;
        query?: IDBValidKey | IDBKeyRange | null;
        direction?: IDBCursorDirection;
        mode: DBMode;
    }): Observable<NgxIDBCursorWithValue<V, P, K>>;
    /**
     * Open a cursor by index filter
     * If no matching data are present, the observable is completed immediately.
     * @param options The options to open the cursor
     * @param options.storeName The name of the store to query
     * @param options.indexName The index name to filter
     * @param options.query The key or key range criteria to apply
     * @param options.direction A string telling the cursor which direction to travel
     * @param options.mode The transaction mode.
     */
    openCursorByIndex<V, P extends IDBValidKey = IDBValidKey, K extends IDBValidKey = IDBValidKey>(options: {
        storeName: string;
        indexName: string;
        query?: IDBValidKey | IDBKeyRange | null;
        direction?: IDBCursorDirection;
        mode?: DBMode;
    }): Observable<NgxIDBCursorWithValue<V, P, K>>;
    /**
     * Returns all items by an index.
     * @param storeName The name of the store to query
     * @param indexName The index name to filter
     * @param query The key or key range criteria to apply
     * @param direction A string telling the cursor which direction to travel.
     */
    getAllByIndex<T>(storeName: string, indexName: string, query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): Observable<T[]>;
    /**
     * Returns all primary keys by an index.
     * @param storeName The name of the store to query
     * @param query The key or key range criteria to apply
     * @param direction A string telling the cursor which direction to travel.
     */
    getAllKeysByIndex<P extends IDBValidKey = IDBValidKey, K extends IDBValidKey = IDBValidKey>(storeName: string, indexName: string, query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): Observable<IndexKey<P, K>[]>;
    /**
     * Returns the number of rows in a store.
     * @param storeName The name of the store to query
     * @param query The key or key range criteria to apply.
     */
    count(storeName: string, query?: IDBValidKey | IDBKeyRange): Observable<number>;
    /**
     * Returns the number of records within a key range.
     * @param storeName The name of the store to query
     * @param indexName The index name to filter
     * @param query The key or key range criteria to apply.
     */
    countByIndex(storeName: string, indexName: string, query?: IDBValidKey | IDBKeyRange): Observable<number>;
    /**
     * Delete the store by name.
     * @param storeName The name of the store to query
     */
    deleteObjectStore(storeName: string): Observable<void>;
    /**
     * Get all object store names.
     */
    getAllObjectStoreNames(): Observable<string[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NgxIndexedDBService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NgxIndexedDBService>;
}
