Advertisement
Uno-Dan

DBMagic Project

Jan 29th, 2021
1,246
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 + ']' );
  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 + ']' );
  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 + ']\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 + ']\n', e.srcElement.error );
  68.       };
  69.      
  70.       tx.oncomplete = () => {
  71.         if ( debug )
  72.           console.log( 'SUCCESS: Transaction [get] on database [' + db_name + '] store [' + name + ']' );
  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 +']' );
  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 + ']' );
  111.       };
  112.      
  113.       let storeReq = store.getAll();
  114.       storeReq.onsuccess = ( e ) => {
  115.         if ( callback ) callback( e.target.result );
  116.        
  117.         if ( debug )
  118.           console.log( 'SUCCESS: Retrieved all keys from store [' + name + '] on database ['+ db_name +']' );
  119.       };
  120.     };
  121.    
  122.     req.onerror = ( e ) => {
  123.       if ( debug )
  124.         console.log('ERROR: Could not connect to database ['+ db_name +']\n', e.srcElement.error );
  125.     };
  126.   }
  127.  
  128.   delete( name, items, callback ) {
  129.     const db_name = this.db_name;
  130.     const req = this.indexedDB.open( db_name, this.db_version );
  131.    
  132.     req.onsuccess = () => {
  133.       let db = req.result;
  134.       let tx = db.transaction ( [ name ], "readwrite" );
  135.       let store = tx.objectStore( name );
  136.      
  137.       tx.onerror = ( e ) => {
  138.         if ( debug )
  139.           console.log( 'ERROR: Transaction [delete] on database [' + db_name + ']\n', e.srcElement.error );
  140.       };
  141.      
  142.       tx.oncomplete = () => {
  143.         if ( debug )
  144.           console.log( 'SUCCESS: Transaction [delete] on database [' + db_name + '] store [' + name + ']' );
  145.       };
  146.      
  147.       items.forEach( item => {
  148.         let storeReq = store.delete( item );
  149.        
  150.         storeReq.onerror = ( e ) => {
  151.           if ( debug )
  152.             console.log('ERROR: Deleted key ['+ item +'] from store ['+ name +']\n', e.srcElement.error );
  153.          
  154.           if ( callback ) callback( e );
  155.         };
  156.        
  157.         storeReq.onsuccess = ( e ) => {
  158.           if ( debug )
  159.             console.log('SUCCESS: Deleted key ['+ item +'] from store ['+ name +']');
  160.           if ( callback ) callback( e );
  161.         };
  162.       });
  163.     };
  164.    
  165.     req.onerror = ( e ) => {
  166.       if ( debug )
  167.         console.log('ERROR: Could not connect to database ['+ db_name +']\n', e.srcElement.error );
  168.     };
  169.    
  170.   }
  171.  
  172.   deleteAll( name, callback ) {
  173.     const db_name = this.db_name;
  174.     const req = this.indexedDB.open( db_name, this.db_version );
  175.    
  176.     req.onsuccess = () => {
  177.       let db = req.result;
  178.       let tx = db.transaction ( [ name ], 'readwrite' );
  179.       let store = tx.objectStore( name );
  180.      
  181.       tx.oncomplete = () => {
  182.         if ( debug )
  183.           console.log( 'SUCCESS: Transaction [deleteAll] on database [' + db_name + '] store [' + name + ']' );
  184.       };
  185.      
  186.       let storeReq = store.clear();
  187.        
  188.       storeReq.onerror = ( e ) => {
  189.         if ( debug )
  190.           console.log('ERROR: Could not delete keys from store ['+ name +'] on database ['+ db_name +']\n', e.srcElement.error );
  191.  
  192.         if ( callback ) callback( e );
  193.       };
  194.        
  195.       storeReq.onsuccess = ( e ) => {
  196.         if ( callback ) callback( e );
  197.        
  198.         if ( debug )
  199.           console.log('SUCCESS: Deleted all keys from store ['+ name +'] on database ['+ db_name +']' );
  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.   update( name, items, callback ) {
  210.     const db_name = this.db_name;
  211.     let req = this.indexedDB.open( db_name, this.db_version );
  212.    
  213.     req.onsuccess = () => {
  214.       let db = req.result;
  215.       let tx = db.transaction ( [ name ], 'readwrite' );
  216.      
  217.       tx.oncomplete = () => {
  218.         if ( debug )
  219.           console.log( 'SUCCESS: Transaction [update] on database [' + db_name + '] store [' + name + ']' );
  220.       };
  221.      
  222.       tx.onerror = ( e ) => {
  223.         if ( debug )
  224.           console.log( 'ERROR: Transaction method update() has failed.\n', e.srcElement.error );
  225.       };
  226.       items.forEach( item => {
  227.         let storeReq = tx.objectStore( name ).put( item );
  228.         storeReq.onsuccess = ( e ) => {
  229.           if ( debug )
  230.             console.log( 'SUCCESS: Updated key ['+ item.id +'] in store [' + name + '] on database [' + db_name + ']' );
  231.             if ( callback ) callback( e );
  232.         };
  233.        
  234.         storeReq.onerror = ( e ) => {
  235.           if ( debug )
  236.             console.log( 'ERROR: Updating key ['+ item.id +'] in store [' + name + '] on database [' + db_name + ']\n', e.srcElement.error );
  237.           if ( callback ) callback( e );  
  238.         };
  239.       });
  240.     };
  241.    
  242.     req.onerror = ( e ) => {
  243.       if ( debug )
  244.         console.log( 'ERROR: Could not connect to database [' + db_name + ']\n', e.srcElement.error );
  245.     };
  246.   }
  247.  
  248.   db_create( callback ) {
  249.     const db_name = this.db_name;
  250.     const self = this;
  251.     const req = this.indexedDB.open( db_name, this.db_version );
  252.    
  253.     req.onsuccess = () => {
  254.       let db = req.result;
  255.       if ( debug )
  256.         console.log('SUCCESS: Database ['+ db_name +'] opened successfully, [ version = ' + db.version + ' ]');
  257.       if ( callback ) callback( true );  
  258.     };
  259.    
  260.     req.onerror = () => {
  261.       let db = req.result;
  262.       if ( debug )
  263.         console.log('ERROR: Database ['+ db_name +'] could not be opened successfully, [ version = ' + db.version + ' ]');
  264.       if ( callback ) callback( true );  
  265.     };
  266.    
  267.     req.onupgradeneeded = ( e ) => {
  268.       let db = req.result;
  269.      
  270.       switch( e.oldVersion ) {
  271.         case 0:
  272.           self.stores.forEach( name => {
  273.             db.createObjectStore( name, { keyPath: 'id' } );
  274.           } );
  275.         case 1:
  276.           let oldVersion = e.oldVersion;
  277.           let newVersion = e.newVersion;
  278.           if ( debug ) log( db.objectStoreNames );
  279.       }
  280.     };
  281.   }
  282.  
  283.   db_delete( callback ) {
  284.     const db_name = this.db_name;
  285.     this.indexedDB.deleteDatabase( db_name, this.db_version );
  286.    
  287.     if ( debug )
  288.       console.log('SUCCESS: Database ['+ db_name +'] deleted successfully.');
  289.     if ( callback ) callback( true );  
  290.   }
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement