/
GetSymbols.purs
71 lines (58 loc) · 2.72 KB
/
GetSymbols.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
module GraphQL.Client.CodeGen.GetSymbols where
import Prelude
import Data.Array as Array
import Data.Foldable (class Foldable)
import Data.GraphQL.AST as AST
import Data.List (List, foldMap, nub, sort, (:))
import Data.Maybe (maybe)
import Data.Newtype (unwrap)
symbolsToCode :: forall f. Foldable f => String -> f String -> String
symbolsToCode modulePrefix symbols =
"""module """ <> modulePrefix <> """Symbols where
import Type.Proxy (Proxy(..))
"""
<> symbolsString
where
symbolsString =
symbols
# Array.fromFoldable
# Array.nub
# foldMap (\s -> "\n" <> s <> " = Proxy :: Proxy" <> show s
)
getSymbols :: AST.Document -> List String
getSymbols doc = unwrap doc >>= definitionToSymbols # nub # sort
where
definitionToSymbols :: AST.Definition -> List String
definitionToSymbols = case _ of
AST.Definition_ExecutableDefinition _ -> mempty
AST.Definition_TypeSystemDefinition def -> typeSystemDefinitionToSymbols def
AST.Definition_TypeSystemExtension _ -> mempty
typeSystemDefinitionToSymbols :: AST.TypeSystemDefinition -> List String
typeSystemDefinitionToSymbols = case _ of
AST.TypeSystemDefinition_SchemaDefinition _ -> mempty
AST.TypeSystemDefinition_TypeDefinition typeDefinition -> typeDefinitionToSymbols typeDefinition
AST.TypeSystemDefinition_DirectiveDefinition _ -> mempty
typeDefinitionToSymbols :: AST.TypeDefinition -> List String
typeDefinitionToSymbols = case _ of
AST.TypeDefinition_ScalarTypeDefinition _ -> mempty
AST.TypeDefinition_ObjectTypeDefinition objectTypeDefinition -> objectTypeDefinitionToSymbols objectTypeDefinition
AST.TypeDefinition_InterfaceTypeDefinition _ -> mempty
AST.TypeDefinition_UnionTypeDefinition _ -> mempty
AST.TypeDefinition_EnumTypeDefinition _ -> mempty
AST.TypeDefinition_InputObjectTypeDefinition _ -> mempty
objectTypeDefinitionToSymbols :: AST.ObjectTypeDefinition -> List String
objectTypeDefinitionToSymbols ( AST.ObjectTypeDefinition
{ fieldsDefinition
}
) = maybe mempty fieldsDefinitionToSymbols fieldsDefinition
fieldsDefinitionToSymbols :: AST.FieldsDefinition -> List String
fieldsDefinitionToSymbols (AST.FieldsDefinition fieldsDefinition) = fieldsDefinition >>= fieldDefinitionToSymbols
fieldDefinitionToSymbols :: AST.FieldDefinition -> List String
fieldDefinitionToSymbols ( AST.FieldDefinition
{ name
, argumentsDefinition
}
) = name : maybe mempty argumentsDefinitionToSymbols argumentsDefinition
argumentsDefinitionToSymbols :: AST.ArgumentsDefinition -> List String
argumentsDefinitionToSymbols (AST.ArgumentsDefinition inputValueDefinitions) = inputValueDefinitions >>= inputValueDefinitionsToSymbols
inputValueDefinitionsToSymbols = mempty