ng-indexed-db
Version:
An IndexedDB Angular module wrapped in RXJS
216 lines • 13.9 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 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=