Advertisement
Uno-Dan

DBMagic Cleaned.

Feb 25th, 2021
657
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict";
  2.  
  3. const log = console.log;
  4.  
  5. class Table {
  6.   constructor( db, store, debug=false) {
  7.     this.db = db;
  8.     this.dbName = db.db;
  9.     this.store = store;
  10.     this.debug = debug;
  11.    
  12.     this.indexedDB = window.indexedDB || window.mozIndexedDB ||
  13.     window.webkitIndexedDB || window.msIndexedDB;
  14.   }
  15.  
  16.   add( args ) {
  17.     let store = this.store;
  18.     let dbName = this.dbName;
  19.     let stores = this.db.stores;
  20.    
  21.     const add_data = async () => {
  22.       return new Promise(( resolve, reject ) => {
  23.          
  24.         let openReq = this.indexedDB.open( dbName );
  25.  
  26.         openReq.onerror = e => reject( e );
  27.  
  28.         openReq.onsuccess = () => {
  29.           let tx = openReq.result.transaction ( [ store ], 'readwrite' );
  30.           let addReq = tx.objectStore( store ).add( args );
  31.  
  32.           addReq.onerror = e => {
  33.             if ( this.debug )
  34.               log( `[ ERROR:add ], could not add key [${ args.id }] in store [${
  35.               addReq.source.name }] in database [${ dbName }]` );
  36.             reject( e );  
  37.           };
  38.  
  39.           addReq.onsuccess = () => {  
  40.             if ( this.debug )
  41.               log( `[ INFO:add ], Added key [${ args.id }] in store [${
  42.               addReq.source.name }] in database [${ dbName }]` );
  43.              
  44.             openReq.result.close();
  45.             resolve();  
  46.           };
  47.         };
  48.       } );
  49.     };
  50.    
  51.     const do_upgrade = () => {
  52.       stores.push( store );
  53.       return new Promise(( resolve, reject ) => {
  54.         let req = this.indexedDB.open( dbName, stores.length + 1 );
  55.        
  56.         req.onerror = e => reject( e );
  57.         req.onsuccess = () => { req.result.close(); add_data(); resolve(); };
  58.         req.onupgradeneeded = () => req.result
  59.         .createObjectStore( store, { keyPath: 'id' } );
  60.       } );
  61.     };
  62.      
  63.     return new Promise(( resolve, reject ) => {
  64.       let req = this.indexedDB.open( dbName );
  65.      
  66.       req.onerror = e => reject( e );
  67.       req.onsuccess = () => { req.result.close(); do_upgrade(); resolve(); };
  68.     } );
  69.   }
  70. }
  71.  
  72.  
  73. export default class DBMagic {
  74.   constructor( name, debug=false) {
  75.     this.db = name;
  76.     this.debug = debug;
  77.     this.stores = [];
  78.    
  79.     this.init();
  80.   }
  81.  
  82.   async init() {
  83.     let indexedDB = window.indexedDB || window.mozIndexedDB ||
  84.     window.webkitIndexedDB || window.msIndexedDB;
  85.    
  86.     return new Promise( ( resolve, reject ) => {
  87.       let req = indexedDB.open( this.db );
  88.      
  89.       req.onerror = e => reject( e );
  90.       req.onsuccess = () => { req.result.close(); resolve(); };
  91.       req.onupgradeneeded = () => { return true; };
  92.     } );
  93.   }
  94.  
  95.   table( name ) {
  96.     return new Table( this, name, this.debug );
  97.   }
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement