ng-indexed-db
Version:
An IndexedDB Angular module wrapped in RXJS
142 lines • 11.1 kB
JavaScript
/**
* @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