コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
    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;
    }
コード例 #5
0
        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();
            }
        }
コード例 #6
0
        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();
        }
コード例 #7
0
 private static GenerationContext CreateGenerationContext(
     StringBuilder builder,
     GraphQlSchema schema,
     GeneratedObjectType options = GeneratedObjectType.QueryBuilders | GeneratedObjectType.DataClasses) =>
 new SingleFileGenerationContext(schema, new StringWriter(builder), options);
コード例 #8
0
 static GraphQlGeneratorTest()
 {
     TestSchema = JsonConvert.DeserializeObject <GraphQlResult>(GetTestResource("TestSchema"), GraphQlGenerator.SerializerSettings).Data.Schema;
 }
コード例 #9
0
 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);
 }
コード例 #10
0
ファイル: SchemaConverter.cs プロジェクト: earloc/QLeatherMan
 internal static void WriteFileAsync(string simpleName, GraphQlSchema schema)
 {
     File.WriteAllText($"{simpleName}.{MyFileExtension}", JsonConvert.SerializeObject(schema, SerializerSettings));
 }
コード例 #11
0
 private static GenerationContext CreateGenerationContext(
     StringBuilder builder,
     GraphQlSchema schema,
     GeneratedObjectType objectTypes = GeneratedObjectType.All) =>
 new SingleFileGenerationContext(schema, new StringWriter(builder), objectTypes);