UNPKG

ng-indexed-db

Version:

An IndexedDB Angular module wrapped in RXJS

216 lines 13.9 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 var NG_DATABASES = new InjectionToken('NG_DATABASES'); /** * Service that handles all Indexed Databases and * tables requests. */ var IndexedDB = /** @class */ (function () { function IndexedDB(databases, idGenerator, databaseFactory) { this.databases = databases; this.idGenerator = idGenerator; this.databaseFactory = databaseFactory; this.databaseFactory.createConnnections(this.databases); } Object.defineProperty(IndexedDB.prototype, "onReady", { /** * Indicates if all databases have been created. * Only emits an event when recives a true value. */ get: /** * Indicates if all databases have been created. * Only emits an event when recives a true value. * @return {?} */ function () { return this.databaseFactory.connectionsReady .pipe(skipWhile((/** * @param {?} event * @return {?} */ function (event) { return !event; }))); }, enumerable: true, configurable: true }); /** * Request a list with all elements * @param storeName Store name * @param databaseName Database name */ /** * Request a list with all elements * @template M * @param {?} storeName Store name * @param {?=} databaseName Database name * @return {?} */ IndexedDB.prototype.list = /** * Request a list with all elements * @template M * @param {?} storeName Store name * @param {?=} databaseName Database name * @return {?} */ function (storeName, databaseName) { var _this = this; return this.onReady.pipe(switchMap((/** * @return {?} */ function () { return _this.databaseFactory.getDatabase(databaseName).list(storeName); }))); }; /** * Request an element by key * @param storeName Store name * @param key Key value to find the element * @param databaseName Database name */ /** * Request an element by key * @template M * @param {?} storeName Store name * @param {?} key Key value to find the element * @param {?=} databaseName Database name * @return {?} */ IndexedDB.prototype.get = /** * Request an element by key * @template M * @param {?} storeName Store name * @param {?} key Key value to find the element * @param {?=} databaseName Database name * @return {?} */ function (storeName, key, databaseName) { var _this = this; return this.onReady.pipe(switchMap((/** * @return {?} */ function () { return _this.databaseFactory.getDatabase(databaseName).get(storeName, key); }))); }; /** * Request to store an element * @param storeName Store name * @param databaseName Database name */ /** * Request to store an element * @template M * @param {?} storeName Store name * @param {?} data * @param {?=} databaseName Database name * @return {?} */ IndexedDB.prototype.create = /** * Request to store an element * @template M * @param {?} storeName Store name * @param {?} data * @param {?=} databaseName Database name * @return {?} */ function (storeName, data, databaseName) { var _this = this; // tslint:disable-next-line: no-string-literal if (!data['id']) { data['id'] = this.idGenerator.generate(); } return this.onReady.pipe(switchMap((/** * @return {?} */ function () { return _this.databaseFactory.getDatabase(databaseName).create(storeName, data); }))); }; /** * Request to update a stored element * @param storeName Store name * @param databaseName Database name */ /** * Request to update a stored element * @template M * @param {?} storeName Store name * @param {?} data * @param {?=} databaseName Database name * @return {?} */ IndexedDB.prototype.update = /** * Request to update a stored element * @template M * @param {?} storeName Store name * @param {?} data * @param {?=} databaseName Database name * @return {?} */ function (storeName, data, databaseName) { var _this = this; return this.onReady.pipe(switchMap((/** * @return {?} */ function () { return _this.databaseFactory.getDatabase(databaseName).update(storeName, data); }))); }; /** * Request to delete a stored element * @param storeName Store name * @param databaseName Database name */ /** * Request to delete a stored element * @param {?} storeName Store name * @param {?} key * @param {?=} databaseName Database name * @return {?} */ IndexedDB.prototype.delete = /** * Request to delete a stored element * @param {?} storeName Store name * @param {?} key * @param {?=} databaseName Database name * @return {?} */ function (storeName, key, databaseName) { var _this = this; return this.onReady.pipe(switchMap((/** * @return {?} */ function () { return _this.databaseFactory.getDatabase(databaseName).delete(storeName, key); }))); }; IndexedDB.decorators = [ { type: Injectable } ]; /** @nocollapse */ IndexedDB.ctorParameters = function () { return [ { type: Array, decorators: [{ type: Inject, args: [NG_DATABASES,] }] }, { type: IdGenerator }, { type: NgDatabaseFactory } ]; }; return IndexedDB; }()); export { IndexedDB }; if (false) { /** * @type {?} * @private */ IndexedDB.prototype.databases; /** * @type {?} * @private */ IndexedDB.prototype.idGenerator; /** * @type {?} * @private */ IndexedDB.prototype.databaseFactory; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZC1kYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctaW5kZXhlZC1kYi8iLCJzb3VyY2VzIjpbImxpYi9jb3JlL2luZGV4ZWQtZGIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7OztBQUkxRCxNQUFNLEtBQU8sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFpQixjQUFjLENBQUM7Ozs7O0FBTTlFO0lBV0UsbUJBQ2dDLFNBQXVCLEVBQzdDLFdBQXdCLEVBQ3hCLGVBQWtDO1FBRlosY0FBUyxHQUFULFNBQVMsQ0FBYztRQUM3QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFFMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQVhELHNCQUFJLDhCQUFPO1FBSlg7OztXQUdHOzs7Ozs7UUFDSDtZQUNFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0I7aUJBQ3pDLElBQUksQ0FBQyxTQUFTOzs7O1lBQUMsVUFBQyxLQUFjLElBQUssT0FBQSxDQUFDLEtBQUssRUFBTixDQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7OztPQUFBO0lBU0Q7Ozs7T0FJRzs7Ozs7Ozs7SUFDSCx3QkFBSTs7Ozs7OztJQUFKLFVBQWMsU0FBaUIsRUFBRSxZQUFxQjtRQUF0RCxpQkFNQztRQUxDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLFNBQVM7OztRQUNQLGNBQU0sT0FBQSxLQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUksU0FBUyxDQUFDLEVBQWpFLENBQWlFLEVBQ3hFLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRDs7Ozs7T0FLRzs7Ozs7Ozs7O0lBQ0gsdUJBQUc7Ozs7Ozs7O0lBQUgsVUFBYSxTQUFpQixFQUFFLEdBQVEsRUFBRSxZQUFxQjtRQUEvRCxpQkFNQztRQUxDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLFNBQVM7OztRQUNQLGNBQU0sT0FBQSxLQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUksU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFyRSxDQUFxRSxFQUM1RSxDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRzs7Ozs7Ozs7O0lBQ0gsMEJBQU07Ozs7Ozs7O0lBQU4sVUFBZ0IsU0FBaUIsRUFBRSxJQUFPLEVBQUUsWUFBcUI7UUFBakUsaUJBUUM7UUFQQyw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQUU7UUFDOUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDdEIsU0FBUzs7O1FBQ1AsY0FBTSxPQUFBLEtBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQXpFLENBQXlFLEVBQ2hGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRDs7OztPQUlHOzs7Ozs7Ozs7SUFDSCwwQkFBTTs7Ozs7Ozs7SUFBTixVQUFnQixTQUFpQixFQUFFLElBQU8sRUFBRSxZQUFxQjtRQUFqRSxpQkFNQztRQUxDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLFNBQVM7OztRQUNQLGNBQU0sT0FBQSxLQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUksU0FBUyxFQUFFLElBQUksQ0FBQyxFQUF6RSxDQUF5RSxFQUNoRixDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0Q7Ozs7T0FJRzs7Ozs7Ozs7SUFDSCwwQkFBTTs7Ozs7OztJQUFOLFVBQU8sU0FBaUIsRUFBRSxHQUFnQixFQUFFLFlBQXFCO1FBQWpFLGlCQU1DO1FBTEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDdEIsU0FBUzs7O1FBQ1AsY0FBTSxPQUFBLEtBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQXJFLENBQXFFLEVBQzVFLENBQ0YsQ0FBQztJQUNKLENBQUM7O2dCQWhGRixVQUFVOzs7OzRDQVlOLE1BQU0sU0FBQyxZQUFZO2dCQXRCZixXQUFXO2dCQURYLGlCQUFpQjs7SUE2RjFCLGdCQUFDO0NBQUEsQUFsRkQsSUFrRkM7U0FqRlksU0FBUzs7Ozs7O0lBV2xCLDhCQUFxRDs7Ozs7SUFDckQsZ0NBQWdDOzs7OztJQUNoQyxvQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHNraXBXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTmdEYXRhQmFzZSB9IGZyb20gJy4vdHlwZXMvZGF0YWJhc2UudHlwZSc7XG5pbXBvcnQgeyBOZ0RhdGFiYXNlRmFjdG9yeSB9IGZyb20gJy4vZmFjdG9yeS9kYXRhYmFzZS1mYWN0b3J5JztcbmltcG9ydCB7IElkR2VuZXJhdG9yIH0gZnJvbSAnLi9pZC1nZW5lcmF0b3IvaWQtZ2VuZXJhdG9yJztcblxuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgZ2l2ZXMgdGhlIGRhdGFiYXNlcyBtZXRhZGF0YSAqL1xuZXhwb3J0IGNvbnN0IE5HX0RBVEFCQVNFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjx7ZWxlbWVudDogYW55fT4oJ05HX0RBVEFCQVNFUycpO1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBoYW5kbGVzIGFsbCBJbmRleGVkIERhdGFiYXNlcyBhbmRcbiAqIHRhYmxlcyByZXF1ZXN0cy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEluZGV4ZWREQiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgYWxsIGRhdGFiYXNlcyBoYXZlIGJlZW4gY3JlYXRlZC5cbiAgICogT25seSBlbWl0cyBhbiBldmVudCB3aGVuIHJlY2l2ZXMgYSB0cnVlIHZhbHVlLlxuICAgKi9cbiAgZ2V0IG9uUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VGYWN0b3J5LmNvbm5lY3Rpb25zUmVhZHlcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZXZlbnQ6IGJvb2xlYW4pID0+ICFldmVudCkpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChOR19EQVRBQkFTRVMpIHByaXZhdGUgZGF0YWJhc2VzOiBOZ0RhdGFCYXNlW10sXG4gICAgcHJpdmF0ZSBpZEdlbmVyYXRvcjogSWRHZW5lcmF0b3IsXG4gICAgcHJpdmF0ZSBkYXRhYmFzZUZhY3Rvcnk6IE5nRGF0YWJhc2VGYWN0b3J5LFxuICApIHtcbiAgICB0aGlzLmRhdGFiYXNlRmFjdG9yeS5jcmVhdGVDb25ubmVjdGlvbnModGhpcy5kYXRhYmFzZXMpO1xuICB9XG4gIC8qKlxuICAgKiBSZXF1ZXN0IGEgbGlzdCB3aXRoIGFsbCBlbGVtZW50c1xuICAgKiBAcGFyYW0gc3RvcmVOYW1lIFN0b3JlIG5hbWVcbiAgICogQHBhcmFtIGRhdGFiYXNlTmFtZSBEYXRhYmFzZSBuYW1lXG4gICAqL1xuICBsaXN0PE0gPSBhbnk+KHN0b3JlTmFtZTogc3RyaW5nLCBkYXRhYmFzZU5hbWU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1bXT4ge1xuICAgIHJldHVybiB0aGlzLm9uUmVhZHkucGlwZShcbiAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgKCkgPT4gdGhpcy5kYXRhYmFzZUZhY3RvcnkuZ2V0RGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5saXN0PE0+KHN0b3JlTmFtZSlcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXF1ZXN0IGFuIGVsZW1lbnQgYnkga2V5XG4gICAqIEBwYXJhbSBzdG9yZU5hbWUgU3RvcmUgbmFtZVxuICAgKiBAcGFyYW0ga2V5IEtleSB2YWx1ZSB0byBmaW5kIHRoZSBlbGVtZW50XG4gICAqIEBwYXJhbSBkYXRhYmFzZU5hbWUgRGF0YWJhc2UgbmFtZVxuICAgKi9cbiAgZ2V0PE0gPSBhbnk+KHN0b3JlTmFtZTogc3RyaW5nLCBrZXk6IGFueSwgZGF0YWJhc2VOYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNPiB7XG4gICAgcmV0dXJuIHRoaXMub25SZWFkeS5waXBlKFxuICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAoKSA9PiB0aGlzLmRhdGFiYXNlRmFjdG9yeS5nZXREYXRhYmFzZShkYXRhYmFzZU5hbWUpLmdldDxNPihzdG9yZU5hbWUsIGtleSlcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRvIHN0b3JlIGFuIGVsZW1lbnRcbiAgICogQHBhcmFtIHN0b3JlTmFtZSBTdG9yZSBuYW1lXG4gICAqIEBwYXJhbSBkYXRhYmFzZU5hbWUgRGF0YWJhc2UgbmFtZVxuICAgKi9cbiAgY3JlYXRlPE0gPSBhbnk+KHN0b3JlTmFtZTogc3RyaW5nLCBkYXRhOiBNLCBkYXRhYmFzZU5hbWU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE0+IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXN0cmluZy1saXRlcmFsXG4gICAgaWYgKCFkYXRhWydpZCddKSB7IGRhdGFbJ2lkJ10gPSB0aGlzLmlkR2VuZXJhdG9yLmdlbmVyYXRlKCk7IH1cbiAgICByZXR1cm4gdGhpcy5vblJlYWR5LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICgpID0+IHRoaXMuZGF0YWJhc2VGYWN0b3J5LmdldERhdGFiYXNlKGRhdGFiYXNlTmFtZSkuY3JlYXRlPE0+KHN0b3JlTmFtZSwgZGF0YSlcbiAgICAgIClcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRvIHVwZGF0ZSBhIHN0b3JlZCBlbGVtZW50XG4gICAqIEBwYXJhbSBzdG9yZU5hbWUgU3RvcmUgbmFtZVxuICAgKiBAcGFyYW0gZGF0YWJhc2VOYW1lIERhdGFiYXNlIG5hbWVcbiAgICovXG4gIHVwZGF0ZTxNID0gYW55PihzdG9yZU5hbWU6IHN0cmluZywgZGF0YTogTSwgZGF0YWJhc2VOYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNPiB7XG4gICAgcmV0dXJuIHRoaXMub25SZWFkeS5waXBlKFxuICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAoKSA9PiB0aGlzLmRhdGFiYXNlRmFjdG9yeS5nZXREYXRhYmFzZShkYXRhYmFzZU5hbWUpLnVwZGF0ZTxNPihzdG9yZU5hbWUsIGRhdGEpXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmVxdWVzdCB0byBkZWxldGUgYSBzdG9yZWQgZWxlbWVudFxuICAgKiBAcGFyYW0gc3RvcmVOYW1lIFN0b3JlIG5hbWVcbiAgICogQHBhcmFtIGRhdGFiYXNlTmFtZSBEYXRhYmFzZSBuYW1lXG4gICAqL1xuICBkZWxldGUoc3RvcmVOYW1lOiBzdHJpbmcsIGtleTogSURCVmFsaWRLZXksIGRhdGFiYXNlTmFtZT86IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm9uUmVhZHkucGlwZShcbiAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgKCkgPT4gdGhpcy5kYXRhYmFzZUZhY3RvcnkuZ2V0RGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5kZWxldGUoc3RvcmVOYW1lLCBrZXkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG59XG4iXX0=