public override object VisitField(GraphQLParser.FieldContext context) { var field = new Field(); NewNode(field, context); if (context.NAME() != null) { field.Name = context.NAME().GetText(); } if (context.alias() != null) { field.Alias = context.alias().NAME().GetText(); } if (context.arguments() != null) { field.Arguments = Visit(context.arguments()) as Arguments; } if (context.directives() != null) { field.Directives = Visit(context.directives()) as Directives; } if (context.selectionSet() != null) { field.SelectionSet = Visit(context.selectionSet()) as SelectionSet; } return(field); }
public override object VisitField(GraphQLParser.FieldContext context) { var field = new Field(); if (context.fieldName().alias() != null) { var aliasContext = context.fieldName().alias(); field.Alias = aliasContext.NAME(0).GetText(); field.Name = aliasContext.NAME(1).GetText(); } else { field.Name = context.fieldName().NAME().GetText(); } if (context.arguments() != null) { field.Arguments = Visit(context.arguments()) as Arguments; } if (context.directives() != null) { field.Directives = Visit(context.directives()) as Directives; } if (context.selectionSet() != null) { field.Selections = Visit(context.selectionSet()) as Selections; } return(field); }
public Dictionary <string, Object> CoerceArgumentValues(__Type objectType, GraphQLParser.FieldContext field, Dictionary <string, Object> variableValues) { if (field.arguments() == null) { return(emptyArgs); } var coercedValues = new Dictionary <string, Object>(); var argumentValues = field.arguments().argument(); var fieldName = field.fieldName().GetText(); var objectField = objectType.GetField((x) => x.name == fieldName); if (objectField == null) { Error( $"Could not find field with name - {fieldName} in objecttype with name: {objectType.name} and underlying type:{objectType.dotNetType.Name}", field); } foreach (var argumentDefinition in objectField.args) { var argumentName = argumentDefinition.name; var argumentType = argumentDefinition.type; var defaultValue = argumentDefinition.defaultValue; var value = argumentValues.Where(x => x.NAME().GetText() == argumentName) .Select(x => x.valueOrVariable()) .FirstOrDefault(); if (value?.variable() != null) { var variableName = value.variable().NAME().GetText(); Object variableValue = null; if (variableValues.ContainsKey(variableName)) { variableValue = variableValues[variableName]; } if (variableValue != null) { coercedValues[argumentName] = variableValue; } else if (defaultValue != null) { coercedValues[argumentName] = defaultValue; } else if (argumentType.kind == __TypeKind.NON_NULL) { Error( $"Required field '{argumentName}' refered by variable '{variableName}' is not present in document", field); } else { continue; } } else if (value?.value() == null) { if (defaultValue != null) { coercedValues[argumentName] = defaultValue; } else if (argumentType.kind == __TypeKind.NON_NULL) { Error($"Required field '{argumentName}' is not present in document", field); } else { continue; } } else { coercedValues[argumentName] = CoerceDocumentValue(argumentType, argumentName, value.value()); } } return(coercedValues); }