|
| 1 | +module Web.Worker.Worker |
| 2 | + ( Worker |
| 3 | + , WorkerType |
| 4 | + , Credentials |
| 5 | + , WorkerOptions |
| 6 | + , fromEventTarget |
| 7 | + , toEventTarget |
| 8 | + , new |
| 9 | + , defaultWorkerOptions |
| 10 | + , postMessage |
| 11 | + , onError |
| 12 | + , onMessage |
| 13 | + , terminate |
| 14 | + ) |
| 15 | + where |
| 16 | + |
| 17 | +import Prelude |
| 18 | +import Data.Maybe (Maybe) |
| 19 | +import Effect (Effect) |
| 20 | +import Unsafe.Coerce (unsafeCoerce) |
| 21 | +import Web.Event.Event (Event) |
| 22 | +import Web.Event.EventTarget (EventTarget) |
| 23 | +import Web.Internal.FFI (unsafeReadProtoTagged) |
| 24 | +import Web.Worker.Event (MessageEvent) |
| 25 | + |
| 26 | + |
| 27 | +foreign import data Worker :: Type |
| 28 | + |
| 29 | + |
| 30 | +fromEventTarget :: EventTarget -> Maybe Worker |
| 31 | +fromEventTarget = unsafeReadProtoTagged "Worker" |
| 32 | + |
| 33 | +toEventTarget :: Worker -> EventTarget |
| 34 | +toEventTarget = unsafeCoerce |
| 35 | + |
| 36 | +data WorkerType = Classic | Module |
| 37 | +data Credentials = Omit | SameOrigin | Include |
| 38 | + |
| 39 | +type WorkerOptions = |
| 40 | + { credentials :: Credentials |
| 41 | + , name :: String |
| 42 | + , type :: WorkerType |
| 43 | + } |
| 44 | + |
| 45 | +defaultWorkerOptions :: WorkerOptions |
| 46 | +defaultWorkerOptions = |
| 47 | + { name: "" |
| 48 | + , credentials: Omit |
| 49 | + , type: Classic |
| 50 | + } |
| 51 | + |
| 52 | +--foreign import onError :: (Error -> Effect Unit) -> Worker -> Effect Unit |
| 53 | + |
| 54 | +foreign import newImpl :: String -> { name :: String, credentials :: String, type :: String } -> Effect Worker |
| 55 | + |
| 56 | +new :: String -> WorkerOptions -> Effect Worker |
| 57 | +new url {name, type: t, credentials} = newImpl url |
| 58 | + { name |
| 59 | + , credentials: show credentials |
| 60 | + , type: show t |
| 61 | + } |
| 62 | + |
| 63 | + |
| 64 | +foreign import postMessage :: forall msg tr. msg -> Array tr -> Worker -> Effect Unit |
| 65 | + |
| 66 | +foreign import terminate :: Worker -> Effect Unit |
| 67 | + |
| 68 | +foreign import onMessage :: (MessageEvent -> Effect Unit) -> Worker -> Effect Unit |
| 69 | + |
| 70 | +foreign import onError :: (Event -> Effect Unit) -> Worker -> Effect Unit |
| 71 | + |
| 72 | +instance Show WorkerType where |
| 73 | + show = case _ of |
| 74 | + Classic -> "classic" |
| 75 | + Module -> "module" |
| 76 | + |
| 77 | +instance Show Credentials where |
| 78 | + show = case _ of |
| 79 | + Omit -> "omit" |
| 80 | + SameOrigin -> "same-origin" |
| 81 | + Include -> "include" |
0 commit comments