1module Yoga.APIClient where
5import Affjax.RequestBody as RequestBody
6import Affjax.RequestHeader (RequestHeader(..))
7import Affjax.ResponseFormat as ResponseFormat
8import Affjax.StatusCode (StatusCode(..))
9import Data.Argonaut.Core (Json)
10import Data.Argonaut.Decode (class DecodeJson, decodeJson, printJsonDecodeError)
11import Data.Argonaut.Decode.Class (class DecodeJson)
12import Data.Argonaut.Encode (encodeJson)
13import Data.Either (Either(..), either)
14import Data.HTTP.Method (Method(..))
15import Data.Maybe (Maybe(..))
16import Data.MediaType.Common (applicationJSON)
17import Effect.Aff (Aff, error, throwError)
22newtype YogaToken = YogaToken String
24compileAndRun ∷ YogaToken -> CompileRequest -> Aff (Either CompileResult RunResult)
25compileAndRun (YogaToken bearerToken) compileRequest = do
29 { url = "https://rowtype.yoga/api/compileAndRun"
31 , content = Just (RequestBody.Json (encodeJson compileRequest))
32 , responseFormat = ResponseFormat.json
34 [ RequestHeader "Authorization" ("Bearer " <> bearerToken)
35 , ContentType applicationJSON
40 Left (l ∷ AX.Error) ->
49 , message: AX.printError l
62 Right { status, body } -> case status of
63 StatusCode 200 -> Right <$> decodeAff body
64 StatusCode 422 -> Left <$> decodeAff body
65 code -> throwError (error $ "Unexpected response code " <> show code)
67decodeAff ∷ ∀ a. DecodeJson a => Json -> Aff a
68decodeAff body = either (throwError <<< error <<< printJsonDecodeError) pure (decodeJson body)
70 { result ∷ Array ErrorOrWarning
75 { code ∷ Maybe Int, stdout ∷ String, stderr ∷ String }
78 { replaceRange ∷ Position, replacement ∷ String }
94 { allSpans ∷ Array Span
99 , moduleName ∷ Maybe String
100 , position ∷ Position
101 , suggestion ∷ Maybe Suggestion
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list