Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DBMagic {
- constructor( db_name, db_version, stores ) {
- if ( typeof stores === 'string' ) stores = [ stores ];
- this.stores = stores;
- this.db_name = db_name;
- this.db_version = db_version;
- var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
- this.indexedDB = indexedDB;
- this.db_delete();
- this.db_create();
- this.tables = {};
- }
- store( name, mode ) {
- return new Promise( ( resolve, reject ) => {
- const req = this.indexedDB.open( this.db_name, this.db_version );
- req.onerror = ( e ) => { reject( e ); };
- req.onsuccess = () => { let db = req.result;
- if (! db.objectStoreNames.contains( name ) ) {
- reject( 'Store [' + name + '] Not Found.' );
- } else {
- let tx = db.transaction ( [ name ], mode );
- resolve( tx.objectStore( name ) );
- }
- };
- } );
- }
- add( name, items ) {
- if ( ! Array.isArray( items ) ) items = [ items ];
- return new Promise( ( resolve, reject ) => {
- this.store( name, 'readwrite' ).then( store => {
- items.forEach( item => {
- const req = store.add( item );
- req.onerror = () => {
- resolve( item.id );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- log( 'SUCCESS: Added key ['+ item.id +'] to store [' +
- name + '] on database [' + this.db_name + ']' );
- resolve( item.id );
- };
- } );
- } );
- } );
- }
- get( name, items ) {
- if ( typeof items === 'string' ) items = [ items ];
- return new Promise( ( resolve, reject ) => {
- this.store( name, 'readonly' ).then( store => {
- items.forEach( item => {
- const req = store.get( item );
- req.onerror = ( e ) => {
- if ( debug )
- log( 'ERROR: [get] Could not retrieve key from store [' + name +
- ' on database' + this.db_name + ']\n', e.srcElement.error );
- reject( e );
- };
- req.onsuccess = () => {
- if ( debug )
- log( 'SUCCESS: Retrieved key ['+ item +'] from store [' +
- name + '] on database ['+ this.db_name +']' );
- resolve( req.result );
- };
- } );
- } );
- } );
- }
- getAll( name ) {
- return new Promise( ( resolve, reject ) => {
- this.store( name, 'readonly' ).then( store => {
- const req = store.getAll();
- req.onerror = ( e ) => {
- if ( debug )
- log( 'ERROR: [getAll] Could not retrieve keys from store [' +
- name + ' on database' + this.db_name +']\n', e.srcElement.error );
- reject( e );
- };
- req.onsuccess = () => {
- if ( debug )
- log( 'SUCCESS: Retrieved all keys from store [' + name +
- '] on database ['+ this.db_name +']' );
- resolve( req.result );
- };
- } );
- } );
- }
- update( name, items ) {
- if ( ! Array.isArray( items ) ) items = [ items ];
- return new Promise( ( resolve, reject ) => {
- this.store( name, 'readwrite' ).then( store => {
- items.forEach( item => {
- const req = store.put( item );
- req.onerror = ( e ) => {
- if ( debug )
- log( 'ERROR: Updating key [' + item.id + '] in store [' +
- name + '] on database [' + this.db_name + ']\n',
- e.srcElement.error );
- reject( e );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- log( 'SUCCESS: Updated key ['+ item.id +'] in store [' +
- name + '] on database [' + this.db_name + ']' );
- resolve( e );
- };
- });
- } );
- } );
- }
- delete( name, items ) {
- if ( typeof items === 'string' ) items = [ items ];
- return new Promise( ( resolve, reject ) => {
- this.store( name, 'readwrite' ).then( store => {
- items.forEach( item => {
- const req = store.delete( item );
- req.onerror = ( e ) => {
- if ( debug )
- log( 'ERROR: Deleted key [' + item + '] from store [' +
- name + ']\n', e.srcElement.error );
- reject( e );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- log( 'SUCCESS: Deleted key [' + item + '] from store [' +
- name + '] on database [' + this.db_name + ']' );
- resolve( e );
- };
- } );
- } );
- } );
- }
- deleteAll( name ) {
- return new Promise( ( resolve, reject ) => {
- this.store( name, 'readwrite' ).then( store => {
- const req = store.clear();
- req.onerror = ( e ) => {
- if ( debug )
- log( 'ERROR: Could not delete keys from store [' + name +
- '] on database [' + this.db_name + ']\n', e.srcElement.error );
- reject( e );
- };
- req.onsuccess = ( e ) => {
- if ( debug )
- log( 'SUCCESS: Deleted all keys from store [' +
- name + '] on database [' + this.db_name + ']' );
- resolve( e );
- };
- });
- } );
- }
- db_create() {
- const req = this.indexedDB.open( this.db_name, this.db_version );
- return new Promise( (resolve, reject) => {
- req.onerror = () => {
- let db = req.result;
- if ( debug )
- log( 'ERROR: Database [' + this.db_name +
- '] could not be opened successfully, [ version = ' + db.version + ' ]' );
- reject( true );
- };
- req.onsuccess = () => {
- let db = req.result;
- if ( debug )
- log( 'SUCCESS: Database [' + this.db_name +
- '] opened successfully, [ version = ' + db.version + ' ]' );
- resolve( true );
- };
- req.onupgradeneeded = ( e ) => {
- let db = req.result;
- switch( e.oldVersion ) {
- case 0:
- this.stores.forEach( name => {
- db.createObjectStore( name, { keyPath: 'id' } );
- } );
- case 1:
- let oldVersion = e.oldVersion;
- let newVersion = e.newVersion;
- if ( debug ) log( db.objectStoreNames );
- }
- };
- } );
- }
- db_delete() {
- const db_name = this.db_name;
- this.indexedDB.deleteDatabase( db_name );
- return new Promise( (resolve, reject) => {
- if ( debug )
- log('SUCCESS: Database ['+ db_name +'] deleted successfully.');
- resolve( true );
- } );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement