-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefinition.go
85 lines (74 loc) · 2.24 KB
/
definition.go
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package directive
import (
"github.com/vektah/gqlparser/v2/ast"
"maps"
"slices"
)
type Definitions ast.DefinitionList
func NewDefinitionsByMap(typeByName map[string]*ast.Definition) Definitions {
return slices.Collect(maps.Values(typeByName))
}
func (ds Definitions) Fields() FieldDefinitions {
var fields FieldDefinitions
for _, definition := range ds {
fields = append(fields, definition.Fields...)
}
return fields
}
func (ds Definitions) NotBuildIn() Definitions {
var definitions Definitions
for _, definition := range ds {
if !definition.BuiltIn {
definitions = append(definitions, definition)
}
}
return definitions
}
func (ds Definitions) FilterByKinds(kinds []ast.DefinitionKind) Definitions {
var definitions Definitions
for _, definition := range ds {
if slices.Contains(kinds, definition.Kind) {
definitions = append(definitions, definition)
}
}
return definitions
}
func (ds Definitions) FilterByDefinitionName(definitionPattern []string) Definitions {
var definitions Definitions
for _, definition := range ds {
if slices.ContainsFunc(definitionPattern, func(pattern string) bool { return isMatch(pattern, definition.Name) }) {
definitions = append(definitions, definition)
}
}
return definitions
}
func (ds Definitions) ExcludeByDefinitionName(excludeDefinitionPatterns []string) Definitions {
var definitions Definitions
for _, definition := range ds {
if !slices.ContainsFunc(excludeDefinitionPatterns, func(pattern string) bool { return isMatch(pattern, definition.Name) }) {
definitions = append(definitions, definition)
}
}
return definitions
}
func (ds Definitions) FilterByNotHasDirective(directive string) Definitions {
var definitions Definitions
for _, definition := range ds {
if !findDirectiveOnDefinition(definition, directive) {
definitions = append(definitions, definition)
}
}
return definitions
}
func (ds Definitions) FilterByPositionNotNil() Definitions {
var definitions Definitions
for _, definition := range ds {
if definition.Position != nil {
definitions = append(definitions, definition)
}
}
return definitions
}
func findDirectiveOnDefinition(definition *ast.Definition, directiveName string) bool {
return definition.Directives.ForName(directiveName) != nil
}