import BaseAdapter, { StorageProxy } from "./base"; import { RecordStatus } from "../types"; import { KintoObject } from "../http"; /** * Small helper that wraps the opening of an IndexedDB into a Promise. * * @param dbname {String} The database name. * @param version {Integer} Schema version * @param onupgradeneeded {Function} The callback to execute if schema is * missing or different. * @return {Promise} */ export declare function open(dbname: string, { version, onupgradeneeded, }: { version?: number; onupgradeneeded: (event: IDBVersionChangeEvent) => void; }): Promise; /** * Helper to run the specified callback in a single transaction on the * specified store. * The helper focuses on transaction wrapping into a promise. * * @param db {IDBDatabase} The database instance. * @param name {String} The store name. * @param callback {Function} The piece of code to execute in the transaction. * @param options {Object} Options. * @param options.mode {String} Transaction mode (default: read). * @return {Promise} any value returned by the callback. */ export declare function execute(db: IDBDatabase, name: string, callback: (store: IDBObjectStore, abort?: (...args: any[]) => any) => any, options?: { mode?: IDBTransactionMode; }): Promise; declare class IDBError extends Error { constructor(method: string, err: Error); } /** * IndexedDB adapter. * * This adapter doesn't support any options. */ export default class IDB extends BaseAdapter { private _db; cid: string; dbName: string; private _options; static get IDBError(): typeof IDBError; /** * Constructor. * * @param {String} cid The key base for this collection (eg. `bid/cid`) * @param {Object} options * @param {String} options.dbName The IndexedDB name (default: `"KintoDB"`) * @param {String} options.migrateOldData Whether old database data should be migrated (default: `false`) */ constructor(cid: string, options?: { dbName?: string; migrateOldData?: boolean; }); _handleError(method: string, err: Error): void; /** * Ensures a connection to the IndexedDB database has been opened. * * @override * @return {Promise} */ open(): Promise; /** * Closes current connection to the database. * * @override * @return {Promise} */ close(): Promise; /** * Returns a transaction and an object store for a store name. * * To determine if a transaction has completed successfully, we should rather * listen to the transaction’s complete event rather than the IDBObjectStore * request’s success event, because the transaction may still fail after the * success event fires. * * @param {String} name Store name * @param {Function} callback to execute * @param {Object} options Options * @param {String} options.mode Transaction mode ("readwrite" or undefined) * @return {Object} */ prepare(name: string, callback: (store: IDBObjectStore, abort?: (...args: any[]) => any) => any, options?: { mode?: IDBTransactionMode; }): Promise; /** * Deletes every records in the current collection. * * @override * @return {Promise} */ clear(): Promise; /** * Executes the set of synchronous CRUD operations described in the provided * callback within an IndexedDB transaction, for current db store. * * The callback will be provided an object exposing the following synchronous * CRUD operation methods: get, create, update, delete. * * Important note: because limitations in IndexedDB implementations, no * asynchronous code should be performed within the provided callback; the * promise will therefore be rejected if the callback returns a Promise. * * Options: * - {Array} preload: The list of record IDs to fetch and make available to * the transaction object get() method (default: []) * * @example * const db = new IDB("example"); * const result = await db.execute(transaction => { * transaction.create({id: 1, title: "foo"}); * transaction.update({id: 2, title: "bar"}); * transaction.delete(3); * return "foo"; * }); * * @override * @param {Function} callback The operation description callback. * @param {Object} options The options object. * @return {Promise} */ execute(callback: (proxy: StorageProxy) => T, options?: { preload: string[]; }): Promise; /** * Retrieve a record by its primary key from the IndexedDB database. * * @override * @param {String} id The record id. * @return {Promise} */ get(id: string): Promise; /** * Lists all records from the IndexedDB database. * * @override * @param {Object} params The filters and order to apply to the results. * @return {Promise} */ list(params?: { filters: { [key: string]: any; }; order?: string; }): Promise; /** * Store the lastModified value into metadata store. * * @override * @param {Number} lastModified * @return {Promise} */ saveLastModified(lastModified: number): Promise; /** * Retrieve saved lastModified value. * * @override * @return {Promise} */ getLastModified(): Promise; /** * Load a dump of records exported from a server. * * @deprecated Use {@link importBulk} instead. * @abstract * @param {Array} records The records to load. * @return {Promise} */ loadDump(records: (B & { last_modified: number; })[]): Promise; /** * Load records in bulk that were exported from a server. * * @abstract * @param {Array} records The records to load. * @return {Promise} */ importBulk(records: (B & { last_modified: number; })[]): Promise; saveMetadata(metadata: any): Promise; getMetadata(): Promise; } export {};