UNPKG

ng-indexed-db

Version:

An IndexedDB Angular module wrapped in RXJS

142 lines 11.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable, InjectionToken, Inject } from '@angular/core'; import { switchMap, skipWhile } from 'rxjs/operators'; import { NgDatabaseFactory } from './factory/database-factory'; import { IdGenerator } from './id-generator/id-generator'; /** * Injection token that gives the databases metadata * @type {?} */ export const NG_DATABASES = new InjectionToken('NG_DATABASES'); /** * Service that handles all Indexed Databases and * tables requests. */ export class IndexedDB { /** * @param {?} databases * @param {?} idGenerator * @param {?} databaseFactory */ constructor(databases, idGenerator, databaseFactory) { this.databases = databases; this.idGenerator = idGenerator; this.databaseFactory = databaseFactory; this.databaseFactory.createConnnections(this.databases); } /** * Indicates if all databases have been created. * Only emits an event when recives a true value. * @return {?} */ get onReady() { return this.databaseFactory.connectionsReady .pipe(skipWhile((/** * @param {?} event * @return {?} */ (event) => !event))); } /** * Request a list with all elements * @template M * @param {?} storeName Store name * @param {?=} databaseName Database name * @return {?} */ list(storeName, databaseName) { return this.onReady.pipe(switchMap((/** * @return {?} */ () => this.databaseFactory.getDatabase(databaseName).list(storeName)))); } /** * Request an element by key * @template M * @param {?} storeName Store name * @param {?} key Key value to find the element * @param {?=} databaseName Database name * @return {?} */ get(storeName, key, databaseName) { return this.onReady.pipe(switchMap((/** * @return {?} */ () => this.databaseFactory.getDatabase(databaseName).get(storeName, key)))); } /** * Request to store an element * @template M * @param {?} storeName Store name * @param {?} data * @param {?=} databaseName Database name * @return {?} */ create(storeName, data, databaseName) { // tslint:disable-next-line: no-string-literal if (!data['id']) { data['id'] = this.idGenerator.generate(); } return this.onReady.pipe(switchMap((/** * @return {?} */ () => this.databaseFactory.getDatabase(databaseName).create(storeName, data)))); } /** * Request to update a stored element * @template M * @param {?} storeName Store name * @param {?} data * @param {?=} databaseName Database name * @return {?} */ update(storeName, data, databaseName) { return this.onReady.pipe(switchMap((/** * @return {?} */ () => this.databaseFactory.getDatabase(databaseName).update(storeName, data)))); } /** * Request to delete a stored element * @param {?} storeName Store name * @param {?} key * @param {?=} databaseName Database name * @return {?} */ delete(storeName, key, databaseName) { return this.onReady.pipe(switchMap((/** * @return {?} */ () => this.databaseFactory.getDatabase(databaseName).delete(storeName, key)))); } } IndexedDB.decorators = [ { type: Injectable } ]; /** @nocollapse */ IndexedDB.ctorParameters = () => [ { type: Array, decorators: [{ type: Inject, args: [NG_DATABASES,] }] }, { type: IdGenerator }, { type: NgDatabaseFactory } ]; if (false) { /** * @type {?} * @private */ IndexedDB.prototype.databases; /** * @type {?} * @private */ IndexedDB.prototype.idGenerator; /** * @type {?} * @private */ IndexedDB.prototype.databaseFactory; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZC1kYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctaW5kZXhlZC1kYi8iLCJzb3VyY2VzIjpbImxpYi9jb3JlL2luZGV4ZWQtZGIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7OztBQUkxRCxNQUFNLE9BQU8sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFpQixjQUFjLENBQUM7Ozs7O0FBTzlFLE1BQU0sT0FBTyxTQUFTOzs7Ozs7SUFVcEIsWUFDZ0MsU0FBdUIsRUFDN0MsV0FBd0IsRUFDeEIsZUFBa0M7UUFGWixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQzdDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUUxQyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDOzs7Ozs7SUFYRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCO2FBQ3pDLElBQUksQ0FBQyxTQUFTOzs7O1FBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDOzs7Ozs7OztJQWNELElBQUksQ0FBVSxTQUFpQixFQUFFLFlBQXFCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLFNBQVM7OztRQUNQLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBSSxTQUFTLENBQUMsRUFDeEUsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7Ozs7Ozs7O0lBT0QsR0FBRyxDQUFVLFNBQWlCLEVBQUUsR0FBUSxFQUFFLFlBQXFCO1FBQzdELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLFNBQVM7OztRQUNQLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQzVFLENBQ0YsQ0FBQztJQUNKLENBQUM7Ozs7Ozs7OztJQU1ELE1BQU0sQ0FBVSxTQUFpQixFQUFFLElBQU8sRUFBRSxZQUFxQjtRQUMvRCw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQUU7UUFDOUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDdEIsU0FBUzs7O1FBQ1AsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFDaEYsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7Ozs7Ozs7O0lBTUQsTUFBTSxDQUFVLFNBQWlCLEVBQUUsSUFBTyxFQUFFLFlBQXFCO1FBQy9ELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLFNBQVM7OztRQUNQLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQ2hGLENBQ0YsQ0FBQztJQUNKLENBQUM7Ozs7Ozs7O0lBTUQsTUFBTSxDQUFDLFNBQWlCLEVBQUUsR0FBZ0IsRUFBRSxZQUFxQjtRQUMvRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixTQUFTOzs7UUFDUCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUM1RSxDQUNGLENBQUM7SUFDSixDQUFDOzs7WUFoRkYsVUFBVTs7Ozt3Q0FZTixNQUFNLFNBQUMsWUFBWTtZQXRCZixXQUFXO1lBRFgsaUJBQWlCOzs7Ozs7O0lBdUJ0Qiw4QkFBcUQ7Ozs7O0lBQ3JELGdDQUFnQzs7Ozs7SUFDaEMsb0NBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBza2lwV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE5nRGF0YUJhc2UgfSBmcm9tICcuL3R5cGVzL2RhdGFiYXNlLnR5cGUnO1xuaW1wb3J0IHsgTmdEYXRhYmFzZUZhY3RvcnkgfSBmcm9tICcuL2ZhY3RvcnkvZGF0YWJhc2UtZmFjdG9yeSc7XG5pbXBvcnQgeyBJZEdlbmVyYXRvciB9IGZyb20gJy4vaWQtZ2VuZXJhdG9yL2lkLWdlbmVyYXRvcic7XG5cblxuLyoqIEluamVjdGlvbiB0b2tlbiB0aGF0IGdpdmVzIHRoZSBkYXRhYmFzZXMgbWV0YWRhdGEgKi9cbmV4cG9ydCBjb25zdCBOR19EQVRBQkFTRVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48e2VsZW1lbnQ6IGFueX0+KCdOR19EQVRBQkFTRVMnKTtcblxuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgaGFuZGxlcyBhbGwgSW5kZXhlZCBEYXRhYmFzZXMgYW5kXG4gKiB0YWJsZXMgcmVxdWVzdHMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJbmRleGVkREIge1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGFsbCBkYXRhYmFzZXMgaGF2ZSBiZWVuIGNyZWF0ZWQuXG4gICAqIE9ubHkgZW1pdHMgYW4gZXZlbnQgd2hlbiByZWNpdmVzIGEgdHJ1ZSB2YWx1ZS5cbiAgICovXG4gIGdldCBvblJlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlRmFjdG9yeS5jb25uZWN0aW9uc1JlYWR5XG4gICAgICAucGlwZShza2lwV2hpbGUoKGV2ZW50OiBib29sZWFuKSA9PiAhZXZlbnQpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTkdfREFUQUJBU0VTKSBwcml2YXRlIGRhdGFiYXNlczogTmdEYXRhQmFzZVtdLFxuICAgIHByaXZhdGUgaWRHZW5lcmF0b3I6IElkR2VuZXJhdG9yLFxuICAgIHByaXZhdGUgZGF0YWJhc2VGYWN0b3J5OiBOZ0RhdGFiYXNlRmFjdG9yeSxcbiAgKSB7XG4gICAgdGhpcy5kYXRhYmFzZUZhY3RvcnkuY3JlYXRlQ29ubm5lY3Rpb25zKHRoaXMuZGF0YWJhc2VzKTtcbiAgfVxuICAvKipcbiAgICogUmVxdWVzdCBhIGxpc3Qgd2l0aCBhbGwgZWxlbWVudHNcbiAgICogQHBhcmFtIHN0b3JlTmFtZSBTdG9yZSBuYW1lXG4gICAqIEBwYXJhbSBkYXRhYmFzZU5hbWUgRGF0YWJhc2UgbmFtZVxuICAgKi9cbiAgbGlzdDxNID0gYW55PihzdG9yZU5hbWU6IHN0cmluZywgZGF0YWJhc2VOYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNW10+IHtcbiAgICByZXR1cm4gdGhpcy5vblJlYWR5LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICgpID0+IHRoaXMuZGF0YWJhc2VGYWN0b3J5LmdldERhdGFiYXNlKGRhdGFiYXNlTmFtZSkubGlzdDxNPihzdG9yZU5hbWUpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmVxdWVzdCBhbiBlbGVtZW50IGJ5IGtleVxuICAgKiBAcGFyYW0gc3RvcmVOYW1lIFN0b3JlIG5hbWVcbiAgICogQHBhcmFtIGtleSBLZXkgdmFsdWUgdG8gZmluZCB0aGUgZWxlbWVudFxuICAgKiBAcGFyYW0gZGF0YWJhc2VOYW1lIERhdGFiYXNlIG5hbWVcbiAgICovXG4gIGdldDxNID0gYW55PihzdG9yZU5hbWU6IHN0cmluZywga2V5OiBhbnksIGRhdGFiYXNlTmFtZT86IHN0cmluZyk6IE9ic2VydmFibGU8TT4ge1xuICAgIHJldHVybiB0aGlzLm9uUmVhZHkucGlwZShcbiAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgKCkgPT4gdGhpcy5kYXRhYmFzZUZhY3RvcnkuZ2V0RGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5nZXQ8TT4oc3RvcmVOYW1lLCBrZXkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmVxdWVzdCB0byBzdG9yZSBhbiBlbGVtZW50XG4gICAqIEBwYXJhbSBzdG9yZU5hbWUgU3RvcmUgbmFtZVxuICAgKiBAcGFyYW0gZGF0YWJhc2VOYW1lIERhdGFiYXNlIG5hbWVcbiAgICovXG4gIGNyZWF0ZTxNID0gYW55PihzdG9yZU5hbWU6IHN0cmluZywgZGF0YTogTSwgZGF0YWJhc2VOYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNPiB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zdHJpbmctbGl0ZXJhbFxuICAgIGlmICghZGF0YVsnaWQnXSkgeyBkYXRhWydpZCddID0gdGhpcy5pZEdlbmVyYXRvci5nZW5lcmF0ZSgpOyB9XG4gICAgcmV0dXJuIHRoaXMub25SZWFkeS5waXBlKFxuICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAoKSA9PiB0aGlzLmRhdGFiYXNlRmFjdG9yeS5nZXREYXRhYmFzZShkYXRhYmFzZU5hbWUpLmNyZWF0ZTxNPihzdG9yZU5hbWUsIGRhdGEpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmVxdWVzdCB0byB1cGRhdGUgYSBzdG9yZWQgZWxlbWVudFxuICAgKiBAcGFyYW0gc3RvcmVOYW1lIFN0b3JlIG5hbWVcbiAgICogQHBhcmFtIGRhdGFiYXNlTmFtZSBEYXRhYmFzZSBuYW1lXG4gICAqL1xuICB1cGRhdGU8TSA9IGFueT4oc3RvcmVOYW1lOiBzdHJpbmcsIGRhdGE6IE0sIGRhdGFiYXNlTmFtZT86IHN0cmluZyk6IE9ic2VydmFibGU8TT4ge1xuICAgIHJldHVybiB0aGlzLm9uUmVhZHkucGlwZShcbiAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgKCkgPT4gdGhpcy5kYXRhYmFzZUZhY3RvcnkuZ2V0RGF0YWJhc2UoZGF0YWJhc2VOYW1lKS51cGRhdGU8TT4oc3RvcmVOYW1lLCBkYXRhKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJlcXVlc3QgdG8gZGVsZXRlIGEgc3RvcmVkIGVsZW1lbnRcbiAgICogQHBhcmFtIHN0b3JlTmFtZSBTdG9yZSBuYW1lXG4gICAqIEBwYXJhbSBkYXRhYmFzZU5hbWUgRGF0YWJhc2UgbmFtZVxuICAgKi9cbiAgZGVsZXRlKHN0b3JlTmFtZTogc3RyaW5nLCBrZXk6IElEQlZhbGlkS2V5LCBkYXRhYmFzZU5hbWU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5vblJlYWR5LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICgpID0+IHRoaXMuZGF0YWJhc2VGYWN0b3J5LmdldERhdGFiYXNlKGRhdGFiYXNlTmFtZSkuZGVsZXRlKHN0b3JlTmFtZSwga2V5KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxufVxuIl19