diff --git a/definition.go b/definition.go index 0fbbbd52..cda22393 100644 --- a/definition.go +++ b/definition.go @@ -589,6 +589,7 @@ type FieldResolveFn func(p ResolveParams) (interface{}, error) type ResolveInfo struct { FieldName string + FieldNameAlias string FieldASTs []*ast.Field Path *ResponsePath ReturnType Output diff --git a/executor.go b/executor.go index 7440ae21..6e459a56 100644 --- a/executor.go +++ b/executor.go @@ -610,6 +610,11 @@ func resolveField(eCtx *executionContext, parentType *Object, source interface{} fieldName = fieldAST.Name.Value } + fieldNameAlias := "" + if fieldAST.Alias != nil { + fieldNameAlias = fieldAST.Alias.Value + } + fieldDef := getFieldDef(eCtx.Schema, parentType, fieldName) if fieldDef == nil { resultState.hasNoFieldDefs = true @@ -628,6 +633,7 @@ func resolveField(eCtx *executionContext, parentType *Object, source interface{} info := ResolveInfo{ FieldName: fieldName, + FieldNameAlias: fieldNameAlias, FieldASTs: fieldASTs, Path: path, ReturnType: returnType, @@ -982,6 +988,13 @@ func DefaultResolveFn(p ResolveParams) (interface{}, error) { // try p.Source as a map[string]interface if sourceMap, ok := p.Source.(map[string]interface{}); ok { property := sourceMap[p.Info.FieldName] + if p.Info.FieldNameAlias != "" { + propertyAlias, pok := sourceMap[p.Info.FieldNameAlias] + if pok { + property = propertyAlias + } + } + val := reflect.ValueOf(property) if val.IsValid() && val.Type().Kind() == reflect.Func { // try type casting the func to the most basic func signature