diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8cf5bb60e..abef3617f 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -23,8 +23,8 @@ public static class OpenApiService public static void ProcessOpenApiDocument( string input, FileInfo output, - OpenApiSpecVersion version, - OpenApiFormat format, + OpenApiSpecVersion? version, + OpenApiFormat? format, string filterByOperationIds, string filterByTags, string filterByCollection, @@ -101,13 +101,16 @@ public static void ProcessOpenApiDocument( { ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences }; - IOpenApiWriter writer = format switch + + var openApiFormat = format ?? GetOpenApiFormat(input); + var openApiVersion = version ?? result.OpenApiDiagnostic.SpecificationVersion; + IOpenApiWriter writer = openApiFormat switch { OpenApiFormat.Json => new OpenApiJsonWriter(textWriter, settings), OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), _ => throw new ArgumentException("Unknown format"), }; - document.Serialize(writer, version); + document.Serialize(writer, openApiVersion); textWriter.Flush(); } @@ -198,5 +201,10 @@ internal static void ValidateOpenApiDocument(string input) Console.WriteLine(statsVisitor.GetStatisticsReport()); } + + private static OpenApiFormat GetOpenApiFormat(string input) + { + return !input.StartsWith("http") && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; + } } } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 099eb70df..b3752ef97 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -33,7 +33,7 @@ static async Task Main(string[] args) new Option("--filterByTags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)), new Option("--filterByCollection", "Filters OpenApiDocument by Postman collection provided", typeof(string)) }; - transformCommand.Handler = CommandHandler.Create( + transformCommand.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); rootCommand.Add(transformCommand); diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index cb2a133cf..f700fee15 100755 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -959,7 +959,6 @@ namespace Microsoft.OpenApi.Services public static Microsoft.OpenApi.Models.OpenApiDocument CreateFilteredDocument(Microsoft.OpenApi.Models.OpenApiDocument source, System.Func predicate) { } public static Microsoft.OpenApi.Services.OpenApiUrlTreeNode CreateOpenApiUrlTreeNode(System.Collections.Generic.Dictionary sources) { } public static System.Func CreatePredicate(string operationIds = null, string tags = null, System.Collections.Generic.Dictionary> requestUrls = null, Microsoft.OpenApi.Models.OpenApiDocument source = null) { } - public static System.Collections.Generic.Dictionary> ParseJsonCollectionFile(System.IO.Stream stream) { } } public class OpenApiReferenceError : Microsoft.OpenApi.Models.OpenApiError {