@@ -1,7 +1,9 @@
11module Database.IndexedDB.IDBKeyRange
22 ( class IDBKeyRange, includes
3− , Range(..)
4− , new
3+ , only
4+ , lowerBound
5+ , upperBound
6+ , bound
57 , lower
68 , upper
79 , lowerOpen
@@ -10,11 +12,13 @@ module Database.IndexedDB.IDBKeyRange
1012
1113import Prelude
1214
13−import Data.Function.Uncurried as Fn
14−import Data.Function.Uncurried (Fn2, Fn4)
15−import Data.Foreign (Foreign)
15+import Data.Foreign (Foreign)
16+import Data.Function.Uncurried as Fn
17+import Data.Function.Uncurried (Fn2, Fn4)
18+import Data.Maybe (Maybe)
19+import Data.Nullable (Nullable, toMaybe)
1620
17−import Database.IndexedDB.Core (KeyRange)
21+import Database.IndexedDB.Core (KeyRange)
1822import Database.IndexedDB.IDBKey.Internal (class IDBKey, Key(..), toKey, extractForeign)
1923
2024
@@ -25,40 +29,37 @@ class IDBKeyRange range where
2529 includes :: range -> Key -> Boolean
2630
2731
28−data Range key
29− = Only key
30− | LowerBound { lower :: key, lowerOpen :: Boolean }
31− | UpperBound { upper :: key, upperOpen :: Boolean }
32− | Bound { lower :: key, upper :: key, lowerOpen :: Boolean, upperOpen :: Boolean }
32+only :: forall a. (IDBKey a) => a -> KeyRange
33+only key =
34+ _only (extractForeign $ toKey key)
3335
3436
35−new :: forall a. IDBKey a => Range a -> KeyRange
36−new range =
37− case range of
38− Only key ->
39− _only (extractForeign $ toKey key)
37+lowerBound :: forall a. (IDBKey a) => a -> Boolean -> KeyRange
38+lowerBound key open =
39+ Fn.runFn2 _lowerBound (extractForeign $ toKey key) open
4040
41− LowerBound { lower: key, lowerOpen: open } ->
42− Fn.runFn2 _lowerBound (extractForeign $ toKey key) open
4341
44− UpperBound { upper: key, upperOpen: open } ->
45− Fn.runFn2 _upperBound (extractForeign $ toKey key) open
42+upperBound :: forall a. (IDBKey a) => a -> Boolean -> KeyRange
43+upperBound key open =
44+ Fn.runFn2 _upperBound (extractForeign $ toKey key) open
4645
47− Bound { lower: key1, upper: key2, lowerOpen: open1, upperOpen: open2 } ->
48− Fn.runFn4 _bound (extractForeign $ toKey key1) (extractForeign $ toKey key2) open1 open2
46+bound :: forall a. (IDBKey a) => { lower :: a, upper :: a, lowerOpen :: Boolean, upperOpen :: Boolean } -> Maybe KeyRange
47+bound { lower: key1, upper: key2, lowerOpen: open1, upperOpen: open2 } =
48+ toMaybe
49+ $ Fn.runFn4 _bound (extractForeign $ toKey key1) (extractForeign $ toKey key2) open1 open2
4950
5051
5152--------------------
5253-- ATTRIBUTES
5354--
54−lower :: KeyRange -> Key
55+lower :: KeyRange -> Maybe Key
5556lower =
56− _lower >>> Key
57+ _lower >>> toMaybe >>> map Key
5758
5859
59−upper :: KeyRange -> Key
60+upper :: KeyRange -> Maybe Key
6061upper =
61− _upper >>> Key
62+ _upper >>> toMaybe >>> map Key
6263
6364
6465lowerOpen :: KeyRange -> Boolean
@@ -82,13 +83,13 @@ instance idbKeyRangeKeyRange :: IDBKeyRange KeyRange where
8283--------------------
8384-- FFI
8485--
85−foreign import _bound :: Fn4 Foreign Foreign Boolean Boolean KeyRange
86+foreign import _bound :: Fn4 Foreign Foreign Boolean Boolean (Nullable KeyRange)
8687
8788
8889foreign import _includes :: forall range. Fn2 range Foreign Boolean
8990
9091
91−foreign import _lower :: KeyRange -> Foreign
92+foreign import _lower :: KeyRange -> Nullable Foreign
9293
9394
9495foreign import _lowerBound :: Fn2 Foreign Boolean KeyRange
@@ -100,7 +101,7 @@ foreign import _lowerOpen :: KeyRange -> Boolean
100101foreign import _only :: Foreign -> KeyRange
101102
102103
103−foreign import _upper :: KeyRange -> Foreign
104+foreign import _upper :: KeyRange -> Nullable Foreign
104105
105106
106107foreign import _upperBound :: Fn2 Foreign Boolean KeyRange