ghcjs-base-stub 0.3.0.1 → 0.3.0.2
raw patch · 3 files changed
+40/−22 lines, 3 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ JavaScript.Web.Storage.Internal: Storage :: JSVal -> Storage
+ JavaScript.Web.Storage.Internal: StorageEvent :: JSVal -> StorageEvent
+ JavaScript.Web.Storage.Internal: newtype Storage
+ JavaScript.Web.Storage.Internal: newtype StorageEvent
Files
- ghcjs-base-stub.cabal +12/−1
- src/JavaScript/Web/Storage.hs +18/−21
- src/JavaScript/Web/Storage/Internal.hs +10/−0
ghcjs-base-stub.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: ghcjs-base-stub-version: 0.3.0.1+version: 0.3.0.2 synopsis: Allow GHCJS projects to compile under GHC and develop using intero. description: Allow GHCJS projects to compile under GHC and develop using intero. Please refer to README.md. homepage: https://github.com/louispan/javascript-stub#readme@@ -29,6 +29,16 @@ if impl(ghcjs) other-extensions: JavaScriptFFI+ js-sources: ghcjs-base/jsbits/array.js+ ghcjs-base/jsbits/animationFrame.js+ ghcjs-base/jsbits/export.js+ ghcjs-base/jsbits/jsstring.js+ ghcjs-base/jsbits/jsstringRaw.js+ ghcjs-base/jsbits/foreign.js+ ghcjs-base/jsbits/text.js+ ghcjs-base/jsbits/utils.js+ ghcjs-base/jsbits/xhr.js+ ghcjs-base/jsbits/websocket.js other-modules: GHCJS.Internal.Types Data.JSString.Internal.Type@@ -57,6 +67,7 @@ JavaScript.Object.Internal JavaScript.Web.Location JavaScript.Web.Storage+ JavaScript.Web.Storage.Internal if !impl(ghcjs) exposed-modules: GHCJS.Prim
src/JavaScript/Web/Storage.hs view
@@ -10,40 +10,37 @@ , clear ) where -import Data.Map.Strict (Map)-import qualified Data.Map.Strict as M-import Data.IORef (IORef, modifyIORef, newIORef, readIORef, writeIORef)-import Data.JSString-import System.IO.Unsafe (unsafePerformIO)--newtype Storage = Storage (IORef (Map JSString JSString))+import GHCJS.Types+import JavaScript.Web.Storage.Internal localStorage :: Storage-localStorage = Storage . unsafePerformIO $ newIORef mempty-{-# NOINLINE localStorage #-}+localStorage = Storage nullRef+{-# INLINE localStorage #-} sessionStorage :: Storage-sessionStorage = Storage . unsafePerformIO $ newIORef mempty-{-# NOINLINE sessionStorage #-}+sessionStorage = Storage nullRef+{-# INLINE sessionStorage #-} getLength :: Storage -> IO Int-getLength (Storage s) = M.size <$> readIORef s+getLength _ = pure 0+{-# INLINE getLength #-} getIndex :: Int -> Storage -> IO (Maybe JSString)-getIndex i (Storage s) = do- m <- readIORef s- if i >= 0 && i < M.size m- then pure $ Just $ fst $ M.elemAt i m- else pure Nothing+getIndex _ _ = pure Nothing+{-# INLINE getIndex #-} getItem :: JSString -> Storage -> IO (Maybe JSString)-getItem key (Storage s) = M.lookup key <$> readIORef s+getItem _ _ = pure Nothing+{-# INLINE getItem #-} setItem :: JSString -> JSString -> Storage -> IO ()-setItem key val (Storage s) = modifyIORef s $ M.insert key val+setItem _ _ _ = pure ()+{-# INLINE setItem #-} removeItem :: JSString -> Storage -> IO ()-removeItem key (Storage s) = modifyIORef s $ M.delete key+removeItem _ _ = pure ()+{-# INLINE removeItem #-} clear :: Storage -> IO ()-clear (Storage s) = writeIORef s mempty+clear _ = pure ()+{-# INLINE clear #-}
+ src/JavaScript/Web/Storage/Internal.hs view
@@ -0,0 +1,10 @@+{-# LANGUAGE DeriveDataTypeable #-}++module JavaScript.Web.Storage.Internal where++import GHCJS.Types++import Data.Typeable++newtype Storage = Storage JSVal deriving Typeable+newtype StorageEvent = StorageEvent JSVal deriving Typeable