Advertisement
Uno-Dan

DBMagic

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