Exemple #1
0
        /// <summary>
        /// Converts the input variable collection to their type-expression-bound values in context of the
        /// operation being executed.
        /// </summary>
        /// <param name="inputVariables">The input variables.</param>
        /// <returns>IResolvedVariableCollection.</returns>
        public IResolvedVariableCollection Resolve(IInputVariableCollection inputVariables)
        {
            if (inputVariables == null || inputVariables.Count == 0)
            {
                return(ResolvedVariableCollection.Empty);
            }

            var resolverGenerator = new InputResolverMethodGenerator(_schema);
            var result            = new ResolvedVariableCollection();

            foreach (var variable in _operation.DeclaredVariables.Values)
            {
                var resolver = resolverGenerator.CreateResolver(variable.TypeExpression);

                IResolvableItem resolvableItem = null;
                var             found          = inputVariables.TryGetVariable(variable.Name, out var suppliedValue);
                resolvableItem = found ? suppliedValue : variable.Value as IResolvableItem;

                var resolvedValue = resolver.Resolve(resolvableItem);

                var resolvedVariable = new ResolvedVariable(variable.Name, variable.TypeExpression, resolvedValue);
                result.AddVariable(resolvedVariable);
            }

            return(result);
        }
        /// <summary>
        /// Resolves the provided query input value to the .NET object rendered by this resolver.
        /// This input value is garunteed to not be a variable reference.
        /// </summary>
        /// <param name="resolvableItem">The resolvable item.</param>
        /// <returns>System.Object.</returns>
        protected override object ResolveFromItem(IResolvableItem resolvableItem)
        {
            if (!(resolvableItem is IResolvableFieldSet fieldSEt))
            {
                return(null);
            }

            var instance = InstanceFactory.CreateInstance(_objectType);

            foreach (var argument in fieldSEt.Fields)
            {
                var argResolver = _fieldResolvers.ContainsKey(argument.Key) ? _fieldResolvers[argument.Key] : null;

                PropertySetterInvoker propSetter = null;
                var field = _graphType.Fields.FindField(argument.Key) as ITypedItem;
                if (field != null)
                {
                    propSetter = _propSetters.ContainsKey(field.InternalName) ? _propSetters[field.InternalName] : null;
                }

                if (argResolver == null || propSetter == null)
                {
                    continue;
                }

                var resolvedValue = argResolver
                                    .WithVariables(this.VariableCollection)
                                    .Resolve(argument.Value);

                propSetter(instance, resolvedValue);
            }

            return(instance);
        }
Exemple #3
0
        /// <summary>
        /// Resolves the provided query input value to the .NET object rendered by this resolver.
        /// This input value is garunteed to not be a variable reference.
        /// </summary>
        /// <param name="resolvableItem">The resolvable item.</param>
        /// <returns>System.Object.</returns>
        protected override object ResolveFromItem(IResolvableItem resolvableItem)
        {
            if (resolvableItem is IResolvableValue resolvableValue)
            {
                return(_scalarResolver.Resolve(resolvableValue.ResolvableValue));
            }

            return(null);
        }
Exemple #4
0
        /// <summary>
        /// Attempts to retrieve a field by its name.
        /// </summary>
        /// <param name="fieldName">Name of the field.</param>
        /// <param name="field">The field that was found, if any.</param>
        /// <returns><c>true</c> if the field was found and successfully returned, <c>false</c> otherwise.</returns>
        bool IResolvableFieldSet.TryGetField(string fieldName, out IResolvableItem field)
        {
            field = null;
            var found = _fields.TryGetValue(fieldName, out var item);

            if (found)
            {
                field = item;
            }

            return(found);
        }
Exemple #5
0
        /// <summary>
        /// Resolves the provided query input value to the .NET object rendered by this resolver.
        /// This input value is garunteed to not be a variable reference.
        /// </summary>
        /// <param name="resolvableItem">The resolvable item.</param>
        /// <returns>System.Object.</returns>
        protected override object ResolveFromItem(IResolvableItem resolvableItem)
        {
            if (resolvableItem is IResolvableList resolvableList)
            {
                var listType     = typeof(List <>).MakeGenericType(_listItemType);
                var listInstance = InstanceFactory.CreateInstance(listType) as IList;
                foreach (var item in resolvableList.ListItems)
                {
                    listInstance.Add(_itemResolver.WithVariables(this.VariableCollection).Resolve(item));
                }

                return(listInstance);
            }

            return(null);
        }
        /// <summary>
        /// Resolves the specified query input value to the .NET object rendered by this resolver.
        /// </summary>
        /// <param name="resolvableItem">The resolvable item.</param>
        /// <returns>object.</returns>
        public object Resolve(IResolvableItem resolvableItem)
        {
            if (resolvableItem is IResolvablePointer pointer)
            {
                IResolvedVariable variable = null;
                var variableFound          = this.VariableCollection?.TryGetValue(pointer.PointsTo, out variable) ?? false;
                if (variableFound)
                {
                    return(variable.Value);
                }

                resolvableItem = pointer.DefaultItem;
            }

            return(this.ResolveFromItem(resolvableItem));
        }
Exemple #7
0
        /// <summary>
        /// Resolves the provided query input value to the .NET object rendered by this resolver.
        /// This input value is garunteed to not be a variable reference.
        /// </summary>
        /// <param name="resolvableItem">The resolvable item.</param>
        /// <returns>System.Object.</returns>
        protected override object ResolveFromItem(IResolvableItem resolvableItem)
        {
            string value = null;

            try
            {
                if (resolvableItem is IResolvableValue resolvableValue)
                {
                    // enums may be as delimited strings (read from variables collection)
                    // or as non-delimited strings (read from a query document)
                    value = GraphQLStrings.UnescapeAndTrimDelimiters(resolvableValue.ResolvableValue, false);
                    return(Enum.Parse(_enumType, value, true));
                }
            }
            catch
            {
                // ignored
            }

            return(null);
        }
 /// <summary>
 /// Resolves the provided query input value to the .NET object rendered by this resolver.
 /// This input value is garunteed to not be a variable reference.
 /// </summary>
 /// <param name="resolvableItem">The resolvable item.</param>
 /// <returns>System.Object.</returns>
 protected abstract object ResolveFromItem(IResolvableItem resolvableItem);