interface StoreOptions { name: string; keyPath?: string; autoIncrement?: boolean; indices?: Array<{ name: string; keyPath: string | string[]; unique?: boolean; multiEntry?: boolean; }>; } interface IDBConfig { databaseName: string; version?: number; stores: StoreOptions[]; debug?: boolean; } interface QueryOptions { indexName?: string; range?: IDBKeyRange; direction?: IDBCursorDirection; limit?: number; } interface CursorResult { value: T; cursor: IDBCursorWithValue; continue: () => void; advance: (count: number) => void; } type EventType = 'open' | 'close' | 'upgrade' | 'error'; export default class IDBStore { static indexedDBSafe: any; private static I; private db; private openPromise; private isOpening; private readonly name; private readonly version; private readonly stores; private readonly debug; private readonly events; constructor(config: IDBConfig); on(event: EventType, handler: Function): void; private emit; private log; private fail; open(): Promise; private handleUpgrade; private getStore; add(storeName: string, data: T): Promise; put(storeName: string, data: T): Promise; get(storeName: string, key: IDBValidKey): Promise; delete(storeName: string, key: IDBValidKey): Promise; clear(storeName: string): Promise; getAll(storeName: string, options?: QueryOptions): Promise; private batch; addBulk(storeName: string, items: T[]): Promise; putBulk(storeName: string, items: T[]): Promise; iterate(storeName: string, callback: (res: CursorResult) => void, options?: QueryOptions): Promise; count(storeName: string, range?: IDBKeyRange): Promise; getStoreNames(): string[]; hasStore(storeName: string): boolean; close(): void; getInfo(): { name: string; version: number; objectStores: string[]; } | undefined; static createKeyRange(lower?: any, upper?: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange | undefined; static exists(databaseName: string): Promise; static deleteDatabase(name: string): Promise; static getDatabases(): Promise; } export {};