...
1 package validator
2
3 import (
4 "github.com/vektah/gqlparser/ast"
5 . "github.com/vektah/gqlparser/validator"
6 )
7
8 func init() {
9 AddRule("ProvidedRequiredArguments", func(observers *Events, addError AddErrFunc) {
10
11 observers.OnField(func(walker *Walker, field *ast.Field) {
12 if field.Definition == nil {
13 return
14 }
15
16 argDef:
17 for _, argDef := range field.Definition.Arguments {
18 if !argDef.Type.NonNull {
19 continue
20 }
21 if argDef.DefaultValue != nil {
22 continue
23 }
24 for _, arg := range field.Arguments {
25 if arg.Name == argDef.Name {
26 continue argDef
27 }
28 }
29
30 addError(
31 Message(`Field "%s" argument "%s" of type "%s" is required but not provided.`, field.Name, argDef.Name, argDef.Type.String()),
32 At(field.Position),
33 )
34 }
35 })
36
37 observers.OnDirective(func(walker *Walker, directive *ast.Directive) {
38 if directive.Definition == nil {
39 return
40 }
41
42 argDef:
43 for _, argDef := range directive.Definition.Arguments {
44 if !argDef.Type.NonNull {
45 continue
46 }
47 if argDef.DefaultValue != nil {
48 continue
49 }
50 for _, arg := range directive.Arguments {
51 if arg.Name == argDef.Name {
52 continue argDef
53 }
54 }
55
56 addError(
57 Message(`Directive "@%s" argument "%s" of type "%s" is required but not provided.`, directive.Definition.Name, argDef.Name, argDef.Type.String()),
58 At(directive.Position),
59 )
60 }
61 })
62 })
63 }
64
View as plain text