@@ -393,14 +393,18 @@ class IndexedDB extends CachingLayer {
393393 static _rs_init ( remoteStorage : RemoteStorage ) : Promise < void > {
394394 return new Promise ( ( resolve , reject ) => {
395395
396- IndexedDB . open ( DEFAULT_DB_NAME , function ( err , db ) {
396+ IndexedDB . open ( DEFAULT_DB_NAME , function ( err , db ?: IDBDatabase ) {
397397 if ( err ) {
398398 reject ( err ) ;
399399 } else {
400+ if ( ! db ) {
401+ reject ( new Error ( 'IndexedDB opened without a database instance' ) ) ;
402+ return ;
403+ }
400404 DEFAULT_DB = db ;
401405 // TODO Use specific type
402- ( db as any ) . onerror = ( ) => {
403- remoteStorage . _emit ( 'error' , err ) ;
406+ ( db as any ) . onerror = evt => {
407+ remoteStorage . _emit ( 'error' , IndexedDB . eventToError ( evt ) ) ;
404408 } ;
405409 resolve ( ) ;
406410 }
@@ -474,6 +478,24 @@ class IndexedDB extends CachingLayer {
474478 } ) ;
475479 }
476480
481+ static eventToError ( evt : Event ) : Error {
482+ const transaction = ( evt ?. target as IDBTransaction ) ;
483+ const error = transaction ?. error ;
484+ if ( error ) {
485+ return error ;
486+ } else {
487+ if ( transaction ?. db ?. name ) {
488+ const storeNamesList = transaction . objectStoreNames ;
489+ const storeNames = storeNamesList
490+ ? Array . from ( storeNamesList as unknown as ArrayLike < string > ) . join ( ', ' )
491+ : '' ;
492+ return new Error ( `Error in store(s) “${ storeNames } ” in database “${ transaction . db . name } ”` ) ;
493+ } else {
494+ return new Error ( 'Unknown IndexedDB error' ) ;
495+ }
496+ }
497+ }
498+
477499 diffHandler ( ) {
478500 // empty
479501 }
0 commit comments