import { InjectionToken } from '@angular/core';
import { Observable } from 'rxjs';
import { NgDataBase } from './types/database.type';
import { NgDatabaseFactory } from './factory/database-factory';
import { IdGenerator } from './id-generator/id-generator';
/** Injection token that gives the databases metadata */
export declare const NG_DATABASES: InjectionToken<{
    element: any;
}>;
/**
 * Service that handles all Indexed Databases and
 * tables requests.
 */
export declare class IndexedDB {
    private databases;
    private idGenerator;
    private databaseFactory;
    /**
     * Indicates if all databases have been created.
     * Only emits an event when recives a true value.
     */
    readonly onReady: Observable<boolean>;
    constructor(databases: NgDataBase[], idGenerator: IdGenerator, databaseFactory: NgDatabaseFactory);
    /**
     * Request a list with all elements
     * @param storeName Store name
     * @param databaseName Database name
     */
    list<M = any>(storeName: string, databaseName?: string): Observable<M[]>;
    /**
     * Request an element by key
     * @param storeName Store name
     * @param key Key value to find the element
     * @param databaseName Database name
     */
    get<M = any>(storeName: string, key: any, databaseName?: string): Observable<M>;
    /**
     * Request to store an element
     * @param storeName Store name
     * @param databaseName Database name
     */
    create<M = any>(storeName: string, data: M, databaseName?: string): Observable<M>;
    /**
     * Request to update a stored element
     * @param storeName Store name
     * @param databaseName Database name
     */
    update<M = any>(storeName: string, data: M, databaseName?: string): Observable<M>;
    /**
     * Request to delete a stored element
     * @param storeName Store name
     * @param databaseName Database name
     */
    delete(storeName: string, key: IDBValidKey, databaseName?: string): Observable<boolean>;
}
