mirror of
https://github.com/ilyakooo0/purescript-indexed-DB.git
synced 2024-11-22 02:24:40 +03:00
add IDBKeyRange API bindings
This commit is contained in:
parent
464d609156
commit
ec1fd09edc
@ -8,6 +8,7 @@
|
||||
},
|
||||
"globals": {
|
||||
"indexedDB": true,
|
||||
"IDBKeyRange": true,
|
||||
"PS": true
|
||||
},
|
||||
"rules": {
|
||||
|
42
src/Database/IndexedDB/IDBKeyRange.js
Normal file
42
src/Database/IndexedDB/IDBKeyRange.js
Normal file
@ -0,0 +1,42 @@
|
||||
exports._bound = function _bound(lower, upper, lowerOpen, upperOpen) {
|
||||
try {
|
||||
return IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen);
|
||||
} catch (e) {
|
||||
// NOTE
|
||||
// An exception can only be thrown if lower >= upper. In such case,
|
||||
// We fallback to the lower bound only.
|
||||
return exports._only(lower);
|
||||
}
|
||||
};
|
||||
|
||||
exports._includes = function _includes(range, key) {
|
||||
return range.includes(key);
|
||||
};
|
||||
|
||||
exports._lower = function _lower(range) {
|
||||
return range.lower;
|
||||
};
|
||||
|
||||
exports._lowerBound = function _lowerBound(lower, open) {
|
||||
return IDBKeyRange.lowerBound(lower, open);
|
||||
};
|
||||
|
||||
exports._lowerOpen = function _lowerOpen(range) {
|
||||
return range.lowerOpen;
|
||||
};
|
||||
|
||||
exports._only = function _only(key) {
|
||||
return IDBKeyRange.only(key);
|
||||
};
|
||||
|
||||
exports._upper = function _upper(range) {
|
||||
return range.upper;
|
||||
};
|
||||
|
||||
exports._upperBound = function _upperBound(upper, open) {
|
||||
return IDBKeyRange.upperBound(upper, open);
|
||||
};
|
||||
|
||||
exports._upperOpen = function _upperOpen(range) {
|
||||
return range.upperOpen;
|
||||
};
|
109
src/Database/IndexedDB/IDBKeyRange.purs
Normal file
109
src/Database/IndexedDB/IDBKeyRange.purs
Normal file
@ -0,0 +1,109 @@
|
||||
module Database.IndexedDB.IDBKeyRange
|
||||
( class IDBKeyRange, includes
|
||||
, Range(..)
|
||||
, new
|
||||
, lower
|
||||
, upper
|
||||
, lowerOpen
|
||||
, upperOpen
|
||||
) where
|
||||
|
||||
import Prelude
|
||||
|
||||
import Data.Function.Uncurried as Fn
|
||||
import Data.Function.Uncurried (Fn2, Fn4)
|
||||
import Data.Foreign (Foreign)
|
||||
|
||||
import Database.IndexedDB.Core (KeyRange)
|
||||
import Database.IndexedDB.IDBKey.Internal (Key(..), extractForeign)
|
||||
|
||||
|
||||
--------------------
|
||||
-- INTERFACES
|
||||
--
|
||||
class IDBKeyRange range where
|
||||
includes :: range -> Key -> Boolean
|
||||
|
||||
|
||||
data Range key
|
||||
= Only key
|
||||
| LowerBound { lower :: key, lowerOpen :: Boolean }
|
||||
| UpperBound { upper :: key, upperOpen :: Boolean }
|
||||
| Bound { lower :: key, upper :: key, lowerOpen :: Boolean, upperOpen :: Boolean }
|
||||
|
||||
|
||||
new :: Range Key -> KeyRange
|
||||
new range =
|
||||
case range of
|
||||
Only key ->
|
||||
_only (extractForeign key)
|
||||
|
||||
LowerBound { lower: key, lowerOpen: open } ->
|
||||
Fn.runFn2 _lowerBound (extractForeign key) open
|
||||
|
||||
UpperBound { upper: key, upperOpen: open } ->
|
||||
Fn.runFn2 _upperBound (extractForeign key) open
|
||||
|
||||
Bound { lower: key1, upper: key2, lowerOpen: open1, upperOpen: open2 } ->
|
||||
Fn.runFn4 _bound (extractForeign key1) (extractForeign key2) open1 open2
|
||||
|
||||
|
||||
--------------------
|
||||
-- ATTRIBUTES
|
||||
--
|
||||
lower :: KeyRange -> Key
|
||||
lower =
|
||||
_lower >>> Key
|
||||
|
||||
|
||||
upper :: KeyRange -> Key
|
||||
upper =
|
||||
_upper >>> Key
|
||||
|
||||
|
||||
lowerOpen :: KeyRange -> Boolean
|
||||
lowerOpen =
|
||||
_lowerOpen
|
||||
|
||||
|
||||
upperOpen :: KeyRange -> Boolean
|
||||
upperOpen =
|
||||
_upperOpen
|
||||
|
||||
|
||||
--------------------
|
||||
-- INSTANCES
|
||||
--
|
||||
instance idbKeyRangeKeyRange :: IDBKeyRange KeyRange where
|
||||
includes range =
|
||||
extractForeign >>> Fn.runFn2 _includes range
|
||||
|
||||
|
||||
--------------------
|
||||
-- FFI
|
||||
--
|
||||
foreign import _bound :: Fn4 Foreign Foreign Boolean Boolean KeyRange
|
||||
|
||||
|
||||
foreign import _includes :: forall range. Fn2 range Foreign Boolean
|
||||
|
||||
|
||||
foreign import _lower :: KeyRange -> Foreign
|
||||
|
||||
|
||||
foreign import _lowerBound :: Fn2 Foreign Boolean KeyRange
|
||||
|
||||
|
||||
foreign import _lowerOpen :: KeyRange -> Boolean
|
||||
|
||||
|
||||
foreign import _only :: Foreign -> KeyRange
|
||||
|
||||
|
||||
foreign import _upper :: KeyRange -> Foreign
|
||||
|
||||
|
||||
foreign import _upperBound :: Fn2 Foreign Boolean KeyRange
|
||||
|
||||
|
||||
foreign import _upperOpen :: KeyRange -> Boolean
|
Loading…
Reference in New Issue
Block a user