Skip to content

Commit c07db24

Browse files
authored
Merge pull request #1358 from remotestorage/event-msg-falsy
Ensures message is sent w/ sync-done & error events
2 parents 9b8f59f + de5e4e0 commit c07db24

2 files changed

Lines changed: 26 additions & 4 deletions

File tree

src/dropbox.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,7 @@ function hookSync(rs, ...args): void {
11101110
return this.dropbox.fetchDelta(rs, ...args).
11111111
then(rs._dropboxOrigSync, function (err) {
11121112
rs._emit('error', new SyncError(err));
1113-
rs._emit('sync-done');
1113+
rs._emit('sync-done', { completed: false });
11141114
});
11151115
}.bind(rs);
11161116
}

src/indexeddb.ts

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)