示例#1
0
        public static IStitchingBuilder RenameField(
            this IStitchingBuilder builder,
            NameString schemaName,
            FieldReference field,
            NameString argumentName,
            NameString newArgumentName)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }

            schemaName.EnsureNotEmpty(nameof(schemaName));
            argumentName.EnsureNotEmpty(nameof(argumentName));
            newArgumentName.EnsureNotEmpty(nameof(newArgumentName));

            return(builder.AddTypeRewriter(
                       new RenameFieldArgumentRewriter(
                           schemaName,
                           field,
                           argumentName,
                           newArgumentName)));
        }
示例#2
0
 public static IStitchingBuilder IgnoreField(
     this IStitchingBuilder builder,
     NameString schemaName,
     NameString typeName,
     NameString fieldName) =>
 IgnoreField(builder, schemaName,
             new FieldReference(typeName, fieldName));
示例#3
0
        public static IStitchingBuilder AddSchemaFromHttp(
            this IStitchingBuilder builder,
            NameString name)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            name.EnsureNotEmpty(nameof(name));

            builder.AddSchema(name, s =>
            {
                HttpClient httpClient =
                    s.GetRequiredService <IHttpClientFactory>()
                    .CreateClient(name);

                var request = new HttpQueryRequest
                {
                    Query = _introspectionQuery
                };

                var queryClient = new HttpQueryClient();
                string result   = Task.Factory.StartNew(
                    () => queryClient.FetchStringAsync(request, httpClient))
                                  .Unwrap().GetAwaiter().GetResult();
                return(IntrospectionDeserializer.Deserialize(result));
            });

            return(builder);
        }
示例#4
0
 public static IStitchingBuilder RenameField(
     this IStitchingBuilder builder,
     NameString typeName,
     NameString fieldName,
     NameString newFieldName) =>
 RenameField(builder,
             new FieldReference(typeName, fieldName),
             newFieldName);
示例#5
0
        public static IStitchingBuilder IgnoreRootTypes(
            this IStitchingBuilder builder)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddDocumentRewriter(
                       new RemoveRootTypeRewriter()));
        }
示例#6
0
        public static IStitchingBuilder AddExtensionsFromFileForService(this IStitchingBuilder stitchingBuilder,
                                                                        string serviceName, IWebHostEnvironment env)
        {
            var filePaths = Directory.GetFiles($"{env.ContentRootPath}/Stitching/{serviceName}", "*.graphql");

            foreach (var filePath in filePaths)
            {
                stitchingBuilder.AddExtensionsFromFile(filePath);
            }
            return(stitchingBuilder);
        }
示例#7
0
 public static IStitchingBuilder RenameField(
     this IStitchingBuilder builder,
     NameString schemaName,
     NameString typeName,
     NameString fieldName,
     NameString argumentName,
     NameString newArgumentName) =>
 RenameField(builder,
             schemaName,
             new FieldReference(typeName, fieldName),
             argumentName,
             newArgumentName);
示例#8
0
        public static IStitchingBuilder AddSchemaFromLocal(this IStitchingBuilder stitchingBuilder,
                                                           string serviceName, ISchemaBuilder schemaBuilder, IWebHostEnvironment env, IServiceCollection services)
        {
            var schemaName = $"AG_{serviceName}";

            stitchingBuilder.AddQueryExecutor(schemaName, sp => schemaBuilder.AddServices(sp).Create().MakeExecutable());

            // Add extensions (for types that get stitched in from this service)
            stitchingBuilder.AddExtensionsFromFileForService(serviceName, env);

            return(stitchingBuilder);
        }
示例#9
0
        public static IStitchingBuilder AddDirectiveMergeHandler <T>(
            this IStitchingBuilder builder)
            where T : class, IDirectiveMergeHandler
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.AddDirectiveMergeRule(
                       SchemaMergerExtensions.CreateDirectiveMergeRule <T>()));
        }
示例#10
0
        public static IStitchingBuilder AddMergeHandler <T>(
            this IStitchingBuilder builder)
            where T : ITypeMergeHanlder
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.AddMergeRule(SchemaMergerExtensions.CreateHandler <T>());

            return(builder);
        }
示例#11
0
        public static IStitchingBuilder IgnoreType(
            this IStitchingBuilder builder,
            NameString typeName)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            typeName.EnsureNotEmpty(nameof(typeName));

            return(builder.AddDocumentRewriter(
                       new RemoveTypeRewriter(typeName)));
        }
示例#12
0
        public static IStitchingBuilder RenameType(
            this IStitchingBuilder builder,
            NameString originalTypeName,
            NameString newTypeName)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            originalTypeName.EnsureNotEmpty(nameof(originalTypeName));
            newTypeName.EnsureNotEmpty(nameof(newTypeName));

            return(builder.AddTypeRewriter(
                       new RenameTypeRewriter(originalTypeName, newTypeName)));
        }
示例#13
0
        public static IStitchingBuilder AddTypeRewriter(
            this IStitchingBuilder builder,
            RewriteTypeDefinitionDelegate rewrite)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (rewrite == null)
            {
                throw new ArgumentNullException(nameof(rewrite));
            }

            return(builder.AddTypeRewriter(new DelegateTypeRewriter(rewrite)));
        }
示例#14
0
        public static IStitchingBuilder AddSchemaFromHttp(this IStitchingBuilder stitchingBuilder,
                                                          string serviceName, IWebHostEnvironment env, IConfiguration config, IServiceCollection services)
        {
            var clientName = $"{serviceName}Client";
            var schemaName = $"AG_{serviceName}";

            // Register named HTTP client with schema name
            services.AddGraphQLClient(schemaName, config[$"{clientName}ApiUrl"]);

            // Add schema by using same schema name
            stitchingBuilder.AddSchemaFromHttp(schemaName);

            // Add extensions (for types that get stitched in from this service)
            stitchingBuilder.AddExtensionsFromFileForService(serviceName, env);

            return(stitchingBuilder);
        }
示例#15
0
        public static IStitchingBuilder AddExtensionsFromString(
            this IStitchingBuilder builder,
            string extensions)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (string.IsNullOrEmpty(extensions))
            {
                throw new ArgumentException(
                          StitchingResources.Extensions_EmptyOrNull,
                          nameof(extensions));
            }

            builder.AddExtensions(s => Parser.Default.Parse(extensions));
            return(builder);
        }
示例#16
0
        public static IStitchingBuilder AddExtensionsFromFile(
            this IStitchingBuilder builder,
            string path)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentException(
                          StitchingResources.ExtensionsFilePath_EmptyOrNull,
                          nameof(path));
            }

            builder.AddExtensions(s =>
                                  Parser.Default.Parse(
                                      File.ReadAllText(path)));
            return(builder);
        }
示例#17
0
        public static IStitchingBuilder AddSchemaFromHttp(
            this IStitchingBuilder builder,
            NameString name)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            name.EnsureNotEmpty(nameof(name));

            builder.AddSchema(name, s =>
            {
                HttpClient httpClient =
                    s.GetRequiredService <IHttpClientFactory>()
                    .CreateClient(name);
                return(IntrospectionClient.LoadSchema(httpClient));
            });

            return(builder);
        }
示例#18
0
        public static IStitchingBuilder AddSchema(
            this IStitchingBuilder builder,
            NameString name,
            ISchema schema)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (schema == null)
            {
                throw new ArgumentNullException(nameof(schema));
            }

            name.EnsureNotEmpty(nameof(name));

            builder.AddQueryExecutor(name, s => schema.MakeExecutable());

            return(builder);
        }
示例#19
0
        public static IStitchingBuilder AddSchemaFromString(
            this IStitchingBuilder builder,
            NameString name,
            string schema)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (string.IsNullOrEmpty(schema))
            {
                throw new ArgumentException(
                          StitchingResources.Schema_EmptyOrNull,
                          nameof(schema));
            }

            name.EnsureNotEmpty(nameof(name));

            builder.AddSchema(name, s => Parser.Default.Parse(schema));
            return(builder);
        }
示例#20
0
        public static IStitchingBuilder AddSchemaFromFile(
            this IStitchingBuilder builder,
            NameString name,
            string path)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentException(
                          StitchingResources.SchemaFilePath_EmptyOrNull,
                          nameof(path));
            }

            name.EnsureNotEmpty(nameof(name));

            builder.AddSchema(name, s =>
                              Utf8GraphQLParser.Parse(File.ReadAllBytes(path)));
            return(builder);
        }
示例#21
0
 public static IStitchingBuilder AddMergeHandler <T>(
     this IStitchingBuilder builder)
     where T : class, ITypeMergeHandler =>
 AddTypeMergeHandler <T>(builder);