@@ -4,21 +4,35 @@ import Prelude
4
4
5
5
import Data.Generic.Rep (class Generic )
6
6
import Data.Generic.Rep.Show (genericShow )
7
- import Data.Maybe ( Maybe (..) )
7
+ import Data.Options ( Option , Options , opt , options )
8
8
import Effect (Effect )
9
+ import Foreign (Foreign )
9
10
import Network.HTTP.Types as H
10
- import Prim.Row (class Union )
11
11
12
12
foreign import data EventSource :: Type
13
13
14
+ data ExtentionOptions
15
+
16
+ httpsRejectUnauthorized :: Option ExtentionOptions Boolean
17
+ httpsRejectUnauthorized = opt " httpsRejectUnauthorized"
18
+
19
+ withCredentials :: Option ExtentionOptions Boolean
20
+ withCredentials = opt " withCredentials"
21
+
22
+ headers :: Option ExtentionOptions (Array H.Header )
23
+ headers = opt " headers"
24
+
25
+ proxy :: Option ExtentionOptions String
26
+ proxy = opt " proxy"
27
+
14
28
newtype EventName = EventName String
15
29
16
- type Extensions =
17
- ( httpsRejectUnauthorized :: Boolean
18
- , withCredentials :: Boolean
19
- , headers :: Array H.Header
20
- , proxy :: String
21
- )
30
+ type MessageEvent =
31
+ { type :: String
32
+ , data :: String
33
+ , lastEventId :: String
34
+ , origin :: String
35
+ }
22
36
23
37
data EventSourceError
24
38
= EventSourceErr H.Status
@@ -35,13 +49,11 @@ derive instance eqReadyState :: Eq ReadyState
35
49
instance showReadyState :: Show ReadyState where
36
50
show = genericShow
37
51
38
- createEventSource :: forall exts t .
39
- Union exts t Extensions
40
- => String
41
- -> Maybe { | exts }
42
- -> EventSource
43
- createEventSource url Nothing = _createEventSource url {}
44
- createEventSource url (Just exts) = _createEventSource url exts
52
+ eventName :: String -> EventName
53
+ eventName = EventName
54
+
55
+ createEventSource :: String -> Options ExtentionOptions -> Effect EventSource
56
+ createEventSource url opts = _createEventSource url $ options opts
45
57
46
58
readyState :: EventSource -> Effect ReadyState
47
59
readyState evs = do
@@ -51,28 +63,29 @@ readyState evs = do
51
63
1 -> OPEN
52
64
_ -> CLOSED
53
65
54
- addEventListener :: forall event . EventSource -> EventName -> (event -> Effect Unit ) -> Effect Unit
66
+ addEventListener :: EventSource -> EventName -> (MessageEvent -> Effect Unit ) -> Effect Unit
55
67
addEventListener evs (EventName en) = _addEventListener evs en
56
68
57
- removeEventListener :: forall event . EventSource -> EventName -> ( event -> Effect Unit ) -> Effect Unit
69
+ removeEventListener :: EventSource -> EventName -> Effect Unit -> Effect Unit
58
70
removeEventListener evs (EventName en) = _removeEventListener evs en
59
71
60
- onOpen :: forall event . EventSource -> ( event -> Effect Unit ) -> Effect Unit
72
+ onOpen :: EventSource -> Effect Unit -> Effect Unit
61
73
onOpen = _onOpen
62
74
63
- onMessage :: forall event . EventSource -> (event -> Effect Unit ) -> Effect Unit
75
+ -- | This will only fire if your event name is 'message', do not use it unless so.
76
+ onMessage :: EventSource -> (MessageEvent -> Effect Unit ) -> Effect Unit
64
77
onMessage = _onMessage
65
78
66
79
onError :: EventSource -> (EventSourceError -> Effect Unit ) -> Effect Unit
67
80
onError evs = _onError evs ConnectionClosedErr EventSourceErr
68
81
69
- foreign import _createEventSource :: forall opts . String -> opts -> EventSource
70
- foreign import _readyState :: EventSource -> Effect Int
71
- foreign import _addEventListener :: forall event . EventSource -> String -> (event -> Effect Unit ) -> Effect Unit
72
- foreign import _removeEventListener :: forall event . EventSource -> String -> ( event -> Effect Unit ) -> Effect Unit
82
+ foreign import _createEventSource :: String -> Foreign -> Effect EventSource
83
+ foreign import _readyState :: EventSource -> Effect Int
84
+ foreign import _addEventListener :: EventSource -> String -> (MessageEvent -> Effect Unit ) -> Effect Unit
85
+ foreign import _removeEventListener :: EventSource -> String -> Effect Unit -> Effect Unit
73
86
foreign import close :: EventSource -> Effect Unit
74
- foreign import _onOpen :: forall event . EventSource -> ( event -> Effect Unit ) -> Effect Unit
75
- foreign import _onMessage :: forall event . EventSource -> (event -> Effect Unit ) -> Effect Unit
87
+ foreign import _onOpen :: EventSource -> Effect Unit -> Effect Unit
88
+ foreign import _onMessage :: EventSource -> (MessageEvent -> Effect Unit ) -> Effect Unit
76
89
foreign import _onError ::
77
90
EventSource
78
91
-> (String -> EventSourceError )
0 commit comments