summaryrefslogtreecommitdiff
path: root/src/Language/GraphQL/Execute/Transform.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2021-06-22 09:13:27 +0200
committerEugen Wissner <belka@caraus.de>2021-06-22 09:13:27 +0200
commit812f6967d40cfd1d1c0af5512496ff7b7cb0f6ae (patch)
tree5e9c63a901c975a33adec2945c9b8ad5371a0ff5 /src/Language/GraphQL/Execute/Transform.hs
parent6fe9eb72e42fb4ae36435324148e8f96e871a26c (diff)
downloadgraphql-812f6967d40cfd1d1c0af5512496ff7b7cb0f6ae.tar.gz
Provide locations for argument errors
The executor still doesn't give an error per argument, but a single error per field with locations for all arguments. If a non-null argument isn't specified, only the error location of the field is given. If some arguments cannot be coerced, only the locations of these arguments are given, non-null arguments are ignored. This should still be improved, so the executor returns all errors at once. The transformation tree is changed, so that argument map contains locations of the arguments (but not the locations of the argument values yet).
Diffstat (limited to 'src/Language/GraphQL/Execute/Transform.hs')
-rw-r--r--src/Language/GraphQL/Execute/Transform.hs11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/Language/GraphQL/Execute/Transform.hs b/src/Language/GraphQL/Execute/Transform.hs
index 5e2054b..5f3b771 100644
--- a/src/Language/GraphQL/Execute/Transform.hs
+++ b/src/Language/GraphQL/Execute/Transform.hs
@@ -83,7 +83,7 @@ data Operation m
data Field m = Field
(Maybe Full.Name)
Full.Name
- (HashMap Full.Name Input)
+ (HashMap Full.Name (Full.Node Input))
(Seq (Selection m))
Full.Location
@@ -278,8 +278,13 @@ field (Full.Field alias name arguments' directives' selections location) = do
let field' = Field alias name fieldArguments fieldSelections location
pure $ field' <$ fieldDirectives
where
- go arguments (Full.Argument name' (Full.Node value' _) _) =
- inputField arguments name' value'
+ go arguments (Full.Argument name' (Full.Node value' _) location') = do
+ objectFieldValue <- input value'
+ case objectFieldValue of
+ Just fieldValue ->
+ let argumentNode = Full.Node fieldValue location'
+ in pure $ HashMap.insert name' argumentNode arguments
+ Nothing -> pure arguments
fragmentSpread
:: Full.FragmentSpread