Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use strict";
- const log = console.log;
- import tablex from './api/tablex.js'
- class Table {
- constructor( db, store, debug=false) {
- this.db = db;
- this.dbName = db.db;
- this.store = store;
- this.debug = true;
- this.version = 1;
- this.indexedDB = window.indexedDB || window.mozIndexedDB ||
- window.webkitIndexedDB || window.msIndexedDB;
- this.init();
- }
- async init() {
- let p = new Promise( ( resolve, reject ) => {
- let req = this.indexedDB.open( this.dbName );
- req.onerror = e => { reject( e ); };
- req.onsuccess = ( e ) => {
- this.stores = req.result.objectStoreNames;
- this.version = req.result.version;
- req.result.close();
- resolve();
- };
- req.onupgradeneeded = ( e ) => { return true; };
- } );
- await p;
- }
- add( args ) {
- let store = this.store;
- let add_data = async () => {
- return new Promise(( resolve, reject ) => {
- let openReq = this.indexedDB.open( this.dbName );
- openReq.onerror = ( e ) => { reject( e.target.error ); };
- 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 [${ this.dbName }]` );
- reject( e.target.error );
- };
- addReq.onsuccess = () => {
- if ( this.debug )
- log( `[ INFO:add ], Added key [${ args.id }] in store [${
- addReq.source.name }] in database [${ this.dbName }]` );
- openReq.result.close();
- resolve( addReq.result );
- };
- };
- } );
- };
- let do_upgrade = ( store ) => {
- return new Promise(( resolve, reject ) => {
- let req = this.indexedDB.open( this.dbName, this.db.stores.length + 1 );
- req.onerror = e => { reject( e ); };
- req.onsuccess = ( e ) => {
- req.result.close();
- add_data();
- resolve();
- };
- req.onupgradeneeded = ( e ) => {
- req.result.createObjectStore( store, { keyPath: 'id' } );
- };
- } );
- };
- return new Promise(( resolve, reject ) => {
- let req = this.indexedDB.open( this.dbName );
- req.onerror = e => { reject( e ); };
- req.onsuccess = () => {
- let db = req.result;
- db.close();
- if ( ! this.db.stores.includes( store ) ) {
- this.version++;
- this.db.stores.push( store )
- do_upgrade( store );
- resolve();
- } else {
- add_data();
- resolve();
- }
- };
- } );
- }
- }
- export default class DMagic {
- constructor( name, debug=false) {
- this.db = name;
- this.debug = true;
- this.stores = [];
- this.indexedDB = window.indexedDB || window.mozIndexedDB ||
- window.webkitIndexedDB || window.msIndexedDB;
- this.init();
- }
- async init() {
- let p = new Promise( ( resolve, reject ) => {
- let req = this.indexedDB.open( this.db );
- req.onerror = e => { reject( e ); };
- req.onsuccess = ( e ) => {
- req.result.close();
- resolve();
- };
- req.onupgradeneeded = ( e ) => { return true; };
- } );
- await p;
- }
- table( name ) {
- return new Table( this, name );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement