Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use strict";
- const log = console.log;
- class Table {
- constructor( db, store, debug=false) {
- this.db = db;
- this.dbName = db.db;
- this.store = store;
- this.debug = debug;
- this.indexedDB = window.indexedDB || window.mozIndexedDB ||
- window.webkitIndexedDB || window.msIndexedDB;
- }
- add( args ) {
- let store = this.store;
- let dbName = this.dbName;
- let stores = this.db.stores;
- const add_data = async () => {
- return new Promise(( resolve, reject ) => {
- let openReq = this.indexedDB.open( dbName );
- openReq.onerror = e => reject( e );
- openReq.onsuccess = () => {
- let tx = openReq.result.transaction ( [ store ], 'readwrite' );
- let addReq = tx.objectStore( store ).add( args );
- addReq.onerror = e => {
- if ( this.debug )
- log( `[ ERROR:add ], could not add key [${ args.id }] in store [${
- addReq.source.name }] in database [${ dbName }]` );
- reject( e );
- };
- addReq.onsuccess = () => {
- if ( this.debug )
- log( `[ INFO:add ], Added key [${ args.id }] in store [${
- addReq.source.name }] in database [${ dbName }]` );
- openReq.result.close();
- resolve();
- };
- };
- } );
- };
- const do_upgrade = () => {
- stores.push( store );
- return new Promise(( resolve, reject ) => {
- let req = this.indexedDB.open( dbName, stores.length + 1 );
- req.onerror = e => reject( e );
- req.onsuccess = () => { req.result.close(); add_data(); resolve(); };
- req.onupgradeneeded = () => req.result
- .createObjectStore( store, { keyPath: 'id' } );
- } );
- };
- return new Promise(( resolve, reject ) => {
- let req = this.indexedDB.open( dbName );
- req.onerror = e => reject( e );
- req.onsuccess = () => { req.result.close(); do_upgrade(); resolve(); };
- } );
- }
- }
- export default class DBMagic {
- constructor( name, debug=false) {
- this.db = name;
- this.debug = debug;
- this.stores = [];
- this.init();
- }
- async init() {
- let indexedDB = window.indexedDB || window.mozIndexedDB ||
- window.webkitIndexedDB || window.msIndexedDB;
- return new Promise( ( resolve, reject ) => {
- let req = indexedDB.open( this.db );
- req.onerror = e => reject( e );
- req.onsuccess = () => { req.result.close(); resolve(); };
- req.onupgradeneeded = () => { return true; };
- } );
- }
- table( name ) {
- return new Table( this, name, this.debug );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement