ng-indexed-db
Version:
An IndexedDB Angular module wrapped in RXJS
2 lines • 5.36 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/common"),require("rxjs/operators"),require("rxjs"),require("rxjs/internal/BehaviorSubject")):"function"==typeof define&&define.amd?define("ng-indexed-db",["exports","@angular/core","@angular/common","rxjs/operators","rxjs","rxjs/internal/BehaviorSubject"],t):t((e=e||self)["ng-indexed-db"]={},e.ng.core,e.ng.common,e.rxjs.operators,e.rxjs,e.rxjs["internal/BehaviorSubject"])}(this,function(e,t,r,n,o,a){"use strict";var i=function(){return(i=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},c="readonly",u="readwrite",s=function(){function e(e,t,r){void 0===r&&(r=[]),this.database=e,this.upgraded=t,this.createTables(r)}return e.prototype.createTables=function(e){var t=this;this.upgraded&&e.forEach(function(e){return t.createTable(e)})},e.prototype.createTable=function(e){this.database.createObjectStore(e.name,{keyPath:"id"})},e.prototype.list=function(e){var t=this;return new o.Observable(function(r){var n=t.store(e,c).getAll();n.onsuccess=function(e){return r.next(n.result)},n.onerror=function(e){return r.error(n.error)}})},e.prototype.get=function(e,t){var r=this;return new o.Observable(function(n){var o=r.store(e,c).get(t);o.onsuccess=function(e){return n.next(o.result)},o.onerror=function(e){return n.error(o.error)}})},e.prototype.create=function(e,t){var r=this;return new o.Observable(function(n){var o=r.store(e,u).put(t);o.onsuccess=function(e){return n.next(t)},o.onerror=function(e){return n.error(o.error)}})},e.prototype.update=function(e,t){var r=this;return new o.Observable(function(n){var o=r.store(e,u).put(t);o.onsuccess=function(e){return n.next(t)},o.onerror=function(e){return n.error(o.error)}})},e.prototype["delete"]=function(e,t){var r=this;return new o.Observable(function(n){var o=r.store(e,u)["delete"](t);o.onsuccess=function(e){return n.next(!0)},o.onerror=function(e){return n.error(o.error)}})},e.prototype.store=function(e,t){return this.database.transaction(e,t).objectStore(e)},e}(),p=function(){function e(){this.connectionsReady=new a.BehaviorSubject(!1),this.factory=window.indexedDB}return e.prototype.createConnnections=function(e){var t=this;this.createDataBases(e).pipe(n.map(function(e){return t.connections=e}),n.switchMap(function(e){return o.timer(100)})).subscribe(function(){return t.connectionsReady.next(!0)})},e.prototype.getDatabase=function(e){return this.connections[e||this.defaultConnectionName]},e.prototype.open=function(e,t){var r=this;return new o.Observable(function(n){var o=!1,a=r.factory.open(e,t);a.onupgradeneeded=function(e){n.next({upgraded:!0,success:!0,result:a.result}),n.complete(),o=!0},a.onsuccess=function(e){o||(n.next({upgraded:!1,success:!0,result:a.result}),n.complete())},a.onerror=function(t){n.error("Error to connect database "+e),n.complete()},a.onblocked=function(e){console.log("blocked")}})},e.prototype.createDataBases=function(e){var t=this,r=[],a=!0;e.forEach(function(e){a&&(t.defaultConnectionName=e.name,a=!1),r.push(t.createConnection(e.name,e.stores,1))});return o.forkJoin(r).pipe(n.map(function(e){var t={};return e.forEach(function(e){t=i({},t,e)}),t}))},e.prototype.createConnection=function(e,t,r){return this.open(e,r).pipe(n.map(function(r){var n;return(n={})[e]=new s(r.result,r.upgraded,t),n}))},e.decorators=[{type:t.Injectable}],e}(),f=function(){function e(){}return e.prototype.generate=function(e){return(new Date).getTime()},e.decorators=[{type:t.Injectable}],e}(),d=new t.InjectionToken("NG_DATABASES"),l=function(){function e(e,t,r){this.databases=e,this.idGenerator=t,this.databaseFactory=r,this.databaseFactory.createConnnections(this.databases)}return Object.defineProperty(e.prototype,"onReady",{get:function(){return this.databaseFactory.connectionsReady.pipe(n.skipWhile(function(e){return!e}))},enumerable:!0,configurable:!0}),e.prototype.list=function(e,t){var r=this;return this.onReady.pipe(n.switchMap(function(){return r.databaseFactory.getDatabase(t).list(e)}))},e.prototype.get=function(e,t,r){var o=this;return this.onReady.pipe(n.switchMap(function(){return o.databaseFactory.getDatabase(r).get(e,t)}))},e.prototype.create=function(e,t,r){var o=this;return t.id||(t.id=this.idGenerator.generate()),this.onReady.pipe(n.switchMap(function(){return o.databaseFactory.getDatabase(r).create(e,t)}))},e.prototype.update=function(e,t,r){var o=this;return this.onReady.pipe(n.switchMap(function(){return o.databaseFactory.getDatabase(r).update(e,t)}))},e.prototype["delete"]=function(e,t,r){var o=this;return this.onReady.pipe(n.switchMap(function(){return o.databaseFactory.getDatabase(r)["delete"](e,t)}))},e.decorators=[{type:t.Injectable}],e.ctorParameters=function(){return[{type:Array,decorators:[{type:t.Inject,args:[d]}]},{type:f},{type:p}]},e}(),b=function(){function e(){}return e.forRoot=function(t){return void 0===t&&(t=[]),{ngModule:e,providers:[{provide:d,useValue:t}]}},e.decorators=[{type:t.NgModule,args:[{declarations:[],imports:[r.CommonModule],exports:[],providers:[l,p,f]}]}],e}();e.IndexedDB=l,e.IndexedDBModule=b,e.NG_DATABASES=d,e.ɵb=f,e.ɵc=p,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=ng-indexed-db.umd.min.js.map