From 115aa026724a688bc7ca57d622c83d0ccb2d2bb2 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 13 Nov 2019 20:40:09 +0100 Subject: Fail on cyclic fragments, fix #22 --- src/Language/GraphQL/AST/Transform.hs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Language/GraphQL/AST/Transform.hs b/src/Language/GraphQL/AST/Transform.hs index 93fb557..d70a163 100644 --- a/src/Language/GraphQL/AST/Transform.hs +++ b/src/Language/GraphQL/AST/Transform.hs @@ -94,17 +94,21 @@ collectFragments = do _ <- fragmentDefinition nextValue collectFragments -fragmentDefinition :: Full.FragmentDefinition -> TransformT (NonEmpty Core.Selection) +fragmentDefinition :: + Full.FragmentDefinition -> + TransformT (NonEmpty Core.Selection) fragmentDefinition (Full.FragmentDefinition name _tc _dirs sels) = do + modify deleteFragmentDefinition selections <- traverse selection sels let newValue = either id pure =<< selections - modify $ moveFragment newValue + modify $ insertFragment newValue liftJust newValue where - moveFragment newValue (Replacement fullFragments emptyFragDefs) = - let newFragments = HashMap.insert name newValue fullFragments - newDefinitions = HashMap.delete name emptyFragDefs - in Replacement newFragments newDefinitions + deleteFragmentDefinition (Replacement fragments' fragmentDefinitions') = + Replacement fragments' $ HashMap.delete name fragmentDefinitions' + insertFragment newValue (Replacement fragments' fragmentDefinitions') = + let newFragments = HashMap.insert name newValue fragments' + in Replacement newFragments fragmentDefinitions' field :: Full.Field -> TransformT Core.Field field (Full.Field a n args _dirs sels) = do -- cgit v1.2.3