Advertisement
Uno-Dan

DBMagic

Jan 29th, 2021
866
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class DBMagic {
  2.   constructor( db_name, db_version, stores ) {  
  3.     this.stores = stores;
  4.     this.db_name = db_name;
  5.     this.db_version = db_version;
  6.     var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
  7.     this.indexedDB = indexedDB;
  8.    
  9.     this.db_delete();
  10.     this.db_create();
  11.   }
  12.    
  13.   add( name, items, callback ) {
  14.     const db_name = this.db_name;
  15.     let req = this.indexedDB.open( db_name, this.db_version );
  16.    
  17.     req.onsuccess = () => {
  18.       let db = req.result;
  19.       let tx = db.transaction ( [ name ], 'readwrite' );
  20.      
  21.       tx.oncomplete = () => {
  22.         if ( debug )
  23.           console.log( 'SUCCESS: Transaction [add] on database [' + db_name + '] store [' + name + '] completed successfully.' );
  24.       };
  25.      
  26.       tx.onerror = ( e ) => {
  27.         if ( debug )
  28.           console.log( 'ERROR: Transaction method add() has failed.\n', e.srcElement.error );
  29.       };
  30.      
  31.       items.forEach( item => {
  32.         let storeReq = tx.objectStore( name ).add( item );
  33.         storeReq.onsuccess = ( e ) => {
  34.           if ( debug )
  35.             console.log( 'SUCCESS: Added key ['+ item.id +'] to store [' + name + '] on database [' + db_name + '] successfully.' );
  36.             if ( callback ) callback( e );
  37.         };
  38.        
  39.         storeReq.onerror = ( e ) => {
  40.           if ( debug )
  41.             console.log( 'ERROR: Adding key ['+ item.id +'] to store [' + name + '] on database [' + db_name + '] failed.\n', e.srcElement.error );
  42.           if ( callback ) callback( e );  
  43.         };
  44.       });
  45.     };
  46.    
  47.     req.onerror = ( e ) => {
  48.       if ( debug )
  49.         console.log( 'ERROR: Could not connect to database [' + db_name + '].\n', e.srcElement.error );
  50.     };
  51.   }
  52.  
  53.   get( name, items, callback ) {
  54.     const db_name = this.db_name;
  55.     const req = this.indexedDB.open( db_name, this.db_version );
  56.    
  57.     req.onsuccess = () => {
  58.       let db = req.result;
  59.      
  60.       let tx = db.transaction ( [ name ], 'readonly' );
  61.       let store = tx.objectStore( name );
  62.  
  63.       tx.onerror = ( e ) => {
  64.         if ( debug )
  65.           console.log( 'ERROR: Transaction on database [' + db_name + '] failed.\n', e.srcElement.error );
  66.       };
  67.      
  68.       tx.oncomplete = () => {
  69.         if ( debug )
  70.           console.log( 'SUCCESS: Transaction [get] on database [' + db_name + '] store [' + name + '] completed successfully.' );
  71.       };
  72.      
  73.       items.forEach( item => {
  74.         let storeReq = store.get( item );
  75.        
  76.         storeReq.onerror = ( e ) => {
  77.           if ( debug )
  78.             console.log('ERROR: Could not connect to database ['+ db_name +'].\n', e.srcElement.error );
  79.          
  80.           if ( callback ) callback( e );
  81.         };
  82.        
  83.         storeReq.onsuccess = ( e ) => {
  84.           if ( debug )
  85.             console.log( 'SUCCESS: Retrieved key ['+ item +'] from store [' + name + '] on database ['+ db_name +'] successfully.' );
  86.           if ( callback ) callback( e.target.result );  
  87.         };
  88.       });  
  89.     };
  90.    
  91.     req.onerror = ( e ) => {
  92.       if ( debug )
  93.         console.log('ERROR: Could not connect to database ['+ db_name +'].\n', e.srcElement.error );
  94.     };
  95.   }
  96.  
  97.   getAll( name, callback ) {
  98.     const db_name = this.db_name;
  99.     const req = this.indexedDB.open( db_name, this.db_version );
  100.    
  101.     req.onsuccess = () => {
  102.       let db = req.result;
  103.       let tx = db.transaction ( [ name ], 'readonly' );
  104.       let store = tx.objectStore( name );
  105.      
  106.       tx.oncomplete = () => {
  107.         if ( debug )
  108.           console.log( 'SUCCESS: Transaction [getAll] on database [' + db_name + '] store [' + name + '] completed successfully.' );
  109.       };
  110.      
  111.       let storeReq = store.getAll();
  112.       storeReq.onsuccess = ( e ) => {
  113.         if ( callback ) callback( e.target.result );
  114.       };
  115.     };
  116.    
  117.     req.onerror = ( e ) => {
  118.       if ( debug )
  119.         console.log('ERROR: Could not connect to database ['+ db_name +'].\n', e.srcElement.error );
  120.     };
  121.    
  122.   }
  123.  
  124.   delete( name, items, callback ) {
  125.     const db_name = this.db_name;
  126.     const req = this.indexedDB.open( db_name, this.db_version );
  127.    
  128.     req.onsuccess = () => {
  129.       let db = req.result;
  130.       let tx = db.transaction ( [ name ], "readwrite" );
  131.       let store = tx.objectStore( name );
  132.      
  133.       tx.onerror = ( e ) => {
  134.         if ( debug )
  135.           console.log( 'ERROR: Transaction [delete] on database [' + db_name + '] failed.\n', e.srcElement.error );
  136.       };
  137.      
  138.       tx.oncomplete = () => {
  139.         if ( debug )
  140.           console.log( 'SUCCESS: Transaction [delete] on database [' + db_name + '] store [' + name + '] completed successfully.' );
  141.       };
  142.      
  143.       items.forEach( item => {
  144.         let storeReq = store.delete( item );
  145.        
  146.         storeReq.onerror = ( e ) => {
  147.           if ( debug )
  148.             console.log('ERROR: Deleted key ['+ item +'] from store ['+ name +'] failed.\n', e.srcElement.error );
  149.          
  150.           if ( callback ) callback( e );
  151.         };
  152.        
  153.         storeReq.onsuccess = ( e ) => {
  154.           if ( debug )
  155.             console.log('SUCCESS: Deleted key ['+ item +'] from store ['+ name +'] successfully.');
  156.           if ( callback ) callback( e );
  157.         };
  158.       });
  159.     };
  160.    
  161.     req.onerror = ( e ) => {
  162.       if ( debug )
  163.         console.log('ERROR: Could not connect to database ['+ db_name +'].\n', e.srcElement.error );
  164.     };
  165.    
  166.   }
  167.    
  168.   update( name, items, callback ) {
  169.     const db_name = this.db_name;
  170.     let req = this.indexedDB.open( db_name, this.db_version );
  171.    
  172.     req.onsuccess = () => {
  173.       let db = req.result;
  174.       let tx = db.transaction ( [ name ], 'readwrite' );
  175.      
  176.       tx.oncomplete = () => {
  177.         if ( debug )
  178.           console.log( 'SUCCESS: Transaction [update] on database [' + db_name + '] store [' + name + '] completed successfully.' );
  179.       };
  180.      
  181.       tx.onerror = ( e ) => {
  182.         if ( debug )
  183.           console.log( 'ERROR: Transaction method update() has failed.\n', e.srcElement.error );
  184.       };
  185.       items.forEach( item => {
  186.         let storeReq = tx.objectStore( name ).put( item );
  187.         storeReq.onsuccess = ( e ) => {
  188.           if ( debug )
  189.             console.log( 'SUCCESS: Updated key ['+ item.id +'] in store [' + name + '] on database [' + db_name + '] successfully.' );
  190.             if ( callback ) callback( e );
  191.         };
  192.        
  193.         storeReq.onerror = ( e ) => {
  194.           if ( debug )
  195.             console.log( 'ERROR: Updating key ['+ item.id +'] in store [' + name + '] on database [' + db_name + '] failed.\n', e.srcElement.error );
  196.           if ( callback ) callback( e );  
  197.         };
  198.       });
  199.     };
  200.    
  201.     req.onerror = ( e ) => {
  202.       if ( debug )
  203.         console.log( 'ERROR: Could not connect to database [' + db_name + '].\n', e.srcElement.error );
  204.     };
  205.   }
  206.  
  207.   db_create( callback ) {
  208.     const db_name = this.db_name;
  209.     const self = this;
  210.     const req = this.indexedDB.open( db_name, this.db_version );
  211.    
  212.     req.onsuccess = () => {
  213.       let db = req.result;
  214.       if ( debug )
  215.         console.log('SUCCESS: Database ['+ db_name +'] opened successfully, [ version = ' + db.version + ' ]');
  216.       if ( callback ) callback( true );  
  217.     };
  218.    
  219.     req.onerror = () => {
  220.       let db = req.result;
  221.       if ( debug )
  222.         console.log('ERROR: Database ['+ db_name +'] could not be opened successfully, [ version = ' + db.version + ' ]');
  223.       if ( callback ) callback( true );  
  224.     };
  225.    
  226.     req.onupgradeneeded = ( e ) => {
  227.       let db = req.result;
  228.      
  229.       switch( e.oldVersion ) {
  230.         case 0:
  231.           self.stores.forEach( name => {
  232.             db.createObjectStore( name, { keyPath: 'id' } );
  233.           } );
  234.         case 1:
  235.           let oldVersion = e.oldVersion;
  236.           let newVersion = e.newVersion;
  237.           if ( debug ) log( db.objectStoreNames );
  238.       }
  239.     };
  240.   }
  241.  
  242.   db_delete( callback ) {
  243.     const db_name = this.db_name;
  244.     this.indexedDB.deleteDatabase( db_name, this.db_version );
  245.    
  246.     if ( debug )
  247.       console.log('SUCCESS: Database ['+ db_name +'] deleted successfully.');
  248.     if ( callback ) callback( true );  
  249.   }
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement