示例#1
0
        private static void DeclareFieldArguments(
            IReadOnlySchemaOptions schemaOptions,
            IInterfaceFieldDescriptor fieldDescriptor,
            FieldDefinitionNode fieldDefinition)
        {
            foreach (InputValueDefinitionNode inputFieldDefinition in
                     fieldDefinition.Arguments)
            {
                fieldDescriptor.Argument(inputFieldDefinition.Name.Value,
                                         a =>
                {
                    foreach (DirectiveNode directive in
                             inputFieldDefinition.Directives)
                    {
                        fieldDescriptor.Directive(directive);
                    }

                    a.Description(inputFieldDefinition.Description?.Value)
                    .Type(inputFieldDefinition.Type)
                    .DefaultValue(inputFieldDefinition.DefaultValue)
                    .SyntaxNode(schemaOptions.PreserveSyntaxNodes
                                ? inputFieldDefinition
                                : null);
                });
            }
        }
 public static IInterfaceFieldDescriptor AddFilterArguments <TFilter>(
     this IInterfaceFieldDescriptor descriptor)
     where TFilter : class, IInputType, IFilterInputType
 {
     return(descriptor.Argument(_whereArgumentNamePlaceholder,
                                a => a.Type <TFilter>().Extend().ConfigureArgumentName()));
 }
        private static void DeclareFields(
            IInterfaceTypeDescriptor typeDescriptor,
            IReadOnlyCollection <FieldDefinitionNode> fieldDefinitions)
        {
            foreach (FieldDefinitionNode fieldDefinition in fieldDefinitions)
            {
                IInterfaceFieldDescriptor fieldDescriptor = typeDescriptor
                                                            .Field(fieldDefinition.Name.Value)
                                                            .Description(fieldDefinition.Description?.Value)
                                                            .Type(fieldDefinition.Type)
                                                            .SyntaxNode(fieldDefinition);

                foreach (DirectiveNode directive in fieldDefinition.Directives)
                {
                    if (!directive.IsDeprecationReason())
                    {
                        fieldDescriptor.Directive(directive);
                    }
                }

                string deprecactionReason = fieldDefinition.DeprecationReason();
                if (!string.IsNullOrEmpty(deprecactionReason))
                {
                    fieldDescriptor.Deprecated(deprecactionReason);
                }

                DeclareFieldArguments(fieldDescriptor, fieldDefinition);
            }
        }
示例#4
0
 public static IInterfaceFieldDescriptor AddFilterArguments <TFilter>(
     this IInterfaceFieldDescriptor descriptor)
     where TFilter : class, IInputType, IFilterInputType
 {
     return(descriptor.Argument(_whereArgumentName,
                                a => a.Type <TFilter>()));
 }
示例#5
0
 public override void OnConfigure(
     IDescriptorContext context,
     IInterfaceFieldDescriptor descriptor,
     MemberInfo member)
 {
     descriptor.Extend().OnBeforeCompletion(
         (c, d) => d.ContextData.Add("abc", "def"));
 }
示例#6
0
        public static IInterfaceFieldDescriptor UsePagination <TSchemaType>(this IInterfaceFieldDescriptor descriptor) where TSchemaType : class, IOutputType
        {
            descriptor
            .AddPaginationArguments()
            .Type <PaginationType <TSchemaType> >();

            return(descriptor);
        }
示例#7
0
 public static IInterfaceFieldDescriptor AddPagingArguments(
     this IInterfaceFieldDescriptor descriptor)
 {
     return(descriptor
            .Argument("first", a => a.Type <PaginationAmountType>())
            .Argument("after", a => a.Type <StringType>())
            .Argument("last", a => a.Type <PaginationAmountType>())
            .Argument("before", a => a.Type <StringType>()));
 }
示例#8
0
        public static IInterfaceFieldDescriptor UsePaging <TSchemaType>(
            this IInterfaceFieldDescriptor descriptor)
            where TSchemaType : class, IOutputType
        {
            descriptor
            .AddPagingArguments()
            .Type <ConnectionWithCountType <TSchemaType> >();

            return(descriptor);
        }
    public static IInterfaceFieldDescriptor ID(this IInterfaceFieldDescriptor descriptor)
    {
        if (descriptor is null)
        {
            throw new ArgumentNullException(nameof(descriptor));
        }

        RelayIdFieldHelpers.ApplyIdToField(descriptor);

        return(descriptor);
    }
    public static IInterfaceFieldDescriptor Cost(
        this IInterfaceFieldDescriptor descriptor,
        int complexity)
    {
        if (descriptor is null)
        {
            throw new ArgumentNullException(nameof(descriptor));
        }

        return(descriptor.Directive(new CostDirective(complexity)));
    }
示例#11
0
    /// <summary>
    /// Adds the offset paging arguments to an interface field.
    /// </summary>
    public static IInterfaceFieldDescriptor AddOffsetPagingArguments(
        this IInterfaceFieldDescriptor descriptor)
    {
        if (descriptor is null)
        {
            throw new ArgumentNullException(nameof(descriptor));
        }

        return(descriptor
               .Argument(OffsetPagingArgumentNames.Skip, a => a.Type <IntType>())
               .Argument(OffsetPagingArgumentNames.Take, a => a.Type <IntType>()));
    }
        public static IInterfaceFieldDescriptor ID(
            this IInterfaceFieldDescriptor descriptor)
        {
            if (descriptor is null)
            {
                throw new ArgumentNullException(nameof(descriptor));
            }

            descriptor.Extend().OnBeforeCreate(RewriteInterfaceFieldType);

            return(descriptor);
        }
    public static IInterfaceFieldDescriptor Cost(
        this IInterfaceFieldDescriptor descriptor,
        int complexity,
        params MultiplierPathString[] multipliers)
    {
        if (descriptor is null)
        {
            throw new ArgumentNullException(nameof(descriptor));
        }

        return(descriptor.Directive(
                   new CostDirective(complexity, multipliers)));
    }
        public static IInterfaceFieldDescriptor AddPagingArguments(
            this IInterfaceFieldDescriptor descriptor)
        {
            if (descriptor == null)
            {
                throw new ArgumentNullException(nameof(descriptor));
            }

            return(descriptor
                   .Argument(CursorPagingArgumentNames.First, a => a.Type <IntType>())
                   .Argument(CursorPagingArgumentNames.After, a => a.Type <StringType>())
                   .Argument(CursorPagingArgumentNames.Last, a => a.Type <IntType>())
                   .Argument(CursorPagingArgumentNames.Before, a => a.Type <StringType>()));
        }
示例#15
0
        private void DeclareFields(
            IInterfaceTypeDescriptor typeDescriptor,
            IReadOnlyCollection <FieldDefinitionNode> fieldDefinitions)
        {
            foreach (FieldDefinitionNode fieldDefinition in fieldDefinitions)
            {
                IInterfaceFieldDescriptor fieldDescriptor = typeDescriptor
                                                            .Field(fieldDefinition.Name.Value)
                                                            .Description(fieldDefinition.Description?.Value)
                                                            .Type(fieldDefinition.Type)
                                                            .SyntaxNode(fieldDefinition);

                DeclareFieldArguments(fieldDescriptor, fieldDefinition);
            }
        }
示例#16
0
        /// <summary>
        /// Specifies the type of an interface field with GraphQL SDL type syntax.
        /// </summary>
        /// <param name="descriptor">
        /// The interface field descriptor.
        /// </param>
        /// <param name="typeSyntax">
        /// The GraphQL SDL type syntax.
        /// </param>
        /// <returns>
        /// Returns the interface field descriptor for configuration chaining.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="descriptor"/> is <c>null</c>.
        /// <paramref name="typeSyntax"/> is <c>null</c>.
        /// </exception>
        /// <exception cref="SyntaxException">
        /// The GraphQL SDL type syntax is invalid.
        /// </exception>
        public static IInterfaceFieldDescriptor Type(
            this IInterfaceFieldDescriptor descriptor,
            string typeSyntax)
        {
            if (descriptor is null)
            {
                throw new ArgumentNullException(nameof(descriptor));
            }

            if (typeSyntax is null)
            {
                throw new ArgumentNullException(nameof(typeSyntax));
            }

            return(descriptor.Type(Utf8GraphQLParser.Syntax.ParseTypeReference(typeSyntax)));
        }
示例#17
0
    /// <summary>
    /// Applies the offset paging middleware to the current field.
    /// </summary>
    /// <param name="descriptor">
    /// The object field descriptor.
    /// </param>
    /// <param name="type">
    /// The schema type representation of the item type.
    /// </param>
    /// <param name="options">
    /// The paging settings that shall be applied to this field.
    /// </param>
    /// <returns>
    /// Returns the field descriptor for chaining in other configurations.
    /// </returns>
    public static IInterfaceFieldDescriptor UseOffsetPaging(
        this IInterfaceFieldDescriptor descriptor,
        Type?type             = null,
        PagingOptions options = default)
    {
        if (descriptor is null)
        {
            throw new ArgumentNullException(nameof(descriptor));
        }

        descriptor
        .AddOffsetPagingArguments()
        .Extend()
        .OnBeforeCreate((c, d) => d.Type = CreateTypeRef(c, d.Member, type, options));

        return(descriptor);
    }
示例#18
0
 private void DeclareFieldArguments(
     IInterfaceFieldDescriptor fieldDescriptor,
     FieldDefinitionNode fieldDefinition)
 {
     foreach (InputValueDefinitionNode inputFieldDefinition in
              fieldDefinition.Arguments)
     {
         fieldDescriptor.Argument(inputFieldDefinition.Name.Value,
                                  a =>
         {
             a.Description(inputFieldDefinition.Description?.Value)
             .Type(inputFieldDefinition.Type)
             .DefaultValue(inputFieldDefinition.DefaultValue)
             .SyntaxNode(inputFieldDefinition);
         });
     }
 }
 public static IInterfaceFieldDescriptor UsePaging <TSchemaType>(
     this IInterfaceFieldDescriptor descriptor,
     PagingOptions options = default)
     where TSchemaType : class, IOutputType =>
 UsePaging(descriptor, typeof(TSchemaType), options);
示例#20
0
 public static IInterfaceFieldDescriptor AddPaginationArguments(this IInterfaceFieldDescriptor descriptor)
 {
     return(descriptor
            .Argument("pageNumber", a => a.Type <IntType>())
            .Argument("limit", a => a.Type <IntType>()));
 }
示例#21
0
 public abstract void OnConfigure(
     IDescriptorContext context,
     IInterfaceFieldDescriptor descriptor,
     MemberInfo member);
示例#22
0
 public abstract void OnConfigure(IInterfaceFieldDescriptor descriptor);