Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var Promise;
- var IDBDatabase;
- IDBDatabase.prototype.debug = true;
- IDBDatabase.prototype.set = async function( name, data ) {
- return new Promise(( resolve, reject ) => {
- let transaction = this.transaction ( [ name ], 'readwrite' );
- let store = transaction.objectStore( name );
- let req = store.add( data );
- req.onerror = e => {
- if ( this.debug )
- log( `[ ERROR: set ], could not set key [${ data.id }] in store [${
- req.source.name }] in database [${ this.name }]` );
- reject( e );
- };
- req.onsuccess = () => {
- if ( this.debug )
- log( `[ INFO: set ], Set key [${ data.id }] in store [${
- req.source.name }] in database [${ this.name }]` );
- resolve( data );
- };
- });
- };
- IDBDatabase.prototype.get = async function( name, key ) {
- return new Promise(( resolve, reject ) => {
- let transaction = this.transaction ( [ name ], 'readonly' );
- let store = transaction.objectStore( name );
- let req = store.get( key );
- req.onerror = () => {
- if ( this.debug )
- log( `[ ERROR: get ], Could not retrieve key [${ key }] from store [${
- req.source.name }] in database [${ this.name }]` );
- reject( key );
- };
- req.onsuccess = ( e ) => {
- if ( typeof req.result === 'undefined' ) {
- req.onerror( e );
- } else {
- if ( this.debug )
- log( `[ INFO: get ], Retrieved key [${ key }] from store [${
- req.source.name }] in database [${ this.name }]` );
- resolve( req.result );
- }
- };
- });
- };
- IDBDatabase.prototype.getAll = async function( name ) {
- return new Promise(( resolve, reject ) => {
- let transaction = this.transaction ( [ name ], 'readonly' );
- let store = transaction.objectStore( name );
- let req = store.getAll();
- req.onerror = () => {
- if ( this.debug )
- log( `[ ERROR: getAll ], Could not retrieve items from store [${
- req.source.name }] in database [${ this.name }]` );
- reject();
- };
- req.onsuccess = ( e ) => {
- if ( typeof req.result === 'undefined' ) {
- req.onerror( e );
- } else {
- if ( this.debug )
- log( `[ INFO: get ], Retrieved all items from store [${
- req.source.name }] in database [${ this.name }]` );
- resolve( req.result );
- }
- };
- });
- };
- IDBDatabase.prototype.load = async function( name, defaults ) {
- if ( ! Array.isArray( defaults ) ) defaults = [ defaults ];
- var name = name;
- let promises = [];
- defaults.forEach( data => {
- promises.push( this.get( name, data.id ) );
- } );
- return Promise.allSettled( promises )
- .then( reqs => {
- let que = [];
- let results = [];
- reqs.forEach( req => {
- if ( req.status === 'rejected' ) {
- let data = defaults.find( x => x.id === req.reason );
- que.push( this.set( name, data ) );
- if ( this.debug )
- log( `[ INFO: load ], Setting default values for key [${ req.reason
- }] in store [${ name }] in database [${ this.name }]` );
- } else if ( req.status === 'fulfilled' ) {
- results.push( req.value );
- }
- });
- if ( que.length ) {
- return Promise.allSettled( que );
- } else {
- return results;
- }
- });
- };
- IDBDatabase.prototype.update = async function( name, data ) {
- return new Promise(( resolve, reject ) => {
- let transaction = this.transaction ( [ name ], 'readwrite' );
- let store = transaction.objectStore( name );
- let req = store.put( data );
- req.onerror = e => {
- if ( this.debug )
- log( `[ ERROR: update ], could not update key [${ data.id }] in store [${
- req.source.name }] in database [${ this.name }]` );
- reject( e );
- };
- req.onsuccess = () => {
- if ( this.debug )
- log( `[ INFO: update ], updated key [${ data.id }] in store [${
- req.source.name }] in database [${ this.name }]` );
- resolve( data );
- };
- });
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement