From 86afd03dbe18babf6e44e2f0eabb214de31b7526 Mon Sep 17 00:00:00 2001 From: KtorZ Date: Thu, 22 Jun 2017 17:02:29 +0200 Subject: [PATCH] move open and deleteDatabase in IDBFactory module --- src/Database/IndexedDB/IDBDatabase.js | 30 ---------------------- src/Database/IndexedDB/IDBDatabase.purs | 15 ----------- src/Database/IndexedDB/IDBFactory.js | 34 +++++++++++++++++++++++++ src/Database/IndexedDB/IDBFactory.purs | 27 ++++++++++++++++++++ 4 files changed, 61 insertions(+), 45 deletions(-) create mode 100644 src/Database/IndexedDB/IDBFactory.js create mode 100644 src/Database/IndexedDB/IDBFactory.purs diff --git a/src/Database/IndexedDB/IDBDatabase.js b/src/Database/IndexedDB/IDBDatabase.js index 0cc9fb0..d0f850f 100644 --- a/src/Database/IndexedDB/IDBDatabase.js +++ b/src/Database/IndexedDB/IDBDatabase.js @@ -3,9 +3,6 @@ const Core = require('Database.IndexedDB.Core'); const $Core = require('Database.IndexedDB.Core/foreign'); const toArray = $Core.toArray; -const noOp2 = $Core.noOp2; -const errorHandler = $Core.errorHandler; -const eventHandler = $Core.eventHandler; exports.close = function close(db) { @@ -44,18 +41,6 @@ exports._deleteObjectStore = function _deleteObjectStore(db, name) { }; }; -exports.deleteDatabase = function deleteDatabase(name) { - return function aff(success, error) { - const request = indexedDB.deleteDatabase(name); - - request.onsuccess = function onSuccess(e) { - success(e.oldVersion); - }; - - request.onerror = errorHandler(error); - }; -}; - exports.name = function name(db) { return db.name; }; @@ -64,21 +49,6 @@ exports.objectStoreNames = function objectStoreNames(db) { return toArray(db.objectStoreNames); }; -exports._open = function _open(name, mver, req) { - const ver = Maybe.fromMaybe(undefined)(mver); - - return function aff(success, error) { - const request = indexedDB.open(name, ver); - request.onsuccess = function onSuccess(e) { - success(e.target.result); - }; - - request.onerror = errorHandler(error); - request.onblocked = eventHandler(Maybe.fromMaybe(noOp2)(req.onBlocked)); - request.onupgradeneeded = eventHandler(Maybe.fromMaybe(noOp2)(req.onUpgradeNeeded)); - }; -}; - exports._transaction = function _transaction(db, stores, mode) { return function eff() { var mode_; diff --git a/src/Database/IndexedDB/IDBDatabase.purs b/src/Database/IndexedDB/IDBDatabase.purs index 941fd16..fc48539 100644 --- a/src/Database/IndexedDB/IDBDatabase.purs +++ b/src/Database/IndexedDB/IDBDatabase.purs @@ -13,12 +13,6 @@ import Data.Maybe(Maybe) import Database.IndexedDB.Core -type IDBOpenRequest eff = - { onBlocked :: Maybe (IDBDatabase -> Eff (idb :: INDEXED_DB | eff) Unit) - , onUpgradeNeeded :: Maybe (IDBDatabase -> Eff (idb :: INDEXED_DB | eff) Unit) - } - - foreign import close :: forall eff. IDBDatabase -> Eff (idb :: INDEXED_DB, exception :: EXCEPTION | eff) Unit @@ -34,21 +28,12 @@ deleteObjectStore db name = Fn.runFn2 _deleteObjectStore db name -foreign import deleteDatabase :: forall eff. String -> Aff (idb :: INDEXED_DB | eff) Int - - foreign import name :: IDBDatabase -> String foreign import objectStoreNames :: IDBDatabase -> Array String -foreign import _open :: forall eff. Fn3 String (Maybe Int) (IDBOpenRequest eff) (Aff (idb :: INDEXED_DB | eff) IDBDatabase) -open :: forall eff . String -> Maybe Int -> IDBOpenRequest eff -> Aff (idb :: INDEXED_DB | eff) IDBDatabase -open name mver req = - Fn.runFn3 _open name mver req - - foreign import _transaction :: forall eff. Fn3 IDBDatabase (Array String) IDBTransactionMode (Eff (idb :: INDEXED_DB, exception :: EXCEPTION | eff) IDBTransaction) transaction :: forall eff. IDBDatabase -> Array String -> IDBTransactionMode -> Eff (idb :: INDEXED_DB, exception :: EXCEPTION | eff) IDBTransaction transaction db stores mode = diff --git a/src/Database/IndexedDB/IDBFactory.js b/src/Database/IndexedDB/IDBFactory.js new file mode 100644 index 0000000..b740e0c --- /dev/null +++ b/src/Database/IndexedDB/IDBFactory.js @@ -0,0 +1,34 @@ +const Maybe = require('Data.Maybe'); +const $Core = require('Database.IndexedDB.Core/foreign'); + +const noOp2 = $Core.noOp2; +const errorHandler = $Core.errorHandler; +const eventHandler = $Core.eventHandler; + + +exports.deleteDatabase = function deleteDatabase(name) { + return function aff(success, error) { + const request = indexedDB.deleteDatabase(name); + + request.onsuccess = function onSuccess(e) { + success(e.oldVersion); + }; + + request.onerror = errorHandler(error); + }; +}; + +exports._open = function _open(name, mver, req) { + const ver = Maybe.fromMaybe(undefined)(mver); + + return function aff(success, error) { + const request = indexedDB.open(name, ver); + request.onsuccess = function onSuccess(e) { + success(e.target.result); + }; + + request.onerror = errorHandler(error); + request.onblocked = eventHandler(Maybe.fromMaybe(noOp2)(req.onBlocked)); + request.onupgradeneeded = eventHandler(Maybe.fromMaybe(noOp2)(req.onUpgradeNeeded)); + }; +}; diff --git a/src/Database/IndexedDB/IDBFactory.purs b/src/Database/IndexedDB/IDBFactory.purs new file mode 100644 index 0000000..e0f38cb --- /dev/null +++ b/src/Database/IndexedDB/IDBFactory.purs @@ -0,0 +1,27 @@ +module Database.IndexedDB.IDBFactory where + +import Prelude + +import Control.Monad.Aff(Aff) +import Control.Monad.Eff(kind Effect, Eff) +import Control.Monad.Eff.Exception(EXCEPTION) +import Data.Function.Uncurried as Fn +import Data.Function.Uncurried(Fn3) +import Data.Maybe(Maybe) + +import Database.IndexedDB.Core + + +type IDBOpenRequest eff = + { onBlocked :: Maybe (IDBDatabase -> Eff (idb :: INDEXED_DB | eff) Unit) + , onUpgradeNeeded :: Maybe (IDBDatabase -> Eff (idb :: INDEXED_DB | eff) Unit) + } + + +foreign import deleteDatabase :: forall eff. String -> Aff (idb :: INDEXED_DB | eff) Int + + +foreign import _open :: forall eff. Fn3 String (Maybe Int) (IDBOpenRequest eff) (Aff (idb :: INDEXED_DB | eff) IDBDatabase) +open :: forall eff . String -> Maybe Int -> IDBOpenRequest eff -> Aff (idb :: INDEXED_DB | eff) IDBDatabase +open name mver req = + Fn.runFn3 _open name mver req