public static async Task GenerateGraphQlClient(string url, string targetFileName, string @namespace) { var schema = await GraphQlGenerator.RetrieveSchema(url); var builder = new StringBuilder(); GraphQlGenerator.GenerateQueryBuilder(schema, builder); builder.AppendLine(); builder.AppendLine(); GraphQlGenerator.GenerateDataClasses(schema, builder); using (var writer = File.CreateText(targetFileName)) { writer.WriteLine(GraphQlGenerator.RequiredNamespaces); writer.WriteLine(); writer.WriteLine($"namespace {@namespace}"); writer.WriteLine("{"); var indentedLines = builder .ToString() .Split(new[] { Environment.NewLine }, StringSplitOptions.None) .Select(l => $" {l}"); foreach (var line in indentedLines) { writer.WriteLine(line); } writer.WriteLine("}"); } }
public static async Task <IReadOnlyCollection <FileInfo> > GenerateClientSourceCode(ProgramOptions options) { var schema = await GraphQlGenerator.RetrieveSchema(options.ServiceUrl, options.Authorization); var generatorConfiguration = new GraphQlGeneratorConfiguration { CSharpVersion = options.CSharpVersion, ClassPostfix = options.ClassPostfix, GeneratePartialClasses = options.PartialClasses, MemberAccessibility = options.MemberAccessibility, IdTypeMapping = options.IdTypeMapping }; var generator = new GraphQlGenerator(generatorConfiguration); if (options.OutputType == OutputType.SingleFile) { await File.WriteAllTextAsync(options.OutputPath, generator.GenerateFullClientCSharpFile(schema, options.Namespace)); return(new[] { new FileInfo(options.OutputPath) }); } var multipleFileGenerationContext = new MultipleFileGenerationContext(schema, options.OutputPath, options.Namespace); generator.Generate(multipleFileGenerationContext); return(multipleFileGenerationContext.Files); }
public static async Task <FileInfo> GenerateClientCSharpFile(string url, string targetFileName, string @namespace) { var schema = await GraphQlGenerator.RetrieveSchema(url); await File.WriteAllTextAsync(targetFileName, GraphQlGenerator.GenerateFullClientCSharpFile(schema, @namespace)); return(new FileInfo(targetFileName)); }
private static async Task GenerateClientSourceCode(ProgramOptions options, List <FileInfo> generatedFiles) { GraphQlSchema schema; if (String.IsNullOrWhiteSpace(options.ServiceUrl)) { schema = GraphQlGenerator.DeserializeGraphQlSchema(await File.ReadAllTextAsync(options.SchemaFileName)); } else { if (!KeyValueParameterParser.TryGetCustomHeaders(options.Header, out var headers, out var headerParsingErrorMessage)) { throw new InvalidOperationException(headerParsingErrorMessage); } schema = await GraphQlGenerator.RetrieveSchema(new HttpMethod(options.HttpMethod), options.ServiceUrl, headers); } var generatorConfiguration = new GraphQlGeneratorConfiguration { CSharpVersion = options.CSharpVersion, ClassPrefix = options.ClassPrefix, ClassSuffix = options.ClassSuffix, GeneratePartialClasses = options.PartialClasses, MemberAccessibility = options.MemberAccessibility, IdTypeMapping = options.IdTypeMapping, FloatTypeMapping = options.FloatTypeMapping, JsonPropertyGeneration = options.JsonPropertyAttribute }; if (!KeyValueParameterParser.TryGetCustomClassMapping(options.ClassMapping, out var customMapping, out var customMappingParsingErrorMessage)) { throw new InvalidOperationException(customMappingParsingErrorMessage); } foreach (var kvp in customMapping) { generatorConfiguration.CustomClassNameMapping.Add(kvp); } var generator = new GraphQlGenerator(generatorConfiguration); if (options.OutputType == OutputType.SingleFile) { await File.WriteAllTextAsync(options.OutputPath, generator.GenerateFullClientCSharpFile(schema, options.Namespace)); generatedFiles.Add(new FileInfo(options.OutputPath)); } else { var multipleFileGenerationContext = new MultipleFileGenerationContext(schema, options.OutputPath, options.Namespace); generator.Generate(multipleFileGenerationContext); generatedFiles.AddRange(multipleFileGenerationContext.Files); } }
private static async Task <GraphQlSchema> ReadAsyncCore(string schemaUriOrPath) { Console.WriteLine($"reading schema from {schemaUriOrPath}"); var file = new FileInfo(schemaUriOrPath); var schema = file.Exists ? FromFile(file) : await GraphQlGenerator.RetrieveSchema(schemaUriOrPath).ConfigureAwait(false) ; if (schema is null) { throw new InvalidOperationException($"failed to deserialize {file.FullName} to a GraphQlSchema"); } return(schema); }
public async Task GenerateAsync() { var schema = await GraphQlGenerator.RetrieveSchema("https://*****:*****@"C:\projects\SuSoClient\Repository\src\SurveySolutionsClient\Graphql.cs", csharpCode); }
public static void GenerateGraphQlClient(string url, string targetFileName, string @namespace) { var schema = GraphQlGenerator.RetrieveSchema(url).Result; var builder = new StringBuilder(); GraphQlGenerator.GenerateQueryBuilder(schema, builder); builder.AppendLine(); builder.AppendLine(); GraphQlGenerator.GenerateDataClasses(schema, builder); using (var writer = File.CreateText(targetFileName)) { writer.WriteLine("using System;"); writer.WriteLine("using System.Collections.Generic;"); writer.WriteLine("using System.Globalization;"); writer.WriteLine("using System.Linq;"); writer.WriteLine("using System.Reflection;"); writer.WriteLine("using System.Runtime.Serialization;"); writer.WriteLine("using System.Text;"); writer.WriteLine(); writer.WriteLine($"namespace {@namespace}"); writer.WriteLine("{"); var indentedLines = builder .ToString() .Split(new[] { Environment.NewLine }, StringSplitOptions.None) .Select(l => $" {l}"); foreach (var line in indentedLines) { writer.WriteLine(line); } writer.WriteLine("}"); } }
public static void Start(Options options) { if (!options.OutputPath.Exists()) { options.OutputPath.CreateDirectory(); } else { options.OutputPath.ResetDirectory(); } var schema = GraphQlGenerator.RetrieveSchema(options.Url).Result; if (options.GenerateMultipleFiles) { schema.CreateQueryBuilder(options); schema.CreateDataClasses(options); } else { GraphQlCSharpFileHelper.GenerateGraphQlClient(options.Url, $"{options.OutputPath}\\GraphQlClient.cs", options.TopNamespace); } }
public static async Task <IReadOnlyCollection <FileInfo> > GenerateClientSourceCode(ProgramOptions options) { var isServiceUrlMissing = String.IsNullOrWhiteSpace(options.ServiceUrl); if (isServiceUrlMissing && String.IsNullOrWhiteSpace(options.SchemaFileName)) { System.Console.WriteLine("ERROR: Either \"serviceUrl\" or \"schemaFileName\" parameter must be specified. "); Environment.Exit(4); } if (!isServiceUrlMissing && !String.IsNullOrWhiteSpace(options.SchemaFileName)) { System.Console.WriteLine("ERROR: \"serviceUrl\" and \"schemaFileName\" parameters are mutually exclusive. "); Environment.Exit(5); } GraphQlSchema schema; if (isServiceUrlMissing) { schema = GraphQlGenerator.DeserializeGraphQlSchema(await File.ReadAllTextAsync(options.SchemaFileName)); } else { if (!KeyValueParameterParser.TryGetCustomHeaders(options.Headers, out var headers, out var headerParsingErrorMessage)) { System.Console.WriteLine("ERROR: " + headerParsingErrorMessage); Environment.Exit(3); } schema = await GraphQlGenerator.RetrieveSchema(options.ServiceUrl, headers); } var generatorConfiguration = new GraphQlGeneratorConfiguration { CSharpVersion = options.CSharpVersion, ClassPrefix = options.ClassPrefix, ClassSuffix = options.ClassSuffix, GeneratePartialClasses = options.PartialClasses, MemberAccessibility = options.MemberAccessibility, IdTypeMapping = options.IdTypeMapping, FloatTypeMapping = options.FloatTypeMapping, JsonPropertyGeneration = options.JsonPropertyAttribute }; if (!KeyValueParameterParser.TryGetCustomClassMapping(options.ClassMapping, out var customMapping, out var customMappingParsingErrorMessage)) { System.Console.WriteLine("ERROR: " + customMappingParsingErrorMessage); Environment.Exit(3); } foreach (var kvp in customMapping) { generatorConfiguration.CustomClassNameMapping.Add(kvp); } var generator = new GraphQlGenerator(generatorConfiguration); if (options.OutputType == OutputType.SingleFile) { await File.WriteAllTextAsync(options.OutputPath, generator.GenerateFullClientCSharpFile(schema, options.Namespace)); return(new[] { new FileInfo(options.OutputPath) }); } var multipleFileGenerationContext = new MultipleFileGenerationContext(schema, options.OutputPath, options.Namespace); generator.Generate(multipleFileGenerationContext); return(multipleFileGenerationContext.Files); }