...

Source file src/github.com/vektah/gqlparser/v2/validator/rules/variables_in_allowed_position.go

Documentation: github.com/vektah/gqlparser/v2/validator/rules

     1  package validator
     2  
     3  import (
     4  	"github.com/vektah/gqlparser/v2/ast"
     5  
     6  	//nolint:revive // Validator rules each use dot imports for convenience.
     7  	. "github.com/vektah/gqlparser/v2/validator"
     8  )
     9  
    10  func init() {
    11  	AddRule("VariablesInAllowedPosition", func(observers *Events, addError AddErrFunc) {
    12  		observers.OnValue(func(walker *Walker, value *ast.Value) {
    13  			if value.Kind != ast.Variable || value.ExpectedType == nil || value.VariableDefinition == nil || walker.CurrentOperation == nil {
    14  				return
    15  			}
    16  
    17  			tmp := *value.ExpectedType
    18  
    19  			// todo: move me into walk
    20  			// If there is a default non nullable types can be null
    21  			if value.VariableDefinition.DefaultValue != nil && value.VariableDefinition.DefaultValue.Kind != ast.NullValue {
    22  				if value.ExpectedType.NonNull {
    23  					tmp.NonNull = false
    24  				}
    25  			}
    26  
    27  			if !value.VariableDefinition.Type.IsCompatible(&tmp) {
    28  				addError(
    29  					Message(
    30  						`Variable "%s" of type "%s" used in position expecting type "%s".`,
    31  						value,
    32  						value.VariableDefinition.Type.String(),
    33  						value.ExpectedType.String(),
    34  					),
    35  					At(value.Position),
    36  				)
    37  			}
    38  		})
    39  	})
    40  }
    41  

View as plain text