Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
 public FieldVisibility(
     IValueNode skip,
     IValueNode include,
     FieldVisibility parent)
 {
     Skip    = skip;
     Include = include;
     Parent  = parent;
 }
Beispiel #3
0
 private static void TryAddFieldVisibility(
     FieldInfo fieldInfo,
     FieldVisibility fieldVisibility)
 {
     if (fieldVisibility != null)
     {
         if (fieldInfo.Visibilities == null)
         {
             fieldInfo.Visibilities =
                 new List <FieldVisibility>();
         }
         fieldInfo.Visibilities.Add(fieldVisibility);
     }
 }
Beispiel #4
0
        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));
        }
Beispiel #5
0
 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);
     }
 }
Beispiel #6
0
        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());
            }
        }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
0
        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);
            }
        }