summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2019-10-19 10:00:25 +0200
committerEugen Wissner <belka@caraus.de>2019-10-19 10:00:25 +0200
commitc7d5b02911380583ea8ca4bfc600f533658ab16f (patch)
tree91276b5df2af700daff988fb2c675a2e08d75ac1 /src
parent37254c8c9532794ed41570ef8c646c41e7044f2c (diff)
downloadgraphql-c7d5b02911380583ea8ca4bfc600f533658ab16f.tar.gz
Handle top-level fragments
Fixes #17.
Diffstat (limited to 'src')
-rw-r--r--src/Language/GraphQL/AST/Transform.hs32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/Language/GraphQL/AST/Transform.hs b/src/Language/GraphQL/AST/Transform.hs
index 53f04cd..3aa31b0 100644
--- a/src/Language/GraphQL/AST/Transform.hs
+++ b/src/Language/GraphQL/AST/Transform.hs
@@ -8,10 +8,10 @@ module Language.GraphQL.AST.Transform
) where
import Control.Applicative (empty)
-import Control.Monad ((<=<))
import Data.Bifunctor (first)
import Data.Either (partitionEithers)
import Data.Foldable (fold, foldMap)
+import Data.List.NonEmpty (NonEmpty)
import qualified Data.List.NonEmpty as NonEmpty
import Data.Monoid (Alt(Alt,getAlt), (<>))
import qualified Language.GraphQL.AST as Full
@@ -44,22 +44,20 @@ operations
-> Fragmenter
-> [Full.OperationDefinition]
-> Maybe Core.Document
-operations subs fr = NonEmpty.nonEmpty <=< traverse (operation subs fr)
+operations subs fr = NonEmpty.nonEmpty . fmap (operation subs fr)
operation
:: Schema.Subs
-> Fragmenter
-> Full.OperationDefinition
- -> Maybe Core.Operation
+ -> Core.Operation
operation subs fr (Full.OperationSelectionSet sels) =
operation subs fr $ Full.OperationDefinition Full.Query empty empty empty sels
-- TODO: Validate Variable definitions with substituter
-operation subs fr (Full.OperationDefinition operationType name _vars _dirs sels)
- = case operationType of
- Full.Query -> Core.Query name <$> node
- Full.Mutation -> Core.Mutation name <$> node
- where
- node = traverse (hush . selection subs fr) sels
+operation subs fr (Full.OperationDefinition Full.Query name _vars _dirs sels) =
+ Core.Query name $ appendSelection subs fr sels
+operation subs fr (Full.OperationDefinition Full.Mutation name _vars _dirs sels) =
+ Core.Mutation name $ appendSelection subs fr sels
selection
:: Schema.Subs
@@ -75,12 +73,9 @@ selection subs fr (Full.SelectionInlineFragment fragment)
= Right
$ Core.SelectionFragment
$ Core.Fragment typeCondition
- $ NonEmpty.fromList
- $ appendSelection selectionSet
+ $ appendSelection subs fr selectionSet
| (Full.InlineFragment Nothing _ selectionSet) <- fragment
- = Left $ appendSelection selectionSet
- where
- appendSelection = foldr (either (++) (:) . selection subs fr) []
+ = Left $ NonEmpty.toList $ appendSelection subs fr selectionSet
-- * Fragment replacement
@@ -132,5 +127,10 @@ value subs (Full.ValueObject o) =
objectField :: Schema.Subs -> Full.ObjectField -> Maybe Core.ObjectField
objectField subs (Full.ObjectField n v) = Core.ObjectField n <$> value subs v
-hush :: Either a b -> Maybe b
-hush = either (const Nothing) Just
+appendSelection ::
+ Schema.Subs ->
+ Fragmenter ->
+ NonEmpty Full.Selection ->
+ NonEmpty Core.Selection
+appendSelection subs fr = NonEmpty.fromList
+ . foldr (either (++) (:) . selection subs fr) []