public async Task GenerateAsync(GraphQlSchema schema, GeneratorContext context) { var infraTemplate = await _templateReader.ReadAsync("infra"); var infraView = await _templateBuilder.BuildAsync( infraTemplate, new { context.Namespace }); var partials = await ResolveTemplatesAsync("dto", "builder", "builder-method-args", "builder-method-object", "builder-method-scalar"); var clientTemplate = await _templateReader.ReadAsync("client"); var clientView = await _templateBuilder.BuildAsync( clientTemplate, new { context.Namespace, context.MainClientFactoryClassName, context.AdditionalClientUsing, context.GenerateDocs, context.GenerateInputObjectConstructor, schema, }, partials); var result = string.Join(Environment.NewLine, clientView, infraView); await _writer.WriteAsync(result); }
private void ShowDiff(GraphQlSchema from, GraphQlSchema to) { var fromTypes = from.Types.ToDictionary(x => x.Name); var toTypes = to.Types.ToDictionary(x => x.Name); CompareTypes(fromTypes, toTypes); CompareFields(fromTypes, toTypes); var comparisonReport = diff.ToMarkdown(options.From, options.To); if (!(options.ReportMarkdownPath is null)) { File.WriteAllText(options.ReportMarkdownPath, comparisonReport); } if (diff.HasBreakingChanges) { Console.Error.WriteLine($"looks like {options.To} introduces breaking-changes from {options.From}"); } if (!options.Silent) { Console.WriteLine(comparisonReport); } }
public async Task GenerateAsync(GraphQlSchema schema, IGeneratorWriterFactory writerFactory, GeneratorContext context) { using (var writer = await writerFactory.CreateAsync(context.WriterName)) { var generatorWriter = new GeneratorWriter( new ResourcesTemplateReader(), new HandlebarsTemplateBuilder(context), writer); await generatorWriter.GenerateAsync(schema, context); } }
protected GenerationContext(GraphQlSchema schema, GeneratedObjectType objectTypes, byte indentationSize) { var optionsInteger = (int)objectTypes; if (optionsInteger is < 1 or > 7) { throw new ArgumentException("invalid value", nameof(objectTypes)); } Schema = schema ?? throw new ArgumentNullException(nameof(schema)); ObjectTypes = objectTypes; Indentation = indentationSize; }
public static void CreateDataClasses(this GraphQlSchema schema, Options options) { var dataClassesPath = $"{options.OutputPath}\\Models"; dataClassesPath.CreateDirectory(); var objectTypes = schema.Types.Where(t => t.Kind == GraphQlGenerator.GraphQlTypeKindObject && !t.Name.StartsWith("__")).ToArray(); foreach (var graphQlType in objectTypes) { StringBuilder classBuilder = new StringBuilder(); GraphQlGenerator.GenerateDataClass(graphQlType, classBuilder); classBuilder.AppendLine(); var filePath = $"{dataClassesPath}\\{graphQlType.Name}.cs"; var file = filePath.CreateTextFile(); CreateCsContent(file, $"{options.TopNamespace}.Models", classBuilder.IndentLines()); file.Flush(); file.Close(); } }
public static void CreateQueryBuilder(this GraphQlSchema schema, Options options) { var queryBuilderPath = $"{options.OutputPath}\\Builders"; queryBuilderPath.CreateDirectory(); var filePath = $"{queryBuilderPath}\\QueryQueryBuilder.cs"; var file = filePath.CreateTextFile(); var builder = new StringBuilder(); GraphQlGenerator.GenerateQueryBuilder(schema, builder); builder.AppendLine(); builder.AppendLine(); var indentedLines = builder.IndentLines(); CreateCsContent(file, $"{options.TopNamespace}.Builders", indentedLines); file.Flush(); file.Close(); }
private static GenerationContext CreateGenerationContext( StringBuilder builder, GraphQlSchema schema, GeneratedObjectType options = GeneratedObjectType.QueryBuilders | GeneratedObjectType.DataClasses) => new SingleFileGenerationContext(schema, new StringWriter(builder), options);
static GraphQlGeneratorTest() { TestSchema = JsonConvert.DeserializeObject <GraphQlResult>(GetTestResource("TestSchema"), GraphQlGenerator.SerializerSettings).Data.Schema; }
public SingleFileGenerationContext(GraphQlSchema schema, TextWriter writer, GeneratedObjectType objectTypes = GeneratedObjectType.All, byte indentationSize = 0) : base(schema, objectTypes, indentationSize) { Writer = writer ?? throw new ArgumentNullException(nameof(writer)); _indentation = new String(' ', indentationSize); }
internal static void WriteFileAsync(string simpleName, GraphQlSchema schema) { File.WriteAllText($"{simpleName}.{MyFileExtension}", JsonConvert.SerializeObject(schema, SerializerSettings)); }
private static GenerationContext CreateGenerationContext( StringBuilder builder, GraphQlSchema schema, GeneratedObjectType objectTypes = GeneratedObjectType.All) => new SingleFileGenerationContext(schema, new StringWriter(builder), objectTypes);