diff options
| author | Eugen Wissner <belka@caraus.de> | 2019-11-13 20:40:09 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2019-11-14 20:40:09 +0100 |
| commit | 115aa026724a688bc7ca57d622c83d0ccb2d2bb2 (patch) | |
| tree | cc7e74834376096730f77a3b4c936b0d67c897c4 /src | |
| parent | 31c516927d75a5431c171f4d5dbd3bf0cd32956e (diff) | |
| download | graphql-115aa026724a688bc7ca57d622c83d0ccb2d2bb2.tar.gz | |
Fail on cyclic fragments, fix #22
Diffstat (limited to 'src')
| -rw-r--r-- | src/Language/GraphQL/AST/Transform.hs | 16 |
1 files changed, 10 insertions, 6 deletions
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 |
