public ArrayExecutionNode BuildEdgesArrayExecutionNode(ExecutionContext context, ExecutionNode node) { if (node is ObjectExecutionNode objectNode) { ExecutionStrategy.SetSubFieldNodes(context, objectNode); // Reference: // https://github.com/graphql-dotnet/graphql-dotnet/blob/master/src/GraphQL/Execution/ExecutionStrategy.cs#L167 var fields = CollectFields(context, objectNode.GraphType, node.Field.SelectionSet); if (fields.ContainsKey("edges")) { var edgesField = fields["edges"]; var schema = context.Schema; var edgesFieldDefinition = GetFieldDefinition( context.Document, schema, objectNode.GetObjectGraphType(schema), edgesField); var edgesNode = ExecutionStrategy.BuildExecutionNode(objectNode, edgesFieldDefinition.ResolvedType, edgesField, edgesFieldDefinition); if (objectNode.Result is Connection <TNode> connection) { if (edgesNode is ArrayExecutionNode edgesArrayNode) { edgesArrayNode.Result = connection.Edges; ExecutionStrategy.SetArrayItemNodes(context, edgesArrayNode); return(edgesArrayNode); } } } } return(null); }
public ExecutionNode BuildExecutionNode(ExecutionNode node, IGraphType resolvedType, Field nodeField, FieldType fieldType) { return(ExecutionStrategy.BuildExecutionNode( node, resolvedType, nodeField, fieldType)); }
public ExecutionNode BuildNodeExecutionNode(ExecutionContext context, ExecutionNode node) { if (node is ObjectExecutionNode objectExecutionNode) { var fields = CollectFields(context, node.GraphType, node.Field.SelectionSet); if (fields.ContainsKey("node")) { var nodeField = fields["node"]; var schema = context.Schema; var nodeFieldDefinition = GetFieldDefinition( context.Document, schema, objectExecutionNode.GetObjectGraphType(schema), nodeField); var nodeNode = ExecutionStrategy.BuildExecutionNode( objectExecutionNode, nodeFieldDefinition.ResolvedType, nodeField, nodeFieldDefinition); if (node.Result is Edge <TNode> edgeResult) { nodeNode.Result = edgeResult.Node; } return(nodeNode); } } return(node); }