diff --git a/src/Database/IndexedDB/IDBCursor.js b/src/Database/IndexedDB/IDBCursor.js index 2bf688d..8a3641b 100644 --- a/src/Database/IndexedDB/IDBCursor.js +++ b/src/Database/IndexedDB/IDBCursor.js @@ -44,9 +44,13 @@ exports._continuePrimaryKey = function _continuePrimaryKey(cursor, key, primaryK exports._delete = function _delete(cursor) { return function aff(success, error) { - const request = cursor.delete(); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = cursor.delete(); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; @@ -71,9 +75,13 @@ exports._source = function _source(IDBObjectStore, IDBIndex, cursor) { exports._update = function _update(cursor, value) { return function aff(success, error) { - const request = cursor.update(value); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = cursor.update(value); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; diff --git a/src/Database/IndexedDB/IDBDatabase.js b/src/Database/IndexedDB/IDBDatabase.js index 855112d..435fb5d 100644 --- a/src/Database/IndexedDB/IDBDatabase.js +++ b/src/Database/IndexedDB/IDBDatabase.js @@ -99,10 +99,10 @@ exports._onVersionChange = function _onVersionChange(db, f) { }; }; -exports._transaction = function _transaction(show, db, stores, mode) { +exports._transaction = function _transaction(db, stores, mode) { return function aff(success, error) { try { - const transaction = db.transaction(stores, show(mode)); + const transaction = db.transaction(stores, mode); success(transaction); } catch (e) { error(new Error(e.name)); diff --git a/src/Database/IndexedDB/IDBDatabase.purs b/src/Database/IndexedDB/IDBDatabase.purs index 923b819..0ef07d0 100644 --- a/src/Database/IndexedDB/IDBDatabase.purs +++ b/src/Database/IndexedDB/IDBDatabase.purs @@ -29,7 +29,7 @@ class IDBDatabase db where close :: forall e. db -> Aff (idb :: IDB | e) Unit createObjectStore :: forall e. db -> StoreName -> IDBObjectStoreParameters -> Aff (idb :: IDB | e) ObjectStore deleteObjectStore :: forall e. db -> StoreName -> Aff (idb :: IDB | e) ObjectStore - transaction :: forall e. db -> KeyPath -> TransactionMode -> Aff (idb :: IDB | e) Transaction + transaction :: forall e. db -> Array StoreName -> TransactionMode -> Aff (idb :: IDB | e) Transaction type StoreName = String @@ -91,7 +91,7 @@ instance idbDatabaseDatabase :: IDBDatabase Database where Fn.runFn2 _deleteObjectStore db name' transaction db stores mode' = - Fn.runFn4 _transaction show db stores mode' + Fn.runFn3 _transaction db stores (show mode') -------------------- @@ -124,7 +124,7 @@ foreign import _onError :: forall db e e'. Fn2 db (Error -> Eff ( | e') Unit) (A foreign import _onVersionChange :: forall db e e'. Fn2 db ({ oldVersion :: Int, newVersion :: Int } -> Eff ( | e') Unit) (Aff (idb :: IDB | e) Unit) -foreign import _transaction :: forall db e. Fn4 (db -> String) db (Array String) TransactionMode (Aff (idb :: IDB | e) Transaction) +foreign import _transaction :: forall db e. Fn3 db (Array String) String (Aff (idb :: IDB | e) Transaction) foreign import _version :: Database -> Int diff --git a/src/Database/IndexedDB/IDBFactory.js b/src/Database/IndexedDB/IDBFactory.js index fca6775..062a2e5 100644 --- a/src/Database/IndexedDB/IDBFactory.js +++ b/src/Database/IndexedDB/IDBFactory.js @@ -17,13 +17,17 @@ const noOp2 = function noOp2() { exports._deleteDatabase = function _deleteDatabase(name) { return function aff(success, error) { - const request = indexedDB.deleteDatabase(name); + try { + const request = indexedDB.deleteDatabase(name); - request.onsuccess = function onSuccess(e) { - success(e.oldVersion); - }; + request.onsuccess = function onSuccess(e) { + success(e.oldVersion); + }; - request.onerror = errorHandler(error); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; @@ -31,19 +35,23 @@ exports._open = function _open(fromMaybe, name, mver, req) { const ver = fromMaybe(undefined)(mver); return function aff(success, error) { - const request = indexedDB.open(name, ver); - request.onsuccess = function onSuccess(e) { - success(e.target.result); - }; + try { + const request = indexedDB.open(name, ver); + request.onsuccess = function onSuccess(e) { + success(e.target.result); + }; - request.onblocked = function onBlocked() { - fromMaybe(noOp)(req.onBlocked)(); - }; + request.onblocked = function onBlocked() { + fromMaybe(noOp)(req.onBlocked)(); + }; - request.onupgradeneeded = function onUpgradeNeeded(e) { - fromMaybe(noOp2)(req.onUpgradeNeeded)(e.target.result)(e.target.transaction)(); - }; + request.onupgradeneeded = function onUpgradeNeeded(e) { + fromMaybe(noOp2)(req.onUpgradeNeeded)(e.target.result)(e.target.transaction)(); + }; - request.onerror = errorHandler(error); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; diff --git a/src/Database/IndexedDB/IDBIndex/Internal.js b/src/Database/IndexedDB/IDBIndex/Internal.js index 430568a..823ed85 100644 --- a/src/Database/IndexedDB/IDBIndex/Internal.js +++ b/src/Database/IndexedDB/IDBIndex/Internal.js @@ -55,9 +55,13 @@ exports._count = function _count(index, query) { exports._get = function _get(index, range) { return function aff(success, error) { - const request = index.get(range); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = index.get(range); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; @@ -78,32 +82,48 @@ exports._getAll = function _getAll(index, query, count) { exports._getAllKeys = function _getAllKeys(index, range, count) { return function aff(success, error) { - const request = index.getAllKeys(range, count || undefined); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = index.getAllKeys(range, count || undefined); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; exports._getKey = function _getKey(index, range) { return function aff(success, error) { - const request = index.getKey(range); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = index.getKey(range); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; exports._openCursor = function _openCursor(index, query, dir) { return function aff(success, error) { - const request = index.openCursor(query, dir); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = index.openCursor(query, dir); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; exports._openKeyCursor = function _openKeyCursor(index, query, dir) { return function aff(success, error) { - const request = index.openKeyCursor(query, dir); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = index.openKeyCursor(query, dir); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; diff --git a/src/Database/IndexedDB/IDBObjectStore.js b/src/Database/IndexedDB/IDBObjectStore.js index c49969e..f95acd1 100644 --- a/src/Database/IndexedDB/IDBObjectStore.js +++ b/src/Database/IndexedDB/IDBObjectStore.js @@ -17,9 +17,13 @@ const toArray = function toArray(xs) { exports._add = function _add(store, value, key) { return function aff(success, error) { - const request = store.add(value, key || undefined); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = store.add(value, key || undefined); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; @@ -29,9 +33,13 @@ exports._autoIncrement = function _autoIncrement(store) { exports._clear = function _clear(store) { return function aff(success, error) { - const request = store.clear(); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = store.clear(); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; @@ -74,9 +82,13 @@ exports._deleteIndex = function _deleteIndex(store, name) { exports._delete = function _delete(store, query) { return function aff(success, error) { - const request = store.delete(query); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = store.delete(query); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; }; @@ -115,9 +127,13 @@ exports._name = function _name(store) { exports._put = function _put(store, value, key) { return function aff(success, error) { - const request = store.put(value, key || undefined); - request.onsuccess = successHandler(success); - request.onerror = errorHandler(error); + try { + const request = store.put(value, key || undefined); + request.onsuccess = successHandler(success); + request.onerror = errorHandler(error); + } catch (e) { + error(new Error(e.name)); + } }; };