private void ResolveFields( ObjectType type, ISelectionNode selection, Path path, FieldVisibility fieldVisibility, IDictionary <string, FieldInfo> fields) { if (selection is FieldNode fs) { ResolveFieldSelection( type, fs, path, fieldVisibility, fields); } else if (selection is FragmentSpreadNode fragSpread) { ResolveFragmentSpread( type, fragSpread, path, fieldVisibility, fields); } else if (selection is InlineFragmentNode inlineFrag) { ResolveInlineFragment( type, inlineFrag, path, fieldVisibility, fields); } }
public FieldVisibility( IValueNode skip, IValueNode include, FieldVisibility parent) { Skip = skip; Include = include; Parent = parent; }
private static void TryAddFieldVisibility( FieldInfo fieldInfo, FieldVisibility fieldVisibility) { if (fieldVisibility != null) { if (fieldInfo.Visibilities == null) { fieldInfo.Visibilities = new List <FieldVisibility>(); } fieldInfo.Visibilities.Add(fieldVisibility); } }
private static FieldVisibility ExtractVisibility( Language.IHasDirectives selection, FieldVisibility fieldVisibility) { IValueNode skip = selection.Directives.SkipValue(); IValueNode include = selection.Directives.IncludeValue(); if (skip == null && include == null) { return(fieldVisibility); } return(new FieldVisibility(skip, include, fieldVisibility)); }
private void CollectFields( ObjectType type, SelectionSetNode selectionSet, Path path, FieldVisibility fieldVisibility, IDictionary <string, FieldInfo> fields) { foreach (ISelectionNode selection in selectionSet.Selections) { ResolveFields( type, selection, path, ExtractVisibility(selection, fieldVisibility), fields); } }
private void ResolveFieldSelection( ObjectType type, FieldNode fieldSelection, Path path, FieldVisibility fieldVisibility, IDictionary <string, FieldInfo> fields) { NameString fieldName = fieldSelection.Name.Value; NameString responseName = fieldSelection.Alias == null ? fieldSelection.Name.Value : fieldSelection.Alias.Value; if (type.Fields.TryGetField(fieldName, out ObjectField field)) { if (fields.TryGetValue(responseName, out FieldInfo fieldInfo)) { AddSelection(fieldInfo, fieldSelection); TryAddFieldVisibility(fieldInfo, fieldVisibility); } else { fieldInfo = new FieldInfo { Field = field, ResponseName = responseName, Selection = fieldSelection, Path = path }; TryAddFieldVisibility(fieldInfo, fieldVisibility); CoerceArgumentValues(fieldInfo); fields.Add(responseName, fieldInfo); } } else { throw new QueryException(ErrorBuilder.New() .SetMessage(CoreResources.FieldCollector_FieldNotFound) .SetPath(path) .AddLocation(fieldSelection) .Build()); } }
private void ResolveInlineFragment( ObjectType type, InlineFragmentNode inlineFragment, Path path, FieldVisibility fieldVisibility, IDictionary <string, FieldInfo> fields) { Fragment fragment = _fragments.GetFragment(type, inlineFragment); if (DoesTypeApply(fragment.TypeCondition, type)) { CollectFields( type, fragment.SelectionSet, path, fieldVisibility, fields); } }
private void ResolveFragmentSpread( ObjectType type, FragmentSpreadNode fragmentSpread, Path path, FieldVisibility fieldVisibility, IDictionary <string, FieldInfo> fields) { Fragment fragment = _fragments.GetFragment( fragmentSpread.Name.Value); if (fragment != null && DoesTypeApply(fragment.TypeCondition, type)) { CollectFields( type, fragment.SelectionSet, path, fieldVisibility, fields); } }