{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
#ifdef USE_TEMPLATE_HASKELL
{-# LANGUAGE TemplateHaskell #-}
#endif
{-# LANGUAGE TypeOperators #-}
module Reflex.Dom.Xhr
(
getAndDecode
, getMay
, postJson
, decodeXhrResponse
, decodeText
, XhrRequest (..)
, XhrRequestConfig (..)
, xhrRequest
, xhrRequestConfig_headers
, xhrRequestConfig_password
, xhrRequestConfig_responseType
, xhrRequestConfig_sendData
, xhrRequestConfig_user
, xhrRequestConfig_withCredentials
, xhrRequestConfig_responseHeaders
, xhrRequest_config
, xhrRequest_method
, xhrRequest_url
, performMkRequestAsync
, performMkRequestsAsync
, performRequestAsync
, performRequestAsyncWithError
, performRequestsAsync
, performRequestsAsyncWithError
, XhrResponse (..)
, XhrResponseBody (..)
, XhrResponseHeaders (..)
, XhrResponseType (..)
, xhrResponse_response
, xhrResponse_responseText
, xhrResponse_status
, xhrResponse_statusText
, xhrResponse_headers
, xhrResponse_body
, _xhrResponse_body
, XhrException (..)
, IsXhrPayload (..)
, XMLHttpRequest
, newXMLHttpRequest
, newXMLHttpRequestWithError
, xmlHttpRequestGetReadyState
, xmlHttpRequestGetResponseText
, xmlHttpRequestGetStatus
, xmlHttpRequestGetStatusText
, xmlHttpRequestNew
, xmlHttpRequestOnreadystatechange
, xmlHttpRequestOpen
, xmlHttpRequestSetRequestHeader
, xmlHttpRequestSetResponseType
)
where
import Reflex.Class
import Reflex.Dom.Class
import Reflex.PerformEvent.Class
import Reflex.TriggerEvent.Class
import Reflex.Dom.Xhr.Exception
import Reflex.Dom.Xhr.Foreign
import Reflex.Dom.Xhr.ResponseType
import Control.Concurrent
import Control.Exception (handle)
import Control.Lens
import Control.Monad hiding (forM)
import Control.Monad.IO.Class
import Data.Aeson
#if MIN_VERSION_aeson(1,0,0)
import Data.Aeson.Text
#else
import Data.Aeson.Encode
#endif
import qualified Data.ByteString.Lazy as BL
import Data.CaseInsensitive (CI)
import qualified Data.CaseInsensitive as CI
import Data.Default
import qualified Data.List as L
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Maybe
import qualified Data.Set as Set
import Data.Text (Text)
import qualified Data.Text as T
import Data.Text.Encoding
import qualified Data.Text.Lazy as LT
import qualified Data.Text.Lazy.Builder as B
import Data.Traversable
import Language.Javascript.JSaddle.Monad (JSM, askJSM, runJSM, MonadJSM, liftJSM)
data XhrRequest a
= XhrRequest { forall a. XhrRequest a -> Text
_xhrRequest_method :: Text
, forall a. XhrRequest a -> Text
_xhrRequest_url :: Text
, forall a. XhrRequest a -> XhrRequestConfig a
_xhrRequest_config :: XhrRequestConfig a
}
deriving (Int -> XhrRequest a -> ShowS
[XhrRequest a] -> ShowS
XhrRequest a -> String
(Int -> XhrRequest a -> ShowS)
-> (XhrRequest a -> String)
-> ([XhrRequest a] -> ShowS)
-> Show (XhrRequest a)
forall a. Show a => Int -> XhrRequest a -> ShowS
forall a. Show a => [XhrRequest a] -> ShowS
forall a. Show a => XhrRequest a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> XhrRequest a -> ShowS
showsPrec :: Int -> XhrRequest a -> ShowS
$cshow :: forall a. Show a => XhrRequest a -> String
show :: XhrRequest a -> String
$cshowList :: forall a. Show a => [XhrRequest a] -> ShowS
showList :: [XhrRequest a] -> ShowS
Show, ReadPrec [XhrRequest a]
ReadPrec (XhrRequest a)
Int -> ReadS (XhrRequest a)
ReadS [XhrRequest a]
(Int -> ReadS (XhrRequest a))
-> ReadS [XhrRequest a]
-> ReadPrec (XhrRequest a)
-> ReadPrec [XhrRequest a]
-> Read (XhrRequest a)
forall a. Read a => ReadPrec [XhrRequest a]
forall a. Read a => ReadPrec (XhrRequest a)
forall a. Read a => Int -> ReadS (XhrRequest a)
forall a. Read a => ReadS [XhrRequest a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: forall a. Read a => Int -> ReadS (XhrRequest a)
readsPrec :: Int -> ReadS (XhrRequest a)
$creadList :: forall a. Read a => ReadS [XhrRequest a]
readList :: ReadS [XhrRequest a]
$creadPrec :: forall a. Read a => ReadPrec (XhrRequest a)
readPrec :: ReadPrec (XhrRequest a)
$creadListPrec :: forall a. Read a => ReadPrec [XhrRequest a]
readListPrec :: ReadPrec [XhrRequest a]
Read, XhrRequest a -> XhrRequest a -> Bool
(XhrRequest a -> XhrRequest a -> Bool)
-> (XhrRequest a -> XhrRequest a -> Bool) -> Eq (XhrRequest a)
forall a. Eq a => XhrRequest a -> XhrRequest a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => XhrRequest a -> XhrRequest a -> Bool
== :: XhrRequest a -> XhrRequest a -> Bool
$c/= :: forall a. Eq a => XhrRequest a -> XhrRequest a -> Bool
/= :: XhrRequest a -> XhrRequest a -> Bool
Eq, Eq (XhrRequest a)
Eq (XhrRequest a) =>
(XhrRequest a -> XhrRequest a -> Ordering)
-> (XhrRequest a -> XhrRequest a -> Bool)
-> (XhrRequest a -> XhrRequest a -> Bool)
-> (XhrRequest a -> XhrRequest a -> Bool)
-> (XhrRequest a -> XhrRequest a -> Bool)
-> (XhrRequest a -> XhrRequest a -> XhrRequest a)
-> (XhrRequest a -> XhrRequest a -> XhrRequest a)
-> Ord (XhrRequest a)
XhrRequest a -> XhrRequest a -> Bool
XhrRequest a -> XhrRequest a -> Ordering
XhrRequest a -> XhrRequest a -> XhrRequest a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (XhrRequest a)
forall a. Ord a => XhrRequest a -> XhrRequest a -> Bool
forall a. Ord a => XhrRequest a -> XhrRequest a -> Ordering
forall a. Ord a => XhrRequest a -> XhrRequest a -> XhrRequest a
$ccompare :: forall a. Ord a => XhrRequest a -> XhrRequest a -> Ordering
compare :: XhrRequest a -> XhrRequest a -> Ordering
$c< :: forall a. Ord a => XhrRequest a -> XhrRequest a -> Bool
< :: XhrRequest a -> XhrRequest a -> Bool
$c<= :: forall a. Ord a => XhrRequest a -> XhrRequest a -> Bool
<= :: XhrRequest a -> XhrRequest a -> Bool
$c> :: forall a. Ord a => XhrRequest a -> XhrRequest a -> Bool
> :: XhrRequest a -> XhrRequest a -> Bool
$c>= :: forall a. Ord a => XhrRequest a -> XhrRequest a -> Bool
>= :: XhrRequest a -> XhrRequest a -> Bool
$cmax :: forall a. Ord a => XhrRequest a -> XhrRequest a -> XhrRequest a
max :: XhrRequest a -> XhrRequest a -> XhrRequest a
$cmin :: forall a. Ord a => XhrRequest a -> XhrRequest a -> XhrRequest a
min :: XhrRequest a -> XhrRequest a -> XhrRequest a
Ord, (forall a b. (a -> b) -> XhrRequest a -> XhrRequest b)
-> (forall a b. a -> XhrRequest b -> XhrRequest a)
-> Functor XhrRequest
forall a b. a -> XhrRequest b -> XhrRequest a
forall a b. (a -> b) -> XhrRequest a -> XhrRequest b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> XhrRequest a -> XhrRequest b
fmap :: forall a b. (a -> b) -> XhrRequest a -> XhrRequest b
$c<$ :: forall a b. a -> XhrRequest b -> XhrRequest a
<$ :: forall a b. a -> XhrRequest b -> XhrRequest a
Functor)
data XhrRequestConfig a
= XhrRequestConfig { :: Map Text Text
, forall a. XhrRequestConfig a -> Maybe Text
_xhrRequestConfig_user :: Maybe Text
, forall a. XhrRequestConfig a -> Maybe Text
_xhrRequestConfig_password :: Maybe Text
, forall a. XhrRequestConfig a -> Maybe XhrResponseType
_xhrRequestConfig_responseType :: Maybe XhrResponseType
, forall a. XhrRequestConfig a -> a
_xhrRequestConfig_sendData :: a
, forall a. XhrRequestConfig a -> Bool
_xhrRequestConfig_withCredentials :: Bool
, :: XhrResponseHeaders
}
deriving (Int -> XhrRequestConfig a -> ShowS
[XhrRequestConfig a] -> ShowS
XhrRequestConfig a -> String
(Int -> XhrRequestConfig a -> ShowS)
-> (XhrRequestConfig a -> String)
-> ([XhrRequestConfig a] -> ShowS)
-> Show (XhrRequestConfig a)
forall a. Show a => Int -> XhrRequestConfig a -> ShowS
forall a. Show a => [XhrRequestConfig a] -> ShowS
forall a. Show a => XhrRequestConfig a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> XhrRequestConfig a -> ShowS
showsPrec :: Int -> XhrRequestConfig a -> ShowS
$cshow :: forall a. Show a => XhrRequestConfig a -> String
show :: XhrRequestConfig a -> String
$cshowList :: forall a. Show a => [XhrRequestConfig a] -> ShowS
showList :: [XhrRequestConfig a] -> ShowS
Show, ReadPrec [XhrRequestConfig a]
ReadPrec (XhrRequestConfig a)
Int -> ReadS (XhrRequestConfig a)
ReadS [XhrRequestConfig a]
(Int -> ReadS (XhrRequestConfig a))
-> ReadS [XhrRequestConfig a]
-> ReadPrec (XhrRequestConfig a)
-> ReadPrec [XhrRequestConfig a]
-> Read (XhrRequestConfig a)
forall a. Read a => ReadPrec [XhrRequestConfig a]
forall a. Read a => ReadPrec (XhrRequestConfig a)
forall a. Read a => Int -> ReadS (XhrRequestConfig a)
forall a. Read a => ReadS [XhrRequestConfig a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: forall a. Read a => Int -> ReadS (XhrRequestConfig a)
readsPrec :: Int -> ReadS (XhrRequestConfig a)
$creadList :: forall a. Read a => ReadS [XhrRequestConfig a]
readList :: ReadS [XhrRequestConfig a]
$creadPrec :: forall a. Read a => ReadPrec (XhrRequestConfig a)
readPrec :: ReadPrec (XhrRequestConfig a)
$creadListPrec :: forall a. Read a => ReadPrec [XhrRequestConfig a]
readListPrec :: ReadPrec [XhrRequestConfig a]
Read, XhrRequestConfig a -> XhrRequestConfig a -> Bool
(XhrRequestConfig a -> XhrRequestConfig a -> Bool)
-> (XhrRequestConfig a -> XhrRequestConfig a -> Bool)
-> Eq (XhrRequestConfig a)
forall a. Eq a => XhrRequestConfig a -> XhrRequestConfig a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => XhrRequestConfig a -> XhrRequestConfig a -> Bool
== :: XhrRequestConfig a -> XhrRequestConfig a -> Bool
$c/= :: forall a. Eq a => XhrRequestConfig a -> XhrRequestConfig a -> Bool
/= :: XhrRequestConfig a -> XhrRequestConfig a -> Bool
Eq, Eq (XhrRequestConfig a)
Eq (XhrRequestConfig a) =>
(XhrRequestConfig a -> XhrRequestConfig a -> Ordering)
-> (XhrRequestConfig a -> XhrRequestConfig a -> Bool)
-> (XhrRequestConfig a -> XhrRequestConfig a -> Bool)
-> (XhrRequestConfig a -> XhrRequestConfig a -> Bool)
-> (XhrRequestConfig a -> XhrRequestConfig a -> Bool)
-> (XhrRequestConfig a -> XhrRequestConfig a -> XhrRequestConfig a)
-> (XhrRequestConfig a -> XhrRequestConfig a -> XhrRequestConfig a)
-> Ord (XhrRequestConfig a)
XhrRequestConfig a -> XhrRequestConfig a -> Bool
XhrRequestConfig a -> XhrRequestConfig a -> Ordering
XhrRequestConfig a -> XhrRequestConfig a -> XhrRequestConfig a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (XhrRequestConfig a)
forall a. Ord a => XhrRequestConfig a -> XhrRequestConfig a -> Bool
forall a.
Ord a =>
XhrRequestConfig a -> XhrRequestConfig a -> Ordering
forall a.
Ord a =>
XhrRequestConfig a -> XhrRequestConfig a -> XhrRequestConfig a
$ccompare :: forall a.
Ord a =>
XhrRequestConfig a -> XhrRequestConfig a -> Ordering
compare :: XhrRequestConfig a -> XhrRequestConfig a -> Ordering
$c< :: forall a. Ord a => XhrRequestConfig a -> XhrRequestConfig a -> Bool
< :: XhrRequestConfig a -> XhrRequestConfig a -> Bool
$c<= :: forall a. Ord a => XhrRequestConfig a -> XhrRequestConfig a -> Bool
<= :: XhrRequestConfig a -> XhrRequestConfig a -> Bool
$c> :: forall a. Ord a => XhrRequestConfig a -> XhrRequestConfig a -> Bool
> :: XhrRequestConfig a -> XhrRequestConfig a -> Bool
$c>= :: forall a. Ord a => XhrRequestConfig a -> XhrRequestConfig a -> Bool
>= :: XhrRequestConfig a -> XhrRequestConfig a -> Bool
$cmax :: forall a.
Ord a =>
XhrRequestConfig a -> XhrRequestConfig a -> XhrRequestConfig a
max :: XhrRequestConfig a -> XhrRequestConfig a -> XhrRequestConfig a
$cmin :: forall a.
Ord a =>
XhrRequestConfig a -> XhrRequestConfig a -> XhrRequestConfig a
min :: XhrRequestConfig a -> XhrRequestConfig a -> XhrRequestConfig a
Ord, (forall a b. (a -> b) -> XhrRequestConfig a -> XhrRequestConfig b)
-> (forall a b. a -> XhrRequestConfig b -> XhrRequestConfig a)
-> Functor XhrRequestConfig
forall a b. a -> XhrRequestConfig b -> XhrRequestConfig a
forall a b. (a -> b) -> XhrRequestConfig a -> XhrRequestConfig b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> XhrRequestConfig a -> XhrRequestConfig b
fmap :: forall a b. (a -> b) -> XhrRequestConfig a -> XhrRequestConfig b
$c<$ :: forall a b. a -> XhrRequestConfig b -> XhrRequestConfig a
<$ :: forall a b. a -> XhrRequestConfig b -> XhrRequestConfig a
Functor)
data XhrResponse
= XhrResponse { XhrResponse -> Word
_xhrResponse_status :: Word
, XhrResponse -> Text
_xhrResponse_statusText :: Text
, XhrResponse -> Maybe XhrResponseBody
_xhrResponse_response :: Maybe XhrResponseBody
, XhrResponse -> Maybe Text
_xhrResponse_responseText :: Maybe Text
, :: Map (CI Text) Text
}
data =
(Set.Set (CI Text))
|
deriving (Int -> XhrResponseHeaders -> ShowS
[XhrResponseHeaders] -> ShowS
XhrResponseHeaders -> String
(Int -> XhrResponseHeaders -> ShowS)
-> (XhrResponseHeaders -> String)
-> ([XhrResponseHeaders] -> ShowS)
-> Show XhrResponseHeaders
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> XhrResponseHeaders -> ShowS
showsPrec :: Int -> XhrResponseHeaders -> ShowS
$cshow :: XhrResponseHeaders -> String
show :: XhrResponseHeaders -> String
$cshowList :: [XhrResponseHeaders] -> ShowS
showList :: [XhrResponseHeaders] -> ShowS
Show, ReadPrec [XhrResponseHeaders]
ReadPrec XhrResponseHeaders
Int -> ReadS XhrResponseHeaders
ReadS [XhrResponseHeaders]
(Int -> ReadS XhrResponseHeaders)
-> ReadS [XhrResponseHeaders]
-> ReadPrec XhrResponseHeaders
-> ReadPrec [XhrResponseHeaders]
-> Read XhrResponseHeaders
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS XhrResponseHeaders
readsPrec :: Int -> ReadS XhrResponseHeaders
$creadList :: ReadS [XhrResponseHeaders]
readList :: ReadS [XhrResponseHeaders]
$creadPrec :: ReadPrec XhrResponseHeaders
readPrec :: ReadPrec XhrResponseHeaders
$creadListPrec :: ReadPrec [XhrResponseHeaders]
readListPrec :: ReadPrec [XhrResponseHeaders]
Read, XhrResponseHeaders -> XhrResponseHeaders -> Bool
(XhrResponseHeaders -> XhrResponseHeaders -> Bool)
-> (XhrResponseHeaders -> XhrResponseHeaders -> Bool)
-> Eq XhrResponseHeaders
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
== :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
$c/= :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
/= :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
Eq, Eq XhrResponseHeaders
Eq XhrResponseHeaders =>
(XhrResponseHeaders -> XhrResponseHeaders -> Ordering)
-> (XhrResponseHeaders -> XhrResponseHeaders -> Bool)
-> (XhrResponseHeaders -> XhrResponseHeaders -> Bool)
-> (XhrResponseHeaders -> XhrResponseHeaders -> Bool)
-> (XhrResponseHeaders -> XhrResponseHeaders -> Bool)
-> (XhrResponseHeaders -> XhrResponseHeaders -> XhrResponseHeaders)
-> (XhrResponseHeaders -> XhrResponseHeaders -> XhrResponseHeaders)
-> Ord XhrResponseHeaders
XhrResponseHeaders -> XhrResponseHeaders -> Bool
XhrResponseHeaders -> XhrResponseHeaders -> Ordering
XhrResponseHeaders -> XhrResponseHeaders -> XhrResponseHeaders
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: XhrResponseHeaders -> XhrResponseHeaders -> Ordering
compare :: XhrResponseHeaders -> XhrResponseHeaders -> Ordering
$c< :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
< :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
$c<= :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
<= :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
$c> :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
> :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
$c>= :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
>= :: XhrResponseHeaders -> XhrResponseHeaders -> Bool
$cmax :: XhrResponseHeaders -> XhrResponseHeaders -> XhrResponseHeaders
max :: XhrResponseHeaders -> XhrResponseHeaders -> XhrResponseHeaders
$cmin :: XhrResponseHeaders -> XhrResponseHeaders -> XhrResponseHeaders
min :: XhrResponseHeaders -> XhrResponseHeaders -> XhrResponseHeaders
Ord)
instance Default XhrResponseHeaders where
def :: XhrResponseHeaders
def = Set (CI Text) -> XhrResponseHeaders
OnlyHeaders Set (CI Text)
forall a. Monoid a => a
mempty
{-# DEPRECATED _xhrResponse_body "Use _xhrResponse_response or _xhrResponse_responseText instead." #-}
_xhrResponse_body :: XhrResponse -> Maybe Text
_xhrResponse_body :: XhrResponse -> Maybe Text
_xhrResponse_body = XhrResponse -> Maybe Text
_xhrResponse_responseText
{-# DEPRECATED xhrResponse_body "Use xhrResponse_response or xhrResponse_responseText instead." #-}
xhrResponse_body :: Lens' XhrResponse (Maybe Text)
xhrResponse_body :: Lens' XhrResponse (Maybe Text)
xhrResponse_body = (XhrResponse -> Maybe Text)
-> (XhrResponse -> Maybe Text -> XhrResponse)
-> Lens' XhrResponse (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens XhrResponse -> Maybe Text
_xhrResponse_responseText (\XhrResponse
r Maybe Text
t -> XhrResponse
r { _xhrResponse_responseText = t })
instance a ~ () => Default (XhrRequestConfig a) where
def :: XhrRequestConfig a
def = XhrRequestConfig { _xhrRequestConfig_headers :: Map Text Text
_xhrRequestConfig_headers = Map Text Text
forall k a. Map k a
Map.empty
, _xhrRequestConfig_user :: Maybe Text
_xhrRequestConfig_user = Maybe Text
forall a. Maybe a
Nothing
, _xhrRequestConfig_password :: Maybe Text
_xhrRequestConfig_password = Maybe Text
forall a. Maybe a
Nothing
, _xhrRequestConfig_responseType :: Maybe XhrResponseType
_xhrRequestConfig_responseType = Maybe XhrResponseType
forall a. Maybe a
Nothing
, _xhrRequestConfig_sendData :: ()
_xhrRequestConfig_sendData = ()
, _xhrRequestConfig_withCredentials :: Bool
_xhrRequestConfig_withCredentials = Bool
False
, _xhrRequestConfig_responseHeaders :: XhrResponseHeaders
_xhrRequestConfig_responseHeaders = XhrResponseHeaders
forall a. Default a => a
def
}
xhrRequest :: Text -> Text -> XhrRequestConfig a -> XhrRequest a
xhrRequest :: forall a. Text -> Text -> XhrRequestConfig a -> XhrRequest a
xhrRequest = Text -> Text -> XhrRequestConfig a -> XhrRequest a
forall a. Text -> Text -> XhrRequestConfig a -> XhrRequest a
XhrRequest
newXMLHttpRequestWithError
:: (MonadJSM m, IsXhrPayload a)
=> XhrRequest a
-> (Either XhrException XhrResponse -> JSM ())
-> m XMLHttpRequest
newXMLHttpRequestWithError :: forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a
-> (Either XhrException XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequestWithError XhrRequest a
req Either XhrException XhrResponse -> JSM ()
cb = do
xhr <- m XMLHttpRequest
forall (m :: * -> *). MonadJSM m => m XMLHttpRequest
xmlHttpRequestNew
ctx <- askJSM
void $ liftIO $ forkIO $ handle ((`runJSM` ctx) . cb . Left) $ void . (`runJSM` ctx) $ do
let c = XhrRequest a -> XhrRequestConfig a
forall a. XhrRequest a -> XhrRequestConfig a
_xhrRequest_config XhrRequest a
req
rt = XhrRequestConfig a -> Maybe XhrResponseType
forall a. XhrRequestConfig a -> Maybe XhrResponseType
_xhrRequestConfig_responseType XhrRequestConfig a
c
creds = XhrRequestConfig a -> Bool
forall a. XhrRequestConfig a -> Bool
_xhrRequestConfig_withCredentials XhrRequestConfig a
c
xmlHttpRequestOpen
xhr
(_xhrRequest_method req)
(_xhrRequest_url req)
True
(fromMaybe "" $ _xhrRequestConfig_user c)
(fromMaybe "" $ _xhrRequestConfig_password c)
iforM_ (_xhrRequestConfig_headers c) $ xmlHttpRequestSetRequestHeader xhr
maybe (return ()) (xmlHttpRequestSetResponseType xhr . fromResponseType) rt
xmlHttpRequestSetWithCredentials xhr creds
_ <- xmlHttpRequestOnreadystatechange xhr $ do
readyState <- xmlHttpRequestGetReadyState xhr
status <- xmlHttpRequestGetStatus xhr
statusText <- xmlHttpRequestGetStatusText xhr
when (readyState == 4) $ do
t <- if rt == Just XhrResponseType_Text || isNothing rt
then xmlHttpRequestGetResponseText xhr
else return Nothing
r <- xmlHttpRequestGetResponse xhr
h <- case _xhrRequestConfig_responseHeaders c of
XhrResponseHeaders
AllHeaders -> Text -> Map (CI Text) Text
parseAllHeadersString (Text -> Map (CI Text) Text)
-> ReaderT Event JSM Text -> ReaderT Event JSM (Map (CI Text) Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
XMLHttpRequest -> ReaderT Event JSM Text
forall (m :: * -> *). MonadJSM m => XMLHttpRequest -> m Text
xmlHttpRequestGetAllResponseHeaders XMLHttpRequest
xhr
OnlyHeaders Set (CI Text)
xs -> (Text -> ReaderT Event JSM Text)
-> Map (CI Text) Text -> ReaderT Event JSM (Map (CI Text) Text)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Map (CI Text) a -> f (Map (CI Text) b)
traverse (XMLHttpRequest -> Text -> ReaderT Event JSM Text
forall header (m :: * -> *).
(ToJSString header, MonadJSM m) =>
XMLHttpRequest -> header -> m Text
xmlHttpRequestGetResponseHeader XMLHttpRequest
xhr)
((CI Text -> Text) -> Set (CI Text) -> Map (CI Text) Text
forall k a. (k -> a) -> Set k -> Map k a
Map.fromSet CI Text -> Text
forall s. CI s -> s
CI.original Set (CI Text)
xs)
_ <- liftJSM $ cb $ Right
XhrResponse { _xhrResponse_status = status
, _xhrResponse_statusText = statusText
, _xhrResponse_response = r
, _xhrResponse_responseText = t
, _xhrResponse_headers = h
}
return ()
_ <- xmlHttpRequestSend xhr (_xhrRequestConfig_sendData c)
return ()
return xhr
parseAllHeadersString :: Text -> Map (CI Text) Text
Text
s = [(CI Text, Text)] -> Map (CI Text) Text
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(CI Text, Text)] -> Map (CI Text) Text)
-> [(CI Text, Text)] -> Map (CI Text) Text
forall a b. (a -> b) -> a -> b
$ (Text -> (CI Text, Text)) -> [Text] -> [(CI Text, Text)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Text, Text) -> (CI Text, Text)
stripBoth ((Text, Text) -> (CI Text, Text))
-> (Text -> (Text, Text)) -> Text -> (CI Text, Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> Text -> (Text, Text)
T.span (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/=Char
':')) ([Text] -> [(CI Text, Text)]) -> [Text] -> [(CI Text, Text)]
forall a b. (a -> b) -> a -> b
$
(Text -> Bool) -> [Text] -> [Text]
forall a. (a -> Bool) -> [a] -> [a]
L.dropWhileEnd Text -> Bool
T.null ([Text] -> [Text]) -> [Text] -> [Text]
forall a b. (a -> b) -> a -> b
$ HasCallStack => Text -> Text -> [Text]
Text -> Text -> [Text]
T.splitOn (String -> Text
T.pack String
"\r\n") Text
s
where stripBoth :: (Text, Text) -> (CI Text, Text)
stripBoth (Text
txt1, Text
txt2) = (Text -> CI Text
forall s. FoldCase s => s -> CI s
CI.mk (Text -> CI Text) -> Text -> CI Text
forall a b. (a -> b) -> a -> b
$ Text -> Text
T.strip Text
txt1, Text -> Text
T.strip (Text -> Text) -> Text -> Text
forall a b. (a -> b) -> a -> b
$ Int -> Text -> Text
T.drop Int
1 Text
txt2)
newXMLHttpRequest :: (MonadJSM m, IsXhrPayload a) => XhrRequest a -> (XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequest :: forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a -> (XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequest XhrRequest a
req XhrResponse -> JSM ()
cb = XhrRequest a
-> (Either XhrException XhrResponse -> JSM ()) -> m XMLHttpRequest
forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a
-> (Either XhrException XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequestWithError XhrRequest a
req ((Either XhrException XhrResponse -> JSM ()) -> m XMLHttpRequest)
-> (Either XhrException XhrResponse -> JSM ()) -> m XMLHttpRequest
forall a b. (a -> b) -> a -> b
$ (XhrResponse -> JSM ())
-> Either XhrException XhrResponse -> JSM ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ XhrResponse -> JSM ()
cb
performRequestAsyncWithError
:: (MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m, IsXhrPayload a)
=> Event t (XhrRequest a)
-> m (Event t (Either XhrException XhrResponse))
performRequestAsyncWithError :: forall (m :: * -> *) t a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
IsXhrPayload a) =>
Event t (XhrRequest a)
-> m (Event t (Either XhrException XhrResponse))
performRequestAsyncWithError = (XhrRequest a
-> (Either XhrException XhrResponse -> JSM ())
-> Performable m XMLHttpRequest)
-> Event t (Performable m (XhrRequest a))
-> m (Event t (Either XhrException XhrResponse))
forall (m :: * -> *) t p a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m) =>
(XhrRequest p -> (a -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (XhrRequest p)) -> m (Event t a)
performRequestAsync' XhrRequest a
-> (Either XhrException XhrResponse -> JSM ())
-> Performable m XMLHttpRequest
forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a
-> (Either XhrException XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequestWithError (Event t (Performable m (XhrRequest a))
-> m (Event t (Either XhrException XhrResponse)))
-> (Event t (XhrRequest a)
-> Event t (Performable m (XhrRequest a)))
-> Event t (XhrRequest a)
-> m (Event t (Either XhrException XhrResponse))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (XhrRequest a -> Performable m (XhrRequest a))
-> Event t (XhrRequest a) -> Event t (Performable m (XhrRequest a))
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap XhrRequest a -> Performable m (XhrRequest a)
forall a. a -> Performable m a
forall (m :: * -> *) a. Monad m => a -> m a
return
performRequestAsync :: (MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m, IsXhrPayload a) => Event t (XhrRequest a) -> m (Event t XhrResponse)
performRequestAsync :: forall (m :: * -> *) t a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
IsXhrPayload a) =>
Event t (XhrRequest a) -> m (Event t XhrResponse)
performRequestAsync = (XhrRequest a
-> (XhrResponse -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (XhrRequest a))
-> m (Event t XhrResponse)
forall (m :: * -> *) t p a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m) =>
(XhrRequest p -> (a -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (XhrRequest p)) -> m (Event t a)
performRequestAsync' XhrRequest a
-> (XhrResponse -> JSM ()) -> Performable m XMLHttpRequest
forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a -> (XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequest (Event t (Performable m (XhrRequest a)) -> m (Event t XhrResponse))
-> (Event t (XhrRequest a)
-> Event t (Performable m (XhrRequest a)))
-> Event t (XhrRequest a)
-> m (Event t XhrResponse)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (XhrRequest a -> Performable m (XhrRequest a))
-> Event t (XhrRequest a) -> Event t (Performable m (XhrRequest a))
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap XhrRequest a -> Performable m (XhrRequest a)
forall a. a -> Performable m a
forall (m :: * -> *) a. Monad m => a -> m a
return
performMkRequestAsync :: (MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m, IsXhrPayload a) => Event t (Performable m (XhrRequest a)) -> m (Event t XhrResponse)
performMkRequestAsync :: forall (m :: * -> *) t a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
IsXhrPayload a) =>
Event t (Performable m (XhrRequest a)) -> m (Event t XhrResponse)
performMkRequestAsync = (XhrRequest a
-> (XhrResponse -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (XhrRequest a))
-> m (Event t XhrResponse)
forall (m :: * -> *) t p a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m) =>
(XhrRequest p -> (a -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (XhrRequest p)) -> m (Event t a)
performRequestAsync' XhrRequest a
-> (XhrResponse -> JSM ()) -> Performable m XMLHttpRequest
forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a -> (XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequest
performRequestAsync' :: (MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m) => (XhrRequest p -> (a -> JSM ()) -> Performable m XMLHttpRequest) -> Event t (Performable m (XhrRequest p)) -> m (Event t a)
performRequestAsync' :: forall (m :: * -> *) t p a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m) =>
(XhrRequest p -> (a -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (XhrRequest p)) -> m (Event t a)
performRequestAsync' XhrRequest p -> (a -> JSM ()) -> Performable m XMLHttpRequest
newXhr Event t (Performable m (XhrRequest p))
req = Event t ((a -> IO ()) -> Performable m ()) -> m (Event t a)
forall t (m :: * -> *) a.
(TriggerEvent t m, PerformEvent t m) =>
Event t ((a -> IO ()) -> Performable m ()) -> m (Event t a)
performEventAsync (Event t ((a -> IO ()) -> Performable m ()) -> m (Event t a))
-> Event t ((a -> IO ()) -> Performable m ()) -> m (Event t a)
forall a b. (a -> b) -> a -> b
$ Event t (Performable m (XhrRequest p))
-> (Performable m (XhrRequest p)
-> (a -> IO ()) -> Performable m ())
-> Event t ((a -> IO ()) -> Performable m ())
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
ffor Event t (Performable m (XhrRequest p))
req ((Performable m (XhrRequest p) -> (a -> IO ()) -> Performable m ())
-> Event t ((a -> IO ()) -> Performable m ()))
-> (Performable m (XhrRequest p)
-> (a -> IO ()) -> Performable m ())
-> Event t ((a -> IO ()) -> Performable m ())
forall a b. (a -> b) -> a -> b
$ \Performable m (XhrRequest p)
hr a -> IO ()
cb -> do
r <- Performable m (XhrRequest p)
hr
_ <- newXhr r $ liftIO . cb
return ()
performRequestsAsyncWithError
:: (MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m, Traversable f, IsXhrPayload a)
=> Event t (f (XhrRequest a)) -> m (Event t (f (Either XhrException XhrResponse)))
performRequestsAsyncWithError :: forall (m :: * -> *) t (f :: * -> *) a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
Traversable f, IsXhrPayload a) =>
Event t (f (XhrRequest a))
-> m (Event t (f (Either XhrException XhrResponse)))
performRequestsAsyncWithError = (XhrRequest a
-> (Either XhrException XhrResponse -> JSM ())
-> Performable m XMLHttpRequest)
-> Event t (Performable m (f (XhrRequest a)))
-> m (Event t (f (Either XhrException XhrResponse)))
forall (m :: * -> *) t (f :: * -> *) b a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
Traversable f) =>
(XhrRequest b -> (a -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (f (XhrRequest b))) -> m (Event t (f a))
performRequestsAsync' XhrRequest a
-> (Either XhrException XhrResponse -> JSM ())
-> Performable m XMLHttpRequest
forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a
-> (Either XhrException XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequestWithError (Event t (Performable m (f (XhrRequest a)))
-> m (Event t (f (Either XhrException XhrResponse))))
-> (Event t (f (XhrRequest a))
-> Event t (Performable m (f (XhrRequest a))))
-> Event t (f (XhrRequest a))
-> m (Event t (f (Either XhrException XhrResponse)))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (f (XhrRequest a) -> Performable m (f (XhrRequest a)))
-> Event t (f (XhrRequest a))
-> Event t (Performable m (f (XhrRequest a)))
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap f (XhrRequest a) -> Performable m (f (XhrRequest a))
forall a. a -> Performable m a
forall (m :: * -> *) a. Monad m => a -> m a
return
performRequestsAsync :: (MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m, Traversable f, IsXhrPayload a) => Event t (f (XhrRequest a)) -> m (Event t (f XhrResponse))
performRequestsAsync :: forall (m :: * -> *) t (f :: * -> *) a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
Traversable f, IsXhrPayload a) =>
Event t (f (XhrRequest a)) -> m (Event t (f XhrResponse))
performRequestsAsync = (XhrRequest a
-> (XhrResponse -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (f (XhrRequest a)))
-> m (Event t (f XhrResponse))
forall (m :: * -> *) t (f :: * -> *) b a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
Traversable f) =>
(XhrRequest b -> (a -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (f (XhrRequest b))) -> m (Event t (f a))
performRequestsAsync' XhrRequest a
-> (XhrResponse -> JSM ()) -> Performable m XMLHttpRequest
forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a -> (XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequest (Event t (Performable m (f (XhrRequest a)))
-> m (Event t (f XhrResponse)))
-> (Event t (f (XhrRequest a))
-> Event t (Performable m (f (XhrRequest a))))
-> Event t (f (XhrRequest a))
-> m (Event t (f XhrResponse))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (f (XhrRequest a) -> Performable m (f (XhrRequest a)))
-> Event t (f (XhrRequest a))
-> Event t (Performable m (f (XhrRequest a)))
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap f (XhrRequest a) -> Performable m (f (XhrRequest a))
forall a. a -> Performable m a
forall (m :: * -> *) a. Monad m => a -> m a
return
performMkRequestsAsync :: (MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m, Traversable f, IsXhrPayload a) => Event t (Performable m (f (XhrRequest a))) -> m (Event t (f XhrResponse))
performMkRequestsAsync :: forall (m :: * -> *) t (f :: * -> *) a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
Traversable f, IsXhrPayload a) =>
Event t (Performable m (f (XhrRequest a)))
-> m (Event t (f XhrResponse))
performMkRequestsAsync = (XhrRequest a
-> (XhrResponse -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (f (XhrRequest a)))
-> m (Event t (f XhrResponse))
forall (m :: * -> *) t (f :: * -> *) b a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
Traversable f) =>
(XhrRequest b -> (a -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (f (XhrRequest b))) -> m (Event t (f a))
performRequestsAsync' XhrRequest a
-> (XhrResponse -> JSM ()) -> Performable m XMLHttpRequest
forall (m :: * -> *) a.
(MonadJSM m, IsXhrPayload a) =>
XhrRequest a -> (XhrResponse -> JSM ()) -> m XMLHttpRequest
newXMLHttpRequest
performRequestsAsync' :: (MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m, Traversable f) => (XhrRequest b -> (a -> JSM ()) -> Performable m XMLHttpRequest) -> Event t (Performable m (f (XhrRequest b))) -> m (Event t (f a))
performRequestsAsync' :: forall (m :: * -> *) t (f :: * -> *) b a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
Traversable f) =>
(XhrRequest b -> (a -> JSM ()) -> Performable m XMLHttpRequest)
-> Event t (Performable m (f (XhrRequest b))) -> m (Event t (f a))
performRequestsAsync' XhrRequest b -> (a -> JSM ()) -> Performable m XMLHttpRequest
newXhr Event t (Performable m (f (XhrRequest b)))
req = Event t ((f a -> IO ()) -> Performable m ()) -> m (Event t (f a))
forall t (m :: * -> *) a.
(TriggerEvent t m, PerformEvent t m) =>
Event t ((a -> IO ()) -> Performable m ()) -> m (Event t a)
performEventAsync (Event t ((f a -> IO ()) -> Performable m ()) -> m (Event t (f a)))
-> Event t ((f a -> IO ()) -> Performable m ())
-> m (Event t (f a))
forall a b. (a -> b) -> a -> b
$ Event t (Performable m (f (XhrRequest b)))
-> (Performable m (f (XhrRequest b))
-> (f a -> IO ()) -> Performable m ())
-> Event t ((f a -> IO ()) -> Performable m ())
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
ffor Event t (Performable m (f (XhrRequest b)))
req ((Performable m (f (XhrRequest b))
-> (f a -> IO ()) -> Performable m ())
-> Event t ((f a -> IO ()) -> Performable m ()))
-> (Performable m (f (XhrRequest b))
-> (f a -> IO ()) -> Performable m ())
-> Event t ((f a -> IO ()) -> Performable m ())
forall a b. (a -> b) -> a -> b
$ \Performable m (f (XhrRequest b))
hrs f a -> IO ()
cb -> do
rs <- Performable m (f (XhrRequest b))
hrs
resps <- forM rs $ \XhrRequest b
r -> do
resp <- IO (MVar a) -> Performable m (MVar a)
forall a. IO a -> Performable m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO (MVar a)
forall a. IO (MVar a)
newEmptyMVar
_ <- newXhr r $ liftIO . putMVar resp
return resp
_ <- liftIO $ forkIO $ cb =<< forM resps takeMVar
return ()
getAndDecode :: (MonadIO m, MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m, FromJSON a) => Event t Text -> m (Event t (Maybe a))
getAndDecode :: forall (m :: * -> *) t a.
(MonadIO m, MonadJSM (Performable m), PerformEvent t m,
TriggerEvent t m, FromJSON a) =>
Event t Text -> m (Event t (Maybe a))
getAndDecode Event t Text
url = do
r <- Event t (XhrRequest ()) -> m (Event t XhrResponse)
forall (m :: * -> *) t a.
(MonadJSM (Performable m), PerformEvent t m, TriggerEvent t m,
IsXhrPayload a) =>
Event t (XhrRequest a) -> m (Event t XhrResponse)
performRequestAsync (Event t (XhrRequest ()) -> m (Event t XhrResponse))
-> Event t (XhrRequest ()) -> m (Event t XhrResponse)
forall a b. (a -> b) -> a -> b
$ (Text -> XhrRequest ()) -> Event t Text -> Event t (XhrRequest ())
forall a b. (a -> b) -> Event t a -> Event t b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Text
x -> Text -> Text -> XhrRequestConfig () -> XhrRequest ()
forall a. Text -> Text -> XhrRequestConfig a -> XhrRequest a
XhrRequest Text
"GET" Text
x XhrRequestConfig ()
forall a. Default a => a
def) Event t Text
url
return $ fmap decodeXhrResponse r
postJson :: (ToJSON a) => Text -> a -> XhrRequest Text
postJson :: forall a. ToJSON a => Text -> a -> XhrRequest Text
postJson Text
url a
a =
Text -> Text -> XhrRequestConfig Text -> XhrRequest Text
forall a. Text -> Text -> XhrRequestConfig a -> XhrRequest a
XhrRequest Text
"POST" Text
url (XhrRequestConfig Text -> XhrRequest Text)
-> XhrRequestConfig Text -> XhrRequest Text
forall a b. (a -> b) -> a -> b
$ XhrRequestConfig ()
forall a. Default a => a
def { _xhrRequestConfig_headers = headerUrlEnc
, _xhrRequestConfig_sendData = body
}
where headerUrlEnc :: Map Text Text
headerUrlEnc = Index (Map Text Text)
"Content-type" Index (Map Text Text) -> IxValue (Map Text Text) -> Map Text Text
forall m. (At m, Monoid m) => Index m -> IxValue m -> m
=: IxValue (Map Text Text)
"application/json"
body :: Text
body = LazyText -> Text
LT.toStrict (LazyText -> Text) -> LazyText -> Text
forall a b. (a -> b) -> a -> b
$ Builder -> LazyText
B.toLazyText (Builder -> LazyText) -> Builder -> LazyText
forall a b. (a -> b) -> a -> b
$ Value -> Builder
forall a. ToJSON a => a -> Builder
encodeToTextBuilder (Value -> Builder) -> Value -> Builder
forall a b. (a -> b) -> a -> b
$ a -> Value
forall a. ToJSON a => a -> Value
toJSON a
a
getMay :: (Monad m, Reflex t) => (Event t a -> m (Event t b)) -> Event t (Maybe a) -> m (Event t (Maybe b))
getMay :: forall (m :: * -> *) t a b.
(Monad m, Reflex t) =>
(Event t a -> m (Event t b))
-> Event t (Maybe a) -> m (Event t (Maybe b))
getMay Event t a -> m (Event t b)
f Event t (Maybe a)
e = do
e' <- Event t a -> m (Event t b)
f ((Maybe a -> Maybe a) -> Event t (Maybe a) -> Event t a
forall (f :: * -> *) a b.
Filterable f =>
(a -> Maybe b) -> f a -> f b
fmapMaybe Maybe a -> Maybe a
forall a. a -> a
id Event t (Maybe a)
e)
return $ leftmost [fmap Just e', fmapMaybe (maybe (Just Nothing) (const Nothing)) e]
decodeText :: FromJSON a => Text -> Maybe a
decodeText :: forall a. FromJSON a => Text -> Maybe a
decodeText = ByteString -> Maybe a
forall a. FromJSON a => ByteString -> Maybe a
decode (ByteString -> Maybe a) -> (Text -> ByteString) -> Text -> Maybe a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. StrictByteString -> ByteString
BL.fromStrict (StrictByteString -> ByteString)
-> (Text -> StrictByteString) -> Text -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> StrictByteString
encodeUtf8
decodeXhrResponse :: FromJSON a => XhrResponse -> Maybe a
decodeXhrResponse :: forall a. FromJSON a => XhrResponse -> Maybe a
decodeXhrResponse = Text -> Maybe a
forall a. FromJSON a => Text -> Maybe a
decodeText (Text -> Maybe a)
-> (XhrResponse -> Maybe Text) -> XhrResponse -> Maybe a
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< XhrResponse -> Maybe Text
_xhrResponse_responseText
#ifdef USE_TEMPLATE_HASKELL
#else
xhrRequest_method :: Lens' (XhrRequest a) Text
xhrRequest_method f (XhrRequest x1 x2 x3) = (\y -> XhrRequest y x2 x3) <$> f x1
{-# INLINE xhrRequest_method #-}
xhrRequest_url :: Lens' (XhrRequest a) Text
xhrRequest_url f (XhrRequest x1 x2 x3) = (\y -> XhrRequest x1 y x3) <$> f x2
{-# INLINE xhrRequest_url #-}
xhrRequest_config :: Lens' (XhrRequest a) (XhrRequestConfig a)
xhrRequest_config f (XhrRequest x1 x2 x3) = (\y -> XhrRequest x1 x2 y) <$> f x3
{-# INLINE xhrRequest_config #-}
xhrRequestConfig_headers :: Lens' (XhrRequestConfig a) (Map Text Text)
xhrRequestConfig_headers f (XhrRequestConfig x1 x2 x3 x4 x5 x6 x7) = (\y -> XhrRequestConfig y x2 x3 x4 x5 x6 x7) <$> f x1
{-# INLINE xhrRequestConfig_headers #-}
xhrRequestConfig_user :: Lens' (XhrRequestConfig a) (Maybe Text)
xhrRequestConfig_user f (XhrRequestConfig x1 x2 x3 x4 x5 x6 x7) = (\y -> XhrRequestConfig x1 y x3 x4 x5 x6 x7) <$> f x2
{-# INLINE xhrRequestConfig_user #-}
xhrRequestConfig_password :: Lens' (XhrRequestConfig a) (Maybe Text)
xhrRequestConfig_password f (XhrRequestConfig x1 x2 x3 x4 x5 x6 x7) = (\y -> XhrRequestConfig x1 x2 y x4 x5 x6 x7) <$> f x3
{-# INLINE xhrRequestConfig_password #-}
xhrRequestConfig_responseType :: Lens' (XhrRequestConfig a) (Maybe XhrResponseType)
xhrRequestConfig_responseType f (XhrRequestConfig x1 x2 x3 x4 x5 x6 x7) = (\y -> XhrRequestConfig x1 x2 x3 y x5 x6 x7) <$> f x4
{-# INLINE xhrRequestConfig_responseType #-}
xhrRequestConfig_sendData :: Lens (XhrRequestConfig a) (XhrRequestConfig b) a b
xhrRequestConfig_sendData f (XhrRequestConfig x1 x2 x3 x4 x5 x6 x7) = (\y -> XhrRequestConfig x1 x2 x3 x4 y x6 x7) <$> f x5
{-# INLINE xhrRequestConfig_sendData #-}
xhrRequestConfig_withCredentials :: Lens' (XhrRequestConfig a) Bool
xhrRequestConfig_withCredentials f (XhrRequestConfig x1 x2 x3 x4 x5 x6 x7) = (\y -> XhrRequestConfig x1 x2 x3 x4 x5 y x7) <$> f x6
{-# INLINE xhrRequestConfig_withCredentials #-}
xhrRequestConfig_responseHeaders :: Lens' (XhrRequestConfig a) XhrResponseHeaders
xhrRequestConfig_responseHeaders f (XhrRequestConfig x1 x2 x3 x4 x5 x6 x7) = (\y -> XhrRequestConfig x1 x2 x3 x4 x5 x6 y) <$> f x7
{-# INLINE xhrRequestConfig_responseHeaders #-}
xhrResponse_status :: Lens' XhrResponse Word
xhrResponse_status f (XhrResponse x1 x2 x3 x4 x5) = (\y -> XhrResponse y x2 x3 x4 x5) <$> f x1
{-# INLINE xhrResponse_status #-}
xhrResponse_statusText :: Lens' XhrResponse Text
xhrResponse_statusText f (XhrResponse x1 x2 x3 x4 x5) = (\y -> XhrResponse x1 y x3 x4 x5) <$> f x2
{-# INLINE xhrResponse_statusText #-}
xhrResponse_response :: Lens' XhrResponse (Maybe XhrResponseBody)
xhrResponse_response f (XhrResponse x1 x2 x3 x4 x5) = (\y -> XhrResponse x1 x2 y x4 x5) <$> f x3
{-# INLINE xhrResponse_response #-}
xhrResponse_responseText :: Lens' XhrResponse (Maybe Text)
xhrResponse_responseText f (XhrResponse x1 x2 x3 x4 x5) = (\y -> XhrResponse x1 x2 x3 y x5) <$> f x4
{-# INLINE xhrResponse_responseText #-}
xhrResponse_headers :: Lens' XhrResponse (Map (CI Text) Text)
xhrResponse_headers f (XhrResponse x1 x2 x3 x4 x5) = (\y -> XhrResponse x1 x2 x3 x4 y) <$> f x5
{-# INLINE xhrResponse_headers #-}
#endif