From 24dcddfc88125db8fc0ba6f0a3b114e17dedc8d8 Mon Sep 17 00:00:00 2001 From: darrelmiller Date: Mon, 20 Jan 2020 16:59:14 -0500 Subject: [PATCH 001/720] Initial implementation of OpenAPI cmdline tool --- .../Microsoft.OpenApi.Tool.csproj | 20 +++++++ src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 59 +++++++++++++++++++ src/Microsoft.OpenApi.Hidi/Program.cs | 50 ++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj create mode 100644 src/Microsoft.OpenApi.Hidi/OpenApiService.cs create mode 100644 src/Microsoft.OpenApi.Hidi/Program.cs diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj new file mode 100644 index 00000000..5ac8d8e1 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -0,0 +1,20 @@ + + + + Exe + netcoreapp3.1 + true + openapi + ./../../artifacts + + + + + + + + + + + + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs new file mode 100644 index 00000000..0f0c8039 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Readers; +using Microsoft.OpenApi.Validations; +using Microsoft.OpenApi.Writers; + +namespace Microsoft.OpenApi.Tool +{ + static class OpenApiService + { + public static void ProcessOpenApiDocument( + FileInfo fileOption, + string outputPath, + OpenApiSpecVersion version, + OpenApiFormat format, + bool inline = false) + { + Stream stream = fileOption.OpenRead(); + + var document = new OpenApiStreamReader(new OpenApiReaderSettings + { + ReferenceResolution = ReferenceResolutionSetting.ResolveLocalReferences, + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).Read(stream, out var context); + + if (context.Errors.Count != 0) + { + var errorReport = new StringBuilder(); + + foreach (var error in context.Errors) + { + errorReport.AppendLine(error.ToString()); + } + + throw new ArgumentException(String.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); + } + + using (var outputStream = new FileStream(outputPath, FileMode.Create)) + { + document.Serialize( + outputStream, + version, + format, + new OpenApiWriterSettings() + { + ReferenceInline = inline == true ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences + }); + + outputStream.Position = 0; + outputStream.Flush(); + } + } +} +} diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs new file mode 100644 index 00000000..ce0296b2 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -0,0 +1,50 @@ +using System; +using System.CommandLine; +using System.CommandLine.Invocation; +using System.IO; +using Microsoft.OpenApi; + +namespace Microsoft.OpenApi.Tool +{ + class Program + { + static int Main(string[] args) + { + var rootCommand = new RootCommand + { + new Option( + "--input", + "Input OpenAPI description") + { + Argument = new Argument() + }, + new Option( + "--output", + "Output path for OpenAPI Description") + { + Argument = new Argument() + }, + new Option( + "--output-version", + "OpenAPI Version") + { + Argument = new Argument(() => OpenApiSpecVersion.OpenApi3_0) + }, + new Option( + "--output-format", + "OpenAPI format [Json | Yaml") + { + Argument = new Argument(() => OpenApiFormat.Yaml ) + } + }; + + rootCommand.Description = "OpenAPI"; + + rootCommand.Handler = CommandHandler.Create( + OpenApiService.ProcessOpenApiDocument); + + // Parse the incoming args and invoke the handler + return rootCommand.InvokeAsync(args).Result; + } + } +} From 840d593fefce95473c3903e5889d0d379c685a62 Mon Sep 17 00:00:00 2001 From: darrelmiller Date: Mon, 20 Jan 2020 23:07:04 -0500 Subject: [PATCH 002/720] First running version of OpenApi tool --- .../Microsoft.OpenApi.Tool.csproj | 1 + src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 56 +++++++++++++------ src/Microsoft.OpenApi.Hidi/Program.cs | 42 ++++---------- 3 files changed, 51 insertions(+), 48 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj index 5ac8d8e1..0fda71fa 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -6,6 +6,7 @@ true openapi ./../../artifacts + 0.5.0 diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 0f0c8039..7a8e8ced 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; @@ -13,21 +14,22 @@ namespace Microsoft.OpenApi.Tool static class OpenApiService { public static void ProcessOpenApiDocument( - FileInfo fileOption, - string outputPath, + FileInfo input, + FileInfo output, OpenApiSpecVersion version, OpenApiFormat format, - bool inline = false) + bool inline) { - Stream stream = fileOption.OpenRead(); + OpenApiDocument document; + using (Stream stream = input.OpenRead()) + { - var document = new OpenApiStreamReader(new OpenApiReaderSettings + document = new OpenApiStreamReader(new OpenApiReaderSettings { ReferenceResolution = ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet() } ).Read(stream, out var context); - if (context.Errors.Count != 0) { var errorReport = new StringBuilder(); @@ -38,21 +40,41 @@ public static void ProcessOpenApiDocument( } throw new ArgumentException(String.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); + } } - using (var outputStream = new FileStream(outputPath, FileMode.Create)) + using (var outputStream = output?.Create()) { - document.Serialize( - outputStream, - version, - format, - new OpenApiWriterSettings() - { - ReferenceInline = inline == true ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences - }); + TextWriter textWriter; + + if (outputStream!=null) + { + textWriter = new StreamWriter(outputStream); + } else + { + textWriter = Console.Out; + } + + var settings = new OpenApiWriterSettings() + { + ReferenceInline = inline == true ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences + }; + IOpenApiWriter writer; + switch (format) + { + case OpenApiFormat.Json: + writer = new OpenApiJsonWriter(textWriter, settings); + break; + case OpenApiFormat.Yaml: + writer = new OpenApiYamlWriter(textWriter, settings); + break; + default: + throw new ArgumentException("Unknown format"); + } + + document.Serialize(writer,version ); - outputStream.Position = 0; - outputStream.Flush(); + textWriter.Flush(); } } } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index ce0296b2..3d229c41 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -2,49 +2,29 @@ using System.CommandLine; using System.CommandLine.Invocation; using System.IO; +using System.Threading.Tasks; using Microsoft.OpenApi; namespace Microsoft.OpenApi.Tool { class Program { - static int Main(string[] args) + static async Task Main(string[] args) { - var rootCommand = new RootCommand + var command = new RootCommand { - new Option( - "--input", - "Input OpenAPI description") - { - Argument = new Argument() - }, - new Option( - "--output", - "Output path for OpenAPI Description") - { - Argument = new Argument() - }, - new Option( - "--output-version", - "OpenAPI Version") - { - Argument = new Argument(() => OpenApiSpecVersion.OpenApi3_0) - }, - new Option( - "--output-format", - "OpenAPI format [Json | Yaml") - { - Argument = new Argument(() => OpenApiFormat.Yaml ) - } + new Option("--input") { Argument = new Argument() }, + new Option("--output") { Argument = new Argument() }, + new Option("--version") { Argument = new Argument() }, + new Option("--format") { Argument = new Argument() }, + new Option("--inline") { Argument = new Argument() } }; - rootCommand.Description = "OpenAPI"; - - rootCommand.Handler = CommandHandler.Create( - OpenApiService.ProcessOpenApiDocument); + command.Handler = CommandHandler.Create( + OpenApiService.ProcessOpenApiDocument); // Parse the incoming args and invoke the handler - return rootCommand.InvokeAsync(args).Result; + return await command.InvokeAsync(args); } } } From 12092c7b399b67840ac9ec2b28bd7071602566d5 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Fri, 6 Mar 2020 10:50:24 -0600 Subject: [PATCH 003/720] Updated nuget packages --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj index 0fda71fa..f8f1eab1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -10,7 +10,7 @@ - + @@ -18,4 +18,8 @@ + + + + From 86ee5a1b35a376a274bff8f97ee6294cec530fba Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Fri, 6 Mar 2020 11:46:05 -0600 Subject: [PATCH 004/720] Moved commandline tool to .net core 3.0 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj index f8f1eab1..aa22d5fd 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + netcoreapp3.0 true openapi ./../../artifacts From 7d4e6862a2381c5ce37bf553b4bb61ddaeb4ba4d Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Fri, 6 Mar 2020 11:47:49 -0600 Subject: [PATCH 005/720] Moved commandline tool to .net core 2.2 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj index aa22d5fd..5d6f1246 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.0 + netcoreapp2.2 true openapi ./../../artifacts From 63e40505d7e3b95d70c5564623e78d673f469f87 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Fri, 6 Mar 2020 17:19:46 -0600 Subject: [PATCH 006/720] Put commandline tool back to 3.1 now that pipeline has new Nuget --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj index 5d6f1246..f8f1eab1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.2 + netcoreapp3.1 true openapi ./../../artifacts From bceed5bb816d21333f6459e2b687a8ac2a6161dc Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 17 May 2020 14:12:42 -0400 Subject: [PATCH 007/720] Merged vnext --- .../Microsoft.OpenApi.Tool.csproj | 25 ++++++ src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 81 +++++++++++++++++++ src/Microsoft.OpenApi.Hidi/Program.cs | 30 +++++++ 3 files changed, 136 insertions(+) create mode 100644 src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj create mode 100644 src/Microsoft.OpenApi.Hidi/OpenApiService.cs create mode 100644 src/Microsoft.OpenApi.Hidi/Program.cs diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj new file mode 100644 index 00000000..f8f1eab1 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -0,0 +1,25 @@ + + + + Exe + netcoreapp3.1 + true + openapi + ./../../artifacts + 0.5.0 + + + + + + + + + + + + + + + + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs new file mode 100644 index 00000000..7a8e8ced --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Readers; +using Microsoft.OpenApi.Validations; +using Microsoft.OpenApi.Writers; + +namespace Microsoft.OpenApi.Tool +{ + static class OpenApiService + { + public static void ProcessOpenApiDocument( + FileInfo input, + FileInfo output, + OpenApiSpecVersion version, + OpenApiFormat format, + bool inline) + { + OpenApiDocument document; + using (Stream stream = input.OpenRead()) + { + + document = new OpenApiStreamReader(new OpenApiReaderSettings + { + ReferenceResolution = ReferenceResolutionSetting.ResolveLocalReferences, + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).Read(stream, out var context); + if (context.Errors.Count != 0) + { + var errorReport = new StringBuilder(); + + foreach (var error in context.Errors) + { + errorReport.AppendLine(error.ToString()); + } + + throw new ArgumentException(String.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); + } + } + + using (var outputStream = output?.Create()) + { + TextWriter textWriter; + + if (outputStream!=null) + { + textWriter = new StreamWriter(outputStream); + } else + { + textWriter = Console.Out; + } + + var settings = new OpenApiWriterSettings() + { + ReferenceInline = inline == true ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences + }; + IOpenApiWriter writer; + switch (format) + { + case OpenApiFormat.Json: + writer = new OpenApiJsonWriter(textWriter, settings); + break; + case OpenApiFormat.Yaml: + writer = new OpenApiYamlWriter(textWriter, settings); + break; + default: + throw new ArgumentException("Unknown format"); + } + + document.Serialize(writer,version ); + + textWriter.Flush(); + } + } +} +} diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs new file mode 100644 index 00000000..3d229c41 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -0,0 +1,30 @@ +using System; +using System.CommandLine; +using System.CommandLine.Invocation; +using System.IO; +using System.Threading.Tasks; +using Microsoft.OpenApi; + +namespace Microsoft.OpenApi.Tool +{ + class Program + { + static async Task Main(string[] args) + { + var command = new RootCommand + { + new Option("--input") { Argument = new Argument() }, + new Option("--output") { Argument = new Argument() }, + new Option("--version") { Argument = new Argument() }, + new Option("--format") { Argument = new Argument() }, + new Option("--inline") { Argument = new Argument() } + }; + + command.Handler = CommandHandler.Create( + OpenApiService.ProcessOpenApiDocument); + + // Parse the incoming args and invoke the handler + return await command.InvokeAsync(args); + } + } +} From e1087ef67b1e4b6b016155cf0be457a0f6e9f7f1 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 14 Mar 2021 16:20:42 -0400 Subject: [PATCH 008/720] Updated version and added extenalReference support to commandline tool --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj | 4 ++-- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 +++-- src/Microsoft.OpenApi.Hidi/Program.cs | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj index f8f1eab1..5845ce4f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -6,11 +6,11 @@ true openapi ./../../artifacts - 0.5.0 + 1.3.0-preview - + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 7a8e8ced..fd42da1a 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -18,7 +18,8 @@ public static void ProcessOpenApiDocument( FileInfo output, OpenApiSpecVersion version, OpenApiFormat format, - bool inline) + bool inline, + bool resolveExternal) { OpenApiDocument document; using (Stream stream = input.OpenRead()) @@ -26,7 +27,7 @@ public static void ProcessOpenApiDocument( document = new OpenApiStreamReader(new OpenApiReaderSettings { - ReferenceResolution = ReferenceResolutionSetting.ResolveLocalReferences, + ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet() } ).Read(stream, out var context); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 3d229c41..2c95b954 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -17,10 +17,11 @@ static async Task Main(string[] args) new Option("--output") { Argument = new Argument() }, new Option("--version") { Argument = new Argument() }, new Option("--format") { Argument = new Argument() }, - new Option("--inline") { Argument = new Argument() } + new Option("--inline") { Argument = new Argument() }, + new Option("--resolveExternal") { Argument = new Argument() } }; - command.Handler = CommandHandler.Create( + command.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); // Parse the incoming args and invoke the handler From e6e433e1a79b330abd291aa439353b65345bcd20 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 17 May 2021 09:52:02 -0400 Subject: [PATCH 009/720] Enhanced tool to support validation --- .../Microsoft.OpenApi.Tool.csproj | 6 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 109 ++++++++++++++---- src/Microsoft.OpenApi.Hidi/Program.cs | 47 ++++++-- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 91 +++++++++++++++ 4 files changed, 220 insertions(+), 33 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/StatsVisitor.cs diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj index 5845ce4f..40e46f1a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj @@ -4,13 +4,13 @@ Exe netcoreapp3.1 true - openapi + openapi-parser ./../../artifacts 1.3.0-preview - + @@ -19,7 +19,7 @@ - + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index fd42da1a..e65e51ac 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -2,10 +2,13 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Net; +using System.Net.Http; using System.Text; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; +using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; @@ -14,48 +17,54 @@ namespace Microsoft.OpenApi.Tool static class OpenApiService { public static void ProcessOpenApiDocument( - FileInfo input, + string input, FileInfo output, OpenApiSpecVersion version, OpenApiFormat format, bool inline, bool resolveExternal) { + if (input == null) + { + throw new ArgumentNullException("input"); + } + + var stream = GetStream(input); + OpenApiDocument document; - using (Stream stream = input.OpenRead()) + + document = new OpenApiStreamReader(new OpenApiReaderSettings { + ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).Read(stream, out var context); - document = new OpenApiStreamReader(new OpenApiReaderSettings + if (context.Errors.Count != 0) + { + var errorReport = new StringBuilder(); + + foreach (var error in context.Errors) { - ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, - RuleSet = ValidationRuleSet.GetDefaultRuleSet() + errorReport.AppendLine(error.ToString()); } - ).Read(stream, out var context); - if (context.Errors.Count != 0) - { - var errorReport = new StringBuilder(); - foreach (var error in context.Errors) - { - errorReport.AppendLine(error.ToString()); - } - - throw new ArgumentException(String.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); - } + throw new ArgumentException(String.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); } using (var outputStream = output?.Create()) { TextWriter textWriter; - if (outputStream!=null) + if (outputStream != null) { textWriter = new StreamWriter(outputStream); - } else + } + else { textWriter = Console.Out; } - + var settings = new OpenApiWriterSettings() { ReferenceInline = inline == true ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences @@ -72,11 +81,67 @@ public static void ProcessOpenApiDocument( default: throw new ArgumentException("Unknown format"); } - - document.Serialize(writer,version ); + + document.Serialize(writer, version); textWriter.Flush(); } } -} + + private static Stream GetStream(string input) + { + Stream stream; + if (input.StartsWith("http")) + { + var httpClient = new HttpClient(new HttpClientHandler() + { + SslProtocols = System.Security.Authentication.SslProtocols.Tls12, + }) + { + DefaultRequestVersion = HttpVersion.Version20 + }; + stream = httpClient.GetStreamAsync(input).Result; + } + else + { + var fileInput = new FileInfo(input); + stream = fileInput.OpenRead(); + } + + return stream; + } + + internal static void ValidateOpenApiDocument(string input) + { + if (input == null) + { + throw new ArgumentNullException("input"); + } + + var stream = GetStream(input); + + OpenApiDocument document; + + document = new OpenApiStreamReader(new OpenApiReaderSettings + { + //ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).Read(stream, out var context); + + if (context.Errors.Count != 0) + { + foreach (var error in context.Errors) + { + Console.WriteLine(error.ToString()); + } + } + + var statsVisitor = new StatsVisitor(); + var walker = new OpenApiWalker(statsVisitor); + walker.Walk(document); + + Console.WriteLine(statsVisitor.GetStatisticsReport()); + } + } } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 2c95b954..446e2829 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -9,23 +9,54 @@ namespace Microsoft.OpenApi.Tool { class Program { - static async Task Main(string[] args) + static async Task OldMain(string[] args) { + var command = new RootCommand { - new Option("--input") { Argument = new Argument() }, - new Option("--output") { Argument = new Argument() }, - new Option("--version") { Argument = new Argument() }, - new Option("--format") { Argument = new Argument() }, - new Option("--inline") { Argument = new Argument() }, - new Option("--resolveExternal") { Argument = new Argument() } + new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ), + new Option("--output","Output OpenAPI description file", typeof(FileInfo), arity: ArgumentArity.ZeroOrOne), + new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), + new Option("--format", "File format",typeof(OpenApiFormat) ), + new Option("--inline", "Inline $ref instances", typeof(bool) ), + new Option("--resolveExternal","Resolve external $refs", typeof(bool)) }; - command.Handler = CommandHandler.Create( + command.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); // Parse the incoming args and invoke the handler return await command.InvokeAsync(args); } + + static async Task Main(string[] args) + { + var rootCommand = new RootCommand() { + }; + + var validateCommand = new Command("validate") + { + new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ) + }; + validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); + + var transformCommand = new Command("transform") + { + new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ), + new Option("--output","Output OpenAPI description file", typeof(FileInfo), arity: ArgumentArity.ZeroOrOne), + new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), + new Option("--format", "File format",typeof(OpenApiFormat) ), + new Option("--inline", "Inline $ref instances", typeof(bool) ), + new Option("--resolveExternal","Resolve external $refs", typeof(bool)) + }; + transformCommand.Handler = CommandHandler.Create( + OpenApiService.ProcessOpenApiDocument); + + rootCommand.Add(transformCommand); + rootCommand.Add(validateCommand); + + // Parse the incoming args and invoke the handler + return await rootCommand.InvokeAsync(args); + } } } diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs new file mode 100644 index 00000000..3c633d86 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Services; + +namespace Microsoft.OpenApi.Tool +{ + internal class StatsVisitor : OpenApiVisitorBase + { + public int ParameterCount { get; set; } = 0; + + public override void Visit(OpenApiParameter parameter) + { + ParameterCount++; + } + + public int SchemaCount { get; set; } = 0; + + public override void Visit(OpenApiSchema schema) + { + SchemaCount++; + } + + public int HeaderCount { get; set; } = 0; + + public override void Visit(IDictionary headers) + { + HeaderCount++; + } + + public int PathItemCount { get; set; } = 0; + + public override void Visit(OpenApiPathItem pathItem) + { + PathItemCount++; + } + + public int RequestBodyCount { get; set; } = 0; + + public override void Visit(OpenApiRequestBody requestBody) + { + RequestBodyCount++; + } + + public int ResponseCount { get; set; } = 0; + + public override void Visit(OpenApiResponses response) + { + ResponseCount++; + } + + public int OperationCount { get; set; } = 0; + + public override void Visit(OpenApiOperation operation) + { + OperationCount++; + } + + public int LinkCount { get; set; } = 0; + + public override void Visit(OpenApiLink operation) + { + LinkCount++; + } + + public int CallbackCount { get; set; } = 0; + + public override void Visit(OpenApiCallback callback) + { + CallbackCount++; + } + + public string GetStatisticsReport() + { + return $"Path Items: {PathItemCount}" + Environment.NewLine + + $"Operations: {OperationCount}" + Environment.NewLine + + $"Parameters: {ParameterCount}" + Environment.NewLine + + $"Request Bodies: {RequestBodyCount}" + Environment.NewLine + + $"Responses: {ResponseCount}" + Environment.NewLine + + $"Links: {LinkCount}" + Environment.NewLine + + $"Callbacks: {CallbackCount}" + Environment.NewLine + + $"Schemas: {SchemaCount}" + Environment.NewLine; + } + } +} From f21bf1dd57da14d65b22aaadd616eedb7d6bb99f Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 22 May 2021 22:16:17 -0400 Subject: [PATCH 010/720] fix: Changed OpenAPI.Tool to use ReadAsync so it can resolve external refs --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index e65e51ac..c52c0894 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -33,12 +33,15 @@ public static void ProcessOpenApiDocument( OpenApiDocument document; - document = new OpenApiStreamReader(new OpenApiReaderSettings + var result = new OpenApiStreamReader(new OpenApiReaderSettings { ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet() } - ).Read(stream, out var context); + ).ReadAsync(stream).GetAwaiter().GetResult(); + + document = result.OpenApiDocument; + var context = result.OpenApiDiagnostic; if (context.Errors.Count != 0) { From e07d201f279314edbaff49597f036990b63d6d67 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 15 Aug 2021 13:34:03 -0400 Subject: [PATCH 011/720] Can validate external references now --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 71 +++++++++++++++----- src/Microsoft.OpenApi.Hidi/Program.cs | 5 +- 2 files changed, 57 insertions(+), 19 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c52c0894..3b3afcbd 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -5,6 +5,7 @@ using System.Net; using System.Net.Http; using System.Text; +using System.Threading.Tasks; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; @@ -29,14 +30,16 @@ public static void ProcessOpenApiDocument( throw new ArgumentNullException("input"); } - var stream = GetStream(input); + var inputUrl = GetInputUrl(input); + var stream = GetStream(inputUrl); OpenApiDocument document; var result = new OpenApiStreamReader(new OpenApiReaderSettings { ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, - RuleSet = ValidationRuleSet.GetDefaultRuleSet() + RuleSet = ValidationRuleSet.GetDefaultRuleSet(), + BaseUrl = new Uri(inputUrl.AbsoluteUri) } ).ReadAsync(stream).GetAwaiter().GetResult(); @@ -91,10 +94,22 @@ public static void ProcessOpenApiDocument( } } - private static Stream GetStream(string input) + private static Uri GetInputUrl(string input) { - Stream stream; if (input.StartsWith("http")) + { + return new Uri(input); + } + else + { + return new Uri("file://" + Path.GetFullPath(input)); + } + } + + private static Stream GetStream(Uri input) + { + Stream stream; + if (input.Scheme == "http" || input.Scheme == "https") { var httpClient = new HttpClient(new HttpClientHandler() { @@ -105,32 +120,40 @@ private static Stream GetStream(string input) }; stream = httpClient.GetStreamAsync(input).Result; } - else + else if (input.Scheme == "file") { - var fileInput = new FileInfo(input); + var fileInput = new FileInfo(input.AbsolutePath); stream = fileInput.OpenRead(); + } + else + { + throw new ArgumentException("Unrecognized exception"); } return stream; } - internal static void ValidateOpenApiDocument(string input) + internal static async Task ValidateOpenApiDocument(string input, bool resolveExternal) { if (input == null) { throw new ArgumentNullException("input"); } - - var stream = GetStream(input); + var inputUrl = GetInputUrl(input); + var stream = GetStream(GetInputUrl(input)); OpenApiDocument document; - document = new OpenApiStreamReader(new OpenApiReaderSettings + var result = await new OpenApiStreamReader(new OpenApiReaderSettings { - //ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, - RuleSet = ValidationRuleSet.GetDefaultRuleSet() + ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + RuleSet = ValidationRuleSet.GetDefaultRuleSet(), + BaseUrl = new Uri(inputUrl.AbsoluteUri) } - ).Read(stream, out var context); + ).ReadAsync(stream); + + document = result.OpenApiDocument; + var context = result.OpenApiDiagnostic; if (context.Errors.Count != 0) { @@ -140,11 +163,25 @@ internal static void ValidateOpenApiDocument(string input) } } - var statsVisitor = new StatsVisitor(); - var walker = new OpenApiWalker(statsVisitor); - walker.Walk(document); + if (document.Workspace == null) { + var statsVisitor = new StatsVisitor(); + var walker = new OpenApiWalker(statsVisitor); + walker.Walk(document); + Console.WriteLine(statsVisitor.GetStatisticsReport()); + } + else + { + foreach (var memberDocument in document.Workspace.Documents) + { + Console.WriteLine("Stats for " + memberDocument.Info.Title); + var statsVisitor = new StatsVisitor(); + var walker = new OpenApiWalker(statsVisitor); + walker.Walk(memberDocument); + Console.WriteLine(statsVisitor.GetStatisticsReport()); + } + } - Console.WriteLine(statsVisitor.GetStatisticsReport()); + } } } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 446e2829..0ae4cb78 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -36,9 +36,10 @@ static async Task Main(string[] args) var validateCommand = new Command("validate") { - new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ) + new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ), + new Option("--resolveExternal","Resolve external $refs", typeof(bool)) }; - validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); + validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); var transformCommand = new Command("transform") { From 8b1b8fa5106c90bc5be0ddd03c643c0fa3014520 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 12 Oct 2021 15:54:42 +0300 Subject: [PATCH 012/720] Simplify using statement and switch condition --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 49 +++++++------------- 1 file changed, 16 insertions(+), 33 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c52c0894..80e6bf7b 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -52,43 +52,26 @@ public static void ProcessOpenApiDocument( errorReport.AppendLine(error.ToString()); } - throw new ArgumentException(String.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); + throw new ArgumentException(string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); } - using (var outputStream = output?.Create()) - { - TextWriter textWriter; + using var outputStream = output?.Create(); - if (outputStream != null) - { - textWriter = new StreamWriter(outputStream); - } - else - { - textWriter = Console.Out; - } + var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; - var settings = new OpenApiWriterSettings() - { - ReferenceInline = inline == true ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences - }; - IOpenApiWriter writer; - switch (format) - { - case OpenApiFormat.Json: - writer = new OpenApiJsonWriter(textWriter, settings); - break; - case OpenApiFormat.Yaml: - writer = new OpenApiYamlWriter(textWriter, settings); - break; - default: - throw new ArgumentException("Unknown format"); - } - - document.Serialize(writer, version); + var settings = new OpenApiWriterSettings() + { + ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences + }; + IOpenApiWriter writer = format switch + { + OpenApiFormat.Json => new OpenApiJsonWriter(textWriter, settings), + OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), + _ => throw new ArgumentException("Unknown format"), + }; + document.Serialize(writer, version); - textWriter.Flush(); - } + textWriter.Flush(); } private static Stream GetStream(string input) From ff2bc9c2a2ef4043b3956ad82d4f0c8a218be0f1 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 18 Oct 2021 11:01:53 +0300 Subject: [PATCH 013/720] Add --filterbyOperationId command option --- src/Microsoft.OpenApi.Hidi/Program.cs | 31 +++++---------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 446e2829..93898635 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -1,34 +1,12 @@ -using System; -using System.CommandLine; +using System.CommandLine; using System.CommandLine.Invocation; using System.IO; using System.Threading.Tasks; -using Microsoft.OpenApi; namespace Microsoft.OpenApi.Tool { - class Program + static class Program { - static async Task OldMain(string[] args) - { - - var command = new RootCommand - { - new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ), - new Option("--output","Output OpenAPI description file", typeof(FileInfo), arity: ArgumentArity.ZeroOrOne), - new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), - new Option("--format", "File format",typeof(OpenApiFormat) ), - new Option("--inline", "Inline $ref instances", typeof(bool) ), - new Option("--resolveExternal","Resolve external $refs", typeof(bool)) - }; - - command.Handler = CommandHandler.Create( - OpenApiService.ProcessOpenApiDocument); - - // Parse the incoming args and invoke the handler - return await command.InvokeAsync(args); - } - static async Task Main(string[] args) { var rootCommand = new RootCommand() { @@ -47,9 +25,10 @@ static async Task Main(string[] args) new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), new Option("--format", "File format",typeof(OpenApiFormat) ), new Option("--inline", "Inline $ref instances", typeof(bool) ), - new Option("--resolveExternal","Resolve external $refs", typeof(bool)) + new Option("--resolveExternal","Resolve external $refs", typeof(bool)), + new Option("--filterByOperationId", "Filters by OperationId provided", typeof(string)) }; - transformCommand.Handler = CommandHandler.Create( + transformCommand.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); rootCommand.Add(transformCommand); From 503a03de37f5cf4bf96b667a0edb939b45850085 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 18 Oct 2021 11:02:39 +0300 Subject: [PATCH 014/720] Add filterByOperationId param and logic --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 80e6bf7b..7b56f451 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -16,11 +16,15 @@ namespace Microsoft.OpenApi.Tool { static class OpenApiService { + public const string GraphVersion_V1 = "v1.0"; + public const string Title = "Partial Graph API"; + public static void ProcessOpenApiDocument( string input, FileInfo output, OpenApiSpecVersion version, OpenApiFormat format, + string filterbyOperationId, bool inline, bool resolveExternal) { @@ -35,12 +39,20 @@ public static void ProcessOpenApiDocument( var result = new OpenApiStreamReader(new OpenApiReaderSettings { - ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + ReferenceResolution = resolveExternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet() } ).ReadAsync(stream).GetAwaiter().GetResult(); document = result.OpenApiDocument; + + // Check if filter options are provided, then execute + if (!string.IsNullOrEmpty(filterbyOperationId)) + { + var predicate = OpenApiFilterService.CreatePredicate(filterbyOperationId); + document = OpenApiFilterService.CreateFilteredDocument(document, Title, GraphVersion_V1, predicate); + } + var context = result.OpenApiDiagnostic; if (context.Errors.Count != 0) From 1eac28826d41bbb249ca39db07af2124a92fd9f9 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 20 Oct 2021 09:58:22 +0300 Subject: [PATCH 015/720] Clean up: Remove unnecessary params --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 7b56f451..fe1a9d9b 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -16,9 +16,6 @@ namespace Microsoft.OpenApi.Tool { static class OpenApiService { - public const string GraphVersion_V1 = "v1.0"; - public const string Title = "Partial Graph API"; - public static void ProcessOpenApiDocument( string input, FileInfo output, @@ -50,7 +47,7 @@ public static void ProcessOpenApiDocument( if (!string.IsNullOrEmpty(filterbyOperationId)) { var predicate = OpenApiFilterService.CreatePredicate(filterbyOperationId); - document = OpenApiFilterService.CreateFilteredDocument(document, Title, GraphVersion_V1, predicate); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } var context = result.OpenApiDiagnostic; From 1f92f0e75f320f55a78357d7d223998fb7e93ebb Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 25 Oct 2021 16:21:49 +0300 Subject: [PATCH 016/720] Add --filterByTag command option --- src/Microsoft.OpenApi.Hidi/Program.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 93898635..5eaedbde 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -26,9 +26,10 @@ static async Task Main(string[] args) new Option("--format", "File format",typeof(OpenApiFormat) ), new Option("--inline", "Inline $ref instances", typeof(bool) ), new Option("--resolveExternal","Resolve external $refs", typeof(bool)), - new Option("--filterByOperationId", "Filters by OperationId provided", typeof(string)) + new Option("--filterByOperationId", "Filters OpenApiDocument by OperationId provided", typeof(string)), + new Option("--filterByTag", "Filters OpenApiDocument by Tag(s) provided", typeof(string)) }; - transformCommand.Handler = CommandHandler.Create( + transformCommand.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); rootCommand.Add(transformCommand); From d378ec4cef7b1580cf6b395a6c20d0b215bf52b5 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 25 Oct 2021 16:26:30 +0300 Subject: [PATCH 017/720] Add a filterByTag param and logic --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index fe1a9d9b..4bc28adc 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -21,7 +21,8 @@ public static void ProcessOpenApiDocument( FileInfo output, OpenApiSpecVersion version, OpenApiFormat format, - string filterbyOperationId, + string filterbyOperationIds, + string filterByTags, bool inline, bool resolveExternal) { @@ -44,9 +45,9 @@ public static void ProcessOpenApiDocument( document = result.OpenApiDocument; // Check if filter options are provided, then execute - if (!string.IsNullOrEmpty(filterbyOperationId)) + if (!string.IsNullOrEmpty(filterbyOperationIds) || !string.IsNullOrEmpty(filterByTags)) { - var predicate = OpenApiFilterService.CreatePredicate(filterbyOperationId); + var predicate = OpenApiFilterService.CreatePredicate(filterbyOperationIds, filterByTags); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } From 71e0035500ab8b0088a66a282727f821bc21a1fc Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 26 Oct 2021 09:36:36 +0300 Subject: [PATCH 018/720] Code refactoring --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 9 +++++++-- src/Microsoft.OpenApi.Hidi/Program.cs | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 4bc28adc..317306a1 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -45,9 +45,14 @@ public static void ProcessOpenApiDocument( document = result.OpenApiDocument; // Check if filter options are provided, then execute - if (!string.IsNullOrEmpty(filterbyOperationIds) || !string.IsNullOrEmpty(filterByTags)) + if (!string.IsNullOrEmpty(filterbyOperationIds)) { - var predicate = OpenApiFilterService.CreatePredicate(filterbyOperationIds, filterByTags); + var predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyOperationIds); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); + } + if (!string.IsNullOrEmpty(filterByTags)) + { + var predicate = OpenApiFilterService.CreatePredicate(tags: filterByTags); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 5eaedbde..ae396718 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -26,8 +26,8 @@ static async Task Main(string[] args) new Option("--format", "File format",typeof(OpenApiFormat) ), new Option("--inline", "Inline $ref instances", typeof(bool) ), new Option("--resolveExternal","Resolve external $refs", typeof(bool)), - new Option("--filterByOperationId", "Filters OpenApiDocument by OperationId provided", typeof(string)), - new Option("--filterByTag", "Filters OpenApiDocument by Tag(s) provided", typeof(string)) + new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId provided", typeof(string)), + new Option("--filterByTags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)) }; transformCommand.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); From 1b4d2411cccd2b86d9a67319496301b58e642279 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 1 Nov 2021 10:49:02 +0300 Subject: [PATCH 019/720] Allow filtering for multiple operationIds --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 9 ++++----- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index fe1a9d9b..fca5999a 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System; using System.IO; using System.Linq; using System.Net; @@ -21,7 +20,7 @@ public static void ProcessOpenApiDocument( FileInfo output, OpenApiSpecVersion version, OpenApiFormat format, - string filterbyOperationId, + string filterByOperationIds, bool inline, bool resolveExternal) { @@ -44,9 +43,9 @@ public static void ProcessOpenApiDocument( document = result.OpenApiDocument; // Check if filter options are provided, then execute - if (!string.IsNullOrEmpty(filterbyOperationId)) + if (!string.IsNullOrEmpty(filterByOperationIds)) { - var predicate = OpenApiFilterService.CreatePredicate(filterbyOperationId); + var predicate = OpenApiFilterService.CreatePredicate(filterByOperationIds); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 93898635..570f2ea1 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -26,7 +26,7 @@ static async Task Main(string[] args) new Option("--format", "File format",typeof(OpenApiFormat) ), new Option("--inline", "Inline $ref instances", typeof(bool) ), new Option("--resolveExternal","Resolve external $refs", typeof(bool)), - new Option("--filterByOperationId", "Filters by OperationId provided", typeof(string)) + new Option("--filterByOperationIds", "Filters by OperationId provided", typeof(string)) }; transformCommand.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); From f30159a3df9cd19e0c141ed0581941022ddbdbe6 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 1 Nov 2021 10:49:59 +0300 Subject: [PATCH 020/720] Add check for writing to an already existing file --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index fca5999a..34f51af6 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Linq; using System.Net; @@ -63,6 +63,11 @@ public static void ProcessOpenApiDocument( throw new ArgumentException(string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); } + if (output.Exists) + { + throw new IOException("The file you're writing to already exists.Please input a new output path."); + } + using var outputStream = output?.Create(); var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; From aa8965fd7ac8ff8b5e3ec28538d527b09ba9b57e Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 1 Nov 2021 12:00:00 +0300 Subject: [PATCH 021/720] Code cleanup --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index b7972bc0..2431856e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -20,7 +20,7 @@ public static void ProcessOpenApiDocument( FileInfo output, OpenApiSpecVersion version, OpenApiFormat format, - string filterbyOperationIds, + string filterByOperationIds, string filterByTags, bool inline, bool resolveExternal) @@ -44,9 +44,14 @@ public static void ProcessOpenApiDocument( document = result.OpenApiDocument; // Check if filter options are provided, then execute - if (!string.IsNullOrEmpty(filterbyOperationIds)) + if (!string.IsNullOrEmpty(filterByOperationIds) && !string.IsNullOrEmpty(filterByTags)) { - var predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyOperationIds); + throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); + } + + if (!string.IsNullOrEmpty(filterByOperationIds)) + { + var predicate = OpenApiFilterService.CreatePredicate(operationIds: filterByOperationIds); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } if (!string.IsNullOrEmpty(filterByTags)) From 36d371ebb1a8dbf820fcf141cd6de2902a0abc7a Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 2 Nov 2021 09:16:37 +0300 Subject: [PATCH 022/720] Add license header --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 ++++- src/Microsoft.OpenApi.Hidi/Program.cs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 2431856e..895d4ff1 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; using System.IO; using System.Linq; using System.Net; diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index ae396718..71507ad8 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -1,4 +1,7 @@ -using System.CommandLine; +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System.CommandLine; using System.CommandLine.Invocation; using System.IO; using System.Threading.Tasks; From 32f93ebe78461cc91572e772bc510d5653bd1327 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 2 Nov 2021 21:57:25 +0300 Subject: [PATCH 023/720] Add license header --- src/Microsoft.OpenApi.Hidi/Program.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 570f2ea1..21be3406 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -1,4 +1,7 @@ -using System.CommandLine; +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System.CommandLine; using System.CommandLine.Invocation; using System.IO; using System.Threading.Tasks; From e86f64555dbd76f753b0fc598cffee2025067466 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 2 Nov 2021 21:58:56 +0300 Subject: [PATCH 024/720] Clean up and add XML documentations for public methods --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 34f51af6..d9e9fa93 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; using System.IO; using System.Linq; using System.Net; @@ -24,9 +27,13 @@ public static void ProcessOpenApiDocument( bool inline, bool resolveExternal) { - if (input == null) + if (string.IsNullOrEmpty(input)) { - throw new ArgumentNullException("input"); + throw new ArgumentNullException(nameof(input)); + } + if (output.Exists) + { + throw new IOException("The file you're writing to already exists. Please input a new output path."); } var stream = GetStream(input); @@ -51,7 +58,7 @@ public static void ProcessOpenApiDocument( var context = result.OpenApiDiagnostic; - if (context.Errors.Count != 0) + if (context.Errors.Count > 0) { var errorReport = new StringBuilder(); @@ -63,11 +70,6 @@ public static void ProcessOpenApiDocument( throw new ArgumentException(string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); } - if (output.Exists) - { - throw new IOException("The file you're writing to already exists.Please input a new output path."); - } - using var outputStream = output?.Create(); var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; From b74d1cf5ac6a524a569808a9d8ecefe51c0c6c0f Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 3 Nov 2021 10:01:31 +0300 Subject: [PATCH 025/720] Move declaration closer to first reference point --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index d9e9fa93..74f9455f 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -37,9 +37,6 @@ public static void ProcessOpenApiDocument( } var stream = GetStream(input); - - OpenApiDocument document; - var result = new OpenApiStreamReader(new OpenApiReaderSettings { ReferenceResolution = resolveExternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, @@ -47,6 +44,7 @@ public static void ProcessOpenApiDocument( } ).ReadAsync(stream).GetAwaiter().GetResult(); + OpenApiDocument document; document = result.OpenApiDocument; // Check if filter options are provided, then execute From cb605e22e17ff93afd660b6cc3c1db81d1a44897 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 4 Nov 2021 13:21:57 +0300 Subject: [PATCH 026/720] Code cleanup --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 74f9455f..87f02dcc 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -31,6 +31,10 @@ public static void ProcessOpenApiDocument( { throw new ArgumentNullException(nameof(input)); } + if(output == null) + { + throw new ArgumentException(nameof(output)); + } if (output.Exists) { throw new IOException("The file you're writing to already exists. Please input a new output path."); @@ -123,7 +127,6 @@ internal static void ValidateOpenApiDocument(string input) document = new OpenApiStreamReader(new OpenApiReaderSettings { - //ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet() } ).Read(stream, out var context); From 81be26810db75e506ec4142490d0dc9dcc9fa495 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 8 Nov 2021 12:49:28 +0300 Subject: [PATCH 027/720] Rename project and update namespaces --- .../{Microsoft.OpenApi.Tool.csproj => Microsoft.Hidi.csproj} | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 3 ++- src/Microsoft.OpenApi.Hidi/Program.cs | 3 ++- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 5 +---- 4 files changed, 6 insertions(+), 7 deletions(-) rename src/Microsoft.OpenApi.Hidi/{Microsoft.OpenApi.Tool.csproj => Microsoft.Hidi.csproj} (93%) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.Hidi.csproj similarity index 93% rename from src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj rename to src/Microsoft.OpenApi.Hidi/Microsoft.Hidi.csproj index 40e46f1a..27fc4b99 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Tool.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.Hidi.csproj @@ -4,7 +4,7 @@ Exe netcoreapp3.1 true - openapi-parser + hidi ./../../artifacts 1.3.0-preview diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 87f02dcc..556eff07 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -7,6 +7,7 @@ using System.Net; using System.Net.Http; using System.Text; +using Microsoft.OpenApi; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; @@ -14,7 +15,7 @@ using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; -namespace Microsoft.OpenApi.Tool +namespace Microsoft.Hidi { static class OpenApiService { diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 21be3406..033e3625 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -5,8 +5,9 @@ using System.CommandLine.Invocation; using System.IO; using System.Threading.Tasks; +using Microsoft.OpenApi; -namespace Microsoft.OpenApi.Tool +namespace Microsoft.Hidi { static class Program { diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 3c633d86..7617edb9 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -3,13 +3,10 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; -namespace Microsoft.OpenApi.Tool +namespace Microsoft.Hidi { internal class StatsVisitor : OpenApiVisitorBase { From ec38f9328a26338abf150e1419f76e4a8db84f18 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 9 Nov 2021 12:35:30 +0300 Subject: [PATCH 028/720] Address PR feedback --- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 71507ad8..a4d32c31 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -29,7 +29,7 @@ static async Task Main(string[] args) new Option("--format", "File format",typeof(OpenApiFormat) ), new Option("--inline", "Inline $ref instances", typeof(bool) ), new Option("--resolveExternal","Resolve external $refs", typeof(bool)), - new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId provided", typeof(string)), + new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)), new Option("--filterByTags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)) }; transformCommand.Handler = CommandHandler.Create( From fcce20f8e105e4c091af9fdeab128d0058dc0e52 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 9 Nov 2021 21:57:22 +0300 Subject: [PATCH 029/720] Rename tool to OpenApi.Hidi --- .../{Microsoft.Hidi.csproj => Microsoft.OpenApi.Hidi.csproj} | 0 src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 3 +-- src/Microsoft.OpenApi.Hidi/Program.cs | 3 +-- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) rename src/Microsoft.OpenApi.Hidi/{Microsoft.Hidi.csproj => Microsoft.OpenApi.Hidi.csproj} (100%) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj similarity index 100% rename from src/Microsoft.OpenApi.Hidi/Microsoft.Hidi.csproj rename to src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 556eff07..5a415c11 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -7,7 +7,6 @@ using System.Net; using System.Net.Http; using System.Text; -using Microsoft.OpenApi; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; @@ -15,7 +14,7 @@ using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; -namespace Microsoft.Hidi +namespace Microsoft.OpenApi.Hidi { static class OpenApiService { diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 033e3625..31c5b3e6 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -5,9 +5,8 @@ using System.CommandLine.Invocation; using System.IO; using System.Threading.Tasks; -using Microsoft.OpenApi; -namespace Microsoft.Hidi +namespace Microsoft.OpenApi.Hidi { static class Program { diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 7617edb9..b05b0de7 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -6,7 +6,7 @@ using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; -namespace Microsoft.Hidi +namespace Microsoft.OpenApi.Hidi { internal class StatsVisitor : OpenApiVisitorBase { From fefda948a3e6daa59e325c785e43f7ac4f265fad Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 16 Nov 2021 18:29:30 +0300 Subject: [PATCH 030/720] Update the tool's version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 27fc4b99..f0d7943e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -6,7 +6,7 @@ true hidi ./../../artifacts - 1.3.0-preview + 0.5.0-preview From 3460707e4a46f1ad81fa16ec7274842dfe080e49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Nov 2021 21:29:38 +0000 Subject: [PATCH 031/720] Bump Microsoft.SourceLink.GitHub from 1.0.0 to 1.1.1 Bumps [Microsoft.SourceLink.GitHub](https://github.com/dotnet/sourcelink) from 1.0.0 to 1.1.1. - [Release notes](https://github.com/dotnet/sourcelink/releases) - [Commits](https://github.com/dotnet/sourcelink/compare/1.0.0...1.1.1) --- updated-dependencies: - dependency-name: Microsoft.SourceLink.GitHub dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f0d7943e..b13c9dc1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -19,7 +19,7 @@ - + From 711762795ffdaef969d38c466789ff1720d43ad8 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 7 Dec 2021 12:41:16 +0300 Subject: [PATCH 032/720] Add filter by collection parameter and logic --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 11 ++++++++++- src/Microsoft.OpenApi.Hidi/Program.cs | 7 ++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 48666656..3cdb4a4d 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -25,6 +25,7 @@ public static void ProcessOpenApiDocument( OpenApiFormat format, string filterByOperationIds, string filterByTags, + string filterByCollection, bool inline, bool resolveExternal) { @@ -69,6 +70,14 @@ public static void ProcessOpenApiDocument( document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } + if (!string.IsNullOrEmpty(filterByCollection)) + { + var fileStream = GetStream(filterByCollection); + var urlDictionary = OpenApiFilterService.ParseJsonCollectionFile(fileStream); + var predicate = OpenApiFilterService.CreatePredicate(urls: urlDictionary, source:document); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); + } + var context = result.OpenApiDiagnostic; if (context.Errors.Count > 0) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 533878a0..1889efb9 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System.CommandLine; @@ -30,9 +30,10 @@ static async Task Main(string[] args) new Option("--inline", "Inline $ref instances", typeof(bool) ), new Option("--resolveExternal","Resolve external $refs", typeof(bool)), new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)), - new Option("--filterByTags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)) + 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); From 8be6ae869bf34de19d6e5b2dba5f97841dae8a46 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 7 Dec 2021 12:42:47 +0300 Subject: [PATCH 033/720] Add library for json serialization --- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 1889efb9..099eb70d 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System.CommandLine; From 6757cacb79042cd4738dfbf98504383593439b41 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 7 Dec 2021 12:43:15 +0300 Subject: [PATCH 034/720] Move declaration closer to assignment --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 3cdb4a4d..42765a37 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -50,15 +50,13 @@ public static void ProcessOpenApiDocument( } ).ReadAsync(stream).GetAwaiter().GetResult(); - OpenApiDocument document; - document = result.OpenApiDocument; + var document = result.OpenApiDocument; // Check if filter options are provided, then execute if (!string.IsNullOrEmpty(filterByOperationIds) && !string.IsNullOrEmpty(filterByTags)) { throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); } - if (!string.IsNullOrEmpty(filterByOperationIds)) { var predicate = OpenApiFilterService.CreatePredicate(operationIds: filterByOperationIds); From 8c73140a77eaf85717b12d4d3db4fd189eea41ac Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 7 Dec 2021 16:22:52 +0300 Subject: [PATCH 035/720] Move declaration to the outer scope --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 42765a37..c08e0d84 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -51,6 +51,7 @@ public static void ProcessOpenApiDocument( ).ReadAsync(stream).GetAwaiter().GetResult(); var document = result.OpenApiDocument; + Func predicate; // Check if filter options are provided, then execute if (!string.IsNullOrEmpty(filterByOperationIds) && !string.IsNullOrEmpty(filterByTags)) @@ -59,12 +60,12 @@ public static void ProcessOpenApiDocument( } if (!string.IsNullOrEmpty(filterByOperationIds)) { - var predicate = OpenApiFilterService.CreatePredicate(operationIds: filterByOperationIds); + predicate = OpenApiFilterService.CreatePredicate(operationIds: filterByOperationIds); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } if (!string.IsNullOrEmpty(filterByTags)) { - var predicate = OpenApiFilterService.CreatePredicate(tags: filterByTags); + predicate = OpenApiFilterService.CreatePredicate(tags: filterByTags); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } @@ -72,7 +73,7 @@ public static void ProcessOpenApiDocument( { var fileStream = GetStream(filterByCollection); var urlDictionary = OpenApiFilterService.ParseJsonCollectionFile(fileStream); - var predicate = OpenApiFilterService.CreatePredicate(urls: urlDictionary, source:document); + predicate = OpenApiFilterService.CreatePredicate(urls: urlDictionary, source:document); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } From 9f0eff28466ad5b30a648ec82dc4d6fcb014fff1 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 14 Dec 2021 12:37:26 +0300 Subject: [PATCH 036/720] Add extra params to predicate function --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c08e0d84..7ef622d0 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -51,7 +51,7 @@ public static void ProcessOpenApiDocument( ).ReadAsync(stream).GetAwaiter().GetResult(); var document = result.OpenApiDocument; - Func predicate; + Func predicate; // Check if filter options are provided, then execute if (!string.IsNullOrEmpty(filterByOperationIds) && !string.IsNullOrEmpty(filterByTags)) From df14516eef8237d640100309dcb19750ca12e099 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 14 Dec 2021 13:34:14 +0300 Subject: [PATCH 037/720] Simplify and clean up code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 7ef622d0..49636d80 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -72,8 +72,8 @@ public static void ProcessOpenApiDocument( if (!string.IsNullOrEmpty(filterByCollection)) { var fileStream = GetStream(filterByCollection); - var urlDictionary = OpenApiFilterService.ParseJsonCollectionFile(fileStream); - predicate = OpenApiFilterService.CreatePredicate(urls: urlDictionary, source:document); + var requestUrls = OpenApiFilterService.ParseJsonCollectionFile(fileStream); + predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } From a4577fa84dd4a229941fd99da6c0842ddb795e31 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 11 Jan 2022 16:44:28 +0300 Subject: [PATCH 038/720] Move the json document parsing logic to OpenApiService --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 36 +++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 49636d80..c60d1acc 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -2,11 +2,13 @@ // Licensed under the MIT license. using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Text; +using System.Text.Json; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; @@ -72,7 +74,7 @@ public static void ProcessOpenApiDocument( if (!string.IsNullOrEmpty(filterByCollection)) { var fileStream = GetStream(filterByCollection); - var requestUrls = OpenApiFilterService.ParseJsonCollectionFile(fileStream); + var requestUrls = ParseJsonCollectionFile(fileStream); predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } @@ -133,6 +135,38 @@ private static Stream GetStream(string input) return stream; } + /// + /// Takes in a file stream, parses the stream into a JsonDocument and gets a list of paths and Http methods + /// + /// A file stream. + /// A dictionary of request urls and http methods from a collection. + private static Dictionary> ParseJsonCollectionFile(Stream stream) + { + var requestUrls = new Dictionary>(); + + // Convert file to JsonDocument + using var document = JsonDocument.Parse(stream); + var root = document.RootElement; + var itemElement = root.GetProperty("item"); + foreach (var requestObject in itemElement.EnumerateArray().Select(item => item.GetProperty("request"))) + { + // Fetch list of methods and urls from collection, store them in a dictionary + var path = requestObject.GetProperty("url").GetProperty("raw").ToString(); + var method = requestObject.GetProperty("method").ToString(); + + if (!requestUrls.ContainsKey(path)) + { + requestUrls.Add(path, new List { method }); + } + else + { + requestUrls[path].Add(method); + } + } + + return requestUrls; + } + internal static void ValidateOpenApiDocument(string input) { if (input == null) From 5dcc9ef0cdaad5d3e69a9c2a1f518e026d82fe4c Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Fri, 14 Jan 2022 09:20:11 +0300 Subject: [PATCH 039/720] Add public class access modifier --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c60d1acc..8cf5bb60 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -18,7 +18,7 @@ namespace Microsoft.OpenApi.Hidi { - static class OpenApiService + public static class OpenApiService { public static void ProcessOpenApiDocument( string input, @@ -140,7 +140,7 @@ private static Stream GetStream(string input) /// /// A file stream. /// A dictionary of request urls and http methods from a collection. - private static Dictionary> ParseJsonCollectionFile(Stream stream) + public static Dictionary> ParseJsonCollectionFile(Stream stream) { var requestUrls = new Dictionary>(); From 6032302a5cc14cea08526f4b5c7a7357281aee5d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 19 Jan 2022 07:11:00 +0300 Subject: [PATCH 040/720] Update input parameter description --- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 533878a0..812b7d58 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -23,7 +23,7 @@ static async Task Main(string[] args) var transformCommand = new Command("transform") { - new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ), + new Option("--input", "Input OpenAPI description, JSON or CSDL file path or URL", typeof(string) ), new Option("--output","Output OpenAPI description file", typeof(FileInfo), arity: ArgumentArity.ZeroOrOne), new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), new Option("--format", "File format",typeof(OpenApiFormat) ), From 734d7b141a218a6961f99dc02e008f34a8e5133f Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 19 Jan 2022 07:12:54 +0300 Subject: [PATCH 041/720] Add OData conversion libraries --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b13c9dc1..ea9ee08d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -10,6 +10,8 @@ + + From 62c72f2fc8d656f048fd1da79c2b7eca39da29b0 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 19 Jan 2022 07:13:06 +0300 Subject: [PATCH 042/720] Add necessary usings --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 48666656..5e02e8fc 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -7,8 +7,12 @@ using System.Net; using System.Net.Http; using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; +using Microsoft.OData.Edm.Csdl; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations; From 3ba626200d4ebb9bf926fdd332f0f8ed15f153c9 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 19 Jan 2022 07:13:58 +0300 Subject: [PATCH 043/720] Add method for CSDL to OpenAPI conversion --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 43 ++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 5e02e8fc..e4b7c90c 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -106,6 +106,49 @@ public static void ProcessOpenApiDocument( textWriter.Flush(); } + /// + /// Converts CSDL to OpenAPI + /// + /// The CSDL stream. + /// An OpenAPI document. + public static OpenApiDocument ConvertCsdlToOpenApi(Stream csdl) + { + using var reader = new StreamReader(csdl); + var csdlText = reader.ReadToEndAsync().GetAwaiter().GetResult(); + var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); + + var settings = new OpenApiConvertSettings() + { + EnableKeyAsSegment = true, + EnableOperationId = true, + PrefixEntityTypeNameBeforeKey = true, + TagDepth = 2, + EnablePagination = true, + EnableDiscriminatorValue = false, + EnableDerivedTypesReferencesForRequestBody = false, + EnableDerivedTypesReferencesForResponses = false, + ShowRootPath = true, + ShowLinks = true + }; + OpenApiDocument document = edmModel.ConvertToOpenApi(settings); + + document = FixReferences(document); + + return document; + } + + public static OpenApiDocument FixReferences(OpenApiDocument document) + { + // This method is only needed because the output of ConvertToOpenApi isn't quite a valid OpenApiDocument instance. + // So we write it out, and read it back in again to fix it up. + + var sb = new StringBuilder(); + document.SerializeAsV3(new OpenApiYamlWriter(new StringWriter(sb))); + var doc = new OpenApiStringReader().Read(sb.ToString(), out _); + + return doc; + } + private static Stream GetStream(string input) { Stream stream; From 1166bc348a12531889bb47797829f645dd462ee2 Mon Sep 17 00:00:00 2001 From: Daniel Mbaluka Date: Mon, 6 Dec 2021 12:36:15 +0300 Subject: [PATCH 044/720] Use input file OpenApi format as the default output format --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 23 ++++++++++++++++---- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8cf5bb60..b426b1ae 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,17 @@ internal static void ValidateOpenApiDocument(string input) Console.WriteLine(statsVisitor.GetStatisticsReport()); } + + private static OpenApiFormat GetOpenApiFormat(string input) + { + if (!input.StartsWith("http") && Path.GetExtension(input) == ".json") + { + return OpenApiFormat.Json; + } + else + { + return OpenApiFormat.Yaml; + } + } } } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 099eb70d..b3752ef9 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); From 1f8fd7dd82808e242d6621d913954769dc86c1e8 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 20 Jan 2022 18:45:57 +0300 Subject: [PATCH 045/720] Check input file for .xml extension --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index e4b7c90c..bb66f415 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -46,6 +46,13 @@ public static void ProcessOpenApiDocument( } var stream = GetStream(input); + OpenApiDocument document; + + if (input.Contains("xml")) + { + document = ConvertCsdlToOpenApi(stream); + } + var result = new OpenApiStreamReader(new OpenApiReaderSettings { ReferenceResolution = resolveExternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, @@ -53,9 +60,8 @@ public static void ProcessOpenApiDocument( } ).ReadAsync(stream).GetAwaiter().GetResult(); - OpenApiDocument document; document = result.OpenApiDocument; - + // Check if filter options are provided, then execute if (!string.IsNullOrEmpty(filterByOperationIds) && !string.IsNullOrEmpty(filterByTags)) { From ac86c3e667cad249573610aa496c0a8f925c2301 Mon Sep 17 00:00:00 2001 From: Daniel Mbaluka Date: Sat, 22 Jan 2022 04:52:15 +0300 Subject: [PATCH 046/720] replace verbose if statement with ternary operator --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index b426b1ae..abef3617 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -204,14 +204,7 @@ internal static void ValidateOpenApiDocument(string input) private static OpenApiFormat GetOpenApiFormat(string input) { - if (!input.StartsWith("http") && Path.GetExtension(input) == ".json") - { - return OpenApiFormat.Json; - } - else - { - return OpenApiFormat.Yaml; - } + return !input.StartsWith("http") && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; } } } From e02caf022f84402ab39b923a6e6e1699962b9a32 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 22 Jan 2022 21:30:18 -0500 Subject: [PATCH 047/720] Updated version to release new preview --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b13c9dc1..4db249c8 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -6,7 +6,7 @@ true hidi ./../../artifacts - 0.5.0-preview + 0.5.0-preview2 From 2ae4422a057445efed1e89246f67e45415a65043 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 24 Jan 2022 09:38:53 +0300 Subject: [PATCH 048/720] Align the input and output params with kiota --- src/Microsoft.OpenApi.Hidi/Program.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index b3752ef9..ed4daa4e 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -21,10 +21,16 @@ static async Task Main(string[] args) }; validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); + var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL", typeof(string)); + descriptionOption.AddAlias("-d"); + + var outputOption = new Option("--output", "The output directory path for the generated file.", typeof(FileInfo), () => "./output", arity: ArgumentArity.ZeroOrOne); + outputOption.AddAlias("o"); + var transformCommand = new Command("transform") { - new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ), - new Option("--output","Output OpenAPI description file", typeof(FileInfo), arity: ArgumentArity.ZeroOrOne), + descriptionOption, + outputOption, new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), new Option("--format", "File format",typeof(OpenApiFormat) ), new Option("--inline", "Inline $ref instances", typeof(bool) ), From 41d68ca047b207a65a0b8527276b58fcaeb579a2 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 24 Jan 2022 10:02:09 +0300 Subject: [PATCH 049/720] Add aliases --- src/Microsoft.OpenApi.Hidi/Program.cs | 38 +++++++++++++++++++++------ 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index ed4daa4e..35a8cda2 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -21,23 +21,45 @@ static async Task Main(string[] args) }; validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); + // transform command options var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL", typeof(string)); descriptionOption.AddAlias("-d"); var outputOption = new Option("--output", "The output directory path for the generated file.", typeof(FileInfo), () => "./output", arity: ArgumentArity.ZeroOrOne); - outputOption.AddAlias("o"); + outputOption.AddAlias("-o"); + + var versionOption = new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)); + versionOption.AddAlias("-v"); + + var formatOption = new Option("--format", "File format", typeof(OpenApiFormat)); + formatOption.AddAlias("-f"); +; + var inlineOption = new Option("--inline", "Inline $ref instances", typeof(bool)); + inlineOption.AddAlias("-i"); +; + var resolveExternalOption = new Option("--resolveExternal", "Resolve external $refs", typeof(bool)); + resolveExternalOption.AddAlias("-ex"); +; + var filterByOperationIdsOption = new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)); + filterByOperationIdsOption.AddAlias("-op"); +; + var filterByTagsOption = new Option("--filterByTags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)); + filterByTagsOption.AddAlias("-t"); +; + var filterByCollectionOption = new Option("--filterByCollection", "Filters OpenApiDocument by Postman collection provided", typeof(string)); + filterByCollectionOption.AddAlias("-c"); var transformCommand = new Command("transform") { descriptionOption, outputOption, - new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), - new Option("--format", "File format",typeof(OpenApiFormat) ), - new Option("--inline", "Inline $ref instances", typeof(bool) ), - new Option("--resolveExternal","Resolve external $refs", typeof(bool)), - new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)), - new Option("--filterByTags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)), - new Option("--filterByCollection", "Filters OpenApiDocument by Postman collection provided", typeof(string)) + versionOption, + formatOption, + inlineOption, + resolveExternalOption, + filterByOperationIdsOption, + filterByTagsOption, + filterByCollectionOption }; transformCommand.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); From 0b3c01190b97867458a4924e27a9e479e87bb1fc Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 24 Jan 2022 10:41:57 +0300 Subject: [PATCH 050/720] Update the input command option for validate --- src/Microsoft.OpenApi.Hidi/Program.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 35a8cda2..c4e27e29 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -14,14 +14,8 @@ static async Task Main(string[] args) { var rootCommand = new RootCommand() { }; - - var validateCommand = new Command("validate") - { - new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ) - }; - validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); - - // transform command options + + // command option parameters and aliases var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL", typeof(string)); descriptionOption.AddAlias("-d"); @@ -49,6 +43,12 @@ static async Task Main(string[] args) var filterByCollectionOption = new Option("--filterByCollection", "Filters OpenApiDocument by Postman collection provided", typeof(string)); filterByCollectionOption.AddAlias("-c"); + var validateCommand = new Command("validate") + { + descriptionOption + }; + validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); + var transformCommand = new Command("transform") { descriptionOption, From 67c26ce8092b72d1142aea7cd54cc01cfabeff82 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 24 Jan 2022 10:53:27 +0300 Subject: [PATCH 051/720] Clean up code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index abef3617..3ce75ee1 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -21,7 +21,7 @@ namespace Microsoft.OpenApi.Hidi public static class OpenApiService { public static void ProcessOpenApiDocument( - string input, + string openapi, FileInfo output, OpenApiSpecVersion? version, OpenApiFormat? format, @@ -31,9 +31,9 @@ public static void ProcessOpenApiDocument( bool inline, bool resolveExternal) { - if (string.IsNullOrEmpty(input)) + if (string.IsNullOrEmpty(openapi)) { - throw new ArgumentNullException(nameof(input)); + throw new ArgumentNullException(nameof(openapi)); } if(output == null) { @@ -44,7 +44,7 @@ public static void ProcessOpenApiDocument( throw new IOException("The file you're writing to already exists. Please input a new output path."); } - var stream = GetStream(input); + var stream = GetStream(openapi); var result = new OpenApiStreamReader(new OpenApiReaderSettings { ReferenceResolution = resolveExternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, @@ -102,7 +102,7 @@ public static void ProcessOpenApiDocument( ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences }; - var openApiFormat = format ?? GetOpenApiFormat(input); + var openApiFormat = format ?? GetOpenApiFormat(openapi); var openApiVersion = version ?? result.OpenApiDiagnostic.SpecificationVersion; IOpenApiWriter writer = openApiFormat switch { @@ -115,10 +115,10 @@ public static void ProcessOpenApiDocument( textWriter.Flush(); } - private static Stream GetStream(string input) + private static Stream GetStream(string openapi) { Stream stream; - if (input.StartsWith("http")) + if (openapi.StartsWith("http")) { var httpClient = new HttpClient(new HttpClientHandler() { @@ -127,11 +127,11 @@ private static Stream GetStream(string input) { DefaultRequestVersion = HttpVersion.Version20 }; - stream = httpClient.GetStreamAsync(input).Result; + stream = httpClient.GetStreamAsync(openapi).Result; } else { - var fileInput = new FileInfo(input); + var fileInput = new FileInfo(openapi); stream = fileInput.OpenRead(); } @@ -170,14 +170,14 @@ public static Dictionary> ParseJsonCollectionFile(Stream st return requestUrls; } - internal static void ValidateOpenApiDocument(string input) + internal static void ValidateOpenApiDocument(string openapi) { - if (input == null) + if (openapi == null) { - throw new ArgumentNullException("input"); + throw new ArgumentNullException("openapi"); } - var stream = GetStream(input); + var stream = GetStream(openapi); OpenApiDocument document; @@ -202,9 +202,9 @@ internal static void ValidateOpenApiDocument(string input) Console.WriteLine(statsVisitor.GetStatisticsReport()); } - private static OpenApiFormat GetOpenApiFormat(string input) + private static OpenApiFormat GetOpenApiFormat(string openapi) { - return !input.StartsWith("http") && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; + return !openapi.StartsWith("http") && Path.GetExtension(openapi) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; } } } From 5aceeba9e1d4bf852eaa5610a543296732b4755d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 25 Jan 2022 09:57:38 +0300 Subject: [PATCH 052/720] Clean up code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 23 ++++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 17920ea6..3fbcde7f 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -9,7 +9,6 @@ using System.Net.Http; using System.Text; using System.Text.Json; -using System.Threading.Tasks; using System.Xml.Linq; using Microsoft.OData.Edm.Csdl; using Microsoft.OpenApi.Extensions; @@ -49,21 +48,27 @@ public static void ProcessOpenApiDocument( } var stream = GetStream(input); + + ReadResult result = null; + OpenApiDocument document; - if (input.Contains("xml")) + if (input.Contains(".xml")) { document = ConvertCsdlToOpenApi(stream); } - - var result = new OpenApiStreamReader(new OpenApiReaderSettings + else { - ReferenceResolution = resolveExternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, - RuleSet = ValidationRuleSet.GetDefaultRuleSet() - } - ).ReadAsync(stream).GetAwaiter().GetResult(); + result = new OpenApiStreamReader(new OpenApiReaderSettings + { + ReferenceResolution = resolveExternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).ReadAsync(stream).GetAwaiter().GetResult(); - document = result.OpenApiDocument; + document = result.OpenApiDocument; + } + Func predicate; // Check if filter options are provided, then execute From d48e0c73e7cddf95e482d6786e85e9cd57326118 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 25 Jan 2022 16:25:05 +0300 Subject: [PATCH 053/720] Refactor code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 3fbcde7f..25faa1b2 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -67,6 +67,20 @@ public static void ProcessOpenApiDocument( ).ReadAsync(stream).GetAwaiter().GetResult(); document = result.OpenApiDocument; + + var context = result.OpenApiDiagnostic; + + if (context.Errors.Count > 0) + { + var errorReport = new StringBuilder(); + + foreach (var error in context.Errors) + { + errorReport.AppendLine(error.ToString()); + } + + throw new ArgumentException(string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); + } } Func predicate; @@ -94,21 +108,7 @@ public static void ProcessOpenApiDocument( predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } - - var context = result.OpenApiDiagnostic; - - if (context.Errors.Count > 0) - { - var errorReport = new StringBuilder(); - - foreach (var error in context.Errors) - { - errorReport.AppendLine(error.ToString()); - } - - throw new ArgumentException(string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); - } - + using var outputStream = output?.Create(); var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; From a6e2bd42ed6b0da18da651e445947d89eb2966b7 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 26 Jan 2022 10:37:03 +0300 Subject: [PATCH 054/720] Add check for .csdl files --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 25faa1b2..782f16e8 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -53,7 +53,7 @@ public static void ProcessOpenApiDocument( OpenApiDocument document; - if (input.Contains(".xml")) + if (input.Contains(".xml") || input.Contains(".csdl")) { document = ConvertCsdlToOpenApi(stream); } From f7c56ee0e9a5017fdca08f26f9eb8a7a8d01bab3 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 26 Jan 2022 10:51:27 +0300 Subject: [PATCH 055/720] Add xml documentation --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 782f16e8..8dcb0d22 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -162,6 +162,11 @@ public static OpenApiDocument ConvertCsdlToOpenApi(Stream csdl) return document; } + /// + /// Fixes the references in the resulting OpenApiDocument. + /// + /// The converted OpenApiDocument. + /// A valid OpenApiDocument instance. public static OpenApiDocument FixReferences(OpenApiDocument document) { // This method is only needed because the output of ConvertToOpenApi isn't quite a valid OpenApiDocument instance. From f1d0e72c559d1faad5f187c01975b3aa0cc69933 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 27 Jan 2022 12:57:08 +0300 Subject: [PATCH 056/720] Use kebab case for multi-name params --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 24 ++++++++++---------- src/Microsoft.OpenApi.Hidi/Program.cs | 8 +++---- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 3ce75ee1..cad202fd 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -25,11 +25,11 @@ public static void ProcessOpenApiDocument( FileInfo output, OpenApiSpecVersion? version, OpenApiFormat? format, - string filterByOperationIds, - string filterByTags, - string filterByCollection, + string filterbyoperationids, + string filterbytags, + string filterbycollection, bool inline, - bool resolveExternal) + bool resolveexternal) { if (string.IsNullOrEmpty(openapi)) { @@ -47,7 +47,7 @@ public static void ProcessOpenApiDocument( var stream = GetStream(openapi); var result = new OpenApiStreamReader(new OpenApiReaderSettings { - ReferenceResolution = resolveExternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet() } ).ReadAsync(stream).GetAwaiter().GetResult(); @@ -56,24 +56,24 @@ public static void ProcessOpenApiDocument( Func predicate; // Check if filter options are provided, then execute - if (!string.IsNullOrEmpty(filterByOperationIds) && !string.IsNullOrEmpty(filterByTags)) + if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) { throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); } - if (!string.IsNullOrEmpty(filterByOperationIds)) + if (!string.IsNullOrEmpty(filterbyoperationids)) { - predicate = OpenApiFilterService.CreatePredicate(operationIds: filterByOperationIds); + predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } - if (!string.IsNullOrEmpty(filterByTags)) + if (!string.IsNullOrEmpty(filterbytags)) { - predicate = OpenApiFilterService.CreatePredicate(tags: filterByTags); + predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } - if (!string.IsNullOrEmpty(filterByCollection)) + if (!string.IsNullOrEmpty(filterbycollection)) { - var fileStream = GetStream(filterByCollection); + var fileStream = GetStream(filterbycollection); var requestUrls = ParseJsonCollectionFile(fileStream); predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index c4e27e29..e5865d46 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -31,16 +31,16 @@ static async Task Main(string[] args) var inlineOption = new Option("--inline", "Inline $ref instances", typeof(bool)); inlineOption.AddAlias("-i"); ; - var resolveExternalOption = new Option("--resolveExternal", "Resolve external $refs", typeof(bool)); + var resolveExternalOption = new Option("--resolve-external", "Resolve external $refs", typeof(bool)); resolveExternalOption.AddAlias("-ex"); ; - var filterByOperationIdsOption = new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)); + var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)); filterByOperationIdsOption.AddAlias("-op"); ; - var filterByTagsOption = new Option("--filterByTags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)); + var filterByTagsOption = new Option("--filter-by-tags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)); filterByTagsOption.AddAlias("-t"); ; - var filterByCollectionOption = new Option("--filterByCollection", "Filters OpenApiDocument by Postman collection provided", typeof(string)); + var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided", typeof(string)); filterByCollectionOption.AddAlias("-c"); var validateCommand = new Command("validate") From 5cbff4b307bb342a95f8b2f302cf0fbb8d0be4d7 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 27 Jan 2022 19:14:09 +0300 Subject: [PATCH 057/720] Add --csdl input param for converting csdl files --- src/Microsoft.OpenApi.Hidi/Program.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index e5865d46..77781a33 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -19,6 +19,9 @@ static async Task Main(string[] args) var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL", typeof(string)); descriptionOption.AddAlias("-d"); + var csdlOption = new Option("--csdl", "Input CSDL file path or URL", typeof(string)); + csdlOption.AddAlias("-cs"); + var outputOption = new Option("--output", "The output directory path for the generated file.", typeof(FileInfo), () => "./output", arity: ArgumentArity.ZeroOrOne); outputOption.AddAlias("-o"); @@ -52,6 +55,7 @@ static async Task Main(string[] args) var transformCommand = new Command("transform") { descriptionOption, + csdlOption, outputOption, versionOption, formatOption, @@ -61,7 +65,7 @@ static async Task Main(string[] args) filterByTagsOption, filterByCollectionOption }; - transformCommand.Handler = CommandHandler.Create( + transformCommand.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); rootCommand.Add(transformCommand); From 0fb763d46cd8ca89738646da05a1f7c722d7284f Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 27 Jan 2022 19:14:29 +0300 Subject: [PATCH 058/720] Refactor code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 39 +++++++++++--------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 22f02cf5..653be79e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -25,6 +25,7 @@ public static class OpenApiService { public static void ProcessOpenApiDocument( string openapi, + string csdl, FileInfo output, OpenApiSpecVersion? version, OpenApiFormat? format, @@ -34,9 +35,9 @@ public static void ProcessOpenApiDocument( bool inline, bool resolveexternal) { - if (string.IsNullOrEmpty(openapi)) + if (string.IsNullOrEmpty(openapi) && string.IsNullOrEmpty(csdl)) { - throw new ArgumentNullException(nameof(openapi)); + throw new ArgumentNullException("Please input a file path"); } if(output == null) { @@ -47,21 +48,25 @@ public static void ProcessOpenApiDocument( throw new IOException("The file you're writing to already exists. Please input a new output path."); } - var stream = GetStream(input); - - ReadResult result = null; - + Stream stream; OpenApiDocument document; + OpenApiFormat openApiFormat; - if (input.Contains(".xml") || input.Contains(".csdl")) + if (!string.IsNullOrEmpty(csdl)) { - document = ConvertCsdlToOpenApi(stream); + // Default to yaml during csdl to OpenApi conversion + openApiFormat = format ?? GetOpenApiFormat(csdl); + + stream = GetStream(csdl); + document = ConvertCsdlToOpenApi(stream); } else { - result = new OpenApiStreamReader(new OpenApiReaderSettings + stream = GetStream(openapi); + + var result = new OpenApiStreamReader(new OpenApiReaderSettings { - ReferenceResolution = resolveExternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet() } ).ReadAsync(stream).GetAwaiter().GetResult(); @@ -81,8 +86,11 @@ public static void ProcessOpenApiDocument( throw new ArgumentException(string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); } + + openApiFormat = format ?? GetOpenApiFormat(openapi); + version ??= result.OpenApiDiagnostic.SpecificationVersion; } - + Func predicate; // Check if filter options are provided, then execute @@ -100,7 +108,6 @@ public static void ProcessOpenApiDocument( predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } - if (!string.IsNullOrEmpty(filterbycollection)) { var fileStream = GetStream(filterbycollection); @@ -118,15 +125,13 @@ public static void ProcessOpenApiDocument( ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences }; - var openApiFormat = format ?? GetOpenApiFormat(openapi); - 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, openApiVersion); + document.Serialize(writer, (OpenApiSpecVersion)version); textWriter.Flush(); } @@ -139,7 +144,7 @@ public static void ProcessOpenApiDocument( public static OpenApiDocument ConvertCsdlToOpenApi(Stream csdl) { using var reader = new StreamReader(csdl); - var csdlText = reader.ReadToEndAsync().GetAwaiter().GetResult(); + var csdlText = reader.ReadToEndAsync().GetAwaiter().GetResult(); var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); var settings = new OpenApiConvertSettings() @@ -179,7 +184,7 @@ public static OpenApiDocument FixReferences(OpenApiDocument document) return doc; } - private static Stream GetStream(string input) + private static Stream GetStream(string openapi) { Stream stream; if (openapi.StartsWith("http")) From 51491469429147084cc3e40d1f3845f82140491c Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 27 Jan 2022 19:26:46 +0300 Subject: [PATCH 059/720] Refactor param to be more implicit --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 653be79e..3013da5e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -184,10 +184,10 @@ public static OpenApiDocument FixReferences(OpenApiDocument document) return doc; } - private static Stream GetStream(string openapi) + private static Stream GetStream(string input) { Stream stream; - if (openapi.StartsWith("http")) + if (input.StartsWith("http")) { var httpClient = new HttpClient(new HttpClientHandler() { @@ -196,11 +196,11 @@ private static Stream GetStream(string openapi) { DefaultRequestVersion = HttpVersion.Version20 }; - stream = httpClient.GetStreamAsync(openapi).Result; + stream = httpClient.GetStreamAsync(input).Result; } else { - var fileInput = new FileInfo(openapi); + var fileInput = new FileInfo(input); stream = fileInput.OpenRead(); } From 212c737c4d2dc51a91d6e7495aaf8a105c0caf5e Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 27 Jan 2022 19:33:36 +0300 Subject: [PATCH 060/720] Clean up code --- src/Microsoft.OpenApi.Hidi/Program.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index e5865d46..5dc4e396 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -27,19 +27,19 @@ static async Task Main(string[] args) var formatOption = new Option("--format", "File format", typeof(OpenApiFormat)); formatOption.AddAlias("-f"); -; + var inlineOption = new Option("--inline", "Inline $ref instances", typeof(bool)); inlineOption.AddAlias("-i"); -; + var resolveExternalOption = new Option("--resolve-external", "Resolve external $refs", typeof(bool)); resolveExternalOption.AddAlias("-ex"); -; + var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)); filterByOperationIdsOption.AddAlias("-op"); -; + var filterByTagsOption = new Option("--filter-by-tags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)); filterByTagsOption.AddAlias("-t"); -; + var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided", typeof(string)); filterByCollectionOption.AddAlias("-c"); From ae9c87bf00fdfbdbc085006662b5eaef4063920e Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 27 Jan 2022 19:33:57 +0300 Subject: [PATCH 061/720] Refactor param to be implicit --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index cad202fd..a1fd8135 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -115,10 +115,10 @@ public static void ProcessOpenApiDocument( textWriter.Flush(); } - private static Stream GetStream(string openapi) + private static Stream GetStream(string input) { Stream stream; - if (openapi.StartsWith("http")) + if (input.StartsWith("http")) { var httpClient = new HttpClient(new HttpClientHandler() { @@ -127,11 +127,11 @@ private static Stream GetStream(string openapi) { DefaultRequestVersion = HttpVersion.Version20 }; - stream = httpClient.GetStreamAsync(openapi).Result; + stream = httpClient.GetStreamAsync(input).Result; } else { - var fileInput = new FileInfo(openapi); + var fileInput = new FileInfo(input); stream = fileInput.OpenRead(); } From 72d45e15576a04e7877d3bc845d2150f54a47c2d Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 29 Jan 2022 17:12:59 -0500 Subject: [PATCH 062/720] Updated hidi parameters to control both local and remote inlining independently --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 +++++++----- src/Microsoft.OpenApi.Hidi/Program.cs | 6 +++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index e381dd64..05b44c9c 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -26,11 +26,12 @@ public static void ProcessOpenApiDocument( FileInfo output, OpenApiSpecVersion? version, OpenApiFormat? format, + bool inlineExternal, + bool inlineLocal, string filterByOperationIds, string filterByTags, - string filterByCollection, - bool inline, - bool resolveExternal) + string filterByCollection + ) { if (string.IsNullOrEmpty(input)) { @@ -52,7 +53,7 @@ public static void ProcessOpenApiDocument( var result = new OpenApiStreamReader(new OpenApiReaderSettings { - ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + ReferenceResolution = inlineExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet(), BaseUrl = new Uri(inputUrl.AbsoluteUri) } @@ -105,7 +106,8 @@ public static void ProcessOpenApiDocument( var settings = new OpenApiWriterSettings() { - ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences + InlineLocalReferences = inlineLocal, + InlineExternalReferences = inlineExternal }; var openApiFormat = format ?? GetOpenApiFormat(input); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 8bc54e2f..c6f7eff4 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -28,13 +28,13 @@ static async Task Main(string[] args) new Option("--output","Output OpenAPI description file", typeof(FileInfo), arity: ArgumentArity.ZeroOrOne), new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), new Option("--format", "File format",typeof(OpenApiFormat) ), - new Option("--inline", "Inline $ref instances", typeof(bool) ), - new Option("--resolveExternal","Resolve external $refs", typeof(bool)), + new Option("--inlineExternal", "Inline external $ref instances", typeof(bool) ), + new Option("--inlineLocal", "Inline local $ref instances", typeof(bool) ), new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)), 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); From f738f1e40cb90118bb9ff296a40d1e5ebc8dbe23 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 1 Feb 2022 12:58:28 +0300 Subject: [PATCH 063/720] Add logging configurations --- src/Microsoft.OpenApi.Hidi/appsettings.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/Microsoft.OpenApi.Hidi/appsettings.json diff --git a/src/Microsoft.OpenApi.Hidi/appsettings.json b/src/Microsoft.OpenApi.Hidi/appsettings.json new file mode 100644 index 00000000..882248cf --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/appsettings.json @@ -0,0 +1,7 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug" + } + } +} \ No newline at end of file From 8d5fcfefcc30c256c515818cea6f65dcc5d087f0 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 1 Feb 2022 12:59:15 +0300 Subject: [PATCH 064/720] Install packages --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4db249c8..c832225f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -10,6 +10,10 @@ + + + + From 39f693b8565431e0c7606a2bae0ee6b65d1cfc0e Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 1 Feb 2022 13:00:29 +0300 Subject: [PATCH 065/720] Add a loglevel command option for additional logging --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 203 ++++++++++++++----- src/Microsoft.OpenApi.Hidi/Program.cs | 16 +- 2 files changed, 164 insertions(+), 55 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index a1fd8135..b85f68fc 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -3,12 +3,15 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Net.Http; +using System.Security; using System.Text; using System.Text.Json; +using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Readers; @@ -18,91 +21,135 @@ namespace Microsoft.OpenApi.Hidi { - public static class OpenApiService + public class OpenApiService { public static void ProcessOpenApiDocument( string openapi, FileInfo output, OpenApiSpecVersion? version, OpenApiFormat? format, + LogLevel loglevel, string filterbyoperationids, string filterbytags, string filterbycollection, bool inline, bool resolveexternal) { - if (string.IsNullOrEmpty(openapi)) + var logger = ConfigureLoggerInstance(loglevel); + + try { - throw new ArgumentNullException(nameof(openapi)); + if (string.IsNullOrEmpty(openapi)) + { + throw new ArgumentNullException(nameof(openapi)); + } + } + catch (ArgumentNullException ex) + { + logger.LogError(ex.Message); + return; + } + try + { + if(output == null) + { + throw new ArgumentException(nameof(output)); + } } - if(output == null) + catch (ArgumentException ex) { - throw new ArgumentException(nameof(output)); + logger.LogError(ex.Message); + return; } - if (output.Exists) + try { - throw new IOException("The file you're writing to already exists. Please input a new output path."); + if (output.Exists) + { + throw new IOException("The file you're writing to already exists. Please input a new file path."); + } } + catch (IOException ex) + { + logger.LogError(ex.Message); + return; + } + + var stream = GetStream(openapi, logger); - var stream = GetStream(openapi); + // Parsing OpenAPI file + var stopwatch = new Stopwatch(); + stopwatch.Start(); + logger.LogTrace("Parsing OpenApi file"); var result = new OpenApiStreamReader(new OpenApiReaderSettings { ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet() } ).ReadAsync(stream).GetAwaiter().GetResult(); - var document = result.OpenApiDocument; + stopwatch.Stop(); + + var context = result.OpenApiDiagnostic; + if (context.Errors.Count > 0) + { + var errorReport = new StringBuilder(); + + foreach (var error in context.Errors) + { + errorReport.AppendLine(error.ToString()); + } + logger.LogError($"{stopwatch.ElapsedMilliseconds}ms: OpenApi Parsing errors {string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())}"); + } + else + { + logger.LogTrace("{timestamp}ms: Parsed OpenApi successfully. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + } + Func predicate; - // Check if filter options are provided, then execute + // Check if filter options are provided, then slice the OpenAPI document if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) { throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); } if (!string.IsNullOrEmpty(filterbyoperationids)) { + logger.LogTrace("Creating predicate based on the operationIds supplied."); predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); + + logger.LogTrace("Creating subset OpenApi document."); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } if (!string.IsNullOrEmpty(filterbytags)) { + logger.LogTrace("Creating predicate based on the tags supplied."); predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); - document = OpenApiFilterService.CreateFilteredDocument(document, predicate); - } - if (!string.IsNullOrEmpty(filterbycollection)) - { - var fileStream = GetStream(filterbycollection); - var requestUrls = ParseJsonCollectionFile(fileStream); - predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document); + logger.LogTrace("Creating subset OpenApi document."); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } - - var context = result.OpenApiDiagnostic; - - if (context.Errors.Count > 0) + if (!string.IsNullOrEmpty(filterbycollection)) { - var errorReport = new StringBuilder(); + var fileStream = GetStream(filterbycollection, logger); + var requestUrls = ParseJsonCollectionFile(fileStream, logger); - foreach (var error in context.Errors) - { - errorReport.AppendLine(error.ToString()); - } + logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); + predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document); - throw new ArgumentException(string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())); + logger.LogTrace("Creating subset OpenApi document."); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } - + + logger.LogTrace("Creating a new file"); using var outputStream = output?.Create(); - - var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; + var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; var settings = new OpenApiWriterSettings() { ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences }; - var openApiFormat = format ?? GetOpenApiFormat(openapi); + var openApiFormat = format ?? GetOpenApiFormat(openapi, logger); var openApiVersion = version ?? result.OpenApiDiagnostic.SpecificationVersion; IOpenApiWriter writer = openApiFormat switch { @@ -110,31 +157,64 @@ public static void ProcessOpenApiDocument( OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), _ => throw new ArgumentException("Unknown format"), }; + + logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); + + stopwatch.Start(); document.Serialize(writer, openApiVersion); + stopwatch.Stop(); + + logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); textWriter.Flush(); } - private static Stream GetStream(string input) + private static Stream GetStream(string input, ILogger logger) { + var stopwatch = new Stopwatch(); + stopwatch.Start(); + Stream stream; if (input.StartsWith("http")) { - var httpClient = new HttpClient(new HttpClientHandler() + try { - SslProtocols = System.Security.Authentication.SslProtocols.Tls12, - }) + var httpClient = new HttpClient(new HttpClientHandler() + { + SslProtocols = System.Security.Authentication.SslProtocols.Tls12, + }) + { + DefaultRequestVersion = HttpVersion.Version20 + }; + stream = httpClient.GetStreamAsync(input).Result; + } + catch (HttpRequestException ex) { - DefaultRequestVersion = HttpVersion.Version20 - }; - stream = httpClient.GetStreamAsync(input).Result; + logger.LogError($"Could not download the file at {input}, reason{ex}"); + return null; + } } else { - var fileInput = new FileInfo(input); - stream = fileInput.OpenRead(); + try + { + var fileInput = new FileInfo(input); + stream = fileInput.OpenRead(); + } + catch (Exception ex) when (ex is FileNotFoundException || + ex is PathTooLongException || + ex is DirectoryNotFoundException || + ex is IOException || + ex is UnauthorizedAccessException || + ex is SecurityException || + ex is NotSupportedException) + { + logger.LogError($"Could not open the file at {input}, reason: {ex.Message}"); + return null; + } } - + stopwatch.Stop(); + logger.LogTrace("{timestamp}ms: Read file {input}", stopwatch.ElapsedMilliseconds, input); return stream; } @@ -143,11 +223,11 @@ private static Stream GetStream(string input) /// /// A file stream. /// A dictionary of request urls and http methods from a collection. - public static Dictionary> ParseJsonCollectionFile(Stream stream) + public static Dictionary> ParseJsonCollectionFile(Stream stream, ILogger logger) { var requestUrls = new Dictionary>(); - // Convert file to JsonDocument + logger.LogTrace("Parsing the json collection file into a JsonDocument"); using var document = JsonDocument.Parse(stream); var root = document.RootElement; var itemElement = root.GetProperty("item"); @@ -166,21 +246,21 @@ public static Dictionary> ParseJsonCollectionFile(Stream st requestUrls[path].Add(method); } } - + logger.LogTrace("Finished fetching the list of paths and Http methods defined in the Postman collection."); return requestUrls; } - internal static void ValidateOpenApiDocument(string openapi) + internal static void ValidateOpenApiDocument(string openapi, LogLevel loglevel) { - if (openapi == null) + if (string.IsNullOrEmpty(openapi)) { - throw new ArgumentNullException("openapi"); + throw new ArgumentNullException(nameof(openapi)); } - - var stream = GetStream(openapi); + var logger = ConfigureLoggerInstance(loglevel); + var stream = GetStream(openapi, logger); OpenApiDocument document; - + logger.LogTrace("Parsing the OpenApi file"); document = new OpenApiStreamReader(new OpenApiReaderSettings { RuleSet = ValidationRuleSet.GetDefaultRuleSet() @@ -199,12 +279,33 @@ internal static void ValidateOpenApiDocument(string openapi) var walker = new OpenApiWalker(statsVisitor); walker.Walk(document); + logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); Console.WriteLine(statsVisitor.GetStatisticsReport()); } - private static OpenApiFormat GetOpenApiFormat(string openapi) + private static OpenApiFormat GetOpenApiFormat(string openapi, ILogger logger) { + logger.LogTrace("Getting the OpenApi format"); return !openapi.StartsWith("http") && Path.GetExtension(openapi) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; } + + private static ILogger ConfigureLoggerInstance(LogLevel loglevel) + { + // Configure logger options + #if DEBUG + loglevel = loglevel > LogLevel.Debug ? LogLevel.Debug : loglevel; + #endif + + var logger = LoggerFactory.Create((builder) => { + builder + .AddConsole() + #if DEBUG + .AddDebug() + #endif + .SetMinimumLevel(loglevel); + }).CreateLogger(); + + return logger; + } } } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 5dc4e396..2f6f8f27 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -5,6 +5,7 @@ using System.CommandLine.Invocation; using System.IO; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; namespace Microsoft.OpenApi.Hidi { @@ -27,7 +28,10 @@ static async Task Main(string[] args) var formatOption = new Option("--format", "File format", typeof(OpenApiFormat)); formatOption.AddAlias("-f"); - + + var logLevelOption = new Option("--loglevel", "The log level to use when logging messages to the main output.", typeof(LogLevel), () => LogLevel.Warning); + logLevelOption.AddAlias("-ll"); + var inlineOption = new Option("--inline", "Inline $ref instances", typeof(bool)); inlineOption.AddAlias("-i"); @@ -45,9 +49,11 @@ static async Task Main(string[] args) var validateCommand = new Command("validate") { - descriptionOption + descriptionOption, + logLevelOption }; - validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); + + validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); var transformCommand = new Command("transform") { @@ -55,13 +61,15 @@ static async Task Main(string[] args) outputOption, versionOption, formatOption, + logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption }; - transformCommand.Handler = CommandHandler.Create( + + transformCommand.Handler = CommandHandler.Create( OpenApiService.ProcessOpenApiDocument); rootCommand.Add(transformCommand); From 2db44006f70dae55e6d4db0856ccd6f8e89c4224 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 1 Feb 2022 18:14:42 +0300 Subject: [PATCH 066/720] Resolve PR feedback --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index b85f68fc..d1dea081 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -11,6 +11,7 @@ using System.Security; using System.Text; using System.Text.Json; +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; @@ -23,7 +24,7 @@ namespace Microsoft.OpenApi.Hidi { public class OpenApiService { - public static void ProcessOpenApiDocument( + public static async void ProcessOpenApiDocument( string openapi, FileInfo output, OpenApiSpecVersion? version, @@ -74,7 +75,7 @@ public static void ProcessOpenApiDocument( return; } - var stream = GetStream(openapi, logger); + var stream = await GetStream(openapi, logger); // Parsing OpenAPI file var stopwatch = new Stopwatch(); @@ -130,7 +131,7 @@ public static void ProcessOpenApiDocument( } if (!string.IsNullOrEmpty(filterbycollection)) { - var fileStream = GetStream(filterbycollection, logger); + var fileStream = await GetStream(filterbycollection, logger); var requestUrls = ParseJsonCollectionFile(fileStream, logger); logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); @@ -169,7 +170,7 @@ public static void ProcessOpenApiDocument( textWriter.Flush(); } - private static Stream GetStream(string input, ILogger logger) + private static async Task GetStream(string input, ILogger logger) { var stopwatch = new Stopwatch(); stopwatch.Start(); @@ -179,14 +180,15 @@ private static Stream GetStream(string input, ILogger logger) { try { - var httpClient = new HttpClient(new HttpClientHandler() + using var httpClientHandler = new HttpClientHandler() { SslProtocols = System.Security.Authentication.SslProtocols.Tls12, - }) + }; + using var httpClient = new HttpClient(httpClientHandler) { DefaultRequestVersion = HttpVersion.Version20 }; - stream = httpClient.GetStreamAsync(input).Result; + stream = await httpClient.GetStreamAsync(input); } catch (HttpRequestException ex) { @@ -250,14 +252,14 @@ public static Dictionary> ParseJsonCollectionFile(Stream st return requestUrls; } - internal static void ValidateOpenApiDocument(string openapi, LogLevel loglevel) + internal static async void ValidateOpenApiDocument(string openapi, LogLevel loglevel) { if (string.IsNullOrEmpty(openapi)) { throw new ArgumentNullException(nameof(openapi)); } var logger = ConfigureLoggerInstance(loglevel); - var stream = GetStream(openapi, logger); + var stream = await GetStream(openapi, logger); OpenApiDocument document; logger.LogTrace("Parsing the OpenApi file"); From 71bb7e739f963fd1030e0b5af858695802415f95 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 2 Feb 2022 14:18:51 +0300 Subject: [PATCH 067/720] Upgrades to System.Commandline beta2 --- .../Microsoft.OpenApi.Hidi.csproj | 3 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 7 +-- src/Microsoft.OpenApi.Hidi/Program.cs | 45 +++++++++---------- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c832225f..ea617ae9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -3,6 +3,7 @@ Exe netcoreapp3.1 + 9.0 true hidi ./../../artifacts @@ -14,7 +15,7 @@ - + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index d1dea081..3c9fdb7d 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -30,11 +30,12 @@ public static async void ProcessOpenApiDocument( OpenApiSpecVersion? version, OpenApiFormat? format, LogLevel loglevel, + bool inline, + bool resolveexternal, string filterbyoperationids, string filterbytags, - string filterbycollection, - bool inline, - bool resolveexternal) + string filterbycollection + ) { var logger = ConfigureLoggerInstance(loglevel); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 2f6f8f27..841c710e 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.CommandLine; -using System.CommandLine.Invocation; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; @@ -15,45 +14,45 @@ static async Task Main(string[] args) { var rootCommand = new RootCommand() { }; - + // command option parameters and aliases - var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL", typeof(string)); + var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL"); descriptionOption.AddAlias("-d"); - var outputOption = new Option("--output", "The output directory path for the generated file.", typeof(FileInfo), () => "./output", arity: ArgumentArity.ZeroOrOne); + var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; outputOption.AddAlias("-o"); - var versionOption = new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)); + var versionOption = new Option("--version", "OpenAPI specification version"); versionOption.AddAlias("-v"); - var formatOption = new Option("--format", "File format", typeof(OpenApiFormat)); + var formatOption = new Option("--format", "File format"); formatOption.AddAlias("-f"); - var logLevelOption = new Option("--loglevel", "The log level to use when logging messages to the main output.", typeof(LogLevel), () => LogLevel.Warning); + var logLevelOption = new Option("--loglevel", () => LogLevel.Warning, "The log level to use when logging messages to the main output."); logLevelOption.AddAlias("-ll"); - var inlineOption = new Option("--inline", "Inline $ref instances", typeof(bool)); - inlineOption.AddAlias("-i"); - - var resolveExternalOption = new Option("--resolve-external", "Resolve external $refs", typeof(bool)); - resolveExternalOption.AddAlias("-ex"); - - var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)); + var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by OperationId(s) provided"); filterByOperationIdsOption.AddAlias("-op"); - var filterByTagsOption = new Option("--filter-by-tags", "Filters OpenApiDocument by Tag(s) provided", typeof(string)); + var filterByTagsOption = new Option("--filter-by-tags", "Filters OpenApiDocument by Tag(s) provided"); filterByTagsOption.AddAlias("-t"); - var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided", typeof(string)); + var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided"); filterByCollectionOption.AddAlias("-c"); + var inlineOption = new Option("--inline", "Inline $ref instances"); + inlineOption.AddAlias("-i"); + + var resolveExternalOption = new Option("--resolve-external", "Resolve external $refs"); + resolveExternalOption.AddAlias("-ex"); + var validateCommand = new Command("validate") { descriptionOption, logLevelOption }; - validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); + validateCommand.SetHandler(OpenApiService.ValidateOpenApiDocument, descriptionOption, logLevelOption); var transformCommand = new Command("transform") { @@ -61,16 +60,16 @@ static async Task Main(string[] args) outputOption, versionOption, formatOption, - logLevelOption, - inlineOption, - resolveExternalOption, + logLevelOption, filterByOperationIdsOption, filterByTagsOption, - filterByCollectionOption + filterByCollectionOption, + inlineOption, + resolveExternalOption, }; - transformCommand.Handler = CommandHandler.Create( - OpenApiService.ProcessOpenApiDocument); + transformCommand.SetHandler ( + OpenApiService.ProcessOpenApiDocument, descriptionOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From 43c7eee6b09f17666a39660a1d168b2568ae9fa2 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 2 Feb 2022 08:16:12 -0500 Subject: [PATCH 068/720] Updated versions to preview3 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ea617ae9..9fe37bbc 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -7,7 +7,7 @@ true hidi ./../../artifacts - 0.5.0-preview2 + 0.5.0-preview3 From 6664659b6254679086b4fa95850fe11829aec4bd Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 3 Feb 2022 17:04:34 +0300 Subject: [PATCH 069/720] Clean up code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 10 +++++----- src/Microsoft.OpenApi.Hidi/Program.cs | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 19a4f28c..5b0e5d15 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -83,21 +83,21 @@ string filterbycollection Stream stream; OpenApiDocument document; OpenApiFormat openApiFormat; + var stopwatch = new Stopwatch(); if (!string.IsNullOrEmpty(csdl)) { // Default to yaml during csdl to OpenApi conversion - openApiFormat = format ?? GetOpenApiFormat(csdl); + openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - stream = GetStream(csdl); + stream = await GetStream(csdl, logger); document = ConvertCsdlToOpenApi(stream); } else { - stream = GetStream(openapi, logger); + stream = await GetStream(openapi, logger); // Parsing OpenAPI file - var stopwatch = new Stopwatch(); stopwatch.Start(); logger.LogTrace("Parsing OpenApi file"); var result = new OpenApiStreamReader(new OpenApiReaderSettings @@ -126,7 +126,7 @@ string filterbycollection logger.LogTrace("{timestamp}ms: Parsed OpenApi successfully. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } - openApiFormat = format ?? GetOpenApiFormat(openapi); + openApiFormat = format ?? GetOpenApiFormat(openapi, logger); version ??= result.OpenApiDiagnostic.SpecificationVersion; } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index df8d26fa..95e6f63f 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -19,7 +19,7 @@ static async Task Main(string[] args) var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL"); descriptionOption.AddAlias("-d"); - var csdlOption = new Option("--csdl", "Input CSDL file path or URL", typeof(string)); + var csdlOption = new Option("--csdl", "Input CSDL file path or URL"); csdlOption.AddAlias("-cs"); var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; @@ -72,8 +72,8 @@ static async Task Main(string[] args) resolveExternalOption, }; - transformCommand.SetHandler ( - OpenApiService.ProcessOpenApiDocument, descriptionOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); + transformCommand.SetHandler ( + OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From 6c045358c6933a0f92f2ffe1871c45f25d00e07f Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Fri, 4 Feb 2022 10:25:41 +0300 Subject: [PATCH 070/720] Default to V3 of OpenApi during document serialization --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 5b0e5d15..f10a6f8a 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -87,8 +87,9 @@ string filterbycollection if (!string.IsNullOrEmpty(csdl)) { - // Default to yaml during csdl to OpenApi conversion + // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion openApiFormat = format ?? GetOpenApiFormat(csdl, logger); + version ??= OpenApiSpecVersion.OpenApi3_0; stream = await GetStream(csdl, logger); document = ConvertCsdlToOpenApi(stream); From 2278a1a3ef6374aaee4560250f9fea8c335d9c0d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Fri, 4 Feb 2022 10:26:00 +0300 Subject: [PATCH 071/720] Clean up --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index f10a6f8a..964329aa 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -356,10 +356,10 @@ internal static async void ValidateOpenApiDocument(string openapi, LogLevel logl Console.WriteLine(statsVisitor.GetStatisticsReport()); } - private static OpenApiFormat GetOpenApiFormat(string openapi, ILogger logger) + private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) { logger.LogTrace("Getting the OpenApi format"); - return !openapi.StartsWith("http") && Path.GetExtension(openapi) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; + return !input.StartsWith("http") && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; } private static ILogger ConfigureLoggerInstance(LogLevel loglevel) From 87e744e5dcb94b576f06f2d30826c7a70ee9293c Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 7 Feb 2022 10:00:35 +0300 Subject: [PATCH 072/720] Update package version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3e2b209b..4b305478 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -17,7 +17,7 @@ - + From 9778702f5f5a38e8bd985c1c0e065d0a86bdc1ba Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 7 Feb 2022 17:23:47 +0300 Subject: [PATCH 073/720] Set Nuget properties to align with compliance guidelines during package publishing --- .../Microsoft.OpenApi.Hidi.csproj | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 9fe37bbc..f9fd1e40 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -3,11 +3,29 @@ Exe netcoreapp3.1 - 9.0 + 9.0 true + https://github.com/Microsoft/OpenAPI.NET + MIT + true + Microsoft + Microsoft + Microsoft.OpenApi.Hidi + Microsoft.OpenApi.Hidi hidi ./../../artifacts 0.5.0-preview3 + © Microsoft Corporation. All rights reserved. + OpenAPI .NET + https://github.com/Microsoft/OpenAPI.NET + +- Publish symbols. + + Microsoft.OpenApi.Hidi + Microsoft.OpenApi.Hidi + true + + true From 0034b9f6484a811a91df8456454d3067b8b70844 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Tue, 8 Feb 2022 00:00:03 -0500 Subject: [PATCH 074/720] Updated version to preview4 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f9fd1e40..a210a5c9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -14,7 +14,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 0.5.0-preview3 + 0.5.0-preview4 © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET From 419c747e29b244b5d7c7a428847df7e0b5f490eb Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Feb 2022 15:00:21 +0300 Subject: [PATCH 075/720] Add package icon and description --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index bd22e636..70a39df3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -5,6 +5,7 @@ netcoreapp3.1 9.0 true + http://go.microsoft.com/fwlink/?LinkID=288890 https://github.com/Microsoft/OpenAPI.NET MIT true @@ -15,6 +16,7 @@ hidi ./../../artifacts 0.5.0-preview4 + OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET From 05eb0bc99b38b55cfd2bf4ee199707d9c88d0751 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 12 Feb 2022 15:58:50 -0500 Subject: [PATCH 076/720] Fixed ValidateDocument method in hidi --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 70a39df3..a4cb0aa1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + net5.0 9.0 true http://go.microsoft.com/fwlink/?LinkID=288890 diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 964329aa..d7a4f429 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -251,13 +251,13 @@ private static async Task GetStream(string input, ILogger logger) { try { - using var httpClientHandler = new HttpClientHandler() + var httpClientHandler = new HttpClientHandler() { SslProtocols = System.Security.Authentication.SslProtocols.Tls12, }; using var httpClient = new HttpClient(httpClientHandler) { - DefaultRequestVersion = HttpVersion.Version20 + DefaultRequestVersion = HttpVersion.Version20 }; stream = await httpClient.GetStreamAsync(input); } @@ -323,7 +323,7 @@ public static Dictionary> ParseJsonCollectionFile(Stream st return requestUrls; } - internal static async void ValidateOpenApiDocument(string openapi, LogLevel loglevel) + internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel) { if (string.IsNullOrEmpty(openapi)) { From e68f84138470687fc5d6c25e9450b68084480bd5 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 15 Feb 2022 18:28:47 +0300 Subject: [PATCH 077/720] Upgrade packages --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 70a39df3..1a413186 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -36,7 +36,7 @@ - + From 29c8a27af2cd5a54cf643e042ded009834ad6434 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 16 Feb 2022 12:31:03 +0300 Subject: [PATCH 078/720] Update TFMs in project and workflow files --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 70a39df3..95e61a39 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + net6.0 9.0 true http://go.microsoft.com/fwlink/?LinkID=288890 From d16ba4b94af9e356a3756033aa729bf7210a7dd1 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 19 Feb 2022 12:38:48 -0500 Subject: [PATCH 079/720] Added hostdocument to OpenApiReference --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 05b44c9c..890327dd 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -53,7 +53,7 @@ string filterByCollection var result = new OpenApiStreamReader(new OpenApiReaderSettings { - ReferenceResolution = inlineExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + LoadExternalRefs = inlineExternal, RuleSet = ValidationRuleSet.GetDefaultRuleSet(), BaseUrl = new Uri(inputUrl.AbsoluteUri) } From c7a1f16a974ecdc838eeae7a947ee07823338cfc Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 19 Feb 2022 15:01:59 -0500 Subject: [PATCH 080/720] Missed these files --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 103 +------------------ src/Microsoft.OpenApi.Hidi/Program.cs | 22 ---- 2 files changed, 4 insertions(+), 121 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 7f51960d..632042f3 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -34,14 +34,6 @@ public static async void ProcessOpenApiDocument( FileInfo output, OpenApiSpecVersion? version, OpenApiFormat? format, -<<<<<<< HEAD - bool inlineExternal, - bool inlineLocal, - string filterByOperationIds, - string filterByTags, - string filterByCollection - ) -======= LogLevel loglevel, bool inline, bool resolveexternal, @@ -49,7 +41,6 @@ string filterByCollection string filterbytags, string filterbycollection ) ->>>>>>> origin/vnext { var logger = ConfigureLoggerInstance(loglevel); @@ -95,18 +86,6 @@ string filterbycollection OpenApiFormat openApiFormat; var stopwatch = new Stopwatch(); -<<<<<<< HEAD - var inputUrl = GetInputUrl(input); - var stream = GetStream(inputUrl); - - OpenApiDocument document; - - var result = new OpenApiStreamReader(new OpenApiReaderSettings - { - LoadExternalRefs = inlineExternal, - RuleSet = ValidationRuleSet.GetDefaultRuleSet(), - BaseUrl = new Uri(inputUrl.AbsoluteUri) -======= if (!string.IsNullOrEmpty(csdl)) { // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion @@ -151,13 +130,8 @@ string filterbycollection openApiFormat = format ?? GetOpenApiFormat(openapi, logger); version ??= result.OpenApiDiagnostic.SpecificationVersion; ->>>>>>> origin/vnext } -<<<<<<< HEAD - document = result.OpenApiDocument; -======= ->>>>>>> origin/vnext Func predicate; // Check if filter options are provided, then slice the OpenAPI document @@ -178,15 +152,7 @@ string filterbycollection logger.LogTrace("Creating predicate based on the tags supplied."); predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); -<<<<<<< HEAD - if (!string.IsNullOrEmpty(filterByCollection)) - { - var fileStream = GetStream(GetInputUrl(filterByCollection)); - var requestUrls = ParseJsonCollectionFile(fileStream); - predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document); -======= logger.LogTrace("Creating subset OpenApi document."); ->>>>>>> origin/vnext document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } if (!string.IsNullOrEmpty(filterbycollection)) @@ -229,26 +195,6 @@ string filterbycollection textWriter.Flush(); } -<<<<<<< HEAD - private static Uri GetInputUrl(string input) - { - if (input.StartsWith("http")) - { - return new Uri(input); - } - else - { - return new Uri("file://" + Path.GetFullPath(input)); - } - } - - private static Stream GetStream(Uri input) - { - Stream stream; - if (input.Scheme == "http" || input.Scheme == "https") - { - var httpClient = new HttpClient(new HttpClientHandler() -======= /// /// Converts CSDL to OpenAPI /// @@ -303,10 +249,9 @@ private static async Task GetStream(string input, ILogger logger) stopwatch.Start(); Stream stream; - if (input.StartsWith("http")) + if (input.Scheme == "http" || input.Scheme == "https") { try ->>>>>>> origin/vnext { var httpClientHandler = new HttpClientHandler() { @@ -326,14 +271,6 @@ private static async Task GetStream(string input, ILogger logger) } else if (input.Scheme == "file") { -<<<<<<< HEAD - var fileInput = new FileInfo(input.AbsolutePath); - stream = fileInput.OpenRead(); - } - else - { - throw new ArgumentException("Unrecognized exception"); -======= try { var fileInput = new FileInfo(input); @@ -350,7 +287,6 @@ ex is SecurityException || logger.LogError($"Could not open the file at {input}, reason: {ex.Message}"); return null; } ->>>>>>> origin/vnext } stopwatch.Stop(); logger.LogTrace("{timestamp}ms: Read file {input}", stopwatch.ElapsedMilliseconds, input); @@ -389,31 +325,18 @@ public static Dictionary> ParseJsonCollectionFile(Stream st return requestUrls; } -<<<<<<< HEAD - internal static async Task ValidateOpenApiDocument(string input, bool resolveExternal) -======= internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel) ->>>>>>> origin/vnext { if (string.IsNullOrEmpty(openapi)) { throw new ArgumentNullException(nameof(openapi)); } -<<<<<<< HEAD - var inputUrl = GetInputUrl(input); - var stream = GetStream(GetInputUrl(input)); - - OpenApiDocument document; - - var result = await new OpenApiStreamReader(new OpenApiReaderSettings -======= var logger = ConfigureLoggerInstance(loglevel); var stream = await GetStream(openapi, logger); OpenApiDocument document; logger.LogTrace("Parsing the OpenApi file"); document = new OpenApiStreamReader(new OpenApiReaderSettings ->>>>>>> origin/vnext { ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet(), @@ -432,30 +355,12 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel logl } } - if (document.Workspace == null) { - var statsVisitor = new StatsVisitor(); - var walker = new OpenApiWalker(statsVisitor); - walker.Walk(document); - Console.WriteLine(statsVisitor.GetStatisticsReport()); - } - else - { - foreach (var memberDocument in document.Workspace.Documents) - { - Console.WriteLine("Stats for " + memberDocument.Info.Title); - var statsVisitor = new StatsVisitor(); - var walker = new OpenApiWalker(statsVisitor); - walker.Walk(memberDocument); - Console.WriteLine(statsVisitor.GetStatisticsReport()); - } - } + var statsVisitor = new StatsVisitor(); + var walker = new OpenApiWalker(statsVisitor); + walker.Walk(document); -<<<<<<< HEAD - -======= logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); Console.WriteLine(statsVisitor.GetStatisticsReport()); ->>>>>>> origin/vnext } private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index c078d7ba..95e6f63f 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -51,27 +51,6 @@ static async Task Main(string[] args) var validateCommand = new Command("validate") { -<<<<<<< HEAD - new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ), - new Option("--resolveExternal","Resolve external $refs", typeof(bool)) - }; - validateCommand.Handler = CommandHandler.Create(OpenApiService.ValidateOpenApiDocument); - - var transformCommand = new Command("transform") - { - new Option("--input", "Input OpenAPI description file path or URL", typeof(string) ), - new Option("--output","Output OpenAPI description file", typeof(FileInfo), arity: ArgumentArity.ZeroOrOne), - new Option("--version", "OpenAPI specification version", typeof(OpenApiSpecVersion)), - new Option("--format", "File format",typeof(OpenApiFormat) ), - new Option("--inlineExternal", "Inline external $ref instances", typeof(bool) ), - new Option("--inlineLocal", "Inline local $ref instances", typeof(bool) ), - new Option("--filterByOperationIds", "Filters OpenApiDocument by OperationId(s) provided", typeof(string)), - 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( - OpenApiService.ProcessOpenApiDocument); -======= descriptionOption, logLevelOption }; @@ -95,7 +74,6 @@ static async Task Main(string[] args) transformCommand.SetHandler ( OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); ->>>>>>> origin/vnext rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From 3b75335267b4d97c782bddb9b757df3c2df89f5b Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 21 Feb 2022 17:45:43 -0500 Subject: [PATCH 081/720] Updated referencable items to use GetEffective when inlining --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 20 ++++++++++---------- src/Microsoft.OpenApi.Hidi/Program.cs | 14 +++++++------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 632042f3..e813e72a 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -28,15 +28,15 @@ namespace Microsoft.OpenApi.Hidi { public class OpenApiService { - public static async void ProcessOpenApiDocument( + public static async Task ProcessOpenApiDocument( string openapi, string csdl, FileInfo output, OpenApiSpecVersion? version, OpenApiFormat? format, LogLevel loglevel, - bool inline, - bool resolveexternal, + bool inlineLocal, + bool inlineExternal, string filterbyoperationids, string filterbytags, string filterbycollection @@ -104,8 +104,9 @@ string filterbycollection logger.LogTrace("Parsing OpenApi file"); var result = new OpenApiStreamReader(new OpenApiReaderSettings { - ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, - RuleSet = ValidationRuleSet.GetDefaultRuleSet() + RuleSet = ValidationRuleSet.GetDefaultRuleSet(), + LoadExternalRefs = inlineExternal, + BaseUrl = openapi.StartsWith("http") ? new Uri(openapi) : new Uri("file:" + new FileInfo(openapi).DirectoryName + "\\") } ).ReadAsync(stream).GetAwaiter().GetResult(); @@ -249,7 +250,7 @@ private static async Task GetStream(string input, ILogger logger) stopwatch.Start(); Stream stream; - if (input.Scheme == "http" || input.Scheme == "https") + if (input.StartsWith("http")) { try { @@ -269,7 +270,7 @@ private static async Task GetStream(string input, ILogger logger) return null; } } - else if (input.Scheme == "file") + else { try { @@ -336,11 +337,10 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel logl OpenApiDocument document; logger.LogTrace("Parsing the OpenApi file"); - document = new OpenApiStreamReader(new OpenApiReaderSettings + var result = await new OpenApiStreamReader(new OpenApiReaderSettings { - ReferenceResolution = resolveExternal == true ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, RuleSet = ValidationRuleSet.GetDefaultRuleSet(), - BaseUrl = new Uri(inputUrl.AbsoluteUri) + BaseUrl = new Uri(openapi) } ).ReadAsync(stream); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 95e6f63f..309fa536 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -43,11 +43,11 @@ static async Task Main(string[] args) var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided"); filterByCollectionOption.AddAlias("-c"); - var inlineOption = new Option("--inline", "Inline $ref instances"); - inlineOption.AddAlias("-i"); + var inlineLocalOption = new Option("--inlineLocal", "Inline local $ref instances"); + inlineLocalOption.AddAlias("-il"); - var resolveExternalOption = new Option("--resolve-external", "Resolve external $refs"); - resolveExternalOption.AddAlias("-ex"); + var inlineExternalOption = new Option("--inlineExternal", "Inline external $ref instances"); + inlineExternalOption.AddAlias("-ie"); var validateCommand = new Command("validate") { @@ -68,12 +68,12 @@ static async Task Main(string[] args) filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption, - inlineOption, - resolveExternalOption, + inlineLocalOption, + inlineExternalOption }; transformCommand.SetHandler ( - OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); + OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineLocalOption, inlineExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From 37a57c6a7510691af578f78673513d15116e9d85 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 21 Feb 2022 22:34:19 -0500 Subject: [PATCH 082/720] Removed redundant using --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index e813e72a..fb785f9e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -12,7 +12,6 @@ using System.Text; using System.Threading.Tasks; using System.Text.Json; -using System.Threading.Tasks; using Microsoft.Extensions.Logging; using System.Xml.Linq; using Microsoft.OData.Edm.Csdl; From 43747a7b01394e6c1c7a4b5f682cf25495fb48b8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 28 Feb 2022 11:21:44 -0500 Subject: [PATCH 083/720] - upgrades odata conversion lib reference in hidi --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ecd6f19f..2c745fd7 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,13 +15,13 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 0.5.0-preview4 + 0.6.0-preview1 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET -- Publish symbols. +- Upgrades Microsoft.OpenApi.OData to 1.0.10-preview1 Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi @@ -37,7 +37,7 @@ - + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index d7a4f429..730b8f89 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -206,8 +206,12 @@ public static OpenApiDocument ConvertCsdlToOpenApi(Stream csdl) var settings = new OpenApiConvertSettings() { + AddSingleQuotesForStringParameters = true, + AddEnumDescriptionExtension = true, + DeclarePathParametersOnPathItem = true, EnableKeyAsSegment = true, EnableOperationId = true, + ErrorResponsesAsDefault = false, PrefixEntityTypeNameBeforeKey = true, TagDepth = 2, EnablePagination = true, From b14247b6c3579e11b4cce80c7f39a26f7a7b395a Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 28 Feb 2022 11:50:23 -0500 Subject: [PATCH 084/720] - fixes conversion tests and makes method async --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 730b8f89..e04fa4f3 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -92,7 +92,7 @@ string filterbycollection version ??= OpenApiSpecVersion.OpenApi3_0; stream = await GetStream(csdl, logger); - document = ConvertCsdlToOpenApi(stream); + document = await ConvertCsdlToOpenApi(stream); } else { @@ -198,10 +198,10 @@ string filterbycollection /// /// The CSDL stream. /// An OpenAPI document. - public static OpenApiDocument ConvertCsdlToOpenApi(Stream csdl) + public static async Task ConvertCsdlToOpenApi(Stream csdl) { using var reader = new StreamReader(csdl); - var csdlText = reader.ReadToEndAsync().GetAwaiter().GetResult(); + var csdlText = await reader.ReadToEndAsync(); var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); var settings = new OpenApiConvertSettings() From 4b62488286b3b183ce46bd2784867f9bc2ee97ff Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 28 Feb 2022 16:01:14 -0500 Subject: [PATCH 085/720] - fixes an issue where hidi would not process async --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 + src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 2c745fd7..cd8d1413 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -22,6 +22,7 @@ https://github.com/Microsoft/OpenAPI.NET - Upgrades Microsoft.OpenApi.OData to 1.0.10-preview1 +- Fixes an issue where hidi would not process async operations Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index e04fa4f3..1f86e3c0 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -27,7 +27,7 @@ namespace Microsoft.OpenApi.Hidi { public class OpenApiService { - public static async void ProcessOpenApiDocument( + public static async Task ProcessOpenApiDocument( string openapi, string csdl, FileInfo output, From 8eda9538428a171b3855992f706753445577fdfa Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 28 Feb 2022 19:20:45 -0500 Subject: [PATCH 086/720] Updated versions to preview5 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cd8d1413..ff203cf5 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 0.6.0-preview1 + 0.5.0-preview5 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From 19e989d4a88bbf53485768adc32c439d868aff96 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 3 Mar 2022 18:58:39 +0300 Subject: [PATCH 087/720] Update cmd parameter to accept string values for OpenApi spec version --- src/Microsoft.OpenApi.Hidi/Program.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 95e6f63f..4fed0cb4 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -25,7 +25,7 @@ static async Task Main(string[] args) var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; outputOption.AddAlias("-o"); - var versionOption = new Option("--version", "OpenAPI specification version"); + var versionOption = new Option("--version", "OpenAPI specification version"); versionOption.AddAlias("-v"); var formatOption = new Option("--format", "File format"); @@ -72,7 +72,7 @@ static async Task Main(string[] args) resolveExternalOption, }; - transformCommand.SetHandler ( + transformCommand.SetHandler ( OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); From 4c1dfacfc7acee9fdc5bcacedd85755f37910106 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 3 Mar 2022 19:00:54 +0300 Subject: [PATCH 088/720] Cast string to OpenApiSpecVersion enum value --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 ++++--- .../OpenApiSpecVersionExtension.cs | 31 +++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 1f86e3c0..77ddd08c 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -22,6 +22,7 @@ using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; +using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionExtension; namespace Microsoft.OpenApi.Hidi { @@ -31,7 +32,7 @@ public static async Task ProcessOpenApiDocument( string openapi, string csdl, FileInfo output, - OpenApiSpecVersion? version, + string? version, OpenApiFormat? format, LogLevel loglevel, bool inline, @@ -83,13 +84,14 @@ string filterbycollection Stream stream; OpenApiDocument document; OpenApiFormat openApiFormat; + OpenApiSpecVersion? openApiVersion = null; var stopwatch = new Stopwatch(); if (!string.IsNullOrEmpty(csdl)) { // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - version ??= OpenApiSpecVersion.OpenApi3_0; + openApiVersion = version.TryParseOpenApiSpecVersion(); stream = await GetStream(csdl, logger); document = await ConvertCsdlToOpenApi(stream); @@ -128,7 +130,7 @@ string filterbycollection } openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - version ??= result.OpenApiDiagnostic.SpecificationVersion; + openApiVersion ??= result.OpenApiDiagnostic.SpecificationVersion; } Func predicate; @@ -185,14 +187,14 @@ string filterbycollection logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); stopwatch.Start(); - document.Serialize(writer, (OpenApiSpecVersion)version); + document.Serialize(writer, (OpenApiSpecVersion)openApiVersion); stopwatch.Stop(); logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); textWriter.Flush(); } - + /// /// Converts CSDL to OpenAPI /// diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs new file mode 100644 index 00000000..9b877099 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.Linq; + +namespace Microsoft.OpenApi.Hidi +{ + public static class OpenApiSpecVersionExtension + { + public static OpenApiSpecVersion TryParseOpenApiSpecVersion(this string value) + { + if (string.IsNullOrEmpty(value)) + { + throw new InvalidOperationException("Please provide a version"); + } + var res = value.Split('.', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); + + if (int.TryParse(res, out int result)) + { + + if (result >= 2 || result <= 3) + { + return (OpenApiSpecVersion)result; + } + } + + return OpenApiSpecVersion.OpenApi3_0; // default + } + } +} From 0e181798b8ffb6f7ed9e1a05b01d503f8f90dc25 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 3 Mar 2022 13:09:29 -0500 Subject: [PATCH 089/720] - bumps reference to openapi.odata --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ff203cf5..e33f4777 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 7b7fec6e7cb0aa5545bf4f8d53abed5b1fb98586 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 7 Mar 2022 12:06:25 +0300 Subject: [PATCH 090/720] Refactor logic to accept a string as a regular param and rename the extension class --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- ...rsionExtension.cs => OpenApiSpecVersionHelper.cs} | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) rename src/Microsoft.OpenApi.Hidi/{OpenApiSpecVersionExtension.cs => OpenApiSpecVersionHelper.cs} (76%) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 77ddd08c..952dc0b9 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -22,7 +22,7 @@ using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; -using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionExtension; +using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper; namespace Microsoft.OpenApi.Hidi { @@ -91,7 +91,7 @@ string filterbycollection { // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - openApiVersion = version.TryParseOpenApiSpecVersion(); + openApiVersion = TryParseOpenApiSpecVersion(version); stream = await GetStream(csdl, logger); document = await ConvertCsdlToOpenApi(stream); diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs similarity index 76% rename from src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs rename to src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs index 9b877099..a78255be 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionExtension.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs @@ -6,24 +6,24 @@ namespace Microsoft.OpenApi.Hidi { - public static class OpenApiSpecVersionExtension + public static class OpenApiSpecVersionHelper { - public static OpenApiSpecVersion TryParseOpenApiSpecVersion(this string value) + public static OpenApiSpecVersion TryParseOpenApiSpecVersion(string value) { if (string.IsNullOrEmpty(value)) { throw new InvalidOperationException("Please provide a version"); } var res = value.Split('.', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); - + if (int.TryParse(res, out int result)) { - if (result >= 2 || result <= 3) + if (result >= 2 && result < 3) { - return (OpenApiSpecVersion)result; + return OpenApiSpecVersion.OpenApi2_0; } - } + } return OpenApiSpecVersion.OpenApi3_0; // default } From b81d32eed607abc2a4a4f8dff0b4db8946916f39 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Mar 2022 14:55:49 +0300 Subject: [PATCH 091/720] Better error handling --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 58 ++++++++++++++------ src/Microsoft.OpenApi.Hidi/Program.cs | 5 +- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 1f86e3c0..def1afb6 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -22,6 +22,7 @@ using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; +using System.Threading; namespace Microsoft.OpenApi.Hidi { @@ -38,7 +39,8 @@ public static async Task ProcessOpenApiDocument( bool resolveexternal, string filterbyoperationids, string filterbytags, - string filterbycollection + string filterbycollection, + CancellationToken cancellationToken ) { var logger = ConfigureLoggerInstance(loglevel); @@ -52,7 +54,11 @@ string filterbycollection } catch (ArgumentNullException ex) { - logger.LogError(ex.Message); +#if DEBUG + logger.LogCritical(ex, ex.Message); +#else + logger.LogCritical(ex.Message); +#endif return; } try @@ -64,19 +70,27 @@ string filterbycollection } catch (ArgumentException ex) { - logger.LogError(ex.Message); +#if DEBUG + logger.LogCritical(ex, ex.Message); +#else + logger.LogCritical(ex.Message); +#endif return; } try { if (output.Exists) { - throw new IOException("The file you're writing to already exists. Please input a new file path."); + throw new IOException($"The file {output} already exists. Please input a new file path."); } } catch (IOException ex) { - logger.LogError(ex.Message); +#if DEBUG + logger.LogCritical(ex, ex.Message); +#else + logger.LogCritical(ex.Message); +#endif return; } @@ -91,12 +105,12 @@ string filterbycollection openApiFormat = format ?? GetOpenApiFormat(csdl, logger); version ??= OpenApiSpecVersion.OpenApi3_0; - stream = await GetStream(csdl, logger); + stream = await GetStream(csdl, logger, cancellationToken); document = await ConvertCsdlToOpenApi(stream); } else { - stream = await GetStream(openapi, logger); + stream = await GetStream(openapi, logger, cancellationToken); // Parsing OpenAPI file stopwatch.Start(); @@ -156,7 +170,7 @@ string filterbycollection } if (!string.IsNullOrEmpty(filterbycollection)) { - var fileStream = await GetStream(filterbycollection, logger); + var fileStream = await GetStream(filterbycollection, logger, cancellationToken); var requestUrls = ParseJsonCollectionFile(fileStream, logger); logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); @@ -245,7 +259,7 @@ public static OpenApiDocument FixReferences(OpenApiDocument document) return doc; } - private static async Task GetStream(string input, ILogger logger) + private static async Task GetStream(string input, ILogger logger, CancellationToken cancellationToken) { var stopwatch = new Stopwatch(); stopwatch.Start(); @@ -263,11 +277,15 @@ private static async Task GetStream(string input, ILogger logger) { DefaultRequestVersion = HttpVersion.Version20 }; - stream = await httpClient.GetStreamAsync(input); + stream = await httpClient.GetStreamAsync(input, cancellationToken); } catch (HttpRequestException ex) { - logger.LogError($"Could not download the file at {input}, reason{ex}"); +#if DEBUG + logger.LogCritical(ex, $"Could not download the file at {input}, reason: {ex.Message}"); +#else + logger.LogCritical($"Could not download the file at {input}, reason: {ex.Message}", input, ex.Message); +#endif return null; } } @@ -286,7 +304,11 @@ ex is UnauthorizedAccessException || ex is SecurityException || ex is NotSupportedException) { - logger.LogError($"Could not open the file at {input}, reason: {ex.Message}"); +#if DEBUG + logger.LogCritical(ex, $"Could not open the file at {input}, reason: {ex.Message}"); +#else + logger.LogCritical($"Could not open the file at {input}, reason: {ex.Message}"); +#endif return null; } } @@ -327,14 +349,14 @@ public static Dictionary> ParseJsonCollectionFile(Stream st return requestUrls; } - internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel) + internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(openapi)) { throw new ArgumentNullException(nameof(openapi)); } var logger = ConfigureLoggerInstance(loglevel); - var stream = await GetStream(openapi, logger); + var stream = await GetStream(openapi, logger, cancellationToken); OpenApiDocument document; logger.LogTrace("Parsing the OpenApi file"); @@ -369,16 +391,16 @@ private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) private static ILogger ConfigureLoggerInstance(LogLevel loglevel) { // Configure logger options - #if DEBUG +#if DEBUG loglevel = loglevel > LogLevel.Debug ? LogLevel.Debug : loglevel; - #endif +#endif var logger = LoggerFactory.Create((builder) => { builder .AddConsole() - #if DEBUG +#if DEBUG .AddDebug() - #endif +#endif .SetMinimumLevel(loglevel); }).CreateLogger(); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 95e6f63f..f3d455e4 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -3,6 +3,7 @@ using System.CommandLine; using System.IO; +using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; @@ -55,7 +56,7 @@ static async Task Main(string[] args) logLevelOption }; - validateCommand.SetHandler(OpenApiService.ValidateOpenApiDocument, descriptionOption, logLevelOption); + validateCommand.SetHandler(OpenApiService.ValidateOpenApiDocument, descriptionOption, logLevelOption); var transformCommand = new Command("transform") { @@ -72,7 +73,7 @@ static async Task Main(string[] args) resolveExternalOption, }; - transformCommand.SetHandler ( + transformCommand.SetHandler ( OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); From 4ee39e671f7b7ce2728ce8507a66b679e57927d6 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Mar 2022 16:43:02 +0300 Subject: [PATCH 092/720] Remove string interpolation --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index def1afb6..7b94c499 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -128,10 +128,13 @@ CancellationToken cancellationToken var context = result.OpenApiDiagnostic; if (context.Errors.Count > 0) { + logger.LogTrace("{timestamp}ms: Parsed OpenAPI with errors. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + var errorReport = new StringBuilder(); foreach (var error in context.Errors) { + logger.LogError("OpenApi Parsing error: {message}", error.ToString()); errorReport.AppendLine(error.ToString()); } logger.LogError($"{stopwatch.ElapsedMilliseconds}ms: OpenApi Parsing errors {string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())}"); @@ -282,9 +285,9 @@ private static async Task GetStream(string input, ILogger logger, Cancel catch (HttpRequestException ex) { #if DEBUG - logger.LogCritical(ex, $"Could not download the file at {input}, reason: {ex.Message}"); + logger.LogCritical(ex, "Could not download the file at {inputPath}, reason: {exMessage}", input, ex.Message); #else - logger.LogCritical($"Could not download the file at {input}, reason: {ex.Message}", input, ex.Message); + logger.LogCritical( "Could not download the file at {inputPath}, reason: {exMessage}", input, ex.Message); #endif return null; } @@ -305,9 +308,9 @@ ex is SecurityException || ex is NotSupportedException) { #if DEBUG - logger.LogCritical(ex, $"Could not open the file at {input}, reason: {ex.Message}"); + logger.LogCritical(ex, "Could not open the file at {inputPath}, reason: {exMessage}", input, ex.Message); #else - logger.LogCritical($"Could not open the file at {input}, reason: {ex.Message}"); + logger.LogCritical("Could not open the file at {inputPath}, reason: {exMessage}", input, ex.Message); #endif return null; } From 5c437aa4df5ea9a7e8b742e6438e2c4c32916509 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Mar 2022 16:54:37 +0300 Subject: [PATCH 093/720] Add a try catch block to catch any exceptions thrown during document validation --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 56 ++++++++++++-------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 7b94c499..64c22838 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -354,35 +354,49 @@ public static Dictionary> ParseJsonCollectionFile(Stream st internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(openapi)) - { - throw new ArgumentNullException(nameof(openapi)); - } var logger = ConfigureLoggerInstance(loglevel); - var stream = await GetStream(openapi, logger, cancellationToken); - OpenApiDocument document; - logger.LogTrace("Parsing the OpenApi file"); - document = new OpenApiStreamReader(new OpenApiReaderSettings + try { - RuleSet = ValidationRuleSet.GetDefaultRuleSet() - } - ).Read(stream, out var context); + if (string.IsNullOrEmpty(openapi)) + { + throw new ArgumentNullException(nameof(openapi)); + } + var stream = await GetStream(openapi, logger, cancellationToken); - if (context.Errors.Count != 0) - { - foreach (var error in context.Errors) + OpenApiDocument document; + logger.LogTrace("Parsing the OpenApi file"); + document = new OpenApiStreamReader(new OpenApiReaderSettings { - Console.WriteLine(error.ToString()); + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).Read(stream, out var context); + + if (context.Errors.Count != 0) + { + foreach (var error in context.Errors) + { + logger.LogError("OpenApi Parsing error: {message}", error.ToString()); + Console.WriteLine(error.ToString()); + } } - } - var statsVisitor = new StatsVisitor(); - var walker = new OpenApiWalker(statsVisitor); - walker.Walk(document); + var statsVisitor = new StatsVisitor(); + var walker = new OpenApiWalker(statsVisitor); + walker.Walk(document); + + logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); + Console.WriteLine(statsVisitor.GetStatisticsReport()); + } + catch(Exception ex) + { +#if DEBUG + logger.LogCritical(ex, ex.Message); +#else + logger.LogCritical(ex.Message); +#endif + } - logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); - Console.WriteLine(statsVisitor.GetStatisticsReport()); } private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) From a3fe24ee4a664fe8505df26e49dba64e8eaa64b8 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Mar 2022 17:49:47 +0300 Subject: [PATCH 094/720] Clean up code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 30 ++------------------ 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 64c22838..09ad21d9 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -49,42 +49,18 @@ CancellationToken cancellationToken { if (string.IsNullOrEmpty(openapi) && string.IsNullOrEmpty(csdl)) { - throw new ArgumentNullException("Please input a file path"); + throw new ArgumentException("Please input a file path"); } - } - catch (ArgumentNullException ex) - { -#if DEBUG - logger.LogCritical(ex, ex.Message); -#else - logger.LogCritical(ex.Message); -#endif - return; - } - try - { if(output == null) { - throw new ArgumentException(nameof(output)); + throw new ArgumentNullException(nameof(output)); } - } - catch (ArgumentException ex) - { -#if DEBUG - logger.LogCritical(ex, ex.Message); -#else - logger.LogCritical(ex.Message); -#endif - return; - } - try - { if (output.Exists) { throw new IOException($"The file {output} already exists. Please input a new file path."); } } - catch (IOException ex) + catch (Exception ex) { #if DEBUG logger.LogCritical(ex, ex.Message); From 5e5821557b28dc7c4898256655491668baff5f55 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Mar 2022 20:47:58 +0300 Subject: [PATCH 095/720] Add a --clean-output parameter for overwriting existing files --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 +++++ src/Microsoft.OpenApi.Hidi/Program.cs | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 1f86e3c0..9e50debf 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -31,6 +31,7 @@ public static async Task ProcessOpenApiDocument( string openapi, string csdl, FileInfo output, + bool cleanoutput, OpenApiSpecVersion? version, OpenApiFormat? format, LogLevel loglevel, @@ -69,6 +70,10 @@ string filterbycollection } try { + if (cleanoutput) + { + output.Delete(); + } if (output.Exists) { throw new IOException("The file you're writing to already exists. Please input a new file path."); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 95e6f63f..960031de 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -25,6 +25,9 @@ static async Task Main(string[] args) var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; outputOption.AddAlias("-o"); + var cleanOutputOption = new Option("--clean-output", "Overwrite an existing file"); + cleanOutputOption.AddAlias("-co"); + var versionOption = new Option("--version", "OpenAPI specification version"); versionOption.AddAlias("-v"); @@ -62,6 +65,7 @@ static async Task Main(string[] args) descriptionOption, csdlOption, outputOption, + cleanOutputOption, versionOption, formatOption, logLevelOption, @@ -72,8 +76,8 @@ static async Task Main(string[] args) resolveExternalOption, }; - transformCommand.SetHandler ( - OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); + transformCommand.SetHandler ( + OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, cleanOutputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From f6ab5a40b6b5732735e8449507cf2b227048eb69 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Mar 2022 21:03:34 +0300 Subject: [PATCH 096/720] Add an exit statement and use logger to log errors to the console --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 09ad21d9..ec53b615 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -353,7 +353,6 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel logl foreach (var error in context.Errors) { logger.LogError("OpenApi Parsing error: {message}", error.ToString()); - Console.WriteLine(error.ToString()); } } @@ -362,7 +361,7 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel logl walker.Walk(document); logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); - Console.WriteLine(statsVisitor.GetStatisticsReport()); + logger.LogInformation(statsVisitor.GetStatisticsReport()); } catch(Exception ex) { @@ -371,6 +370,7 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel logl #else logger.LogCritical(ex.Message); #endif + return; } } From 77b47d46779d9b4cdd9342b3781f58e00fe45e12 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Mar 2022 21:32:17 +0300 Subject: [PATCH 097/720] Clean up code to bubble up exceptions to the global catch block --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 216 +++++++++---------- 1 file changed, 103 insertions(+), 113 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index ec53b615..11fe6dec 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -59,131 +59,131 @@ CancellationToken cancellationToken { throw new IOException($"The file {output} already exists. Please input a new file path."); } - } - catch (Exception ex) - { -#if DEBUG - logger.LogCritical(ex, ex.Message); -#else - logger.LogCritical(ex.Message); -#endif - return; - } - Stream stream; - OpenApiDocument document; - OpenApiFormat openApiFormat; - var stopwatch = new Stopwatch(); - - if (!string.IsNullOrEmpty(csdl)) - { - // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion - openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - version ??= OpenApiSpecVersion.OpenApi3_0; - - stream = await GetStream(csdl, logger, cancellationToken); - document = await ConvertCsdlToOpenApi(stream); - } - else - { - stream = await GetStream(openapi, logger, cancellationToken); + Stream stream; + OpenApiDocument document; + OpenApiFormat openApiFormat; + var stopwatch = new Stopwatch(); - // Parsing OpenAPI file - stopwatch.Start(); - logger.LogTrace("Parsing OpenApi file"); - var result = new OpenApiStreamReader(new OpenApiReaderSettings + if (!string.IsNullOrEmpty(csdl)) { - ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, - RuleSet = ValidationRuleSet.GetDefaultRuleSet() + // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion + openApiFormat = format ?? GetOpenApiFormat(csdl, logger); + version ??= OpenApiSpecVersion.OpenApi3_0; + + stream = await GetStream(csdl, logger, cancellationToken); + document = await ConvertCsdlToOpenApi(stream); } - ).ReadAsync(stream).GetAwaiter().GetResult(); + else + { + stream = await GetStream(openapi, logger, cancellationToken); - document = result.OpenApiDocument; - stopwatch.Stop(); + // Parsing OpenAPI file + stopwatch.Start(); + logger.LogTrace("Parsing OpenApi file"); + var result = new OpenApiStreamReader(new OpenApiReaderSettings + { + ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).ReadAsync(stream).GetAwaiter().GetResult(); - var context = result.OpenApiDiagnostic; - if (context.Errors.Count > 0) - { - logger.LogTrace("{timestamp}ms: Parsed OpenAPI with errors. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + document = result.OpenApiDocument; + stopwatch.Stop(); - var errorReport = new StringBuilder(); + var context = result.OpenApiDiagnostic; + if (context.Errors.Count > 0) + { + logger.LogTrace("{timestamp}ms: Parsed OpenAPI with errors. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); - foreach (var error in context.Errors) + var errorReport = new StringBuilder(); + + foreach (var error in context.Errors) + { + logger.LogError("OpenApi Parsing error: {message}", error.ToString()); + errorReport.AppendLine(error.ToString()); + } + logger.LogError($"{stopwatch.ElapsedMilliseconds}ms: OpenApi Parsing errors {string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())}"); + } + else { - logger.LogError("OpenApi Parsing error: {message}", error.ToString()); - errorReport.AppendLine(error.ToString()); + logger.LogTrace("{timestamp}ms: Parsed OpenApi successfully. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } - logger.LogError($"{stopwatch.ElapsedMilliseconds}ms: OpenApi Parsing errors {string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())}"); + + openApiFormat = format ?? GetOpenApiFormat(openapi, logger); + version ??= result.OpenApiDiagnostic.SpecificationVersion; } - else + + Func predicate; + + // Check if filter options are provided, then slice the OpenAPI document + if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) { - logger.LogTrace("{timestamp}ms: Parsed OpenApi successfully. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); } + if (!string.IsNullOrEmpty(filterbyoperationids)) + { + logger.LogTrace("Creating predicate based on the operationIds supplied."); + predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); - openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - version ??= result.OpenApiDiagnostic.SpecificationVersion; - } - - Func predicate; + logger.LogTrace("Creating subset OpenApi document."); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); + } + if (!string.IsNullOrEmpty(filterbytags)) + { + logger.LogTrace("Creating predicate based on the tags supplied."); + predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); - // Check if filter options are provided, then slice the OpenAPI document - if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) - { - throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); - } - if (!string.IsNullOrEmpty(filterbyoperationids)) - { - logger.LogTrace("Creating predicate based on the operationIds supplied."); - predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); + logger.LogTrace("Creating subset OpenApi document."); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); + } + if (!string.IsNullOrEmpty(filterbycollection)) + { + var fileStream = await GetStream(filterbycollection, logger, cancellationToken); + var requestUrls = ParseJsonCollectionFile(fileStream, logger); - logger.LogTrace("Creating subset OpenApi document."); - document = OpenApiFilterService.CreateFilteredDocument(document, predicate); - } - if (!string.IsNullOrEmpty(filterbytags)) - { - logger.LogTrace("Creating predicate based on the tags supplied."); - predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); + logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); + predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: document); - logger.LogTrace("Creating subset OpenApi document."); - document = OpenApiFilterService.CreateFilteredDocument(document, predicate); - } - if (!string.IsNullOrEmpty(filterbycollection)) - { - var fileStream = await GetStream(filterbycollection, logger, cancellationToken); - var requestUrls = ParseJsonCollectionFile(fileStream, logger); + logger.LogTrace("Creating subset OpenApi document."); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); + } - logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); - predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source:document); + logger.LogTrace("Creating a new file"); + using var outputStream = output?.Create(); + var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; - logger.LogTrace("Creating subset OpenApi document."); - document = OpenApiFilterService.CreateFilteredDocument(document, predicate); - } - - logger.LogTrace("Creating a new file"); - using var outputStream = output?.Create(); - var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; + var settings = new OpenApiWriterSettings() + { + ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences + }; - var settings = new OpenApiWriterSettings() - { - ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences - }; + IOpenApiWriter writer = openApiFormat switch + { + OpenApiFormat.Json => new OpenApiJsonWriter(textWriter, settings), + OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), + _ => throw new ArgumentException("Unknown format"), + }; - IOpenApiWriter writer = openApiFormat switch - { - OpenApiFormat.Json => new OpenApiJsonWriter(textWriter, settings), - OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), - _ => throw new ArgumentException("Unknown format"), - }; + logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); - logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); - - stopwatch.Start(); - document.Serialize(writer, (OpenApiSpecVersion)version); - stopwatch.Stop(); + stopwatch.Start(); + document.Serialize(writer, (OpenApiSpecVersion)version); + stopwatch.Stop(); - logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); + logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); - textWriter.Flush(); + textWriter.Flush(); + } + catch (Exception ex) + { +#if DEBUG + logger.LogCritical(ex, ex.Message); +#else + logger.LogCritical(ex.Message); +#endif + return; + } } /// @@ -260,12 +260,7 @@ private static async Task GetStream(string input, ILogger logger, Cancel } catch (HttpRequestException ex) { -#if DEBUG - logger.LogCritical(ex, "Could not download the file at {inputPath}, reason: {exMessage}", input, ex.Message); -#else - logger.LogCritical( "Could not download the file at {inputPath}, reason: {exMessage}", input, ex.Message); -#endif - return null; + throw new InvalidOperationException($"Could not download the file at {input}", ex); } } else @@ -283,12 +278,7 @@ ex is UnauthorizedAccessException || ex is SecurityException || ex is NotSupportedException) { -#if DEBUG - logger.LogCritical(ex, "Could not open the file at {inputPath}, reason: {exMessage}", input, ex.Message); -#else - logger.LogCritical("Could not open the file at {inputPath}, reason: {exMessage}", input, ex.Message); -#endif - return null; + throw new InvalidOperationException($"Could not open the file at {input}", ex); } } stopwatch.Stop(); From 305d29627bba84181a27b1d2690ee2b02fce7cbf Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Mar 2022 22:21:04 +0300 Subject: [PATCH 098/720] Add exit codes for process termination handling --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 11fe6dec..2cf1b01a 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -28,7 +28,7 @@ namespace Microsoft.OpenApi.Hidi { public class OpenApiService { - public static async Task ProcessOpenApiDocument( + public static async Task ProcessOpenApiDocument( string openapi, string csdl, FileInfo output, @@ -174,6 +174,8 @@ CancellationToken cancellationToken logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); textWriter.Flush(); + + return 0; } catch (Exception ex) { @@ -182,7 +184,7 @@ CancellationToken cancellationToken #else logger.LogCritical(ex.Message); #endif - return; + return 1; } } @@ -318,7 +320,7 @@ public static Dictionary> ParseJsonCollectionFile(Stream st return requestUrls; } - internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel, CancellationToken cancellationToken) + internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel, CancellationToken cancellationToken) { var logger = ConfigureLoggerInstance(loglevel); @@ -352,6 +354,8 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel logl logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); logger.LogInformation(statsVisitor.GetStatisticsReport()); + + return 0; } catch(Exception ex) { @@ -360,7 +364,7 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel logl #else logger.LogCritical(ex.Message); #endif - return; + return 1; } } From d809e7b099b48808e4f2a17d668e133a436eb11f Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 9 Mar 2022 00:16:49 -0500 Subject: [PATCH 099/720] f --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8f1fa2c4..ba8b84e0 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -64,14 +64,15 @@ CancellationToken cancellationToken Stream stream; OpenApiDocument document; OpenApiFormat openApiFormat; + OpenApiSpecVersion openApiVersion; var stopwatch = new Stopwatch(); if (!string.IsNullOrEmpty(csdl)) { // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - version ??= OpenApiSpecVersion.OpenApi3_0; - + openApiVersion = version == null ? OpenApiSpecVersion.OpenApi3_0 : TryParseOpenApiSpecVersion(version); + stream = await GetStream(csdl, logger, cancellationToken); document = await ConvertCsdlToOpenApi(stream); } @@ -112,7 +113,7 @@ CancellationToken cancellationToken } openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - version ??= result.OpenApiDiagnostic.SpecificationVersion; + openApiVersion = version == null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; } Func predicate; @@ -127,14 +128,14 @@ CancellationToken cancellationToken logger.LogTrace("Creating predicate based on the operationIds supplied."); predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); -\ logger.LogTrace("Creating subset OpenApi document."); + logger.LogTrace("Creating subset OpenApi document."); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } if (!string.IsNullOrEmpty(filterbytags)) { logger.LogTrace("Creating predicate based on the tags supplied."); predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); -\ + logger.LogTrace("Creating subset OpenApi document."); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); } @@ -169,7 +170,7 @@ CancellationToken cancellationToken logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); stopwatch.Start(); - document.Serialize(writer, (OpenApiSpecVersion)version); + document.Serialize(writer, openApiVersion); stopwatch.Stop(); logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); From 51db815ec87f91c10e2cba226bfb1d5a35c5dda0 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 9 Mar 2022 08:38:55 +0300 Subject: [PATCH 100/720] Add a condition for ensuring the output file path exists before cleaning it --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index a961a0e8..e9631794 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -56,7 +56,7 @@ CancellationToken cancellationToken { throw new ArgumentNullException(nameof(output)); } - if (cleanoutput) + if (cleanoutput && output.Exists) { output.Delete(); } From d5bd7df606f2f32c9cb64d42832febe88d091d87 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 9 Mar 2022 09:07:50 +0300 Subject: [PATCH 101/720] Package updates --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e33f4777..2e52659e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -32,7 +32,7 @@ - + From 6d3a9a9602e3ed736308c899bfcc1086c03fb4d3 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 9 Mar 2022 09:10:09 +0300 Subject: [PATCH 102/720] Bump up system.commandline --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 2e52659e..e1809f27 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -36,7 +36,7 @@ - + From a0397ecf679083b9baf8d00cef06aa17f1d1fd0b Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 9 Mar 2022 09:33:17 +0300 Subject: [PATCH 103/720] Code cleanup --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e1809f27..d9a958db 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -32,8 +32,8 @@ - - + + From c838730801d571b4c92eca2dddbb9cca3c672c41 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 10 Mar 2022 22:37:35 +0300 Subject: [PATCH 104/720] Fix exception thrown when OpenSpecVersion is null --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index ba8b84e0..35715234 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -113,7 +113,7 @@ CancellationToken cancellationToken } openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - openApiVersion = version == null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; + openApiVersion = version == null ? result.OpenApiDiagnostic.SpecificationVersion : TryParseOpenApiSpecVersion(version); } Func predicate; From 106c75b75419d2cc2b69850b9d5e2275431a6539 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 10 Mar 2022 22:38:24 +0300 Subject: [PATCH 105/720] Add recursive solution for nested collection item object --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 41 ++++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 35715234..129dfa54 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -301,24 +301,41 @@ public static Dictionary> ParseJsonCollectionFile(Stream st logger.LogTrace("Parsing the json collection file into a JsonDocument"); using var document = JsonDocument.Parse(stream); var root = document.RootElement; - var itemElement = root.GetProperty("item"); - foreach (var requestObject in itemElement.EnumerateArray().Select(item => item.GetProperty("request"))) - { - // Fetch list of methods and urls from collection, store them in a dictionary - var path = requestObject.GetProperty("url").GetProperty("raw").ToString(); - var method = requestObject.GetProperty("method").ToString(); - if (!requestUrls.ContainsKey(path)) + requestUrls = Enumerate(root, requestUrls); + + logger.LogTrace("Finished fetching the list of paths and Http methods defined in the Postman collection."); + return requestUrls; + } + + private static Dictionary> Enumerate(JsonElement itemElement, Dictionary> paths) + { + var itemsArray = itemElement.GetProperty("item"); + + foreach (var item in itemsArray.EnumerateArray()) + { + if (item.TryGetProperty("request", out var request)) { - requestUrls.Add(path, new List { method }); + // Fetch list of methods and urls from collection, store them in a dictionary + var path = request.GetProperty("url").GetProperty("raw").ToString(); + var method = request.GetProperty("method").ToString(); + + if (!paths.ContainsKey(path)) + { + paths.Add(path, new List { method }); + } + else + { + paths[path].Add(method); + } } else { - requestUrls[path].Add(method); + Enumerate(item, paths); } } - logger.LogTrace("Finished fetching the list of paths and Http methods defined in the Postman collection."); - return requestUrls; + + return paths; } internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel, CancellationToken cancellationToken) From 3ee71fddd8b237a8ace4f4c3bf844352b4293b39 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 10 Mar 2022 23:23:15 +0300 Subject: [PATCH 106/720] Code refactoring --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 32 ++++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 129dfa54..eebc5b5d 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -314,20 +314,26 @@ private static Dictionary> Enumerate(JsonElement itemElemen foreach (var item in itemsArray.EnumerateArray()) { - if (item.TryGetProperty("request", out var request)) + if(item.ValueKind == JsonValueKind.Object) { - // Fetch list of methods and urls from collection, store them in a dictionary - var path = request.GetProperty("url").GetProperty("raw").ToString(); - var method = request.GetProperty("method").ToString(); - - if (!paths.ContainsKey(path)) - { - paths.Add(path, new List { method }); - } - else - { - paths[path].Add(method); - } + if(item.TryGetProperty("request", out var request)) + { + // Fetch list of methods and urls from collection, store them in a dictionary + var path = request.GetProperty("url").GetProperty("raw").ToString(); + var method = request.GetProperty("method").ToString(); + if (!paths.ContainsKey(path)) + { + paths.Add(path, new List { method }); + } + else + { + paths[path].Add(method); + } + } + else + { + Enumerate(item, paths); + } } else { From 1bc021aede348cf75c957db05ec77ace744d4970 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Fri, 11 Mar 2022 23:21:10 -0500 Subject: [PATCH 107/720] Fixed issues related to merge conflicts --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 21 ++++++++++++-------- src/Microsoft.OpenApi.Hidi/Program.cs | 10 +++++++--- src/Microsoft.OpenApi.Hidi/appsettings.json | 7 ------- 3 files changed, 20 insertions(+), 18 deletions(-) delete mode 100644 src/Microsoft.OpenApi.Hidi/appsettings.json diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index ba8b84e0..3d38ea67 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -71,8 +71,8 @@ CancellationToken cancellationToken { // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - openApiVersion = version == null ? OpenApiSpecVersion.OpenApi3_0 : TryParseOpenApiSpecVersion(version); - + openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : OpenApiSpecVersion.OpenApi3_0; + stream = await GetStream(csdl, logger, cancellationToken); document = await ConvertCsdlToOpenApi(stream); } @@ -113,7 +113,7 @@ CancellationToken cancellationToken } openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - openApiVersion = version == null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; + openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; } Func predicate; @@ -181,9 +181,10 @@ CancellationToken cancellationToken catch (Exception ex) { #if DEBUG - logger.LogCritical(ex, ex.Message); + logger.LogCritical(ex, ex.Message); #else logger.LogCritical(ex.Message); + #endif return 1; } @@ -335,12 +336,14 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel OpenApiDocument document; logger.LogTrace("Parsing the OpenApi file"); - document = new OpenApiStreamReader(new OpenApiReaderSettings + var result = await new OpenApiStreamReader(new OpenApiReaderSettings { RuleSet = ValidationRuleSet.GetDefaultRuleSet() } - ).Read(stream, out var context); + ).ReadAsync(stream); + document = result.OpenApiDocument; + var context = result.OpenApiDiagnostic; if (context.Errors.Count != 0) { foreach (var error in context.Errors) @@ -355,7 +358,7 @@ internal static async Task ValidateOpenApiDocument(string openapi, LogLevel logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); logger.LogInformation(statsVisitor.GetStatisticsReport()); - + return 0; } catch(Exception ex) @@ -385,7 +388,9 @@ private static ILogger ConfigureLoggerInstance(LogLevel loglevel) var logger = LoggerFactory.Create((builder) => { builder - .AddConsole() + .AddConsole(c => { + c.LogToStandardErrorThreshold = LogLevel.Error; + }) #if DEBUG .AddDebug() #endif diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 24abb4a9..4fcf3f16 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.CommandLine; using System.IO; using System.Threading; @@ -11,7 +12,7 @@ namespace Microsoft.OpenApi.Hidi { static class Program { - static async Task Main(string[] args) + static async Task Main(string[] args) { var rootCommand = new RootCommand() { }; @@ -32,7 +33,7 @@ static async Task Main(string[] args) var formatOption = new Option("--format", "File format"); formatOption.AddAlias("-f"); - var logLevelOption = new Option("--loglevel", () => LogLevel.Warning, "The log level to use when logging messages to the main output."); + var logLevelOption = new Option("--loglevel", () => LogLevel.Information, "The log level to use when logging messages to the main output."); logLevelOption.AddAlias("-ll"); var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by OperationId(s) provided"); @@ -80,7 +81,10 @@ static async Task Main(string[] args) rootCommand.Add(validateCommand); // Parse the incoming args and invoke the handler - return await rootCommand.InvokeAsync(args); + await rootCommand.InvokeAsync(args); + + //// Wait for logger to write messages to the console before exiting + await Task.Delay(10); } } } diff --git a/src/Microsoft.OpenApi.Hidi/appsettings.json b/src/Microsoft.OpenApi.Hidi/appsettings.json deleted file mode 100644 index 882248cf..00000000 --- a/src/Microsoft.OpenApi.Hidi/appsettings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Debug" - } - } -} \ No newline at end of file From e5f524c23bf668dc5f926291bcedb0d9c1399787 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 13 Mar 2022 18:05:58 -0400 Subject: [PATCH 108/720] Added scope to tracing --- .../Microsoft.OpenApi.Hidi.csproj | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 417 ++++++++++-------- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 3 files changed, 234 insertions(+), 187 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e33f4777..b501e2cd 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -36,7 +36,7 @@ - + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 3d38ea67..e4da1c90 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -29,7 +29,10 @@ namespace Microsoft.OpenApi.Hidi { public class OpenApiService { - public static async Task ProcessOpenApiDocument( + /// + /// Implementation of the transform command + /// + public static async Task TransformOpenApiDocument( string openapi, string csdl, FileInfo output, @@ -69,127 +72,210 @@ CancellationToken cancellationToken if (!string.IsNullOrEmpty(csdl)) { - // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion - openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : OpenApiSpecVersion.OpenApi3_0; - - stream = await GetStream(csdl, logger, cancellationToken); - document = await ConvertCsdlToOpenApi(stream); + using (logger.BeginScope($"Convert CSDL: {csdl}", csdl)) + { + stopwatch.Start(); + // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion + openApiFormat = format ?? GetOpenApiFormat(csdl, logger); + openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : OpenApiSpecVersion.OpenApi3_0; + + stream = await GetStream(csdl, logger, cancellationToken); + document = await ConvertCsdlToOpenApi(stream); + stopwatch.Stop(); + logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + } } else { stream = await GetStream(openapi, logger, cancellationToken); - // Parsing OpenAPI file - stopwatch.Start(); - logger.LogTrace("Parsing OpenApi file"); - var result = await new OpenApiStreamReader(new OpenApiReaderSettings + using (logger.BeginScope($"Parse OpenAPI: {openapi}",openapi)) { - ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, - RuleSet = ValidationRuleSet.GetDefaultRuleSet() - } - ).ReadAsync(stream); + stopwatch.Restart(); + var result = await new OpenApiStreamReader(new OpenApiReaderSettings + { + ReferenceResolution = resolveexternal ? ReferenceResolutionSetting.ResolveAllReferences : ReferenceResolutionSetting.ResolveLocalReferences, + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).ReadAsync(stream); - document = result.OpenApiDocument; - stopwatch.Stop(); + document = result.OpenApiDocument; - var context = result.OpenApiDiagnostic; - if (context.Errors.Count > 0) - { - logger.LogTrace("{timestamp}ms: Parsed OpenAPI with errors. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + var context = result.OpenApiDiagnostic; + if (context.Errors.Count > 0) + { + logger.LogTrace("{timestamp}ms: Parsed OpenAPI with errors. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); - var errorReport = new StringBuilder(); + var errorReport = new StringBuilder(); - foreach (var error in context.Errors) + foreach (var error in context.Errors) + { + logger.LogError("OpenApi Parsing error: {message}", error.ToString()); + errorReport.AppendLine(error.ToString()); + } + logger.LogError($"{stopwatch.ElapsedMilliseconds}ms: OpenApi Parsing errors {string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())}"); + } + else { - logger.LogError("OpenApi Parsing error: {message}", error.ToString()); - errorReport.AppendLine(error.ToString()); + logger.LogTrace("{timestamp}ms: Parsed OpenApi successfully. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } - logger.LogError($"{stopwatch.ElapsedMilliseconds}ms: OpenApi Parsing errors {string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())}"); + + openApiFormat = format ?? GetOpenApiFormat(openapi, logger); + openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; + stopwatch.Stop(); } - else + } + + using (logger.BeginScope("Filter")) + { + Func predicate = null; + + // Check if filter options are provided, then slice the OpenAPI document + if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) { - logger.LogTrace("{timestamp}ms: Parsed OpenApi successfully. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); } + if (!string.IsNullOrEmpty(filterbyoperationids)) + { + logger.LogTrace("Creating predicate based on the operationIds supplied."); + predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); - openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; - } + } + if (!string.IsNullOrEmpty(filterbytags)) + { + logger.LogTrace("Creating predicate based on the tags supplied."); + predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); - Func predicate; + } + if (!string.IsNullOrEmpty(filterbycollection)) + { + var fileStream = await GetStream(filterbycollection, logger, cancellationToken); + var requestUrls = ParseJsonCollectionFile(fileStream, logger); - // Check if filter options are provided, then slice the OpenAPI document - if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) - { - throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); + logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); + predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: document); + } + if (predicate != null) + { + stopwatch.Restart(); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); + stopwatch.Stop(); + logger.LogTrace("{timestamp}ms: Creating filtered OpenApi document with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + } } - if (!string.IsNullOrEmpty(filterbyoperationids)) - { - logger.LogTrace("Creating predicate based on the operationIds supplied."); - predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); - logger.LogTrace("Creating subset OpenApi document."); - document = OpenApiFilterService.CreateFilteredDocument(document, predicate); - } - if (!string.IsNullOrEmpty(filterbytags)) + using (logger.BeginScope("Output")) { - logger.LogTrace("Creating predicate based on the tags supplied."); - predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); + ; + using var outputStream = output?.Create(); + var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; - logger.LogTrace("Creating subset OpenApi document."); - document = OpenApiFilterService.CreateFilteredDocument(document, predicate); - } - if (!string.IsNullOrEmpty(filterbycollection)) - { - var fileStream = await GetStream(filterbycollection, logger, cancellationToken); - var requestUrls = ParseJsonCollectionFile(fileStream, logger); + var settings = new OpenApiWriterSettings() + { + ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences + }; + + IOpenApiWriter writer = openApiFormat switch + { + OpenApiFormat.Json => new OpenApiJsonWriter(textWriter, settings), + OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), + _ => throw new ArgumentException("Unknown format"), + }; + + logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); - logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); - predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: document); + stopwatch.Start(); + document.Serialize(writer, openApiVersion); + stopwatch.Stop(); - logger.LogTrace("Creating subset OpenApi document."); - document = OpenApiFilterService.CreateFilteredDocument(document, predicate); + logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); + textWriter.Flush(); } + return 0; + } + catch (Exception ex) + { +#if DEBUG + logger.LogCritical(ex, ex.Message); +#else + logger.LogCritical(ex.Message); + +#endif + return 1; + } + } - logger.LogTrace("Creating a new file"); - using var outputStream = output?.Create(); - var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; + /// + /// Implementation of the validate command + /// + public static async Task ValidateOpenApiDocument( + string openapi, + LogLevel loglevel, + CancellationToken cancellationToken) + { + var logger = ConfigureLoggerInstance(loglevel); - var settings = new OpenApiWriterSettings() + try + { + if (string.IsNullOrEmpty(openapi)) { - ReferenceInline = inline ? ReferenceInlineSetting.InlineLocalReferences : ReferenceInlineSetting.DoNotInlineReferences - }; + throw new ArgumentNullException(nameof(openapi)); + } + var stream = await GetStream(openapi, logger, cancellationToken); - IOpenApiWriter writer = openApiFormat switch + OpenApiDocument document; + Stopwatch stopwatch = Stopwatch.StartNew(); + using (logger.BeginScope($"Parsing OpenAPI: {openapi}", openapi)) { - OpenApiFormat.Json => new OpenApiJsonWriter(textWriter, settings), - OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), - _ => throw new ArgumentException("Unknown format"), - }; + stopwatch.Start(); + + var result = await new OpenApiStreamReader(new OpenApiReaderSettings + { + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).ReadAsync(stream); - logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); + logger.LogTrace("{timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); - stopwatch.Start(); - document.Serialize(writer, openApiVersion); - stopwatch.Stop(); + document = result.OpenApiDocument; + var context = result.OpenApiDiagnostic; + if (context.Errors.Count != 0) + { + using (logger.BeginScope("Detected errors")) + { + foreach (var error in context.Errors) + { + logger.LogError(error.ToString()); + } + } + } + stopwatch.Stop(); + } - logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); - textWriter.Flush(); + using (logger.BeginScope("Calculating statistics")) + { + var statsVisitor = new StatsVisitor(); + var walker = new OpenApiWalker(statsVisitor); + walker.Walk(document); + + logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); + logger.LogInformation(statsVisitor.GetStatisticsReport()); + } return 0; } catch (Exception ex) { -#if DEBUG - logger.LogCritical(ex, ex.Message); +#if DEBUG + logger.LogCritical(ex, ex.Message); #else logger.LogCritical(ex.Message); - #endif return 1; - } + } + } - + /// /// Converts CSDL to OpenAPI /// @@ -225,71 +311,6 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl) return document; } - /// - /// Fixes the references in the resulting OpenApiDocument. - /// - /// The converted OpenApiDocument. - /// A valid OpenApiDocument instance. - public static OpenApiDocument FixReferences(OpenApiDocument document) - { - // This method is only needed because the output of ConvertToOpenApi isn't quite a valid OpenApiDocument instance. - // So we write it out, and read it back in again to fix it up. - - var sb = new StringBuilder(); - document.SerializeAsV3(new OpenApiYamlWriter(new StringWriter(sb))); - var doc = new OpenApiStringReader().Read(sb.ToString(), out _); - - return doc; - } - - private static async Task GetStream(string input, ILogger logger, CancellationToken cancellationToken) - { - var stopwatch = new Stopwatch(); - stopwatch.Start(); - - Stream stream; - if (input.StartsWith("http")) - { - try - { - var httpClientHandler = new HttpClientHandler() - { - SslProtocols = System.Security.Authentication.SslProtocols.Tls12, - }; - using var httpClient = new HttpClient(httpClientHandler) - { - DefaultRequestVersion = HttpVersion.Version20 - }; - stream = await httpClient.GetStreamAsync(input, cancellationToken); - } - catch (HttpRequestException ex) - { - throw new InvalidOperationException($"Could not download the file at {input}", ex); - } - } - else - { - try - { - var fileInput = new FileInfo(input); - stream = fileInput.OpenRead(); - } - catch (Exception ex) when (ex is FileNotFoundException || - ex is PathTooLongException || - ex is DirectoryNotFoundException || - ex is IOException || - ex is UnauthorizedAccessException || - ex is SecurityException || - ex is NotSupportedException) - { - throw new InvalidOperationException($"Could not open the file at {input}", ex); - } - } - stopwatch.Stop(); - logger.LogTrace("{timestamp}ms: Read file {input}", stopwatch.ElapsedMilliseconds, input); - return stream; - } - /// /// Takes in a file stream, parses the stream into a JsonDocument and gets a list of paths and Http methods /// @@ -322,57 +343,83 @@ public static Dictionary> ParseJsonCollectionFile(Stream st return requestUrls; } - internal static async Task ValidateOpenApiDocument(string openapi, LogLevel loglevel, CancellationToken cancellationToken) + /// + /// Fixes the references in the resulting OpenApiDocument. + /// + /// The converted OpenApiDocument. + /// A valid OpenApiDocument instance. + private static OpenApiDocument FixReferences(OpenApiDocument document) { - var logger = ConfigureLoggerInstance(loglevel); + // This method is only needed because the output of ConvertToOpenApi isn't quite a valid OpenApiDocument instance. + // So we write it out, and read it back in again to fix it up. - try + var sb = new StringBuilder(); + document.SerializeAsV3(new OpenApiYamlWriter(new StringWriter(sb))); + var doc = new OpenApiStringReader().Read(sb.ToString(), out _); + + return doc; + } + + /// + /// Reads stream from file system or makes HTTP request depending on the input string + /// + private static async Task GetStream(string input, ILogger logger, CancellationToken cancellationToken) + { + Stream stream; + using (logger.BeginScope("Reading input stream")) { - if (string.IsNullOrEmpty(openapi)) - { - throw new ArgumentNullException(nameof(openapi)); - } - var stream = await GetStream(openapi, logger, cancellationToken); + var stopwatch = new Stopwatch(); + stopwatch.Start(); - OpenApiDocument document; - logger.LogTrace("Parsing the OpenApi file"); - var result = await new OpenApiStreamReader(new OpenApiReaderSettings + if (input.StartsWith("http")) { - RuleSet = ValidationRuleSet.GetDefaultRuleSet() + try + { + var httpClientHandler = new HttpClientHandler() + { + SslProtocols = System.Security.Authentication.SslProtocols.Tls12, + }; + using var httpClient = new HttpClient(httpClientHandler) + { + DefaultRequestVersion = HttpVersion.Version20 + }; + stream = await httpClient.GetStreamAsync(input, cancellationToken); + } + catch (HttpRequestException ex) + { + throw new InvalidOperationException($"Could not download the file at {input}", ex); + } } - ).ReadAsync(stream); - - document = result.OpenApiDocument; - var context = result.OpenApiDiagnostic; - if (context.Errors.Count != 0) + else { - foreach (var error in context.Errors) + try + { + var fileInput = new FileInfo(input); + stream = fileInput.OpenRead(); + } + catch (Exception ex) when (ex is FileNotFoundException || + ex is PathTooLongException || + ex is DirectoryNotFoundException || + ex is IOException || + ex is UnauthorizedAccessException || + ex is SecurityException || + ex is NotSupportedException) { - logger.LogError("OpenApi Parsing error: {message}", error.ToString()); + throw new InvalidOperationException($"Could not open the file at {input}", ex); } } - - var statsVisitor = new StatsVisitor(); - var walker = new OpenApiWalker(statsVisitor); - walker.Walk(document); - - logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); - logger.LogInformation(statsVisitor.GetStatisticsReport()); - - return 0; - } - catch(Exception ex) - { -#if DEBUG - logger.LogCritical(ex, ex.Message); -#else - logger.LogCritical(ex.Message); -#endif - return 1; + stopwatch.Stop(); + logger.LogTrace("{timestamp}ms: Read file {input}", stopwatch.ElapsedMilliseconds, input); } - + return stream; } + /// + /// Attempt to guess OpenAPI format based in input URL + /// + /// + /// + /// private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) { logger.LogTrace("Getting the OpenApi format"); @@ -388,10 +435,10 @@ private static ILogger ConfigureLoggerInstance(LogLevel loglevel) var logger = LoggerFactory.Create((builder) => { builder - .AddConsole(c => { - c.LogToStandardErrorThreshold = LogLevel.Error; + .AddSimpleConsole(c => { + c.IncludeScopes = true; }) -#if DEBUG +#if DEBUG .AddDebug() #endif .SetMinimumLevel(loglevel); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 4fcf3f16..efbf7fea 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -75,7 +75,7 @@ static async Task Main(string[] args) }; transformCommand.SetHandler ( - OpenApiService.ProcessOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); + OpenApiService.TransformOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From 3fddacd52bb42910a264d9286c339f0d73b5cfe6 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 13 Mar 2022 21:31:16 -0400 Subject: [PATCH 109/720] Fixed input parameters of transform --- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index e9a1bc31..ac39aaad 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -79,7 +79,7 @@ static async Task Main(string[] args) }; transformCommand.SetHandler ( - OpenApiService.TransformOpenApiDocument, descriptionOption, csdlOption, outputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); + OpenApiService.TransformOpenApiDocument, descriptionOption, csdlOption, outputOption, cleanOutputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From ef36aa73a525ad5367d4af72fe46f5e423d45575 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 14 Mar 2022 09:37:54 +0300 Subject: [PATCH 110/720] Rename method --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index eebc5b5d..d68daea8 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -302,13 +302,13 @@ public static Dictionary> ParseJsonCollectionFile(Stream st using var document = JsonDocument.Parse(stream); var root = document.RootElement; - requestUrls = Enumerate(root, requestUrls); - + requestUrls = EnumerateJsonDocument(root, requestUrls); logger.LogTrace("Finished fetching the list of paths and Http methods defined in the Postman collection."); + return requestUrls; } - private static Dictionary> Enumerate(JsonElement itemElement, Dictionary> paths) + private static Dictionary> EnumerateJsonDocument(JsonElement itemElement, Dictionary> paths) { var itemsArray = itemElement.GetProperty("item"); @@ -332,12 +332,12 @@ private static Dictionary> Enumerate(JsonElement itemElemen } else { - Enumerate(item, paths); + EnumerateJsonDocument(item, paths); } } else { - Enumerate(item, paths); + EnumerateJsonDocument(item, paths); } } From 46859e980e595b74f664c66d278fa77375f3aad2 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 23 Mar 2022 13:31:56 -0400 Subject: [PATCH 111/720] Added CSDL filter for entitysets and singletons --- src/Microsoft.OpenApi.Hidi/CsdlFilter.xslt | 22 ++++++++++ .../Microsoft.OpenApi.Hidi.csproj | 8 ++++ src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 41 ++++++++++++++++++- src/Microsoft.OpenApi.Hidi/Program.cs | 8 +++- 4 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/CsdlFilter.xslt diff --git a/src/Microsoft.OpenApi.Hidi/CsdlFilter.xslt b/src/Microsoft.OpenApi.Hidi/CsdlFilter.xslt new file mode 100644 index 00000000..ee3bf0d4 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/CsdlFilter.xslt @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index d9a958db..98def881 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -31,6 +31,14 @@ true + + + + + + + + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c15f77d6..4b73c13d 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -24,6 +24,10 @@ using Microsoft.OpenApi.Writers; using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper; using System.Threading; +using System.Xml.Xsl; +using System.Xml; +using System.Runtime.CompilerServices; +using System.Reflection; namespace Microsoft.OpenApi.Hidi { @@ -35,6 +39,7 @@ public class OpenApiService public static async Task TransformOpenApiDocument( string openapi, string csdl, + string csdlFilter, FileInfo output, bool cleanoutput, string? version, @@ -85,6 +90,13 @@ CancellationToken cancellationToken openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : OpenApiSpecVersion.OpenApi3_0; stream = await GetStream(csdl, logger, cancellationToken); + + if (!string.IsNullOrEmpty(csdlFilter)) + { + XslCompiledTransform transform = GetFilterTransform(); + stream = ApplyFilter(csdl, csdlFilter, transform); + stream.Position = 0; + } document = await ConvertCsdlToOpenApi(stream); stopwatch.Stop(); logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); @@ -210,6 +222,31 @@ CancellationToken cancellationToken } } + private static XslCompiledTransform GetFilterTransform() + { + XslCompiledTransform transform = new(); + Assembly assembly = typeof(OpenApiService).GetTypeInfo().Assembly; + Stream xslt = assembly.GetManifestResourceStream("Microsoft.OpenApi.Hidi.CsdlFilter.xslt"); + transform.Load(new XmlTextReader(new StreamReader(xslt))); + return transform; + } + + private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslCompiledTransform transform) + { + Stream stream; + StreamReader inputReader = new(csdl); + XmlReader inputXmlReader = XmlReader.Create(inputReader); + MemoryStream filteredStream = new(); + StreamWriter writer = new(filteredStream); + XsltArgumentList args = new(); + args.AddParam("entitySetOrSingleton", "", entitySetOrSingleton); + transform.Transform(inputXmlReader, args, writer); + stream = filteredStream; + return stream; + } + + + /// /// Implementation of the validate command /// @@ -306,8 +343,8 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl) EnableDiscriminatorValue = false, EnableDerivedTypesReferencesForRequestBody = false, EnableDerivedTypesReferencesForResponses = false, - ShowRootPath = true, - ShowLinks = true + ShowRootPath = false, + ShowLinks = false }; OpenApiDocument document = edmModel.ConvertToOpenApi(settings); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index ac39aaad..5a2a808d 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -24,6 +24,9 @@ static async Task Main(string[] args) var csdlOption = new Option("--csdl", "Input CSDL file path or URL"); csdlOption.AddAlias("-cs"); + var csdlFilterOption = new Option("--csdlFilter", "Name of EntitySet or Singleton to filter CSDL on"); + csdlOption.AddAlias("-csf"); + var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; outputOption.AddAlias("-o"); @@ -66,6 +69,7 @@ static async Task Main(string[] args) { descriptionOption, csdlOption, + csdlFilterOption, outputOption, cleanOutputOption, versionOption, @@ -78,8 +82,8 @@ static async Task Main(string[] args) resolveExternalOption, }; - transformCommand.SetHandler ( - OpenApiService.TransformOpenApiDocument, descriptionOption, csdlOption, outputOption, cleanOutputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); + transformCommand.SetHandler ( + OpenApiService.TransformOpenApiDocument, descriptionOption, csdlOption, csdlFilterOption, outputOption, cleanOutputOption, versionOption, formatOption, logLevelOption, inlineOption, resolveExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From 9fd53f6fe6492e5f46f6f8b4396b9c25fb2b168b Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 27 Mar 2022 09:07:50 -0400 Subject: [PATCH 112/720] Fixed issue with v2 external references --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cd8d1413..add38e83 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -33,10 +33,10 @@ - + - + From 7c570205cccda6d798c0dca1acc95dcfdb710ada Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 27 Mar 2022 16:49:34 -0400 Subject: [PATCH 113/720] Fixed command alias and some descriptions --- src/Microsoft.OpenApi.Hidi/Program.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 0eab5a69..8b466913 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -24,8 +24,8 @@ static async Task Main(string[] args) var csdlOption = new Option("--csdl", "Input CSDL file path or URL"); csdlOption.AddAlias("-cs"); - var csdlFilterOption = new Option("--csdlFilter", "Name of EntitySet or Singleton to filter CSDL on"); - csdlOption.AddAlias("-csf"); + var csdlFilterOption = new Option("--csdl-filter", "Comma delimited list of EntitySets or Singletons to filter CSDL on. e.g. tasks,accounts"); + csdlFilterOption.AddAlias("-csf"); var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; outputOption.AddAlias("-o"); @@ -42,13 +42,13 @@ static async Task Main(string[] args) var logLevelOption = new Option("--loglevel", () => LogLevel.Information, "The log level to use when logging messages to the main output."); logLevelOption.AddAlias("-ll"); - var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by OperationId(s) provided"); + var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by comma delimited list of OperationId(s) provided"); filterByOperationIdsOption.AddAlias("-op"); - var filterByTagsOption = new Option("--filter-by-tags", "Filters OpenApiDocument by Tag(s) provided"); + var filterByTagsOption = new Option("--filter-by-tags", "Filters OpenApiDocument by comma delimited list of Tag(s) provided. Also accepts a single regex."); filterByTagsOption.AddAlias("-t"); - var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided"); + var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided. Provide path to collection file."); filterByCollectionOption.AddAlias("-c"); var inlineLocalOption = new Option("--inlineLocal", "Inline local $ref instances"); From 7b52bf471635a0022ddd20c21f92f76607cfb739 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Mar 2022 21:13:35 +0000 Subject: [PATCH 114/720] Bump Microsoft.OpenApi.OData from 1.0.10-preview2 to 1.0.10-preview3 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.0.10-preview2 to 1.0.10-preview3. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 98def881..12852142 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -46,7 +46,7 @@ - + From 7b245096d927ca64cc33246509773b6ace219396 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 9 Apr 2022 16:57:03 -0400 Subject: [PATCH 115/720] Updated package version to preview6 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 12852142..72ec16c0 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 0.5.0-preview5 + 0.5.0-preview6 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From 74e32b6d3e5d62f907579cd12f7707fccedd1b1d Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 11 Apr 2022 22:45:23 -0400 Subject: [PATCH 116/720] Updated version numbers --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 72ec16c0..52d0b3c1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 0.5.0-preview6 + 1.0.0-preview1 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From 0af4ec714050558ed01b5b786012a6ff7ad06c90 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 13 Apr 2022 11:45:59 +0300 Subject: [PATCH 117/720] Add an optional --terse output commandline option --- src/Microsoft.OpenApi.Hidi/Program.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 8b466913..6d06a698 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -39,6 +39,9 @@ static async Task Main(string[] args) var formatOption = new Option("--format", "File format"); formatOption.AddAlias("-f"); + var terseOutputOption = new Option("--terseOutput", "Produce terse json output"); + terseOutputOption.AddAlias("-to"); + var logLevelOption = new Option("--loglevel", () => LogLevel.Information, "The log level to use when logging messages to the main output."); logLevelOption.AddAlias("-ll"); @@ -74,6 +77,7 @@ static async Task Main(string[] args) cleanOutputOption, versionOption, formatOption, + terseOutputOption, logLevelOption, filterByOperationIdsOption, filterByTagsOption, @@ -82,8 +86,8 @@ static async Task Main(string[] args) inlineExternalOption }; - transformCommand.SetHandler ( - OpenApiService.TransformOpenApiDocument, descriptionOption, csdlOption, csdlFilterOption, outputOption, cleanOutputOption, versionOption, formatOption, logLevelOption, inlineLocalOption, inlineExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); + transformCommand.SetHandler ( + OpenApiService.TransformOpenApiDocument, descriptionOption, csdlOption, csdlFilterOption, outputOption, cleanOutputOption, versionOption, formatOption, terseOutputOption, logLevelOption, inlineLocalOption, inlineExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From 306beacfe0da9c1b204bd275a6da08eeeb293292 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 13 Apr 2022 11:47:57 +0300 Subject: [PATCH 118/720] Pass the terseOutput option provided to the OpenApiWriter settings for serializing JSON in a terse format --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index feb62042..3a333b89 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -44,6 +44,7 @@ public static async Task TransformOpenApiDocument( bool cleanoutput, string? version, OpenApiFormat? format, + bool terseOutput, LogLevel loglevel, bool inlineLocal, bool inlineExternal, @@ -188,11 +189,13 @@ CancellationToken cancellationToken using var outputStream = output?.Create(); var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; - var settings = new OpenApiWriterSettings() + var settings = new OpenApiWriterSettings(); + if (terseOutput) { - InlineLocalReferences = inlineLocal, - InlineExternalReferences = inlineExternal - }; + settings.Terse = terseOutput; + } + settings.InlineLocalReferences = inlineLocal; + settings.InlineExternalReferences = inlineExternal; IOpenApiWriter writer = openApiFormat switch { From 19523229408e862a75f31a667f7d85eac7ae7266 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 13 Apr 2022 11:49:52 +0300 Subject: [PATCH 119/720] Update the command format to kebab case --- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 6d06a698..80a4c2e1 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -39,7 +39,7 @@ static async Task Main(string[] args) var formatOption = new Option("--format", "File format"); formatOption.AddAlias("-f"); - var terseOutputOption = new Option("--terseOutput", "Produce terse json output"); + var terseOutputOption = new Option("--terse-output", "Produce terse json output"); terseOutputOption.AddAlias("-to"); var logLevelOption = new Option("--loglevel", () => LogLevel.Information, "The log level to use when logging messages to the main output."); From 550bfc8255be2b45df72379a95f9cc29e72be594 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 14 Apr 2022 17:52:07 +0300 Subject: [PATCH 120/720] Add a terseOutput parameter to the OpenApiJsonWriter and refactor code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 3a333b89..584087ea 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -189,17 +189,15 @@ CancellationToken cancellationToken using var outputStream = output?.Create(); var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; - var settings = new OpenApiWriterSettings(); - if (terseOutput) + var settings = new OpenApiWriterSettings() { - settings.Terse = terseOutput; - } - settings.InlineLocalReferences = inlineLocal; - settings.InlineExternalReferences = inlineExternal; + InlineLocalReferences = inlineLocal, + InlineExternalReferences = inlineExternal + }; IOpenApiWriter writer = openApiFormat switch { - OpenApiFormat.Json => new OpenApiJsonWriter(textWriter, settings), + OpenApiFormat.Json => terseOutput ? new OpenApiJsonWriter(textWriter, settings, terseOutput) : new OpenApiJsonWriter(textWriter, settings, false), OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), _ => throw new ArgumentException("Unknown format"), }; From 85a578426dadecb3d3a6130efec29175fc1418d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 May 2022 21:07:33 +0000 Subject: [PATCH 121/720] Bump Microsoft.OpenApi.OData from 1.0.10-preview3 to 1.0.10 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.0.10-preview3 to 1.0.10. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 52d0b3c1..b03eb46c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -46,7 +46,7 @@ - + From f26dfee78801ee4f8d0a34a17fa4de3e5608f062 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 May 2022 13:58:44 +0000 Subject: [PATCH 122/720] Bump Microsoft.OData.Edm from 7.10.0 to 7.11.0 Bumps Microsoft.OData.Edm from 7.10.0 to 7.11.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b03eb46c..a5f3daf6 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -45,7 +45,7 @@ - + From 57488c3fb55afa88d2bda0c87e226f05306dbfbd Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 11 May 2022 10:03:13 -0400 Subject: [PATCH 123/720] - bumps hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b03eb46c..7fde25f8 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,14 +15,14 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview1 + 1.0.0-preview2 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET -- Upgrades Microsoft.OpenApi.OData to 1.0.10-preview1 -- Fixes an issue where hidi would not process async operations +- Upgrades Microsoft.OpenApi.OData to 1.0.10 +- Upgrades Microsoft.OData.Edm to 7.11.0 Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi From d33532df8b5239fdd306de6cf7aa92e2ad36e5a4 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 11 May 2022 16:38:18 -0400 Subject: [PATCH 124/720] Configure CSDL via settings --- .../Microsoft.OpenApi.Hidi.csproj | 1 + src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 47 ++++++++++++------- src/Microsoft.OpenApi.Hidi/Program.cs | 17 +++++++ 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 52d0b3c1..aaa081c0 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -47,6 +47,7 @@ + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 584087ea..4c24c0b4 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -28,6 +28,7 @@ using System.Xml; using System.Runtime.CompilerServices; using System.Reflection; +using Microsoft.Extensions.Configuration; namespace Microsoft.OpenApi.Hidi { @@ -98,6 +99,7 @@ CancellationToken cancellationToken stream = ApplyFilter(csdl, csdlFilter, transform); stream.Position = 0; } + document = await ConvertCsdlToOpenApi(stream); stopwatch.Stop(); logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); @@ -321,6 +323,14 @@ public static async Task ValidateOpenApiDocument( } + internal static IConfiguration GetConfiguration() + { + IConfiguration config = new ConfigurationBuilder() + .AddJsonFile("appsettings.json",true) + .Build(); + return config; + } + /// /// Converts CSDL to OpenAPI /// @@ -332,23 +342,28 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl) var csdlText = await reader.ReadToEndAsync(); var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); - var settings = new OpenApiConvertSettings() + var config = GetConfiguration(); + OpenApiConvertSettings settings = config.GetSection("OpenApiConvertSettings").Get(); + if (settings == null) { - AddSingleQuotesForStringParameters = true, - AddEnumDescriptionExtension = true, - DeclarePathParametersOnPathItem = true, - EnableKeyAsSegment = true, - EnableOperationId = true, - ErrorResponsesAsDefault = false, - PrefixEntityTypeNameBeforeKey = true, - TagDepth = 2, - EnablePagination = true, - EnableDiscriminatorValue = false, - EnableDerivedTypesReferencesForRequestBody = false, - EnableDerivedTypesReferencesForResponses = false, - ShowRootPath = false, - ShowLinks = false - }; + settings = new OpenApiConvertSettings() + { + AddSingleQuotesForStringParameters = true, + AddEnumDescriptionExtension = true, + DeclarePathParametersOnPathItem = true, + EnableKeyAsSegment = true, + EnableOperationId = true, + ErrorResponsesAsDefault = false, + PrefixEntityTypeNameBeforeKey = true, + TagDepth = 2, + EnablePagination = true, + EnableDiscriminatorValue = false, + EnableDerivedTypesReferencesForRequestBody = false, + EnableDerivedTypesReferencesForResponses = false, + ShowRootPath = false, + ShowLinks = false + }; + } OpenApiDocument document = edmModel.ConvertToOpenApi(settings); document = FixReferences(document); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 80a4c2e1..09a9061a 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -3,9 +3,15 @@ using System; using System.CommandLine; +using System.CommandLine.Builder; +using System.CommandLine.Hosting; +using System.CommandLine.Parsing; + using System.IO; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace Microsoft.OpenApi.Hidi @@ -92,9 +98,20 @@ static async Task Main(string[] args) rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); + // Parse the incoming args and invoke the handler await rootCommand.InvokeAsync(args); + + //await new CommandLineBuilder(rootCommand) + // .UseHost(_ => Host.CreateDefaultBuilder(), + // host => { + // var config = host.Services.GetRequiredService(); + // }) + // .UseDefaults() + // .Build() + // .InvokeAsync(args); + //// Wait for logger to write messages to the console before exiting await Task.Delay(10); } From fe1c6d35c9ec6a73e40c66bb2f6d4a9752ccdbe9 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 16 May 2022 08:46:45 -0400 Subject: [PATCH 125/720] - enables discriminator for conversion in hidi --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 5 ++--- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 71674e39..cf0c69bc 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,14 +15,13 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview2 + 1.0.0-preview3 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET -- Upgrades Microsoft.OpenApi.OData to 1.0.10 -- Upgrades Microsoft.OData.Edm to 7.11.0 +- Enables discriminator values Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 584087ea..887f5326 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -343,7 +343,7 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl) PrefixEntityTypeNameBeforeKey = true, TagDepth = 2, EnablePagination = true, - EnableDiscriminatorValue = false, + EnableDiscriminatorValue = true, EnableDerivedTypesReferencesForRequestBody = false, EnableDerivedTypesReferencesForResponses = false, ShowRootPath = false, From 892186d52c0c5b851b220eabad9535fdc2150b40 Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Tue, 17 May 2022 20:28:15 +0300 Subject: [PATCH 126/720] Add new OpenAPI convert setting --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 887f5326..0adfca1e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -347,7 +347,8 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl) EnableDerivedTypesReferencesForRequestBody = false, EnableDerivedTypesReferencesForResponses = false, ShowRootPath = false, - ShowLinks = false + ShowLinks = false, + ExpandDerivedTypesNavigationProperties = false }; OpenApiDocument document = edmModel.ConvertToOpenApi(settings); From 47a2886704d48acf770462bb1463b853b19472ee Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Tue, 17 May 2022 21:23:01 +0300 Subject: [PATCH 127/720] Bump lib. version and update release note --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cf0c69bc..4d2dc417 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,13 +15,14 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview3 + 1.0.0-preview4 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET - Enables discriminator values +- Adds new OpenAPI convert setting, ExpandDerivedTypesNavigationProperties and sets it to false Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi From 2d521f998a8f680b6b585eef1fb8bf873ff8d052 Mon Sep 17 00:00:00 2001 From: Carol Kigoonya Date: Thu, 19 May 2022 08:51:24 +0300 Subject: [PATCH 128/720] Add files via upload --- src/Microsoft.OpenApi.Hidi/readme.md | 88 ++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/Microsoft.OpenApi.Hidi/readme.md diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md new file mode 100644 index 00000000..1bc3187f --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -0,0 +1,88 @@ +# Overview + +Hidi is a command line tool that makes it easy to work with and transform OpenAPI documents. The tool enables you validate and apply transformations to and from different file formats using various commands to do different actions on the files. + +## Capabilities +Hidi has these key capabilities that enable you to build different scenarios off the tool + • Validation of OpenAPI files + • Conversion of OpenAPI files into different file formats: convert files from JSON to YAML, YAML to JSON + • Slice or filter OpenAPI documents to smaller subsets using operationIDs and tags + + +## Installation + +Install [Microsoft.OpenApi.Hidi](https://www.nuget.org/packages/Microsoft.OpenApi.Hidi/1.0.0-preview4) package from NuGet by running the following command: + +### .NET CLI(Global) + 1. dotnet tool install --global Microsoft.OpenApi.Hidi --version 0.5.0-preview4 + +### .NET CLI(local) + + 1. dotnet new tool-manifest #if you are setting up the OpenAPI.NET repo + 2. dotnet tool install --local Microsoft.OpenApi.Hidi --version 0.5.0-preview4 + + + +## How to use Hidi +Once you've installed the package locally, you can invoke the Hidi by running: hidi [command]. +You can access the list of command options we have by running hidi -h +The tool avails the following commands: + + • Validate + • Transform + +### Validate +This command option accepts an OpenAPI document as an input parameter, visits multiple OpenAPI elements within the document and returns statistics count report on the following elements: + + • Path Items + • Operations + • Parameters + • Request bodies + • Responses + • Links + • Callbacks + • Schemas + +It accepts the following command: + + • --openapi(-d) - OpenAPI description file path or URL + • --loglevel(-ll) - The log level to use when logging messages to the main output + + +**Example:** hidi.exe validate --openapi C:\OpenApidocs\Mail.yml --loglevel trace +Run validate -h to see the options available. + +### Transform +Used to convert file formats from JSON to YAML and vice versa and performs slicing of OpenAPI documents. + +This command accepts the following parameters: + + • --openapi(-d) - OpenAPI description file path in the local filesystem or a valid URL hosted on a HTTPS server + • --csdl(-cs) - CSDL file path in the local filesystem or a valid URL hosted on a HTTPS server + • --csdlfilter(-csf) - a filter parameter that a user can use to select a subset of a large CSDL file. They do so by providing a comma delimited list of EntitySet and Singleton names that appear in the EntityContainer. + • --output(-o) - Output directory path for the transformed document + • --clean-ouput(-co) - an optional param that allows a user to overwrite an existing file. + • --version(-v) - OpenAPI specification version + • --format(-f) - File format + • --loglevel(-ll) - The log level to use when logging messages to the main output + • --inline(-i) - Inline $ref instances + • --resolveExternal(-ex) - Resolve external $refs + • --filterByOperationIds(-op) - Slice document based on OperationId(s) provided. Accepts a comma delimited list of operation ids. + • --filterByTags(-t) - Slice document based on tag(s) provided. Accepts a comma delimited list of tags. + • --filterByCollection(-c) - Slices the OpenAPI document based on the Postman Collection file generated by Resource Explorer + + **Examples:** + + 1. Filtering by OperationIds + hidi transform -d files\People.yml -f yaml -o files\People.yml -v OpenApi3_0 -op users_UpdateInsights -co + + 2. Filtering by Postman collection + hidi transform --openapi files\People.yml --format yaml --output files\People2.yml --version OpenApi3_0 --filterByCollection Graph-Collection-0017059134807617005.postman_collection.json + + 3. CSDL--->OpenAPI conversion and filtering + hidi transform --input Files/Todo.xml --output Files/Todo-subset.yml --format yaml --version OpenApi3_0 --filterByOperationIds Todos.Todo.UpdateTodo + + 4. CSDL Filtering by EntitySets and Singletons + hidi transform -cs dataverse.csdl --csdlFilter "appointments,opportunities" -o appointmentsAndOpportunities.yaml -ll trace + +Run transform -h to see all the available usage options. \ No newline at end of file From 4619ebeac8974dd48c47b1e59cbe7fa882b29c48 Mon Sep 17 00:00:00 2001 From: Darrel Date: Thu, 19 May 2022 09:46:04 -0400 Subject: [PATCH 129/720] Changed explicit version parameter to --prerelease --- src/Microsoft.OpenApi.Hidi/readme.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 1bc3187f..71c32cb1 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -14,12 +14,14 @@ Hidi has these key capabilities that enable you to build different scenarios off Install [Microsoft.OpenApi.Hidi](https://www.nuget.org/packages/Microsoft.OpenApi.Hidi/1.0.0-preview4) package from NuGet by running the following command: ### .NET CLI(Global) - 1. dotnet tool install --global Microsoft.OpenApi.Hidi --version 0.5.0-preview4 + 1. dotnet tool install --global Microsoft.OpenApi.Hidi --prerelease + ### .NET CLI(local) 1. dotnet new tool-manifest #if you are setting up the OpenAPI.NET repo - 2. dotnet tool install --local Microsoft.OpenApi.Hidi --version 0.5.0-preview4 + 2. dotnet tool install --local Microsoft.OpenApi.Hidi --prerelease + @@ -49,7 +51,8 @@ It accepts the following command: • --loglevel(-ll) - The log level to use when logging messages to the main output -**Example:** hidi.exe validate --openapi C:\OpenApidocs\Mail.yml --loglevel trace +**Example:** `hidi.exe validate --openapi C:\OpenApidocs\Mail.yml --loglevel trace` + Run validate -h to see the options available. ### Transform From 5acae21cfa38206251e178654ea059a4dfcb0da1 Mon Sep 17 00:00:00 2001 From: Darrel Date: Thu, 19 May 2022 10:07:00 -0400 Subject: [PATCH 130/720] Update readme.md --- src/Microsoft.OpenApi.Hidi/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 71c32cb1..6295c5c9 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -4,6 +4,7 @@ Hidi is a command line tool that makes it easy to work with and transform OpenAP ## Capabilities Hidi has these key capabilities that enable you to build different scenarios off the tool + • Validation of OpenAPI files • Conversion of OpenAPI files into different file formats: convert files from JSON to YAML, YAML to JSON • Slice or filter OpenAPI documents to smaller subsets using operationIDs and tags @@ -88,4 +89,4 @@ This command accepts the following parameters: 4. CSDL Filtering by EntitySets and Singletons hidi transform -cs dataverse.csdl --csdlFilter "appointments,opportunities" -o appointmentsAndOpportunities.yaml -ll trace -Run transform -h to see all the available usage options. \ No newline at end of file +Run transform -h to see all the available usage options. From 6faf90e4d136b8c76d325610e6d67cb93b5c1502 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 20 May 2022 10:19:23 -0400 Subject: [PATCH 131/720] - normalizes inlining parameters to kebab case --- src/Microsoft.OpenApi.Hidi/Program.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 80a4c2e1..e9d44c41 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -54,10 +54,10 @@ static async Task Main(string[] args) var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided. Provide path to collection file."); filterByCollectionOption.AddAlias("-c"); - var inlineLocalOption = new Option("--inlineLocal", "Inline local $ref instances"); + var inlineLocalOption = new Option("--inline-local", "Inline local $ref instances"); inlineLocalOption.AddAlias("-il"); - var inlineExternalOption = new Option("--inlineExternal", "Inline external $ref instances"); + var inlineExternalOption = new Option("--inline-external", "Inline external $ref instances"); inlineExternalOption.AddAlias("-ie"); var validateCommand = new Command("validate") From 9dc12dae2b5725d81a2b0e6deb07df684e2563e8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 20 May 2022 10:22:14 -0400 Subject: [PATCH 132/720] - aligns on two dashes for more than one character shorthands --- src/Microsoft.OpenApi.Hidi/Program.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index e9d44c41..97fa776c 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -22,16 +22,16 @@ static async Task Main(string[] args) descriptionOption.AddAlias("-d"); var csdlOption = new Option("--csdl", "Input CSDL file path or URL"); - csdlOption.AddAlias("-cs"); + csdlOption.AddAlias("--cs"); var csdlFilterOption = new Option("--csdl-filter", "Comma delimited list of EntitySets or Singletons to filter CSDL on. e.g. tasks,accounts"); - csdlFilterOption.AddAlias("-csf"); + csdlFilterOption.AddAlias("--csf"); var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; outputOption.AddAlias("-o"); var cleanOutputOption = new Option("--clean-output", "Overwrite an existing file"); - cleanOutputOption.AddAlias("-co"); + cleanOutputOption.AddAlias("--co"); var versionOption = new Option("--version", "OpenAPI specification version"); versionOption.AddAlias("-v"); @@ -40,25 +40,25 @@ static async Task Main(string[] args) formatOption.AddAlias("-f"); var terseOutputOption = new Option("--terse-output", "Produce terse json output"); - terseOutputOption.AddAlias("-to"); + terseOutputOption.AddAlias("--to"); var logLevelOption = new Option("--loglevel", () => LogLevel.Information, "The log level to use when logging messages to the main output."); - logLevelOption.AddAlias("-ll"); + logLevelOption.AddAlias("--ll"); var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by comma delimited list of OperationId(s) provided"); - filterByOperationIdsOption.AddAlias("-op"); + filterByOperationIdsOption.AddAlias("--op"); var filterByTagsOption = new Option("--filter-by-tags", "Filters OpenApiDocument by comma delimited list of Tag(s) provided. Also accepts a single regex."); - filterByTagsOption.AddAlias("-t"); + filterByTagsOption.AddAlias("--t"); var filterByCollectionOption = new Option("--filter-by-collection", "Filters OpenApiDocument by Postman collection provided. Provide path to collection file."); filterByCollectionOption.AddAlias("-c"); var inlineLocalOption = new Option("--inline-local", "Inline local $ref instances"); - inlineLocalOption.AddAlias("-il"); + inlineLocalOption.AddAlias("--il"); var inlineExternalOption = new Option("--inline-external", "Inline external $ref instances"); - inlineExternalOption.AddAlias("-ie"); + inlineExternalOption.AddAlias("--ie"); var validateCommand = new Command("validate") { From 916e713a8980100359b2d85b0f83bee846d37079 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 20 May 2022 10:23:33 -0400 Subject: [PATCH 133/720] - aligns log level on kebab casing convention --- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 97fa776c..c8ba8fdc 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -42,7 +42,7 @@ static async Task Main(string[] args) var terseOutputOption = new Option("--terse-output", "Produce terse json output"); terseOutputOption.AddAlias("--to"); - var logLevelOption = new Option("--loglevel", () => LogLevel.Information, "The log level to use when logging messages to the main output."); + var logLevelOption = new Option("--log-level", () => LogLevel.Information, "The log level to use when logging messages to the main output."); logLevelOption.AddAlias("--ll"); var filterByOperationIdsOption = new Option("--filter-by-operationids", "Filters OpenApiDocument by comma delimited list of OperationId(s) provided"); From 494c0983efaa059c642407269876d6cc1f96f684 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 27 May 2022 10:03:40 -0400 Subject: [PATCH 134/720] - fixes an issue where log entries would be missing Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 0adfca1e..8e1838d9 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -54,7 +54,8 @@ public static async Task TransformOpenApiDocument( CancellationToken cancellationToken ) { - var logger = ConfigureLoggerInstance(loglevel); + using var loggerFactory = ConfigureLoggerInstance(loglevel); + var logger = loggerFactory.CreateLogger(); try { @@ -258,7 +259,8 @@ public static async Task ValidateOpenApiDocument( LogLevel loglevel, CancellationToken cancellationToken) { - var logger = ConfigureLoggerInstance(loglevel); + using var loggerFactory = ConfigureLoggerInstance(loglevel); + var logger = loggerFactory.CreateLogger(); try { @@ -573,14 +575,14 @@ private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) return !input.StartsWith("http") && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; } - private static ILogger ConfigureLoggerInstance(LogLevel loglevel) + private static ILoggerFactory ConfigureLoggerInstance(LogLevel loglevel) { // Configure logger options #if DEBUG loglevel = loglevel > LogLevel.Debug ? LogLevel.Debug : loglevel; #endif - var logger = LoggerFactory.Create((builder) => { + return LoggerFactory.Create((builder) => { builder .AddSimpleConsole(c => { c.IncludeScopes = true; @@ -589,9 +591,7 @@ private static ILogger ConfigureLoggerInstance(LogLevel loglevel) .AddDebug() #endif .SetMinimumLevel(loglevel); - }).CreateLogger(); - - return logger; + }); } } } From 173b045f01e3493f3ad64eeef958106577315086 Mon Sep 17 00:00:00 2001 From: Irvine Date: Tue, 7 Jun 2022 15:17:35 +0300 Subject: [PATCH 135/720] Bump conversion lib version and hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4d2dc417..00f726e0 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview4 + 1.0.0-preview5 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET @@ -46,7 +46,7 @@ - + From 8f324cc1e963a379a9d0b1699ccde5f21ee3361d Mon Sep 17 00:00:00 2001 From: Irvine Date: Tue, 7 Jun 2022 15:33:58 +0300 Subject: [PATCH 136/720] Adds entry to the csproj release notes --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 00f726e0..6bc53051 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -23,6 +23,7 @@ - Enables discriminator values - Adds new OpenAPI convert setting, ExpandDerivedTypesNavigationProperties and sets it to false +- Bumps up the Microsoft.OpenApi.OData library to v1.0.11-preview2 Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi From aa85d28401393b023cdbe5c72f4c2575889f239c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 21:55:42 +0000 Subject: [PATCH 137/720] Bump Microsoft.OData.Edm from 7.11.0 to 7.12.0 Bumps Microsoft.OData.Edm from 7.11.0 to 7.12.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 6bc53051..d1b3724d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -46,7 +46,7 @@ - + From fad0bc566d40c31a80b048f969527ca2f492f3c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jun 2022 03:17:27 +0000 Subject: [PATCH 138/720] Bump Microsoft.OpenApi.OData from 1.0.11-preview2 to 1.0.11-preview3 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.0.11-preview2 to 1.0.11-preview3. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index d1b3724d..154e2d55 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -47,7 +47,7 @@ - + From a60770110c249ac0b1f43866b8da10358bf1903d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 23 Jun 2022 13:17:59 -0400 Subject: [PATCH 139/720] - adds release notes Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 154e2d55..f885e8d6 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,15 +15,15 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview5 + 1.0.0-preview6 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET -- Enables discriminator values -- Adds new OpenAPI convert setting, ExpandDerivedTypesNavigationProperties and sets it to false -- Bumps up the Microsoft.OpenApi.OData library to v1.0.11-preview2 +- Bumps up the Microsoft.OpenAPI library to v1.3.2 +- Bumps up the Microsoft.OData library to v7.12.0 +- Bumps up the Microsoft.OpenApi.OData library to v1.0.11-preview3 Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi From 1bcf9e10883a380d450849d8f3ed4861b5b6f12e Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 6 Jul 2022 12:55:20 +0300 Subject: [PATCH 140/720] Updates csproj release notes to point to Github release notes --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f885e8d6..27bf00b5 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -20,11 +20,7 @@ © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET - -- Bumps up the Microsoft.OpenAPI library to v1.3.2 -- Bumps up the Microsoft.OData library to v7.12.0 -- Bumps up the Microsoft.OpenApi.OData library to v1.0.11-preview3 - + https://github.com/microsoft/OpenAPI.NET/releases/tag/1.3.3 Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi true From a8b146d7f2211da7d1a4600202a6c2e1c30b7551 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 6 Jul 2022 08:21:59 -0400 Subject: [PATCH 141/720] - releases hidi with discriminator fix Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f885e8d6..c5d6562a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,15 +15,13 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview6 + 1.0.0-preview7 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET -- Bumps up the Microsoft.OpenAPI library to v1.3.2 -- Bumps up the Microsoft.OData library to v7.12.0 -- Bumps up the Microsoft.OpenApi.OData library to v1.0.11-preview3 +- Bumps up the Microsoft.OpenApi.OData library to v1.0.11-preview4 Microsoft.OpenApi.Hidi Microsoft.OpenApi.Hidi @@ -47,7 +45,7 @@ - + From 21eb474f8f58d931010ade173a3be3cd4ac9dc06 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 7 Jul 2022 13:05:08 +0300 Subject: [PATCH 142/720] Infer input file path extension and add it to the default output path --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 26 +++++++++++++++----- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8e1838d9..934b00cd 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -63,10 +63,11 @@ CancellationToken cancellationToken { throw new ArgumentException("Please input a file path"); } - if(output == null) + if (output == null) { - throw new ArgumentNullException(nameof(output)); - } + var inputExtension = GetInputPathExtension(openapi, csdl); + output = new FileInfo($"./output{inputExtension}"); + }; if (cleanoutput && output.Exists) { output.Delete(); @@ -249,8 +250,6 @@ private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslC return stream; } - - /// /// Implementation of the validate command /// @@ -575,6 +574,21 @@ private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) return !input.StartsWith("http") && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; } + private static string GetInputPathExtension(string openapi = null, string csdl = null) + { + var extension = String.Empty; + if (!string.IsNullOrEmpty(openapi)) + { + extension = Path.GetExtension(openapi); + } + if (!string.IsNullOrEmpty(csdl)) + { + extension = ".yml"; + } + + return extension; + } + private static ILoggerFactory ConfigureLoggerInstance(LogLevel loglevel) { // Configure logger options diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index c8ba8fdc..d19e48cf 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -27,7 +27,7 @@ static async Task Main(string[] args) var csdlFilterOption = new Option("--csdl-filter", "Comma delimited list of EntitySets or Singletons to filter CSDL on. e.g. tasks,accounts"); csdlFilterOption.AddAlias("--csf"); - var outputOption = new Option("--output", () => new FileInfo("./output"), "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; + var outputOption = new Option("--output", "The output directory path for the generated file.") { Arity = ArgumentArity.ZeroOrOne }; outputOption.AddAlias("-o"); var cleanOutputOption = new Option("--clean-output", "Overwrite an existing file"); From 9f3603efe417fe417ecdcd0becf241b934f6f420 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 7 Jul 2022 13:05:26 +0300 Subject: [PATCH 143/720] Move Hidi tests to own test project --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 54 + .../Services/OpenApiFilterServiceTests.cs | 139 + .../Services/OpenApiServiceTests.cs | 55 + .../UtilityFiles/OpenApiDocumentMock.cs | 737 + .../UtilityFiles/Todo.xml | 21 + .../UtilityFiles/postmanCollection_ver1.json | 102 + .../UtilityFiles/postmanCollection_ver2.json | 23698 ++++++++++++++++ .../UtilityFiles/postmanCollection_ver3.json | 1382 + .../UtilityFiles/postmanCollection_ver4.json | 145 + 9 files changed, 26333 insertions(+) create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/Todo.xml create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver1.json create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver2.json create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver3.json create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver4.json diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj new file mode 100644 index 00000000..d179b0f5 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -0,0 +1,54 @@ + + + + net6.0 + enable + enable + + false + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + + Always + + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + + diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs new file mode 100644 index 00000000..29cb684d --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -0,0 +1,139 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.IO; +using Microsoft.Extensions.Logging; +using Microsoft.OpenApi.Hidi; +using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Services; +using Microsoft.OpenApi.Tests.UtilityFiles; +using Moq; +using Xunit; + +namespace Microsoft.OpenApi.Tests.Services +{ + public class OpenApiFilterServiceTests + { + private readonly OpenApiDocument _openApiDocumentMock; + private readonly Mock> _mockLogger; + private readonly ILogger _logger; + + public OpenApiFilterServiceTests() + { + _openApiDocumentMock = OpenApiDocumentMock.CreateOpenApiDocument(); + _mockLogger = new Mock>(); + _logger = _mockLogger.Object; + } + + [Theory] + [InlineData("users.user.ListUser", null, 1)] + [InlineData("users.user.GetUser", null, 1)] + [InlineData("users.user.ListUser,users.user.GetUser", null, 2)] + [InlineData("*", null, 12)] + [InlineData("administrativeUnits.restore", null, 1)] + [InlineData("graphService.GetGraphService", null, 1)] + [InlineData(null, "users.user,applications.application", 3)] + [InlineData(null, "^users\\.", 3)] + [InlineData(null, "users.user", 2)] + [InlineData(null, "applications.application", 1)] + [InlineData(null, "reports.Functions", 2)] + public void ReturnFilteredOpenApiDocumentBasedOnOperationIdsAndTags(string operationIds, string tags, int expectedPathCount) + { + // Act + var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); + var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(_openApiDocumentMock, predicate); + + // Assert + Assert.NotNull(subsetOpenApiDocument); + Assert.NotEmpty(subsetOpenApiDocument.Paths); + Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); + } + + [Fact] + public void ReturnFilteredOpenApiDocumentBasedOnPostmanCollection() + { + // Arrange + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\postmanCollection_ver2.json"); + var fileInput = new FileInfo(filePath); + var stream = fileInput.OpenRead(); + + // Act + var requestUrls = OpenApiService.ParseJsonCollectionFile(stream, _logger); + var predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: _openApiDocumentMock); + var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(_openApiDocumentMock, predicate); + + // Assert + Assert.NotNull(subsetOpenApiDocument); + Assert.NotEmpty(subsetOpenApiDocument.Paths); + Assert.Equal(3, subsetOpenApiDocument.Paths.Count); + } + + [Fact] + public void ShouldParseNestedPostmanCollection() + { + // Arrange + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\postmanCollection_ver3.json"); + var fileInput = new FileInfo(filePath); + var stream = fileInput.OpenRead(); + + // Act + var requestUrls = OpenApiService.ParseJsonCollectionFile(stream, _logger); + var pathCount = requestUrls.Count; + + // Assert + Assert.NotNull(requestUrls); + Assert.Equal(30, pathCount); + } + + [Fact] + public void ThrowsExceptionWhenUrlsInCollectionAreMissingFromSourceDocument() + { + // Arrange + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\postmanCollection_ver1.json"); + var fileInput = new FileInfo(filePath); + var stream = fileInput.OpenRead(); + + // Act + var requestUrls = OpenApiService.ParseJsonCollectionFile(stream, _logger); + + // Assert + var message = Assert.Throws(() => + OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: _openApiDocumentMock)).Message; + Assert.Equal("The urls in the Postman collection supplied could not be found.", message); + } + + [Fact] + public void ContinueProcessingWhenUrlsInCollectionAreMissingFromSourceDocument() + { + // Arrange + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\postmanCollection_ver4.json"); + var fileInput = new FileInfo(filePath); + var stream = fileInput.OpenRead(); + + // Act + var requestUrls = OpenApiService.ParseJsonCollectionFile(stream, _logger); + var pathCount = requestUrls.Count; + var predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: _openApiDocumentMock); + var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(_openApiDocumentMock, predicate); + var subsetPathCount = subsetOpenApiDocument.Paths.Count; + + // Assert + Assert.NotNull(subsetOpenApiDocument); + Assert.NotEmpty(subsetOpenApiDocument.Paths); + Assert.Equal(2, subsetPathCount); + Assert.NotEqual(pathCount, subsetPathCount); + } + + [Fact] + public void ThrowsInvalidOperationExceptionInCreatePredicateWhenInvalidArgumentsArePassed() + { + // Act and Assert + var message1 = Assert.Throws(() => OpenApiFilterService.CreatePredicate(null, null)).Message; + Assert.Equal("Either operationId(s),tag(s) or Postman collection need to be specified.", message1); + + var message2 = Assert.Throws(() => OpenApiFilterService.CreatePredicate("users.user.ListUser", "users.user")).Message; + Assert.Equal("Cannot specify both operationIds and tags at the same time.", message2); + } + } +} diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs new file mode 100644 index 00000000..af5437aa --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.IO; +using System.Threading.Tasks; +using Microsoft.OpenApi.Hidi; +using Microsoft.OpenApi.Services; +using Xunit; + +namespace Microsoft.OpenApi.Tests.Services +{ + public class OpenApiServiceTests + { + [Fact] + public async Task ReturnConvertedCSDLFile() + { + // Arrange + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml"); + var fileInput = new FileInfo(filePath); + var csdlStream = fileInput.OpenRead(); + + // Act + var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); + var expectedPathCount = 5; + + // Assert + Assert.NotNull(openApiDoc); + Assert.NotEmpty(openApiDoc.Paths); + Assert.Equal(expectedPathCount, openApiDoc.Paths.Count); + } + + [Theory] + [InlineData("Todos.Todo.UpdateTodo",null, 1)] + [InlineData("Todos.Todo.ListTodo",null, 1)] + [InlineData(null, "Todos.Todo", 4)] + public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) + { + // Arrange + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml"); + var fileInput = new FileInfo(filePath); + var csdlStream = fileInput.OpenRead(); + + // Act + var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); + var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); + var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(openApiDoc, predicate); + + // Assert + Assert.NotNull(subsetOpenApiDocument); + Assert.NotEmpty(subsetOpenApiDocument.Paths); + Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); + } + } +} diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs new file mode 100644 index 00000000..d21fccb9 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -0,0 +1,737 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System.Collections.Generic; +using System.Security.Policy; +using Microsoft.OpenApi.Any; +using Microsoft.OpenApi.Interfaces; +using Microsoft.OpenApi.Models; + +namespace Microsoft.OpenApi.Tests.UtilityFiles +{ + /// + /// Mock class that creates a sample OpenAPI document. + /// + public static class OpenApiDocumentMock + { + /// + /// Creates an OpenAPI document. + /// + /// Instance of an OpenApi document + public static OpenApiDocument CreateOpenApiDocument() + { + var applicationJsonMediaType = "application/json"; + + var document = new OpenApiDocument() + { + Info = new OpenApiInfo() + { + Title = "People", + Version = "v1.0" + }, + Servers = new List + { + new OpenApiServer + { + Url = "https://graph.microsoft.com/v1.0" + } + }, + Paths = new OpenApiPaths() + { + ["/"] = new OpenApiPathItem() // root path + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + OperationId = "graphService.GetGraphService", + Responses = new OpenApiResponses() + { + { + "200",new OpenApiResponse() + { + Description = "OK" + } + } + } + } + } + } + }, + ["/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "reports.Functions" + } + } + }, + OperationId = "reports.getTeamsUserActivityCounts", + Summary = "Invoke function getTeamsUserActivityUserCounts", + Parameters = new List + { + { + new OpenApiParameter() + { + Name = "period", + In = ParameterLocation.Path, + Required = true, + Schema = new OpenApiSchema() + { + Type = "string" + } + } + } + }, + Responses = new OpenApiResponses() + { + { + "200", new OpenApiResponse() + { + Description = "Success", + Content = new Dictionary + { + { + applicationJsonMediaType, + new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Type = "array" + } + } + } + } + } + } + } + } + } + } + }, + ["/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "reports.Functions" + } + } + }, + OperationId = "reports.getTeamsUserActivityUserDetail-a3f1", + Summary = "Invoke function getTeamsUserActivityUserDetail", + Parameters = new List + { + { + new OpenApiParameter() + { + Name = "period", + In = ParameterLocation.Path, + Required = true, + Schema = new OpenApiSchema() + { + Type = "string" + } + } + } + }, + Responses = new OpenApiResponses() + { + { + "200", new OpenApiResponse() + { + Description = "Success", + Content = new Dictionary + { + { + applicationJsonMediaType, + new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Type = "array" + } + } + } + } + } + } + } + } + } + } + }, + ["/users"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "users.user" + } + } + }, + OperationId = "users.user.ListUser", + Summary = "Get entities from users", + Responses = new OpenApiResponses() + { + { + "200", new OpenApiResponse() + { + Description = "Retrieved entities", + Content = new Dictionary + { + { + applicationJsonMediaType, + new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Title = "Collection of user", + Type = "object", + Properties = new Dictionary + { + { + "value", + new OpenApiSchema + { + Type = "array", + Items = new OpenApiSchema + { + Reference = new OpenApiReference + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.user" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + ["/users/{user-id}"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "users.user" + } + } + }, + OperationId = "users.user.GetUser", + Summary = "Get entity from users by key", + Responses = new OpenApiResponses() + { + { + "200", new OpenApiResponse() + { + Description = "Retrieved entity", + Content = new Dictionary + { + { + applicationJsonMediaType, + new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Reference = new OpenApiReference + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.user" + } + } + } + } + } + } + } + } + } + }, + { + OperationType.Patch, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "users.user" + } + } + }, + OperationId = "users.user.UpdateUser", + Summary = "Update entity in users", + Responses = new OpenApiResponses() + { + { + "204", new OpenApiResponse() + { + Description = "Success" + } + } + } + } + } + } + }, + ["/users/{user-id}/messages/{message-id}"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "users.message" + } + } + }, + OperationId = "users.GetMessages", + Summary = "Get messages from users", + Description = "The messages in a mailbox or folder. Read-only. Nullable.", + Parameters = new List + { + new OpenApiParameter() + { + Name = "$select", + In = ParameterLocation.Query, + Required = true, + Description = "Select properties to be returned", + Schema = new OpenApiSchema() + { + Type = "array" + } + // missing explode parameter + } + }, + Responses = new OpenApiResponses() + { + { + "200", new OpenApiResponse() + { + Description = "Retrieved navigation property", + Content = new Dictionary + { + { + applicationJsonMediaType, + new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Reference = new OpenApiReference + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.message" + } + } + } + } + } + } + } + } + } + } + } + }, + ["/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Post, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "administrativeUnits.Actions" + } + } + }, + OperationId = "administrativeUnits.restore", + Summary = "Invoke action restore", + Parameters = new List + { + { + new OpenApiParameter() + { + Name = "administrativeUnit-id", + In = ParameterLocation.Path, + Required = true, + Description = "key: id of administrativeUnit", + Schema = new OpenApiSchema() + { + Type = "string" + } + } + } + }, + Responses = new OpenApiResponses() + { + { + "200", new OpenApiResponse() + { + Description = "Success", + Content = new Dictionary + { + { + applicationJsonMediaType, + new OpenApiMediaType + { + Schema = new OpenApiSchema + { + AnyOf = new List + { + new OpenApiSchema + { + Type = "string" + } + }, + Nullable = true + } + } + } + } + } + } + } + } + } + } + }, + ["/applications/{application-id}/logo"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Put, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "applications.application" + } + } + }, + OperationId = "applications.application.UpdateLogo", + Summary = "Update media content for application in applications", + Responses = new OpenApiResponses() + { + { + "204", new OpenApiResponse() + { + Description = "Success" + } + } + } + } + } + } + }, + ["/security/hostSecurityProfiles"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "security.hostSecurityProfile" + } + } + }, + OperationId = "security.ListHostSecurityProfiles", + Summary = "Get hostSecurityProfiles from security", + Responses = new OpenApiResponses() + { + { + "200", new OpenApiResponse() + { + Description = "Retrieved navigation property", + Content = new Dictionary + { + { + applicationJsonMediaType, + new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Title = "Collection of hostSecurityProfile", + Type = "object", + Properties = new Dictionary + { + { + "value", + new OpenApiSchema + { + Type = "array", + Items = new OpenApiSchema + { + Reference = new OpenApiReference + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.networkInterface" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + ["/communications/calls/{call-id}/microsoft.graph.keepAlive"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Post, new OpenApiOperation + { + Tags = new List + { + { + new OpenApiTag() + { + Name = "communications.Actions" + } + } + }, + OperationId = "communications.calls.call.keepAlive", + Summary = "Invoke action keepAlive", + Parameters = new List + { + new OpenApiParameter() + { + Name = "call-id", + In = ParameterLocation.Path, + Description = "key: id of call", + Required = true, + Schema = new OpenApiSchema() + { + Type = "string" + }, + Extensions = new Dictionary + { + { + "x-ms-docs-key-type", new OpenApiString("call") + } + } + } + }, + Responses = new OpenApiResponses() + { + { + "204", new OpenApiResponse() + { + Description = "Success" + } + } + }, + Extensions = new Dictionary + { + { + "x-ms-docs-operation-type", new OpenApiString("action") + } + } + } + } + } + }, + ["/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + Tags = new List + { + new OpenApiTag() + { + Name = "groups.Functions" + } + }, + OperationId = "groups.group.events.event.calendar.events.delta", + Summary = "Invoke function delta", + Parameters = new List + { + new OpenApiParameter() + { + Name = "group-id", + In = ParameterLocation.Path, + Description = "key: id of group", + Required = true, + Schema = new OpenApiSchema() + { + Type = "string" + }, + Extensions = new Dictionary + { + { + "x-ms-docs-key-type", new OpenApiString("group") + } + } + }, + new OpenApiParameter() + { + Name = "event-id", + In = ParameterLocation.Path, + Description = "key: id of event", + Required = true, + Schema = new OpenApiSchema() + { + Type = "string" + }, + Extensions = new Dictionary + { + { + "x-ms-docs-key-type", new OpenApiString("event") + } + } + } + }, + Responses = new OpenApiResponses() + { + { + "200", new OpenApiResponse() + { + Description = "Success", + Content = new Dictionary + { + { + applicationJsonMediaType, + new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Type = "array", + Reference = new OpenApiReference + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.event" + } + } + } + } + } + } + } + }, + Extensions = new Dictionary + { + { + "x-ms-docs-operation-type", new OpenApiString("function") + } + } + } + } + } + }, + ["/applications/{application-id}/createdOnBehalfOf/$ref"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + { + OperationType.Get, new OpenApiOperation + { + Tags = new List + { + new OpenApiTag() + { + Name = "applications.directoryObject" + } + }, + OperationId = "applications.GetRefCreatedOnBehalfOf", + Summary = "Get ref of createdOnBehalfOf from applications" + } + } + } + } + }, + Components = new OpenApiComponents + { + Schemas = new Dictionary + { + { + "microsoft.graph.networkInterface", new OpenApiSchema + { + Title = "networkInterface", + Type = "object", + Properties = new Dictionary + { + { + "description", new OpenApiSchema + { + Type = "string", + Description = "Description of the NIC (e.g. Ethernet adapter, Wireless LAN adapter Local Area Connection <#>, etc.).", + Nullable = true + } + } + } + } + } + } + } + }; + return document; + } + } +} diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/Todo.xml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/Todo.xml new file mode 100644 index 00000000..b3b07deb --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/Todo.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver1.json b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver1.json new file mode 100644 index 00000000..151d184e --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver1.json @@ -0,0 +1,102 @@ +{ + "info": { + "_postman_id": "0017059134807617005", + "name": "Graph-Collection", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "agreementAcceptances-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "agreementAcceptances" + ] + } + } + }, + { + "name": "agreementAcceptances-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "agreementAcceptances" + ] + } + } + }, + { + "name": "{agreementAcceptance-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances/{agreementAcceptance-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "agreementAcceptances", + "{agreementAcceptance-id}" + ] + } + } + }, + { + "name": "{agreementAcceptance-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances/{agreementAcceptance-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "agreementAcceptances", + "{agreementAcceptance-id}" + ] + } + } + }, + { + "name": "{agreementAcceptance-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances/{agreementAcceptance-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "agreementAcceptances", + "{agreementAcceptance-id}" + ] + } + } + } + ] +} \ No newline at end of file diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver2.json b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver2.json new file mode 100644 index 00000000..00357773 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver2.json @@ -0,0 +1,23698 @@ +{ + "info": { + "_postman_id": "43402ca3-f018-7c9b-2315-f176d9b171a3", + "name": "Graph-Collection", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "users-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users" + ] + } + } + }, + { + "name": "users-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users" + ] + } + } + }, + { + "name": "{user-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}" + ] + } + } + }, + { + "name": "{user-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}" + ] + } + } + }, + { + "name": "{user-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}" + ] + } + } + }, + { + "name": "activities-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities" + ] + } + } + }, + { + "name": "activities-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities" + ] + } + } + }, + { + "name": "{userActivity-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}" + ] + } + } + }, + { + "name": "{userActivity-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}" + ] + } + } + }, + { + "name": "{userActivity-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}" + ] + } + } + }, + { + "name": "historyItems-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems" + ] + } + } + }, + { + "name": "historyItems-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems" + ] + } + } + }, + { + "name": "{activityHistoryItem-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems/{activityHistoryItem-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems", + "{activityHistoryItem-id}" + ] + } + } + }, + { + "name": "{activityHistoryItem-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems/{activityHistoryItem-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems", + "{activityHistoryItem-id}" + ] + } + } + }, + { + "name": "{activityHistoryItem-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems/{activityHistoryItem-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems", + "{activityHistoryItem-id}" + ] + } + } + }, + { + "name": "activity-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems/{activityHistoryItem-id}/activity", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems", + "{activityHistoryItem-id}", + "activity" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems/{activityHistoryItem-id}/activity/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems", + "{activityHistoryItem-id}", + "activity", + "$ref" + ] + } + } + }, + { + "name": "$ref-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems/{activityHistoryItem-id}/activity/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems", + "{activityHistoryItem-id}", + "activity", + "$ref" + ] + } + } + }, + { + "name": "$ref-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/activities/{userActivity-id}/historyItems/{activityHistoryItem-id}/activity/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "activities", + "{userActivity-id}", + "historyItems", + "{activityHistoryItem-id}", + "activity", + "$ref" + ] + } + } + }, + { + "name": "agreementAcceptances-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/agreementAcceptances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "agreementAcceptances" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/agreementAcceptances/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "agreementAcceptances", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/agreementAcceptances/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "agreementAcceptances", + "$ref" + ] + } + } + }, + { + "name": "appRoleAssignments-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/appRoleAssignments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "appRoleAssignments" + ] + } + } + }, + { + "name": "appRoleAssignments-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/appRoleAssignments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "appRoleAssignments" + ] + } + } + }, + { + "name": "{appRoleAssignment-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/appRoleAssignments/{appRoleAssignment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "appRoleAssignments", + "{appRoleAssignment-id}" + ] + } + } + }, + { + "name": "{appRoleAssignment-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/appRoleAssignments/{appRoleAssignment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "appRoleAssignments", + "{appRoleAssignment-id}" + ] + } + } + }, + { + "name": "{appRoleAssignment-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/appRoleAssignments/{appRoleAssignment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "appRoleAssignments", + "{appRoleAssignment-id}" + ] + } + } + }, + { + "name": "authentication-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication" + ] + } + } + }, + { + "name": "authentication-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication" + ] + } + } + }, + { + "name": "authentication-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication" + ] + } + } + }, + { + "name": "fido2Methods-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/fido2Methods", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "fido2Methods" + ] + } + } + }, + { + "name": "fido2Methods-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/fido2Methods", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "fido2Methods" + ] + } + } + }, + { + "name": "{fido2AuthenticationMethod-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/fido2Methods/{fido2AuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "fido2Methods", + "{fido2AuthenticationMethod-id}" + ] + } + } + }, + { + "name": "{fido2AuthenticationMethod-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/fido2Methods/{fido2AuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "fido2Methods", + "{fido2AuthenticationMethod-id}" + ] + } + } + }, + { + "name": "{fido2AuthenticationMethod-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/fido2Methods/{fido2AuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "fido2Methods", + "{fido2AuthenticationMethod-id}" + ] + } + } + }, + { + "name": "methods-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/methods", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "methods" + ] + } + } + }, + { + "name": "methods-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/methods", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "methods" + ] + } + } + }, + { + "name": "{authenticationMethod-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/methods/{authenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "methods", + "{authenticationMethod-id}" + ] + } + } + }, + { + "name": "{authenticationMethod-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/methods/{authenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "methods", + "{authenticationMethod-id}" + ] + } + } + }, + { + "name": "{authenticationMethod-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/methods/{authenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "methods", + "{authenticationMethod-id}" + ] + } + } + }, + { + "name": "microsoftAuthenticatorMethods-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/microsoftAuthenticatorMethods", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "microsoftAuthenticatorMethods" + ] + } + } + }, + { + "name": "microsoftAuthenticatorMethods-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/microsoftAuthenticatorMethods", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "microsoftAuthenticatorMethods" + ] + } + } + }, + { + "name": "{microsoftAuthenticatorAuthenticationMethod-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/microsoftAuthenticatorMethods/{microsoftAuthenticatorAuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "microsoftAuthenticatorMethods", + "{microsoftAuthenticatorAuthenticationMethod-id}" + ] + } + } + }, + { + "name": "{microsoftAuthenticatorAuthenticationMethod-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/microsoftAuthenticatorMethods/{microsoftAuthenticatorAuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "microsoftAuthenticatorMethods", + "{microsoftAuthenticatorAuthenticationMethod-id}" + ] + } + } + }, + { + "name": "{microsoftAuthenticatorAuthenticationMethod-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/microsoftAuthenticatorMethods/{microsoftAuthenticatorAuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "microsoftAuthenticatorMethods", + "{microsoftAuthenticatorAuthenticationMethod-id}" + ] + } + } + }, + { + "name": "device-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/microsoftAuthenticatorMethods/{microsoftAuthenticatorAuthenticationMethod-id}/device", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "microsoftAuthenticatorMethods", + "{microsoftAuthenticatorAuthenticationMethod-id}", + "device" + ] + } + } + }, + { + "name": "device-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/microsoftAuthenticatorMethods/{microsoftAuthenticatorAuthenticationMethod-id}/device", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "microsoftAuthenticatorMethods", + "{microsoftAuthenticatorAuthenticationMethod-id}", + "device" + ] + } + } + }, + { + "name": "device-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/microsoftAuthenticatorMethods/{microsoftAuthenticatorAuthenticationMethod-id}/device", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "microsoftAuthenticatorMethods", + "{microsoftAuthenticatorAuthenticationMethod-id}", + "device" + ] + } + } + }, + { + "name": "windowsHelloForBusinessMethods-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/windowsHelloForBusinessMethods", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "windowsHelloForBusinessMethods" + ] + } + } + }, + { + "name": "windowsHelloForBusinessMethods-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/windowsHelloForBusinessMethods", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "windowsHelloForBusinessMethods" + ] + } + } + }, + { + "name": "{windowsHelloForBusinessAuthenticationMethod-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/windowsHelloForBusinessMethods/{windowsHelloForBusinessAuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "windowsHelloForBusinessMethods", + "{windowsHelloForBusinessAuthenticationMethod-id}" + ] + } + } + }, + { + "name": "{windowsHelloForBusinessAuthenticationMethod-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/windowsHelloForBusinessMethods/{windowsHelloForBusinessAuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "windowsHelloForBusinessMethods", + "{windowsHelloForBusinessAuthenticationMethod-id}" + ] + } + } + }, + { + "name": "{windowsHelloForBusinessAuthenticationMethod-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/windowsHelloForBusinessMethods/{windowsHelloForBusinessAuthenticationMethod-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "windowsHelloForBusinessMethods", + "{windowsHelloForBusinessAuthenticationMethod-id}" + ] + } + } + }, + { + "name": "device-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/windowsHelloForBusinessMethods/{windowsHelloForBusinessAuthenticationMethod-id}/device", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "windowsHelloForBusinessMethods", + "{windowsHelloForBusinessAuthenticationMethod-id}", + "device" + ] + } + } + }, + { + "name": "device-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/windowsHelloForBusinessMethods/{windowsHelloForBusinessAuthenticationMethod-id}/device", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "windowsHelloForBusinessMethods", + "{windowsHelloForBusinessAuthenticationMethod-id}", + "device" + ] + } + } + }, + { + "name": "device-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/authentication/windowsHelloForBusinessMethods/{windowsHelloForBusinessAuthenticationMethod-id}/device", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "authentication", + "windowsHelloForBusinessMethods", + "{windowsHelloForBusinessAuthenticationMethod-id}", + "device" + ] + } + } + }, + { + "name": "calendar-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar" + ] + } + } + }, + { + "name": "calendarPermissions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarPermissions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarPermissions" + ] + } + } + }, + { + "name": "calendarPermissions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarPermissions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarPermissions" + ] + } + } + }, + { + "name": "{calendarPermission-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "{calendarPermission-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "{calendarPermission-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "calendarView-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView" + ] + } + } + }, + { + "name": "calendarView-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView" + ] + } + } + }, + { + "name": "{event-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "attachments-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "attachments" + ] + } + } + }, + { + "name": "attachments-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "attachments" + ] + } + } + }, + { + "name": "{attachment-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "{attachment-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "{attachment-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "calendar-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "extensions" + ] + } + } + }, + { + "name": "{extension-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "instances-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/instances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "instances" + ] + } + } + }, + { + "name": "instances-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/instances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "instances" + ] + } + } + }, + { + "name": "{event-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/calendarView/{event-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "calendarView", + "{event-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "events-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "events" + ] + } + } + }, + { + "name": "events-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "events" + ] + } + } + }, + { + "name": "{event-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendar/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendar", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "calendarGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups" + ] + } + } + }, + { + "name": "calendarGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups" + ] + } + } + }, + { + "name": "{calendarGroup-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}" + ] + } + } + }, + { + "name": "{calendarGroup-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}" + ] + } + } + }, + { + "name": "{calendarGroup-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}" + ] + } + } + }, + { + "name": "calendars-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars" + ] + } + } + }, + { + "name": "calendars-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars" + ] + } + } + }, + { + "name": "{calendar-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}" + ] + } + } + }, + { + "name": "{calendar-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}" + ] + } + } + }, + { + "name": "{calendar-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}" + ] + } + } + }, + { + "name": "calendarPermissions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarPermissions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarPermissions" + ] + } + } + }, + { + "name": "calendarPermissions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarPermissions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarPermissions" + ] + } + } + }, + { + "name": "{calendarPermission-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "{calendarPermission-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "{calendarPermission-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "calendarView-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView" + ] + } + } + }, + { + "name": "calendarView-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView" + ] + } + } + }, + { + "name": "{event-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "attachments-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments" + ] + } + } + }, + { + "name": "attachments-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments" + ] + } + } + }, + { + "name": "{attachment-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "{attachment-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "{attachment-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "calendar-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions" + ] + } + } + }, + { + "name": "{extension-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "instances-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/instances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances" + ] + } + } + }, + { + "name": "instances-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/instances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances" + ] + } + } + }, + { + "name": "{event-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/calendarView/{event-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "events-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "events" + ] + } + } + }, + { + "name": "events-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "events" + ] + } + } + }, + { + "name": "{event-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarGroups/{calendarGroup-id}/calendars/{calendar-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarGroups", + "{calendarGroup-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "calendars-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars" + ] + } + } + }, + { + "name": "calendars-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars" + ] + } + } + }, + { + "name": "{calendar-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}" + ] + } + } + }, + { + "name": "{calendar-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}" + ] + } + } + }, + { + "name": "{calendar-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}" + ] + } + } + }, + { + "name": "calendarPermissions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarPermissions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarPermissions" + ] + } + } + }, + { + "name": "calendarPermissions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarPermissions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarPermissions" + ] + } + } + }, + { + "name": "{calendarPermission-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "{calendarPermission-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "{calendarPermission-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "calendarView-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView" + ] + } + } + }, + { + "name": "calendarView-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView" + ] + } + } + }, + { + "name": "{event-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "attachments-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments" + ] + } + } + }, + { + "name": "attachments-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments" + ] + } + } + }, + { + "name": "{attachment-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "{attachment-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "{attachment-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "calendar-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions" + ] + } + } + }, + { + "name": "{extension-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "instances-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/instances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances" + ] + } + } + }, + { + "name": "instances-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/instances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances" + ] + } + } + }, + { + "name": "{event-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/calendarView/{event-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "events-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "events" + ] + } + } + }, + { + "name": "events-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "events" + ] + } + } + }, + { + "name": "{event-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{multiValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/multiValueExtendedProperties/{multiValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "multiValueExtendedProperties", + "{multiValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "{singleValueLegacyExtendedProperty-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendars/{calendar-id}/singleValueExtendedProperties/{singleValueLegacyExtendedProperty-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendars", + "{calendar-id}", + "singleValueExtendedProperties", + "{singleValueLegacyExtendedProperty-id}" + ] + } + } + }, + { + "name": "calendarView-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView" + ] + } + } + }, + { + "name": "calendarView-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView" + ] + } + } + }, + { + "name": "{event-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}" + ] + } + } + }, + { + "name": "attachments-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "attachments" + ] + } + } + }, + { + "name": "attachments-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "attachments" + ] + } + } + }, + { + "name": "{attachment-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "{attachment-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "{attachment-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/attachments/{attachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "attachments", + "{attachment-id}" + ] + } + } + }, + { + "name": "calendar-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendar-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar" + ] + } + } + }, + { + "name": "calendarPermissions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarPermissions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarPermissions" + ] + } + } + }, + { + "name": "calendarPermissions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarPermissions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarPermissions" + ] + } + } + }, + { + "name": "{calendarPermission-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "{calendarPermission-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "{calendarPermission-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarPermissions/{calendarPermission-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarPermissions", + "{calendarPermission-id}" + ] + } + } + }, + { + "name": "calendarView-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarView" + ] + } + } + }, + { + "name": "calendarView-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarView", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarView" + ] + } + } + }, + { + "name": "{event-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarView/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarView", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarView/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarView", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/calendarView/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "calendarView", + "{event-id1}" + ] + } + } + }, + { + "name": "events-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "events" + ] + } + } + }, + { + "name": "events-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "events" + ] + } + } + }, + { + "name": "{event-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/events/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "events", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/events/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "events", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/events/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "events", + "{event-id1}" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/calendar/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "calendar", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "extensions" + ] + } + } + }, + { + "name": "{extension-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "instances-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/instances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "instances" + ] + } + } + }, + { + "name": "instances-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/instances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "instances" + ] + } + } + }, + { + "name": "{event-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "{event-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/instances/{event-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "instances", + "{event-id1}" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/calendarView/{event-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "calendarView", + "{event-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "chats-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/chats", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "chats" + ] + } + } + }, + { + "name": "chats-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/chats", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "chats" + ] + } + } + }, + { + "name": "{chat-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/chats/{chat-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "chats", + "{chat-id}" + ] + } + } + }, + { + "name": "{chat-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/chats/{chat-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "chats", + "{chat-id}" + ] + } + } + }, + { + "name": "{chat-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/chats/{chat-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "chats", + "{chat-id}" + ] + } + } + }, + { + "name": "contactFolders-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders" + ] + } + } + }, + { + "name": "contactFolders-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders" + ] + } + } + }, + { + "name": "{contactFolder-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}" + ] + } + } + }, + { + "name": "{contactFolder-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}" + ] + } + } + }, + { + "name": "{contactFolder-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}" + ] + } + } + }, + { + "name": "childFolders-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/childFolders", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "childFolders" + ] + } + } + }, + { + "name": "childFolders-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/childFolders", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "childFolders" + ] + } + } + }, + { + "name": "{contactFolder-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/childFolders/{contactFolder-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "childFolders", + "{contactFolder-id1}" + ] + } + } + }, + { + "name": "{contactFolder-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/childFolders/{contactFolder-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "childFolders", + "{contactFolder-id1}" + ] + } + } + }, + { + "name": "{contactFolder-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/childFolders/{contactFolder-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "childFolders", + "{contactFolder-id1}" + ] + } + } + }, + { + "name": "contacts-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts" + ] + } + } + }, + { + "name": "contacts-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts" + ] + } + } + }, + { + "name": "{contact-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}" + ] + } + } + }, + { + "name": "{contact-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}" + ] + } + } + }, + { + "name": "{contact-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "extensions" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "photo-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "photo" + ] + } + } + }, + { + "name": "photo-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "photo" + ] + } + } + }, + { + "name": "photo-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "photo" + ] + } + } + }, + { + "name": "$value-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/photo/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "photo", + "$value" + ] + } + } + }, + { + "name": "$value-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/photo/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "photo", + "$value" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/contacts/{contact-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "contacts", + "{contact-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contactFolders/{contactFolder-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contactFolders", + "{contactFolder-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "contacts-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts" + ] + } + } + }, + { + "name": "contacts-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts" + ] + } + } + }, + { + "name": "{contact-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}" + ] + } + } + }, + { + "name": "{contact-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}" + ] + } + } + }, + { + "name": "{contact-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "extensions" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "photo-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "photo" + ] + } + } + }, + { + "name": "photo-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "photo" + ] + } + } + }, + { + "name": "photo-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "photo" + ] + } + } + }, + { + "name": "$value-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/photo/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "photo", + "$value" + ] + } + } + }, + { + "name": "$value-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/photo/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "photo", + "$value" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/contacts/{contact-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "contacts", + "{contact-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "createdObjects-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/createdObjects", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "createdObjects" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/createdObjects/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "createdObjects", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/createdObjects/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "createdObjects", + "$ref" + ] + } + } + }, + { + "name": "deviceManagementTroubleshootingEvents-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/deviceManagementTroubleshootingEvents", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "deviceManagementTroubleshootingEvents" + ] + } + } + }, + { + "name": "deviceManagementTroubleshootingEvents-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/deviceManagementTroubleshootingEvents", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "deviceManagementTroubleshootingEvents" + ] + } + } + }, + { + "name": "{deviceManagementTroubleshootingEvent-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/deviceManagementTroubleshootingEvents/{deviceManagementTroubleshootingEvent-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "deviceManagementTroubleshootingEvents", + "{deviceManagementTroubleshootingEvent-id}" + ] + } + } + }, + { + "name": "{deviceManagementTroubleshootingEvent-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/deviceManagementTroubleshootingEvents/{deviceManagementTroubleshootingEvent-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "deviceManagementTroubleshootingEvents", + "{deviceManagementTroubleshootingEvent-id}" + ] + } + } + }, + { + "name": "{deviceManagementTroubleshootingEvent-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/deviceManagementTroubleshootingEvents/{deviceManagementTroubleshootingEvent-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "deviceManagementTroubleshootingEvents", + "{deviceManagementTroubleshootingEvent-id}" + ] + } + } + }, + { + "name": "directReports-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/directReports", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "directReports" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/directReports/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "directReports", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/directReports/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "directReports", + "$ref" + ] + } + } + }, + { + "name": "drive-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/drive", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "drive" + ] + } + } + }, + { + "name": "drive-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/drive", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "drive" + ] + } + } + }, + { + "name": "drive-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/drive", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "drive" + ] + } + } + }, + { + "name": "drives-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/drives", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "drives" + ] + } + } + }, + { + "name": "drives-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/drives", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "drives" + ] + } + } + }, + { + "name": "{drive-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/drives/{drive-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "drives", + "{drive-id}" + ] + } + } + }, + { + "name": "{drive-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/drives/{drive-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "drives", + "{drive-id}" + ] + } + } + }, + { + "name": "{drive-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/drives/{drive-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "drives", + "{drive-id}" + ] + } + } + }, + { + "name": "events-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "events" + ] + } + } + }, + { + "name": "events-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/events", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "events" + ] + } + } + }, + { + "name": "{event-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "{event-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/events/{event-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "events", + "{event-id}" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "extensions" + ] + } + } + }, + { + "name": "{extension-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "followedSites-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/followedSites", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "followedSites" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/followedSites/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "followedSites", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/followedSites/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "followedSites", + "$ref" + ] + } + } + }, + { + "name": "inferenceClassification-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/inferenceClassification", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "inferenceClassification" + ] + } + } + }, + { + "name": "inferenceClassification-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/inferenceClassification", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "inferenceClassification" + ] + } + } + }, + { + "name": "inferenceClassification-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/inferenceClassification", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "inferenceClassification" + ] + } + } + }, + { + "name": "overrides-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/inferenceClassification/overrides", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "inferenceClassification", + "overrides" + ] + } + } + }, + { + "name": "overrides-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/inferenceClassification/overrides", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "inferenceClassification", + "overrides" + ] + } + } + }, + { + "name": "{inferenceClassificationOverride-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/inferenceClassification/overrides/{inferenceClassificationOverride-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "inferenceClassification", + "overrides", + "{inferenceClassificationOverride-id}" + ] + } + } + }, + { + "name": "{inferenceClassificationOverride-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/inferenceClassification/overrides/{inferenceClassificationOverride-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "inferenceClassification", + "overrides", + "{inferenceClassificationOverride-id}" + ] + } + } + }, + { + "name": "{inferenceClassificationOverride-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/inferenceClassification/overrides/{inferenceClassificationOverride-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "inferenceClassification", + "overrides", + "{inferenceClassificationOverride-id}" + ] + } + } + }, + { + "name": "insights-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights" + ] + } + } + }, + { + "name": "insights-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights" + ] + } + } + }, + { + "name": "insights-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights" + ] + } + } + }, + { + "name": "shared-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared" + ] + } + } + }, + { + "name": "shared-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared" + ] + } + } + }, + { + "name": "{sharedInsight-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}" + ] + } + } + }, + { + "name": "{sharedInsight-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}" + ] + } + } + }, + { + "name": "{sharedInsight-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}" + ] + } + } + }, + { + "name": "lastSharedMethod-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}/lastSharedMethod", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}", + "lastSharedMethod" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}/lastSharedMethod/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}", + "lastSharedMethod", + "$ref" + ] + } + } + }, + { + "name": "$ref-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}/lastSharedMethod/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}", + "lastSharedMethod", + "$ref" + ] + } + } + }, + { + "name": "$ref-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}/lastSharedMethod/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}", + "lastSharedMethod", + "$ref" + ] + } + } + }, + { + "name": "resource-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}/resource", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}", + "resource" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}/resource/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}", + "resource", + "$ref" + ] + } + } + }, + { + "name": "$ref-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}/resource/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}", + "resource", + "$ref" + ] + } + } + }, + { + "name": "$ref-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/shared/{sharedInsight-id}/resource/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "shared", + "{sharedInsight-id}", + "resource", + "$ref" + ] + } + } + }, + { + "name": "trending-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/trending", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "trending" + ] + } + } + }, + { + "name": "trending-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/trending", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "trending" + ] + } + } + }, + { + "name": "{trending-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/trending/{trending-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "trending", + "{trending-id}" + ] + } + } + }, + { + "name": "{trending-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/trending/{trending-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "trending", + "{trending-id}" + ] + } + } + }, + { + "name": "{trending-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/trending/{trending-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "trending", + "{trending-id}" + ] + } + } + }, + { + "name": "resource-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/trending/{trending-id}/resource", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "trending", + "{trending-id}", + "resource" + ] + } + } + }, + { + "name": "used-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/used", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "used" + ] + } + } + }, + { + "name": "used-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/used", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "used" + ] + } + } + }, + { + "name": "{usedInsight-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/used/{usedInsight-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "used", + "{usedInsight-id}" + ] + } + } + }, + { + "name": "{usedInsight-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/used/{usedInsight-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "used", + "{usedInsight-id}" + ] + } + } + }, + { + "name": "{usedInsight-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/used/{usedInsight-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "used", + "{usedInsight-id}" + ] + } + } + }, + { + "name": "resource-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/insights/used/{usedInsight-id}/resource", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "insights", + "used", + "{usedInsight-id}", + "resource" + ] + } + } + }, + { + "name": "joinedTeams-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/joinedTeams", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "joinedTeams" + ] + } + } + }, + { + "name": "joinedTeams-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/joinedTeams", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "joinedTeams" + ] + } + } + }, + { + "name": "{team-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/joinedTeams/{team-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "joinedTeams", + "{team-id}" + ] + } + } + }, + { + "name": "{team-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/joinedTeams/{team-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "joinedTeams", + "{team-id}" + ] + } + } + }, + { + "name": "{team-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/joinedTeams/{team-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "joinedTeams", + "{team-id}" + ] + } + } + }, + { + "name": "licenseDetails-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/licenseDetails", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "licenseDetails" + ] + } + } + }, + { + "name": "licenseDetails-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/licenseDetails", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "licenseDetails" + ] + } + } + }, + { + "name": "{licenseDetails-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/licenseDetails/{licenseDetails-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "licenseDetails", + "{licenseDetails-id}" + ] + } + } + }, + { + "name": "{licenseDetails-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/licenseDetails/{licenseDetails-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "licenseDetails", + "{licenseDetails-id}" + ] + } + } + }, + { + "name": "{licenseDetails-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/licenseDetails/{licenseDetails-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "licenseDetails", + "{licenseDetails-id}" + ] + } + } + }, + { + "name": "mailFolders-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders" + ] + } + } + }, + { + "name": "mailFolders-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders" + ] + } + } + }, + { + "name": "{mailFolder-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}" + ] + } + } + }, + { + "name": "{mailFolder-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}" + ] + } + } + }, + { + "name": "{mailFolder-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}" + ] + } + } + }, + { + "name": "childFolders-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/childFolders", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "childFolders" + ] + } + } + }, + { + "name": "childFolders-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/childFolders", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "childFolders" + ] + } + } + }, + { + "name": "{mailFolder-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/childFolders/{mailFolder-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "childFolders", + "{mailFolder-id1}" + ] + } + } + }, + { + "name": "{mailFolder-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/childFolders/{mailFolder-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "childFolders", + "{mailFolder-id1}" + ] + } + } + }, + { + "name": "{mailFolder-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/childFolders/{mailFolder-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "childFolders", + "{mailFolder-id1}" + ] + } + } + }, + { + "name": "messageRules-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messageRules", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messageRules" + ] + } + } + }, + { + "name": "messageRules-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messageRules", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messageRules" + ] + } + } + }, + { + "name": "{messageRule-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messageRules/{messageRule-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messageRules", + "{messageRule-id}" + ] + } + } + }, + { + "name": "{messageRule-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messageRules/{messageRule-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messageRules", + "{messageRule-id}" + ] + } + } + }, + { + "name": "{messageRule-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messageRules/{messageRule-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messageRules", + "{messageRule-id}" + ] + } + } + }, + { + "name": "messages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages" + ] + } + } + }, + { + "name": "messages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages" + ] + } + } + }, + { + "name": "{message-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}" + ] + } + } + }, + { + "name": "{message-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}" + ] + } + } + }, + { + "name": "{message-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}" + ] + } + } + }, + { + "name": "$value-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "$value" + ] + } + } + }, + { + "name": "$value-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "$value" + ] + } + } + }, + { + "name": "attachments-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "attachments" + ] + } + } + }, + { + "name": "attachments-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "attachments" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "extensions" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/messages/{message-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "messages", + "{message-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/mailFolders/{mailFolder-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "mailFolders", + "{mailFolder-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "managedAppRegistrations-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedAppRegistrations", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedAppRegistrations" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedAppRegistrations/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedAppRegistrations", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedAppRegistrations/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedAppRegistrations", + "$ref" + ] + } + } + }, + { + "name": "managedDevices-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices" + ] + } + } + }, + { + "name": "managedDevices-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices" + ] + } + } + }, + { + "name": "{managedDevice-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}" + ] + } + } + }, + { + "name": "{managedDevice-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}" + ] + } + } + }, + { + "name": "{managedDevice-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}" + ] + } + } + }, + { + "name": "deviceCategory-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceCategory", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceCategory" + ] + } + } + }, + { + "name": "deviceCategory-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceCategory", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceCategory" + ] + } + } + }, + { + "name": "deviceCategory-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceCategory", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceCategory" + ] + } + } + }, + { + "name": "deviceCompliancePolicyStates-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceCompliancePolicyStates", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceCompliancePolicyStates" + ] + } + } + }, + { + "name": "deviceCompliancePolicyStates-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceCompliancePolicyStates", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceCompliancePolicyStates" + ] + } + } + }, + { + "name": "{deviceCompliancePolicyState-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceCompliancePolicyStates/{deviceCompliancePolicyState-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceCompliancePolicyStates", + "{deviceCompliancePolicyState-id}" + ] + } + } + }, + { + "name": "{deviceCompliancePolicyState-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceCompliancePolicyStates/{deviceCompliancePolicyState-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceCompliancePolicyStates", + "{deviceCompliancePolicyState-id}" + ] + } + } + }, + { + "name": "{deviceCompliancePolicyState-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceCompliancePolicyStates/{deviceCompliancePolicyState-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceCompliancePolicyStates", + "{deviceCompliancePolicyState-id}" + ] + } + } + }, + { + "name": "deviceConfigurationStates-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceConfigurationStates", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceConfigurationStates" + ] + } + } + }, + { + "name": "deviceConfigurationStates-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceConfigurationStates", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceConfigurationStates" + ] + } + } + }, + { + "name": "{deviceConfigurationState-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceConfigurationStates/{deviceConfigurationState-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceConfigurationStates", + "{deviceConfigurationState-id}" + ] + } + } + }, + { + "name": "{deviceConfigurationState-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceConfigurationStates/{deviceConfigurationState-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceConfigurationStates", + "{deviceConfigurationState-id}" + ] + } + } + }, + { + "name": "{deviceConfigurationState-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/managedDevices/{managedDevice-id}/deviceConfigurationStates/{deviceConfigurationState-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "managedDevices", + "{managedDevice-id}", + "deviceConfigurationStates", + "{deviceConfigurationState-id}" + ] + } + } + }, + { + "name": "manager-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/manager", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "manager" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/manager/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "manager", + "$ref" + ] + } + } + }, + { + "name": "$ref-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/manager/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "manager", + "$ref" + ] + } + } + }, + { + "name": "$ref-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/manager/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "manager", + "$ref" + ] + } + } + }, + { + "name": "memberOf-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/memberOf", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "memberOf" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/memberOf/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "memberOf", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/memberOf/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "memberOf", + "$ref" + ] + } + } + }, + { + "name": "messages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages" + ] + } + } + }, + { + "name": "messages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages" + ] + } + } + }, + { + "name": "{message-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}" + ] + } + } + }, + { + "name": "{message-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}" + ] + } + } + }, + { + "name": "{message-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}" + ] + } + } + }, + { + "name": "$value-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "$value" + ] + } + } + }, + { + "name": "$value-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "$value" + ] + } + } + }, + { + "name": "attachments-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "attachments" + ] + } + } + }, + { + "name": "attachments-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "attachments" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "extensions" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "multiValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/multiValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "multiValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "singleValueExtendedProperties-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/singleValueExtendedProperties", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "messages", + "{message-id}", + "singleValueExtendedProperties" + ] + } + } + }, + { + "name": "oauth2PermissionGrants-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/oauth2PermissionGrants", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "oauth2PermissionGrants" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/oauth2PermissionGrants/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "oauth2PermissionGrants", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/oauth2PermissionGrants/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "oauth2PermissionGrants", + "$ref" + ] + } + } + }, + { + "name": "onenote-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote" + ] + } + } + }, + { + "name": "onenote-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote" + ] + } + } + }, + { + "name": "onenote-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote" + ] + } + } + }, + { + "name": "notebooks-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks" + ] + } + } + }, + { + "name": "notebooks-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks" + ] + } + } + }, + { + "name": "{notebook-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}" + ] + } + } + }, + { + "name": "{notebook-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}" + ] + } + } + }, + { + "name": "{notebook-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "pages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "pages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "{onenotePage-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSection-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "pages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "pages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "{onenotePage-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSection-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/notebooks/{notebook-id}/sections/{onenoteSection-id}/parentSectionGroup/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "notebooks", + "{notebook-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "operations-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/operations", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "operations" + ] + } + } + }, + { + "name": "operations-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/operations", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "operations" + ] + } + } + }, + { + "name": "{onenoteOperation-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/operations/{onenoteOperation-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "operations", + "{onenoteOperation-id}" + ] + } + } + }, + { + "name": "{onenoteOperation-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/operations/{onenoteOperation-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "operations", + "{onenoteOperation-id}" + ] + } + } + }, + { + "name": "{onenoteOperation-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/operations/{onenoteOperation-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "operations", + "{onenoteOperation-id}" + ] + } + } + }, + { + "name": "pages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages" + ] + } + } + }, + { + "name": "pages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages" + ] + } + } + }, + { + "name": "{onenotePage-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "pages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "pages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "{onenotePage-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "{onenotePage-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "{onenotePage-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id1}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id1}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}", + "content" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "pages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "pages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "{onenotePage-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "{onenotePage-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "{onenotePage-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id1}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id1}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id1}", + "content" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id}/parentSectionGroup/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "parentSection-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "pages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "pages" + ] + } + } + }, + { + "name": "pages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "pages" + ] + } + } + }, + { + "name": "{onenotePage-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "{onenotePage-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "{onenotePage-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/pages/{onenotePage-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "pages", + "{onenotePage-id1}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/pages/{onenotePage-id1}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "pages", + "{onenotePage-id1}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/pages/{onenotePage-id1}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "pages", + "{onenotePage-id1}", + "content" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentNotebook/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentNotebook", + "sections" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentNotebook/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentNotebook", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentNotebook/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentNotebook", + "sectionGroups" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentNotebook/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentNotebook", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentNotebook/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentNotebook", + "sections" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "sectionGroups" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{onenotePage-id}/parentSection/parentSectionGroup/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "pages", + "{onenotePage-id}", + "parentSection", + "parentSectionGroup", + "sections" + ] + } + } + }, + { + "name": "resources-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/resources", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "resources" + ] + } + } + }, + { + "name": "resources-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/resources", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "resources" + ] + } + } + }, + { + "name": "{onenoteResource-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/resources/{onenoteResource-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "resources", + "{onenoteResource-id}" + ] + } + } + }, + { + "name": "{onenoteResource-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/resources/{onenoteResource-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "resources", + "{onenoteResource-id}" + ] + } + } + }, + { + "name": "{onenoteResource-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/resources/{onenoteResource-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "resources", + "{onenoteResource-id}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/resources/{onenoteResource-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "resources", + "{onenoteResource-id}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/resources/{onenoteResource-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "resources", + "{onenoteResource-id}", + "content" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "{sectionGroup-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{onenotePage-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSection-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentNotebook/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "{sectionGroup-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id1}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sectionGroups/{sectionGroup-id}/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sectionGroups", + "{sectionGroup-id}", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections" + ] + } + } + }, + { + "name": "{onenoteSection-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "{onenoteSection-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}" + ] + } + } + }, + { + "name": "pages-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "pages-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages" + ] + } + } + }, + { + "name": "{onenotePage-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "{onenotePage-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}" + ] + } + } + }, + { + "name": "content-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "content-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "content" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sectionGroups" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentNotebook/sectionGroups/{sectionGroup-id}/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentNotebook", + "sectionGroups", + "{sectionGroup-id}", + "sections" + ] + } + } + }, + { + "name": "parentSection-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentSection-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/pages/{onenotePage-id}/parentSection", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "pages", + "{onenotePage-id}", + "parentSection" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentNotebook" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentNotebook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "parentNotebook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "{onenoteSection-id1}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentNotebook/sections/{onenoteSection-id1}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentNotebook", + "sections", + "{onenoteSection-id1}" + ] + } + } + }, + { + "name": "parentSectionGroup-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "parentSectionGroup-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/parentSectionGroup", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "parentSectionGroup" + ] + } + } + }, + { + "name": "sectionGroups-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups" + ] + } + } + }, + { + "name": "sectionGroups-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/sectionGroups", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sectionGroups" + ] + } + } + }, + { + "name": "sections-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections" + ] + } + } + }, + { + "name": "sections-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onenote/sections/{onenoteSection-id}/parentSectionGroup/sections", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onenote", + "sections", + "{onenoteSection-id}", + "parentSectionGroup", + "sections" + ] + } + } + }, + { + "name": "onlineMeetings-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onlineMeetings", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onlineMeetings" + ] + } + } + }, + { + "name": "onlineMeetings-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onlineMeetings", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onlineMeetings" + ] + } + } + }, + { + "name": "{onlineMeeting-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onlineMeetings/{onlineMeeting-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onlineMeetings", + "{onlineMeeting-id}" + ] + } + } + }, + { + "name": "{onlineMeeting-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onlineMeetings/{onlineMeeting-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onlineMeetings", + "{onlineMeeting-id}" + ] + } + } + }, + { + "name": "{onlineMeeting-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onlineMeetings/{onlineMeeting-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onlineMeetings", + "{onlineMeeting-id}" + ] + } + } + }, + { + "name": "attendeeReport-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onlineMeetings/{onlineMeeting-id}/attendeeReport", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onlineMeetings", + "{onlineMeeting-id}", + "attendeeReport" + ] + } + } + }, + { + "name": "attendeeReport-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/onlineMeetings/{onlineMeeting-id}/attendeeReport", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "onlineMeetings", + "{onlineMeeting-id}", + "attendeeReport" + ] + } + } + }, + { + "name": "outlook-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/outlook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "outlook" + ] + } + } + }, + { + "name": "outlook-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/outlook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "outlook" + ] + } + } + }, + { + "name": "outlook-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/outlook", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "outlook" + ] + } + } + }, + { + "name": "masterCategories-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/outlook/masterCategories", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "outlook", + "masterCategories" + ] + } + } + }, + { + "name": "masterCategories-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/outlook/masterCategories", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "outlook", + "masterCategories" + ] + } + } + }, + { + "name": "{outlookCategory-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/outlook/masterCategories/{outlookCategory-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "outlook", + "masterCategories", + "{outlookCategory-id}" + ] + } + } + }, + { + "name": "{outlookCategory-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/outlook/masterCategories/{outlookCategory-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "outlook", + "masterCategories", + "{outlookCategory-id}" + ] + } + } + }, + { + "name": "{outlookCategory-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/outlook/masterCategories/{outlookCategory-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "outlook", + "masterCategories", + "{outlookCategory-id}" + ] + } + } + }, + { + "name": "ownedDevices-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/ownedDevices", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "ownedDevices" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/ownedDevices/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "ownedDevices", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/ownedDevices/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "ownedDevices", + "$ref" + ] + } + } + }, + { + "name": "ownedObjects-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/ownedObjects", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "ownedObjects" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/ownedObjects/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "ownedObjects", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/ownedObjects/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "ownedObjects", + "$ref" + ] + } + } + }, + { + "name": "people-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/people", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "people" + ] + } + } + }, + { + "name": "people-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/people", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "people" + ] + } + } + }, + { + "name": "{person-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/people/{person-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "people", + "{person-id}" + ] + } + } + }, + { + "name": "{person-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/people/{person-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "people", + "{person-id}" + ] + } + } + }, + { + "name": "{person-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/people/{person-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "people", + "{person-id}" + ] + } + } + }, + { + "name": "photo-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photo" + ] + } + } + }, + { + "name": "photo-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photo" + ] + } + } + }, + { + "name": "photo-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photo" + ] + } + } + }, + { + "name": "$value-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photo/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photo", + "$value" + ] + } + } + }, + { + "name": "$value-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photo/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photo", + "$value" + ] + } + } + }, + { + "name": "photos-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photos", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photos" + ] + } + } + }, + { + "name": "photos-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photos", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photos" + ] + } + } + }, + { + "name": "{profilePhoto-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photos/{profilePhoto-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photos", + "{profilePhoto-id}" + ] + } + } + }, + { + "name": "{profilePhoto-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photos/{profilePhoto-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photos", + "{profilePhoto-id}" + ] + } + } + }, + { + "name": "{profilePhoto-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photos/{profilePhoto-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photos", + "{profilePhoto-id}" + ] + } + } + }, + { + "name": "$value-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photos/{profilePhoto-id}/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photos", + "{profilePhoto-id}", + "$value" + ] + } + } + }, + { + "name": "$value-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/photos/{profilePhoto-id}/$value", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "photos", + "{profilePhoto-id}", + "$value" + ] + } + } + }, + { + "name": "planner-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner" + ] + } + } + }, + { + "name": "planner-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner" + ] + } + } + }, + { + "name": "planner-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner" + ] + } + } + }, + { + "name": "plans-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans" + ] + } + } + }, + { + "name": "plans-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans" + ] + } + } + }, + { + "name": "{plannerPlan-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}" + ] + } + } + }, + { + "name": "{plannerPlan-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}" + ] + } + } + }, + { + "name": "{plannerPlan-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}" + ] + } + } + }, + { + "name": "buckets-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets" + ] + } + } + }, + { + "name": "buckets-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets" + ] + } + } + }, + { + "name": "{plannerBucket-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}" + ] + } + } + }, + { + "name": "{plannerBucket-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}" + ] + } + } + }, + { + "name": "{plannerBucket-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}" + ] + } + } + }, + { + "name": "tasks-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks" + ] + } + } + }, + { + "name": "tasks-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks" + ] + } + } + }, + { + "name": "{plannerTask-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "{plannerTask-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "{plannerTask-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "details-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "details-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "details-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/buckets/{plannerBucket-id}/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "buckets", + "{plannerBucket-id}", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "details-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "details" + ] + } + } + }, + { + "name": "details-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "details" + ] + } + } + }, + { + "name": "details-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "details" + ] + } + } + }, + { + "name": "tasks-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks" + ] + } + } + }, + { + "name": "tasks-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks" + ] + } + } + }, + { + "name": "{plannerTask-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "{plannerTask-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "{plannerTask-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "details-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "details-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "details-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/plans/{plannerPlan-id}/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "plans", + "{plannerPlan-id}", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "tasks-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks" + ] + } + } + }, + { + "name": "tasks-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks" + ] + } + } + }, + { + "name": "{plannerTask-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "{plannerTask-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "{plannerTask-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "assignedToTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/assignedToTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "assignedToTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "bucketTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/bucketTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "bucketTaskBoardFormat" + ] + } + } + }, + { + "name": "details-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "details-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "details-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/details", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "details" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "progressTaskBoardFormat-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/planner/tasks/{plannerTask-id}/progressTaskBoardFormat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "planner", + "tasks", + "{plannerTask-id}", + "progressTaskBoardFormat" + ] + } + } + }, + { + "name": "presence-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/presence", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "presence" + ] + } + } + }, + { + "name": "presence-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/presence", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "presence" + ] + } + } + }, + { + "name": "presence-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/presence", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "presence" + ] + } + } + }, + { + "name": "registeredDevices-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/registeredDevices", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "registeredDevices" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/registeredDevices/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "registeredDevices", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/registeredDevices/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "registeredDevices", + "$ref" + ] + } + } + }, + { + "name": "scopedRoleMemberOf-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/scopedRoleMemberOf", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "scopedRoleMemberOf" + ] + } + } + }, + { + "name": "scopedRoleMemberOf-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/scopedRoleMemberOf", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "scopedRoleMemberOf" + ] + } + } + }, + { + "name": "{scopedRoleMembership-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/scopedRoleMemberOf/{scopedRoleMembership-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "scopedRoleMemberOf", + "{scopedRoleMembership-id}" + ] + } + } + }, + { + "name": "{scopedRoleMembership-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/scopedRoleMemberOf/{scopedRoleMembership-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "scopedRoleMemberOf", + "{scopedRoleMembership-id}" + ] + } + } + }, + { + "name": "{scopedRoleMembership-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/scopedRoleMemberOf/{scopedRoleMembership-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "scopedRoleMemberOf", + "{scopedRoleMembership-id}" + ] + } + } + }, + { + "name": "settings-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/settings", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "settings" + ] + } + } + }, + { + "name": "settings-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/settings", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "settings" + ] + } + } + }, + { + "name": "settings-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/settings", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "settings" + ] + } + } + }, + { + "name": "shiftPreferences-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/settings/shiftPreferences", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "settings", + "shiftPreferences" + ] + } + } + }, + { + "name": "shiftPreferences-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/settings/shiftPreferences", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "settings", + "shiftPreferences" + ] + } + } + }, + { + "name": "shiftPreferences-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/settings/shiftPreferences", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "settings", + "shiftPreferences" + ] + } + } + }, + { + "name": "teamwork-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork" + ] + } + } + }, + { + "name": "teamwork-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork" + ] + } + } + }, + { + "name": "teamwork-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork" + ] + } + } + }, + { + "name": "installedApps-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps" + ] + } + } + }, + { + "name": "installedApps-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps" + ] + } + } + }, + { + "name": "{userScopeTeamsAppInstallation-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps/{userScopeTeamsAppInstallation-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps", + "{userScopeTeamsAppInstallation-id}" + ] + } + } + }, + { + "name": "{userScopeTeamsAppInstallation-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps/{userScopeTeamsAppInstallation-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps", + "{userScopeTeamsAppInstallation-id}" + ] + } + } + }, + { + "name": "{userScopeTeamsAppInstallation-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps/{userScopeTeamsAppInstallation-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps", + "{userScopeTeamsAppInstallation-id}" + ] + } + } + }, + { + "name": "chat-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps/{userScopeTeamsAppInstallation-id}/chat", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps", + "{userScopeTeamsAppInstallation-id}", + "chat" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps/{userScopeTeamsAppInstallation-id}/chat/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps", + "{userScopeTeamsAppInstallation-id}", + "chat", + "$ref" + ] + } + } + }, + { + "name": "$ref-PUT", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps/{userScopeTeamsAppInstallation-id}/chat/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps", + "{userScopeTeamsAppInstallation-id}", + "chat", + "$ref" + ] + } + } + }, + { + "name": "$ref-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps/{userScopeTeamsAppInstallation-id}/chat/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "teamwork", + "installedApps", + "{userScopeTeamsAppInstallation-id}", + "chat", + "$ref" + ] + } + } + }, + { + "name": "todo-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo" + ] + } + } + }, + { + "name": "todo-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo" + ] + } + } + }, + { + "name": "todo-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo" + ] + } + } + }, + { + "name": "lists-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists" + ] + } + } + }, + { + "name": "lists-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists" + ] + } + } + }, + { + "name": "{todoTaskList-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}" + ] + } + } + }, + { + "name": "{todoTaskList-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}" + ] + } + } + }, + { + "name": "{todoTaskList-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "extensions" + ] + } + } + }, + { + "name": "tasks-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks" + ] + } + } + }, + { + "name": "tasks-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks" + ] + } + } + }, + { + "name": "{todoTask-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}" + ] + } + } + }, + { + "name": "{todoTask-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}" + ] + } + } + }, + { + "name": "{todoTask-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}" + ] + } + } + }, + { + "name": "extensions-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "extensions" + ] + } + } + }, + { + "name": "extensions-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/extensions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "extensions" + ] + } + } + }, + { + "name": "{extension-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "{extension-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/extensions/{extension-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "extensions", + "{extension-id}" + ] + } + } + }, + { + "name": "linkedResources-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/linkedResources", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "linkedResources" + ] + } + } + }, + { + "name": "linkedResources-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/linkedResources", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "linkedResources" + ] + } + } + }, + { + "name": "{linkedResource-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/linkedResources/{linkedResource-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "linkedResources", + "{linkedResource-id}" + ] + } + } + }, + { + "name": "{linkedResource-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/linkedResources/{linkedResource-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "linkedResources", + "{linkedResource-id}" + ] + } + } + }, + { + "name": "{linkedResource-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/todo/lists/{todoTaskList-id}/tasks/{todoTask-id}/linkedResources/{linkedResource-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "todo", + "lists", + "{todoTaskList-id}", + "tasks", + "{todoTask-id}", + "linkedResources", + "{linkedResource-id}" + ] + } + } + }, + { + "name": "transitiveMemberOf-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/transitiveMemberOf", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "transitiveMemberOf" + ] + } + } + }, + { + "name": "$ref-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/transitiveMemberOf/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "transitiveMemberOf", + "$ref" + ] + } + } + }, + { + "name": "$ref-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}/transitiveMemberOf/$ref", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}", + "transitiveMemberOf", + "$ref" + ] + } + } + } + ] +} \ No newline at end of file diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver3.json b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver3.json new file mode 100644 index 00000000..2c7637ed --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver3.json @@ -0,0 +1,1382 @@ +{ + "info": { + "_postman_id": "6281bdba-62b8-2276-a5d6-268e87f48c89", + "name": "Graph-Collection", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "admin", + "item": [ + { + "name": "/admin", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin" + ] + } + } + }, + { + "name": "/admin", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}", + "issues" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}", + "issues" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues/{serviceHealthIssue-id}", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues/{serviceHealthIssue-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}", + "issues", + "{serviceHealthIssue-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues/{serviceHealthIssue-id}", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues/{serviceHealthIssue-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}", + "issues", + "{serviceHealthIssue-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues/{serviceHealthIssue-id}", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues/{serviceHealthIssue-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}", + "issues", + "{serviceHealthIssue-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues/{serviceHealthIssue-id}/microsoft.graph.incidentReport()", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/healthOverviews/{serviceHealth-id}/issues/{serviceHealthIssue-id}/microsoft.graph.incidentReport()", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "healthOverviews", + "{serviceHealth-id}", + "issues", + "{serviceHealthIssue-id}", + "microsoft.graph.incidentReport()" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/issues", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "issues" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/issues", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "issues" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/issues/{serviceHealthIssue-id}", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues/{serviceHealthIssue-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "issues", + "{serviceHealthIssue-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/issues/{serviceHealthIssue-id}", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues/{serviceHealthIssue-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "issues", + "{serviceHealthIssue-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/issues/{serviceHealthIssue-id}", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues/{serviceHealthIssue-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "issues", + "{serviceHealthIssue-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/issues/{serviceHealthIssue-id}/microsoft.graph.incidentReport()", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/issues/{serviceHealthIssue-id}/microsoft.graph.incidentReport()", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "issues", + "{serviceHealthIssue-id}", + "microsoft.graph.incidentReport()" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/microsoft.graph.archive", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/microsoft.graph.archive", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "microsoft.graph.archive" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/microsoft.graph.favorite", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/microsoft.graph.favorite", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "microsoft.graph.favorite" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/microsoft.graph.markRead", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/microsoft.graph.markRead", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "microsoft.graph.markRead" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/microsoft.graph.markUnread", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/microsoft.graph.markUnread", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "microsoft.graph.markUnread" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/microsoft.graph.unarchive", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/microsoft.graph.unarchive", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "microsoft.graph.unarchive" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/microsoft.graph.unfavorite", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/microsoft.graph.unfavorite", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "microsoft.graph.unfavorite" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachments" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachments" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachments", + "{serviceAnnouncementAttachment-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachments", + "{serviceAnnouncementAttachment-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachments", + "{serviceAnnouncementAttachment-id}" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}/content", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachments", + "{serviceAnnouncementAttachment-id}", + "content" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}/content", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachments/{serviceAnnouncementAttachment-id}/content", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachments", + "{serviceAnnouncementAttachment-id}", + "content" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachmentsArchive", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachmentsArchive", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachmentsArchive" + ] + } + } + }, + { + "name": "/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachmentsArchive", + "request": { + "method": "PUT", + "url": { + "raw": "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages/{serviceUpdateMessage-id}/attachmentsArchive", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "admin", + "serviceAnnouncement", + "messages", + "{serviceUpdateMessage-id}", + "attachmentsArchive" + ] + } + } + } + ] + }, + { + "name": "agreementAcceptances", + "item": [ + { + "name": "/agreementAcceptances", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "agreementAcceptances" + ] + } + } + }, + { + "name": "/agreementAcceptances", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "agreementAcceptances" + ] + } + } + }, + { + "name": "/agreementAcceptances/{agreementAcceptance-id}", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances/{agreementAcceptance-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "agreementAcceptances", + "{agreementAcceptance-id}" + ] + } + } + }, + { + "name": "/agreementAcceptances/{agreementAcceptance-id}", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances/{agreementAcceptance-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "agreementAcceptances", + "{agreementAcceptance-id}" + ] + } + } + }, + { + "name": "/agreementAcceptances/{agreementAcceptance-id}", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances/{agreementAcceptance-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "agreementAcceptances", + "{agreementAcceptance-id}" + ] + } + } + } + ] + }, + { + "name": "appCatalogs", + "item": [ + { + "name": "/appCatalogs", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs" + ] + } + } + }, + { + "name": "/appCatalogs", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}", + "appDefinitions" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}", + "appDefinitions" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}", + "appDefinitions", + "{teamsAppDefinition-id}" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}", + "appDefinitions", + "{teamsAppDefinition-id}" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}", + "appDefinitions", + "{teamsAppDefinition-id}" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}/bot", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}/bot", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}", + "appDefinitions", + "{teamsAppDefinition-id}", + "bot" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}/bot", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}/bot", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}", + "appDefinitions", + "{teamsAppDefinition-id}", + "bot" + ] + } + } + }, + { + "name": "/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}/bot", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/{teamsApp-id}/appDefinitions/{teamsAppDefinition-id}/bot", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs", + "teamsApps", + "{teamsApp-id}", + "appDefinitions", + "{teamsAppDefinition-id}", + "bot" + ] + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver4.json b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver4.json new file mode 100644 index 00000000..edafeb0b --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/postmanCollection_ver4.json @@ -0,0 +1,145 @@ +{ + "info": { + "_postman_id": "43402ca3-f018-7c9b-2315-f176d9b171a3", + "name": "Graph-Collection", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "users-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users" + ] + } + } + }, + { + "name": "users-POST", + "request": { + "method": "POST", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users" + ] + } + } + }, + { + "name": "/appCatalogs", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/appCatalogs", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "appCatalogs" + ] + } + } + }, + { + "name": "/agreementAcceptances", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/agreementAcceptances", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "agreementAcceptances" + ] + } + } + }, + { + "name": "{user-id}-GET", + "request": { + "method": "GET", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}" + ] + } + } + }, + { + "name": "{user-id}-PATCH", + "request": { + "method": "PATCH", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}" + ] + } + } + }, + { + "name": "{user-id}-DELETE", + "request": { + "method": "DELETE", + "url": { + "raw": "https://graph.microsoft.com/v1.0/users/{user-id}", + "protocol": "https", + "host": [ + "graph", + "microsoft", + "com" + ], + "path": [ + "v1.0", + "users", + "{user-id}" + ] + } + } + } + ] +} \ No newline at end of file From b60e0fc91d48a00a7c9a599a0864c16ae97e7d9c Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 7 Jul 2022 18:43:39 +0300 Subject: [PATCH 144/720] Use else if() clause --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 934b00cd..d9f9887e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -581,7 +581,7 @@ private static string GetInputPathExtension(string openapi = null, string csdl = { extension = Path.GetExtension(openapi); } - if (!string.IsNullOrEmpty(csdl)) + else if (!string.IsNullOrEmpty(csdl)) { extension = ".yml"; } From 6d9172a398937452de04f9f746413f5eba83a410 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 7 Jul 2022 18:45:31 +0300 Subject: [PATCH 145/720] Upgrade dependencies --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index d179b0f5..fb6eaecc 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -9,10 +9,10 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all From dcf8fec7c4dadc3fe566563d4998f6231e55886f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 8 Jul 2022 12:13:50 -0400 Subject: [PATCH 146/720] - bumps hidi version and reference to conversion lib Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cee48404..1cb71a20 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview7 + 1.0.0-preview8 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET @@ -43,7 +43,7 @@ - + From 5c03668bd102074280a4fbd972d3384636f6b618 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 9 Jul 2022 18:44:59 +1000 Subject: [PATCH 147/720] remove duplicate SourceLink --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1cb71a20..b6b0292c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -51,8 +51,4 @@ - - - - From ad443c1ce14dfd513580e84c2b772c26b444f62c Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 14 Jul 2022 16:59:15 +0300 Subject: [PATCH 148/720] Adds test for retrieving path parameters --- .../Services/OpenApiFilterServiceTests.cs | 19 +++++++++++- .../UtilityFiles/OpenApiDocumentMock.cs | 30 ++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 29cb684d..176fb20d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -135,5 +135,22 @@ public void ThrowsInvalidOperationExceptionInCreatePredicateWhenInvalidArguments var message2 = Assert.Throws(() => OpenApiFilterService.CreatePredicate("users.user.ListUser", "users.user")).Message; Assert.Equal("Cannot specify both operationIds and tags at the same time.", message2); } + + [Theory] + [InlineData("reports.getTeamsUserActivityUserDetail-a3f1", null)] + [InlineData(null, "reports.Functions")] + public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string operationIds, string tags) + { + // Act + var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); + var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(_openApiDocumentMock, predicate); + + // Assert + foreach (var pathItem in subsetOpenApiDocument.Paths) + { + Assert.True(pathItem.Value.Parameters.Any()); + Assert.Equal(1, pathItem.Value.Parameters.Count); + } + } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index d21fccb9..58b85d91 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -116,6 +116,21 @@ public static OpenApiDocument CreateOpenApiDocument() } } } + }, + Parameters = new List + { + { + new OpenApiParameter() + { + Name = "period", + In = ParameterLocation.Path, + Required = true, + Schema = new OpenApiSchema() + { + Type = "string" + } + } + } } }, ["/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"] = new OpenApiPathItem() @@ -175,7 +190,20 @@ public static OpenApiDocument CreateOpenApiDocument() } } } - } + }, + Parameters = new List + { + new OpenApiParameter + { + Name = "period", + In = ParameterLocation.Path, + Required = true, + Schema = new OpenApiSchema() + { + Type = "string" + } + } + } }, ["/users"] = new OpenApiPathItem() { From bfc02afe7ea009d3410e2bff352084bba6b8d604 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Jul 2022 21:41:14 +0000 Subject: [PATCH 149/720] Bump Microsoft.OpenApi.OData from 1.0.11-preview5 to 1.0.11 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.0.11-preview5 to 1.0.11. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b6b0292c..0eefee6d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 52f2cd14fbf597456f9b985ac9b4203f794a43e9 Mon Sep 17 00:00:00 2001 From: Andrew Omondi Date: Tue, 19 Jul 2022 11:12:29 +0300 Subject: [PATCH 150/720] Bumps Hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 0eefee6d..cb67b121 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview8 + 1.0.0-preview9 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From bed543704a44255f0b16d235940551b261e1d989 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Jul 2022 21:23:33 +0000 Subject: [PATCH 151/720] Bump Microsoft.OData.Edm from 7.12.0 to 7.12.1 Bumps Microsoft.OData.Edm from 7.12.0 to 7.12.1. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cb67b121..f9e1f0d9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From 710e60e8269c512ed25029dc015d7be08807bc1d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 1 Aug 2022 10:45:28 +0300 Subject: [PATCH 152/720] Bumps up System.Commandline API to v2.0.0-beta4.22272.1 and resolve breaking change --- .../Handlers/TransformCommandHandler.cs | 73 +++++++++++++++++++ .../Handlers/ValidateCommandHandler.cs | 49 +++++++++++++ .../Microsoft.OpenApi.Hidi.csproj | 14 ++-- src/Microsoft.OpenApi.Hidi/Program.cs | 28 +++++-- 4 files changed, 152 insertions(+), 12 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs create mode 100644 src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs new file mode 100644 index 00000000..8123f462 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.CommandLine; +using System.CommandLine.Invocation; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; + +namespace Microsoft.OpenApi.Hidi.Handlers +{ + internal class TransformCommandHandler : ICommandHandler + { + public Option DescriptionOption { get; set; } + public Option CsdlOption { get; set; } + public Option CsdlFilterOption { get; set; } + public Option OutputOption { get; set; } + public Option CleanOutputOption { get; set; } + public Option VersionOption { get; set; } + public Option FormatOption { get; set; } + public Option TerseOutputOption { get; set; } + public Option LogLevelOption { get; set; } + public Option FilterByOperationIdsOption { get; set; } + public Option FilterByTagsOption { get; set; } + public Option FilterByCollectionOption { get; set; } + public Option InlineLocalOption { get; set; } + public Option InlineExternalOption { get; set; } + + public int Invoke(InvocationContext context) + { + return InvokeAsync(context).GetAwaiter().GetResult(); + } + public async Task InvokeAsync(InvocationContext context) + { + string openapi = context.ParseResult.GetValueForOption(DescriptionOption); + string csdlFilter = context.ParseResult.GetValueForOption(CsdlFilterOption); + string csdl = context.ParseResult.GetValueForOption(CsdlOption); + FileInfo output = context.ParseResult.GetValueForOption(OutputOption); + bool cleanOutput = context.ParseResult.GetValueForOption(CleanOutputOption); + string? version = context.ParseResult.GetValueForOption(VersionOption); + OpenApiFormat? format = context.ParseResult.GetValueForOption(FormatOption); + bool terseOutput = context.ParseResult.GetValueForOption(TerseOutputOption); + LogLevel logLevel = context.ParseResult.GetValueForOption(LogLevelOption); + bool inlineLocal = context.ParseResult.GetValueForOption(InlineLocalOption); + bool inlineExternal = context.ParseResult.GetValueForOption(InlineExternalOption); + string filterbyoperationids = context.ParseResult.GetValueForOption(FilterByOperationIdsOption); + string filterbytags = context.ParseResult.GetValueForOption(FilterByTagsOption); + string filterbycollection = context.ParseResult.GetValueForOption(FilterByCollectionOption); + CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); + + var logger = Logger.ConfigureLogger(logLevel); + + try + { + await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, format, terseOutput, logLevel, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, cancellationToken); + + return 0; + } + catch (Exception ex) + { +#if DEBUG + logger.LogCritical(ex, ex.Message); + throw; // so debug tools go straight to the source of the exception when attached +#else + logger.LogCritical( ex.Message); + return 1; +#endif + } + } + } +} diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs new file mode 100644 index 00000000..84ffcc12 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.CommandLine; +using System.CommandLine.Invocation; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; + +namespace Microsoft.OpenApi.Hidi.Handlers +{ + internal class ValidateCommandHandler : ICommandHandler + { + public Option DescriptionOption { get; set; } + public Option LogLevelOption { get; set; } + + public int Invoke(InvocationContext context) + { + return InvokeAsync(context).GetAwaiter().GetResult(); + } + public async Task InvokeAsync(InvocationContext context) + { + string openapi = context.ParseResult.GetValueForOption(DescriptionOption); + LogLevel logLevel = context.ParseResult.GetValueForOption(LogLevelOption); + CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); + + + var logger = Logger.ConfigureLogger(logLevel); + + try + { + await OpenApiService.ValidateOpenApiDocument(openapi, logLevel, cancellationToken); + return 0; + } + catch (Exception ex) + { +#if DEBUG + logger.LogCritical(ex, ex.Message); + throw; // so debug tools go straight to the source of the exception when attached +#else + logger.LogCritical( ex.Message); + Environment.Exit(1); + return 1; +#endif + } + } + } +} diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cee48404..e48cecc8 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -37,13 +37,13 @@ - - - - - - - + + + + + + + diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index c8ba8fdc..88c72fa8 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; using System.CommandLine; using System.IO; -using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; +using Microsoft.OpenApi.Hidi.Handlers; namespace Microsoft.OpenApi.Hidi { @@ -66,7 +65,11 @@ static async Task Main(string[] args) logLevelOption }; - validateCommand.SetHandler(OpenApiService.ValidateOpenApiDocument, descriptionOption, logLevelOption); + validateCommand.Handler = new ValidateCommandHandler + { + DescriptionOption = descriptionOption, + LogLevelOption = logLevelOption + }; var transformCommand = new Command("transform") { @@ -86,8 +89,23 @@ static async Task Main(string[] args) inlineExternalOption }; - transformCommand.SetHandler ( - OpenApiService.TransformOpenApiDocument, descriptionOption, csdlOption, csdlFilterOption, outputOption, cleanOutputOption, versionOption, formatOption, terseOutputOption, logLevelOption, inlineLocalOption, inlineExternalOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption); + transformCommand.Handler = new TransformCommandHandler + { + DescriptionOption = descriptionOption, + CsdlOption = csdlOption, + CsdlFilterOption = csdlFilterOption, + OutputOption = outputOption, + CleanOutputOption = cleanOutputOption, + VersionOption = versionOption, + FormatOption = formatOption, + TerseOutputOption = terseOutputOption, + LogLevelOption = logLevelOption, + FilterByOperationIdsOption = filterByOperationIdsOption, + FilterByTagsOption = filterByTagsOption, + FilterByCollectionOption = filterByCollectionOption, + InlineLocalOption = inlineLocalOption, + InlineExternalOption = inlineExternalOption + }; rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); From a08f817b7760f2c3ff91592c9dbc0200727b586b Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 1 Aug 2022 10:46:07 +0300 Subject: [PATCH 153/720] Add logger class for easy reuse and clean up code --- src/Microsoft.OpenApi.Hidi/Logger.cs | 35 ++++++++++++++++++++ src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 34 ++++--------------- 2 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/Logger.cs diff --git a/src/Microsoft.OpenApi.Hidi/Logger.cs b/src/Microsoft.OpenApi.Hidi/Logger.cs new file mode 100644 index 00000000..cca90694 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Logger.cs @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.Extensions.Logging; + +namespace Microsoft.OpenApi.Hidi +{ + public class Logger + { + public static ILogger ConfigureLogger(LogLevel logLevel) + { + // Configure logger options +#if DEBUG + logLevel = logLevel > LogLevel.Debug ? LogLevel.Debug : logLevel; +#endif + + using var loggerFactory = LoggerFactory.Create((builder) => + { + builder + .AddSimpleConsole(c => + { + c.IncludeScopes = true; + }) +#if DEBUG + .AddDebug() +#endif + .SetMinimumLevel(logLevel); + }); + + var logger = loggerFactory.CreateLogger(); + + return logger; + } + } +} diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8e1838d9..79b51850 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -26,7 +26,6 @@ using System.Threading; using System.Xml.Xsl; using System.Xml; -using System.Runtime.CompilerServices; using System.Reflection; namespace Microsoft.OpenApi.Hidi @@ -36,7 +35,7 @@ public class OpenApiService /// /// Implementation of the transform command /// - public static async Task TransformOpenApiDocument( + public static async Task TransformOpenApiDocument( string openapi, string csdl, string csdlFilter, @@ -54,8 +53,7 @@ public static async Task TransformOpenApiDocument( CancellationToken cancellationToken ) { - using var loggerFactory = ConfigureLoggerInstance(loglevel); - var logger = loggerFactory.CreateLogger(); + var logger = Logger.ConfigureLogger(loglevel); try { @@ -212,18 +210,11 @@ CancellationToken cancellationToken logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); textWriter.Flush(); } - return 0; } catch (Exception ex) { -#if DEBUG - logger.LogCritical(ex, ex.Message); -#else - logger.LogCritical(ex.Message); - -#endif - return 1; - } + throw new InvalidOperationException($"Could not transform the document, reason: {ex.Message}", ex); + } } private static XslCompiledTransform GetFilterTransform() @@ -249,18 +240,15 @@ private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslC return stream; } - - /// /// Implementation of the validate command /// - public static async Task ValidateOpenApiDocument( + public static async Task ValidateOpenApiDocument( string openapi, LogLevel loglevel, CancellationToken cancellationToken) { - using var loggerFactory = ConfigureLoggerInstance(loglevel); - var logger = loggerFactory.CreateLogger(); + var logger = Logger.ConfigureLogger(loglevel); try { @@ -308,19 +296,11 @@ public static async Task ValidateOpenApiDocument( logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); logger.LogInformation(statsVisitor.GetStatisticsReport()); } - - return 0; } catch (Exception ex) { -#if DEBUG - logger.LogCritical(ex, ex.Message); -#else - logger.LogCritical(ex.Message); -#endif - return 1; + throw new InvalidOperationException($"Could not validate the document, reason: {ex.Message}", ex); } - } /// From beac5b103bf54c93933cc9bba8b7829a2fd1d533 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 23:25:20 +0000 Subject: [PATCH 154/720] Bump xunit from 2.4.1 to 2.4.2 Bumps [xunit](https://github.com/xunit/xunit) from 2.4.1 to 2.4.2. - [Release notes](https://github.com/xunit/xunit/releases) - [Commits](https://github.com/xunit/xunit/compare/2.4.1...2.4.2) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index fb6eaecc..b74df358 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -11,7 +11,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From d5aaf8522d7c2e62243d7802fb9847c1d511f684 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 21:07:24 +0000 Subject: [PATCH 155/720] Bump Moq from 4.18.1 to 4.18.2 Bumps [Moq](https://github.com/moq/moq4) from 4.18.1 to 4.18.2. - [Release notes](https://github.com/moq/moq4/releases) - [Changelog](https://github.com/moq/moq4/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq4/compare/v4.18.1...v4.18.2) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index b74df358..de148b7d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -10,7 +10,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive From 2cd1ef6df657a4a25652d440efe18f2e81fae74d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 3 Aug 2022 11:27:45 +0300 Subject: [PATCH 156/720] Clean up code --- src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index 84ffcc12..194a1eba 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -40,7 +40,6 @@ public async Task InvokeAsync(InvocationContext context) throw; // so debug tools go straight to the source of the exception when attached #else logger.LogCritical( ex.Message); - Environment.Exit(1); return 1; #endif } From 8c1c051be1ef000f864db73fd6dbeed7b1365aac Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 3 Aug 2022 17:16:21 +0300 Subject: [PATCH 157/720] Refactor code --- .../Handlers/TransformCommandHandler.cs | 4 ++-- .../Handlers/ValidateCommandHandler.cs | 4 ++-- src/Microsoft.OpenApi.Hidi/Logger.cs | 8 ++------ src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 16 ++++++++-------- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index 8123f462..e8d9431d 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -50,8 +50,8 @@ public async Task InvokeAsync(InvocationContext context) string filterbycollection = context.ParseResult.GetValueForOption(FilterByCollectionOption); CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); - var logger = Logger.ConfigureLogger(logLevel); - + using var loggerFactory = Logger.ConfigureLogger(logLevel); + var logger = loggerFactory.CreateLogger(); try { await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, format, terseOutput, logLevel, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, cancellationToken); diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index 194a1eba..2faa771e 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -26,8 +26,8 @@ public async Task InvokeAsync(InvocationContext context) CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); - var logger = Logger.ConfigureLogger(logLevel); - + using var loggerFactory = Logger.ConfigureLogger(logLevel); + var logger = loggerFactory.CreateLogger(); try { await OpenApiService.ValidateOpenApiDocument(openapi, logLevel, cancellationToken); diff --git a/src/Microsoft.OpenApi.Hidi/Logger.cs b/src/Microsoft.OpenApi.Hidi/Logger.cs index cca90694..2b02e960 100644 --- a/src/Microsoft.OpenApi.Hidi/Logger.cs +++ b/src/Microsoft.OpenApi.Hidi/Logger.cs @@ -7,14 +7,14 @@ namespace Microsoft.OpenApi.Hidi { public class Logger { - public static ILogger ConfigureLogger(LogLevel logLevel) + public static ILoggerFactory ConfigureLogger(LogLevel logLevel) { // Configure logger options #if DEBUG logLevel = logLevel > LogLevel.Debug ? LogLevel.Debug : logLevel; #endif - using var loggerFactory = LoggerFactory.Create((builder) => + return LoggerFactory.Create((builder) => { builder .AddSimpleConsole(c => @@ -26,10 +26,6 @@ public static ILogger ConfigureLogger(LogLevel logLevel) #endif .SetMinimumLevel(logLevel); }); - - var logger = loggerFactory.CreateLogger(); - - return logger; } } } diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 0d2d5d53..c37c9479 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -44,7 +44,7 @@ public static async Task TransformOpenApiDocument( string? version, OpenApiFormat? format, bool terseOutput, - LogLevel loglevel, + LogLevel logLevel, bool inlineLocal, bool inlineExternal, string filterbyoperationids, @@ -53,8 +53,8 @@ public static async Task TransformOpenApiDocument( CancellationToken cancellationToken ) { - var logger = Logger.ConfigureLogger(loglevel); - + using var loggerFactory = Logger.ConfigureLogger(logLevel); + var logger = loggerFactory.CreateLogger(); try { if (string.IsNullOrEmpty(openapi) && string.IsNullOrEmpty(csdl)) @@ -246,11 +246,11 @@ private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslC /// public static async Task ValidateOpenApiDocument( string openapi, - LogLevel loglevel, + LogLevel logLevel, CancellationToken cancellationToken) { - var logger = Logger.ConfigureLogger(loglevel); - + using var loggerFactory = Logger.ConfigureLogger(logLevel); + var logger = loggerFactory.CreateLogger(); try { if (string.IsNullOrEmpty(openapi)) @@ -578,7 +578,7 @@ private static ILoggerFactory ConfigureLoggerInstance(LogLevel loglevel) loglevel = loglevel > LogLevel.Debug ? LogLevel.Debug : loglevel; #endif - return LoggerFactory.Create((builder) => { + return Microsoft.Extensions.Logging.LoggerFactory.Create((builder) => { builder .AddSimpleConsole(c => { c.IncludeScopes = true; From 19d25ef3ad385a953df917c887bb64c37d2d8466 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 4 Aug 2022 14:31:38 +0300 Subject: [PATCH 158/720] Revert packages to stable versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 71570a9c..c35c4020 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -37,10 +37,10 @@ - - - - + + + + From 659d4d7de3b576028303a107f5ab9c9823d14d0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Aug 2022 21:12:33 +0000 Subject: [PATCH 159/720] Bump Microsoft.NET.Test.Sdk from 17.2.0 to 17.3.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.2.0 to 17.3.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/compare/v17.2.0...v17.3.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index de148b7d..6045d85b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -9,7 +9,7 @@ - + From 5598cc4e51ab1f4085c04fd1b2d1c45a234c7dc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Aug 2022 21:11:30 +0000 Subject: [PATCH 160/720] Bump Microsoft.OData.Edm from 7.12.1 to 7.12.2 Bumps Microsoft.OData.Edm from 7.12.1 to 7.12.2. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c35c4020..eda11732 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From 419004039bdeda00ee4810c14577eeb6a0020ade Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 22 Aug 2022 15:33:33 +0300 Subject: [PATCH 161/720] Code cleanup --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 80 +------------------- 1 file changed, 1 insertion(+), 79 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c37c9479..461ca50b 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -356,57 +356,7 @@ public static OpenApiDocument FixReferences(OpenApiDocument document) return doc; } - - private static async Task GetStream(string input, ILogger logger) - { - var stopwatch = new Stopwatch(); - stopwatch.Start(); - - Stream stream; - if (input.StartsWith("http")) - { - try - { - var httpClientHandler = new HttpClientHandler() - { - SslProtocols = System.Security.Authentication.SslProtocols.Tls12, - }; - using var httpClient = new HttpClient(httpClientHandler) - { - DefaultRequestVersion = HttpVersion.Version20 - }; - stream = await httpClient.GetStreamAsync(input); - } - catch (HttpRequestException ex) - { - logger.LogError($"Could not download the file at {input}, reason{ex}"); - return null; - } - } - else - { - try - { - var fileInput = new FileInfo(input); - stream = fileInput.OpenRead(); - } - catch (Exception ex) when (ex is FileNotFoundException || - ex is PathTooLongException || - ex is DirectoryNotFoundException || - ex is IOException || - ex is UnauthorizedAccessException || - ex is SecurityException || - ex is NotSupportedException) - { - logger.LogError($"Could not open the file at {input}, reason: {ex.Message}"); - return null; - } - } - stopwatch.Stop(); - logger.LogTrace("{timestamp}ms: Read file {input}", stopwatch.ElapsedMilliseconds, input); - return stream; - } - + /// /// Takes in a file stream, parses the stream into a JsonDocument and gets a list of paths and Http methods /// @@ -462,34 +412,6 @@ private static Dictionary> EnumerateJsonDocument(JsonElemen return paths; } - /// - /// Fixes the references in the resulting OpenApiDocument. - /// - /// The converted OpenApiDocument. - /// A valid OpenApiDocument instance. - // private static OpenApiDocument FixReferences2(OpenApiDocument document) - // { - // // This method is only needed because the output of ConvertToOpenApi isn't quite a valid OpenApiDocument instance. - // // So we write it out, and read it back in again to fix it up. - - // OpenApiDocument document; - // logger.LogTrace("Parsing the OpenApi file"); - // var result = await new OpenApiStreamReader(new OpenApiReaderSettings - // { - // RuleSet = ValidationRuleSet.GetDefaultRuleSet(), - // BaseUrl = new Uri(openapi) - // } - // ).ReadAsync(stream); - - // document = result.OpenApiDocument; - // var context = result.OpenApiDiagnostic; - // var sb = new StringBuilder(); - // document.SerializeAsV3(new OpenApiYamlWriter(new StringWriter(sb))); - // var doc = new OpenApiStringReader().Read(sb.ToString(), out _); - - // return doc; - // } - /// /// Reads stream from file system or makes HTTP request depending on the input string /// From 211f5157fec4aad7f5c076c74a5d1f03b7429ee1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Aug 2022 21:14:34 +0000 Subject: [PATCH 162/720] Bump Microsoft.NET.Test.Sdk from 17.3.0 to 17.3.1 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.3.0 to 17.3.1. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/compare/v17.3.0...v17.3.1) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 6045d85b..084738ba 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -9,7 +9,7 @@ - + From 4a40cfa5cbf6503a176bfbcf30702219de014f36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 21:14:54 +0000 Subject: [PATCH 163/720] Bump Microsoft.Extensions.Logging.Abstractions from 6.0.1 to 6.0.2 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v6.0.1...v6.0.2) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index eda11732..1e6b17aa 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 9323bdb9eb08b42461fef714612df7dc3e6be214 Mon Sep 17 00:00:00 2001 From: Irvine Date: Wed, 14 Sep 2022 19:17:00 +0300 Subject: [PATCH 164/720] Bump up lib version and Hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1e6b17aa..518892f1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview9 + 1.0.0-preview10 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET @@ -43,7 +43,7 @@ - + From 318ba9b71c25835afb15e23a5894cbb1acaac019 Mon Sep 17 00:00:00 2001 From: Irvine Date: Wed, 14 Sep 2022 23:55:38 +0300 Subject: [PATCH 165/720] Update some convert settings --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 461ca50b..034350f1 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -331,7 +331,9 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl) EnableDerivedTypesReferencesForResponses = false, ShowRootPath = false, ShowLinks = false, - ExpandDerivedTypesNavigationProperties = false + ExpandDerivedTypesNavigationProperties = false, + EnableCount = true, + UseSuccessStatusCodeRange = true }; OpenApiDocument document = edmModel.ConvertToOpenApi(settings); From 71c1f094f47a736294f9b4e45800fe380b5c3d8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 21:11:00 +0000 Subject: [PATCH 166/720] Bump Microsoft.OData.Edm from 7.12.2 to 7.12.3 Bumps Microsoft.OData.Edm from 7.12.2 to 7.12.3. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 518892f1..beacdddc 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From 130f4b5f455c7310c3401c488bfac4e7c0575d61 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 20 Sep 2022 08:43:28 -0700 Subject: [PATCH 167/720] - bumps minor for hidi --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index beacdddc..fbb16de3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.0.0-preview10 + 1.1.0-preview1 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From 24e141947f8d667c942c4cfd44bce24cfb8db0c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 21:08:09 +0000 Subject: [PATCH 168/720] Bump Microsoft.NET.Test.Sdk from 17.3.1 to 17.3.2 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.3.1 to 17.3.2. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/compare/v17.3.1...v17.3.2) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 084738ba..d03fda9c 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -9,7 +9,7 @@ - + From e321c9288570a656ff9fd0ca6c702e5691fe3ff5 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 6 Oct 2022 07:31:07 -0400 Subject: [PATCH 169/720] - bumps hidi version and updates reference to conversion lib Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index fbb16de3..4814ed70 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.1.0-preview1 + 1.1.0-preview2 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET @@ -43,7 +43,7 @@ - + From 564ac1b1ff1e13fa846a3157bad39ae0c2bd53e8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 6 Oct 2022 10:23:45 -0400 Subject: [PATCH 170/720] - bumps odata to latest --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4814ed70..55d529a0 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 70f48e9ee7caa3d29b23c6e8e25cf01b080e5b9b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 6 Oct 2022 11:04:07 -0400 Subject: [PATCH 171/720] - fixes references to projects in tests projects --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index d03fda9c..1a4002da 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -23,8 +23,8 @@ - - + + From 0739ebb4c02eda01feec8701424505c255b09ed3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 09:20:39 +0300 Subject: [PATCH 172/720] Bump Microsoft.OData.Edm from 7.12.3 to 7.12.4 (#1043) Bumps Microsoft.OData.Edm from 7.12.3 to 7.12.4. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 55d529a0..cbff7e93 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From e40e3238fe9bd102a4bf3a4d96ac05778782c051 Mon Sep 17 00:00:00 2001 From: Irvine Date: Mon, 24 Oct 2022 15:29:16 +0300 Subject: [PATCH 173/720] Upgrade conversion lib. ver.; update Hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cbff7e93..c77e3019 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.1.0-preview2 + 1.1.0-preview3 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET @@ -43,7 +43,7 @@ - + From 2fdbd75dde559f832e45017f99c4754a7d576d88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Oct 2022 21:12:12 +0000 Subject: [PATCH 174/720] Bump Microsoft.OData.Edm from 7.12.4 to 7.12.5 Bumps Microsoft.OData.Edm from 7.12.4 to 7.12.5. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c77e3019..37c7d3b4 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From 73414ae4da93fbddece80fc3953c75835834ceef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Oct 2022 21:12:01 +0000 Subject: [PATCH 175/720] Bump coverlet.collector from 3.1.2 to 3.2.0 Bumps [coverlet.collector](https://github.com/coverlet-coverage/coverlet) from 3.1.2 to 3.2.0. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/commits/v3.2.0) --- updated-dependencies: - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 1a4002da..2c53d82d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all From b5b0daab966c4597ae353646ebc9ad30ca6798fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Nov 2022 21:11:27 +0000 Subject: [PATCH 176/720] Bump Microsoft.OpenApi.OData from 1.2.0-preview5 to 1.2.0-preview6 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.2.0-preview5 to 1.2.0-preview6. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 37c7d3b4..e133b37c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 07ca313e0fb1483a92cbfcc4f8e7321ffa708b1a Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 7 Nov 2022 11:30:04 +0300 Subject: [PATCH 177/720] Add a settingsFile parameter that allows one to input a path to the settingsfile --- .../Handlers/TransformCommandHandler.cs | 4 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 57 ++++++++++--------- src/Microsoft.OpenApi.Hidi/Program.cs | 5 ++ 3 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index e8d9431d..696837d3 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -21,6 +21,7 @@ internal class TransformCommandHandler : ICommandHandler public Option VersionOption { get; set; } public Option FormatOption { get; set; } public Option TerseOutputOption { get; set; } + public Option SettingsFileOption { get; set; } public Option LogLevelOption { get; set; } public Option FilterByOperationIdsOption { get; set; } public Option FilterByTagsOption { get; set; } @@ -42,6 +43,7 @@ public async Task InvokeAsync(InvocationContext context) string? version = context.ParseResult.GetValueForOption(VersionOption); OpenApiFormat? format = context.ParseResult.GetValueForOption(FormatOption); bool terseOutput = context.ParseResult.GetValueForOption(TerseOutputOption); + string settingsFile = context.ParseResult.GetValueForOption(SettingsFileOption); LogLevel logLevel = context.ParseResult.GetValueForOption(LogLevelOption); bool inlineLocal = context.ParseResult.GetValueForOption(InlineLocalOption); bool inlineExternal = context.ParseResult.GetValueForOption(InlineExternalOption); @@ -54,7 +56,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, format, terseOutput, logLevel, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, cancellationToken); + await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, format, terseOutput, settingsFile, logLevel, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, cancellationToken); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index e6603d62..488db08c 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -45,6 +45,7 @@ public static async Task TransformOpenApiDocument( string? version, OpenApiFormat? format, bool terseOutput, + string settingsFile, LogLevel logLevel, bool inlineLocal, bool inlineExternal, @@ -100,7 +101,7 @@ CancellationToken cancellationToken stream.Position = 0; } - document = await ConvertCsdlToOpenApi(stream); + document = await ConvertCsdlToOpenApi(stream, settingsFile); stopwatch.Stop(); logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } @@ -306,11 +307,14 @@ public static async Task ValidateOpenApiDocument( } } - internal static IConfiguration GetConfiguration() + public static IConfiguration GetConfiguration(string settingsFile) { + settingsFile ??= "appsettings.json"; + IConfiguration config = new ConfigurationBuilder() - .AddJsonFile("appsettings.json",true) + .AddJsonFile(settingsFile, true) .Build(); + return config; } @@ -319,37 +323,36 @@ internal static IConfiguration GetConfiguration() /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApi(Stream csdl) + public static async Task ConvertCsdlToOpenApi(Stream csdl, string settingsFile = null) { using var reader = new StreamReader(csdl); var csdlText = await reader.ReadToEndAsync(); var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); + + var config = GetConfiguration(settingsFile); + var settings = config.GetSection("OpenApiConvertSettings").Get(); - var config = GetConfiguration(); - OpenApiConvertSettings settings = config.GetSection("OpenApiConvertSettings").Get(); - if (settings == null) - { - settings = new OpenApiConvertSettings() + settings ??= new OpenApiConvertSettings() { - AddSingleQuotesForStringParameters = true, - AddEnumDescriptionExtension = true, - DeclarePathParametersOnPathItem = true, - EnableKeyAsSegment = true, - EnableOperationId = true, - ErrorResponsesAsDefault = false, - PrefixEntityTypeNameBeforeKey = true, - TagDepth = 2, - EnablePagination = true, - EnableDiscriminatorValue = true, - EnableDerivedTypesReferencesForRequestBody = false, - EnableDerivedTypesReferencesForResponses = false, - ShowRootPath = false, - ShowLinks = false, - ExpandDerivedTypesNavigationProperties = false, - EnableCount = true, - UseSuccessStatusCodeRange = true + AddSingleQuotesForStringParameters = true, + AddEnumDescriptionExtension = true, + DeclarePathParametersOnPathItem = true, + EnableKeyAsSegment = true, + EnableOperationId = true, + ErrorResponsesAsDefault = false, + PrefixEntityTypeNameBeforeKey = true, + TagDepth = 2, + EnablePagination = true, + EnableDiscriminatorValue = true, + EnableDerivedTypesReferencesForRequestBody = false, + EnableDerivedTypesReferencesForResponses = false, + ShowRootPath = false, + ShowLinks = false, + ExpandDerivedTypesNavigationProperties = false, + EnableCount = true, + UseSuccessStatusCodeRange = true }; - } + OpenApiDocument document = edmModel.ConvertToOpenApi(settings); document = FixReferences(document); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 67f4c297..3af6818d 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -47,6 +47,9 @@ static async Task Main(string[] args) var terseOutputOption = new Option("--terse-output", "Produce terse json output"); terseOutputOption.AddAlias("--to"); + var settingsFileOption = new Option("--settingsFile", "The configuration file with CSDL conversion settings."); + settingsFileOption.AddAlias("--sf"); + var logLevelOption = new Option("--log-level", () => LogLevel.Information, "The log level to use when logging messages to the main output."); logLevelOption.AddAlias("--ll"); @@ -87,6 +90,7 @@ static async Task Main(string[] args) versionOption, formatOption, terseOutputOption, + settingsFileOption, logLevelOption, filterByOperationIdsOption, filterByTagsOption, @@ -105,6 +109,7 @@ static async Task Main(string[] args) VersionOption = versionOption, FormatOption = formatOption, TerseOutputOption = terseOutputOption, + SettingsFileOption = settingsFileOption, LogLevelOption = logLevelOption, FilterByOperationIdsOption = filterByOperationIdsOption, FilterByTagsOption = filterByTagsOption, From bdbee555b8189d6f89a0a0514fc5f6da563ef4ab Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 7 Nov 2022 11:31:03 +0300 Subject: [PATCH 178/720] Add test --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 3 +++ .../Services/OpenApiServiceTests.cs | 16 ++++++++++++++++ .../Services/appsettingstest.json | 7 +++++++ 3 files changed, 26 insertions(+) create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 2c53d82d..39fa1d87 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -34,6 +34,9 @@ + + Always + Always diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index af5437aa..aed9e488 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -4,7 +4,9 @@ using System; using System.IO; using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; using Microsoft.OpenApi.Hidi; +using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Services; using Xunit; @@ -51,5 +53,19 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen Assert.NotEmpty(subsetOpenApiDocument.Paths); Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); } + + [Fact] + public void ReturnOpenApiConvertSettings() + { + // Arrange + var filePath = "C:\\Users\\v-makim\\source\\repos\\OpenAPI.NET\\test\\Microsoft.OpenApi.Hidi.Tests\\Services\\appsettingstest.json"; + var config = OpenApiService.GetConfiguration(filePath); + + // Act + var settings = config.GetSection("OpenApiConvertSettings").Get(); + + // Assert + Assert.NotNull(settings); + } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json b/test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json new file mode 100644 index 00000000..2effcace --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json @@ -0,0 +1,7 @@ +{ + "OpenApiConvertSettings": { + "AddSingleQuotesForStringParameters": "true", + "AddEnumDescriptionExtension": "true", + "DeclarePathParametersOnPathItem": "true" + } +} \ No newline at end of file From 475398c3688c3873f669fc6c0465e240f7ccef68 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 7 Nov 2022 13:04:04 +0300 Subject: [PATCH 179/720] Use backslash in filePath --- .../Services/OpenApiServiceTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index aed9e488..68fefe08 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -58,7 +58,7 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen public void ReturnOpenApiConvertSettings() { // Arrange - var filePath = "C:\\Users\\v-makim\\source\\repos\\OpenAPI.NET\\test\\Microsoft.OpenApi.Hidi.Tests\\Services\\appsettingstest.json"; + var filePath = "C:/Users/v-makim/source/repos/OpenAPI.NET/test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json"; var config = OpenApiService.GetConfiguration(filePath); // Act From c956525375f86e108f4430448e4a1221d7977a21 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 7 Nov 2022 14:33:37 +0300 Subject: [PATCH 180/720] Clean up tests --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../Services/OpenApiServiceTests.cs | 2 +- .../Services/appsettingstest.json | 7 ------- .../UtilityFiles/appsettingstest.json | 21 +++++++++++++++++++ 4 files changed, 23 insertions(+), 9 deletions(-) delete mode 100644 test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/appsettingstest.json diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 39fa1d87..9bc2e784 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -34,7 +34,7 @@ - + Always diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 68fefe08..44d0740b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -58,7 +58,7 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen public void ReturnOpenApiConvertSettings() { // Arrange - var filePath = "C:/Users/v-makim/source/repos/OpenAPI.NET/test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json"; + var filePath = "C:/Users/v-makim/source/repos/OpenAPI.NET/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/appsettingstest.json"; var config = OpenApiService.GetConfiguration(filePath); // Act diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json b/test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json deleted file mode 100644 index 2effcace..00000000 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/appsettingstest.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OpenApiConvertSettings": { - "AddSingleQuotesForStringParameters": "true", - "AddEnumDescriptionExtension": "true", - "DeclarePathParametersOnPathItem": "true" - } -} \ No newline at end of file diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/appsettingstest.json b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/appsettingstest.json new file mode 100644 index 00000000..a71d0a9f --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/appsettingstest.json @@ -0,0 +1,21 @@ +{ + "OpenApiConvertSettings": { + "AddSingleQuotesForStringParameters": "true", + "AddEnumDescriptionExtension": "true", + "DeclarePathParametersOnPathItem": "true", + "EnableKeyAsSegment": "true", + "EnableOperationId": "true", + "ErrorResponsesAsDefault": "false", + "PrefixEntityTypeNameBeforeKey": "true", + "TagDepth": 2, + "EnablePagination": "true", + "EnableDiscriminatorValue": "true", + "EnableDerivedTypesReferencesForRequestBody": "false", + "EnableDerivedTypesReferencesForResponses": "false", + "ShowRootPath": "false", + "ShowLinks": "false", + "ExpandDerivedTypesNavigationProperties": "false", + "EnableCount": "true", + "UseSuccessStatusCodeRange": "true" + } +} \ No newline at end of file From c7073b9269fdcee4c6ee17a574250f1f8f6fd441 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 21:10:46 +0000 Subject: [PATCH 181/720] Bump Microsoft.NET.Test.Sdk from 17.3.2 to 17.4.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.3.2 to 17.4.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Commits](https://github.com/microsoft/vstest/compare/v17.3.2...v17.4.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 2c53d82d..f4c36802 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -9,7 +9,7 @@ - + From a406f09813121bfed3ec468db629a5c0149c061a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 21:10:59 +0000 Subject: [PATCH 182/720] Bump Microsoft.Extensions.Logging.Abstractions from 6.0.2 to 7.0.0 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 6.0.2 to 7.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/commits) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e133b37c..e11d1c31 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 7c3e2a25a65aed2910c6adc95e7f7226b87791ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 21:51:07 +0000 Subject: [PATCH 183/720] Bump Microsoft.Extensions.Logging from 6.0.0 to 7.0.0 Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/commits) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e11d1c31..c19926e3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -37,7 +37,7 @@ - + From 58965a25e06aa2c7070a3843d0dd3b5970f71fe1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 22:05:56 +0000 Subject: [PATCH 184/720] Bump Microsoft.Extensions.Logging.Console from 6.0.0 to 7.0.0 Bumps [Microsoft.Extensions.Logging.Console](https://github.com/dotnet/runtime) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/commits) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Console dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c19926e3..c884e91f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + From 00188fcf5c844e67f67f6206e16a4ac10a4fb739 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 22:17:37 +0000 Subject: [PATCH 185/720] Bump Microsoft.Extensions.Logging.Debug from 6.0.0 to 7.0.0 Bumps [Microsoft.Extensions.Logging.Debug](https://github.com/dotnet/runtime) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/commits) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Debug dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c884e91f..6c9b54e0 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -40,7 +40,7 @@ - + From 544b3f475a6acb693b344226f8c873b40dcd7f49 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 8 Nov 2022 12:45:30 +0300 Subject: [PATCH 186/720] Address PR feedback --- .../Microsoft.OpenApi.Hidi.csproj | 8 ++++ src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 48 +++++++++---------- src/Microsoft.OpenApi.Hidi/Program.cs | 15 +----- .../Services/OpenApiServiceTests.cs | 24 ++++++---- 4 files changed, 48 insertions(+), 47 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 0e7abdbd..c2071f81 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -52,4 +52,12 @@ + + + + <_Parameter1>Microsoft.OpenApi.Hidi.Tests + + + + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 488db08c..0d950068 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -28,6 +28,7 @@ using System.Xml; using System.Reflection; using Microsoft.Extensions.Configuration; +using System.Runtime.CompilerServices; namespace Microsoft.OpenApi.Hidi { @@ -307,7 +308,7 @@ public static async Task ValidateOpenApiDocument( } } - public static IConfiguration GetConfiguration(string settingsFile) + internal static IConfiguration GetConfiguration(string settingsFile) { settingsFile ??= "appsettings.json"; @@ -317,7 +318,7 @@ public static IConfiguration GetConfiguration(string settingsFile) return config; } - + /// /// Converts CSDL to OpenAPI /// @@ -330,28 +331,27 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); var config = GetConfiguration(settingsFile); - var settings = config.GetSection("OpenApiConvertSettings").Get(); - - settings ??= new OpenApiConvertSettings() - { - AddSingleQuotesForStringParameters = true, - AddEnumDescriptionExtension = true, - DeclarePathParametersOnPathItem = true, - EnableKeyAsSegment = true, - EnableOperationId = true, - ErrorResponsesAsDefault = false, - PrefixEntityTypeNameBeforeKey = true, - TagDepth = 2, - EnablePagination = true, - EnableDiscriminatorValue = true, - EnableDerivedTypesReferencesForRequestBody = false, - EnableDerivedTypesReferencesForResponses = false, - ShowRootPath = false, - ShowLinks = false, - ExpandDerivedTypesNavigationProperties = false, - EnableCount = true, - UseSuccessStatusCodeRange = true - }; + var settings = new OpenApiConvertSettings() + { + AddSingleQuotesForStringParameters = true, + AddEnumDescriptionExtension = true, + DeclarePathParametersOnPathItem = true, + EnableKeyAsSegment = true, + EnableOperationId = true, + ErrorResponsesAsDefault = false, + PrefixEntityTypeNameBeforeKey = true, + TagDepth = 2, + EnablePagination = true, + EnableDiscriminatorValue = true, + EnableDerivedTypesReferencesForRequestBody = false, + EnableDerivedTypesReferencesForResponses = false, + ShowRootPath = false, + ShowLinks = false, + ExpandDerivedTypesNavigationProperties = false, + EnableCount = true, + UseSuccessStatusCodeRange = true + }; + config.GetSection("OpenApiConvertSettings").Bind(settings); OpenApiDocument document = edmModel.ConvertToOpenApi(settings); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 3af6818d..71e9e0d0 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -47,8 +47,8 @@ static async Task Main(string[] args) var terseOutputOption = new Option("--terse-output", "Produce terse json output"); terseOutputOption.AddAlias("--to"); - var settingsFileOption = new Option("--settingsFile", "The configuration file with CSDL conversion settings."); - settingsFileOption.AddAlias("--sf"); + var settingsFileOption = new Option("--settings-path", "The configuration file with CSDL conversion settings."); + settingsFileOption.AddAlias("--sp"); var logLevelOption = new Option("--log-level", () => LogLevel.Information, "The log level to use when logging messages to the main output."); logLevelOption.AddAlias("--ll"); @@ -121,20 +121,9 @@ static async Task Main(string[] args) rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); - // Parse the incoming args and invoke the handler await rootCommand.InvokeAsync(args); - - //await new CommandLineBuilder(rootCommand) - // .UseHost(_ => Host.CreateDefaultBuilder(), - // host => { - // var config = host.Services.GetRequiredService(); - // }) - // .UseDefaults() - // .Build() - // .InvokeAsync(args); - //// Wait for logger to write messages to the console before exiting await Task.Delay(10); } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 44d0740b..c2fb3798 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -1,9 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; -using System.IO; -using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.OpenApi.Hidi; using Microsoft.OpenApi.OData; @@ -54,18 +51,25 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); } - [Fact] - public void ReturnOpenApiConvertSettings() + [Theory] + [InlineData("UtilityFiles/appsettingstest.json")] + [InlineData(null)] + public void ReturnOpenApiConvertSettingsWhenSettingsFileIsProvided(string filePath) { // Arrange - var filePath = "C:/Users/v-makim/source/repos/OpenAPI.NET/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/appsettingstest.json"; var config = OpenApiService.GetConfiguration(filePath); - - // Act + + // Act and Assert var settings = config.GetSection("OpenApiConvertSettings").Get(); - // Assert - Assert.NotNull(settings); + if (filePath == null) + { + Assert.Null(settings); + } + else + { + Assert.NotNull(settings); + } } } } From 92357afff72a3481e6d9ff4fffbb23c276622673 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 8 Nov 2022 10:26:15 -0500 Subject: [PATCH 187/720] - upgrades to dotnet 7 Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f88e7ed6..c7f84666 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -2,7 +2,7 @@ Exe - net6.0 + net7.0 9.0 true http://go.microsoft.com/fwlink/?LinkID=288890 @@ -43,8 +43,8 @@ - - + + diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index d73d8af8..f450e2ff 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net7.0 enable enable From 58f86460a81a74c46c9fb81a6ee7e4b669113714 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Nov 2022 21:01:46 +0000 Subject: [PATCH 188/720] Bump System.CommandLine.Hosting Bumps [System.CommandLine.Hosting](https://github.com/dotnet/command-line-api) from 0.4.0-alpha.22114.1 to 0.4.0-alpha.22272.1. - [Release notes](https://github.com/dotnet/command-line-api/releases) - [Changelog](https://github.com/dotnet/command-line-api/blob/main/docs/History.md) - [Commits](https://github.com/dotnet/command-line-api/commits) --- updated-dependencies: - dependency-name: System.CommandLine.Hosting dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f88e7ed6..c3fe239b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -44,7 +44,7 @@ - + From 2fcc71f28be1153b8bd4ba9853d973cd8abfe26a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Nov 2022 21:20:46 +0000 Subject: [PATCH 189/720] Bump Microsoft.OpenApi.OData from 1.2.0-preview6 to 1.2.0-preview7 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.2.0-preview6 to 1.2.0-preview7. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c3fe239b..d89cd502 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From ca9df0c97c37bcfd1e8e0dbc0f852092981736fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Nov 2022 21:07:16 +0000 Subject: [PATCH 190/720] Bump Microsoft.OpenApi.OData from 1.2.0-preview7 to 1.2.0-preview8 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.2.0-preview7 to 1.2.0-preview8. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c7f84666..03d8c70f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 9b60614b565e7166b7976d87b047685d19d88b77 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 21 Nov 2022 10:30:32 +0300 Subject: [PATCH 191/720] Bump up lib versions from preview to stable releases --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f88e7ed6..da61c969 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.1.0-preview3 + 1.1.0 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From 76844850f61af0f9eea3fa2d7d0fe42c9c3d6c3a Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 21 Nov 2022 11:24:44 +0300 Subject: [PATCH 192/720] Add conversion setting --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f88e7ed6..62677c57 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 0d950068..56dda4d9 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -349,7 +349,8 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri ShowLinks = false, ExpandDerivedTypesNavigationProperties = false, EnableCount = true, - UseSuccessStatusCodeRange = true + UseSuccessStatusCodeRange = true, + EnableTypeDisambiguationForDefaultValueOfOdataTypeProperty = true }; config.GetSection("OpenApiConvertSettings").Bind(settings); From 13888ed5ad9afac40d07b8390d524dc33d917d09 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 29 Nov 2022 09:51:04 -0500 Subject: [PATCH 193/720] - adds coverage dependencies --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index f450e2ff..5cc0d90a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -9,6 +9,10 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + From 3c7721bbfca8d14ef2b6e8b6e8a3d7568b1add46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 21:03:37 +0000 Subject: [PATCH 194/720] Bump Moq from 4.18.2 to 4.18.3 Bumps [Moq](https://github.com/moq/moq4) from 4.18.2 to 4.18.3. - [Release notes](https://github.com/moq/moq4/releases) - [Changelog](https://github.com/moq/moq4/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq4/compare/v4.18.2...v4.18.3) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index f450e2ff..a864bc5e 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -10,7 +10,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive From 5b36bd55e204dcc91f486993f3aa28f4b3fab215 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Dec 2022 21:01:34 +0000 Subject: [PATCH 195/720] Bump Microsoft.OData.Edm from 7.12.5 to 7.13.0 Bumps Microsoft.OData.Edm from 7.12.5 to 7.13.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index aba95306..3ba1aa4e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From 17a33b6920ac2dde2a6894b77438a4cedc34a41b Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 14 Dec 2022 12:06:14 +0300 Subject: [PATCH 196/720] Enable termination of transform process --- src/Microsoft.OpenApi.Hidi/Program.cs | 35 +++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 71e9e0d0..f8934a0f 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -1,15 +1,13 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.CommandLine; -using System.CommandLine.Builder; -using System.CommandLine.Hosting; using System.CommandLine.Parsing; - +using System.Diagnostics; using System.IO; +using System.Threading; using System.Threading.Tasks; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi.Handlers; @@ -19,6 +17,9 @@ static class Program { static async Task Main(string[] args) { + // subscribe to CancelKeyPress event to listen for termination requests from users through Ctrl+C or Ctrl+Break keys + Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPressEvent); + var rootCommand = new RootCommand() { }; @@ -127,5 +128,29 @@ static async Task Main(string[] args) //// Wait for logger to write messages to the console before exiting await Task.Delay(10); } + + /// + /// This event is raised when the user presses either of the two breaking key combinations: Ctrl+C or Ctrl+Break keys. + /// + /// + /// + private static void Console_CancelKeyPressEvent(object sender, ConsoleCancelEventArgs eventArgs) + { + if ((eventArgs.SpecialKey == ConsoleSpecialKey.ControlC) || (eventArgs.SpecialKey == ConsoleSpecialKey.ControlBreak)) + { + Console.WriteLine("CTRL+C pressed, aborting current process..."); + Thread.Sleep(5000); + + if (Process.GetCurrentProcess().HasExited) + { + Console.WriteLine("Process has already exited."); + } + else + { + Console.WriteLine("Process has not exited, attempting to kill process..."); + Process.GetCurrentProcess().Kill(); + } + } + } } } From 55fba95433010b65eb90a29b144e8fb041a86633 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Dec 2022 21:01:54 +0000 Subject: [PATCH 197/720] Bump Microsoft.OpenApi.OData from 1.2.0-preview8 to 1.2.0-preview9 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.2.0-preview8 to 1.2.0-preview9. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3ba1aa4e..e27a214d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 2e8a886be0bdc5026cd8657135f34b405e17af10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Dec 2022 21:04:52 +0000 Subject: [PATCH 198/720] Bump Microsoft.NET.Test.Sdk from 17.4.0 to 17.4.1 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.4.0 to 17.4.1. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.4.0...v17.4.1) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 0902ff17..4d052a56 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From 86f0b3ec52ff9d1a2dc6f04164ff452629c835a1 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 19 Dec 2022 13:46:34 +0300 Subject: [PATCH 199/720] Use an IConsole instance to register and handle cancellation when CTRL+C is pressed --- src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index 696837d3..c0af0972 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -50,6 +50,8 @@ public async Task InvokeAsync(InvocationContext context) string filterbyoperationids = context.ParseResult.GetValueForOption(FilterByOperationIdsOption); string filterbytags = context.ParseResult.GetValueForOption(FilterByTagsOption); string filterbycollection = context.ParseResult.GetValueForOption(FilterByCollectionOption); + + var console = context.Console; CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(logLevel); From 8122d5e4d98cf84801e86a8cb620fb59dfd5acf9 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 19 Dec 2022 13:47:32 +0300 Subject: [PATCH 200/720] Pass cancellation token to the conversion method and degrade gracefully when an operation is terminated --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 56dda4d9..dbcdf545 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -102,7 +102,7 @@ CancellationToken cancellationToken stream.Position = 0; } - document = await ConvertCsdlToOpenApi(stream, settingsFile); + document = await ConvertCsdlToOpenApi(stream, cancellationToken, settingsFile); stopwatch.Stop(); logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } @@ -216,6 +216,10 @@ CancellationToken cancellationToken textWriter.Flush(); } } + catch(TaskCanceledException) + { + Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); + } catch (Exception ex) { throw new InvalidOperationException($"Could not transform the document, reason: {ex.Message}", ex); @@ -324,12 +328,12 @@ internal static IConfiguration GetConfiguration(string settingsFile) /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApi(Stream csdl, string settingsFile = null) + public static async Task ConvertCsdlToOpenApi(Stream csdl, CancellationToken token, string settingsFile = null) { using var reader = new StreamReader(csdl); - var csdlText = await reader.ReadToEndAsync(); + var csdlText = await reader.ReadToEndAsync(token); var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); - + var config = GetConfiguration(settingsFile); var settings = new OpenApiConvertSettings() { @@ -353,9 +357,8 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri EnableTypeDisambiguationForDefaultValueOfOdataTypeProperty = true }; config.GetSection("OpenApiConvertSettings").Bind(settings); - - OpenApiDocument document = edmModel.ConvertToOpenApi(settings); + OpenApiDocument document = edmModel.ConvertToOpenApi(settings); document = FixReferences(document); return document; From a584f5fe91c6f00e2468d57f3bbdc228f8c4f3d4 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 19 Dec 2022 13:47:44 +0300 Subject: [PATCH 201/720] Clean up code --- src/Microsoft.OpenApi.Hidi/Program.cs | 34 +++------------------------ 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index f8934a0f..e9246eb6 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -16,12 +16,8 @@ namespace Microsoft.OpenApi.Hidi static class Program { static async Task Main(string[] args) - { - // subscribe to CancelKeyPress event to listen for termination requests from users through Ctrl+C or Ctrl+Break keys - Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPressEvent); - - var rootCommand = new RootCommand() { - }; + { + var rootCommand = new RootCommand() {}; // command option parameters and aliases var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL"); @@ -121,36 +117,12 @@ static async Task Main(string[] args) rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); - + // Parse the incoming args and invoke the handler await rootCommand.InvokeAsync(args); //// Wait for logger to write messages to the console before exiting await Task.Delay(10); - } - - /// - /// This event is raised when the user presses either of the two breaking key combinations: Ctrl+C or Ctrl+Break keys. - /// - /// - /// - private static void Console_CancelKeyPressEvent(object sender, ConsoleCancelEventArgs eventArgs) - { - if ((eventArgs.SpecialKey == ConsoleSpecialKey.ControlC) || (eventArgs.SpecialKey == ConsoleSpecialKey.ControlBreak)) - { - Console.WriteLine("CTRL+C pressed, aborting current process..."); - Thread.Sleep(5000); - - if (Process.GetCurrentProcess().HasExited) - { - Console.WriteLine("Process has already exited."); - } - else - { - Console.WriteLine("Process has not exited, attempting to kill process..."); - Process.GetCurrentProcess().Kill(); - } - } } } } From 9dad66e170b01e45a99599341836eabc1ad62175 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 19 Dec 2022 14:01:37 +0300 Subject: [PATCH 202/720] Fix failing tests --- .../Services/OpenApiServiceTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index c2fb3798..70b22275 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -20,7 +20,7 @@ public async Task ReturnConvertedCSDLFile() var csdlStream = fileInput.OpenRead(); // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); + var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream, CancellationToken.None); var expectedPathCount = 5; // Assert @@ -39,9 +39,9 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml"); var fileInput = new FileInfo(filePath); var csdlStream = fileInput.OpenRead(); - + // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); + var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream, CancellationToken.None); var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(openApiDoc, predicate); From 97eb92470fe63afaf7c13833ce5875f157668f32 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 19 Dec 2022 08:18:17 -0500 Subject: [PATCH 203/720] Update src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs --- src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index c0af0972..e46b3434 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -51,7 +51,6 @@ public async Task InvokeAsync(InvocationContext context) string filterbytags = context.ParseResult.GetValueForOption(FilterByTagsOption); string filterbycollection = context.ParseResult.GetValueForOption(FilterByCollectionOption); - var console = context.Console; CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(logLevel); From 16b50ad42555a2bdf016c9ae828555237e18db1a Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 19 Dec 2022 19:12:18 +0300 Subject: [PATCH 204/720] Code clean up --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- .../Services/OpenApiServiceTests.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index dbcdf545..60bba4ae 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -102,7 +102,7 @@ CancellationToken cancellationToken stream.Position = 0; } - document = await ConvertCsdlToOpenApi(stream, cancellationToken, settingsFile); + document = await ConvertCsdlToOpenApi(stream, settingsFile, cancellationToken); stopwatch.Stop(); logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } @@ -328,7 +328,7 @@ internal static IConfiguration GetConfiguration(string settingsFile) /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApi(Stream csdl, CancellationToken token, string settingsFile = null) + public static async Task ConvertCsdlToOpenApi(Stream csdl, string settingsFile = null, CancellationToken token = default) { using var reader = new StreamReader(csdl); var csdlText = await reader.ReadToEndAsync(token); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 70b22275..3d764b4f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -20,7 +20,7 @@ public async Task ReturnConvertedCSDLFile() var csdlStream = fileInput.OpenRead(); // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream, CancellationToken.None); + var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); var expectedPathCount = 5; // Assert @@ -41,7 +41,7 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen var csdlStream = fileInput.OpenRead(); // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream, CancellationToken.None); + var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(openApiDoc, predicate); From 902549d173ad5d99c04ed980109e83edbc9def4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Dec 2022 21:01:29 +0000 Subject: [PATCH 205/720] Bump Moq from 4.18.3 to 4.18.4 Bumps [Moq](https://github.com/moq/moq4) from 4.18.3 to 4.18.4. - [Release notes](https://github.com/moq/moq4/releases) - [Changelog](https://github.com/moq/moq4/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq4/compare/v4.18.3...v4.18.4) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 4d052a56..578cdc9e 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ all - + runtime; build; native; contentfiles; analyzers; buildtransitive From f28bc4f1dada1c45a57516166e0c62dbfc4cd819 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Thu, 22 Dec 2022 22:54:07 -0500 Subject: [PATCH 206/720] Added show command --- .../Handlers/ShowCommandHandler.cs | 51 ++++++++ src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 114 ++++++++++++++++++ src/Microsoft.OpenApi.Hidi/Program.cs | 16 +++ src/Microsoft.OpenApi.Hidi/readme.md | 32 +++-- 4 files changed, 204 insertions(+), 9 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs new file mode 100644 index 00000000..e6542c34 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System; +using System.CommandLine; +using System.CommandLine.Invocation; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; + +namespace Microsoft.OpenApi.Hidi.Handlers +{ + internal class ShowCommandHandler : ICommandHandler + { + public Option DescriptionOption { get; set; } + public Option OutputOption { get; set; } + public Option LogLevelOption { get; set; } + + public int Invoke(InvocationContext context) + { + return InvokeAsync(context).GetAwaiter().GetResult(); + } + public async Task InvokeAsync(InvocationContext context) + { + string openapi = context.ParseResult.GetValueForOption(DescriptionOption); + FileInfo output = context.ParseResult.GetValueForOption(OutputOption); + LogLevel logLevel = context.ParseResult.GetValueForOption(LogLevelOption); + CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); + + using var loggerFactory = Logger.ConfigureLogger(logLevel); + var logger = loggerFactory.CreateLogger(); + try + { + await OpenApiService.ShowOpenApiDocument(openapi, output, logLevel, cancellationToken); + + return 0; + } + catch (Exception ex) + { +#if DEBUG + logger.LogCritical(ex, ex.Message); + throw; // so debug tools go straight to the source of the exception when attached +#else + logger.LogCritical( ex.Message); + return 1; +#endif + } + } + } +} diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 60bba4ae..a1f95a63 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -535,5 +535,119 @@ private static ILoggerFactory ConfigureLoggerInstance(LogLevel loglevel) .SetMinimumLevel(loglevel); }); } + + internal static async Task ShowOpenApiDocument(string openapi, FileInfo output, LogLevel logLevel, CancellationToken cancellationToken) + { + using var loggerFactory = Logger.ConfigureLogger(logLevel); + var logger = loggerFactory.CreateLogger(); + try + { + if (string.IsNullOrEmpty(openapi)) + { + throw new ArgumentNullException(nameof(openapi)); + } + var stream = await GetStream(openapi, logger, cancellationToken); + + OpenApiDocument document; + Stopwatch stopwatch = Stopwatch.StartNew(); + using (logger.BeginScope($"Parsing OpenAPI: {openapi}", openapi)) + { + stopwatch.Start(); + + var result = await new OpenApiStreamReader(new OpenApiReaderSettings + { + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).ReadAsync(stream); + + logger.LogTrace("{timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); + + document = result.OpenApiDocument; + var context = result.OpenApiDiagnostic; + if (context.Errors.Count != 0) + { + using (logger.BeginScope("Detected errors")) + { + foreach (var error in context.Errors) + { + logger.LogError(error.ToString()); + } + } + } + stopwatch.Stop(); + } + + using (logger.BeginScope("Creating diagram")) + { + // Create OpenApiUrlTree from document + + using var file = new FileStream(output.FullName, FileMode.Create); + var writer = new StreamWriter(file); + WriteTreeDocument(openapi, document, writer); + writer.Flush(); + + logger.LogTrace("Finished walking through the OpenApi document. "); + } + } + catch (Exception ex) + { + throw new InvalidOperationException($"Could not generate the document, reason: {ex.Message}", ex); + } + } + + private static void WriteTreeDocument(string openapi, OpenApiDocument document, StreamWriter writer) + { + var rootNode = OpenApiUrlTreeNode.Create(document, "main"); + + writer.WriteLine("# " + document.Info.Title); + writer.WriteLine(); + writer.WriteLine("OpenAPI: " + openapi); + writer.Write(@"
+GET +POST +GET POST +GET PATCH DELETE +GET PUT DELETE +GET DELETE +DELETE +
+"); + writer.WriteLine(); + writer.WriteLine("```mermaid"); + writer.WriteLine("graph LR"); + writer.WriteLine("classDef GET fill:lightSteelBlue,stroke:#333,stroke-width:2px;"); + writer.WriteLine("classDef POST fill:SteelBlue,stroke:#333,stroke-width:2px;"); + writer.WriteLine("classDef GETPOST fill:forestGreen,stroke:#333,stroke-width:2px;"); + writer.WriteLine("classDef DELETEGETPATCH fill:yellowGreen,stroke:#333,stroke-width:2px;"); + writer.WriteLine("classDef DELETEGETPUT fill:olive,stroke:#333,stroke-width:2px;"); + writer.WriteLine("classDef DELETEGET fill:DarkSeaGreen,stroke:#333,stroke-width:2px;"); + writer.WriteLine("classDef DELETE fill:tomato,stroke:#333,stroke-width:2px;"); + writer.WriteLine("classDef OTHER fill:white,stroke:#333,stroke-width:2px;"); + + ProcessNode(rootNode, writer); + writer.WriteLine("```"); + } + + private static void ProcessNode(OpenApiUrlTreeNode node, StreamWriter writer) + { + var path = string.IsNullOrEmpty(node.Path) ? "/" : Sanitize(node.Path); + foreach (var child in node.Children) + { + writer.WriteLine($"{Sanitize(path)} --> {Sanitize(child.Value.Path)}[{Sanitize(child.Key)}]"); + ProcessNode(child.Value, writer); + } + var methods = String.Join("", node.PathItems.SelectMany(p => p.Value.Operations.Select(o => o.Key)) + .Distinct() + .Select(o => o.ToString().ToUpper()) + .OrderBy(o => o) + .ToList()); + if (String.IsNullOrEmpty(methods)) methods = "OTHER"; + writer.WriteLine($"class {path} {methods}"); + } + + private static string Sanitize(string token) + { + return token.Replace("\\", "/").Replace("{", ":").Replace("}", ""); + } } } diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index e9246eb6..b9db1229 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -115,6 +115,22 @@ static async Task Main(string[] args) InlineExternalOption = inlineExternalOption }; + var showCommand = new Command("show") + { + descriptionOption, + logLevelOption, + outputOption, + cleanOutputOption + }; + + showCommand.Handler = new ShowCommandHandler + { + DescriptionOption = descriptionOption, + OutputOption = outputOption, + LogLevelOption = logLevelOption + }; + + rootCommand.Add(showCommand); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 6295c5c9..a6283817 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -1,24 +1,26 @@ -# Overview +# Overview Hidi is a command line tool that makes it easy to work with and transform OpenAPI documents. The tool enables you validate and apply transformations to and from different file formats using various commands to do different actions on the files. ## Capabilities + Hidi has these key capabilities that enable you to build different scenarios off the tool • Validation of OpenAPI files • Conversion of OpenAPI files into different file formats: convert files from JSON to YAML, YAML to JSON • Slice or filter OpenAPI documents to smaller subsets using operationIDs and tags + • Generate a Mermaid diagram of the API from an OpenAPI document - -## Installation +## Installation Install [Microsoft.OpenApi.Hidi](https://www.nuget.org/packages/Microsoft.OpenApi.Hidi/1.0.0-preview4) package from NuGet by running the following command: -### .NET CLI(Global) +### .NET CLI(Global) + 1. dotnet tool install --global Microsoft.OpenApi.Hidi --prerelease -### .NET CLI(local) +### .NET CLI(local) 1. dotnet new tool-manifest #if you are setting up the OpenAPI.NET repo 2. dotnet tool install --local Microsoft.OpenApi.Hidi --prerelease @@ -27,14 +29,17 @@ Install [Microsoft.OpenApi.Hidi](https://www.nuget.org/packages/Microsoft.OpenAp ## How to use Hidi + Once you've installed the package locally, you can invoke the Hidi by running: hidi [command]. You can access the list of command options we have by running hidi -h The tool avails the following commands: • Validate • Transform + • Show -### Validate +### Validate + This command option accepts an OpenAPI document as an input parameter, visits multiple OpenAPI elements within the document and returns statistics count report on the following elements: • Path Items @@ -54,9 +59,10 @@ It accepts the following command: **Example:** `hidi.exe validate --openapi C:\OpenApidocs\Mail.yml --loglevel trace` -Run validate -h to see the options available. - -### Transform +Run validate -h to see the options available. + +### Transform + Used to convert file formats from JSON to YAML and vice versa and performs slicing of OpenAPI documents. This command accepts the following parameters: @@ -90,3 +96,11 @@ This command accepts the following parameters: hidi transform -cs dataverse.csdl --csdlFilter "appointments,opportunities" -o appointmentsAndOpportunities.yaml -ll trace Run transform -h to see all the available usage options. + +### Show + +This command accepts an OpenAPI document as an input parameter and generates a Markdown file that contains a diagram of the API using Mermaid syntax. + +**Examples:** + + 1. hidi show -d files\People.yml -o People.md -ll trace From 4d9e6ec2918edf49a537d63a3c3906271f4b12b8 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Fri, 23 Dec 2022 12:42:12 -0500 Subject: [PATCH 207/720] Moved mermaid writer into OpenApiUrlTreeNode and fixed more sanitization issues --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 52 ++++---------------- 1 file changed, 9 insertions(+), 43 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index a1f95a63..881fda1e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -602,52 +602,18 @@ private static void WriteTreeDocument(string openapi, OpenApiDocument document, writer.WriteLine("# " + document.Info.Title); writer.WriteLine(); writer.WriteLine("OpenAPI: " + openapi); - writer.Write(@"
-GET -POST -GET POST -GET PATCH DELETE -GET PUT DELETE -GET DELETE -DELETE -
-"); - writer.WriteLine(); - writer.WriteLine("```mermaid"); - writer.WriteLine("graph LR"); - writer.WriteLine("classDef GET fill:lightSteelBlue,stroke:#333,stroke-width:2px;"); - writer.WriteLine("classDef POST fill:SteelBlue,stroke:#333,stroke-width:2px;"); - writer.WriteLine("classDef GETPOST fill:forestGreen,stroke:#333,stroke-width:2px;"); - writer.WriteLine("classDef DELETEGETPATCH fill:yellowGreen,stroke:#333,stroke-width:2px;"); - writer.WriteLine("classDef DELETEGETPUT fill:olive,stroke:#333,stroke-width:2px;"); - writer.WriteLine("classDef DELETEGET fill:DarkSeaGreen,stroke:#333,stroke-width:2px;"); - writer.WriteLine("classDef DELETE fill:tomato,stroke:#333,stroke-width:2px;"); - writer.WriteLine("classDef OTHER fill:white,stroke:#333,stroke-width:2px;"); - - ProcessNode(rootNode, writer); - writer.WriteLine("```"); - } - private static void ProcessNode(OpenApiUrlTreeNode node, StreamWriter writer) - { - var path = string.IsNullOrEmpty(node.Path) ? "/" : Sanitize(node.Path); - foreach (var child in node.Children) + writer.WriteLine(@"
"); + // write a span for each mermaidcolorscheme + foreach (var color in OpenApiUrlTreeNode.MermaidColorScheme) { - writer.WriteLine($"{Sanitize(path)} --> {Sanitize(child.Value.Path)}[{Sanitize(child.Key)}]"); - ProcessNode(child.Value, writer); + writer.WriteLine($"{color.Key.Replace("_"," ")}"); } - var methods = String.Join("", node.PathItems.SelectMany(p => p.Value.Operations.Select(o => o.Key)) - .Distinct() - .Select(o => o.ToString().ToUpper()) - .OrderBy(o => o) - .ToList()); - if (String.IsNullOrEmpty(methods)) methods = "OTHER"; - writer.WriteLine($"class {path} {methods}"); - } - - private static string Sanitize(string token) - { - return token.Replace("\\", "/").Replace("{", ":").Replace("}", ""); + writer.WriteLine("/div"); + writer.WriteLine(); + writer.WriteLine("```mermaid"); + rootNode.WriteMermaid(writer); + writer.WriteLine("```"); } } } From 8c441783d56e95460afb1b125aa5e593220cec0f Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 24 Dec 2022 18:35:42 -0500 Subject: [PATCH 208/720] Added shapes for better accessibility --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 881fda1e..fbbacb14 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -605,11 +605,11 @@ private static void WriteTreeDocument(string openapi, OpenApiDocument document, writer.WriteLine(@"
"); // write a span for each mermaidcolorscheme - foreach (var color in OpenApiUrlTreeNode.MermaidColorScheme) + foreach (var style in OpenApiUrlTreeNode.MermaidNodeStyles) { - writer.WriteLine($"{color.Key.Replace("_"," ")}"); + writer.WriteLine($"{style.Key.Replace("_"," ")}"); } - writer.WriteLine("/div"); + writer.WriteLine("
"); writer.WriteLine(); writer.WriteLine("```mermaid"); rootNode.WriteMermaid(writer); From 23bdaa2076fa372f98219376cdbb51619da805b4 Mon Sep 17 00:00:00 2001 From: Darrel Date: Sat, 24 Dec 2022 19:06:22 -0500 Subject: [PATCH 209/720] Update to do a unnecessary using Co-authored-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index fbbacb14..0df940d0 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -582,7 +582,7 @@ internal static async Task ShowOpenApiDocument(string openapi, FileInfo output, // Create OpenApiUrlTree from document using var file = new FileStream(output.FullName, FileMode.Create); - var writer = new StreamWriter(file); + using var writer = new StreamWriter(file); WriteTreeDocument(openapi, document, writer); writer.Flush(); From c02d2728f26406352a792a536d802d5650973e6b Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 24 Dec 2022 19:15:57 -0500 Subject: [PATCH 210/720] Added a bunch of usings and removed an unnecessary flush to address comments --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 0df940d0..52d2e4fc 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -265,7 +265,7 @@ public static async Task ValidateOpenApiDocument( { throw new ArgumentNullException(nameof(openapi)); } - var stream = await GetStream(openapi, logger, cancellationToken); + using var stream = await GetStream(openapi, logger, cancellationToken); OpenApiDocument document; Stopwatch stopwatch = Stopwatch.StartNew(); @@ -546,7 +546,7 @@ internal static async Task ShowOpenApiDocument(string openapi, FileInfo output, { throw new ArgumentNullException(nameof(openapi)); } - var stream = await GetStream(openapi, logger, cancellationToken); + using var stream = await GetStream(openapi, logger, cancellationToken); OpenApiDocument document; Stopwatch stopwatch = Stopwatch.StartNew(); @@ -584,7 +584,6 @@ internal static async Task ShowOpenApiDocument(string openapi, FileInfo output, using var file = new FileStream(output.FullName, FileMode.Create); using var writer = new StreamWriter(file); WriteTreeDocument(openapi, document, writer); - writer.Flush(); logger.LogTrace("Finished walking through the OpenApi document. "); } From 12c7bd23f5ef7606fb2b6de9c770a165b944df9f Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Tue, 3 Jan 2023 23:08:02 -0500 Subject: [PATCH 211/720] Fixed data in broken test --- .../Services/OpenApiServiceTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 3d764b4f..a080db11 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -30,7 +30,7 @@ public async Task ReturnConvertedCSDLFile() } [Theory] - [InlineData("Todos.Todo.UpdateTodo",null, 1)] + [InlineData("Todos.Todo.UpdateTodoById",null, 1)] [InlineData("Todos.Todo.ListTodo",null, 1)] [InlineData(null, "Todos.Todo", 4)] public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) From 4f6ebaf09254a90f5c76fd25cdabcfeee4ac99a4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 4 Jan 2023 09:56:15 -0500 Subject: [PATCH 212/720] - bumps hidi version to get latest odata and mermaid Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e27a214d..e23533fb 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.1.0 + 1.2.0 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From f4db838897e226d15043badacf77c152f36014d4 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 5 Jan 2023 11:48:13 +0300 Subject: [PATCH 213/720] Fix failing test by updating operation id --- .../Services/OpenApiServiceTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 3d764b4f..37948228 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -30,8 +30,8 @@ public async Task ReturnConvertedCSDLFile() } [Theory] - [InlineData("Todos.Todo.UpdateTodo",null, 1)] - [InlineData("Todos.Todo.ListTodo",null, 1)] + [InlineData("Todos.Todo.UpdateTodoById", null, 1)] + [InlineData("Todos.Todo.ListTodo", null, 1)] [InlineData(null, "Todos.Todo", 4)] public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) { From 902901d20809472fe869d6d90b4ca1e7a16b018d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 5 Jan 2023 12:30:31 +0300 Subject: [PATCH 214/720] Fix failing test --- .../Services/OpenApiServiceTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 3d764b4f..a080db11 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -30,7 +30,7 @@ public async Task ReturnConvertedCSDLFile() } [Theory] - [InlineData("Todos.Todo.UpdateTodo",null, 1)] + [InlineData("Todos.Todo.UpdateTodoById",null, 1)] [InlineData("Todos.Todo.ListTodo",null, 1)] [InlineData(null, "Todos.Todo", 4)] public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) From c6864eb3a3d84a0f3b71e22a439157be7a3fa12b Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Thu, 5 Jan 2023 14:27:41 -0500 Subject: [PATCH 215/720] Refactored OpenAPIService to remove duplicate code --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 145 +++++++------------ 1 file changed, 50 insertions(+), 95 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 52d2e4fc..d2eb2e22 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -29,6 +29,7 @@ using System.Reflection; using Microsoft.Extensions.Configuration; using System.Runtime.CompilerServices; +using System.Reflection.Metadata; namespace Microsoft.OpenApi.Hidi { @@ -110,43 +111,13 @@ CancellationToken cancellationToken else { stream = await GetStream(openapi, logger, cancellationToken); - - using (logger.BeginScope($"Parse OpenAPI: {openapi}",openapi)) - { - stopwatch.Restart(); - var result = await new OpenApiStreamReader(new OpenApiReaderSettings - { - RuleSet = ValidationRuleSet.GetDefaultRuleSet(), - LoadExternalRefs = inlineExternal, - BaseUrl = openapi.StartsWith("http") ? new Uri(openapi) : new Uri("file:" + new FileInfo(openapi).DirectoryName + "\\") - } - ).ReadAsync(stream); - - document = result.OpenApiDocument; - - var context = result.OpenApiDiagnostic; - if (context.Errors.Count > 0) - { - logger.LogTrace("{timestamp}ms: Parsed OpenAPI with errors. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); - - var errorReport = new StringBuilder(); - - foreach (var error in context.Errors) - { - logger.LogError("OpenApi Parsing error: {message}", error.ToString()); - errorReport.AppendLine(error.ToString()); - } - logger.LogError($"{stopwatch.ElapsedMilliseconds}ms: OpenApi Parsing errors {string.Join(Environment.NewLine, context.Errors.Select(e => e.Message).ToArray())}"); - } - else - { - logger.LogTrace("{timestamp}ms: Parsed OpenApi successfully. {count} paths found.", stopwatch.ElapsedMilliseconds, document.Paths.Count); - } - - openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; - stopwatch.Stop(); - } + stopwatch.Restart(); + var result = await ParseOpenApi(openapi, logger, stream); + document = result.OpenApiDocument; + + openApiFormat = format ?? GetOpenApiFormat(openapi, logger); + openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; + stopwatch.Stop(); } using (logger.BeginScope("Filter")) @@ -267,40 +238,13 @@ public static async Task ValidateOpenApiDocument( } using var stream = await GetStream(openapi, logger, cancellationToken); - OpenApiDocument document; - Stopwatch stopwatch = Stopwatch.StartNew(); - using (logger.BeginScope($"Parsing OpenAPI: {openapi}", openapi)) - { - stopwatch.Start(); - - var result = await new OpenApiStreamReader(new OpenApiReaderSettings - { - RuleSet = ValidationRuleSet.GetDefaultRuleSet() - } - ).ReadAsync(stream); - - logger.LogTrace("{timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); - - document = result.OpenApiDocument; - var context = result.OpenApiDiagnostic; - if (context.Errors.Count != 0) - { - using (logger.BeginScope("Detected errors")) - { - foreach (var error in context.Errors) - { - logger.LogError(error.ToString()); - } - } - } - stopwatch.Stop(); - } + var result = await ParseOpenApi(openapi, logger, stream); using (logger.BeginScope("Calculating statistics")) { var statsVisitor = new StatsVisitor(); var walker = new OpenApiWalker(statsVisitor); - walker.Walk(document); + walker.Walk(result.OpenApiDocument); logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); logger.LogInformation(statsVisitor.GetStatisticsReport()); @@ -312,6 +256,29 @@ public static async Task ValidateOpenApiDocument( } } + private static async Task ParseOpenApi(string openApiFile, ILogger logger, Stream stream) + { + ReadResult result; + Stopwatch stopwatch = Stopwatch.StartNew(); + using (logger.BeginScope($"Parsing OpenAPI: {openApiFile}", openApiFile)) + { + stopwatch.Start(); + + result = await new OpenApiStreamReader(new OpenApiReaderSettings + { + RuleSet = ValidationRuleSet.GetDefaultRuleSet() + } + ).ReadAsync(stream); + + logger.LogTrace("{timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); + + LogErrors(logger, result); + stopwatch.Stop(); + } + + return result; + } + internal static IConfiguration GetConfiguration(string settingsFile) { settingsFile ??= "appsettings.json"; @@ -548,34 +515,7 @@ internal static async Task ShowOpenApiDocument(string openapi, FileInfo output, } using var stream = await GetStream(openapi, logger, cancellationToken); - OpenApiDocument document; - Stopwatch stopwatch = Stopwatch.StartNew(); - using (logger.BeginScope($"Parsing OpenAPI: {openapi}", openapi)) - { - stopwatch.Start(); - - var result = await new OpenApiStreamReader(new OpenApiReaderSettings - { - RuleSet = ValidationRuleSet.GetDefaultRuleSet() - } - ).ReadAsync(stream); - - logger.LogTrace("{timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); - - document = result.OpenApiDocument; - var context = result.OpenApiDiagnostic; - if (context.Errors.Count != 0) - { - using (logger.BeginScope("Detected errors")) - { - foreach (var error in context.Errors) - { - logger.LogError(error.ToString()); - } - } - } - stopwatch.Stop(); - } + var result = await ParseOpenApi(openapi, logger, stream); using (logger.BeginScope("Creating diagram")) { @@ -583,7 +523,7 @@ internal static async Task ShowOpenApiDocument(string openapi, FileInfo output, using var file = new FileStream(output.FullName, FileMode.Create); using var writer = new StreamWriter(file); - WriteTreeDocument(openapi, document, writer); + WriteTreeDocument(openapi, result.OpenApiDocument, writer); logger.LogTrace("Finished walking through the OpenApi document. "); } @@ -594,6 +534,21 @@ internal static async Task ShowOpenApiDocument(string openapi, FileInfo output, } } + private static void LogErrors(ILogger logger, ReadResult result) + { + var context = result.OpenApiDiagnostic; + if (context.Errors.Count != 0) + { + using (logger.BeginScope("Detected errors")) + { + foreach (var error in context.Errors) + { + logger.LogError(error.ToString()); + } + } + } + } + private static void WriteTreeDocument(string openapi, OpenApiDocument document, StreamWriter writer) { var rootNode = OpenApiUrlTreeNode.Create(document, "main"); From 3d1d7302bc5e6a913c484d8cb9eb6ad7d16c197f Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 8 Jan 2023 10:30:07 -0500 Subject: [PATCH 216/720] Added tests for mermaid diagrams --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- .../Services/OpenApiServiceTests.cs | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index d2eb2e22..73c9fc33 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -549,13 +549,13 @@ private static void LogErrors(ILogger logger, ReadResult result) } } - private static void WriteTreeDocument(string openapi, OpenApiDocument document, StreamWriter writer) + internal static void WriteTreeDocument(string openapiUrl, OpenApiDocument document, StreamWriter writer) { var rootNode = OpenApiUrlTreeNode.Create(document, "main"); writer.WriteLine("# " + document.Info.Title); writer.WriteLine(); - writer.WriteLine("OpenAPI: " + openapi); + writer.WriteLine("OpenAPI: " + openapiUrl); writer.WriteLine(@"
"); // write a span for each mermaidcolorscheme diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index a080db11..eb0872b3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -1,10 +1,14 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.Text; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi; +using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Services; +using Microsoft.VisualStudio.TestPlatform.Utilities; using Xunit; namespace Microsoft.OpenApi.Tests.Services @@ -71,5 +75,24 @@ public void ReturnOpenApiConvertSettingsWhenSettingsFileIsProvided(string filePa Assert.NotNull(settings); } } + + [Fact] + public void ShowCommandGeneratesMermaidDiagram() + { + var openApiDoc = new OpenApiDocument(); + openApiDoc.Info = new OpenApiInfo + { + Title = "Test", + Version = "1.0.0" + }; + var stream = new MemoryStream(); + using var writer = new StreamWriter(stream); + OpenApiService.WriteTreeDocument("https://example.org/openapi.json", openApiDoc, writer); + writer.Flush(); + stream.Position = 0; + using var reader = new StreamReader(stream); + var output = reader.ReadToEnd(); + Assert.Contains("graph LR", output); + } } } From 0561f339ee3b14e4d1f465cb3bfc914010831724 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 11 Jan 2023 17:44:02 -0500 Subject: [PATCH 217/720] Added test for show command --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 3 +++ .../Services/OpenApiServiceTests.cs | 10 ++++++++++ .../UtilityFiles/SampleOpenApi.yml | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/SampleOpenApi.yml diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 578cdc9e..aaaa66cb 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -53,6 +53,9 @@ Always + + PreserveNewest + Always diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index eb0872b3..fd1ea0d5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -94,5 +94,15 @@ public void ShowCommandGeneratesMermaidDiagram() var output = reader.ReadToEnd(); Assert.Contains("graph LR", output); } + + [Fact] + public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() + { + var fileinfo = new FileInfo("sample.md"); + await OpenApiService.ShowOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", fileinfo, LogLevel.Information, new CancellationToken()); + + var output = File.ReadAllText(fileinfo.FullName); + Assert.Contains("graph LR", output); + } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/SampleOpenApi.yml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/SampleOpenApi.yml new file mode 100644 index 00000000..c4fb2e62 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/SampleOpenApi.yml @@ -0,0 +1,19 @@ +openapi: 3.0.0 +info: + title: Sample OpenApi + version: 1.0.0 +paths: + /api/editresource: + get: + responses: + '200': + description: OK + patch: + responses: + '200': + description: OK + /api/viewresource: + get: + responses: + '200': + description: OK \ No newline at end of file From d642c07447bbecff5b1b0d46a9de973467ea1fa1 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 11 Jan 2023 21:29:39 -0500 Subject: [PATCH 218/720] Refactored to improve test coverage --- src/Microsoft.OpenApi.Hidi/Program.cs | 32 +++++++++++-------- .../Services/OpenApiServiceTests.cs | 27 ++++++++++++++++ 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index b9db1229..03aac121 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -16,8 +16,19 @@ namespace Microsoft.OpenApi.Hidi static class Program { static async Task Main(string[] args) - { - var rootCommand = new RootCommand() {}; + { + var rootCommand = CreateRootCommand(); + + // Parse the incoming args and invoke the handler + await rootCommand.InvokeAsync(args); + + //// Wait for logger to write messages to the console before exiting + await Task.Delay(10); + } + + internal static RootCommand CreateRootCommand() + { + var rootCommand = new RootCommand() { }; // command option parameters and aliases var descriptionOption = new Option("--openapi", "Input OpenAPI description file path or URL"); @@ -46,7 +57,7 @@ static async Task Main(string[] args) var settingsFileOption = new Option("--settings-path", "The configuration file with CSDL conversion settings."); settingsFileOption.AddAlias("--sp"); - + var logLevelOption = new Option("--log-level", () => LogLevel.Information, "The log level to use when logging messages to the main output."); logLevelOption.AddAlias("--ll"); @@ -71,7 +82,7 @@ static async Task Main(string[] args) logLevelOption }; - validateCommand.Handler = new ValidateCommandHandler + validateCommand.Handler = new ValidateCommandHandler { DescriptionOption = descriptionOption, LogLevelOption = logLevelOption @@ -88,7 +99,7 @@ static async Task Main(string[] args) formatOption, terseOutputOption, settingsFileOption, - logLevelOption, + logLevelOption, filterByOperationIdsOption, filterByTagsOption, filterByCollectionOption, @@ -123,7 +134,7 @@ static async Task Main(string[] args) cleanOutputOption }; - showCommand.Handler = new ShowCommandHandler + showCommand.Handler = new ShowCommandHandler { DescriptionOption = descriptionOption, OutputOption = outputOption, @@ -133,12 +144,7 @@ static async Task Main(string[] args) rootCommand.Add(showCommand); rootCommand.Add(transformCommand); rootCommand.Add(validateCommand); - - // Parse the incoming args and invoke the handler - await rootCommand.InvokeAsync(args); - - //// Wait for logger to write messages to the console before exiting - await Task.Delay(10); - } + return rootCommand; + } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index fd1ea0d5..020f0db9 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -1,10 +1,13 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.CommandLine; +using System.CommandLine.Invocation; using System.Text; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi; +using Microsoft.OpenApi.Hidi.Handlers; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Services; @@ -104,5 +107,29 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() var output = File.ReadAllText(fileinfo.FullName); Assert.Contains("graph LR", output); } + + [Fact] + public async Task InvokeShowCommand() + { + var rootCommand = Program.CreateRootCommand(); + var args = new string[] { "show", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.md" }; + var parseResult = rootCommand.Parse(args); + var handler = rootCommand.Subcommands.Where(c => c.Name == "show").First().Handler; + var context = new InvocationContext(parseResult); + + await handler.InvokeAsync(context); + + var output = File.ReadAllText("sample.md"); + Assert.Contains("graph LR", output); + } + + + // Relatively useless test to keep the code coverage metrics happy + [Fact] + public void CreateRootCommand() + { + var rootCommand = Program.CreateRootCommand(); + Assert.NotNull(rootCommand); + } } } From 8763b1b604c9556534dc151ac6d8e44ddb380e51 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 11 Jan 2023 21:43:14 -0500 Subject: [PATCH 219/720] Change test to call sync invoke --- .../Services/OpenApiServiceTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 020f0db9..db30d2ef 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -109,7 +109,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() } [Fact] - public async Task InvokeShowCommand() + public void InvokeShowCommand() { var rootCommand = Program.CreateRootCommand(); var args = new string[] { "show", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.md" }; @@ -117,7 +117,7 @@ public async Task InvokeShowCommand() var handler = rootCommand.Subcommands.Where(c => c.Name == "show").First().Handler; var context = new InvocationContext(parseResult); - await handler.InvokeAsync(context); + handler.Invoke(context); var output = File.ReadAllText("sample.md"); Assert.Contains("graph LR", output); From a018b81746977799e6ecc5b36075f872bfb63183 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Wed, 11 Jan 2023 22:18:10 -0500 Subject: [PATCH 220/720] Added back missing parameter config options in parseopenapi --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 73c9fc33..dfd1886a 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -112,7 +112,7 @@ CancellationToken cancellationToken { stream = await GetStream(openapi, logger, cancellationToken); stopwatch.Restart(); - var result = await ParseOpenApi(openapi, logger, stream); + var result = await ParseOpenApi(openapi, inlineExternal, logger, stream); document = result.OpenApiDocument; openApiFormat = format ?? GetOpenApiFormat(openapi, logger); @@ -238,7 +238,7 @@ public static async Task ValidateOpenApiDocument( } using var stream = await GetStream(openapi, logger, cancellationToken); - var result = await ParseOpenApi(openapi, logger, stream); + var result = await ParseOpenApi(openapi, false, logger, stream); using (logger.BeginScope("Calculating statistics")) { @@ -256,7 +256,7 @@ public static async Task ValidateOpenApiDocument( } } - private static async Task ParseOpenApi(string openApiFile, ILogger logger, Stream stream) + private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream) { ReadResult result; Stopwatch stopwatch = Stopwatch.StartNew(); @@ -266,7 +266,9 @@ private static async Task ParseOpenApi(string openApiFile, ILogger Date: Fri, 13 Jan 2023 21:01:47 +0000 Subject: [PATCH 221/720] Bump Microsoft.OData.Edm from 7.13.0 to 7.14.0 Bumps Microsoft.OData.Edm from 7.13.0 to 7.14.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e23533fb..232830c3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From 4e110fbbb8ddf4b7a09b5dae180511612d0cc795 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 14 Jan 2023 20:33:05 -0500 Subject: [PATCH 222/720] Removed Task.Delay as no longer necessary. #1127 --- src/Microsoft.OpenApi.Hidi/Program.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 03aac121..056da9ab 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -22,8 +22,6 @@ static async Task Main(string[] args) // Parse the incoming args and invoke the handler await rootCommand.InvokeAsync(args); - //// Wait for logger to write messages to the console before exiting - await Task.Delay(10); } internal static RootCommand CreateRootCommand() @@ -129,6 +127,8 @@ internal static RootCommand CreateRootCommand() var showCommand = new Command("show") { descriptionOption, + csdlOption, + csdlFilterOption, logLevelOption, outputOption, cleanOutputOption @@ -137,6 +137,8 @@ internal static RootCommand CreateRootCommand() showCommand.Handler = new ShowCommandHandler { DescriptionOption = descriptionOption, + CsdlOption = csdlOption, + CsdlFilterOption = csdlFilterOption, OutputOption = outputOption, LogLevelOption = logLevelOption }; From 04aa29126e958b902b8f6778c848329ef954d290 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 14 Jan 2023 20:33:59 -0500 Subject: [PATCH 223/720] Updated commands to enable reading from CSDL url for both transform and show commands --- .../Handlers/ShowCommandHandler.cs | 7 +- .../Handlers/TransformCommandHandler.cs | 2 +- .../Handlers/ValidateCommandHandler.cs | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 345 +++++++++++------- .../Services/OpenApiServiceTests.cs | 44 ++- 5 files changed, 254 insertions(+), 146 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs index e6542c34..6974e76d 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs @@ -16,6 +16,9 @@ internal class ShowCommandHandler : ICommandHandler public Option DescriptionOption { get; set; } public Option OutputOption { get; set; } public Option LogLevelOption { get; set; } + public Option CsdlOption { get; set; } + public Option CsdlFilterOption { get; set; } + public int Invoke(InvocationContext context) { @@ -26,13 +29,15 @@ public async Task InvokeAsync(InvocationContext context) string openapi = context.ParseResult.GetValueForOption(DescriptionOption); FileInfo output = context.ParseResult.GetValueForOption(OutputOption); LogLevel logLevel = context.ParseResult.GetValueForOption(LogLevelOption); + string csdlFilter = context.ParseResult.GetValueForOption(CsdlFilterOption); + string csdl = context.ParseResult.GetValueForOption(CsdlOption); CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(logLevel); var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.ShowOpenApiDocument(openapi, output, logLevel, cancellationToken); + await OpenApiService.ShowOpenApiDocument(openapi, csdl, csdlFilter, output, logger, cancellationToken); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index e46b3434..d0a49c20 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -57,7 +57,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, format, terseOutput, settingsFile, logLevel, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, cancellationToken); + await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, format, terseOutput, settingsFile, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, logger, cancellationToken); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index 2faa771e..416471d9 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -30,7 +30,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.ValidateOpenApiDocument(openapi, logLevel, cancellationToken); + await OpenApiService.ValidateOpenApiDocument(openapi, logger, cancellationToken); return 0; } catch (Exception ex) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index dfd1886a..c54b65db 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -28,8 +28,6 @@ using System.Xml; using System.Reflection; using Microsoft.Extensions.Configuration; -using System.Runtime.CompilerServices; -using System.Reflection.Metadata; namespace Microsoft.OpenApi.Hidi { @@ -48,22 +46,21 @@ public static async Task TransformOpenApiDocument( OpenApiFormat? format, bool terseOutput, string settingsFile, - LogLevel logLevel, bool inlineLocal, bool inlineExternal, string filterbyoperationids, string filterbytags, string filterbycollection, + ILogger logger, CancellationToken cancellationToken ) { - using var loggerFactory = Logger.ConfigureLogger(logLevel); - var logger = loggerFactory.CreateLogger(); + try { if (string.IsNullOrEmpty(openapi) && string.IsNullOrEmpty(csdl)) { - throw new ArgumentException("Please input a file path"); + throw new ArgumentException("Please input a file path or URL"); } if (output == null) { @@ -79,122 +76,136 @@ CancellationToken cancellationToken throw new IOException($"The file {output} already exists. Please input a new file path."); } - Stream stream; - OpenApiDocument document; - OpenApiFormat openApiFormat; - OpenApiSpecVersion openApiVersion; - var stopwatch = new Stopwatch(); + // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion + OpenApiFormat openApiFormat = format ?? (!string.IsNullOrEmpty(openapi) ? GetOpenApiFormat(openapi, logger) : OpenApiFormat.Yaml); + OpenApiSpecVersion openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : OpenApiSpecVersion.OpenApi3_0; - if (!string.IsNullOrEmpty(csdl)) - { - using (logger.BeginScope($"Convert CSDL: {csdl}", csdl)) - { - stopwatch.Start(); - // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion - openApiFormat = format ?? GetOpenApiFormat(csdl, logger); - openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : OpenApiSpecVersion.OpenApi3_0; - - stream = await GetStream(csdl, logger, cancellationToken); + OpenApiDocument document = await GetOpenApi(openapi, csdl, csdlFilter, settingsFile, inlineExternal, logger, cancellationToken); + document = await FilterOpenApiDocument(filterbyoperationids, filterbytags, filterbycollection, document, logger, cancellationToken); + WriteOpenApi(output, terseOutput, inlineLocal, inlineExternal, openApiFormat, openApiVersion, document, logger); + } + catch (TaskCanceledException) + { + Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); + } + catch (Exception ex) + { + throw new InvalidOperationException($"Could not transform the document, reason: {ex.Message}", ex); + } + } - if (!string.IsNullOrEmpty(csdlFilter)) - { - XslCompiledTransform transform = GetFilterTransform(); - stream = ApplyFilter(csdl, csdlFilter, transform); - stream.Position = 0; - } + private static void WriteOpenApi(FileInfo output, bool terseOutput, bool inlineLocal, bool inlineExternal, OpenApiFormat openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger) + { + using (logger.BeginScope("Output")) + { + using var outputStream = output?.Create(); + var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; - document = await ConvertCsdlToOpenApi(stream, settingsFile, cancellationToken); - stopwatch.Stop(); - logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); - } - } - else + var settings = new OpenApiWriterSettings() { - stream = await GetStream(openapi, logger, cancellationToken); - stopwatch.Restart(); - var result = await ParseOpenApi(openapi, inlineExternal, logger, stream); - document = result.OpenApiDocument; - - openApiFormat = format ?? GetOpenApiFormat(openapi, logger); - openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : result.OpenApiDiagnostic.SpecificationVersion; - stopwatch.Stop(); - } + InlineLocalReferences = inlineLocal, + InlineExternalReferences = inlineExternal + }; - using (logger.BeginScope("Filter")) + IOpenApiWriter writer = openApiFormat switch { - Func predicate = null; + OpenApiFormat.Json => terseOutput ? new OpenApiJsonWriter(textWriter, settings, terseOutput) : new OpenApiJsonWriter(textWriter, settings, false), + OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), + _ => throw new ArgumentException("Unknown format"), + }; - // Check if filter options are provided, then slice the OpenAPI document - if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) - { - throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); - } - if (!string.IsNullOrEmpty(filterbyoperationids)) - { - logger.LogTrace("Creating predicate based on the operationIds supplied."); - predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); + logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); - } - if (!string.IsNullOrEmpty(filterbytags)) - { - logger.LogTrace("Creating predicate based on the tags supplied."); - predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); + var stopwatch = new Stopwatch(); + stopwatch.Start(); + document.Serialize(writer, openApiVersion); + stopwatch.Stop(); - } - if (!string.IsNullOrEmpty(filterbycollection)) - { - var fileStream = await GetStream(filterbycollection, logger, cancellationToken); - var requestUrls = ParseJsonCollectionFile(fileStream, logger); + logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); + textWriter.Flush(); + } + } - logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); - predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: document); - } - if (predicate != null) + // Get OpenAPI document either from OpenAPI or CSDL + private static async Task GetOpenApi(string openapi, string csdl, string csdlFilter, string settingsFile, bool inlineExternal, ILogger logger, CancellationToken cancellationToken) + { + OpenApiDocument document; + Stream stream; + + if (!string.IsNullOrEmpty(csdl)) + { + var stopwatch = new Stopwatch(); + using (logger.BeginScope($"Convert CSDL: {csdl}", csdl)) + { + stopwatch.Start(); + stream = await GetStream(csdl, logger, cancellationToken); + Stream filteredStream = null; + if (!string.IsNullOrEmpty(csdlFilter)) { - stopwatch.Restart(); - document = OpenApiFilterService.CreateFilteredDocument(document, predicate); - stopwatch.Stop(); - logger.LogTrace("{timestamp}ms: Creating filtered OpenApi document with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + XslCompiledTransform transform = GetFilterTransform(); + filteredStream = ApplyFilterToCsdl(stream, csdlFilter, transform); + filteredStream.Position = 0; + stream.Dispose(); + stream = null; } + + document = await ConvertCsdlToOpenApi(filteredStream ?? stream, settingsFile, cancellationToken); + stopwatch.Stop(); + logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } + } + else + { + stream = await GetStream(openapi, logger, cancellationToken); + var result = await ParseOpenApi(openapi, inlineExternal, logger, stream); + document = result.OpenApiDocument; + } - using (logger.BeginScope("Output")) - { - ; - using var outputStream = output?.Create(); - var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; + return document; + } - var settings = new OpenApiWriterSettings() - { - InlineLocalReferences = inlineLocal, - InlineExternalReferences = inlineExternal - }; + private static async Task FilterOpenApiDocument(string filterbyoperationids, string filterbytags, string filterbycollection, OpenApiDocument document, ILogger logger, CancellationToken cancellationToken) + { + using (logger.BeginScope("Filter")) + { + Func predicate = null; - IOpenApiWriter writer = openApiFormat switch - { - OpenApiFormat.Json => terseOutput ? new OpenApiJsonWriter(textWriter, settings, terseOutput) : new OpenApiJsonWriter(textWriter, settings, false), - OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), - _ => throw new ArgumentException("Unknown format"), - }; + // Check if filter options are provided, then slice the OpenAPI document + if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) + { + throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); + } + if (!string.IsNullOrEmpty(filterbyoperationids)) + { + logger.LogTrace("Creating predicate based on the operationIds supplied."); + predicate = OpenApiFilterService.CreatePredicate(operationIds: filterbyoperationids); + + } + if (!string.IsNullOrEmpty(filterbytags)) + { + logger.LogTrace("Creating predicate based on the tags supplied."); + predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); - logger.LogTrace("Serializing to OpenApi document using the provided spec version and writer"); + } + if (!string.IsNullOrEmpty(filterbycollection)) + { + var fileStream = await GetStream(filterbycollection, logger, cancellationToken); + var requestUrls = ParseJsonCollectionFile(fileStream, logger); + logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); + predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: document); + } + if (predicate != null) + { + var stopwatch = new Stopwatch(); stopwatch.Start(); - document.Serialize(writer, openApiVersion); + document = OpenApiFilterService.CreateFilteredDocument(document, predicate); stopwatch.Stop(); - - logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); - textWriter.Flush(); + logger.LogTrace("{timestamp}ms: Creating filtered OpenApi document with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } } - catch(TaskCanceledException) - { - Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); - } - catch (Exception ex) - { - throw new InvalidOperationException($"Could not transform the document, reason: {ex.Message}", ex); - } + + return document; } private static XslCompiledTransform GetFilterTransform() @@ -206,10 +217,10 @@ private static XslCompiledTransform GetFilterTransform() return transform; } - private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslCompiledTransform transform) + private static Stream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) { Stream stream; - StreamReader inputReader = new(csdl); + StreamReader inputReader = new(csdlStream); XmlReader inputXmlReader = XmlReader.Create(inputReader); MemoryStream filteredStream = new(); StreamWriter writer = new(filteredStream); @@ -225,11 +236,9 @@ private static Stream ApplyFilter(string csdl, string entitySetOrSingleton, XslC /// public static async Task ValidateOpenApiDocument( string openapi, - LogLevel logLevel, + ILogger logger, CancellationToken cancellationToken) { - using var loggerFactory = Logger.ConfigureLogger(logLevel); - var logger = loggerFactory.CreateLogger(); try { if (string.IsNullOrEmpty(openapi)) @@ -250,13 +259,17 @@ public static async Task ValidateOpenApiDocument( logger.LogInformation(statsVisitor.GetStatisticsReport()); } } + catch (TaskCanceledException) + { + Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); + } catch (Exception ex) { throw new InvalidOperationException($"Could not validate the document, reason: {ex.Message}", ex); } } - private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream) + private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream) { ReadResult result; Stopwatch stopwatch = Stopwatch.StartNew(); @@ -486,57 +499,60 @@ private static string GetInputPathExtension(string openapi = null, string csdl = return extension; } - private static ILoggerFactory ConfigureLoggerInstance(LogLevel loglevel) + internal static async Task ShowOpenApiDocument(string openapi, string csdl, string csdlFilter, FileInfo output, ILogger logger, CancellationToken cancellationToken) { - // Configure logger options -#if DEBUG - loglevel = loglevel > LogLevel.Debug ? LogLevel.Debug : loglevel; -#endif - - return Microsoft.Extensions.Logging.LoggerFactory.Create((builder) => { - builder - .AddSimpleConsole(c => { - c.IncludeScopes = true; - }) -#if DEBUG - .AddDebug() -#endif - .SetMinimumLevel(loglevel); - }); - } - - internal static async Task ShowOpenApiDocument(string openapi, FileInfo output, LogLevel logLevel, CancellationToken cancellationToken) - { - using var loggerFactory = Logger.ConfigureLogger(logLevel); - var logger = loggerFactory.CreateLogger(); try { - if (string.IsNullOrEmpty(openapi)) + if (string.IsNullOrEmpty(openapi) && string.IsNullOrEmpty(csdl)) { - throw new ArgumentNullException(nameof(openapi)); + throw new ArgumentException("Please input a file path or URL"); } - using var stream = await GetStream(openapi, logger, cancellationToken); - var result = await ParseOpenApi(openapi, false, logger, stream); + var document = await GetOpenApi(openapi, csdl, csdlFilter, null, false, logger, cancellationToken); using (logger.BeginScope("Creating diagram")) { - // Create OpenApiUrlTree from document + // If output is null, create a HTML file in the user's temporary directory + if (output == null) + { + var tempPath = Path.GetTempPath(); - using var file = new FileStream(output.FullName, FileMode.Create); - using var writer = new StreamWriter(file); - WriteTreeDocument(openapi, result.OpenApiDocument, writer); + output = new FileInfo(Path.Combine(tempPath, "apitree.html")); + using (var file = new FileStream(output.FullName, FileMode.Create)) + { + using var writer = new StreamWriter(file); + WriteTreeDocumentAsHtml(openapi ?? csdl, document, writer); + } + logger.LogTrace("Created Html document with diagram "); - logger.LogTrace("Finished walking through the OpenApi document. "); + // Launch a browser to display the output html file + var process = new Process(); + process.StartInfo.FileName = output.FullName; + process.StartInfo.UseShellExecute = true; + process.Start(); + } + else // Write diagram as Markdown document to output file + { + using (var file = new FileStream(output.FullName, FileMode.Create)) + { + using var writer = new StreamWriter(file); + WriteTreeDocumentAsMarkdown(openapi ?? csdl, document, writer); + } + logger.LogTrace("Created markdown document with diagram "); + } } } + catch (TaskCanceledException) + { + Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); + } catch (Exception ex) { throw new InvalidOperationException($"Could not generate the document, reason: {ex.Message}", ex); } } - private static void LogErrors(ILogger logger, ReadResult result) + private static void LogErrors(ILogger logger, ReadResult result) { var context = result.OpenApiDiagnostic; if (context.Errors.Count != 0) @@ -551,13 +567,13 @@ private static void LogErrors(ILogger logger, ReadResult result) } } - internal static void WriteTreeDocument(string openapiUrl, OpenApiDocument document, StreamWriter writer) + internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocument document, StreamWriter writer) { var rootNode = OpenApiUrlTreeNode.Create(document, "main"); writer.WriteLine("# " + document.Info.Title); writer.WriteLine(); - writer.WriteLine("OpenAPI: " + openapiUrl); + writer.WriteLine("API Description: " + openapiUrl); writer.WriteLine(@"
"); // write a span for each mermaidcolorscheme @@ -571,5 +587,54 @@ internal static void WriteTreeDocument(string openapiUrl, OpenApiDocument docume rootNode.WriteMermaid(writer); writer.WriteLine("```"); } + + internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument document, StreamWriter writer, bool asHtmlFile = false) + { + var rootNode = OpenApiUrlTreeNode.Create(document, "main"); + + writer.WriteLine(@" + + + + + + +"); + writer.WriteLine("

" + document.Info.Title + "

"); + writer.WriteLine(); + writer.WriteLine($"

API Description: {sourceUrl}

"); + + writer.WriteLine(@"
"); + // write a span for each mermaidcolorscheme + foreach (var style in OpenApiUrlTreeNode.MermaidNodeStyles) + { + writer.WriteLine($"{style.Key.Replace("_", " ")}"); + } + writer.WriteLine("
"); + writer.WriteLine("
"); + writer.WriteLine(""); + rootNode.WriteMermaid(writer); + writer.WriteLine(""); + + // Write script tag to include JS library for rendering markdown + writer.WriteLine(@""); + // Write script tag to include JS library for rendering mermaid + writer.WriteLine("(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText(fileinfo.FullName); Assert.Contains("graph LR", output); @@ -124,6 +146,22 @@ public void InvokeShowCommand() } + [Fact] + public void InvokeShowCommandWithoutOutput() + { + var rootCommand = Program.CreateRootCommand(); + var args = new string[] { "show", "-d", ".\\UtilityFiles\\SampleOpenApi.yml" }; + var parseResult = rootCommand.Parse(args); + var handler = rootCommand.Subcommands.Where(c => c.Name == "show").First().Handler; + var context = new InvocationContext(parseResult); + + handler.Invoke(context); + + var output = File.ReadAllText(Path.Combine(Path.GetTempPath(), "apitree.html")); + Assert.Contains("graph LR", output); + } + + // Relatively useless test to keep the code coverage metrics happy [Fact] public void CreateRootCommand() From 6c9b90a7e99f72a86c0d7765f08ab0e8954ccd8e Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sat, 14 Jan 2023 21:03:57 -0500 Subject: [PATCH 224/720] Used random file in a hidi folder to address security concerns. --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 +++++++++--- .../Services/OpenApiServiceTests.cs | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c54b65db..2cc18886 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -515,9 +515,15 @@ internal static async Task ShowOpenApiDocument(string openapi, string csdl, stri // If output is null, create a HTML file in the user's temporary directory if (output == null) { - var tempPath = Path.GetTempPath(); + var tempPath = Path.GetTempPath() + "/hidi/"; + if(!File.Exists(tempPath)) + { + Directory.CreateDirectory(tempPath); + } + + var fileName = Path.GetRandomFileName(); - output = new FileInfo(Path.Combine(tempPath, "apitree.html")); + output = new FileInfo(Path.Combine(tempPath, fileName + ".html")); using (var file = new FileStream(output.FullName, FileMode.Create)) { using var writer = new StreamWriter(file); @@ -526,7 +532,7 @@ internal static async Task ShowOpenApiDocument(string openapi, string csdl, stri logger.LogTrace("Created Html document with diagram "); // Launch a browser to display the output html file - var process = new Process(); + using var process = new Process(); process.StartInfo.FileName = output.FullName; process.StartInfo.UseShellExecute = true; process.Start(); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 09ac6fb0..aa49ff52 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -80,6 +80,7 @@ public void ReturnOpenApiConvertSettingsWhenSettingsFileIsProvided(string filePa } } + [Fact] public void ShowCommandGeneratesMermaidDiagramAsMarkdown() { @@ -130,6 +131,22 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() Assert.Contains("graph LR", output); } + [Fact] + public void InvokeTransformCommand() + { + var rootCommand = Program.CreateRootCommand(); + var args = new string[] { "transform", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.json" }; + var parseResult = rootCommand.Parse(args); + var handler = rootCommand.Subcommands.Where(c => c.Name == "transform").First().Handler; + var context = new InvocationContext(parseResult); + + handler.Invoke(context); + + var output = File.ReadAllText("sample.json"); + Assert.NotEmpty(output); + } + + [Fact] public void InvokeShowCommand() { From 482fd5d830272040dbdf027aa0c0a6242d076a23 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 15 Jan 2023 11:11:21 -0500 Subject: [PATCH 225/720] Fixed code smell relating to LogError --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 2cc18886..8d7ea774 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -567,7 +567,7 @@ private static void LogErrors(ILogger logger, ReadResult result) { foreach (var error in context.Errors) { - logger.LogError(error.ToString()); + logger.LogError($"Detected error during parsing: {error}",error.ToString()); } } } From fd8ed35bf67a9848bd12acb6cdd87b805eafbb22 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Sun, 15 Jan 2023 11:11:48 -0500 Subject: [PATCH 226/720] Added test to call Transform command directly so that code coverage will actually see it. --- .../Services/OpenApiServiceTests.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index aa49ff52..995ce1f0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -131,6 +131,18 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() Assert.Contains("graph LR", output); } + + [Fact] + public async Task TransformCommandConvertsOpenApi() + { + var fileinfo = new FileInfo("sample.json"); + // create a dummy ILogger instance for testing + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml",null, null, fileinfo, true, null, null,false,null,false,false,null,null,null,new Logger(new LoggerFactory()), new CancellationToken()); + + var output = File.ReadAllText("sample.json"); + Assert.NotEmpty(output); + } + [Fact] public void InvokeTransformCommand() { From a57ba76b13479867e772849d8f39068c9b77c9df Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 16 Jan 2023 13:18:00 -0500 Subject: [PATCH 227/720] Removed unnecessary test that was breaking --- .../Services/OpenApiServiceTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 995ce1f0..bdb5827b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -147,7 +147,7 @@ public async Task TransformCommandConvertsOpenApi() public void InvokeTransformCommand() { var rootCommand = Program.CreateRootCommand(); - var args = new string[] { "transform", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.json" }; + var args = new string[] { "transform", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.json","--co" }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "transform").First().Handler; var context = new InvocationContext(parseResult); From a488a87134fbefbc37b15e569426e71c915863d3 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 16 Jan 2023 13:51:39 -0500 Subject: [PATCH 228/720] This time I included the change --- .../Services/OpenApiServiceTests.cs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index bdb5827b..be1ca18e 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -175,20 +175,6 @@ public void InvokeShowCommand() } - [Fact] - public void InvokeShowCommandWithoutOutput() - { - var rootCommand = Program.CreateRootCommand(); - var args = new string[] { "show", "-d", ".\\UtilityFiles\\SampleOpenApi.yml" }; - var parseResult = rootCommand.Parse(args); - var handler = rootCommand.Subcommands.Where(c => c.Name == "show").First().Handler; - var context = new InvocationContext(parseResult); - - handler.Invoke(context); - - var output = File.ReadAllText(Path.Combine(Path.GetTempPath(), "apitree.html")); - Assert.Contains("graph LR", output); - } // Relatively useless test to keep the code coverage metrics happy From b88e021ca61b521d819ec51daf3ee37d7fc34228 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 16 Jan 2023 14:47:07 -0500 Subject: [PATCH 229/720] Added more tests to meet the coverage gods --- .../Services/OpenApiServiceTests.cs | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index be1ca18e..dbfbce22 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -131,6 +131,30 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() Assert.Contains("graph LR", output); } + [Fact] + public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiagram() + { + var fileinfo = new FileInfo("sample.md"); + // create a dummy ILogger instance for testing + await OpenApiService.ShowOpenApiDocument(null, "UtilityFiles\\Todo.xml", "todos", fileinfo, new Logger(new LoggerFactory()), new CancellationToken()); + + var output = File.ReadAllText(fileinfo.FullName); + Assert.Contains("graph LR", output); + } + + [Fact] + public async Task ThrowIfURLIsNotResolvableWhenValidating() + { + var message = Assert.ThrowsAsync(async () => + await OpenApiService.ValidateOpenApiDocument("https://example.org/itdoesnmatter", new Logger(new LoggerFactory()), new CancellationToken())); + } + + [Fact] + public async Task ThrowIfFileDoesNotExistWhenValidating() + { + var message = Assert.ThrowsAsync(async () => + await OpenApiService.ValidateOpenApiDocument("aFileThatBetterNotExist.fake", new Logger(new LoggerFactory()), new CancellationToken())); + } [Fact] public async Task TransformCommandConvertsOpenApi() @@ -175,8 +199,6 @@ public void InvokeShowCommand() } - - // Relatively useless test to keep the code coverage metrics happy [Fact] public void CreateRootCommand() From 2f118812d52422359b266b9f129f867153d4ec69 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 16 Jan 2023 15:07:01 -0500 Subject: [PATCH 230/720] More sacrifices made --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 24 +++++++++------ .../Services/OpenApiServiceTests.cs | 30 +++++++++++++++++-- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8d7ea774..c4653353 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -55,18 +55,19 @@ public static async Task TransformOpenApiDocument( CancellationToken cancellationToken ) { + if (string.IsNullOrEmpty(openapi) && string.IsNullOrEmpty(csdl)) + { + throw new ArgumentException("Please input a file path or URL"); + } try { - if (string.IsNullOrEmpty(openapi) && string.IsNullOrEmpty(csdl)) - { - throw new ArgumentException("Please input a file path or URL"); - } if (output == null) { var inputExtension = GetInputPathExtension(openapi, csdl); output = new FileInfo($"./output{inputExtension}"); }; + if (cleanoutput && output.Exists) { output.Delete(); @@ -87,7 +88,11 @@ CancellationToken cancellationToken catch (TaskCanceledException) { Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); - } + } + catch (IOException) + { + throw; + } catch (Exception ex) { throw new InvalidOperationException($"Could not transform the document, reason: {ex.Message}", ex); @@ -239,12 +244,13 @@ public static async Task ValidateOpenApiDocument( ILogger logger, CancellationToken cancellationToken) { + if (string.IsNullOrEmpty(openapi)) + { + throw new ArgumentNullException(nameof(openapi)); + } + try { - if (string.IsNullOrEmpty(openapi)) - { - throw new ArgumentNullException(nameof(openapi)); - } using var stream = await GetStream(openapi, logger, cancellationToken); var result = await ParseOpenApi(openapi, false, logger, stream); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index dbfbce22..d397e416 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -142,20 +142,38 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiag Assert.Contains("graph LR", output); } + [Fact] + public async Task ThrowIfOpenApiUrlIsNotProvidedWhenValidating() + { + await Assert.ThrowsAsync(async () => + await OpenApiService.ValidateOpenApiDocument("", new Logger(new LoggerFactory()), new CancellationToken())); + } + + [Fact] public async Task ThrowIfURLIsNotResolvableWhenValidating() { - var message = Assert.ThrowsAsync(async () => + await Assert.ThrowsAsync(async () => await OpenApiService.ValidateOpenApiDocument("https://example.org/itdoesnmatter", new Logger(new LoggerFactory()), new CancellationToken())); } [Fact] public async Task ThrowIfFileDoesNotExistWhenValidating() { - var message = Assert.ThrowsAsync(async () => + await Assert.ThrowsAsync(async () => await OpenApiService.ValidateOpenApiDocument("aFileThatBetterNotExist.fake", new Logger(new LoggerFactory()), new CancellationToken())); } + [Fact] + public async Task ValidateCommandProcessesOpenApi() + { + // create a dummy ILogger instance for testing + await OpenApiService.ValidateOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", new Logger(new LoggerFactory()), new CancellationToken()); + + Assert.True(true); + } + + [Fact] public async Task TransformCommandConvertsOpenApi() { @@ -167,6 +185,14 @@ public async Task TransformCommandConvertsOpenApi() Assert.NotEmpty(output); } + [Fact] + public async Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() + { + await Assert.ThrowsAsync(async () => + await OpenApiService.TransformOpenApiDocument(null, null, null, null, true, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken())); + + } + [Fact] public void InvokeTransformCommand() { From e0739723ef71a8f4cc15df2c8ac3668dfb856ad8 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 16 Jan 2023 16:39:59 -0500 Subject: [PATCH 231/720] Will these be the tests that achieve the magical goal? --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- .../Services/OpenApiServiceTests.cs | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c4653353..a952f414 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -103,8 +103,8 @@ private static void WriteOpenApi(FileInfo output, bool terseOutput, bool inlineL { using (logger.BeginScope("Output")) { - using var outputStream = output?.Create(); - var textWriter = outputStream != null ? new StreamWriter(outputStream) : Console.Out; + using var outputStream = output.Create(); + var textWriter = new StreamWriter(outputStream); var settings = new OpenApiWriterSettings() { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index d397e416..11b5bc4f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -185,6 +185,26 @@ public async Task TransformCommandConvertsOpenApi() Assert.NotEmpty(output); } + [Fact] + public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() + { + // create a dummy ILogger instance for testing + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + + var output = File.ReadAllText("output.yml"); + Assert.NotEmpty(output); + } + + [Fact] + public async Task TransformCommandConvertsOpenApiWithDefaultOutputnameAndSwitchFormat() + { + // create a dummy ILogger instance for testing + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, "3.0", OpenApiFormat.Yaml, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + + var output = File.ReadAllText("output.yml"); + Assert.NotEmpty(output); + } + [Fact] public async Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() { From 11bf614d266377d4fc30c3c688a2cb0e18c86ee5 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 16 Jan 2023 17:09:37 -0500 Subject: [PATCH 232/720] I am confidence I have enough tests now --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 ++- .../Services/OpenApiServiceTests.cs | 42 ++++++++++++++----- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index a952f414..64a23dff 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -505,7 +505,7 @@ private static string GetInputPathExtension(string openapi = null, string csdl = return extension; } - internal static async Task ShowOpenApiDocument(string openapi, string csdl, string csdlFilter, FileInfo output, ILogger logger, CancellationToken cancellationToken) + internal static async Task ShowOpenApiDocument(string openapi, string csdl, string csdlFilter, FileInfo output, ILogger logger, CancellationToken cancellationToken) { try { @@ -542,6 +542,8 @@ internal static async Task ShowOpenApiDocument(string openapi, string csdl, stri process.StartInfo.FileName = output.FullName; process.StartInfo.UseShellExecute = true; process.Start(); + + return output.FullName; } else // Write diagram as Markdown document to output file { @@ -551,6 +553,7 @@ internal static async Task ShowOpenApiDocument(string openapi, string csdl, stri WriteTreeDocumentAsMarkdown(openapi ?? csdl, document, writer); } logger.LogTrace("Created markdown document with diagram "); + return output.FullName; } } } @@ -562,6 +565,7 @@ internal static async Task ShowOpenApiDocument(string openapi, string csdl, stri { throw new InvalidOperationException($"Could not generate the document, reason: {ex.Message}", ex); } + return null; } private static void LogErrors(ILogger logger, ReadResult result) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 11b5bc4f..ac2048ad 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -84,11 +84,13 @@ public void ReturnOpenApiConvertSettingsWhenSettingsFileIsProvided(string filePa [Fact] public void ShowCommandGeneratesMermaidDiagramAsMarkdown() { - var openApiDoc = new OpenApiDocument(); - openApiDoc.Info = new OpenApiInfo + var openApiDoc = new OpenApiDocument { - Title = "Test", - Version = "1.0.0" + Info = new OpenApiInfo + { + Title = "Test", + Version = "1.0.0" + } }; var stream = new MemoryStream(); using var writer = new StreamWriter(stream); @@ -101,13 +103,15 @@ public void ShowCommandGeneratesMermaidDiagramAsMarkdown() } [Fact] - public void ShowCommandGeneratesMermaidDiagramAsHtml () + public void ShowCommandGeneratesMermaidDiagramAsHtml() { - var openApiDoc = new OpenApiDocument(); - openApiDoc.Info = new OpenApiInfo + var openApiDoc = new OpenApiDocument { - Title = "Test", - Version = "1.0.0" + Info = new OpenApiInfo + { + Title = "Test", + Version = "1.0.0" + } }; var stream = new MemoryStream(); using var writer = new StreamWriter(stream); @@ -118,7 +122,7 @@ public void ShowCommandGeneratesMermaidDiagramAsHtml () var output = reader.ReadToEnd(); Assert.Contains("graph LR", output); } - + [Fact] public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() @@ -131,6 +135,13 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() Assert.Contains("graph LR", output); } + [Fact] + public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagram() + { + var filePath = await OpenApiService.ShowOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + Assert.True(File.Exists(filePath)); + } + [Fact] public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiagram() { @@ -185,6 +196,7 @@ public async Task TransformCommandConvertsOpenApi() Assert.NotEmpty(output); } + [Fact] public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() { @@ -195,6 +207,16 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() Assert.NotEmpty(output); } + [Fact] + public async Task TransformCommandConvertsCsdlWithDefaultOutputname() + { + // create a dummy ILogger instance for testing + await OpenApiService.TransformOpenApiDocument(null, "UtilityFiles\\Todo.xml", null, null, true, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + + var output = File.ReadAllText("output.yml"); + Assert.NotEmpty(output); + } + [Fact] public async Task TransformCommandConvertsOpenApiWithDefaultOutputnameAndSwitchFormat() { From aaa98c377fd85c991c4bdce03d94c3444c653341 Mon Sep 17 00:00:00 2001 From: Darrel Miller Date: Mon, 16 Jan 2023 17:43:45 -0500 Subject: [PATCH 233/720] Added a using to dispose a StreamReader --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 64a23dff..e63a2b9b 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -225,7 +225,7 @@ private static XslCompiledTransform GetFilterTransform() private static Stream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) { Stream stream; - StreamReader inputReader = new(csdlStream); + using StreamReader inputReader = new(csdlStream, leaveOpen: true); XmlReader inputXmlReader = XmlReader.Create(inputReader); MemoryStream filteredStream = new(); StreamWriter writer = new(filteredStream); From c8f21c2c47543c3230b163ee744245a2ee767103 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Jan 2023 21:01:31 +0000 Subject: [PATCH 234/720] Bump Microsoft.OpenApi.OData from 1.2.0-preview9 to 1.2.0 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.2.0-preview9 to 1.2.0. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 232830c3..a53d697b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 09922ea834eeea2f25d0651e0443ac65d860eb94 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 31 Jan 2023 14:43:51 +0300 Subject: [PATCH 235/720] Declare the return type as a task of type int in Main() method for us to get the correct exit code in case of a critical error or unsuccessful operation --- src/Microsoft.OpenApi.Hidi/Program.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 056da9ab..8d3cc324 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -15,13 +15,12 @@ namespace Microsoft.OpenApi.Hidi { static class Program { - static async Task Main(string[] args) + static async Task Main(string[] args) { var rootCommand = CreateRootCommand(); // Parse the incoming args and invoke the handler - await rootCommand.InvokeAsync(args); - + return await rootCommand.InvokeAsync(args); } internal static RootCommand CreateRootCommand() From 274705d026c934c9fc078a31c01e373c35b755a0 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 31 Jan 2023 14:44:03 +0300 Subject: [PATCH 236/720] Bump up hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index a53d697b..072c9d3e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.0 + 1.2.1 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From fea7f6e6356fac059b3a33aaa49a694a4f8e9386 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 31 Jan 2023 17:45:04 +0300 Subject: [PATCH 237/720] use platform-specific character for separating directory levels in a path string --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index e63a2b9b..c9214030 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -287,7 +287,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli { RuleSet = ValidationRuleSet.GetDefaultRuleSet(), LoadExternalRefs = inlineExternal, - BaseUrl = openApiFile.StartsWith("http") ? new Uri(openApiFile) : new Uri("file:" + new FileInfo(openApiFile).DirectoryName + "\\") + BaseUrl = openApiFile.StartsWith("http") ? new Uri(openApiFile) : new Uri("file:" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) } ).ReadAsync(stream); From 882c133e0024b16ae8a95dd7f13a13d24a892f3d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 31 Jan 2023 17:45:19 +0300 Subject: [PATCH 238/720] Update test with correct operationId --- .../Services/OpenApiServiceTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index ac2048ad..f95acd87 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -38,8 +38,8 @@ public async Task ReturnConvertedCSDLFile() } [Theory] - [InlineData("Todos.Todo.UpdateTodoById",null, 1)] - [InlineData("Todos.Todo.ListTodo",null, 1)] + [InlineData("Todos.Todo.UpdateTodo",null, 1)] + [InlineData("Todos.Todo.ListTodo", null, 1)] [InlineData(null, "Todos.Todo", 4)] public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) { From 5da0ec5be50a1afbc65173638b38b18b7fd6aa31 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 1 Feb 2023 10:21:52 -0500 Subject: [PATCH 239/720] - fixes a bug where the protocol definition would fail on linux OS --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 072c9d3e..b30d770d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.1 + 1.2.2 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c9214030..fa0b5ff5 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -285,9 +285,10 @@ private static async Task ParseOpenApi(string openApiFile, bool inli result = await new OpenApiStreamReader(new OpenApiReaderSettings { - RuleSet = ValidationRuleSet.GetDefaultRuleSet(), LoadExternalRefs = inlineExternal, - BaseUrl = openApiFile.StartsWith("http") ? new Uri(openApiFile) : new Uri("file:" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) + BaseUrl = openApiFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? + new Uri(openApiFile) : + new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) } ).ReadAsync(stream); From 599fb623b87808fe85652e5a94b1d04020ae58e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Feb 2023 21:57:34 +0000 Subject: [PATCH 240/720] Bump Microsoft.OData.Edm from 7.14.0 to 7.14.1 Bumps Microsoft.OData.Edm from 7.14.0 to 7.14.1. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b30d770d..6ba69e59 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From 147f80f02a13d49364aba2a23d3e6d6a2ac8348d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 20 Feb 2023 15:11:44 -0500 Subject: [PATCH 241/720] - adds missing cancellation token parameter and passes it along --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index fa0b5ff5..9fdca3f6 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -162,7 +162,7 @@ private static async Task GetOpenApi(string openapi, string csd else { stream = await GetStream(openapi, logger, cancellationToken); - var result = await ParseOpenApi(openapi, inlineExternal, logger, stream); + var result = await ParseOpenApi(openapi, inlineExternal, logger, stream, cancellationToken); document = result.OpenApiDocument; } @@ -253,7 +253,7 @@ public static async Task ValidateOpenApiDocument( { using var stream = await GetStream(openapi, logger, cancellationToken); - var result = await ParseOpenApi(openapi, false, logger, stream); + var result = await ParseOpenApi(openapi, false, logger, stream, cancellationToken); using (logger.BeginScope("Calculating statistics")) { @@ -275,7 +275,7 @@ public static async Task ValidateOpenApiDocument( } } - private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream) + private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken) { ReadResult result; Stopwatch stopwatch = Stopwatch.StartNew(); @@ -290,7 +290,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli new Uri(openApiFile) : new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) } - ).ReadAsync(stream); + ).ReadAsync(stream, cancellationToken); logger.LogTrace("{timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); From 5a9d284eb0a3dd307e0e98adb841c6cdeb48eb55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Feb 2023 21:57:55 +0000 Subject: [PATCH 242/720] Bump Microsoft.NET.Test.Sdk from 17.4.1 to 17.5.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.4.1 to 17.5.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.4.1...v17.5.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index aaaa66cb..f9b1a0f2 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From 501d03d715f4f0b1dd3313eee52b22218fde40f9 Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Tue, 28 Feb 2023 15:57:01 +0300 Subject: [PATCH 243/720] [Upgrade] Bumps up conversion lib version Bumps up the `Microsoft.OpenApi.OData` lib. `v1.2.0` to `v1.3.0-preview2` --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 6ba69e59..cc275d5f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 421f84ed3934a86578a362d56f86a4302d7dfa78 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 28 Feb 2023 08:40:35 -0500 Subject: [PATCH 244/720] - bumps hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cc275d5f..7d41d9e9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.2 + 1.2.3 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From b45cb182b8cdedd4c0479ea3820567f39a2de58f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Mar 2023 21:15:34 +0000 Subject: [PATCH 245/720] Bump Microsoft.OData.Edm from 7.14.1 to 7.15.0 Bumps Microsoft.OData.Edm from 7.14.1 to 7.15.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7d41d9e9..2e74545e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -42,7 +42,7 @@ - + From 4f400795309e0de69e27ec411eadae96c919d7aa Mon Sep 17 00:00:00 2001 From: Charles Wahome Date: Mon, 6 Mar 2023 14:40:20 +0300 Subject: [PATCH 246/720] settings will be passed by the apps that need to override --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 22 +------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 9fdca3f6..4d535ee0 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -324,27 +324,7 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); var config = GetConfiguration(settingsFile); - var settings = new OpenApiConvertSettings() - { - AddSingleQuotesForStringParameters = true, - AddEnumDescriptionExtension = true, - DeclarePathParametersOnPathItem = true, - EnableKeyAsSegment = true, - EnableOperationId = true, - ErrorResponsesAsDefault = false, - PrefixEntityTypeNameBeforeKey = true, - TagDepth = 2, - EnablePagination = true, - EnableDiscriminatorValue = true, - EnableDerivedTypesReferencesForRequestBody = false, - EnableDerivedTypesReferencesForResponses = false, - ShowRootPath = false, - ShowLinks = false, - ExpandDerivedTypesNavigationProperties = false, - EnableCount = true, - UseSuccessStatusCodeRange = true, - EnableTypeDisambiguationForDefaultValueOfOdataTypeProperty = true - }; + var settings = new OpenApiConvertSettings(); config.GetSection("OpenApiConvertSettings").Bind(settings); OpenApiDocument document = edmModel.ConvertToOpenApi(settings); From feaa23af1a099ad70c85a5321089c38e5c55ec76 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 7 Mar 2023 15:28:52 +0300 Subject: [PATCH 247/720] Bump lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 2e74545e..98f25062 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.3 + 1.2.4 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From b8c7e11e1ecf361853770706dda0ee57ab03b9eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Mar 2023 21:57:19 +0000 Subject: [PATCH 248/720] Bump Microsoft.OpenApi.OData from 1.3.0-preview2 to 1.3.0-preview3 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.3.0-preview2 to 1.3.0-preview3. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 98f25062..ff90f537 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 69e1d3efb7300692b11f76a841a2619b10db00ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Mar 2023 21:57:16 +0000 Subject: [PATCH 249/720] Bump Microsoft.OpenApi.OData from 1.3.0-preview3 to 1.3.0-preview4 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.3.0-preview3 to 1.3.0-preview4. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ff90f537..d21a0794 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 5076c313a30d29510e3bb9e3a48f6eb78470708a Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 29 Mar 2023 15:44:35 +0300 Subject: [PATCH 250/720] Adds a metadata version parameter as a commandline option --- .../Handlers/TransformCommandHandler.cs | 4 +++- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 19 ++++++++++++------- src/Microsoft.OpenApi.Hidi/Program.cs | 7 ++++++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index d0a49c20..e00cd7ef 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -19,6 +19,7 @@ internal class TransformCommandHandler : ICommandHandler public Option OutputOption { get; set; } public Option CleanOutputOption { get; set; } public Option VersionOption { get; set; } + public Option MetadataVersionOption { get; set; } public Option FormatOption { get; set; } public Option TerseOutputOption { get; set; } public Option SettingsFileOption { get; set; } @@ -41,6 +42,7 @@ public async Task InvokeAsync(InvocationContext context) FileInfo output = context.ParseResult.GetValueForOption(OutputOption); bool cleanOutput = context.ParseResult.GetValueForOption(CleanOutputOption); string? version = context.ParseResult.GetValueForOption(VersionOption); + string metadataVersion = context.ParseResult.GetValueForOption(MetadataVersionOption); OpenApiFormat? format = context.ParseResult.GetValueForOption(FormatOption); bool terseOutput = context.ParseResult.GetValueForOption(TerseOutputOption); string settingsFile = context.ParseResult.GetValueForOption(SettingsFileOption); @@ -57,7 +59,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, format, terseOutput, settingsFile, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, logger, cancellationToken); + await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, metadataVersion, format, terseOutput, settingsFile, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, logger, cancellationToken); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 4d535ee0..5d5ec95d 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; -using System.Linq; using System.Net; using System.Net.Http; using System.Security; @@ -20,7 +19,6 @@ using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Services; -using Microsoft.OpenApi.Validations; using Microsoft.OpenApi.Writers; using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper; using System.Threading; @@ -43,6 +41,7 @@ public static async Task TransformOpenApiDocument( FileInfo output, bool cleanoutput, string? version, + string metadataVersion, OpenApiFormat? format, bool terseOutput, string settingsFile, @@ -81,7 +80,7 @@ CancellationToken cancellationToken OpenApiFormat openApiFormat = format ?? (!string.IsNullOrEmpty(openapi) ? GetOpenApiFormat(openapi, logger) : OpenApiFormat.Yaml); OpenApiSpecVersion openApiVersion = version != null ? TryParseOpenApiSpecVersion(version) : OpenApiSpecVersion.OpenApi3_0; - OpenApiDocument document = await GetOpenApi(openapi, csdl, csdlFilter, settingsFile, inlineExternal, logger, cancellationToken); + OpenApiDocument document = await GetOpenApi(openapi, csdl, csdlFilter, settingsFile, inlineExternal, logger, cancellationToken, metadataVersion); document = await FilterOpenApiDocument(filterbyoperationids, filterbytags, filterbycollection, document, logger, cancellationToken); WriteOpenApi(output, terseOutput, inlineLocal, inlineExternal, openApiFormat, openApiVersion, document, logger); } @@ -132,11 +131,11 @@ private static void WriteOpenApi(FileInfo output, bool terseOutput, bool inlineL } // Get OpenAPI document either from OpenAPI or CSDL - private static async Task GetOpenApi(string openapi, string csdl, string csdlFilter, string settingsFile, bool inlineExternal, ILogger logger, CancellationToken cancellationToken) + private static async Task GetOpenApi(string openapi, string csdl, string csdlFilter, string settingsFile, bool inlineExternal, ILogger logger, CancellationToken cancellationToken, string metadataVersion = null) { OpenApiDocument document; Stream stream; - + if (!string.IsNullOrEmpty(csdl)) { var stopwatch = new Stopwatch(); @@ -154,7 +153,7 @@ private static async Task GetOpenApi(string openapi, string csd stream = null; } - document = await ConvertCsdlToOpenApi(filteredStream ?? stream, settingsFile, cancellationToken); + document = await ConvertCsdlToOpenApi(filteredStream ?? stream, metadataVersion, settingsFile, cancellationToken); stopwatch.Stop(); logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } @@ -317,7 +316,7 @@ internal static IConfiguration GetConfiguration(string settingsFile) /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApi(Stream csdl, string settingsFile = null, CancellationToken token = default) + public static async Task ConvertCsdlToOpenApi(Stream csdl, string metadataVersion = null, string settingsFile = null, CancellationToken token = default) { using var reader = new StreamReader(csdl); var csdlText = await reader.ReadToEndAsync(token); @@ -325,6 +324,12 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri var config = GetConfiguration(settingsFile); var settings = new OpenApiConvertSettings(); + + if (!string.IsNullOrEmpty(metadataVersion)) + { + settings.SemVerVersion = metadataVersion; + } + config.GetSection("OpenApiConvertSettings").Bind(settings); OpenApiDocument document = edmModel.ConvertToOpenApi(settings); diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 8d3cc324..9929983e 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -46,9 +46,12 @@ internal static RootCommand CreateRootCommand() var versionOption = new Option("--version", "OpenAPI specification version"); versionOption.AddAlias("-v"); + var metadataVersionOption = new Option("--metadata-version", "Graph metadata version to use. Defaults to v1.0"); + metadataVersionOption.AddAlias("--mv"); + var formatOption = new Option("--format", "File format"); formatOption.AddAlias("-f"); - + var terseOutputOption = new Option("--terse-output", "Produce terse json output"); terseOutputOption.AddAlias("--to"); @@ -93,6 +96,7 @@ internal static RootCommand CreateRootCommand() outputOption, cleanOutputOption, versionOption, + metadataVersionOption, formatOption, terseOutputOption, settingsFileOption, @@ -112,6 +116,7 @@ internal static RootCommand CreateRootCommand() OutputOption = outputOption, CleanOutputOption = cleanOutputOption, VersionOption = versionOption, + MetadataVersionOption = metadataVersionOption, FormatOption = formatOption, TerseOutputOption = terseOutputOption, SettingsFileOption = settingsFileOption, From d6c1fef0f0a17cfe4b8e73eacf9b78aa38b537bf Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 29 Mar 2023 15:44:49 +0300 Subject: [PATCH 251/720] Bump lib to latest version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index d21a0794..dc0c3a0c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From a9cb64ae20be33adbf91201d47ede16a86b3aded Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 29 Mar 2023 16:22:19 +0300 Subject: [PATCH 252/720] Clean up tests --- .../Services/OpenApiServiceTests.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index f95acd87..85910465 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -190,7 +190,7 @@ public async Task TransformCommandConvertsOpenApi() { var fileinfo = new FileInfo("sample.json"); // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml",null, null, fileinfo, true, null, null,false,null,false,false,null,null,null,new Logger(new LoggerFactory()), new CancellationToken()); + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml",null, null, fileinfo, true, null, null, null,false,null,false,false,null,null,null,new Logger(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText("sample.json"); Assert.NotEmpty(output); @@ -201,7 +201,7 @@ public async Task TransformCommandConvertsOpenApi() public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() { // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, null, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText("output.yml"); Assert.NotEmpty(output); @@ -211,7 +211,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() public async Task TransformCommandConvertsCsdlWithDefaultOutputname() { // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument(null, "UtilityFiles\\Todo.xml", null, null, true, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + await OpenApiService.TransformOpenApiDocument(null, "UtilityFiles\\Todo.xml", null, null, true, null, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText("output.yml"); Assert.NotEmpty(output); @@ -221,7 +221,7 @@ public async Task TransformCommandConvertsCsdlWithDefaultOutputname() public async Task TransformCommandConvertsOpenApiWithDefaultOutputnameAndSwitchFormat() { // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, "3.0", OpenApiFormat.Yaml, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, "3.0", null, OpenApiFormat.Yaml, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText("output.yml"); Assert.NotEmpty(output); @@ -231,7 +231,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputnameAndSwitchF public async Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() { await Assert.ThrowsAsync(async () => - await OpenApiService.TransformOpenApiDocument(null, null, null, null, true, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken())); + await OpenApiService.TransformOpenApiDocument(null, null, null, null, true, null, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken())); } From 9351b4d79fa019a42db03121ce0626d8cc00036a Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 29 Mar 2023 17:02:51 +0300 Subject: [PATCH 253/720] Update path count for test to pass --- .../Services/OpenApiServiceTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 85910465..9081c49f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -38,9 +38,9 @@ public async Task ReturnConvertedCSDLFile() } [Theory] - [InlineData("Todos.Todo.UpdateTodo",null, 1)] + [InlineData("Todos.Todo.UpdateTodo", null, 1)] [InlineData("Todos.Todo.ListTodo", null, 1)] - [InlineData(null, "Todos.Todo", 4)] + [InlineData(null, "Todos.Todo", 5)] public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) { // Arrange From ca7ebd8b628ee9e27a462bb29773419855ba68b1 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 29 Mar 2023 17:16:32 +0300 Subject: [PATCH 254/720] Update src/Microsoft.OpenApi.Hidi/Program.cs Remove unnecessary section in description Co-authored-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index 9929983e..5c5bf691 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -46,7 +46,7 @@ internal static RootCommand CreateRootCommand() var versionOption = new Option("--version", "OpenAPI specification version"); versionOption.AddAlias("-v"); - var metadataVersionOption = new Option("--metadata-version", "Graph metadata version to use. Defaults to v1.0"); + var metadataVersionOption = new Option("--metadata-version", "Graph metadata version to use."); metadataVersionOption.AddAlias("--mv"); var formatOption = new Option("--format", "File format"); From 6e91bd4414635bf1cfb3b3cc41f5508ae0eceeed Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 30 Mar 2023 13:26:01 +0300 Subject: [PATCH 255/720] Update lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index dc0c3a0c..a018775c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.4 + 1.2.5-preview1 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From b38c45e2181ccdedfe69ee3f0e85fea788cf481d Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Wed, 5 Apr 2023 16:52:11 +0300 Subject: [PATCH 256/720] Update conversion lib. version to `1.4.0-preview1` --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index a018775c..8ac62a9a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 3b38195e1653a1813b267a9df2b472baed7e86c4 Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Wed, 5 Apr 2023 16:55:43 +0300 Subject: [PATCH 257/720] Bump up hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 8ac62a9a..092c782a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.5-preview1 + 1.2.5-preview2 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From 4608931d21495cb56dc521f4bdd3fc8e33e878bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Apr 2023 21:57:27 +0000 Subject: [PATCH 258/720] Bump Microsoft.OpenApi.OData from 1.4.0-preview1 to 1.4.0-preview2 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.4.0-preview1 to 1.4.0-preview2. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 092c782a..aad865a3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -1,4 +1,4 @@ - + Exe @@ -43,7 +43,7 @@ - + From 7429e6bf960fa2aad63b6e797de8ede9c8dc2528 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Apr 2023 21:57:29 +0000 Subject: [PATCH 259/720] Bump Microsoft.OpenApi.OData from 1.4.0-preview2 to 1.4.0-preview3 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.4.0-preview2 to 1.4.0-preview3. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index aad865a3..0986f321 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From a9c5d183ed14d414476f211f949bcaef72002a3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Apr 2023 21:57:10 +0000 Subject: [PATCH 260/720] Bump Microsoft.OpenApi.OData from 1.4.0-preview3 to 1.4.0-preview4 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.4.0-preview3 to 1.4.0-preview4. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 0986f321..19ea9a86 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From d51af1ca67b1b5e8b5f1bc072eb4e7be3cfda6b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 21:57:09 +0000 Subject: [PATCH 261/720] Bump Microsoft.OpenApi.OData from 1.4.0-preview4 to 1.4.0-preview5 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.4.0-preview4 to 1.4.0-preview5. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 19ea9a86..e131a502 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 4074e67a7d2d4411fde9d870dd4e68df06e0a19d Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 26 Apr 2023 13:24:16 +0300 Subject: [PATCH 262/720] Resolve conflicts --- .../UtilityFiles/OpenApiDocumentMock.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 58b85d91..c38fb150 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -1,9 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Collections.Generic; -using System.Security.Policy; -using Microsoft.OpenApi.Any; +using System.Text.Json.Nodes; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; @@ -599,7 +598,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-key-type", new OpenApiString("call") + "x-ms-docs-key-type", new ExtensionTypeCaster("call") } } } @@ -616,7 +615,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-operation-type", new OpenApiString("action") + "x-ms-docs-operation-type", new ExtensionTypeCaster("action") } } } @@ -654,7 +653,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-key-type", new OpenApiString("group") + "x-ms-docs-key-type", new ExtensionTypeCaster("group") } } }, @@ -671,7 +670,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-key-type", new OpenApiString("event") + "x-ms-docs-key-type", new ExtensionTypeCaster("event") } } } @@ -706,7 +705,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-operation-type", new OpenApiString("function") + "x-ms-docs-operation-type", new ExtensionTypeCaster("function") } } } From c2687f56781dbbb115e52bcdcd7e2d89f4665797 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 26 Apr 2023 13:24:16 +0300 Subject: [PATCH 263/720] Resolve conflicts --- .../UtilityFiles/OpenApiDocumentMock.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 58b85d91..c38fb150 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -1,9 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Collections.Generic; -using System.Security.Policy; -using Microsoft.OpenApi.Any; +using System.Text.Json.Nodes; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; @@ -599,7 +598,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-key-type", new OpenApiString("call") + "x-ms-docs-key-type", new ExtensionTypeCaster("call") } } } @@ -616,7 +615,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-operation-type", new OpenApiString("action") + "x-ms-docs-operation-type", new ExtensionTypeCaster("action") } } } @@ -654,7 +653,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-key-type", new OpenApiString("group") + "x-ms-docs-key-type", new ExtensionTypeCaster("group") } } }, @@ -671,7 +670,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-key-type", new OpenApiString("event") + "x-ms-docs-key-type", new ExtensionTypeCaster("event") } } } @@ -706,7 +705,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new Dictionary { { - "x-ms-docs-operation-type", new OpenApiString("function") + "x-ms-docs-operation-type", new ExtensionTypeCaster("function") } } } From 126d9009e35d11cb6c951014bcaa2d9098cef189 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Apr 2023 21:57:07 +0000 Subject: [PATCH 264/720] Bump Microsoft.OpenApi.OData from 1.4.0-preview5 to 1.4.0-preview6 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.4.0-preview5 to 1.4.0-preview6. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e131a502..2cf28b26 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 0101cfc6fea8e5aecf8e620a65c2105e4b5e96a7 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 2 May 2023 15:40:36 +0300 Subject: [PATCH 265/720] Clean up code and refactor failing tests --- .../Services/OpenApiServiceTests.cs | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs deleted file mode 100644 index af5437aa..00000000 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -using System; -using System.IO; -using System.Threading.Tasks; -using Microsoft.OpenApi.Hidi; -using Microsoft.OpenApi.Services; -using Xunit; - -namespace Microsoft.OpenApi.Tests.Services -{ - public class OpenApiServiceTests - { - [Fact] - public async Task ReturnConvertedCSDLFile() - { - // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml"); - var fileInput = new FileInfo(filePath); - var csdlStream = fileInput.OpenRead(); - - // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); - var expectedPathCount = 5; - - // Assert - Assert.NotNull(openApiDoc); - Assert.NotEmpty(openApiDoc.Paths); - Assert.Equal(expectedPathCount, openApiDoc.Paths.Count); - } - - [Theory] - [InlineData("Todos.Todo.UpdateTodo",null, 1)] - [InlineData("Todos.Todo.ListTodo",null, 1)] - [InlineData(null, "Todos.Todo", 4)] - public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) - { - // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml"); - var fileInput = new FileInfo(filePath); - var csdlStream = fileInput.OpenRead(); - - // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); - var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); - var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(openApiDoc, predicate); - - // Assert - Assert.NotNull(subsetOpenApiDocument); - Assert.NotEmpty(subsetOpenApiDocument.Paths); - Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); - } - } -} From 95dec81f06b71a9609f72c9c3cb26017ec83a288 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 May 2023 21:57:12 +0000 Subject: [PATCH 266/720] Bump Microsoft.OpenApi.OData from 1.4.0-preview6 to 1.4.0-preview7 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.4.0-preview6 to 1.4.0-preview7. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 2cf28b26..77a215d9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 5d3f994d26f8895aafd7554100f9cf08510fe74a Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Wed, 3 May 2023 10:16:12 +0300 Subject: [PATCH 267/720] Bump up lib. version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 77a215d9..e370c84b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.5-preview2 + 1.2.5-preview3 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET @@ -43,7 +43,7 @@ - + From d7bb433a7c2117656384d6402041c19ba86f74de Mon Sep 17 00:00:00 2001 From: Peter Ombwa Date: Mon, 8 May 2023 16:20:24 -0700 Subject: [PATCH 268/720] Add OpenAPI formatter for PS --- .../Formatters/PowerShellFormatter.cs | 210 ++++++++++++++++++ .../Handlers/TransformCommandHandler.cs | 4 +- .../Microsoft.OpenApi.Hidi.csproj | 1 + src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 69 +++--- src/Microsoft.OpenApi.Hidi/Program.cs | 14 +- .../Services/OpenApiServiceTests.cs | 26 +-- 6 files changed, 272 insertions(+), 52 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs new file mode 100644 index 00000000..df8fbb94 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -0,0 +1,210 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using Humanizer; +using Humanizer.Inflections; +using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Services; + +namespace Microsoft.OpenApi.Hidi.Formatters +{ + internal class PowerShellFormatter : OpenApiVisitorBase + { + private const string DefaultPutPrefix = ".Update"; + private const string PowerShellPutPrefix = ".Set"; + private readonly Stack _schemaLoop = new(); + private static readonly Regex s_oDataCastRegex = new("(.*(?<=[a-z]))\\.(As(?=[A-Z]).*)", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); + private static readonly Regex s_hashSuffixRegex = new(@"^[^-]+", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); + private static readonly Regex s_oDataRefRegex = new("(?<=[a-z])Ref(?=[A-Z])", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); + + static PowerShellFormatter() + { + // Add singularization exclusions. + // TODO: Read exclusions from a user provided file. + Vocabularies.Default.AddSingular("(drive)s$", "$1"); // drives does not properly singularize to drive. + Vocabularies.Default.AddSingular("(data)$", "$1"); // exclude the following from singularization. + Vocabularies.Default.AddSingular("(delta)$", "$1"); + Vocabularies.Default.AddSingular("(quota)$", "$1"); + Vocabularies.Default.AddSingular("(statistics)$", "$1"); + } + + //TODO: FHL for PS + // Fixes (Order matters): + // 1. Singularize operationId operationIdSegments. + // 2. Add '_' to verb in an operationId. + // 3. Fix odata cast operationIds. + // 4. Fix hash suffix in operationIds. + // 5. Fix Put operation id should have -> {xxx}_Set{Yyy} + // 5. Fix anyOf and oneOf schema. + // 6. Add AdditionalProperties to object schemas. + + public override void Visit(OpenApiSchema schema) + { + AddAddtionalPropertiesToSchema(schema); + ResolveAnyOfSchema(schema); + ResolveOneOfSchema(schema); + + base.Visit(schema); + } + + public override void Visit(OpenApiPathItem pathItem) + { + if (pathItem.Operations.ContainsKey(OperationType.Put)) + { + var operationId = pathItem.Operations[OperationType.Put].OperationId; + pathItem.Operations[OperationType.Put].OperationId = ResolvePutOperationId(operationId); + } + + base.Visit(pathItem); + } + + public override void Visit(OpenApiOperation operation) + { + if (operation.OperationId == null) + throw new ArgumentNullException(nameof(operation.OperationId), $"OperationId is required {PathString}"); + + var operationId = operation.OperationId; + + operationId = RemoveHashSuffix(operationId); + operationId = ResolveODataCastOperationId(operationId); + operationId = ResolveByRefOperationId(operationId); + + + var operationIdSegments = operationId.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).ToList(); + operationId = SingularizeAndDeduplicateOperationId(operationIdSegments); + + operation.OperationId = operationId; + base.Visit(operation); + } + + private void AddAddtionalPropertiesToSchema(OpenApiSchema schema) + { + if (schema != null && !_schemaLoop.Contains(schema) && "object".Equals(schema?.Type, StringComparison.OrdinalIgnoreCase)) + { + schema.AdditionalProperties = new OpenApiSchema() { Type = "object" }; + + /* Because 'additionalProperties' are now being walked, + * we need a way to keep track of visited schemas to avoid + * endlessly creating and walking them in an infinite recursion. + */ + _schemaLoop.Push(schema.AdditionalProperties); + } + } + + private static void ResolveOneOfSchema(OpenApiSchema schema) + { + if (schema.OneOf?.Any() ?? false) + { + var newSchema = schema.OneOf.FirstOrDefault(); + schema.OneOf = null; + FlattenSchema(schema, newSchema); + } + } + + private static void ResolveAnyOfSchema(OpenApiSchema schema) + { + if (schema.AnyOf?.Any() ?? false) + { + var newSchema = schema.AnyOf.FirstOrDefault(); + schema.AnyOf = null; + FlattenSchema(schema, newSchema); + } + } + + private static string ResolvePutOperationId(string operationId) + { + return operationId.Contains(DefaultPutPrefix) ? + operationId.Replace(DefaultPutPrefix, PowerShellPutPrefix) : operationId; + } + + private static string ResolveByRefOperationId(string operationId) + { + // Update $ref path operationId name + // Ref key word is enclosed between lower-cased and upper-cased letters + // Ex.: applications_GetRefCreatedOnBehalfOf to applications_GetCreatedOnBehalfOfByRef + return s_oDataRefRegex.Match(operationId).Success ? $"{s_oDataRefRegex.Replace(operationId, string.Empty)}ByRef" : operationId; + } + + private static string ResolveODataCastOperationId(string operationId) + { + var match = s_oDataCastRegex.Match(operationId); + return match.Success ? $"{match.Groups[1]}{match.Groups[2]}" : operationId; + } + + private static string SingularizeAndDeduplicateOperationId(IList operationIdSegments) + { + var segmentsCount = operationIdSegments.Count; + var lastSegmentIndex = segmentsCount - 1; + var singularizedSegments = new List(); + + for (int x = 0; x < segmentsCount; x++) + { + var segment = operationIdSegments[x].Singularize(inputIsKnownToBePlural: false); + + // If a segment name is contained in the previous segment, the latter is considered a duplicate. + // The last segment is ignored as a rule. + if ((x > 0 && x < lastSegmentIndex) && singularizedSegments.Last().Equals(segment, StringComparison.OrdinalIgnoreCase)) + continue; + + singularizedSegments.Add(segment); + } + return string.Join(".", singularizedSegments); + } + + private static string RemoveHashSuffix(string operationId) + { + // Remove hash suffix values from OperationIds. + return s_hashSuffixRegex.Match(operationId).Value; + } + + private static void FlattenSchema(OpenApiSchema schema, OpenApiSchema newSchema) + { + if (newSchema != null) + { + if (newSchema.Reference != null) + { + schema.Reference = newSchema.Reference; + schema.UnresolvedReference = true; + } + else + { + // Copies schema properties based on https://github.com/microsoft/OpenAPI.NET.OData/pull/264. + CopySchema(schema, newSchema); + } + } + } + + private static void CopySchema(OpenApiSchema schema, OpenApiSchema newSchema) + { + schema.Title ??= newSchema.Title; + schema.Type ??= newSchema.Type; + schema.Format ??= newSchema.Format; + schema.Description ??= newSchema.Description; + schema.Maximum ??= newSchema.Maximum; + schema.ExclusiveMaximum ??= newSchema.ExclusiveMaximum; + schema.Minimum ??= newSchema.Minimum; + schema.ExclusiveMinimum ??= newSchema.ExclusiveMinimum; + schema.MaxLength ??= newSchema.MaxLength; + schema.MinLength ??= newSchema.MinLength; + schema.Pattern ??= newSchema.Pattern; + schema.MultipleOf ??= newSchema.MultipleOf; + schema.Not ??= newSchema.Not; + schema.Required ??= newSchema.Required; + schema.Items ??= newSchema.Items; + schema.MaxItems ??= newSchema.MaxItems; + schema.MinItems ??= newSchema.MinItems; + schema.UniqueItems ??= newSchema.UniqueItems; + schema.Properties ??= newSchema.Properties; + schema.MaxProperties ??= newSchema.MaxProperties; + schema.MinProperties ??= newSchema.MinProperties; + schema.Discriminator ??= newSchema.Discriminator; + schema.ExternalDocs ??= newSchema.ExternalDocs; + schema.Enum ??= newSchema.Enum; + schema.ReadOnly = !schema.ReadOnly ? newSchema.ReadOnly : schema.ReadOnly; + schema.WriteOnly = !schema.WriteOnly ? newSchema.WriteOnly : schema.WriteOnly; + schema.Nullable = !schema.Nullable ? newSchema.Nullable : schema.Nullable; + schema.Deprecated = !schema.Deprecated ? newSchema.Deprecated : schema.Deprecated; + } + } +} diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index e00cd7ef..1c4262ba 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -29,6 +29,7 @@ internal class TransformCommandHandler : ICommandHandler public Option FilterByCollectionOption { get; set; } public Option InlineLocalOption { get; set; } public Option InlineExternalOption { get; set; } + public Option LanguageFormatOption { get; set; } public int Invoke(InvocationContext context) { @@ -49,6 +50,7 @@ public async Task InvokeAsync(InvocationContext context) LogLevel logLevel = context.ParseResult.GetValueForOption(LogLevelOption); bool inlineLocal = context.ParseResult.GetValueForOption(InlineLocalOption); bool inlineExternal = context.ParseResult.GetValueForOption(InlineExternalOption); + string? languageFormatOption = context.ParseResult.GetValueForOption(LanguageFormatOption); string filterbyoperationids = context.ParseResult.GetValueForOption(FilterByOperationIdsOption); string filterbytags = context.ParseResult.GetValueForOption(FilterByTagsOption); string filterbycollection = context.ParseResult.GetValueForOption(FilterByCollectionOption); @@ -59,7 +61,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, metadataVersion, format, terseOutput, settingsFile, inlineLocal, inlineExternal, filterbyoperationids, filterbytags, filterbycollection, logger, cancellationToken); + await OpenApiService.TransformOpenApiDocument(openapi, csdl, csdlFilter, output, cleanOutput, version, metadataVersion, format, terseOutput, settingsFile, inlineLocal, inlineExternal, languageFormatOption, filterbyoperationids, filterbytags, filterbycollection, logger, cancellationToken); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e370c84b..2cc6ceae 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -37,6 +37,7 @@ + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 5d5ec95d..73d12806 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -26,6 +26,7 @@ using System.Xml; using System.Reflection; using Microsoft.Extensions.Configuration; +using Microsoft.OpenApi.Hidi.Formatters; namespace Microsoft.OpenApi.Hidi { @@ -47,6 +48,7 @@ public static async Task TransformOpenApiDocument( string settingsFile, bool inlineLocal, bool inlineExternal, + string? languageFormatOption, string filterbyoperationids, string filterbytags, string filterbycollection, @@ -82,6 +84,13 @@ CancellationToken cancellationToken OpenApiDocument document = await GetOpenApi(openapi, csdl, csdlFilter, settingsFile, inlineExternal, logger, cancellationToken, metadataVersion); document = await FilterOpenApiDocument(filterbyoperationids, filterbytags, filterbycollection, document, logger, cancellationToken); + if (!string.IsNullOrWhiteSpace(languageFormatOption) && languageFormatOption.Equals("PowerShell", StringComparison.InvariantCultureIgnoreCase)) + { + // PowerShell Walker. + var powerShellFormatter = new PowerShellFormatter(); + var walker = new OpenApiWalker(powerShellFormatter); + walker.Walk(document); + } WriteOpenApi(output, terseOutput, inlineLocal, inlineExternal, openApiFormat, openApiVersion, document, logger); } catch (TaskCanceledException) @@ -98,7 +107,7 @@ CancellationToken cancellationToken } } - private static void WriteOpenApi(FileInfo output, bool terseOutput, bool inlineLocal, bool inlineExternal, OpenApiFormat openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger) + private static void WriteOpenApi(FileInfo output, bool terseOutput, bool inlineLocal, bool inlineExternal, OpenApiFormat openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger) { using (logger.BeginScope("Output")) { @@ -135,7 +144,7 @@ private static async Task GetOpenApi(string openapi, string csd { OpenApiDocument document; Stream stream; - + if (!string.IsNullOrEmpty(csdl)) { var stopwatch = new Stopwatch(); @@ -168,7 +177,7 @@ private static async Task GetOpenApi(string openapi, string csd return document; } - private static async Task FilterOpenApiDocument(string filterbyoperationids, string filterbytags, string filterbycollection, OpenApiDocument document, ILogger logger, CancellationToken cancellationToken) + private static async Task FilterOpenApiDocument(string filterbyoperationids, string filterbytags, string filterbycollection, OpenApiDocument document, ILogger logger, CancellationToken cancellationToken) { using (logger.BeginScope("Filter")) { @@ -239,8 +248,8 @@ private static Stream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSin /// Implementation of the validate command /// public static async Task ValidateOpenApiDocument( - string openapi, - ILogger logger, + string openapi, + ILogger logger, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(openapi)) @@ -285,7 +294,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli result = await new OpenApiStreamReader(new OpenApiReaderSettings { LoadExternalRefs = inlineExternal, - BaseUrl = openApiFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? + BaseUrl = openApiFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? new Uri(openApiFile) : new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) } @@ -296,7 +305,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli LogErrors(logger, result); stopwatch.Stop(); } - + return result; } @@ -310,7 +319,7 @@ internal static IConfiguration GetConfiguration(string settingsFile) return config; } - + /// /// Converts CSDL to OpenAPI /// @@ -329,7 +338,7 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri { settings.SemVerVersion = metadataVersion; } - + config.GetSection("OpenApiConvertSettings").Bind(settings); OpenApiDocument document = edmModel.ConvertToOpenApi(settings); @@ -354,7 +363,7 @@ public static OpenApiDocument FixReferences(OpenApiDocument document) return doc; } - + /// /// Takes in a file stream, parses the stream into a JsonDocument and gets a list of paths and Http methods /// @@ -377,13 +386,13 @@ public static Dictionary> ParseJsonCollectionFile(Stream st private static Dictionary> EnumerateJsonDocument(JsonElement itemElement, Dictionary> paths) { var itemsArray = itemElement.GetProperty("item"); - + foreach (var item in itemsArray.EnumerateArray()) { - if(item.ValueKind == JsonValueKind.Object) + if (item.ValueKind == JsonValueKind.Object) { - if(item.TryGetProperty("request", out var request)) - { + if (item.TryGetProperty("request", out var request)) + { // Fetch list of methods and urls from collection, store them in a dictionary var path = request.GetProperty("url").GetProperty("raw").ToString(); var method = request.GetProperty("method").ToString(); @@ -395,11 +404,11 @@ private static Dictionary> EnumerateJsonDocument(JsonElemen { paths[path].Add(method); } - } - else - { + } + else + { EnumerateJsonDocument(item, paths); - } + } } else { @@ -508,11 +517,11 @@ internal static async Task ShowOpenApiDocument(string openapi, string cs if (output == null) { var tempPath = Path.GetTempPath() + "/hidi/"; - if(!File.Exists(tempPath)) + if (!File.Exists(tempPath)) { Directory.CreateDirectory(tempPath); - } - + } + var fileName = Path.GetRandomFileName(); output = new FileInfo(Path.Combine(tempPath, fileName + ".html")); @@ -528,7 +537,7 @@ internal static async Task ShowOpenApiDocument(string openapi, string cs process.StartInfo.FileName = output.FullName; process.StartInfo.UseShellExecute = true; process.Start(); - + return output.FullName; } else // Write diagram as Markdown document to output file @@ -540,7 +549,7 @@ internal static async Task ShowOpenApiDocument(string openapi, string cs } logger.LogTrace("Created markdown document with diagram "); return output.FullName; - } + } } } catch (TaskCanceledException) @@ -563,7 +572,7 @@ private static void LogErrors(ILogger logger, ReadResult result) { foreach (var error in context.Errors) { - logger.LogError($"Detected error during parsing: {error}",error.ToString()); + logger.LogError($"Detected error during parsing: {error}", error.ToString()); } } } @@ -581,7 +590,7 @@ internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocum // write a span for each mermaidcolorscheme foreach (var style in OpenApiUrlTreeNode.MermaidNodeStyles) { - writer.WriteLine($"{style.Key.Replace("_"," ")}"); + writer.WriteLine($"{style.Key.Replace("_", " ")}"); } writer.WriteLine("
"); writer.WriteLine(); @@ -609,7 +618,7 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d writer.WriteLine("

" + document.Info.Title + "

"); writer.WriteLine(); writer.WriteLine($"

API Description: {sourceUrl}

"); - + writer.WriteLine(@"
"); // write a span for each mermaidcolorscheme foreach (var style in OpenApiUrlTreeNode.MermaidNodeStyles) @@ -622,8 +631,8 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d rootNode.WriteMermaid(writer); writer.WriteLine(""); - // Write script tag to include JS library for rendering markdown - writer.WriteLine(@""); - // Write script tag to include JS library for rendering mermaid - writer.WriteLine("("--format", "File format"); formatOption.AddAlias("-f"); - + var terseOutputOption = new Option("--terse-output", "Produce terse json output"); terseOutputOption.AddAlias("--to"); @@ -76,6 +73,9 @@ internal static RootCommand CreateRootCommand() var inlineExternalOption = new Option("--inline-external", "Inline external $ref instances"); inlineExternalOption.AddAlias("--ie"); + // TODO: Move to settings file (--settings-path). + var languageFormatOption = new Option("--language-style", "Language to format the OpenAPI document. e.g. powershell"); + var validateCommand = new Command("validate") { descriptionOption, @@ -105,7 +105,8 @@ internal static RootCommand CreateRootCommand() filterByTagsOption, filterByCollectionOption, inlineLocalOption, - inlineExternalOption + inlineExternalOption, + languageFormatOption }; transformCommand.Handler = new TransformCommandHandler @@ -125,7 +126,8 @@ internal static RootCommand CreateRootCommand() FilterByTagsOption = filterByTagsOption, FilterByCollectionOption = filterByCollectionOption, InlineLocalOption = inlineLocalOption, - InlineExternalOption = inlineExternalOption + InlineExternalOption = inlineExternalOption, + LanguageFormatOption = languageFormatOption }; var showCommand = new Command("show") diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 9081c49f..50a85fb1 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -3,16 +3,12 @@ using System.CommandLine; using System.CommandLine.Invocation; -using System.Text; -using Castle.Core.Logging; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi; -using Microsoft.OpenApi.Hidi.Handlers; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Services; -using Microsoft.VisualStudio.TestPlatform.Utilities; using Xunit; namespace Microsoft.OpenApi.Tests.Services @@ -36,7 +32,7 @@ public async Task ReturnConvertedCSDLFile() Assert.NotEmpty(openApiDoc.Paths); Assert.Equal(expectedPathCount, openApiDoc.Paths.Count); } - + [Theory] [InlineData("Todos.Todo.UpdateTodo", null, 1)] [InlineData("Todos.Todo.ListTodo", null, 1)] @@ -47,7 +43,7 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml"); var fileInput = new FileInfo(filePath); var csdlStream = fileInput.OpenRead(); - + // Act var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); @@ -58,7 +54,7 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen Assert.NotEmpty(subsetOpenApiDocument.Paths); Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); } - + [Theory] [InlineData("UtilityFiles/appsettingstest.json")] [InlineData(null)] @@ -122,7 +118,7 @@ public void ShowCommandGeneratesMermaidDiagramAsHtml() var output = reader.ReadToEnd(); Assert.Contains("graph LR", output); } - + [Fact] public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() @@ -190,18 +186,18 @@ public async Task TransformCommandConvertsOpenApi() { var fileinfo = new FileInfo("sample.json"); // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml",null, null, fileinfo, true, null, null, null,false,null,false,false,null,null,null,new Logger(new LoggerFactory()), new CancellationToken()); + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, fileinfo, true, null, null, null, false, null, false, false, null, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText("sample.json"); Assert.NotEmpty(output); } - + [Fact] public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() { // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, null, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, null, null, null, false, null, false, false, null, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText("output.yml"); Assert.NotEmpty(output); @@ -211,7 +207,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() public async Task TransformCommandConvertsCsdlWithDefaultOutputname() { // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument(null, "UtilityFiles\\Todo.xml", null, null, true, null, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + await OpenApiService.TransformOpenApiDocument(null, "UtilityFiles\\Todo.xml", null, null, true, null, null, null, false, null, false, false, null, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText("output.yml"); Assert.NotEmpty(output); @@ -221,7 +217,7 @@ public async Task TransformCommandConvertsCsdlWithDefaultOutputname() public async Task TransformCommandConvertsOpenApiWithDefaultOutputnameAndSwitchFormat() { // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, "3.0", null, OpenApiFormat.Yaml, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); + await OpenApiService.TransformOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", null, null, null, true, "3.0", null, OpenApiFormat.Yaml, false, null, false, false, null, null, null, null, new Logger(new LoggerFactory()), new CancellationToken()); var output = File.ReadAllText("output.yml"); Assert.NotEmpty(output); @@ -231,7 +227,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputnameAndSwitchF public async Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() { await Assert.ThrowsAsync(async () => - await OpenApiService.TransformOpenApiDocument(null, null, null, null, true, null, null, null, false, null, false, false, null, null, null, new Logger(new LoggerFactory()), new CancellationToken())); + await OpenApiService.TransformOpenApiDocument(null, null, null, null, true, null, null, null, false, null, false, false, null, null, null, null, new Logger(new LoggerFactory()), new CancellationToken())); } @@ -239,7 +235,7 @@ await Assert.ThrowsAsync(async () => public void InvokeTransformCommand() { var rootCommand = Program.CreateRootCommand(); - var args = new string[] { "transform", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.json","--co" }; + var args = new string[] { "transform", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.json", "--co" }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "transform").First().Handler; var context = new InvocationContext(parseResult); From 8d12a670861d00e407e2fddf82a70f57615e2c62 Mon Sep 17 00:00:00 2001 From: Peter Ombwa Date: Tue, 9 May 2023 17:01:26 -0700 Subject: [PATCH 269/720] Use strongly typed config and options --- .../Extensions/CommandExtensions.cs | 19 +++ .../Handlers/ShowCommandHandler.cs | 25 ++-- .../Handlers/TransformCommandHandler.cs | 49 ++----- .../Handlers/ValidateCommandHandler.cs | 19 +-- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 88 ++++-------- .../Options/CommandOptions.cs | 93 ++++++++++++ .../Options/FilterOptions.cs | 12 ++ .../Options/HidiOptions.cs | 62 ++++++++ src/Microsoft.OpenApi.Hidi/Program.cs | 134 ++---------------- .../Utilities/SettingsUtilities.cs | 32 +++++ .../Services/OpenApiServiceTests.cs | 58 ++++++-- 11 files changed, 335 insertions(+), 256 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs create mode 100644 src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs create mode 100644 src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs create mode 100644 src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs create mode 100644 src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs new file mode 100644 index 00000000..9d507743 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System.Collections.Generic; +using System.CommandLine; + +namespace Microsoft.OpenApi.Hidi.Extensions +{ + internal static class CommandExtensions + { + public static void AddOptions(this Command command, IReadOnlyList
"); writer.WriteLine(); @@ -609,7 +609,7 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d writer.WriteLine("

" + document.Info.Title + "

"); writer.WriteLine(); writer.WriteLine($"

API Description: {sourceUrl}

"); - + writer.WriteLine(@"
"); // write a span for each mermaidcolorscheme foreach (var style in OpenApiUrlTreeNode.MermaidNodeStyles) @@ -622,8 +622,8 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d rootNode.WriteMermaid(writer); writer.WriteLine(""); - // Write script tag to include JS library for rendering markdown - writer.WriteLine(@""); - // Write script tag to include JS library for rendering mermaid - writer.WriteLine("("--format", "File format"); formatOption.AddAlias("-f"); - + var terseOutputOption = new Option("--terse-output", "Produce terse json output"); terseOutputOption.AddAlias("--to"); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 176fb20d..ec1722e7 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -1,8 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System; -using System.IO; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi; using Microsoft.OpenApi.Models; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index fbf11b25..dd175f04 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -1,10 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Text.Json.Nodes; using Json.Schema; using Microsoft.OpenApi.Any; -using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; @@ -186,7 +184,7 @@ public static OpenApiDocument CreateOpenApiDocument() Required = true, Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String) } - } + } }, ["/users"] = new OpenApiPathItem() { @@ -221,14 +219,14 @@ public static OpenApiDocument CreateOpenApiDocument() Schema31 = new JsonSchemaBuilder() .Title("Collection of user") .Type(SchemaValueType.Object) - .Properties(("value", + .Properties(("value", new JsonSchemaBuilder() .Type(SchemaValueType.Array) .Items(new JsonSchemaBuilder() .Ref("microsoft.graph.user") .Build()) .Build())) - .Build() + .Build() } } } @@ -407,7 +405,7 @@ public static OpenApiDocument CreateOpenApiDocument() new JsonSchemaBuilder() .Type(SchemaValueType.String) .Build()) - .Build() + .Build() } } } @@ -482,7 +480,7 @@ public static OpenApiDocument CreateOpenApiDocument() Schema31 = new JsonSchemaBuilder() .Title("Collection of hostSecurityProfile") .Type(SchemaValueType.Object) - .Properties(("value1", + .Properties(("value1", new JsonSchemaBuilder() .Type(SchemaValueType.Array) .Items(new JsonSchemaBuilder().Ref("microsoft.graph.networkInterface").Build()) From 44840a71fe12fddc2859cbf4e767f820a93b3a09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Jun 2023 21:57:06 +0000 Subject: [PATCH 305/720] Bump Microsoft.OData.Edm from 7.16.0 to 7.17.0 Bumps Microsoft.OData.Edm from 7.16.0 to 7.17.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 004aa48c..3a5ff688 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 4169d9cf147d8f5e6f2508040ac6262b7a0784b8 Mon Sep 17 00:00:00 2001 From: Mike Kistler Date: Mon, 26 Jun 2023 20:30:15 -0500 Subject: [PATCH 306/720] Fix hardcoded non-portable path separators --- .../Services/OpenApiFilterServiceTests.cs | 8 ++--- .../Services/OpenApiServiceTests.cs | 33 ++++++++++--------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 3733ad84..3c039b9a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -51,7 +51,7 @@ public void ReturnFilteredOpenApiDocumentBasedOnOperationIdsAndTags(string opera public void ReturnFilteredOpenApiDocumentBasedOnPostmanCollection() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\postmanCollection_ver2.json"); + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver2.json"); var fileInput = new FileInfo(filePath); var stream = fileInput.OpenRead(); @@ -107,7 +107,7 @@ public void TestPredicateFiltersUsingRelativeRequestUrls() public void ShouldParseNestedPostmanCollection() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\postmanCollection_ver3.json"); + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver3.json"); var fileInput = new FileInfo(filePath); var stream = fileInput.OpenRead(); @@ -124,7 +124,7 @@ public void ShouldParseNestedPostmanCollection() public void ThrowsExceptionWhenUrlsInCollectionAreMissingFromSourceDocument() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\postmanCollection_ver1.json"); + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver1.json"); var fileInput = new FileInfo(filePath); var stream = fileInput.OpenRead(); @@ -141,7 +141,7 @@ public void ThrowsExceptionWhenUrlsInCollectionAreMissingFromSourceDocument() public void ContinueProcessingWhenUrlsInCollectionAreMissingFromSourceDocument() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\postmanCollection_ver4.json"); + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver4.json"); var fileInput = new FileInfo(filePath); var stream = fileInput.OpenRead(); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index c092da51..49f1bbd9 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -30,7 +30,7 @@ public OpenApiServiceTests() public async Task ReturnConvertedCSDLFile() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml"); + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "Todo.xml"); var fileInput = new FileInfo(filePath); var csdlStream = fileInput.OpenRead(); // Act @@ -50,7 +50,7 @@ public async Task ReturnConvertedCSDLFile() public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\Todo.xml"); + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "Todo.xml"); var fileInput = new FileInfo(filePath); var csdlStream = fileInput.OpenRead(); @@ -137,7 +137,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() // create a dummy ILogger instance for testing var options = new HidiOptions() { - OpenApi = "UtilityFiles\\SampleOpenApi.yml", + OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), Output = new FileInfo("sample.md") }; @@ -152,7 +152,7 @@ public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagram() { var options = new HidiOptions() { - OpenApi = "UtilityFiles\\SampleOpenApi.yml" + OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml") }; var filePath = await OpenApiService.ShowOpenApiDocument(options, _logger, new CancellationToken()); Assert.True(File.Exists(filePath)); @@ -163,7 +163,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiag { var options = new HidiOptions() { - Csdl = "UtilityFiles\\Todo.xml", + Csdl = Path.Combine("UtilityFiles", "Todo.xml"), CsdlFilter = "todos", Output = new FileInfo("sample.md") }; @@ -201,7 +201,7 @@ await Assert.ThrowsAsync(async () => public async Task ValidateCommandProcessesOpenApi() { // create a dummy ILogger instance for testing - await OpenApiService.ValidateOpenApiDocument("UtilityFiles\\SampleOpenApi.yml", _logger, new CancellationToken()); + await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, new CancellationToken()); Assert.True(true); } @@ -212,7 +212,7 @@ public async Task TransformCommandConvertsOpenApi() { HidiOptions options = new HidiOptions { - OpenApi = "UtilityFiles\\SampleOpenApi.yml", + OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), Output = new FileInfo("sample.json"), CleanOutput = true, TerseOutput = false, @@ -232,7 +232,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() { HidiOptions options = new HidiOptions { - OpenApi = "UtilityFiles\\SampleOpenApi.yml", + OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, TerseOutput = false, InlineLocal = false, @@ -250,7 +250,7 @@ public async Task TransformCommandConvertsCsdlWithDefaultOutputname() { HidiOptions options = new HidiOptions { - Csdl = "UtilityFiles\\Todo.xml", + Csdl = Path.Combine("UtilityFiles", "Todo.xml"), CleanOutput = true, TerseOutput = false, InlineLocal = false, @@ -268,7 +268,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputnameAndSwitchF { HidiOptions options = new HidiOptions { - OpenApi = "UtilityFiles\\SampleOpenApi.yml", + OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, Version = "3.0", OpenApiFormat = OpenApiFormat.Yaml, @@ -301,10 +301,10 @@ await Assert.ThrowsAsync(async () => [Fact] public async Task TransformToPowerShellCompliantOpenApi() { - var settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles\\examplepowershellsettings.json"); + var settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "examplepowershellsettings.json"); HidiOptions options = new HidiOptions { - OpenApi = "UtilityFiles\\SampleOpenApi.yml", + OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, Version = "3.0", OpenApiFormat = OpenApiFormat.Yaml, @@ -324,7 +324,8 @@ public async Task TransformToPowerShellCompliantOpenApi() public void InvokeTransformCommand() { var rootCommand = Program.CreateRootCommand(); - var args = new string[] { "transform", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.json", "--co" }; + var openapi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); + var args = new string[] { "transform", "-d", openapi, "-o", "sample.json", "--co" }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "transform").First().Handler; var context = new InvocationContext(parseResult); @@ -340,7 +341,8 @@ public void InvokeTransformCommand() public void InvokeShowCommand() { var rootCommand = Program.CreateRootCommand(); - var args = new string[] { "show", "-d", ".\\UtilityFiles\\SampleOpenApi.yml", "-o", "sample.md" }; + var openapi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); + var args = new string[] { "show", "-d", openapi, "-o", "sample.md" }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "show").First().Handler; var context = new InvocationContext(parseResult); @@ -355,7 +357,8 @@ public void InvokeShowCommand() public void InvokePluginCommand() { var rootCommand = Program.CreateRootCommand(); - var args = new string[] { "plugin", "-m", ".\\UtilityFiles\\exampleapimanifest.json", "--of", AppDomain.CurrentDomain.BaseDirectory }; + var manifest = Path.Combine(".", "UtilityFiles", "exampleapimanifest.json"); + var args = new string[] { "plugin", "-m", manifest, "--of", AppDomain.CurrentDomain.BaseDirectory }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "plugin").First().Handler; var context = new InvocationContext(parseResult); From 15c04e445a6289ff5c19615e0266b86f2a608b66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Jun 2023 21:57:18 +0000 Subject: [PATCH 307/720] Bump Microsoft.NET.Test.Sdk from 17.6.2 to 17.6.3 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.6.2 to 17.6.3. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.6.2...v17.6.3) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 87fade6c..deae3d05 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -1,4 +1,4 @@ - + net7.0 @@ -13,7 +13,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From 15bc4af4dfc1ee27dfba1dd0ef8dab5bce78f3ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Jul 2023 21:18:02 +0000 Subject: [PATCH 308/720] Bump xunit from 2.4.2 to 2.5.0 Bumps [xunit](https://github.com/xunit/xunit) from 2.4.2 to 2.5.0. - [Commits](https://github.com/xunit/xunit/compare/2.4.2...2.5.0) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index deae3d05..c65467a9 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 14bd03d77f7eec5d93ec91bdbc2c87682ff5b62a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 8 Jul 2023 01:17:00 +0000 Subject: [PATCH 309/720] Bump xunit.runner.visualstudio from 2.4.5 to 2.5.0 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.4.5 to 2.5.0. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/v2.4.5...2.5.0) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c65467a9..baeed876 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 15c7f5e97596e00686c1937e6fce701c9e35dbe5 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 18 Jul 2023 13:06:54 +0200 Subject: [PATCH 310/720] Rename Schema31 to Schema --- .../UtilityFiles/OpenApiDocumentMock.cs | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index dd175f04..860d2eaf 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -84,7 +84,7 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) } } }, @@ -100,7 +100,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.Array) + Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array) } } } @@ -118,7 +118,7 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) } } } @@ -149,7 +149,7 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) } } }, @@ -165,7 +165,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.Array) + Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array) } } } @@ -182,7 +182,7 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) } } }, @@ -216,7 +216,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema31 = new JsonSchemaBuilder() + Schema = new JsonSchemaBuilder() .Title("Collection of user") .Type(SchemaValueType.Object) .Properties(("value", @@ -267,7 +267,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema31 = new JsonSchemaBuilder().Ref("microsoft.graph.user").Build() + Schema = new JsonSchemaBuilder().Ref("microsoft.graph.user").Build() } } } @@ -330,7 +330,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Query, Required = true, Description = "Select properties to be returned", - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.Array).Build() + Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array).Build() // missing explode parameter } }, @@ -346,7 +346,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema31 = new JsonSchemaBuilder().Ref("microsoft.graph.message").Build() + Schema = new JsonSchemaBuilder().Ref("microsoft.graph.message").Build() } } } @@ -384,7 +384,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Required = true, Description = "key: id of administrativeUnit", - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String).Build() + Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build() } } }, @@ -400,7 +400,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema31 = new JsonSchemaBuilder() + Schema = new JsonSchemaBuilder() .AnyOf( new JsonSchemaBuilder() .Type(SchemaValueType.String) @@ -477,7 +477,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema31 = new JsonSchemaBuilder() + Schema = new JsonSchemaBuilder() .Title("Collection of hostSecurityProfile") .Type(SchemaValueType.Object) .Properties(("value1", @@ -522,7 +522,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of call", Required = true, - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), + Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), Extensions = new Dictionary { { @@ -574,7 +574,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of group", Required = true, - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), + Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), Extensions = new Dictionary { { "x-ms-docs-key-type", new OpenApiAny("group") } } }, new OpenApiParameter() @@ -583,7 +583,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of event", Required = true, - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), + Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), Extensions = new Dictionary { { "x-ms-docs-key-type", new OpenApiAny("event") } } } }, @@ -599,7 +599,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema31 = new JsonSchemaBuilder().Type(SchemaValueType.Array).Ref("microsoft.graph.event").Build() + Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array).Ref("microsoft.graph.event").Build() } } } @@ -639,7 +639,7 @@ public static OpenApiDocument CreateOpenApiDocument() }, Components = new OpenApiComponents { - Schemas31 = new Dictionary + Schemas = new Dictionary { { "microsoft.graph.networkInterface", new JsonSchemaBuilder() From a21f91a0fa2ddfdd73ce484e6131d370b9f0e1c1 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Fri, 21 Jul 2023 09:53:04 +0200 Subject: [PATCH 311/720] Bump lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3a5ff688..d595f961 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.5 + 1.2.6 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From a5290539dbfaa20d52975b15d25fd5f3108e10ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Aug 2023 21:05:58 +0000 Subject: [PATCH 312/720] Bump Microsoft.NET.Test.Sdk from 17.6.3 to 17.7.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.6.3 to 17.7.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.6.3...v17.7.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index baeed876..c32c062b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From fd6b2232864811268fc222a551be81dc6e1e5271 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 21:30:21 +0000 Subject: [PATCH 313/720] Bump Moq from 4.18.4 to 4.20.1 Bumps [Moq](https://github.com/moq/moq) from 4.18.4 to 4.20.1. - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/moq/moq/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq/compare/v4.18.4...v4.20.1) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c32c062b..cd5f77b4 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ all - + runtime; build; native; contentfiles; analyzers; buildtransitive From 3e5614ab2c4b988fbe28b0fb1abc971f94193a86 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Aug 2023 21:39:59 +0000 Subject: [PATCH 314/720] Bump Moq from 4.20.1 to 4.20.2 Bumps [Moq](https://github.com/moq/moq) from 4.20.1 to 4.20.2. - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/moq/moq/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq/compare/v4.20.1...v4.20.2) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index cd5f77b4..7950e42f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ all - + runtime; build; native; contentfiles; analyzers; buildtransitive From 765bee6126ada41415c51576e8ff687be8f7775e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Aug 2023 21:05:52 +0000 Subject: [PATCH 315/720] Bump Moq from 4.20.2 to 4.20.69 Bumps [Moq](https://github.com/moq/moq) from 4.20.2 to 4.20.69. - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/moq/moq/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq/compare/v4.20.2...v4.20.69) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 7950e42f..584942b1 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ all - + runtime; build; native; contentfiles; analyzers; buildtransitive From 74d68c83e90ae6a72923b46f38b08a2f5286f9c1 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 16 Aug 2023 12:46:27 +0300 Subject: [PATCH 316/720] More code cleanup --- .../UtilityFiles/OpenApiDocumentMock.cs | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 860d2eaf..7ff07be0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -217,16 +217,16 @@ public static OpenApiDocument CreateOpenApiDocument() new OpenApiMediaType { Schema = new JsonSchemaBuilder() - .Title("Collection of user") - .Type(SchemaValueType.Object) - .Properties(("value", - new JsonSchemaBuilder() - .Type(SchemaValueType.Array) - .Items(new JsonSchemaBuilder() - .Ref("microsoft.graph.user") - .Build()) - .Build())) - .Build() + .Title("Collection of user") + .Type(SchemaValueType.Object) + .Properties(("value", + new JsonSchemaBuilder() + .Type(SchemaValueType.Array) + .Items(new JsonSchemaBuilder() + .Ref("microsoft.graph.user") + .Build()) + .Build())) + .Build() } } } @@ -401,11 +401,11 @@ public static OpenApiDocument CreateOpenApiDocument() new OpenApiMediaType { Schema = new JsonSchemaBuilder() - .AnyOf( - new JsonSchemaBuilder() - .Type(SchemaValueType.String) - .Build()) - .Build() + .AnyOf( + new JsonSchemaBuilder() + .Type(SchemaValueType.String) + .Build()) + .Build() } } } @@ -478,14 +478,13 @@ public static OpenApiDocument CreateOpenApiDocument() new OpenApiMediaType { Schema = new JsonSchemaBuilder() - .Title("Collection of hostSecurityProfile") - .Type(SchemaValueType.Object) - .Properties(("value1", - new JsonSchemaBuilder() - .Type(SchemaValueType.Array) - .Items(new JsonSchemaBuilder().Ref("microsoft.graph.networkInterface").Build()) - .Build())) - .Build() + .Title("Collection of hostSecurityProfile") + .Type(SchemaValueType.Object) + .Properties(("value1", + new JsonSchemaBuilder() + .Type(SchemaValueType.Array) + .Items(new JsonSchemaBuilder().Ref("microsoft.graph.networkInterface")))) + .Build() } } } @@ -645,9 +644,10 @@ public static OpenApiDocument CreateOpenApiDocument() "microsoft.graph.networkInterface", new JsonSchemaBuilder() .Title("networkInterface") .Type(SchemaValueType.Object) - .Properties(("description", new JsonSchemaBuilder() - .Type(SchemaValueType.String) - .Description("Description of the NIC (e.g. Ethernet adapter, Wireless LAN adapter Local Area Connection <#>, etc.).").Build())) + .Properties( + ("description", new JsonSchemaBuilder() + .Type(SchemaValueType.String) + .Description("Description of the NIC (e.g. Ethernet adapter, Wireless LAN adapter Local Area Connection <#>, etc.)."))) .Build() } } From 99d41518c50f9740fc71a742c1d15cf6e4746da1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Aug 2023 21:22:10 +0000 Subject: [PATCH 317/720] Bump Microsoft.NET.Test.Sdk from 17.7.0 to 17.7.1 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.7.0 to 17.7.1. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.7.0...v17.7.1) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 584942b1..baa54313 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From e6ebc3d5e87a3d871b9e6e350527be32a40773dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Aug 2023 21:19:42 +0000 Subject: [PATCH 318/720] Bump Microsoft.NET.Test.Sdk from 17.7.1 to 17.7.2 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.7.1 to 17.7.2. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.7.1...v17.7.2) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index baa54313..ebe55934 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From 9a0d0fae3b87b5a9cb4ce191fa413cb803d41e9e Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Thu, 31 Aug 2023 23:25:22 +0300 Subject: [PATCH 319/720] Bump up lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index d595f961..294219e5 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.6 + 1.2.7 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From 69903ce5293a3d4fa75af9db076fdbea2900c75a Mon Sep 17 00:00:00 2001 From: Andrew Omondi Date: Fri, 1 Sep 2023 17:10:22 +0300 Subject: [PATCH 320/720] Bump hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 294219e5..dd617aef 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.7 + 1.2.8 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET @@ -44,7 +44,7 @@ - + From 6c8a485b9487924e426f6d25b3abead1d3b6f3c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Sep 2023 21:56:31 +0000 Subject: [PATCH 321/720] Bump Microsoft.OpenApi.OData from 1.5.0-preview3 to 1.5.0-preview4 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.5.0-preview3 to 1.5.0-preview4. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index dd617aef..b61c2e43 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -44,7 +44,7 @@ - + From 42124b98dcb0d7245b6e0be2a2e2e09d6c740ab2 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 6 Sep 2023 14:06:42 -0400 Subject: [PATCH 322/720] - bumps patch for microsoft extensions Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b61c2e43..25dfeb57 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.8 + 1.2.9 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From b4eed5cb6707a1c90797d58876be38ac6812c338 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Sep 2023 21:51:40 +0000 Subject: [PATCH 323/720] Bump Microsoft.OData.Edm from 7.17.0 to 7.18.0 Bumps Microsoft.OData.Edm from 7.17.0 to 7.18.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b61c2e43..cca01bd0 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -43,7 +43,7 @@ - + From 534787b416dbe66b281abafb7b24d32c6a237263 Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Tue, 12 Sep 2023 15:37:24 +0300 Subject: [PATCH 324/720] Pass JsonSchema by reference So that changes can be bubbled up --- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index e7691110..5c995d8f 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -20,7 +20,7 @@ public override void Visit(OpenApiParameter parameter) public int SchemaCount { get; set; } = 0; - public override void Visit(JsonSchema schema) + public override void Visit(ref JsonSchema schema) { SchemaCount++; } From e409e592b248ec3c3d0576375db671368947ef20 Mon Sep 17 00:00:00 2001 From: waldekmastykarz Date: Thu, 14 Sep 2023 16:36:38 +0200 Subject: [PATCH 325/720] Fixes null reference exception. Closes #1342 --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 78f48cd4..9797ecd6 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -151,7 +151,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, } else if (postmanCollection != null) { - requestUrls = EnumerateJsonDocument(postmanCollection.RootElement, requestUrls); + requestUrls = EnumerateJsonDocument(postmanCollection.RootElement, new()); logger.LogTrace("Finished fetching the list of paths and Http methods defined in the Postman collection."); } From d8c7aadf314c1037c721bbea60e336659db3f91d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 14 Sep 2023 15:25:53 -0400 Subject: [PATCH 326/720] - enables NRT for main hidi project --- .../Extensions/OpenApiExtensibleExtensions.cs | 4 +- .../Extensions/StringExtensions.cs | 9 +- .../Formatters/PowerShellFormatter.cs | 6 +- .../Handlers/PluginCommandHandler.cs | 3 +- .../Handlers/ShowCommandHandler.cs | 3 +- .../Handlers/TransformCommandHandler.cs | 3 +- .../Handlers/ValidateCommandHandler.cs | 4 +- .../Microsoft.OpenApi.Hidi.csproj | 11 ++- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 94 ++++++++++--------- .../Options/FilterOptions.cs | 8 +- .../Options/HidiOptions.cs | 23 ++--- .../Utilities/SettingsUtilities.cs | 7 +- .../Services/OpenApiFilterServiceTests.cs | 2 +- .../Services/OpenApiServiceTests.cs | 16 ++-- 14 files changed, 111 insertions(+), 82 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs index 194d122b..faf03c3f 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs @@ -12,13 +12,13 @@ internal static class OpenApiExtensibleExtensions /// A dictionary of . /// The key corresponding to the . /// A value matching the provided extensionKey. Return null when extensionKey is not found. - public static string GetExtension(this IDictionary extensions, string extensionKey) + internal static string GetExtension(this IDictionary extensions, string extensionKey) { if (extensions.TryGetValue(extensionKey, out var value) && value is OpenApiString castValue) { return castValue.Value; } - return default; + return string.Empty; } } } diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs index e5c4b81c..99208a1d 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs @@ -12,13 +12,16 @@ internal static class StringExtensions /// /// Checks if the specified searchValue is equal to the target string based on the specified . /// - /// The target string to commpare to. + /// The target string to compare to. /// The search string to seek. /// The to use. This defaults to . /// true if the searchValue parameter occurs within this string; otherwise, false. - public static bool IsEquals(this string target, string searchValue, StringComparison comparison = StringComparison.OrdinalIgnoreCase) + public static bool IsEquals(this string? target, string? searchValue, StringComparison comparison = StringComparison.OrdinalIgnoreCase) { - if (string.IsNullOrWhiteSpace(target) || string.IsNullOrWhiteSpace(searchValue)) + if (string.IsNullOrWhiteSpace(target) && string.IsNullOrWhiteSpace(searchValue)) + { + return true; + } else if (string.IsNullOrWhiteSpace(target)) { return false; } diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index 02a2e194..f876e400 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -191,9 +191,8 @@ private void AddAdditionalPropertiesToSchema(OpenApiSchema schema) private static void ResolveOneOfSchema(OpenApiSchema schema) { - if (schema.OneOf?.Any() ?? false) + if (schema.OneOf?.FirstOrDefault() is {} newSchema) { - var newSchema = schema.OneOf.FirstOrDefault(); schema.OneOf = null; FlattenSchema(schema, newSchema); } @@ -201,9 +200,8 @@ private static void ResolveOneOfSchema(OpenApiSchema schema) private static void ResolveAnyOfSchema(OpenApiSchema schema) { - if (schema.AnyOf?.Any() ?? false) + if (schema.AnyOf?.FirstOrDefault() is {} newSchema) { - var newSchema = schema.AnyOf.FirstOrDefault(); schema.AnyOf = null; FlattenSchema(schema, newSchema); } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs index aae0285f..ae090207 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs @@ -5,6 +5,7 @@ using System.CommandLine.Invocation; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi.Options; @@ -24,7 +25,7 @@ public int Invoke(InvocationContext context) public async Task InvokeAsync(InvocationContext context) { HidiOptions hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); - CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); + CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(hidiOptions.LogLevel); var logger = loggerFactory.CreateLogger(); diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs index eea087e3..7db17fea 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs @@ -5,6 +5,7 @@ using System.CommandLine.Invocation; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi.Options; @@ -24,7 +25,7 @@ public int Invoke(InvocationContext context) public async Task InvokeAsync(InvocationContext context) { HidiOptions hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); - CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); + CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(hidiOptions.LogLevel); var logger = loggerFactory.CreateLogger(); diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index 85e9c05f..440c20e0 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -5,6 +5,7 @@ using System.CommandLine.Invocation; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi.Options; @@ -24,7 +25,7 @@ public int Invoke(InvocationContext context) public async Task InvokeAsync(InvocationContext context) { HidiOptions hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); - CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); + CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(hidiOptions.LogLevel); var logger = loggerFactory.CreateLogger(); diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index 29e0a951..8bb5676b 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -5,6 +5,7 @@ using System.CommandLine.Invocation; using System.Threading; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Hidi.Options; @@ -26,11 +27,12 @@ public int Invoke(InvocationContext context) public async Task InvokeAsync(InvocationContext context) { HidiOptions hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); - CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetService(typeof(CancellationToken)); + CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(hidiOptions.LogLevel); var logger = loggerFactory.CreateLogger(); try { + if (hidiOptions.OpenApi is null) throw new InvalidOperationException("OpenApi file is required"); await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index fd0d9325..7e8c8937 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -3,8 +3,10 @@ Exe net7.0 - 9.0 + latest + true true + enable http://go.microsoft.com/fwlink/?LinkID=288890 https://github.com/Microsoft/OpenAPI.NET MIT @@ -26,6 +28,9 @@ true true + NU5048 + true + readme.md @@ -62,4 +67,8 @@ + + + + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 9797ecd6..71a0ff2f 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -23,6 +23,7 @@ using Microsoft.OpenApi.ApiManifest; using Microsoft.OpenApi.ApiManifest.OpenAI; using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Hidi.Extensions; using Microsoft.OpenApi.Hidi.Formatters; using Microsoft.OpenApi.Hidi.Options; using Microsoft.OpenApi.Hidi.Utilities; @@ -69,20 +70,18 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l OpenApiSpecVersion openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_0; // If ApiManifest is provided, set the referenced OpenAPI document - var apiDependency = await FindApiDependency(options.FilterOptions?.FilterByApiManifest, logger, cancellationToken); + var apiDependency = await FindApiDependency(options.FilterOptions.FilterByApiManifest, logger, cancellationToken); if (apiDependency != null) { options.OpenApi = apiDependency.ApiDescripionUrl; } // If Postman Collection is provided, load it - JsonDocument postmanCollection = null; - if (!String.IsNullOrEmpty(options.FilterOptions?.FilterByCollection)) + JsonDocument? postmanCollection = null; + if (!string.IsNullOrEmpty(options.FilterOptions?.FilterByCollection)) { - using (var collectionStream = await GetStream(options.FilterOptions.FilterByCollection, logger, cancellationToken)) - { - postmanCollection = JsonDocument.Parse(collectionStream); - } + using var collectionStream = await GetStream(options.FilterOptions.FilterByCollection, logger, cancellationToken); + postmanCollection = JsonDocument.Parse(collectionStream); } // Load OpenAPI document @@ -94,7 +93,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l } var languageFormat = options.SettingsConfig?.GetSection("LanguageFormat")?.Value; - if (Extensions.StringExtensions.IsEquals(languageFormat, "PowerShell")) + if ("PowerShell".IsEquals(languageFormat)) { // PowerShell Walker. var powerShellFormatter = new PowerShellFormatter(); @@ -117,16 +116,16 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l } } - private static async Task FindApiDependency(string apiManifestPath, ILogger logger, CancellationToken cancellationToken) + private static async Task FindApiDependency(string? apiManifestPath, ILogger logger, CancellationToken cancellationToken) { - ApiDependency apiDependency = null; + ApiDependency? apiDependency = null; // If API Manifest is provided, load it, use it get the OpenAPI path - ApiManifestDocument apiManifest = null; + ApiManifestDocument? apiManifest = null; if (!string.IsNullOrEmpty(apiManifestPath)) { // Extract fragment identifier if passed as the name of the ApiDependency var apiManifestRef = apiManifestPath.Split('#'); - string apiDependencyName = null; + var apiDependencyName = string.Empty; if (apiManifestRef.Length > 1) { apiDependencyName = apiManifestRef[1]; @@ -136,15 +135,15 @@ private static async Task FindApiDependency(string apiManifestPat apiManifest = ApiManifestDocument.Load(JsonDocument.Parse(fileStream).RootElement); } - apiDependency = apiDependencyName != null ? apiManifest.ApiDependencies[apiDependencyName] : apiManifest.ApiDependencies.First().Value; + apiDependency = !string.IsNullOrEmpty(apiDependencyName) && apiManifest.ApiDependencies.TryGetValue(apiDependencyName, out var dependency) ? dependency : apiManifest.ApiDependencies.First().Value; } return apiDependency; } - private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, ApiDependency apiDependency, JsonDocument postmanCollection, OpenApiDocument document) + private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, ApiDependency? apiDependency, JsonDocument? postmanCollection, OpenApiDocument document) { - Dictionary> requestUrls = null; + Dictionary> requestUrls; if (apiDependency != null) { requestUrls = GetRequestUrlsFromManifest(apiDependency); @@ -154,6 +153,11 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, requestUrls = EnumerateJsonDocument(postmanCollection.RootElement, new()); logger.LogTrace("Finished fetching the list of paths and Http methods defined in the Postman collection."); } + else + { + requestUrls = new(); + logger.LogTrace("No filter options provided."); + } logger.LogTrace("Creating predicate from filter options."); var predicate = FilterOpenApiDocument(options.FilterOptions.FilterByOperationIds, @@ -177,6 +181,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma { using (logger.BeginScope("Output")) { + if (options.Output is null) throw new InvalidOperationException("Output file path is null"); using var outputStream = options.Output.Create(); var textWriter = new StreamWriter(outputStream); @@ -206,7 +211,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma } // Get OpenAPI document either from OpenAPI or CSDL - private static async Task GetOpenApi(HidiOptions options, ILogger logger, CancellationToken cancellationToken, string metadataVersion = null) + private static async Task GetOpenApi(HidiOptions options, ILogger logger, CancellationToken cancellationToken, string? metadataVersion = null) { OpenApiDocument document; @@ -219,14 +224,13 @@ private static async Task GetOpenApi(HidiOptions options, ILogg { stopwatch.Start(); stream = await GetStream(options.Csdl, logger, cancellationToken); - Stream filteredStream = null; + Stream? filteredStream = null; if (!string.IsNullOrEmpty(options.CsdlFilter)) { XslCompiledTransform transform = GetFilterTransform(); filteredStream = ApplyFilterToCsdl(stream, options.CsdlFilter, transform); filteredStream.Position = 0; stream.Dispose(); - stream = null; } document = await ConvertCsdlToOpenApi(filteredStream ?? stream, metadataVersion, options.SettingsConfig, cancellationToken); @@ -234,40 +238,41 @@ private static async Task GetOpenApi(HidiOptions options, ILogg logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } } - else + else if (!string.IsNullOrEmpty(options.OpenApi)) { stream = await GetStream(options.OpenApi, logger, cancellationToken); var result = await ParseOpenApi(options.OpenApi, options.InlineExternal, logger, stream, cancellationToken); document = result.OpenApiDocument; } + else throw new InvalidOperationException("No input file path or URL provided"); return document; } - private static Func FilterOpenApiDocument(string filterbyoperationids, string filterbytags, Dictionary> requestUrls, OpenApiDocument document, ILogger logger) + private static Func? FilterOpenApiDocument(string? filterByOperationIds, string? filterByTags, Dictionary> requestUrls, OpenApiDocument document, ILogger logger) { - Func predicate = null; + Func? predicate = null; using (logger.BeginScope("Create Filter")) { // Check if filter options are provided, then slice the OpenAPI document - if (!string.IsNullOrEmpty(filterbyoperationids) && !string.IsNullOrEmpty(filterbytags)) + if (!string.IsNullOrEmpty(filterByOperationIds) && !string.IsNullOrEmpty(filterByTags)) { throw new InvalidOperationException("Cannot filter by operationIds and tags at the same time."); } - if (!string.IsNullOrEmpty(filterbyoperationids)) + if (!string.IsNullOrEmpty(filterByOperationIds)) { logger.LogTrace("Creating predicate based on the operationIds supplied."); - predicate = OpenApiFilterService.CreatePredicate(tags: filterbyoperationids); + predicate = OpenApiFilterService.CreatePredicate(tags: filterByOperationIds); } - if (!string.IsNullOrEmpty(filterbytags)) + if (!string.IsNullOrEmpty(filterByTags)) { logger.LogTrace("Creating predicate based on the tags supplied."); - predicate = OpenApiFilterService.CreatePredicate(tags: filterbytags); + predicate = OpenApiFilterService.CreatePredicate(tags: filterByTags); } - if (requestUrls != null) + if (requestUrls.Any()) { logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: document); @@ -281,13 +286,13 @@ private static Dictionary> GetRequestUrlsFromManifest(ApiDe { // Get the request URLs from the API Dependencies in the API manifest var requests = apiDependency - .Requests.Where(static r => !r.Exclude) - .Select(static r => new { UriTemplate = r.UriTemplate, Method = r.Method }) + .Requests.Where(static r => !r.Exclude && !string.IsNullOrEmpty(r.UriTemplate) && !string.IsNullOrEmpty(r.Method)) + .Select(static r => new { UriTemplate = r.UriTemplate!, Method = r.Method! }) .GroupBy(static r => r.UriTemplate) .ToDictionary(static g => g.Key, static g => g.Select(static r => r.Method).ToList()); // This makes the assumption that the UriTemplate in the ApiManifest matches exactly the UriTemplate in the OpenAPI document // This does not need to be the case. The URI template in the API manifest could map to a set of OpenAPI paths. - // Additional logic will be required to handle this scenario. I sugggest we build this into the OpenAPI.Net library at some point. + // Additional logic will be required to handle this scenario. I suggest we build this into the OpenAPI.Net library at some point. return requests; } @@ -295,7 +300,7 @@ private static XslCompiledTransform GetFilterTransform() { XslCompiledTransform transform = new(); Assembly assembly = typeof(OpenApiService).GetTypeInfo().Assembly; - Stream xslt = assembly.GetManifestResourceStream("Microsoft.OpenApi.Hidi.CsdlFilter.xslt"); + using var xslt = assembly.GetManifestResourceStream("Microsoft.OpenApi.Hidi.CsdlFilter.xslt") ?? throw new InvalidOperationException("Could not find the Microsoft.OpenApi.Hidi.CsdlFilter.xslt file in the assembly. Check build configuration."); transform.Load(new XmlTextReader(new StreamReader(xslt))); return transform; } @@ -318,20 +323,20 @@ private static Stream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSin /// Implementation of the validate command /// public static async Task ValidateOpenApiDocument( - string openapi, + string openApi, ILogger logger, CancellationToken cancellationToken) { - if (string.IsNullOrEmpty(openapi)) + if (string.IsNullOrEmpty(openApi)) { - throw new ArgumentNullException(nameof(openapi)); + throw new ArgumentNullException(nameof(openApi)); } try { - using var stream = await GetStream(openapi, logger, cancellationToken); + using var stream = await GetStream(openApi, logger, cancellationToken); - var result = await ParseOpenApi(openapi, false, logger, stream, cancellationToken); + var result = await ParseOpenApi(openApi, false, logger, stream, cancellationToken); using (logger.BeginScope("Calculating statistics")) { @@ -384,7 +389,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApi(Stream csdl, string metadataVersion = null, IConfiguration settings = null, CancellationToken token = default) + public static async Task ConvertCsdlToOpenApi(Stream csdl, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) { using var reader = new StreamReader(csdl); var csdlText = await reader.ReadToEndAsync(token); @@ -535,9 +540,9 @@ private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) return !input.StartsWith("http") && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; } - private static string GetInputPathExtension(string openapi = null, string csdl = null) + private static string GetInputPathExtension(string? openapi = null, string? csdl = null) { - var extension = String.Empty; + var extension = string.Empty; if (!string.IsNullOrEmpty(openapi)) { extension = Path.GetExtension(openapi); @@ -550,7 +555,7 @@ private static string GetInputPathExtension(string openapi = null, string csdl = return extension; } - internal static async Task ShowOpenApiDocument(HidiOptions options, ILogger logger, CancellationToken cancellationToken) + internal static async Task ShowOpenApiDocument(HidiOptions options, ILogger logger, CancellationToken cancellationToken) { try { @@ -564,6 +569,11 @@ internal static async Task ShowOpenApiDocument(HidiOptions options, ILog using (logger.BeginScope("Creating diagram")) { // If output is null, create a HTML file in the user's temporary directory + var sourceUrl = (string.IsNullOrEmpty(options.OpenApi), string.IsNullOrEmpty(options.Csdl)) switch { + (false, _) => options.OpenApi!, + (_, false) => options.Csdl!, + _ => throw new InvalidOperationException("No input file path or URL provided") + }; if (options.Output == null) { var tempPath = Path.GetTempPath() + "/hidi/"; @@ -578,7 +588,7 @@ internal static async Task ShowOpenApiDocument(HidiOptions options, ILog using (var file = new FileStream(output.FullName, FileMode.Create)) { using var writer = new StreamWriter(file); - WriteTreeDocumentAsHtml(options.OpenApi ?? options.Csdl, document, writer); + WriteTreeDocumentAsHtml(sourceUrl, document, writer); } logger.LogTrace("Created Html document with diagram "); @@ -595,7 +605,7 @@ internal static async Task ShowOpenApiDocument(HidiOptions options, ILog using (var file = new FileStream(options.Output.FullName, FileMode.Create)) { using var writer = new StreamWriter(file); - WriteTreeDocumentAsMarkdown(options.OpenApi ?? options.Csdl, document, writer); + WriteTreeDocumentAsMarkdown(sourceUrl, document, writer); } logger.LogTrace("Created markdown document with diagram "); return options.Output.FullName; diff --git a/src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs b/src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs index ffdb568d..d82a064f 100644 --- a/src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs +++ b/src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs @@ -5,9 +5,9 @@ namespace Microsoft.OpenApi.Hidi.Options { internal class FilterOptions { - public string FilterByOperationIds { get; internal set; } - public string FilterByTags { get; internal set; } - public string FilterByCollection { get; internal set; } - public string FilterByApiManifest { get; internal set; } + public string? FilterByOperationIds { get; internal set; } + public string? FilterByTags { get; internal set; } + public string? FilterByCollection { get; internal set; } + public string? FilterByApiManifest { get; internal set; } } } diff --git a/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs b/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs index a7f16d87..9f5a109f 100644 --- a/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs +++ b/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs @@ -11,21 +11,22 @@ namespace Microsoft.OpenApi.Hidi.Options { internal class HidiOptions { - public string OpenApi { get; set; } - public string Csdl { get; set; } - public string CsdlFilter { get; set; } - public FileInfo Output { get; set; } - public string OutputFolder { get; set; } + private const string defaultOutputFolderValue = "./"; + public string? OpenApi { get; set; } + public string? Csdl { get; set; } + public string? CsdlFilter { get; set; } + public FileInfo? Output { get; set; } + public string OutputFolder { get; set; } = defaultOutputFolderValue; public bool CleanOutput { get; set; } - public string Version { get; set; } - public string MetadataVersion { get; set; } + public string? Version { get; set; } + public string? MetadataVersion { get; set; } public OpenApiFormat? OpenApiFormat { get; set; } public bool TerseOutput { get; set; } - public IConfiguration SettingsConfig { get; set; } + public IConfiguration? SettingsConfig { get; set; } public LogLevel LogLevel { get; set; } public bool InlineLocal { get; set; } public bool InlineExternal { get; set; } - public FilterOptions FilterOptions { get; set; } + public FilterOptions FilterOptions { get; set; } = new(); public HidiOptions(ParseResult parseResult, CommandOptions options) { @@ -43,13 +44,13 @@ private void ParseHidiOptions(ParseResult parseResult, CommandOptions options) CsdlFilter = parseResult.GetValueForOption(options.CsdlFilterOption); Csdl = parseResult.GetValueForOption(options.CsdlOption); Output = parseResult.GetValueForOption(options.OutputOption); - OutputFolder = parseResult.GetValueForOption(options.OutputFolderOption); + OutputFolder = parseResult.GetValueForOption(options.OutputFolderOption) is string outputFolderOptionValue && !string.IsNullOrEmpty(outputFolderOptionValue) ? outputFolderOptionValue : defaultOutputFolderValue; CleanOutput = parseResult.GetValueForOption(options.CleanOutputOption); Version = parseResult.GetValueForOption(options.VersionOption); MetadataVersion = parseResult.GetValueForOption(options.MetadataVersionOption); OpenApiFormat = parseResult.GetValueForOption(options.FormatOption); TerseOutput = parseResult.GetValueForOption(options.TerseOutputOption); - SettingsConfig = SettingsUtilities.GetConfiguration(parseResult.GetValueForOption(options.SettingsFileOption)); + SettingsConfig = parseResult.GetValueForOption(options.SettingsFileOption) is string configOptionValue && !string.IsNullOrEmpty(configOptionValue) ? SettingsUtilities.GetConfiguration(configOptionValue) : null; LogLevel = parseResult.GetValueForOption(options.LogLevelOption); InlineLocal = parseResult.GetValueForOption(options.InlineLocalOption); InlineExternal = parseResult.GetValueForOption(options.InlineExternalOption); diff --git a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs index 6e00e2ba..1d261e5f 100644 --- a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs +++ b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs @@ -8,9 +8,10 @@ namespace Microsoft.OpenApi.Hidi.Utilities { internal static class SettingsUtilities { - internal static IConfiguration GetConfiguration(string settingsFile = null) + internal static IConfiguration GetConfiguration(string? settingsFile = null) { - settingsFile ??= "appsettings.json"; + if (string.IsNullOrEmpty(settingsFile)) + settingsFile = "appsettings.json"; IConfiguration config = new ConfigurationBuilder() .AddJsonFile(settingsFile, true) @@ -19,7 +20,7 @@ internal static IConfiguration GetConfiguration(string settingsFile = null) return config; } - internal static OpenApiConvertSettings GetOpenApiConvertSettings(IConfiguration config, string metadataVersion = null) + internal static OpenApiConvertSettings GetOpenApiConvertSettings(IConfiguration config, string? metadataVersion = null) { if (config == null) { throw new System.ArgumentNullException(nameof(config)); } var settings = new OpenApiConvertSettings(); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 3c039b9a..34cdd3a0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -183,7 +183,7 @@ public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string opera foreach (var pathItem in subsetOpenApiDocument.Paths) { Assert.True(pathItem.Value.Parameters.Any()); - Assert.Equal(1, pathItem.Value.Parameters.Count); + Assert.Single(pathItem.Value.Parameters); } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 49f1bbd9..647cac32 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -228,7 +228,7 @@ public async Task TransformCommandConvertsOpenApi() [Fact] - public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() + public async Task TransformCommandConvertsOpenApiWithDefaultOutputName() { HidiOptions options = new HidiOptions { @@ -246,7 +246,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputname() } [Fact] - public async Task TransformCommandConvertsCsdlWithDefaultOutputname() + public async Task TransformCommandConvertsCsdlWithDefaultOutputName() { HidiOptions options = new HidiOptions { @@ -264,7 +264,7 @@ public async Task TransformCommandConvertsCsdlWithDefaultOutputname() } [Fact] - public async Task TransformCommandConvertsOpenApiWithDefaultOutputnameAndSwitchFormat() + public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchFormat() { HidiOptions options = new HidiOptions { @@ -367,10 +367,12 @@ public void InvokePluginCommand() using var jsDoc = JsonDocument.Parse(File.ReadAllText("ai-plugin.json")); var openAiManifest = OpenAIPluginManifest.Load(jsDoc.RootElement); - - Assert.Equal("Mastodon - Subset", openAiManifest?.NameForHuman); - Assert.Equal("openapi", openAiManifest?.Api.Type); - Assert.Equal("./openapi.json", openAiManifest?.Api.Url); + + Assert.NotNull(openAiManifest); + Assert.Equal("Mastodon - Subset", openAiManifest.NameForHuman); + Assert.NotNull(openAiManifest.Api); + Assert.Equal("openapi", openAiManifest.Api.Type); + Assert.Equal("./openapi.json", openAiManifest.Api.Url); } From 101f912242b8509d958c6364526ed45e95fe33ec Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 14 Sep 2023 16:00:22 -0400 Subject: [PATCH 327/720] - enables all mode analysis Signed-off-by: Vincent Biret --- .../Formatters/PowerShellFormatter.cs | 4 +- .../Handlers/PluginCommandHandler.cs | 2 +- .../Handlers/ShowCommandHandler.cs | 2 +- .../Handlers/TransformCommandHandler.cs | 2 +- .../Handlers/ValidateCommandHandler.cs | 2 +- src/Microsoft.OpenApi.Hidi/Logger.cs | 2 +- .../Microsoft.OpenApi.Hidi.csproj | 3 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 88 +++++++++---------- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 18 ++-- .../Microsoft.OpenApi.Hidi.Tests.csproj | 3 + .../Services/OpenApiServiceTests.cs | 24 +++-- 12 files changed, 80 insertions(+), 72 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index f876e400..450a05d2 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -88,7 +88,7 @@ public override void Visit(OpenApiOperation operation) private static string ResolveVerbSegmentInOpertationId(string operationId) { var charPos = operationId.LastIndexOf('.', operationId.Length - 1); - if (operationId.Contains('_') || charPos < 0) + if (operationId.Contains('_', StringComparison.OrdinalIgnoreCase) || charPos < 0) return operationId; var newOperationId = new StringBuilder(operationId); newOperationId[charPos] = '_'; @@ -99,7 +99,7 @@ private static string ResolveVerbSegmentInOpertationId(string operationId) private static string ResolvePutOperationId(string operationId) { return operationId.Contains(DefaultPutPrefix, StringComparison.OrdinalIgnoreCase) ? - operationId.Replace(DefaultPutPrefix, PowerShellPutPrefix) : operationId; + operationId.Replace(DefaultPutPrefix, PowerShellPutPrefix, StringComparison.Ordinal) : operationId; } private static string ResolveByRefOperationId(string operationId) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs index ae090207..0fcb86df 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs @@ -31,7 +31,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.PluginManifest(hidiOptions, logger, cancellationToken); + await OpenApiService.PluginManifest(hidiOptions, logger, cancellationToken).ConfigureAwait(false); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs index 7db17fea..a6a161dc 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs @@ -31,7 +31,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.ShowOpenApiDocument(hidiOptions, logger, cancellationToken); + await OpenApiService.ShowOpenApiDocument(hidiOptions, logger, cancellationToken).ConfigureAwait(false); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index 440c20e0..f173024c 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -31,7 +31,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.TransformOpenApiDocument(hidiOptions, logger, cancellationToken); + await OpenApiService.TransformOpenApiDocument(hidiOptions, logger, cancellationToken).ConfigureAwait(false); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index 8bb5676b..153ec707 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -33,7 +33,7 @@ public async Task InvokeAsync(InvocationContext context) try { if (hidiOptions.OpenApi is null) throw new InvalidOperationException("OpenApi file is required"); - await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken); + await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken).ConfigureAwait(false); return 0; } catch (Exception ex) diff --git a/src/Microsoft.OpenApi.Hidi/Logger.cs b/src/Microsoft.OpenApi.Hidi/Logger.cs index 2b02e960..717ca1a4 100644 --- a/src/Microsoft.OpenApi.Hidi/Logger.cs +++ b/src/Microsoft.OpenApi.Hidi/Logger.cs @@ -5,7 +5,7 @@ namespace Microsoft.OpenApi.Hidi { - public class Logger + public static class Logger { public static ILoggerFactory ConfigureLogger(LogLevel logLevel) { diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7e8c8937..b02f8900 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,9 +28,10 @@ true true - NU5048 + NU5048;CA1848; true readme.md + All diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 71a0ff2f..809e3ecf 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -70,7 +70,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l OpenApiSpecVersion openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_0; // If ApiManifest is provided, set the referenced OpenAPI document - var apiDependency = await FindApiDependency(options.FilterOptions.FilterByApiManifest, logger, cancellationToken); + var apiDependency = await FindApiDependency(options.FilterOptions.FilterByApiManifest, logger, cancellationToken).ConfigureAwait(false); if (apiDependency != null) { options.OpenApi = apiDependency.ApiDescripionUrl; @@ -80,12 +80,12 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l JsonDocument? postmanCollection = null; if (!string.IsNullOrEmpty(options.FilterOptions?.FilterByCollection)) { - using var collectionStream = await GetStream(options.FilterOptions.FilterByCollection, logger, cancellationToken); + using var collectionStream = await GetStream(options.FilterOptions.FilterByCollection, logger, cancellationToken).ConfigureAwait(false); postmanCollection = JsonDocument.Parse(collectionStream); } // Load OpenAPI document - OpenApiDocument document = await GetOpenApi(options, logger, cancellationToken, options.MetadataVersion); + OpenApiDocument document = await GetOpenApi(options, logger, cancellationToken, options.MetadataVersion).ConfigureAwait(false); if (options.FilterOptions != null) { @@ -104,7 +104,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l } catch (TaskCanceledException) { - Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); + await Console.Error.WriteLineAsync("CTRL+C pressed, aborting the operation.").ConfigureAwait(false); } catch (IOException) { @@ -130,7 +130,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l { apiDependencyName = apiManifestRef[1]; } - using (var fileStream = await GetStream(apiManifestRef[0], logger, cancellationToken)) + using (var fileStream = await GetStream(apiManifestRef[0], logger, cancellationToken).ConfigureAwait(false)) { apiManifest = ApiManifestDocument.Load(JsonDocument.Parse(fileStream).RootElement); } @@ -171,7 +171,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, stopwatch.Start(); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); stopwatch.Stop(); - logger.LogTrace("{timestamp}ms: Creating filtered OpenApi document with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + logger.LogTrace("{Timestamp}ms: Creating filtered OpenApi document with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } return document; @@ -183,7 +183,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma { if (options.Output is null) throw new InvalidOperationException("Output file path is null"); using var outputStream = options.Output.Create(); - var textWriter = new StreamWriter(outputStream); + using var textWriter = new StreamWriter(outputStream); var settings = new OpenApiWriterSettings() { @@ -205,7 +205,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma document.Serialize(writer, openApiVersion); stopwatch.Stop(); - logger.LogTrace($"Finished serializing in {stopwatch.ElapsedMilliseconds}ms"); + logger.LogTrace("Finished serializing in {ElapsedMilliseconds}ms", stopwatch.ElapsedMilliseconds); textWriter.Flush(); } } @@ -220,28 +220,28 @@ private static async Task GetOpenApi(HidiOptions options, ILogg if (!string.IsNullOrEmpty(options.Csdl)) { var stopwatch = new Stopwatch(); - using (logger.BeginScope("Convert CSDL: {csdl}", options.Csdl)) + using (logger.BeginScope("Convert CSDL: {Csdl}", options.Csdl)) { stopwatch.Start(); - stream = await GetStream(options.Csdl, logger, cancellationToken); + stream = await GetStream(options.Csdl, logger, cancellationToken).ConfigureAwait(false); Stream? filteredStream = null; if (!string.IsNullOrEmpty(options.CsdlFilter)) { XslCompiledTransform transform = GetFilterTransform(); filteredStream = ApplyFilterToCsdl(stream, options.CsdlFilter, transform); filteredStream.Position = 0; - stream.Dispose(); + await stream.DisposeAsync().ConfigureAwait(false); } - document = await ConvertCsdlToOpenApi(filteredStream ?? stream, metadataVersion, options.SettingsConfig, cancellationToken); + document = await ConvertCsdlToOpenApi(filteredStream ?? stream, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); - logger.LogTrace("{timestamp}ms: Generated OpenAPI with {paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } } else if (!string.IsNullOrEmpty(options.OpenApi)) { - stream = await GetStream(options.OpenApi, logger, cancellationToken); - var result = await ParseOpenApi(options.OpenApi, options.InlineExternal, logger, stream, cancellationToken); + stream = await GetStream(options.OpenApi, logger, cancellationToken).ConfigureAwait(false); + var result = await ParseOpenApi(options.OpenApi, options.InlineExternal, logger, stream, cancellationToken).ConfigureAwait(false); document = result.OpenApiDocument; } else throw new InvalidOperationException("No input file path or URL provided"); @@ -301,22 +301,22 @@ private static XslCompiledTransform GetFilterTransform() XslCompiledTransform transform = new(); Assembly assembly = typeof(OpenApiService).GetTypeInfo().Assembly; using var xslt = assembly.GetManifestResourceStream("Microsoft.OpenApi.Hidi.CsdlFilter.xslt") ?? throw new InvalidOperationException("Could not find the Microsoft.OpenApi.Hidi.CsdlFilter.xslt file in the assembly. Check build configuration."); - transform.Load(new XmlTextReader(new StreamReader(xslt))); + using var streamReader = new StreamReader(xslt); + using var textReader = new XmlTextReader(streamReader); + transform.Load(textReader); return transform; } private static Stream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) { - Stream stream; using StreamReader inputReader = new(csdlStream, leaveOpen: true); - XmlReader inputXmlReader = XmlReader.Create(inputReader); + using XmlReader inputXmlReader = XmlReader.Create(inputReader); MemoryStream filteredStream = new(); - StreamWriter writer = new(filteredStream); + using StreamWriter writer = new(filteredStream, leaveOpen: true); XsltArgumentList args = new(); args.AddParam("entitySetOrSingleton", "", entitySetOrSingleton); transform.Transform(inputXmlReader, args, writer); - stream = filteredStream; - return stream; + return filteredStream; } /// @@ -334,9 +334,9 @@ public static async Task ValidateOpenApiDocument( try { - using var stream = await GetStream(openApi, logger, cancellationToken); + using var stream = await GetStream(openApi, logger, cancellationToken).ConfigureAwait(false); - var result = await ParseOpenApi(openApi, false, logger, stream, cancellationToken); + var result = await ParseOpenApi(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Calculating statistics")) { @@ -345,12 +345,14 @@ public static async Task ValidateOpenApiDocument( walker.Walk(result.OpenApiDocument); logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); + #pragma warning disable CA2254 logger.LogInformation(statsVisitor.GetStatisticsReport()); + #pragma warning restore CA2254 } } catch (TaskCanceledException) { - Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); + await Console.Error.WriteLineAsync("CTRL+C pressed, aborting the operation.").ConfigureAwait(false); } catch (Exception ex) { @@ -362,7 +364,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli { ReadResult result; Stopwatch stopwatch = Stopwatch.StartNew(); - using (logger.BeginScope("Parsing OpenAPI: {openApiFile}", openApiFile)) + using (logger.BeginScope("Parsing OpenAPI: {OpenApiFile}", openApiFile)) { stopwatch.Start(); @@ -373,9 +375,9 @@ private static async Task ParseOpenApi(string openApiFile, bool inli new Uri(openApiFile) : new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) } - ).ReadAsync(stream, cancellationToken); + ).ReadAsync(stream, cancellationToken).ConfigureAwait(false); - logger.LogTrace("{timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); + logger.LogTrace("{Timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); LogErrors(logger, result); stopwatch.Stop(); @@ -392,7 +394,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli public static async Task ConvertCsdlToOpenApi(Stream csdl, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) { using var reader = new StreamReader(csdl); - var csdlText = await reader.ReadToEndAsync(token); + var csdlText = await reader.ReadToEndAsync(token).ConfigureAwait(false); var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); settings ??= SettingsUtilities.GetConfiguration(); @@ -485,19 +487,15 @@ private static async Task GetStream(string input, ILogger logger, Cancel var stopwatch = new Stopwatch(); stopwatch.Start(); - if (input.StartsWith("http")) + if (input.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { try { - var httpClientHandler = new HttpClientHandler() - { - SslProtocols = System.Security.Authentication.SslProtocols.Tls12, - }; - using var httpClient = new HttpClient(httpClientHandler) + using var httpClient = new HttpClient { DefaultRequestVersion = HttpVersion.Version20 }; - stream = await httpClient.GetStreamAsync(input, cancellationToken); + stream = await httpClient.GetStreamAsync(new Uri(input), cancellationToken).ConfigureAwait(false); } catch (HttpRequestException ex) { @@ -523,7 +521,7 @@ ex is SecurityException || } } stopwatch.Stop(); - logger.LogTrace("{timestamp}ms: Read file {input}", stopwatch.ElapsedMilliseconds, input); + logger.LogTrace("{Timestamp}ms: Read file {Input}", stopwatch.ElapsedMilliseconds, input); } return stream; } @@ -537,7 +535,7 @@ ex is SecurityException || private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) { logger.LogTrace("Getting the OpenApi format"); - return !input.StartsWith("http") && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; + return !input.StartsWith("http", StringComparison.OrdinalIgnoreCase) && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; } private static string GetInputPathExtension(string? openapi = null, string? csdl = null) @@ -564,7 +562,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl throw new ArgumentException("Please input a file path or URL"); } - var document = await GetOpenApi(options, logger, cancellationToken); + var document = await GetOpenApi(options, logger, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Creating diagram")) { @@ -614,7 +612,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl } catch (TaskCanceledException) { - Console.Error.WriteLine("CTRL+C pressed, aborting the operation."); + await Console.Error.WriteLineAsync("CTRL+C pressed, aborting the operation.").ConfigureAwait(false); } catch (Exception ex) { @@ -632,7 +630,7 @@ private static void LogErrors(ILogger logger, ReadResult result) { foreach (var error in context.Errors) { - logger.LogError("Detected error during parsing: {error}", error.ToString()); + logger.LogError("Detected error during parsing: {Error}", error.ToString()); } } } @@ -650,7 +648,7 @@ internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocum // write a span for each mermaidcolorscheme foreach (var style in OpenApiUrlTreeNode.MermaidNodeStyles) { - writer.WriteLine($"{style.Key.Replace("_", " ")}"); + writer.WriteLine($"{style.Key.Replace("_", " ", StringComparison.OrdinalIgnoreCase)}"); } writer.WriteLine("
"); writer.WriteLine(); @@ -683,7 +681,7 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d // write a span for each mermaidcolorscheme foreach (var style in OpenApiUrlTreeNode.MermaidNodeStyles) { - writer.WriteLine($"{style.Key.Replace("_", " ")}"); + writer.WriteLine($"{style.Key.Replace("_", " ", StringComparison.OrdinalIgnoreCase)}"); } writer.WriteLine("
"); writer.WriteLine("
"); @@ -708,17 +706,17 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d writer.WriteLine(" Main(string[] args) var rootCommand = CreateRootCommand(); // Parse the incoming args and invoke the handler - return await rootCommand.InvokeAsync(args); + return await rootCommand.InvokeAsync(args).ConfigureAwait(false); } internal static RootCommand CreateRootCommand() diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index b05b0de7..871f88dc 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -10,63 +10,63 @@ namespace Microsoft.OpenApi.Hidi { internal class StatsVisitor : OpenApiVisitorBase { - public int ParameterCount { get; set; } = 0; + public int ParameterCount { get; set; } public override void Visit(OpenApiParameter parameter) { ParameterCount++; } - public int SchemaCount { get; set; } = 0; + public int SchemaCount { get; set; } public override void Visit(OpenApiSchema schema) { SchemaCount++; } - public int HeaderCount { get; set; } = 0; + public int HeaderCount { get; set; } public override void Visit(IDictionary headers) { HeaderCount++; } - public int PathItemCount { get; set; } = 0; + public int PathItemCount { get; set; } public override void Visit(OpenApiPathItem pathItem) { PathItemCount++; } - public int RequestBodyCount { get; set; } = 0; + public int RequestBodyCount { get; set; } public override void Visit(OpenApiRequestBody requestBody) { RequestBodyCount++; } - public int ResponseCount { get; set; } = 0; + public int ResponseCount { get; set; } public override void Visit(OpenApiResponses response) { ResponseCount++; } - public int OperationCount { get; set; } = 0; + public int OperationCount { get; set; } public override void Visit(OpenApiOperation operation) { OperationCount++; } - public int LinkCount { get; set; } = 0; + public int LinkCount { get; set; } public override void Visit(OpenApiLink operation) { LinkCount++; } - public int CallbackCount { get; set; } = 0; + public int CallbackCount { get; set; } public override void Visit(OpenApiCallback callback) { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index ebe55934..4f37314b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -6,6 +6,9 @@ enable false + true + All + CA2007 diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 647cac32..b1fcd24d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -17,13 +17,14 @@ namespace Microsoft.OpenApi.Hidi.Tests { - public class OpenApiServiceTests + public sealed class OpenApiServiceTests : IDisposable { private readonly ILogger _logger; + private readonly LoggerFactory _loggerFactory = new(); public OpenApiServiceTests() { - _logger = new Logger(new LoggerFactory()); + _logger = new Logger(_loggerFactory); } [Fact] @@ -105,7 +106,7 @@ public void ShowCommandGeneratesMermaidDiagramAsMarkdown() stream.Position = 0; using var reader = new StreamReader(stream); var output = reader.ReadToEnd(); - Assert.Contains("graph LR", output); + Assert.Contains("graph LR", output, StringComparison.Ordinal); } [Fact] @@ -126,7 +127,7 @@ public void ShowCommandGeneratesMermaidDiagramAsHtml() stream.Position = 0; using var reader = new StreamReader(stream); var output = reader.ReadToEnd(); - Assert.Contains("graph LR", output); + Assert.Contains("graph LR", output, StringComparison.Ordinal); } @@ -144,7 +145,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() await OpenApiService.ShowOpenApiDocument(options, _logger, new CancellationToken()); var output = File.ReadAllText(options.Output.FullName); - Assert.Contains("graph LR", output); + Assert.Contains("graph LR", output, StringComparison.Ordinal); } [Fact] @@ -172,7 +173,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiag await OpenApiService.ShowOpenApiDocument(options, _logger, new CancellationToken()); var output = File.ReadAllText(options.Output.FullName); - Assert.Contains("graph LR", output); + Assert.Contains("graph LR", output, StringComparison.Ordinal); } [Fact] @@ -341,8 +342,8 @@ public void InvokeTransformCommand() public void InvokeShowCommand() { var rootCommand = Program.CreateRootCommand(); - var openapi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); - var args = new string[] { "show", "-d", openapi, "-o", "sample.md" }; + var openApi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); + var args = new string[] { "show", "-d", openApi, "-o", "sample.md" }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "show").First().Handler; var context = new InvocationContext(parseResult); @@ -350,7 +351,7 @@ public void InvokeShowCommand() handler!.Invoke(context); var output = File.ReadAllText("sample.md"); - Assert.Contains("graph LR", output); + Assert.Contains("graph LR", output, StringComparison.Ordinal); } [Fact] @@ -383,5 +384,10 @@ public void CreateRootCommand() var rootCommand = Program.CreateRootCommand(); Assert.NotNull(rootCommand); } + + public void Dispose() + { + _loggerFactory.Dispose(); + } } } From cf3c60dd18e80dae5d30c589ac6d24185894a089 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 15 Sep 2023 08:10:48 -0400 Subject: [PATCH 328/720] - fixes hidi release build --- .../Handlers/PluginCommandHandler.cs | 8 ++++++++ .../Handlers/ShowCommandHandler.cs | 8 ++++++++ .../Handlers/TransformCommandHandler.cs | 8 ++++++++ .../Handlers/ValidateCommandHandler.cs | 10 +++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs index 0fcb86df..2c7e921b 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs @@ -35,16 +35,24 @@ public async Task InvokeAsync(InvocationContext context) return 0; } +#if RELEASE +#pragma warning disable CA1031 // Do not catch general exception types +#endif catch (Exception ex) { #if DEBUG logger.LogCritical(ex, "Command failed"); throw; // so debug tools go straight to the source of the exception when attached #else +#pragma warning disable CA2254 logger.LogCritical(ex.Message); +#pragma warning restore CA2254 return 1; #endif } +#if RELEASE +#pragma warning restore CA1031 // Do not catch general exception types +#endif } } } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs index a6a161dc..05491230 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs @@ -35,16 +35,24 @@ public async Task InvokeAsync(InvocationContext context) return 0; } +#if RELEASE +#pragma warning disable CA1031 // Do not catch general exception types +#endif catch (Exception ex) { #if DEBUG logger.LogCritical(ex, "Command failed"); throw; // so debug tools go straight to the source of the exception when attached #else +#pragma warning disable CA2254 logger.LogCritical( ex.Message); +#pragma warning restore CA2254 return 1; #endif } +#if RELEASE +#pragma warning restore CA1031 // Do not catch general exception types +#endif } } } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index f173024c..293fefec 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -35,16 +35,24 @@ public async Task InvokeAsync(InvocationContext context) return 0; } +#if RELEASE +#pragma warning disable CA1031 // Do not catch general exception types +#endif catch (Exception ex) { #if DEBUG logger.LogCritical(ex, "Command failed"); throw; // so debug tools go straight to the source of the exception when attached #else +#pragma warning disable CA2254 logger.LogCritical( ex.Message); +#pragma warning restore CA2254 return 1; #endif } +#if RELEASE +#pragma warning restore CA1031 // Do not catch general exception types +#endif } } } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index 153ec707..4351a04c 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -36,16 +36,24 @@ public async Task InvokeAsync(InvocationContext context) await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken).ConfigureAwait(false); return 0; } +#if RELEASE +#pragma warning disable CA1031 // Do not catch general exception types +#endif catch (Exception ex) { #if DEBUG logger.LogCritical(ex, "Command failed"); throw; // so debug tools go straight to the source of the exception when attached #else - logger.LogCritical( ex.Message); +#pragma warning disable CA2254 + logger.LogCritical(ex.Message); +#pragma warning restore CA2254 return 1; #endif } +#if RELEASE +#pragma warning restore CA1031 // Do not catch general exception types +#endif } } } From 0099600031367a5f1e4a8fbc56469cbc4a54b277 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 18 Sep 2023 09:50:12 -0400 Subject: [PATCH 329/720] - removes publish trimmed since it'd break functionality Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs index 1d261e5f..6264270a 100644 --- a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs +++ b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs @@ -20,7 +20,7 @@ internal static IConfiguration GetConfiguration(string? settingsFile = null) return config; } - internal static OpenApiConvertSettings GetOpenApiConvertSettings(IConfiguration config, string? metadataVersion = null) + internal static OpenApiConvertSettings GetOpenApiConvertSettings(IConfiguration config, string? metadataVersion) { if (config == null) { throw new System.ArgumentNullException(nameof(config)); } var settings = new OpenApiConvertSettings(); From f92b7c4ae162ecb755bbcc44df02a728a6926cb3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 21:01:18 +0000 Subject: [PATCH 330/720] Bump xunit.runner.visualstudio from 2.5.0 to 2.5.1 Bumps [xunit.runner.visualstudio](https://github.com/xunit/xunit) from 2.5.0 to 2.5.1. - [Commits](https://github.com/xunit/xunit/compare/2.5.0...2.5.1) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index ebe55934..8c6bdd9c 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From a4997d01520ee45cee75dad8a44ca4d26dd021b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 21:05:44 +0000 Subject: [PATCH 331/720] Bump xunit from 2.5.0 to 2.5.1 Bumps [xunit](https://github.com/xunit/xunit) from 2.5.0 to 2.5.1. - [Commits](https://github.com/xunit/xunit/compare/2.5.0...2.5.1) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 8c6bdd9c..706e899f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From c006ea04eb10c64204f567aa721fea5e6edaa28e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 19 Sep 2023 07:56:02 -0400 Subject: [PATCH 332/720] - fixes readme path to the correct hidi readme --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b02f8900..3d20c3d9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -69,7 +69,7 @@ - + From 2f4da036fd38ed7a2284e3c02d1cdede14f950c3 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 19 Sep 2023 09:29:44 -0400 Subject: [PATCH 333/720] - fixes an issue where executable release would fail because of warn as error --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3d20c3d9..f1ac2178 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,7 +28,7 @@ true true - NU5048;CA1848; + $(NoWarn);NU5048;NU5104;CA1848; true readme.md All From b110f27f8480fd7646d799307f0fc754ba262a90 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Tue, 26 Sep 2023 16:43:26 +0300 Subject: [PATCH 334/720] Bump lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f1ac2178..ced9d9c3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -17,7 +17,7 @@ Microsoft.OpenApi.Hidi hidi ./../../artifacts - 1.2.9 + 1.3.0 OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET From 87bb2ca529b044863385d32e5dd1a62cf822b2e1 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:29:02 +1000 Subject: [PATCH 335/720] fix some warnings --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 13 +++++++------ .../Services/OpenApiServiceTests.cs | 14 +++++++------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 809e3ecf..b3e66cfe 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -81,7 +81,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l if (!string.IsNullOrEmpty(options.FilterOptions?.FilterByCollection)) { using var collectionStream = await GetStream(options.FilterOptions.FilterByCollection, logger, cancellationToken).ConfigureAwait(false); - postmanCollection = JsonDocument.Parse(collectionStream); + postmanCollection = await JsonDocument.ParseAsync(collectionStream, cancellationToken: cancellationToken).ConfigureAwait(false); } // Load OpenAPI document @@ -132,7 +132,8 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l } using (var fileStream = await GetStream(apiManifestRef[0], logger, cancellationToken).ConfigureAwait(false)) { - apiManifest = ApiManifestDocument.Load(JsonDocument.Parse(fileStream).RootElement); + var document = await JsonDocument.ParseAsync(fileStream, cancellationToken: cancellationToken).ConfigureAwait(false); + apiManifest = ApiManifestDocument.Load(document.RootElement); } apiDependency = !string.IsNullOrEmpty(apiDependencyName) && apiManifest.ApiDependencies.TryGetValue(apiDependencyName, out var dependency) ? dependency : apiManifest.ApiDependencies.First().Value; @@ -453,13 +454,13 @@ private static Dictionary> EnumerateJsonDocument(JsonElemen // Fetch list of methods and urls from collection, store them in a dictionary var path = request.GetProperty("url").GetProperty("raw").ToString(); var method = request.GetProperty("method").ToString(); - if (!paths.ContainsKey(path)) + if (paths.TryGetValue(path, out var value)) { - paths.Add(path, new List { method }); + value.Add(method); } else { - paths[path].Add(method); + paths.Add(path, new List {method}); } } else @@ -755,7 +756,7 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C using var file = new FileStream(manifestFile.FullName, FileMode.Create); using var jsonWriter = new Utf8JsonWriter(file, new JsonWriterOptions { Indented = true }); manifest.Write(jsonWriter); - jsonWriter.Flush(); + await jsonWriter.FlushAsync(cancellationToken).ConfigureAwait(false); } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index b1fcd24d..9d73c8db 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -144,7 +144,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() await OpenApiService.ShowOpenApiDocument(options, _logger, new CancellationToken()); - var output = File.ReadAllText(options.Output.FullName); + var output = await File.ReadAllTextAsync(options.Output.FullName); Assert.Contains("graph LR", output, StringComparison.Ordinal); } @@ -172,7 +172,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiag // create a dummy ILogger instance for testing await OpenApiService.ShowOpenApiDocument(options, _logger, new CancellationToken()); - var output = File.ReadAllText(options.Output.FullName); + var output = await File.ReadAllTextAsync(options.Output.FullName); Assert.Contains("graph LR", output, StringComparison.Ordinal); } @@ -223,7 +223,7 @@ public async Task TransformCommandConvertsOpenApi() // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocument(options, _logger, new CancellationToken()); - var output = File.ReadAllText("sample.json"); + var output = await File.ReadAllTextAsync("sample.json"); Assert.NotEmpty(output); } @@ -242,7 +242,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputName() // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocument(options, _logger, new CancellationToken()); - var output = File.ReadAllText("output.yml"); + var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); } @@ -260,7 +260,7 @@ public async Task TransformCommandConvertsCsdlWithDefaultOutputName() // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocument(options, _logger, new CancellationToken()); - var output = File.ReadAllText("output.yml"); + var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); } @@ -280,7 +280,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocument(options, _logger, new CancellationToken()); - var output = File.ReadAllText("output.yml"); + var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); } @@ -317,7 +317,7 @@ public async Task TransformToPowerShellCompliantOpenApi() // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocument(options, _logger, new CancellationToken()); - var output = File.ReadAllText("output.yml"); + var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); } From eeaf4f28836009a26b62a35862cbdcd08f91d52b Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:45:54 +1000 Subject: [PATCH 336/720] remove csproj settings that are convention based on project name --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ced9d9c3..ae373f6c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -13,8 +13,6 @@ true Microsoft Microsoft - Microsoft.OpenApi.Hidi - Microsoft.OpenApi.Hidi hidi ./../../artifacts 1.3.0 @@ -23,8 +21,6 @@ OpenAPI .NET https://github.com/Microsoft/OpenAPI.NET https://github.com/microsoft/OpenAPI.NET/releases - Microsoft.OpenApi.Hidi - Microsoft.OpenApi.Hidi true true From 2142dfd229e808f528c089d790c66deeaac62472 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:47:29 +1000 Subject: [PATCH 337/720] move Authors and company to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ae373f6c..be2da6fc 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -11,8 +11,6 @@ https://github.com/Microsoft/OpenAPI.NET MIT true - Microsoft - Microsoft hidi ./../../artifacts 1.3.0 From 2cf4808e4462c21e5402f25b26d5c1c61dc4247e Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:48:20 +1000 Subject: [PATCH 338/720] move license to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index be2da6fc..0bd41b28 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,6 @@ enable http://go.microsoft.com/fwlink/?LinkID=288890 https://github.com/Microsoft/OpenAPI.NET - MIT true hidi ./../../artifacts From e94858b942f5dbaae0e651c5e308e21920ae5379 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:48:57 +1000 Subject: [PATCH 339/720] move PackageRequireLicenseAcceptance to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 0bd41b28..7a8caaf7 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,6 @@ enable http://go.microsoft.com/fwlink/?LinkID=288890 https://github.com/Microsoft/OpenAPI.NET - true hidi ./../../artifacts 1.3.0 From 1bce6f5641bc0c9bd02dcf5463a6d6cd8fe871e4 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:49:52 +1000 Subject: [PATCH 340/720] move RepositoryUrl to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7a8caaf7..036b8c8c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,6 @@ OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET - https://github.com/Microsoft/OpenAPI.NET https://github.com/microsoft/OpenAPI.NET/releases true From e44f173228e899ab124e240dd477ab84689f9a4e Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:50:26 +1000 Subject: [PATCH 341/720] move PackageReleaseNotes to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 036b8c8c..71de6883 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -15,7 +15,6 @@ OpenAPI.NET CLI tool for slicing OpenAPI documents © Microsoft Corporation. All rights reserved. OpenAPI .NET - https://github.com/microsoft/OpenAPI.NET/releases true true From 606bf31f640d29a12390491b1fd1af94da2cc18a Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:51:20 +1000 Subject: [PATCH 342/720] move TreatWarningsAsErrors to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 - .../Microsoft.OpenApi.Hidi.Tests.csproj | 1 - 2 files changed, 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 71de6883..6435a525 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -19,7 +19,6 @@ true $(NoWarn);NU5048;NU5104;CA1848; - true readme.md All diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 3f719eda..89789bbb 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -6,7 +6,6 @@ enable false - true All CA2007 From 61469110588b2817b4ad4e59f45fdab1d28c2031 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:52:51 +1000 Subject: [PATCH 343/720] move PackageIconUrl and PackageProjectUrl to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 6435a525..7806fbd3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -7,8 +7,6 @@ true true enable - http://go.microsoft.com/fwlink/?LinkID=288890 - https://github.com/Microsoft/OpenAPI.NET hidi ./../../artifacts 1.3.0 From f1ba690848156e2cc87f9ccb4731ee5ba0607327 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:53:36 +1000 Subject: [PATCH 344/720] move Copyright to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7806fbd3..14d5125a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -11,7 +11,6 @@ ./../../artifacts 1.3.0 OpenAPI.NET CLI tool for slicing OpenAPI documents - © Microsoft Corporation. All rights reserved. OpenAPI .NET true From a4d3b286ce450038d85054491193810f611894c4 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:54:10 +1000 Subject: [PATCH 345/720] move PackageTags to props --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 14d5125a..fd152048 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -11,7 +11,6 @@ ./../../artifacts 1.3.0 OpenAPI.NET CLI tool for slicing OpenAPI documents - OpenAPI .NET true true From eaa0bc292d2a6c57fc4d8c9e1435f5d2ee68e909 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sat, 30 Sep 2023 22:57:08 +1000 Subject: [PATCH 346/720] simplify PrivateAssets all --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 89789bbb..1f2ec91e 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -11,21 +11,12 @@ - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - + - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - + + From afa1798ee3d3335a1a388c2a8fa1721061e89557 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Mon, 2 Oct 2023 19:09:30 +1100 Subject: [PATCH 347/720] use some pattern matiching --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index b3e66cfe..8d6471e8 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -510,13 +510,15 @@ private static async Task GetStream(string input, ILogger logger, Cancel var fileInput = new FileInfo(input); stream = fileInput.OpenRead(); } - catch (Exception ex) when (ex is FileNotFoundException || - ex is PathTooLongException || - ex is DirectoryNotFoundException || - ex is IOException || - ex is UnauthorizedAccessException || - ex is SecurityException || - ex is NotSupportedException) + catch (Exception ex) when ( + ex is + FileNotFoundException or + PathTooLongException or + DirectoryNotFoundException or + IOException or + UnauthorizedAccessException or + SecurityException or + NotSupportedException) { throw new InvalidOperationException($"Could not open the file at {input}", ex); } From 89156b9b559e49bcba7ea85ff6a5285047340c35 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Mon, 2 Oct 2023 19:14:05 +1100 Subject: [PATCH 348/720] elide some asyncs --- src/Microsoft.OpenApi.Hidi/Program.cs | 4 ++-- .../Services/OpenApiServiceTests.cs | 24 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index b8508ab5..9fe8a301 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -12,12 +12,12 @@ namespace Microsoft.OpenApi.Hidi { static class Program { - static async Task Main(string[] args) + static Task Main(string[] args) { var rootCommand = CreateRootCommand(); // Parse the incoming args and invoke the handler - return await rootCommand.InvokeAsync(args).ConfigureAwait(false); + return rootCommand.InvokeAsync(args); } internal static RootCommand CreateRootCommand() diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 9d73c8db..24169045 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -177,25 +177,25 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiag } [Fact] - public async Task ThrowIfOpenApiUrlIsNotProvidedWhenValidating() + public Task ThrowIfOpenApiUrlIsNotProvidedWhenValidating() { - await Assert.ThrowsAsync(async () => - await OpenApiService.ValidateOpenApiDocument("", _logger, new CancellationToken())); + return Assert.ThrowsAsync(() => + OpenApiService.ValidateOpenApiDocument("", _logger, new CancellationToken())); } [Fact] - public async Task ThrowIfURLIsNotResolvableWhenValidating() + public Task ThrowIfURLIsNotResolvableWhenValidating() { - await Assert.ThrowsAsync(async () => - await OpenApiService.ValidateOpenApiDocument("https://example.org/itdoesnmatter", _logger, new CancellationToken())); + return Assert.ThrowsAsync(() => + OpenApiService.ValidateOpenApiDocument("https://example.org/itdoesnmatter", _logger, new CancellationToken())); } [Fact] - public async Task ThrowIfFileDoesNotExistWhenValidating() + public Task ThrowIfFileDoesNotExistWhenValidating() { - await Assert.ThrowsAsync(async () => - await OpenApiService.ValidateOpenApiDocument("aFileThatBetterNotExist.fake", _logger, new CancellationToken())); + return Assert.ThrowsAsync(() => + OpenApiService.ValidateOpenApiDocument("aFileThatBetterNotExist.fake", _logger, new CancellationToken())); } [Fact] @@ -285,7 +285,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF } [Fact] - public async Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() + public Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() { HidiOptions options = new HidiOptions { @@ -294,8 +294,8 @@ public async Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() InlineLocal = false, InlineExternal = false, }; - await Assert.ThrowsAsync(async () => - await OpenApiService.TransformOpenApiDocument(options, _logger, new CancellationToken())); + return Assert.ThrowsAsync(() => + OpenApiService.TransformOpenApiDocument(options, _logger, new CancellationToken())); } From 4e1cdf0ed30711c04bf8d021319466aa2e9e8e79 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Mon, 2 Oct 2023 19:18:24 +1100 Subject: [PATCH 349/720] remove some redundant braces --- .../Formatters/PowerShellFormatter.cs | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 +- src/Microsoft.OpenApi.Hidi/Program.cs | 2 +- .../Formatters/PowerShellFormatterTests.cs | 15 +- .../Services/OpenApiFilterServiceTests.cs | 7 +- .../Services/OpenApiServiceTests.cs | 6 +- .../UtilityFiles/OpenApiDocumentMock.cs | 134 +++++++++--------- 7 files changed, 86 insertions(+), 84 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index 450a05d2..4db55a05 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -179,7 +179,7 @@ private void AddAdditionalPropertiesToSchema(OpenApiSchema schema) { if (schema != null && !_schemaLoop.Contains(schema) && "object".Equals(schema.Type, StringComparison.OrdinalIgnoreCase)) { - schema.AdditionalProperties = new OpenApiSchema() { Type = "object" }; + schema.AdditionalProperties = new OpenApiSchema { Type = "object" }; /* Because 'additionalProperties' are now being walked, * we need a way to keep track of visited schemas to avoid diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index b3e66cfe..63a8bbb9 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -186,7 +186,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma using var outputStream = options.Output.Create(); using var textWriter = new StreamWriter(outputStream); - var settings = new OpenApiWriterSettings() + var settings = new OpenApiWriterSettings { InlineLocalReferences = options.InlineLocal, InlineExternalReferences = options.InlineExternal @@ -738,7 +738,7 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C WriteOpenApi(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_0, document, logger); // Create OpenAIPluginManifest from ApiDependency and OpenAPI document - var manifest = new OpenAIPluginManifest() + var manifest = new OpenAIPluginManifest { NameForHuman = document.Info.Title, DescriptionForHuman = document.Info.Description, diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index b8508ab5..faf09352 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -22,7 +22,7 @@ static async Task Main(string[] args) internal static RootCommand CreateRootCommand() { - var rootCommand = new RootCommand() { }; + var rootCommand = new RootCommand { }; var commandOptions = new CommandOptions(); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index a2234889..c261a8e4 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -21,14 +21,15 @@ public class PowerShellFormatterTests public void FormatOperationIdsInOpenAPIDocument(string operationId, string expectedOperationId, OperationType operationType, string path = "/foo") { // Arrange - var openApiDocument = new OpenApiDocument() + var openApiDocument = new OpenApiDocument { Info = new() { Title = "Test", Version = "1.0" }, - Servers = new List() { new() { Url = "https://localhost/" } }, + Servers = new List { new() { Url = "https://localhost/" } }, Paths = new() { { path, new() { - Operations = new Dictionary() { + Operations = new Dictionary + { { operationType, new() { OperationId = operationId } } } } @@ -92,14 +93,14 @@ public void ResolveFunctionParameters() private static OpenApiDocument GetSampleOpenApiDocument() { - return new OpenApiDocument() + return new OpenApiDocument { Info = new() { Title = "Test", Version = "1.0" }, - Servers = new List() { new() { Url = "https://localhost/" } }, + Servers = new List { new() { Url = "https://localhost/" } }, Paths = new() { { "/foo", new() { - Operations = new Dictionary() + Operations = new Dictionary { { OperationType.Get, new() @@ -107,7 +108,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() OperationId = "Foo.GetFoo", Parameters = new List { - new OpenApiParameter() + new OpenApiParameter { Name = "ids", In = ParameterLocation.Query, diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 34cdd3a0..32d3db3b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -70,14 +70,15 @@ public void ReturnFilteredOpenApiDocumentBasedOnPostmanCollection() [Fact] public void TestPredicateFiltersUsingRelativeRequestUrls() { - var openApiDocument = new OpenApiDocument() + var openApiDocument = new OpenApiDocument { Info = new() { Title = "Test", Version = "1.0" }, - Servers = new List() { new() { Url = "https://localhost/" } }, + Servers = new List { new() { Url = "https://localhost/" } }, Paths = new() { {"/foo", new() { - Operations = new Dictionary() { + Operations = new Dictionary + { { OperationType.Get, new() }, { OperationType.Patch, new() }, { OperationType.Post, new() } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 9d73c8db..fb2349e5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -136,7 +136,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() { // create a dummy ILogger instance for testing - var options = new HidiOptions() + var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), Output = new FileInfo("sample.md") @@ -151,7 +151,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() [Fact] public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagram() { - var options = new HidiOptions() + var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml") }; @@ -162,7 +162,7 @@ public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagram() [Fact] public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiagram() { - var options = new HidiOptions() + var options = new HidiOptions { Csdl = Path.Combine("UtilityFiles", "Todo.xml"), CsdlFilter = "todos", diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 58b85d91..3fc77fc0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -22,9 +22,9 @@ public static OpenApiDocument CreateOpenApiDocument() { var applicationJsonMediaType = "application/json"; - var document = new OpenApiDocument() + var document = new OpenApiDocument { - Info = new OpenApiInfo() + Info = new OpenApiInfo { Title = "People", Version = "v1.0" @@ -36,7 +36,7 @@ public static OpenApiDocument CreateOpenApiDocument() Url = "https://graph.microsoft.com/v1.0" } }, - Paths = new OpenApiPaths() + Paths = new OpenApiPaths { ["/"] = new OpenApiPathItem() // root path { @@ -46,10 +46,10 @@ public static OpenApiDocument CreateOpenApiDocument() OperationType.Get, new OpenApiOperation { OperationId = "graphService.GetGraphService", - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200",new OpenApiResponse() + "200",new OpenApiResponse { Description = "OK" } @@ -59,7 +59,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"] = new OpenApiPathItem() + ["/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"] = new OpenApiPathItem { Operations = new Dictionary { @@ -69,7 +69,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "reports.Functions" } @@ -80,22 +80,22 @@ public static OpenApiDocument CreateOpenApiDocument() Parameters = new List { { - new OpenApiParameter() + new OpenApiParameter { Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "string" } } } }, - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200", new OpenApiResponse() + "200", new OpenApiResponse { Description = "Success", Content = new Dictionary @@ -120,12 +120,12 @@ public static OpenApiDocument CreateOpenApiDocument() Parameters = new List { { - new OpenApiParameter() + new OpenApiParameter { Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "string" } @@ -133,7 +133,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"] = new OpenApiPathItem() + ["/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"] = new OpenApiPathItem { Operations = new Dictionary { @@ -143,7 +143,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "reports.Functions" } @@ -154,22 +154,22 @@ public static OpenApiDocument CreateOpenApiDocument() Parameters = new List { { - new OpenApiParameter() + new OpenApiParameter { Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "string" } } } }, - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200", new OpenApiResponse() + "200", new OpenApiResponse { Description = "Success", Content = new Dictionary @@ -198,14 +198,14 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "string" } } } }, - ["/users"] = new OpenApiPathItem() + ["/users"] = new OpenApiPathItem { Operations = new Dictionary { @@ -215,7 +215,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "users.user" } @@ -223,10 +223,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "users.user.ListUser", Summary = "Get entities from users", - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200", new OpenApiResponse() + "200", new OpenApiResponse { Description = "Retrieved entities", Content = new Dictionary @@ -268,7 +268,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users/{user-id}"] = new OpenApiPathItem() + ["/users/{user-id}"] = new OpenApiPathItem { Operations = new Dictionary { @@ -278,7 +278,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "users.user" } @@ -286,10 +286,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "users.user.GetUser", Summary = "Get entity from users by key", - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200", new OpenApiResponse() + "200", new OpenApiResponse { Description = "Retrieved entity", Content = new Dictionary @@ -320,7 +320,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "users.user" } @@ -328,10 +328,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "users.user.UpdateUser", Summary = "Update entity in users", - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "204", new OpenApiResponse() + "204", new OpenApiResponse { Description = "Success" } @@ -341,7 +341,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users/{user-id}/messages/{message-id}"] = new OpenApiPathItem() + ["/users/{user-id}/messages/{message-id}"] = new OpenApiPathItem { Operations = new Dictionary { @@ -351,7 +351,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "users.message" } @@ -362,23 +362,23 @@ public static OpenApiDocument CreateOpenApiDocument() Description = "The messages in a mailbox or folder. Read-only. Nullable.", Parameters = new List { - new OpenApiParameter() + new OpenApiParameter { Name = "$select", In = ParameterLocation.Query, Required = true, Description = "Select properties to be returned", - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "array" } // missing explode parameter } }, - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200", new OpenApiResponse() + "200", new OpenApiResponse { Description = "Retrieved navigation property", Content = new Dictionary @@ -405,7 +405,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"] = new OpenApiPathItem() + ["/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"] = new OpenApiPathItem { Operations = new Dictionary { @@ -415,7 +415,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "administrativeUnits.Actions" } @@ -426,23 +426,23 @@ public static OpenApiDocument CreateOpenApiDocument() Parameters = new List { { - new OpenApiParameter() + new OpenApiParameter { Name = "administrativeUnit-id", In = ParameterLocation.Path, Required = true, Description = "key: id of administrativeUnit", - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "string" } } } }, - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200", new OpenApiResponse() + "200", new OpenApiResponse { Description = "Success", Content = new Dictionary @@ -472,7 +472,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/applications/{application-id}/logo"] = new OpenApiPathItem() + ["/applications/{application-id}/logo"] = new OpenApiPathItem { Operations = new Dictionary { @@ -482,7 +482,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "applications.application" } @@ -490,10 +490,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "applications.application.UpdateLogo", Summary = "Update media content for application in applications", - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "204", new OpenApiResponse() + "204", new OpenApiResponse { Description = "Success" } @@ -503,7 +503,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/security/hostSecurityProfiles"] = new OpenApiPathItem() + ["/security/hostSecurityProfiles"] = new OpenApiPathItem { Operations = new Dictionary { @@ -513,7 +513,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "security.hostSecurityProfile" } @@ -521,10 +521,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "security.ListHostSecurityProfiles", Summary = "Get hostSecurityProfiles from security", - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200", new OpenApiResponse() + "200", new OpenApiResponse { Description = "Retrieved navigation property", Content = new Dictionary @@ -566,7 +566,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/communications/calls/{call-id}/microsoft.graph.keepAlive"] = new OpenApiPathItem() + ["/communications/calls/{call-id}/microsoft.graph.keepAlive"] = new OpenApiPathItem { Operations = new Dictionary { @@ -576,7 +576,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag() + new OpenApiTag { Name = "communications.Actions" } @@ -586,13 +586,13 @@ public static OpenApiDocument CreateOpenApiDocument() Summary = "Invoke action keepAlive", Parameters = new List { - new OpenApiParameter() + new OpenApiParameter { Name = "call-id", In = ParameterLocation.Path, Description = "key: id of call", Required = true, - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "string" }, @@ -604,10 +604,10 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "204", new OpenApiResponse() + "204", new OpenApiResponse { Description = "Success" } @@ -623,7 +623,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"] = new OpenApiPathItem() + ["/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"] = new OpenApiPathItem { Operations = new Dictionary { @@ -632,7 +632,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Tags = new List { - new OpenApiTag() + new OpenApiTag { Name = "groups.Functions" } @@ -641,13 +641,13 @@ public static OpenApiDocument CreateOpenApiDocument() Summary = "Invoke function delta", Parameters = new List { - new OpenApiParameter() + new OpenApiParameter { Name = "group-id", In = ParameterLocation.Path, Description = "key: id of group", Required = true, - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "string" }, @@ -658,13 +658,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - new OpenApiParameter() + new OpenApiParameter { Name = "event-id", In = ParameterLocation.Path, Description = "key: id of event", Required = true, - Schema = new OpenApiSchema() + Schema = new OpenApiSchema { Type = "string" }, @@ -676,10 +676,10 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Responses = new OpenApiResponses() + Responses = new OpenApiResponses { { - "200", new OpenApiResponse() + "200", new OpenApiResponse { Description = "Success", Content = new Dictionary @@ -713,7 +713,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/applications/{application-id}/createdOnBehalfOf/$ref"] = new OpenApiPathItem() + ["/applications/{application-id}/createdOnBehalfOf/$ref"] = new OpenApiPathItem { Operations = new Dictionary { @@ -722,7 +722,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Tags = new List { - new OpenApiTag() + new OpenApiTag { Name = "applications.directoryObject" } From b8901e659eb32373ec5e532d353f8a349c665a55 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Mon, 2 Oct 2023 19:20:00 +1100 Subject: [PATCH 350/720] remove some usings --- src/Microsoft.OpenApi.Hidi/Program.cs | 1 - .../Services/OpenApiServiceTests.cs | 1 - .../UtilityFiles/OpenApiDocumentMock.cs | 2 -- 3 files changed, 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Program.cs b/src/Microsoft.OpenApi.Hidi/Program.cs index b8508ab5..13c355cc 100644 --- a/src/Microsoft.OpenApi.Hidi/Program.cs +++ b/src/Microsoft.OpenApi.Hidi/Program.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System.CommandLine; -using System.CommandLine.Parsing; using System.Threading.Tasks; using Microsoft.OpenApi.Hidi.Handlers; using Microsoft.OpenApi.Hidi.Options; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 9d73c8db..fd620502 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -3,7 +3,6 @@ using System.CommandLine; using System.CommandLine.Invocation; -using System.CommandLine.Parsing; using System.Text.Json; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 58b85d91..3f5604ff 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -1,8 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using System.Collections.Generic; -using System.Security.Policy; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; From ebaadacf439f08b3fdb606f6fba5a88fd303088b Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Mon, 2 Oct 2023 19:48:02 +1100 Subject: [PATCH 351/720] use some raw strings --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 55 +++++++++++--------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index b3e66cfe..79c427e2 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -662,18 +662,21 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d { var rootNode = OpenApiUrlTreeNode.Create(document, "main"); - writer.WriteLine(@" - - - - - - -"); + writer.WriteLine( + """ + + + + + + + + + """); writer.WriteLine("

" + document.Info.Title + "

"); writer.WriteLine(); writer.WriteLine($"

API Description: {sourceUrl}

"); @@ -684,6 +687,7 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d { writer.WriteLine($"{style.Key.Replace("_", " ", StringComparison.OrdinalIgnoreCase)}"); } + writer.WriteLine("
"); writer.WriteLine("
"); writer.WriteLine(""); @@ -691,18 +695,21 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d writer.WriteLine(""); // Write script tag to include JS library for rendering markdown - writer.WriteLine(@""); + writer.WriteLine( + """ + + """); // Write script tag to include JS library for rendering mermaid writer.WriteLine(" Date: Mon, 2 Oct 2023 20:01:24 +1100 Subject: [PATCH 352/720] remove some trailing whitespace --- src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs | 2 +- .../Formatters/PowerShellFormatter.cs | 2 +- src/Microsoft.OpenApi.Hidi/Logger.cs | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 +++--- src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs | 4 ++-- src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs | 2 +- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs | 2 +- .../UtilityFiles/OpenApiDocumentMock.cs | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs index 9d507743..5b83212d 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. +// Licensed under the MIT license. using System.Collections.Generic; using System.CommandLine; diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index 4db55a05..26011918 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -24,7 +24,7 @@ static PowerShellFormatter() { // Add singularization exclusions. // Enhancement: Read exclusions from a user provided file. - Vocabularies.Default.AddSingular("(drive)s$", "$1"); // drives does not properly singularize to drive. + Vocabularies.Default.AddSingular("(drive)s$", "$1"); // drives does not properly singularize to drive. Vocabularies.Default.AddSingular("(data)$", "$1"); // exclude the following from singularization. Vocabularies.Default.AddSingular("(delta)$", "$1"); Vocabularies.Default.AddSingular("(quota)$", "$1"); diff --git a/src/Microsoft.OpenApi.Hidi/Logger.cs b/src/Microsoft.OpenApi.Hidi/Logger.cs index 717ca1a4..dec4a5f8 100644 --- a/src/Microsoft.OpenApi.Hidi/Logger.cs +++ b/src/Microsoft.OpenApi.Hidi/Logger.cs @@ -21,7 +21,7 @@ public static ILoggerFactory ConfigureLogger(LogLevel logLevel) { c.IncludeScopes = true; }) -#if DEBUG +#if DEBUG .AddDebug() #endif .SetMinimumLevel(logLevel); diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index d698bd5b..fc70d409 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -154,7 +154,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, requestUrls = EnumerateJsonDocument(postmanCollection.RootElement, new()); logger.LogTrace("Finished fetching the list of paths and Http methods defined in the Postman collection."); } - else + else { requestUrls = new(); logger.LogTrace("No filter options provided."); @@ -211,7 +211,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma } } - // Get OpenAPI document either from OpenAPI or CSDL + // Get OpenAPI document either from OpenAPI or CSDL private static async Task GetOpenApi(HidiOptions options, ILogger logger, CancellationToken cancellationToken, string? metadataVersion = null) { @@ -285,7 +285,7 @@ private static async Task GetOpenApi(HidiOptions options, ILogg private static Dictionary> GetRequestUrlsFromManifest(ApiDependency apiDependency) { - // Get the request URLs from the API Dependencies in the API manifest + // Get the request URLs from the API Dependencies in the API manifest var requests = apiDependency .Requests.Where(static r => !r.Exclude && !string.IsNullOrEmpty(r.UriTemplate) && !string.IsNullOrEmpty(r.Method)) .Select(static r => new { UriTemplate = r.UriTemplate!, Method = r.Method! }) diff --git a/src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs b/src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs index d82a064f..1abf5a6b 100644 --- a/src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs +++ b/src/Microsoft.OpenApi.Hidi/Options/FilterOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. +// Licensed under the MIT license. namespace Microsoft.OpenApi.Hidi.Options { @@ -8,6 +8,6 @@ internal class FilterOptions public string? FilterByOperationIds { get; internal set; } public string? FilterByTags { get; internal set; } public string? FilterByCollection { get; internal set; } - public string? FilterByApiManifest { get; internal set; } + public string? FilterByApiManifest { get; internal set; } } } diff --git a/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs b/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs index 9f5a109f..9b12b73f 100644 --- a/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs +++ b/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. +// Licensed under the MIT license. using System.CommandLine.Parsing; using System.IO; diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 871f88dc..b6af0777 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. +// Licensed under the MIT license. using System; using System.Collections.Generic; diff --git a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs index 6264270a..6ec32f48 100644 --- a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs +++ b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. +// Licensed under the MIT license. using Microsoft.Extensions.Configuration; using Microsoft.OpenApi.OData; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 3fc77fc0..c6f33d6f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -203,7 +203,7 @@ public static OpenApiDocument CreateOpenApiDocument() Type = "string" } } - } + } }, ["/users"] = new OpenApiPathItem { From 402d68998eac88be5866064199eed1b656d3849d Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Mon, 2 Oct 2023 20:09:00 +1100 Subject: [PATCH 353/720] . --- src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs | 2 +- .../Services/OpenApiFilterServiceTests.cs | 1 - .../Services/OpenApiServiceTests.cs | 9 +-------- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs b/src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs index 73564497..6fee866c 100644 --- a/src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs +++ b/src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs @@ -104,6 +104,6 @@ public IReadOnlyList
From 6b53a97cf5bef34502bc9778285a9b22979f4a0e Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 5 Oct 2023 21:48:25 +1100 Subject: [PATCH 363/720] simplify UtilityFiles with wildcards --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 32 +------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 1f2ec91e..c39d2cae 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -25,37 +25,7 @@
- - Always - - - - - - Always - - - Always - - - Always - - - Always - - - Always - - - PreserveNewest - - - Always - - - Always - - + Always From 580f81ac248e8327a1e5d0ec8b0722c067e2750c Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 5 Oct 2023 21:51:41 +1100 Subject: [PATCH 364/720] Update Microsoft.OpenApi.Hidi.Tests.csproj --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c39d2cae..77c9b800 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -28,6 +28,9 @@ Always + + Always + From ae7f56810907f2a9d164bcc3285d9b6d88ebd504 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 5 Oct 2023 22:46:48 +1100 Subject: [PATCH 365/720] use some target typed new --- .../Formatters/PowerShellFormatter.cs | 6 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 16 +- .../Options/HidiOptions.cs | 2 +- .../Formatters/PowerShellFormatterTests.cs | 16 +- .../Services/OpenApiFilterServiceTests.cs | 2 +- .../Services/OpenApiServiceTests.cs | 10 +- .../UtilityFiles/OpenApiDocumentMock.cs | 172 +++++++++--------- 7 files changed, 112 insertions(+), 112 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index 183de169..d473fcd5 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -163,10 +163,10 @@ private static IList ResolveFunctionParameters(IList options.TerseOutput ? new OpenApiJsonWriter(textWriter, settings, options.TerseOutput) : new OpenApiJsonWriter(textWriter, settings, false), + OpenApiFormat.Json => options.TerseOutput ? new(textWriter, settings, options.TerseOutput) : new OpenApiJsonWriter(textWriter, settings, false), OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), _ => throw new ArgumentException("Unknown format"), }; @@ -368,11 +368,11 @@ private static async Task ParseOpenApi(string openApiFile, bool inli { stopwatch.Start(); - result = await new OpenApiStreamReader(new OpenApiReaderSettings - { + result = await new OpenApiStreamReader(new() + { LoadExternalRefs = inlineExternal, BaseUrl = openApiFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? - new Uri(openApiFile) : + new(openApiFile) : new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) } ).ReadAsync(stream, cancellationToken).ConfigureAwait(false); @@ -459,7 +459,7 @@ private static Dictionary> EnumerateJsonDocument(JsonElemen } else { - paths.Add(path, new List {method}); + paths.Add(path, new() {method}); } } else @@ -741,7 +741,7 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C outputFolder.Create(); } // Write OpenAPI to Output folder - options.Output = new FileInfo(Path.Combine(options.OutputFolder, "openapi.json")); + options.Output = new(Path.Combine(options.OutputFolder, "openapi.json")); options.TerseOutput = true; WriteOpenApi(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_0, document, logger); @@ -762,7 +762,7 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C // Write OpenAIPluginManifest to Output folder var manifestFile = new FileInfo(Path.Combine(options.OutputFolder, "ai-plugin.json")); using var file = new FileStream(manifestFile.FullName, FileMode.Create); - using var jsonWriter = new Utf8JsonWriter(file, new JsonWriterOptions { Indented = true }); + using var jsonWriter = new Utf8JsonWriter(file, new() { Indented = true }); manifest.Write(jsonWriter); await jsonWriter.FlushAsync(cancellationToken).ConfigureAwait(false); } diff --git a/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs b/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs index d2a2bfe4..fca97c87 100644 --- a/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs +++ b/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs @@ -53,7 +53,7 @@ private void ParseHidiOptions(ParseResult parseResult, CommandOptions options) LogLevel = parseResult.GetValueForOption(options.LogLevelOption); InlineLocal = parseResult.GetValueForOption(options.InlineLocalOption); InlineExternal = parseResult.GetValueForOption(options.InlineExternalOption); - FilterOptions = new FilterOptions + FilterOptions = new() { FilterByOperationIds = parseResult.GetValueForOption(options.FilterByOperationIdsOption), FilterByTags = parseResult.GetValueForOption(options.FilterByTagsOption), diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index c261a8e4..a5bf7421 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -93,7 +93,7 @@ public void ResolveFunctionParameters() private static OpenApiDocument GetSampleOpenApiDocument() { - return new OpenApiDocument + return new() { Info = new() { Title = "Test", Version = "1.0" }, Servers = new List { new() { Url = "https://localhost/" } }, @@ -108,7 +108,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() OperationId = "Foo.GetFoo", Parameters = new List { - new OpenApiParameter + new() { Name = "ids", In = ParameterLocation.Query, @@ -118,10 +118,10 @@ private static OpenApiDocument GetSampleOpenApiDocument() "application/json", new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { Type = "array", - Items = new OpenApiSchema + Items = new() { Type = "string" } @@ -157,8 +157,8 @@ private static OpenApiDocument GetSampleOpenApiDocument() { AnyOf = new List { - new OpenApiSchema { Type = "number" }, - new OpenApiSchema { Type = "string" } + new() { Type = "number" }, + new() { Type = "string" } }, Format = "float", Nullable = true @@ -169,8 +169,8 @@ private static OpenApiDocument GetSampleOpenApiDocument() { OneOf = new List { - new OpenApiSchema { Type = "number", Format = "double" }, - new OpenApiSchema { Type = "string" } + new() { Type = "number", Format = "double" }, + new() { Type = "string" } } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 03c61158..0f353b32 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -19,7 +19,7 @@ public class OpenApiFilterServiceTests public OpenApiFilterServiceTests() { _openApiDocumentMock = OpenApiDocumentMock.CreateOpenApiDocument(); - _mockLogger = new Mock>(); + _mockLogger = new(); _logger = _mockLogger.Object; } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index d4e97ed9..b2b6b6c9 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -92,7 +92,7 @@ public void ShowCommandGeneratesMermaidDiagramAsMarkdown() { var openApiDoc = new OpenApiDocument { - Info = new OpenApiInfo + Info = new() { Title = "Test", Version = "1.0.0" @@ -113,7 +113,7 @@ public void ShowCommandGeneratesMermaidDiagramAsHtml() { var openApiDoc = new OpenApiDocument { - Info = new OpenApiInfo + Info = new() { Title = "Test", Version = "1.0.0" @@ -136,7 +136,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagram() var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), - Output = new FileInfo("sample.md") + Output = new("sample.md") }; await OpenApiService.ShowOpenApiDocument(options, _logger); @@ -163,7 +163,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiag { Csdl = Path.Combine("UtilityFiles", "Todo.xml"), CsdlFilter = "todos", - Output = new FileInfo("sample.md") + Output = new("sample.md") }; // create a dummy ILogger instance for testing @@ -211,7 +211,7 @@ public async Task TransformCommandConvertsOpenApi() HidiOptions options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), - Output = new FileInfo("sample.json"), + Output = new("sample.json"), CleanOutput = true, TerseOutput = false, InlineLocal = false, diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 106509a3..67b06f72 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -22,21 +22,21 @@ public static OpenApiDocument CreateOpenApiDocument() var document = new OpenApiDocument { - Info = new OpenApiInfo + Info = new() { Title = "People", Version = "v1.0" }, Servers = new List { - new OpenApiServer + new() { Url = "https://graph.microsoft.com/v1.0" } }, - Paths = new OpenApiPaths + Paths = new() { - ["/"] = new OpenApiPathItem() // root path + ["/"] = new() // root path { Operations = new Dictionary { @@ -44,10 +44,10 @@ public static OpenApiDocument CreateOpenApiDocument() OperationType.Get, new OpenApiOperation { OperationId = "graphService.GetGraphService", - Responses = new OpenApiResponses + Responses = new() { { - "200",new OpenApiResponse + "200",new() { Description = "OK" } @@ -57,7 +57,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"] = new OpenApiPathItem + ["/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"] = new() { Operations = new Dictionary { @@ -67,7 +67,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "reports.Functions" } @@ -78,22 +78,22 @@ public static OpenApiDocument CreateOpenApiDocument() Parameters = new List { { - new OpenApiParameter + new() { Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new OpenApiSchema + Schema = new() { Type = "string" } } } }, - Responses = new OpenApiResponses + Responses = new() { { - "200", new OpenApiResponse + "200", new() { Description = "Success", Content = new Dictionary @@ -102,7 +102,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { Type = "array" } @@ -118,12 +118,12 @@ public static OpenApiDocument CreateOpenApiDocument() Parameters = new List { { - new OpenApiParameter + new() { Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new OpenApiSchema + Schema = new() { Type = "string" } @@ -131,7 +131,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"] = new OpenApiPathItem + ["/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"] = new() { Operations = new Dictionary { @@ -141,7 +141,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "reports.Functions" } @@ -152,22 +152,22 @@ public static OpenApiDocument CreateOpenApiDocument() Parameters = new List { { - new OpenApiParameter + new() { Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new OpenApiSchema + Schema = new() { Type = "string" } } } }, - Responses = new OpenApiResponses + Responses = new() { { - "200", new OpenApiResponse + "200", new() { Description = "Success", Content = new Dictionary @@ -176,7 +176,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { Type = "array" } @@ -191,19 +191,19 @@ public static OpenApiDocument CreateOpenApiDocument() }, Parameters = new List { - new OpenApiParameter + new() { Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new OpenApiSchema + Schema = new() { Type = "string" } } } }, - ["/users"] = new OpenApiPathItem + ["/users"] = new() { Operations = new Dictionary { @@ -213,7 +213,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "users.user" } @@ -221,10 +221,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "users.user.ListUser", Summary = "Get entities from users", - Responses = new OpenApiResponses + Responses = new() { { - "200", new OpenApiResponse + "200", new() { Description = "Retrieved entities", Content = new Dictionary @@ -233,7 +233,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { Title = "Collection of user", Type = "object", @@ -244,9 +244,9 @@ public static OpenApiDocument CreateOpenApiDocument() new OpenApiSchema { Type = "array", - Items = new OpenApiSchema + Items = new() { - Reference = new OpenApiReference + Reference = new() { Type = ReferenceType.Schema, Id = "microsoft.graph.user" @@ -266,7 +266,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users/{user-id}"] = new OpenApiPathItem + ["/users/{user-id}"] = new() { Operations = new Dictionary { @@ -276,7 +276,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "users.user" } @@ -284,10 +284,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "users.user.GetUser", Summary = "Get entity from users by key", - Responses = new OpenApiResponses + Responses = new() { { - "200", new OpenApiResponse + "200", new() { Description = "Retrieved entity", Content = new Dictionary @@ -296,9 +296,9 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { - Reference = new OpenApiReference + Reference = new() { Type = ReferenceType.Schema, Id = "microsoft.graph.user" @@ -318,7 +318,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "users.user" } @@ -326,10 +326,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "users.user.UpdateUser", Summary = "Update entity in users", - Responses = new OpenApiResponses + Responses = new() { { - "204", new OpenApiResponse + "204", new() { Description = "Success" } @@ -339,7 +339,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users/{user-id}/messages/{message-id}"] = new OpenApiPathItem + ["/users/{user-id}/messages/{message-id}"] = new() { Operations = new Dictionary { @@ -349,7 +349,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "users.message" } @@ -360,23 +360,23 @@ public static OpenApiDocument CreateOpenApiDocument() Description = "The messages in a mailbox or folder. Read-only. Nullable.", Parameters = new List { - new OpenApiParameter + new() { Name = "$select", In = ParameterLocation.Query, Required = true, Description = "Select properties to be returned", - Schema = new OpenApiSchema + Schema = new() { Type = "array" } // missing explode parameter } }, - Responses = new OpenApiResponses + Responses = new() { { - "200", new OpenApiResponse + "200", new() { Description = "Retrieved navigation property", Content = new Dictionary @@ -385,9 +385,9 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { - Reference = new OpenApiReference + Reference = new() { Type = ReferenceType.Schema, Id = "microsoft.graph.message" @@ -403,7 +403,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"] = new OpenApiPathItem + ["/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"] = new() { Operations = new Dictionary { @@ -413,7 +413,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "administrativeUnits.Actions" } @@ -424,23 +424,23 @@ public static OpenApiDocument CreateOpenApiDocument() Parameters = new List { { - new OpenApiParameter + new() { Name = "administrativeUnit-id", In = ParameterLocation.Path, Required = true, Description = "key: id of administrativeUnit", - Schema = new OpenApiSchema + Schema = new() { Type = "string" } } } }, - Responses = new OpenApiResponses + Responses = new() { { - "200", new OpenApiResponse + "200", new() { Description = "Success", Content = new Dictionary @@ -449,11 +449,11 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { AnyOf = new List { - new OpenApiSchema + new() { Type = "string" } @@ -470,7 +470,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/applications/{application-id}/logo"] = new OpenApiPathItem + ["/applications/{application-id}/logo"] = new() { Operations = new Dictionary { @@ -480,7 +480,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "applications.application" } @@ -488,10 +488,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "applications.application.UpdateLogo", Summary = "Update media content for application in applications", - Responses = new OpenApiResponses + Responses = new() { { - "204", new OpenApiResponse + "204", new() { Description = "Success" } @@ -501,7 +501,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/security/hostSecurityProfiles"] = new OpenApiPathItem + ["/security/hostSecurityProfiles"] = new() { Operations = new Dictionary { @@ -511,7 +511,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "security.hostSecurityProfile" } @@ -519,10 +519,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, OperationId = "security.ListHostSecurityProfiles", Summary = "Get hostSecurityProfiles from security", - Responses = new OpenApiResponses + Responses = new() { { - "200", new OpenApiResponse + "200", new() { Description = "Retrieved navigation property", Content = new Dictionary @@ -531,7 +531,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { Title = "Collection of hostSecurityProfile", Type = "object", @@ -542,9 +542,9 @@ public static OpenApiDocument CreateOpenApiDocument() new OpenApiSchema { Type = "array", - Items = new OpenApiSchema + Items = new() { - Reference = new OpenApiReference + Reference = new() { Type = ReferenceType.Schema, Id = "microsoft.graph.networkInterface" @@ -564,7 +564,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/communications/calls/{call-id}/microsoft.graph.keepAlive"] = new OpenApiPathItem + ["/communications/calls/{call-id}/microsoft.graph.keepAlive"] = new() { Operations = new Dictionary { @@ -574,7 +574,7 @@ public static OpenApiDocument CreateOpenApiDocument() Tags = new List { { - new OpenApiTag + new() { Name = "communications.Actions" } @@ -584,13 +584,13 @@ public static OpenApiDocument CreateOpenApiDocument() Summary = "Invoke action keepAlive", Parameters = new List { - new OpenApiParameter + new() { Name = "call-id", In = ParameterLocation.Path, Description = "key: id of call", Required = true, - Schema = new OpenApiSchema + Schema = new() { Type = "string" }, @@ -602,10 +602,10 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Responses = new OpenApiResponses + Responses = new() { { - "204", new OpenApiResponse + "204", new() { Description = "Success" } @@ -621,7 +621,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"] = new OpenApiPathItem + ["/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"] = new() { Operations = new Dictionary { @@ -630,7 +630,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Tags = new List { - new OpenApiTag + new() { Name = "groups.Functions" } @@ -639,13 +639,13 @@ public static OpenApiDocument CreateOpenApiDocument() Summary = "Invoke function delta", Parameters = new List { - new OpenApiParameter + new() { Name = "group-id", In = ParameterLocation.Path, Description = "key: id of group", Required = true, - Schema = new OpenApiSchema + Schema = new() { Type = "string" }, @@ -656,13 +656,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - new OpenApiParameter + new() { Name = "event-id", In = ParameterLocation.Path, Description = "key: id of event", Required = true, - Schema = new OpenApiSchema + Schema = new() { Type = "string" }, @@ -674,10 +674,10 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Responses = new OpenApiResponses + Responses = new() { { - "200", new OpenApiResponse + "200", new() { Description = "Success", Content = new Dictionary @@ -686,10 +686,10 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new OpenApiSchema + Schema = new() { Type = "array", - Reference = new OpenApiReference + Reference = new() { Type = ReferenceType.Schema, Id = "microsoft.graph.event" @@ -711,7 +711,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/applications/{application-id}/createdOnBehalfOf/$ref"] = new OpenApiPathItem + ["/applications/{application-id}/createdOnBehalfOf/$ref"] = new() { Operations = new Dictionary { @@ -720,7 +720,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Tags = new List { - new OpenApiTag + new() { Name = "applications.directoryObject" } @@ -732,7 +732,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Components = new OpenApiComponents + Components = new() { Schemas = new Dictionary { From 8f07829b49d1d54e5ef74cf528601d316d80847b Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sun, 8 Oct 2023 21:53:59 +1100 Subject: [PATCH 366/720] Update test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj Co-authored-by: Vincent Biret --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 77c9b800..94593baf 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -25,7 +25,7 @@ - + Always From c2af00fd79b286eb5df1bbded3b7a41211ae1146 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sun, 8 Oct 2023 22:14:37 +1100 Subject: [PATCH 367/720] use some pattern matching --- src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs index 95ffceea..174c9c93 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs @@ -18,7 +18,7 @@ public static OpenApiSpecVersion TryParseOpenApiSpecVersion(string value) if (int.TryParse(res, out int result)) { - if (result >= 2 && result < 3) + if (result is >= 2 and < 3) { return OpenApiSpecVersion.OpenApi2_0; } From d7db8bd43a63343786cc79a43fd712d8424ab28f Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sun, 8 Oct 2023 22:17:09 +1100 Subject: [PATCH 368/720] use some var --- .../Formatters/PowerShellFormatter.cs | 2 +- .../Handlers/PluginCommandHandler.cs | 4 ++-- .../Handlers/ShowCommandHandler.cs | 4 ++-- .../Handlers/TransformCommandHandler.cs | 4 ++-- .../Handlers/ValidateCommandHandler.cs | 4 ++-- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 18 +++++++++--------- .../OpenApiSpecVersionHelper.cs | 2 +- .../Services/OpenApiServiceTests.cs | 12 ++++++------ 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index d473fcd5..96d3cc17 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -122,7 +122,7 @@ private static string SingularizeAndDeduplicateOperationId(IList operati var lastSegmentIndex = segmentsCount - 1; var singularizedSegments = new List(); - for (int x = 0; x < segmentsCount; x++) + for (var x = 0; x < segmentsCount; x++) { var segment = operationIdSegments[x].Singularize(inputIsKnownToBePlural: false); diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs index 2c7e921b..bd240f00 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs @@ -24,8 +24,8 @@ public int Invoke(InvocationContext context) } public async Task InvokeAsync(InvocationContext context) { - HidiOptions hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); - CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); + var hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); + var cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(hidiOptions.LogLevel); var logger = loggerFactory.CreateLogger(); diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs index 05491230..dc2f6d8c 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs @@ -24,8 +24,8 @@ public int Invoke(InvocationContext context) } public async Task InvokeAsync(InvocationContext context) { - HidiOptions hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); - CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); + var hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); + var cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(hidiOptions.LogLevel); var logger = loggerFactory.CreateLogger(); diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index 293fefec..c9f46b7e 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -24,8 +24,8 @@ public int Invoke(InvocationContext context) } public async Task InvokeAsync(InvocationContext context) { - HidiOptions hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); - CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); + var hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); + var cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(hidiOptions.LogLevel); var logger = loggerFactory.CreateLogger(); diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index 4351a04c..e0bfbf6b 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -26,8 +26,8 @@ public int Invoke(InvocationContext context) } public async Task InvokeAsync(InvocationContext context) { - HidiOptions hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); - CancellationToken cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); + var hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); + var cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); using var loggerFactory = Logger.ConfigureLogger(hidiOptions.LogLevel); var logger = loggerFactory.CreateLogger(); try diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 22cf230a..841dd5f2 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -66,8 +66,8 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l } // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion - OpenApiFormat openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); - OpenApiSpecVersion openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_0; + var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); + var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_0; // If ApiManifest is provided, set the referenced OpenAPI document var apiDependency = await FindApiDependency(options.FilterOptions.FilterByApiManifest, logger, cancellationToken).ConfigureAwait(false); @@ -85,7 +85,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l } // Load OpenAPI document - OpenApiDocument document = await GetOpenApi(options, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApi(options, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); if (options.FilterOptions != null) { @@ -227,7 +227,7 @@ private static async Task GetOpenApi(HidiOptions options, ILogg Stream? filteredStream = null; if (!string.IsNullOrEmpty(options.CsdlFilter)) { - XslCompiledTransform transform = GetFilterTransform(); + var transform = GetFilterTransform(); filteredStream = ApplyFilterToCsdl(stream, options.CsdlFilter, transform); filteredStream.Position = 0; await stream.DisposeAsync().ConfigureAwait(false); @@ -299,7 +299,7 @@ private static Dictionary> GetRequestUrlsFromManifest(ApiDe private static XslCompiledTransform GetFilterTransform() { XslCompiledTransform transform = new(); - Assembly assembly = typeof(OpenApiService).GetTypeInfo().Assembly; + var assembly = typeof(OpenApiService).GetTypeInfo().Assembly; using var xslt = assembly.GetManifestResourceStream("Microsoft.OpenApi.Hidi.CsdlFilter.xslt") ?? throw new InvalidOperationException("Could not find the Microsoft.OpenApi.Hidi.CsdlFilter.xslt file in the assembly. Check build configuration."); using var streamReader = new StreamReader(xslt); using var textReader = new XmlTextReader(streamReader); @@ -310,7 +310,7 @@ private static XslCompiledTransform GetFilterTransform() private static Stream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) { using StreamReader inputReader = new(csdlStream, leaveOpen: true); - using XmlReader inputXmlReader = XmlReader.Create(inputReader); + using var inputXmlReader = XmlReader.Create(inputReader); MemoryStream filteredStream = new(); using StreamWriter writer = new(filteredStream, leaveOpen: true); XsltArgumentList args = new(); @@ -363,7 +363,7 @@ public static async Task ValidateOpenApiDocument( private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) { ReadResult result; - Stopwatch stopwatch = Stopwatch.StartNew(); + var stopwatch = Stopwatch.StartNew(); using (logger.BeginScope("Parsing OpenAPI: {OpenApiFile}", openApiFile)) { stopwatch.Start(); @@ -398,7 +398,7 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); settings ??= SettingsUtilities.GetConfiguration(); - OpenApiDocument document = edmModel.ConvertToOpenApi(SettingsUtilities.GetOpenApiConvertSettings(settings, metadataVersion)); + var document = edmModel.ConvertToOpenApi(SettingsUtilities.GetOpenApiConvertSettings(settings, metadataVersion)); document = FixReferences(document); return document; @@ -725,7 +725,7 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C } // Load OpenAPI document - OpenApiDocument document = await GetOpenApi(options, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApi(options, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs index 95ffceea..e7250fb8 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs @@ -16,7 +16,7 @@ public static OpenApiSpecVersion TryParseOpenApiSpecVersion(string value) } var res = value.Split('.', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); - if (int.TryParse(res, out int result)) + if (int.TryParse(res, out var result)) { if (result >= 2 && result < 3) { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index b2b6b6c9..f588e483 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -208,7 +208,7 @@ public async Task ValidateCommandProcessesOpenApi() [Fact] public async Task TransformCommandConvertsOpenApi() { - HidiOptions options = new HidiOptions + var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), Output = new("sample.json"), @@ -228,7 +228,7 @@ public async Task TransformCommandConvertsOpenApi() [Fact] public async Task TransformCommandConvertsOpenApiWithDefaultOutputName() { - HidiOptions options = new HidiOptions + var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, @@ -246,7 +246,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputName() [Fact] public async Task TransformCommandConvertsCsdlWithDefaultOutputName() { - HidiOptions options = new HidiOptions + var options = new HidiOptions { Csdl = Path.Combine("UtilityFiles", "Todo.xml"), CleanOutput = true, @@ -264,7 +264,7 @@ public async Task TransformCommandConvertsCsdlWithDefaultOutputName() [Fact] public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchFormat() { - HidiOptions options = new HidiOptions + var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, @@ -284,7 +284,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF [Fact] public Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() { - HidiOptions options = new HidiOptions + var options = new HidiOptions { CleanOutput = true, TerseOutput = false, @@ -299,7 +299,7 @@ public Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() public async Task TransformToPowerShellCompliantOpenApi() { var settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "examplepowershellsettings.json"); - HidiOptions options = new HidiOptions + var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, From 9b06067244f0c12861ad397e619bbc144ea4acf6 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sun, 8 Oct 2023 23:11:53 +1100 Subject: [PATCH 369/720] use some expression lambdas --- src/Microsoft.OpenApi.Hidi/Logger.cs | 5 +---- .../Services/OpenApiServiceTests.cs | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Logger.cs b/src/Microsoft.OpenApi.Hidi/Logger.cs index dec4a5f8..2dd1a4ee 100644 --- a/src/Microsoft.OpenApi.Hidi/Logger.cs +++ b/src/Microsoft.OpenApi.Hidi/Logger.cs @@ -17,10 +17,7 @@ public static ILoggerFactory ConfigureLogger(LogLevel logLevel) return LoggerFactory.Create((builder) => { builder - .AddSimpleConsole(c => - { - c.IncludeScopes = true; - }) + .AddSimpleConsole(c => c.IncludeScopes = true) #if DEBUG .AddDebug() #endif diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index b2b6b6c9..5face887 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -180,7 +180,6 @@ public Task ThrowIfOpenApiUrlIsNotProvidedWhenValidating() OpenApiService.ValidateOpenApiDocument("", _logger)); } - [Fact] public Task ThrowIfURLIsNotResolvableWhenValidating() { From 43eb2cfd4527421a28e256dc8d87a94119c962e7 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Sun, 8 Oct 2023 23:13:32 +1100 Subject: [PATCH 370/720] remove redundant type specs --- src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs | 2 +- .../Services/OpenApiServiceTests.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs index 99208a1d..3d636208 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs @@ -40,7 +40,7 @@ public static IList SplitByChar(this string target, char separator) { return new List(); } - return target.Split(new char[] { separator }, StringSplitOptions.RemoveEmptyEntries).ToList(); + return target.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries).ToList(); } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index b2b6b6c9..fb451c1d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -322,7 +322,7 @@ public void InvokeTransformCommand() { var rootCommand = Program.CreateRootCommand(); var openapi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); - var args = new string[] { "transform", "-d", openapi, "-o", "sample.json", "--co" }; + var args = new[] { "transform", "-d", openapi, "-o", "sample.json", "--co" }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "transform").First().Handler; var context = new InvocationContext(parseResult); @@ -339,7 +339,7 @@ public void InvokeShowCommand() { var rootCommand = Program.CreateRootCommand(); var openApi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); - var args = new string[] { "show", "-d", openApi, "-o", "sample.md" }; + var args = new[] { "show", "-d", openApi, "-o", "sample.md" }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "show").First().Handler; var context = new InvocationContext(parseResult); @@ -355,7 +355,7 @@ public void InvokePluginCommand() { var rootCommand = Program.CreateRootCommand(); var manifest = Path.Combine(".", "UtilityFiles", "exampleapimanifest.json"); - var args = new string[] { "plugin", "-m", manifest, "--of", AppDomain.CurrentDomain.BaseDirectory }; + var args = new[] { "plugin", "-m", manifest, "--of", AppDomain.CurrentDomain.BaseDirectory }; var parseResult = rootCommand.Parse(args); var handler = rootCommand.Subcommands.Where(c => c.Name == "plugin").First().Handler; var context = new InvocationContext(parseResult); From 96e9f910de8fa94feca3ce1283a3501c5b82b937 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Oct 2023 21:25:47 +0000 Subject: [PATCH 371/720] Bump xunit from 2.5.1 to 2.5.2 Bumps [xunit](https://github.com/xunit/xunit) from 2.5.1 to 2.5.2. - [Commits](https://github.com/xunit/xunit/compare/2.5.1...2.5.2) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 1f2ec91e..396d89f7 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 8495c4a18ada091a38811e19052c63aa5f1113d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 14 Oct 2023 16:08:25 +0000 Subject: [PATCH 372/720] Bump xunit.runner.visualstudio from 2.5.1 to 2.5.3 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.5.1 to 2.5.3. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.1...2.5.3) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 396d89f7..c9ca053f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From d7cb5175b32e6954b58816f048d79bed3927c533 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 21:05:39 +0000 Subject: [PATCH 373/720] Bump xunit from 2.5.2 to 2.5.3 Bumps [xunit](https://github.com/xunit/xunit) from 2.5.2 to 2.5.3. - [Commits](https://github.com/xunit/xunit/compare/2.5.2...2.5.3) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c9ca053f..23a9f169 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 1d6e88dce3d7a0dc7e78f2e207f53291e222b1f3 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 24 Oct 2023 15:35:57 -0400 Subject: [PATCH 374/720] - fixes filter for files copy --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 94593baf..d5044b2c 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -25,7 +25,7 @@ - + Always From e19907e2a5c5cdfc40b0e944215ac852742ff2a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Oct 2023 21:16:16 +0000 Subject: [PATCH 375/720] Bump Microsoft.OpenApi.OData from 1.5.0-preview5 to 1.5.0-preview6 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.5.0-preview5 to 1.5.0-preview6. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 5ee796e0..3e9efd49 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 088d1c5690b3f4f97e4bcca8a88823583dca4384 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 21:14:11 +0000 Subject: [PATCH 376/720] Bump Microsoft.OpenApi.OData from 1.5.0-preview6 to 1.5.0-preview7 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.5.0-preview6 to 1.5.0-preview7. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3e9efd49..bf9808a8 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 81f80e5e0e17505b975060ec0db7768192afef16 Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:24:47 +0300 Subject: [PATCH 377/720] Bump up lib. versions (#1443) * Bump up Hidi version * Bump up lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index bf9808a8..4e47d6e8 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.1 + 1.3.2 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 566d15fa6a6c2e17f3f06872d7a901c7a635d074 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Nov 2023 21:28:48 +0000 Subject: [PATCH 378/720] Bump xunit from 2.5.3 to 2.6.0 Bumps [xunit](https://github.com/xunit/xunit) from 2.5.3 to 2.6.0. - [Commits](https://github.com/xunit/xunit/compare/2.5.3...2.6.0) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 5eb4506c..7fb32389 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 9e6852d4504f176ce28a130b7ba72381689a020b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 21:30:43 +0000 Subject: [PATCH 379/720] Bump xunit from 2.6.0 to 2.6.1 Bumps [xunit](https://github.com/xunit/xunit) from 2.6.0 to 2.6.1. - [Commits](https://github.com/xunit/xunit/compare/2.6.0...2.6.1) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 7fb32389..0bb5cd26 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 4c85783322ba50ca9d15e78f94307e781077cb61 Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Mon, 6 Nov 2023 15:03:48 +0300 Subject: [PATCH 380/720] Update release notes (#1452) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4e47d6e8..7ac8ea3f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.2 + 1.3.3 OpenAPI.NET CLI tool for slicing OpenAPI documents true @@ -35,7 +35,7 @@ - + From da25a59ccac905227ee2772051af73b791d7518e Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 7 Nov 2023 11:06:36 +0300 Subject: [PATCH 381/720] Refactor parameter name --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 841dd5f2..a8740f91 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -263,7 +263,7 @@ private static async Task GetOpenApi(HidiOptions options, ILogg if (!string.IsNullOrEmpty(filterByOperationIds)) { logger.LogTrace("Creating predicate based on the operationIds supplied."); - predicate = OpenApiFilterService.CreatePredicate(tags: filterByOperationIds); + predicate = OpenApiFilterService.CreatePredicate(operationIds: filterByOperationIds); } if (!string.IsNullOrEmpty(filterByTags)) From 57eb646cb5bf9a4f21ee56f85b370483eaf37ef1 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 7 Nov 2023 15:03:19 +0300 Subject: [PATCH 382/720] Bump hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7ac8ea3f..da773708 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -1,4 +1,4 @@ - + Exe @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.3 + 1.3.4 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 51fb7351a4bb4220932b5701b7339f085fcce20c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Nov 2023 21:38:31 +0000 Subject: [PATCH 383/720] Bump Microsoft.NET.Test.Sdk from 17.7.2 to 17.8.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.7.2 to 17.8.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.7.2...v17.8.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 0bb5cd26..d9e049cb 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,7 +12,7 @@ - + From 69d67564c745d5309c149ca1ee16b71106bcda62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 21:52:22 +0000 Subject: [PATCH 384/720] Bump Microsoft.OpenApi.OData from 1.5.0-preview8 to 1.5.0-preview9 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.5.0-preview8 to 1.5.0-preview9. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index da773708..c268fc47 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -1,4 +1,4 @@ - + Exe @@ -35,7 +35,7 @@ - + From 8330a63b63ad62c6cbdcebb9b5b1b311bac722ba Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Tue, 14 Nov 2023 12:28:44 +0300 Subject: [PATCH 385/720] Release Hidi to get access to new version of conversion lib. (#1460) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c268fc47..e1ddeebb 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.4 + 1.3.5 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 225c69eef86b703e90a51cdb15f80d9f3f445e60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Nov 2023 21:57:35 +0000 Subject: [PATCH 386/720] Bump Microsoft.Extensions.Logging.Abstractions from 7.0.1 to 8.0.0 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 7.0.1 to 8.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v7.0.1...v8.0.0) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e1ddeebb..6ae810ac 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -30,7 +30,7 @@ - + From 98a5a56a5bdc17a8235ab884f9cdf9d785983d53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Nov 2023 22:17:59 +0000 Subject: [PATCH 387/720] Bump Microsoft.Extensions.Logging from 7.0.0 to 8.0.0 Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime) from 7.0.0 to 8.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v7.0.0...v8.0.0) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 6ae810ac..49ce04b2 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,7 +29,7 @@ - + From 7a111f6270d252fb01188c0427b8da2785a8add5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Nov 2023 01:18:05 +0000 Subject: [PATCH 388/720] Bump Microsoft.Extensions.Logging.Debug from 7.0.0 to 8.0.0 Bumps [Microsoft.Extensions.Logging.Debug](https://github.com/dotnet/runtime) from 7.0.0 to 8.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v7.0.0...v8.0.0) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Debug dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 49ce04b2..dee879e8 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -32,7 +32,7 @@ - + From 205b5966e04b833cacc56198277a1c4c8e3343e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Nov 2023 01:21:39 +0000 Subject: [PATCH 389/720] Bump Microsoft.Extensions.Logging.Console from 7.0.0 to 8.0.0 Bumps [Microsoft.Extensions.Logging.Console](https://github.com/dotnet/runtime) from 7.0.0 to 8.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v7.0.0...v8.0.0) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Console dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index dee879e8..620043d6 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -31,7 +31,7 @@ - + From 9e15f34a905d406dab2c9dbb7104964bfb7c406b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 21:12:39 +0000 Subject: [PATCH 390/720] Bump xunit.runner.visualstudio from 2.5.3 to 2.5.4 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.5.3 to 2.5.4. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.3...2.5.4) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index d9e049cb..d4e045b0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 42e9d1f04bb2e7d2f0d4ec448fbd8bff150b0b8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 21:51:54 +0000 Subject: [PATCH 391/720] Bump xunit from 2.6.1 to 2.6.2 Bumps [xunit](https://github.com/xunit/xunit) from 2.6.1 to 2.6.2. - [Commits](https://github.com/xunit/xunit/compare/2.6.1...2.6.2) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index d4e045b0..8ea74031 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From e0fe6cd71a6d0622a4155d8d39ad5134764587cd Mon Sep 17 00:00:00 2001 From: Andrew Omondi Date: Tue, 21 Nov 2023 10:27:24 +0300 Subject: [PATCH 392/720] Fix tests --- .../Services/OpenApiFilterServiceTests.cs | 4 ++-- .../Services/OpenApiServiceTests.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 0f353b32..5fb1b15f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -35,7 +35,7 @@ public OpenApiFilterServiceTests() [InlineData(null, "users.user", 2)] [InlineData(null, "applications.application", 1)] [InlineData(null, "reports.Functions", 2)] - public void ReturnFilteredOpenApiDocumentBasedOnOperationIdsAndTags(string operationIds, string tags, int expectedPathCount) + public void ReturnFilteredOpenApiDocumentBasedOnOperationIdsAndTags(string? operationIds, string? tags, int expectedPathCount) { // Act var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); @@ -173,7 +173,7 @@ public void ThrowsInvalidOperationExceptionInCreatePredicateWhenInvalidArguments [Theory] [InlineData("reports.getTeamsUserActivityUserDetail-a3f1", null)] [InlineData(null, "reports.Functions")] - public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string operationIds, string tags) + public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string? operationIds, string? tags) { // Act var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 2844849e..f7c5aab4 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -47,7 +47,7 @@ public async Task ReturnConvertedCSDLFile() [InlineData("Todos.Todo.UpdateTodo", null, 1)] [InlineData("Todos.Todo.ListTodo", null, 1)] [InlineData(null, "Todos.Todo", 5)] - public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string operationIds, string tags, int expectedPathCount) + public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string? operationIds, string? tags, int expectedPathCount) { // Arrange var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "Todo.xml"); @@ -68,7 +68,7 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen [Theory] [InlineData("UtilityFiles/appsettingstest.json")] [InlineData(null)] - public void ReturnOpenApiConvertSettingsWhenSettingsFileIsProvided(string filePath) + public void ReturnOpenApiConvertSettingsWhenSettingsFileIsProvided(string? filePath) { // Arrange var config = SettingsUtilities.GetConfiguration(filePath); From 4888e09642b72848b82bb58e54da14ed129149f3 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 22 Nov 2023 19:43:33 +0300 Subject: [PATCH 393/720] Configure the settings file path to be relative to the current working directory --- .../Utilities/SettingsUtilities.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs index 6ec32f48..f6798287 100644 --- a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs +++ b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.IO; using Microsoft.Extensions.Configuration; using Microsoft.OpenApi.OData; @@ -11,15 +12,19 @@ internal static class SettingsUtilities internal static IConfiguration GetConfiguration(string? settingsFile = null) { if (string.IsNullOrEmpty(settingsFile)) + { settingsFile = "appsettings.json"; + } + + var settingsFilePath = Path.Combine(Directory.GetCurrentDirectory(), settingsFile); IConfiguration config = new ConfigurationBuilder() - .AddJsonFile(settingsFile, true) - .Build(); + .AddJsonFile(settingsFilePath, true) + .Build(); return config; } - + internal static OpenApiConvertSettings GetOpenApiConvertSettings(IConfiguration config, string? metadataVersion) { if (config == null) { throw new System.ArgumentNullException(nameof(config)); } From 45a1c95d8131b35b28c5af222bb08ac1c709bf5b Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 22 Nov 2023 19:53:03 +0300 Subject: [PATCH 394/720] Upgrade lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 620043d6..c5f3e09d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.5 + 1.3.6 OpenAPI.NET CLI tool for slicing OpenAPI documents true From fe1a988cf2b2d32b272e17e27ed8c89b2701b6c4 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 27 Nov 2023 14:57:19 +0300 Subject: [PATCH 395/720] Resolve merge conflicts; clean up code and refactoring --- .../Extensions/OpenApiExtensibleExtensions.cs | 4 +- .../Formatters/PowerShellFormatter.cs | 263 +++++++++++++----- .../Formatters/PowerShellFormatterTests.cs | 84 +++--- .../Services/OpenApiServiceTests.cs | 58 +--- 4 files changed, 234 insertions(+), 175 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs index faf03c3f..ee57125d 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs @@ -14,9 +14,9 @@ internal static class OpenApiExtensibleExtensions /// A value matching the provided extensionKey. Return null when extensionKey is not found. internal static string GetExtension(this IDictionary extensions, string extensionKey) { - if (extensions.TryGetValue(extensionKey, out var value) && value is OpenApiString castValue) + if (extensions.TryGetValue(extensionKey, out var value) && value is OpenApiAny castValue) { - return castValue.Value; + return castValue.Node.GetValue(); } return string.Empty; } diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index 96d3cc17..b7fe664c 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -4,10 +4,12 @@ using System.Text; using System.Text.RegularExpressions; using Humanizer; -using Humanizer.Inflections; +using Json.Schema; +using Json.Schema.OpenApi; using Microsoft.OpenApi.Hidi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; +using Microsoft.OpenApi.Extensions; namespace Microsoft.OpenApi.Hidi.Formatters { @@ -15,7 +17,7 @@ internal class PowerShellFormatter : OpenApiVisitorBase { private const string DefaultPutPrefix = ".Update"; private const string PowerShellPutPrefix = ".Set"; - private readonly Stack _schemaLoop = new(); + private readonly Stack _schemaLoop = new(); private static readonly Regex s_oDataCastRegex = new("(.*(?<=[a-z]))\\.(As(?=[A-Z]).*)", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); private static readonly Regex s_hashSuffixRegex = new(@"^[^-]+", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); private static readonly Regex s_oDataRefRegex = new("(?<=[a-z])Ref(?=[A-Z])", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); @@ -24,11 +26,11 @@ static PowerShellFormatter() { // Add singularization exclusions. // Enhancement: Read exclusions from a user provided file. - Vocabularies.Default.AddSingular("(drive)s$", "$1"); // drives does not properly singularize to drive. - Vocabularies.Default.AddSingular("(data)$", "$1"); // exclude the following from singularization. - Vocabularies.Default.AddSingular("(delta)$", "$1"); - Vocabularies.Default.AddSingular("(quota)$", "$1"); - Vocabularies.Default.AddSingular("(statistics)$", "$1"); + Humanizer.Inflections.Vocabularies.Default.AddSingular("(drive)s$", "$1"); // drives does not properly singularize to drive. + Humanizer.Inflections.Vocabularies.Default.AddSingular("(data)$", "$1"); // exclude the following from singularization. + Humanizer.Inflections.Vocabularies.Default.AddSingular("(delta)$", "$1"); + Humanizer.Inflections.Vocabularies.Default.AddSingular("(quota)$", "$1"); + Humanizer.Inflections.Vocabularies.Default.AddSingular("(statistics)$", "$1"); } //FHL task for PS @@ -41,13 +43,13 @@ static PowerShellFormatter() // 5. Fix anyOf and oneOf schema. // 6. Add AdditionalProperties to object schemas. - public override void Visit(OpenApiSchema schema) + public override void Visit(ref JsonSchema schema) { AddAdditionalPropertiesToSchema(schema); - ResolveAnyOfSchema(schema); - ResolveOneOfSchema(schema); + schema = ResolveAnyOfSchema(ref schema); + schema = ResolveOneOfSchema(ref schema); - base.Visit(schema); + base.Visit(ref schema); } public override void Visit(OpenApiPathItem pathItem) @@ -163,97 +165,228 @@ private static IList ResolveFunctionParameters(IList { { - "x-ms-docs-operation-type", new OpenApiString("function") + "x-ms-docs-operation-type", new OpenApiAny("function") } } } @@ -145,37 +143,21 @@ private static OpenApiDocument GetSampleOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new Dictionary { - { "TestSchema", new OpenApiSchema - { - Type = "object", - Properties = new Dictionary - { - { - "averageAudioDegradation", new OpenApiSchema - { - AnyOf = new List - { - new() { Type = "number" }, - new() { Type = "string" } - }, - Format = "float", - Nullable = true - } - }, - { - "defaultPrice", new OpenApiSchema - { - OneOf = new List - { - new() { Type = "number", Format = "double" }, - new() { Type = "string" } - } - } - } - } - } + { "TestSchema", new JsonSchemaBuilder() + .Type(SchemaValueType.Object) + .Properties(("averageAudioDegradation", new JsonSchemaBuilder() + .AnyOf( + new JsonSchemaBuilder().Type(SchemaValueType.Number), + new JsonSchemaBuilder().Type(SchemaValueType.String)) + .Format("float") + .Nullable(true)), + + ("defaultPrice", new JsonSchemaBuilder() + .OneOf( + new JsonSchemaBuilder().Type(SchemaValueType.Number).Format("double"), + new JsonSchemaBuilder().Type(SchemaValueType.String)))) } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index f7c5aab4..56063130 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -25,46 +25,7 @@ public OpenApiServiceTests() { _logger = new Logger(_loggerFactory); } - - [Fact] - public async Task ReturnConvertedCSDLFile() - { - // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "Todo.xml"); - var fileInput = new FileInfo(filePath); - var csdlStream = fileInput.OpenRead(); - // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); - var expectedPathCount = 5; - - // Assert - Assert.NotNull(openApiDoc); - Assert.NotEmpty(openApiDoc.Paths); - Assert.Equal(expectedPathCount, openApiDoc.Paths.Count); - } - - [Theory] - [InlineData("Todos.Todo.UpdateTodo", null, 1)] - [InlineData("Todos.Todo.ListTodo", null, 1)] - [InlineData(null, "Todos.Todo", 5)] - public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocument(string? operationIds, string? tags, int expectedPathCount) - { - // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "Todo.xml"); - var fileInput = new FileInfo(filePath); - var csdlStream = fileInput.OpenRead(); - - // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApi(csdlStream); - var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); - var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(openApiDoc, predicate); - - // Assert - Assert.NotNull(subsetOpenApiDocument); - Assert.NotEmpty(subsetOpenApiDocument.Paths); - Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); - } - + [Theory] [InlineData("UtilityFiles/appsettingstest.json")] [InlineData(null)] @@ -156,23 +117,6 @@ public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagram() Assert.True(File.Exists(filePath)); } - [Fact] - public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiagram() - { - var options = new HidiOptions - { - Csdl = Path.Combine("UtilityFiles", "Todo.xml"), - CsdlFilter = "todos", - Output = new("sample.md") - }; - - // create a dummy ILogger instance for testing - await OpenApiService.ShowOpenApiDocument(options, _logger); - - var output = await File.ReadAllTextAsync(options.Output.FullName); - Assert.Contains("graph LR", output, StringComparison.Ordinal); - } - [Fact] public Task ThrowIfOpenApiUrlIsNotProvidedWhenValidating() { From 50747bc4209f15b5ce6d6e4e692c4b3bfa905089 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 21:44:30 +0000 Subject: [PATCH 396/720] Bump Moq from 4.20.69 to 4.20.70 Bumps [Moq](https://github.com/moq/moq) from 4.20.69 to 4.20.70. - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/devlooped/moq/blob/main/CHANGELOG.md) - [Commits](https://github.com/moq/moq/compare/v4.20.69...v4.20.70) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 8ea74031..4a5dd2ad 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ - + From baefb3f7ac3d5f8f7afb62daf5d029d8b71d0d25 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 29 Nov 2023 13:13:55 +0300 Subject: [PATCH 397/720] Clean up code and tests --- .../Services/OpenApiServiceTests.cs | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 56063130..b06e38d3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -186,24 +186,6 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputName() Assert.NotEmpty(output); } - [Fact] - public async Task TransformCommandConvertsCsdlWithDefaultOutputName() - { - var options = new HidiOptions - { - Csdl = Path.Combine("UtilityFiles", "Todo.xml"), - CleanOutput = true, - TerseOutput = false, - InlineLocal = false, - InlineExternal = false, - }; - // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument(options, _logger); - - var output = await File.ReadAllTextAsync("output.yml"); - Assert.NotEmpty(output); - } - [Fact] public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchFormat() { From d14fda279b73eceb51452fbabc92c86d3afe2649 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 21:10:02 +0000 Subject: [PATCH 398/720] Bump Microsoft.OData.Edm from 7.18.0 to 7.19.0 Bumps Microsoft.OData.Edm from 7.18.0 to 7.19.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c5f3e09d..85a6bafb 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,7 +34,7 @@ - + From cdf6c012720bc5b2e0904bc6ad4956afc5520270 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 7 Dec 2023 16:32:18 +0300 Subject: [PATCH 399/720] Refactor code to resolve Oneof and AnyOf schemas --- .../Formatters/PowerShellFormatter.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index b7fe664c..aab3fb82 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -44,8 +44,8 @@ static PowerShellFormatter() // 6. Add AdditionalProperties to object schemas. public override void Visit(ref JsonSchema schema) - { - AddAdditionalPropertiesToSchema(schema); + { + AddAdditionalPropertiesToSchema(ref schema); schema = ResolveAnyOfSchema(ref schema); schema = ResolveOneOfSchema(ref schema); @@ -174,7 +174,7 @@ private static IList ResolveFunctionParameters(IList Date: Fri, 8 Dec 2023 21:35:22 +0000 Subject: [PATCH 400/720] Bump Microsoft.OpenApi.OData from 1.5.0-preview9 to 1.5.0 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.5.0-preview9 to 1.5.0. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 85a6bafb..b41895ec 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 9b369fd889b9a4396fc0ee1b3189abf602bca14e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Dec 2023 22:18:45 +0000 Subject: [PATCH 401/720] Bump Microsoft.OData.Edm from 7.19.0 to 7.20.0 Bumps Microsoft.OData.Edm from 7.19.0 to 7.20.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b41895ec..81aa8564 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,7 +34,7 @@ - + From bf39f4c56cbe06bc7a7d7d9701e5886fca3edea1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 21:47:20 +0000 Subject: [PATCH 402/720] Bump xunit.runner.visualstudio from 2.5.4 to 2.5.5 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.5.4 to 2.5.5. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.4...2.5.5) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 4a5dd2ad..e80e915d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From e398adf23bd862fe600695ebc509edcf26c1c05c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 21:54:08 +0000 Subject: [PATCH 403/720] Bump xunit from 2.6.2 to 2.6.3 Bumps [xunit](https://github.com/xunit/xunit) from 2.6.2 to 2.6.3. - [Commits](https://github.com/xunit/xunit/compare/2.6.2...2.6.3) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index e80e915d..6e0ca4ac 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 9e18b45c41db752e090b7126a17a6e3695b5e741 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 21:57:55 +0000 Subject: [PATCH 404/720] Bump xunit.runner.visualstudio from 2.5.5 to 2.5.6 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.5.5 to 2.5.6. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.5...2.5.6) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 6e0ca4ac..9c9b03df 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 728fe1fbf114c3ff1a92a8848f5d633d643bf82a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Dec 2023 21:21:59 +0000 Subject: [PATCH 405/720] Bump xunit from 2.6.3 to 2.6.4 Bumps [xunit](https://github.com/xunit/xunit) from 2.6.3 to 2.6.4. - [Commits](https://github.com/xunit/xunit/compare/2.6.3...2.6.4) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 9c9b03df..6cf6ac21 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 032e0d46be61190c772ac6f6fed89dcb28f696fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Jan 2024 21:13:40 +0000 Subject: [PATCH 406/720] Bump xunit from 2.6.4 to 2.6.5 Bumps [xunit](https://github.com/xunit/xunit) from 2.6.4 to 2.6.5. - [Commits](https://github.com/xunit/xunit/compare/2.6.4...2.6.5) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 6cf6ac21..c5857909 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From b3205cc5f55f4ad4087aacd629d1d0725991365b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 21:38:25 +0000 Subject: [PATCH 407/720] Bump xunit from 2.6.5 to 2.6.6 Bumps [xunit](https://github.com/xunit/xunit) from 2.6.5 to 2.6.6. - [Commits](https://github.com/xunit/xunit/compare/2.6.5...2.6.6) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c5857909..a22b6a7d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 7484e768d983f96bc6eeabc4eac304e2d10f4dcd Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Tue, 16 Jan 2024 10:58:47 +0300 Subject: [PATCH 408/720] Bump up conversion lib. --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 81aa8564..e0dc65be 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 41110d59921c2924e6e9f1465cb7486709b04e0c Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 16 Jan 2024 17:54:27 +0300 Subject: [PATCH 409/720] Bump lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 81aa8564..7a9ba2ae 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.6 + 1.3.7 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 2ce6b87bfed47b4b00df993c4761600d6624f12e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jan 2024 21:33:50 +0000 Subject: [PATCH 410/720] Bump Microsoft.OpenApi.OData from 1.6.0-preview.2 to 1.6.0-preview.3 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.0-preview.2 to 1.6.0-preview.3. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 84a64182..505d50ef 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 6d8572f6ef45fbeceaae1b9766786509c639b428 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 21:43:51 +0000 Subject: [PATCH 411/720] Bump Microsoft.OpenApi.OData from 1.6.0-preview.3 to 1.6.0-preview.4 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.0-preview.3 to 1.6.0-preview.4. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 505d50ef..6b038a29 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From eff18a0ed017e6f7b105231054cae2165878954e Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 29 Jan 2024 11:08:15 +0300 Subject: [PATCH 412/720] Bump lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 6b038a29..70e04e54 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -1,4 +1,4 @@ - + Exe @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.7 + 1.3.8 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 27629a8ce38a8a3d2c6adf162d165b7f6b9c06cf Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 31 Jan 2024 15:14:59 +0300 Subject: [PATCH 413/720] Migrate projects to .NET 8 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- .../Microsoft.OpenApi.Hidi.Tests.csproj | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 81aa8564..09c79d07 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -1,8 +1,8 @@ - + Exe - net7.0 + net8.0 latest true true diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 6e0ca4ac..638e0515 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -1,7 +1,7 @@ - + - net7.0 + net8.0 enable enable From 9490bad74e9917276b19f04bbffbb029944a9aa2 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 31 Jan 2024 15:15:43 +0300 Subject: [PATCH 414/720] Use Count() for clarity and performance gain --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 5bd13f21..4abb2d5a 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -272,7 +272,7 @@ private static async Task GetOpenApi(HidiOptions options, ILogg predicate = OpenApiFilterService.CreatePredicate(tags: filterByTags); } - if (requestUrls.Any()) + if (requestUrls.Count != 0) { logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: document); From 3dd9150a6fa66aef8a40d42358a53b01535dec85 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 31 Jan 2024 15:16:53 +0300 Subject: [PATCH 415/720] Change return type from Stream to MemoryStream for improved performance --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 4abb2d5a..cb63e0ce 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -307,7 +307,7 @@ private static XslCompiledTransform GetFilterTransform() return transform; } - private static Stream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) + private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) { using StreamReader inputReader = new(csdlStream, leaveOpen: true); using var inputXmlReader = XmlReader.Create(inputReader); From 7ec70273faa0c9b4187277d65ff62786bd755af3 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 31 Jan 2024 15:19:00 +0300 Subject: [PATCH 416/720] Use ArgumentNullException.ThrowIfNull() instead of explicitly throwing a new Exception instance --- src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs index f6798287..2b2e8bfc 100644 --- a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs +++ b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.IO; using Microsoft.Extensions.Configuration; using Microsoft.OpenApi.OData; @@ -27,7 +28,7 @@ internal static IConfiguration GetConfiguration(string? settingsFile = null) internal static OpenApiConvertSettings GetOpenApiConvertSettings(IConfiguration config, string? metadataVersion) { - if (config == null) { throw new System.ArgumentNullException(nameof(config)); } + ArgumentNullException.ThrowIfNull(config); var settings = new OpenApiConvertSettings(); if (!string.IsNullOrEmpty(metadataVersion)) settings.SemVerVersion = metadataVersion; From d75d4c2f1dca98dab94e9d415ebf0baac267ceb5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Feb 2024 21:04:53 +0000 Subject: [PATCH 417/720] Bump Microsoft.OpenApi.OData from 1.6.0-preview.4 to 1.6.0-preview.5 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.0-preview.4 to 1.6.0-preview.5. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 70e04e54..175daa3f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 12f1756b705340a7658afe90dcbdc76d93ba3838 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Mon, 5 Feb 2024 16:36:13 +0300 Subject: [PATCH 418/720] Update readme.md --- src/Microsoft.OpenApi.Hidi/readme.md | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 111ee704..faa2c224 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -68,24 +68,28 @@ Used to convert file formats from JSON to YAML and vice versa and performs slici This command accepts the following parameters: • --openapi(-d) - OpenAPI description file path in the local filesystem or a valid URL hosted on a HTTPS server - • --csdl(-cs) - CSDL file path in the local filesystem or a valid URL hosted on a HTTPS server - • --csdlfilter(-csf) - a filter parameter that a user can use to select a subset of a large CSDL file. They do so by providing a comma delimited list of EntitySet and Singleton names that appear in the EntityContainer. - • --output(-o) - Output directory path for the transformed document - • --clean-ouput(-co) - an optional param that allows a user to overwrite an existing file. - • --version(-v) - OpenAPI specification version + • --csdl(--cs) - CSDL file path in the local filesystem or a valid URL hosted on a HTTPS server + • --csdlfilter(--csf) - a filter parameter that a user can use to select a subset of a large CSDL file. They do so by providing a comma delimited list of EntitySet and Singleton names that appear in the EntityContainer. + • --output(-o) - Output directory path for the transformed document. + • --output-folder(--of) - The output directory path for the generated files. + • --clean-ouput(--co) - an optional param that allows a user to overwrite an existing file. + • --version(-v) - OpenAPI specification version. + • --metadata-version(--mv) - Graph metadata version to use. • --format(-f) - File format - • --loglevel(-ll) - The log level to use when logging messages to the main output - • --inline(-i) - Inline $ref instances - • --resolveExternal(-ex) - Resolve external $refs - • --filterByOperationIds(-op) - Slice document based on OperationId(s) provided. Accepts a comma delimited list of operation ids. + • --terse-output(--to) - Produce terse json output + • --settings-path(--sp) - The configuration file with CSDL conversion settings. + • --loglevel(--ll) - The log level to use when logging messages to the main output + • --inline-local - Inline local $ref instances + • --inline-external(--ex) - Inline external $refs + • --filterByOperationIds(--op) - Slice document based on OperationId(s) provided. Accepts a comma delimited list of operation ids. • --filterByTags(-t) - Slice document based on tag(s) provided. Accepts a comma delimited list of tags. • --filterByCollection(-c) - Slices the OpenAPI document based on the Postman Collection file generated by Resource Explorer - • --filterByManifest (-m) - Slices the OpenAPI document based on the requests defined in the API Manifest file referenced by the provided URI. For API manifests with multiple API Dependenties, use a fragment identifier to select the desired one. e.g ./apimanifest.json#example + • --manifest (-m) - Slices the OpenAPI document based on the requests defined in the API Manifest file referenced by the provided URI. For API manifests with multiple API Dependenties, use a fragment identifier to select the desired one. e.g ./apimanifest.json#example **Examples:** 1. Filtering by OperationIds - hidi transform -d files\People.yml -f yaml -o files\People.yml -v OpenApi3_0 -op users_UpdateInsights -co + hidi transform -d files\People.yml -f yaml -o files\People.yml -v OpenApi3_0 --op users_UpdateInsights --co 2. Filtering by Postman collection hidi transform --openapi files\People.yml --format yaml --output files\People2.yml --version OpenApi3_0 --filterByCollection Graph-Collection-0017059134807617005.postman_collection.json @@ -94,7 +98,7 @@ This command accepts the following parameters: hidi transform --input Files/Todo.xml --output Files/Todo-subset.yml --format yaml --version OpenApi3_0 --filterByOperationIds Todos.Todo.UpdateTodo 4. CSDL Filtering by EntitySets and Singletons - hidi transform -cs dataverse.csdl --csdlFilter "appointments,opportunities" -o appointmentsAndOpportunities.yaml -ll trace + hidi transform --cs dataverse.csdl --csdlFilter "appointments,opportunities" -o appointmentsAndOpportunities.yaml --ll trace Run transform -h to see all the available usage options. From c0451dbcfe4b2f563613caf3cbad15aac6e6968e Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 5 Feb 2024 18:39:42 +0300 Subject: [PATCH 419/720] Adjust namespaces and usings --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index cb63e0ce..93a8645e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -29,6 +29,7 @@ using Microsoft.OpenApi.Hidi.Utilities; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; +using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Writers; From 292f4acb63d8ba0dc2f52e2c99730f5999a5a53b Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Mon, 5 Feb 2024 23:43:15 +0300 Subject: [PATCH 420/720] Bump conversion lib. (#1548) * Bump up OData lib. * Bump up hidi --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 175daa3f..3d9f435e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.8 + 1.3.9 OpenAPI.NET CLI tool for slicing OpenAPI documents true @@ -35,7 +35,7 @@ - + From 84dad5f101a5710e128a317c9ed5945337b76dbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 21:08:50 +0000 Subject: [PATCH 421/720] Bump Microsoft.NET.Test.Sdk from 17.8.0 to 17.9.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.8.0 to 17.9.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.8.0...v17.9.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index a22b6a7d..fb9e6d14 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,7 +12,7 @@ - + From 5e93c8c3bf579c7df1dc64ef0bf164194263fd90 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 7 Feb 2024 10:36:00 +0300 Subject: [PATCH 422/720] Update command option description --- src/Microsoft.OpenApi.Hidi/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index faa2c224..8e89e2a8 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -74,7 +74,7 @@ This command accepts the following parameters: • --output-folder(--of) - The output directory path for the generated files. • --clean-ouput(--co) - an optional param that allows a user to overwrite an existing file. • --version(-v) - OpenAPI specification version. - • --metadata-version(--mv) - Graph metadata version to use. + • --metadata-version(--mv) - the metadata version to use. • --format(-f) - File format • --terse-output(--to) - Produce terse json output • --settings-path(--sp) - The configuration file with CSDL conversion settings. From e46ec78a18ffe3271043de4268e9560c48d25e59 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 15 Feb 2024 16:55:58 +0300 Subject: [PATCH 423/720] Update hidi to use the Load/Parse methods --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 33 ++++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 93a8645e..95513328 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -19,6 +19,7 @@ using System.Xml.Xsl; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using Microsoft.OData.Edm.Csdl; using Microsoft.OpenApi.ApiManifest; using Microsoft.OpenApi.ApiManifest.OpenAI; @@ -86,7 +87,8 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l } // Load OpenAPI document - var document = await GetOpenApi(options, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var format = OpenApiModelFactory.GetFormat(options.OpenApi); + var document = await GetOpenApi(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); if (options.FilterOptions != null) { @@ -213,7 +215,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma } // Get OpenAPI document either from OpenAPI or CSDL - private static async Task GetOpenApi(HidiOptions options, ILogger logger, string? metadataVersion = null, CancellationToken cancellationToken = default) + private static async Task GetOpenApi(HidiOptions options, string format, ILogger logger, string? metadataVersion = null, CancellationToken cancellationToken = default) { OpenApiDocument document; Stream stream; @@ -234,7 +236,7 @@ private static async Task GetOpenApi(HidiOptions options, ILogg await stream.DisposeAsync().ConfigureAwait(false); } - document = await ConvertCsdlToOpenApi(filteredStream ?? stream, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); + document = await ConvertCsdlToOpenApi(filteredStream ?? stream, format, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } @@ -369,14 +371,16 @@ private static async Task ParseOpenApi(string openApiFile, bool inli { stopwatch.Start(); - result = await new OpenApiStreamReader(new() - { + var settings = new OpenApiReaderSettings + { LoadExternalRefs = inlineExternal, BaseUrl = openApiFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? new(openApiFile) : new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) - } - ).ReadAsync(stream, cancellationToken).ConfigureAwait(false); + }; + + var format = OpenApiModelFactory.GetFormat(openApiFile); + result = await OpenApiDocument.LoadAsync(stream, format, settings, cancellationToken).ConfigureAwait(false); logger.LogTrace("{Timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); @@ -392,7 +396,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApi(Stream csdl, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) + public static async Task ConvertCsdlToOpenApi(Stream csdl, string format, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) { using var reader = new StreamReader(csdl); var csdlText = await reader.ReadToEndAsync(token).ConfigureAwait(false); @@ -400,7 +404,7 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri settings ??= SettingsUtilities.GetConfiguration(); var document = edmModel.ConvertToOpenApi(SettingsUtilities.GetOpenApiConvertSettings(settings, metadataVersion)); - document = FixReferences(document); + document = FixReferences(document, format); return document; } @@ -410,14 +414,15 @@ public static async Task ConvertCsdlToOpenApi(Stream csdl, stri /// /// The converted OpenApiDocument. /// A valid OpenApiDocument instance. - public static OpenApiDocument FixReferences(OpenApiDocument document) + public static OpenApiDocument FixReferences(OpenApiDocument document, string format) { // This method is only needed because the output of ConvertToOpenApi isn't quite a valid OpenApiDocument instance. // So we write it out, and read it back in again to fix it up. var sb = new StringBuilder(); document.SerializeAsV3(new OpenApiYamlWriter(new StringWriter(sb))); - var doc = new OpenApiStringReader().Read(sb.ToString(), out _); + + var doc = OpenApiDocument.Parse(sb.ToString(), format).OpenApiDocument; return doc; } @@ -565,7 +570,8 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl throw new ArgumentException("Please input a file path or URL"); } - var document = await GetOpenApi(options, logger, null, cancellationToken).ConfigureAwait(false); + var format = OpenApiModelFactory.GetFormat(options.OpenApi); + var document = await GetOpenApi(options, format, logger, null, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Creating diagram")) { @@ -726,7 +732,8 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C } // Load OpenAPI document - var document = await GetOpenApi(options, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var format = OpenApiModelFactory.GetFormat(options.OpenApi); + var document = await GetOpenApi(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); From 813f067ed971254ab81cca293d3568daf5588e97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Feb 2024 21:15:04 +0000 Subject: [PATCH 424/720] Bump xunit.runner.visualstudio from 2.5.6 to 2.5.7 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.5.6 to 2.5.7. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.6...2.5.7) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index fb9e6d14..99c4b207 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From c2fe4592124e6aad5e2146fdb2ea066b59ea9b65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Feb 2024 02:03:36 +0000 Subject: [PATCH 425/720] Bump xunit from 2.6.6 to 2.7.0 Bumps [xunit](https://github.com/xunit/xunit) from 2.6.6 to 2.7.0. - [Commits](https://github.com/xunit/xunit/compare/2.6.6...2.7.0) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 99c4b207..6a000952 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 956ee5c00dea4a5f54595cdb66ffd66f6025adc8 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 19 Feb 2024 13:10:02 +0300 Subject: [PATCH 426/720] Fix failing tests --- .../Services/OpenApiServiceTests.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index b06e38d3..4b61d3bd 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -11,7 +11,8 @@ using Microsoft.OpenApi.Hidi.Utilities; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; -using Microsoft.OpenApi.Services; +using Microsoft.OpenApi.Reader; +using Microsoft.OpenApi.Readers; using Xunit; namespace Microsoft.OpenApi.Hidi.Tests @@ -24,8 +25,11 @@ public sealed class OpenApiServiceTests : IDisposable public OpenApiServiceTests() { _logger = new Logger(_loggerFactory); + OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader()); + OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader()); + } - + [Theory] [InlineData("UtilityFiles/appsettingstest.json")] [InlineData(null)] From d0bc05ced1b5b8838dd1c260731449539beb5df7 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 20 Feb 2024 18:03:52 +0300 Subject: [PATCH 427/720] Auto-register the YamlReader in Hidi --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 95513328..9adc4e2d 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -40,6 +40,12 @@ namespace Microsoft.OpenApi.Hidi { internal static class OpenApiService { + static OpenApiService() + { + OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader()); + OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader()); + } + /// /// Implementation of the transform command /// From 19b4a89ffc18a20fd0096ec68907e7076f5b6787 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 20 Feb 2024 18:04:08 +0300 Subject: [PATCH 428/720] Remove unnecessary usings --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 9adc4e2d..fd8b5359 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -19,7 +19,6 @@ using System.Xml.Xsl; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; using Microsoft.OData.Edm.Csdl; using Microsoft.OpenApi.ApiManifest; using Microsoft.OpenApi.ApiManifest.OpenAI; From d7e382190fd5352eda7d53fe35acca476c5a7018 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 21:35:31 +0000 Subject: [PATCH 429/720] Bump coverlet.collector from 6.0.0 to 6.0.1 Bumps [coverlet.collector](https://github.com/coverlet-coverage/coverlet) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 6a000952..de8205ed 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + From eaf93f9fb9ba6e374fdbf7e6f04ea874c49b1a35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 23:41:39 +0000 Subject: [PATCH 430/720] Bump coverlet.msbuild from 6.0.0 to 6.0.1 Bumps [coverlet.msbuild](https://github.com/coverlet-coverage/coverlet) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.0...v6.0.1) --- updated-dependencies: - dependency-name: coverlet.msbuild dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index de8205ed..8789f276 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -11,7 +11,7 @@ - + From 0e9ec3ae414fba5a2365263ce7bb48e8914c76db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Feb 2024 21:54:32 +0000 Subject: [PATCH 431/720] Bump Microsoft.OpenApi.OData from 1.6.0-preview.7 to 1.6.0-preview.8 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.0-preview.7 to 1.6.0-preview.8. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3d9f435e..7e77ff6c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From eac28557a254757ba840a4cea63b01e21dd3557c Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 28 Feb 2024 15:11:26 +0300 Subject: [PATCH 432/720] If supplied, use the input OpenApi format as the output file extension, else default to the input file extension --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index fd8b5359..ad689ba1 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -59,7 +59,10 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l { if (options.Output == null) { - var inputExtension = GetInputPathExtension(options.OpenApi, options.Csdl); +#pragma warning disable CA1308 // Normalize strings to uppercase + var inputExtension = string.Concat(".", options.OpenApiFormat.GetDisplayName().ToLowerInvariant()) + ?? GetInputPathExtension(options.OpenApi, options.Csdl); +#pragma warning restore CA1308 // Normalize strings to uppercase options.Output = new($"./output{inputExtension}"); }; From 8b9d785a53f80a0d1a7794c21a2c329d0e46d480 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Mar 2024 21:59:08 +0000 Subject: [PATCH 433/720] Bump Microsoft.OpenApi.OData from 1.6.0-preview.8 to 1.6.0-preview.9 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.0-preview.8 to 1.6.0-preview.9. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7e77ff6c..8a194697 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 9bcc61f254df95c6828c6b0005027473af555b45 Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Mon, 4 Mar 2024 12:52:32 +0300 Subject: [PATCH 434/720] Bump Hidi (#1574) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 8a194697..18d06676 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -1,4 +1,4 @@ - + Exe @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.9 + 1.3.10 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 543a3bfe8046681cf20bfa7b1c062f7c7ebaec80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 21:45:52 +0000 Subject: [PATCH 435/720] Bump Microsoft.OpenApi.OData from 1.6.0-preview.9 to 1.6.0-preview.10 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.0-preview.9 to 1.6.0-preview.10. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 18d06676..fec0ca12 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 459603f2fc2d4a273225af0fe69b885661df86c9 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 5 Mar 2024 08:04:36 -0500 Subject: [PATCH 436/720] - upgrades hidi to net 8 Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs | 3 ++- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index fec0ca12..a1270f0b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -2,7 +2,7 @@ Exe - net7.0 + net8.0 latest true true diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index a8740f91..f33fc61d 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -272,7 +272,7 @@ private static async Task GetOpenApi(HidiOptions options, ILogg predicate = OpenApiFilterService.CreatePredicate(tags: filterByTags); } - if (requestUrls.Any()) + if (requestUrls.Count > 0) { logger.LogTrace("Creating predicate based on the paths and Http methods defined in the Postman collection."); predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: document); @@ -307,7 +307,7 @@ private static XslCompiledTransform GetFilterTransform() return transform; } - private static Stream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) + private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySetOrSingleton, XslCompiledTransform transform) { using StreamReader inputReader = new(csdlStream, leaveOpen: true); using var inputXmlReader = XmlReader.Create(inputReader); diff --git a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs index f6798287..2b2e8bfc 100644 --- a/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs +++ b/src/Microsoft.OpenApi.Hidi/Utilities/SettingsUtilities.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System; using System.IO; using Microsoft.Extensions.Configuration; using Microsoft.OpenApi.OData; @@ -27,7 +28,7 @@ internal static IConfiguration GetConfiguration(string? settingsFile = null) internal static OpenApiConvertSettings GetOpenApiConvertSettings(IConfiguration config, string? metadataVersion) { - if (config == null) { throw new System.ArgumentNullException(nameof(config)); } + ArgumentNullException.ThrowIfNull(config); var settings = new OpenApiConvertSettings(); if (!string.IsNullOrEmpty(metadataVersion)) settings.SemVerVersion = metadataVersion; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 8789f276..d0cdadb5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 enable enable From 80715694d3f04b398cd4fcc188e80dacd4af7b36 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 5 Mar 2024 08:05:17 -0500 Subject: [PATCH 437/720] - bumps hidi patch version Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index a1270f0b..18267295 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.3.10 + 1.4.0 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 4e02af020112fbe47c712795b6a70a9a33b07338 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 22:02:56 +0000 Subject: [PATCH 438/720] Bump Microsoft.Extensions.Logging.Abstractions from 8.0.0 to 8.0.1 Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.0...v8.0.1) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 18267295..b0b7fd2e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -30,7 +30,7 @@ - + From f5128d29527174aad8b9cdaadbe4129432df8ad9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:54:50 +0000 Subject: [PATCH 439/720] Bump coverlet.msbuild from 6.0.1 to 6.0.2 Bumps [coverlet.msbuild](https://github.com/coverlet-coverage/coverlet) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.1...v6.0.2) --- updated-dependencies: - dependency-name: coverlet.msbuild dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index d0cdadb5..86612724 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -11,7 +11,7 @@ - + From fc697eb3f6a90c64b3a50d71a5ee3adaa9e43237 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Mar 2024 06:20:50 +0000 Subject: [PATCH 440/720] Bump coverlet.collector from 6.0.1 to 6.0.2 Bumps [coverlet.collector](https://github.com/coverlet-coverage/coverlet) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.1...v6.0.2) --- updated-dependencies: - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 86612724..f7cc3294 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + From 4fbbb840001c97ff6dc0f64b8df3a34c235e98bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 21:28:00 +0000 Subject: [PATCH 441/720] Bump Microsoft.OpenApi.OData from 1.6.0-preview.10 to 1.6.0 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.0-preview.10 to 1.6.0. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b0b7fd2e..f677ff78 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 3c60487b03f743a9bd43b490eacec789df2e3127 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 26 Mar 2024 10:55:29 +0300 Subject: [PATCH 442/720] Clean up tests --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index ad689ba1..519de350 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -60,7 +60,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l if (options.Output == null) { #pragma warning disable CA1308 // Normalize strings to uppercase - var inputExtension = string.Concat(".", options.OpenApiFormat.GetDisplayName().ToLowerInvariant()) + var inputExtension = string.Concat(".", options.OpenApiFormat?.GetDisplayName().ToLowerInvariant()) ?? GetInputPathExtension(options.OpenApi, options.Csdl); #pragma warning restore CA1308 // Normalize strings to uppercase options.Output = new($"./output{inputExtension}"); From 1ae9ae8c2f94e99430b2f3f7f78f1c890ea4cad2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 21:10:33 +0000 Subject: [PATCH 443/720] Bump Microsoft.OpenApi.OData from 1.6.0 to 1.6.1 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.0 to 1.6.1. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f677ff78..c9210797 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 075c0490515a453cf65114fb4cb54e3be7026a8b Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 2 Apr 2024 11:53:04 +0300 Subject: [PATCH 444/720] Update output file extension and register the Yaml reader --- .../Services/OpenApiServiceTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 4b61d3bd..4e75d23e 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -206,7 +206,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocument(options, _logger); - var output = await File.ReadAllTextAsync("output.yml"); + var output = await File.ReadAllTextAsync("output.yaml"); Assert.NotEmpty(output); } @@ -242,7 +242,7 @@ public async Task TransformToPowerShellCompliantOpenApi() // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocument(options, _logger); - var output = await File.ReadAllTextAsync("output.yml"); + var output = await File.ReadAllTextAsync("output.yaml"); Assert.NotEmpty(output); } From 9c56465d6c756d0256d3a4c0e129147c6b437345 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 2 Apr 2024 13:09:57 +0300 Subject: [PATCH 445/720] Clean up logic --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 519de350..be97e8dc 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -60,8 +60,10 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l if (options.Output == null) { #pragma warning disable CA1308 // Normalize strings to uppercase - var inputExtension = string.Concat(".", options.OpenApiFormat?.GetDisplayName().ToLowerInvariant()) - ?? GetInputPathExtension(options.OpenApi, options.Csdl); + var extension = options.OpenApiFormat?.GetDisplayName().ToLowerInvariant(); + var inputExtension = !string.IsNullOrEmpty(extension) ? string.Concat(".", extension) + : GetInputPathExtension(options.OpenApi, options.Csdl); + #pragma warning restore CA1308 // Normalize strings to uppercase options.Output = new($"./output{inputExtension}"); }; From 0cb1925d737bb7200fe5e19f4e1c3e6a9f38a7a6 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 2 Apr 2024 15:46:02 +0300 Subject: [PATCH 446/720] Clean up --- .../Services/OpenApiServiceTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 4e75d23e..ad1c587f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -206,7 +206,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocument(options, _logger); - var output = await File.ReadAllTextAsync("output.yaml"); + var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); } From c48c24f93d7a07662e9b32237cc28fe4d3ae8a18 Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Wed, 3 Apr 2024 14:30:53 +0300 Subject: [PATCH 447/720] Bump Hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c9210797..1bbf8e70 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.0 + 1.4.1 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 08c7338bc5c96a48d279bf8b9c5589e888a67492 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 21:27:22 +0000 Subject: [PATCH 448/720] Bump xunit.runner.visualstudio from 2.5.7 to 2.5.8 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.5.7 to 2.5.8. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.7...2.5.8) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index f7cc3294..16124565 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 188d6ecab1a62a59737f8da2276165d20728bf60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Apr 2024 22:17:16 +0000 Subject: [PATCH 449/720] Bump xunit from 2.7.0 to 2.7.1 Bumps [xunit](https://github.com/xunit/xunit) from 2.7.0 to 2.7.1. - [Commits](https://github.com/xunit/xunit/compare/2.7.0...2.7.1) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 16124565..e9996261 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 42ba53307ef2dd4925892456a6c08edf47be78f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Apr 2024 21:45:36 +0000 Subject: [PATCH 450/720] Bump Microsoft.OData.Edm from 7.20.0 to 7.21.0 Bumps Microsoft.OData.Edm from 7.20.0 to 7.21.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1bbf8e70..a7a95ff1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,7 +34,7 @@ - + From cff4dfd483c1479f6b437fb395d71c4c20e62011 Mon Sep 17 00:00:00 2001 From: njaci1 Date: Mon, 22 Apr 2024 11:45:17 +0300 Subject: [PATCH 451/720] Update readme.md correct the CSDL to OpenAPI conversion example to use '--csdl' instead of '--input' --- src/Microsoft.OpenApi.Hidi/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 8e89e2a8..55986d14 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -95,7 +95,7 @@ This command accepts the following parameters: hidi transform --openapi files\People.yml --format yaml --output files\People2.yml --version OpenApi3_0 --filterByCollection Graph-Collection-0017059134807617005.postman_collection.json 3. CSDL--->OpenAPI conversion and filtering - hidi transform --input Files/Todo.xml --output Files/Todo-subset.yml --format yaml --version OpenApi3_0 --filterByOperationIds Todos.Todo.UpdateTodo + hidi transform --csdl Files/Todo.xml --output Files/Todo-subset.yml --format yaml --version OpenApi3_0 --filterByOperationIds Todos.Todo.UpdateTodo 4. CSDL Filtering by EntitySets and Singletons hidi transform --cs dataverse.csdl --csdlFilter "appointments,opportunities" -o appointmentsAndOpportunities.yaml --ll trace From 3905733942b3830c6acd5a11851d1604001d8f18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Apr 2024 21:03:46 +0000 Subject: [PATCH 452/720] Bump Microsoft.OpenApi.OData from 1.6.1 to 1.6.2 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.1 to 1.6.2. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index a7a95ff1..1216c3f9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From aecf8d931c704ef40f0c05445860b442cd63df24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 21:12:50 +0000 Subject: [PATCH 453/720] Bump xunit.runner.visualstudio from 2.5.8 to 2.8.0 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.5.8 to 2.8.0. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.5.8...2.8.0) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index e9996261..d171a186 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 9d31c822540dc11e80feff26e476b1e80dbbe030 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 21:13:11 +0000 Subject: [PATCH 454/720] Bump Microsoft.OpenApi.OData from 1.6.2 to 1.6.3 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 1.6.2 to 1.6.3. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1216c3f9..8a95fd32 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 66db61e9f71d6500a890716afd7d32d579fe8309 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 06:45:16 +0000 Subject: [PATCH 455/720] Bump xunit from 2.7.1 to 2.8.0 Bumps [xunit](https://github.com/xunit/xunit) from 2.7.1 to 2.8.0. - [Commits](https://github.com/xunit/xunit/compare/2.7.1...2.8.0) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index d171a186..dcf427a2 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 3acd8b3ea9ca6f70210421241649f0ddb1de2165 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 30 Apr 2024 13:42:13 +0300 Subject: [PATCH 456/720] Use the extension method from JsonSchema.NET to get a dicriminator object from the schema and serialize it --- src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index aab3fb82..d8b19f91 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -348,9 +348,9 @@ private static JsonSchema CopySchema(JsonSchema schema, JsonSchema newSchema) { schemaBuilder.MinProperties(minProperties); } - if (schema.GetDiscriminator() == null && newSchema.GetOpenApiDiscriminator() is { } discriminator) + if (schema.GetDiscriminator() == null && newSchema.GetDiscriminator() is { } discriminator) { - schemaBuilder.Discriminator(discriminator); + schemaBuilder.Discriminator(discriminator.PropertyName, discriminator.Mapping, discriminator.Extensions); } if (schema.GetOpenApiExternalDocs() == null && newSchema.GetOpenApiExternalDocs() is { } externalDocs) { From 95966fc47f27912518703a5226412af9d057d130 Mon Sep 17 00:00:00 2001 From: Millicent Achieng Date: Thu, 2 May 2024 15:09:22 +0300 Subject: [PATCH 457/720] Bump Hidi version (#1650) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 8a95fd32..ad1a75b1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.1 + 1.4.2 OpenAPI.NET CLI tool for slicing OpenAPI documents true From ebd1a23b9541aa7360da016ac14b5fc0086ce6ec Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 2 May 2024 15:10:30 +0300 Subject: [PATCH 458/720] Replace Enumerable methods with indexing --- src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index d8b19f91..3e46b418 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -205,7 +205,7 @@ private void AddAdditionalPropertiesToSchema(ref JsonSchema schema) private static JsonSchema ResolveOneOfSchema(ref JsonSchema schema) { - if (schema.GetOneOf()?.FirstOrDefault() is {} newSchema) + if (schema.GetOneOf()?[0] is {} newSchema) { var schemaBuilder = BuildSchema(schema); schemaBuilder = schemaBuilder.Remove("oneOf"); @@ -219,7 +219,7 @@ private static JsonSchema ResolveOneOfSchema(ref JsonSchema schema) private static JsonSchema ResolveAnyOfSchema(ref JsonSchema schema) { - if (schema.GetAnyOf()?.FirstOrDefault() is {} newSchema) + if (schema.GetAnyOf()?[0] is {} newSchema) { var schemaBuilder = BuildSchema(schema); schemaBuilder = schemaBuilder.Remove("anyOf"); From 72537cebfa11ae24005e00bf462b7628dfa6f127 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 2 May 2024 17:28:16 +0300 Subject: [PATCH 459/720] Revert code to fix failing tests --- src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index 3e46b418..d8b19f91 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -205,7 +205,7 @@ private void AddAdditionalPropertiesToSchema(ref JsonSchema schema) private static JsonSchema ResolveOneOfSchema(ref JsonSchema schema) { - if (schema.GetOneOf()?[0] is {} newSchema) + if (schema.GetOneOf()?.FirstOrDefault() is {} newSchema) { var schemaBuilder = BuildSchema(schema); schemaBuilder = schemaBuilder.Remove("oneOf"); @@ -219,7 +219,7 @@ private static JsonSchema ResolveOneOfSchema(ref JsonSchema schema) private static JsonSchema ResolveAnyOfSchema(ref JsonSchema schema) { - if (schema.GetAnyOf()?[0] is {} newSchema) + if (schema.GetAnyOf()?.FirstOrDefault() is {} newSchema) { var schemaBuilder = BuildSchema(schema); schemaBuilder = schemaBuilder.Remove("anyOf"); From 1ae8b9d0910aa5b5ab60f28fba4dc75d3d934930 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 21:03:50 +0000 Subject: [PATCH 460/720] Bump Microsoft.OData.Edm from 7.21.0 to 7.21.1 Bumps Microsoft.OData.Edm from 7.21.0 to 7.21.1. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ad1a75b1..53415504 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,7 +34,7 @@ - + From dca82c58b55ecc2948303ddfe61f63fd3c9a1e90 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 21:48:45 +0000 Subject: [PATCH 461/720] --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 53415504..15a2fa26 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From bd76b4afcabeb0d4b4e92a9badb07ccba54ebef5 Mon Sep 17 00:00:00 2001 From: Millicent Achieng Date: Wed, 22 May 2024 11:11:46 +0300 Subject: [PATCH 462/720] Bump Hidi version (#1670) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 15a2fa26..c88c763e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.2 + 1.4.3 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 5dd2e904326942eb431cf0c62793aaf3ace9a01a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 May 2024 22:01:35 +0000 Subject: [PATCH 463/720] Bump Microsoft.NET.Test.Sdk from 17.9.0 to 17.10.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.9.0 to 17.10.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.9.0...v17.10.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index dcf427a2..537b9214 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,7 +12,7 @@ - + From 4134bb6b75f6c7524d5c12c1c5db80dad389a684 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 21:34:41 +0000 Subject: [PATCH 464/720] Bump Microsoft.OData.Edm from 7.21.1 to 7.21.2 Bumps Microsoft.OData.Edm from 7.21.1 to 7.21.2. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c88c763e..56e14903 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,7 +34,7 @@ - + From d796ab2223889cacd3df2d213baf0e7ca970761f Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 27 May 2024 18:14:04 +0300 Subject: [PATCH 465/720] Bump hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c88c763e..efb722ba 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.3 + 1.4.4 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 124544934bba7a196795951c1a07c648bdcfa6a5 Mon Sep 17 00:00:00 2001 From: Millicent Achieng Date: Mon, 27 May 2024 18:27:26 +0300 Subject: [PATCH 466/720] Bump Microsoft.OpenApi.OData from 1.6.4 to 1.6.5 (#1675) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 56e14903..0380fcc2 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 6cdbac3791ec3808d04b093106d461d5da8b4047 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 21:07:53 +0000 Subject: [PATCH 467/720] Bump xunit.runner.visualstudio from 2.8.0 to 2.8.1 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.8.0 to 2.8.1. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.8.0...2.8.1) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 537b9214..618abe4b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From c209b6c3dd5db7962212f401db9bd692598d93ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 May 2024 06:35:20 +0000 Subject: [PATCH 468/720] Bump xunit from 2.8.0 to 2.8.1 Bumps [xunit](https://github.com/xunit/xunit) from 2.8.0 to 2.8.1. - [Commits](https://github.com/xunit/xunit/compare/2.8.0...2.8.1) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 618abe4b..cb5405b3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From a2f27cabe6da567285ac694871769233df88a23d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 21:14:29 +0000 Subject: [PATCH 469/720] Bump Microsoft.OData.Edm from 7.21.2 to 7.21.3 Bumps Microsoft.OData.Edm from 7.21.2 to 7.21.3. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3ef58965..1d869fab 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,7 +34,7 @@ - + From 14e58e218a50926f062862d0bd0f6f2925eb30b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kurai=20Andr=C3=A1s?= Date: Fri, 7 Jun 2024 11:34:31 +0200 Subject: [PATCH 470/720] Return -1 exit code when the document is not valid --- .../Handlers/ValidateCommandHandler.cs | 4 +-- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 11 ++++++-- .../Services/OpenApiServiceTests.cs | 25 +++++++++++++++++++ .../UtilityFiles/InvalidSampleOpenApi.yml | 19 ++++++++++++++ 4 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/InvalidSampleOpenApi.yml diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index e0bfbf6b..4c14cbef 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -33,8 +33,8 @@ public async Task InvokeAsync(InvocationContext context) try { if (hidiOptions.OpenApi is null) throw new InvalidOperationException("OpenApi file is required"); - await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken).ConfigureAwait(false); - return 0; + var isValid = await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken).ConfigureAwait(false); + return isValid is not false ? 0 : -1; } #if RELEASE #pragma warning disable CA1031 // Do not catch general exception types diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index f33fc61d..d3d3fdd8 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -322,7 +322,8 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe /// /// Implementation of the validate command /// - public static async Task ValidateOpenApiDocument( + /// when valid, when invalid and when cancelled + public static async Task ValidateOpenApiDocument( string openApi, ILogger logger, CancellationToken cancellationToken = default) @@ -332,11 +333,13 @@ public static async Task ValidateOpenApiDocument( throw new ArgumentNullException(nameof(openApi)); } + ReadResult? result = null; + try { using var stream = await GetStream(openApi, logger, cancellationToken).ConfigureAwait(false); - var result = await ParseOpenApi(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); + result = await ParseOpenApi(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Calculating statistics")) { @@ -358,6 +361,10 @@ public static async Task ValidateOpenApiDocument( { throw new InvalidOperationException($"Could not validate the document, reason: {ex.Message}", ex); } + + if (result is null) return null; + + return result.OpenApiDiagnostic.Errors.Count == 0; } private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index f7c5aab4..7314da8a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -203,6 +203,31 @@ public async Task ValidateCommandProcessesOpenApi() Assert.True(true); } + [Fact] + public async Task ValidFileReturnsTrue() + { + var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger); + + Assert.True(isValid); + } + + [Fact] + public async Task InvalidFileReturnsFalse() + { + var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "InvalidSampleOpenApi.yml"), _logger); + + Assert.False(isValid); + } + + [Fact] + public async Task CancellingValidationReturnsNull() + { + using var cts = new CancellationTokenSource(); + await cts.CancelAsync(); + var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, cts.Token); + + Assert.Null(isValid); + } [Fact] public async Task TransformCommandConvertsOpenApi() diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/InvalidSampleOpenApi.yml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/InvalidSampleOpenApi.yml new file mode 100644 index 00000000..772214f5 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/InvalidSampleOpenApi.yml @@ -0,0 +1,19 @@ +openapi: 3.0.0 +info: + title: Sample OpenApi + version: 1.0.0 +paths: + /api/editresource: + get: + operationId: api.ListEditresource + patch: + operationId: api.UpdateEditresource + responses: + '200': + description: OK + /api/viewresource: + get: + operationId: api.ListViewresource + responses: + '200': + description: OK \ No newline at end of file From ce7ff459b4408ec42fcb7439dca13b1f873bcbea Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:11:33 +0300 Subject: [PATCH 471/720] Update conversion lib. version (#1689) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1d869fab..01e5c142 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.4 + 1.4.5 OpenAPI.NET CLI tool for slicing OpenAPI documents true @@ -35,7 +35,7 @@ - + From 34f49c55ca190fa52bd1f911f9d9d98227d1d6e1 Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Wed, 12 Jun 2024 15:13:18 +0300 Subject: [PATCH 472/720] Release Hidi and libs (#1690) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump Microsoft.Windows.Compatibility from 8.0.5 to 8.0.6 Bumps [Microsoft.Windows.Compatibility](https://github.com/dotnet/windowsdesktop) from 8.0.5 to 8.0.6. - [Release notes](https://github.com/dotnet/windowsdesktop/releases) - [Commits](https://github.com/dotnet/windowsdesktop/compare/v8.0.5...v8.0.6) --- updated-dependencies: - dependency-name: Microsoft.Windows.Compatibility dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Bump Microsoft.OData.Edm from 7.21.2 to 7.21.3 Bumps Microsoft.OData.Edm from 7.21.2 to 7.21.3. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Bump Verify.Xunit from 24.2.0 to 25.0.1 (#1685) Bumps [Verify.Xunit](https://github.com/VerifyTests/Verify) from 24.2.0 to 25.0.1. - [Release notes](https://github.com/VerifyTests/Verify/releases) - [Commits](https://github.com/VerifyTests/Verify/commits/25.0.1) --- updated-dependencies: - dependency-name: Verify.Xunit dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump docker/login-action from 3.1.0 to 3.2.0 (#1683) Bumps [docker/login-action](https://github.com/docker/login-action) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3.1.0...v3.2.0) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Return -1 exit code when the document is not valid * Change to relative path in `Launch Hidi` task * Bump docker/build-push-action from 5.3.0 to 5.4.0 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.3.0 to 5.4.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v5.3.0...v5.4.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Update conversion lib. version (#1689) * Bump lib versions --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Vincent Biret Co-authored-by: Kurai András Co-authored-by: Maggie Kimani Co-authored-by: Andrew Omondi --- .../Handlers/ValidateCommandHandler.cs | 4 +-- .../Microsoft.OpenApi.Hidi.csproj | 6 ++--- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 11 ++++++-- .../Services/OpenApiServiceTests.cs | 25 +++++++++++++++++++ .../UtilityFiles/InvalidSampleOpenApi.yml | 19 ++++++++++++++ 5 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/InvalidSampleOpenApi.yml diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index e0bfbf6b..4c14cbef 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -33,8 +33,8 @@ public async Task InvokeAsync(InvocationContext context) try { if (hidiOptions.OpenApi is null) throw new InvalidOperationException("OpenApi file is required"); - await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken).ConfigureAwait(false); - return 0; + var isValid = await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken).ConfigureAwait(false); + return isValid is not false ? 0 : -1; } #if RELEASE #pragma warning disable CA1031 // Do not catch general exception types diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3ef58965..01e5c142 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.4 + 1.4.5 OpenAPI.NET CLI tool for slicing OpenAPI documents true @@ -34,8 +34,8 @@ - - + + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index f33fc61d..d3d3fdd8 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -322,7 +322,8 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe /// /// Implementation of the validate command /// - public static async Task ValidateOpenApiDocument( + /// when valid, when invalid and when cancelled + public static async Task ValidateOpenApiDocument( string openApi, ILogger logger, CancellationToken cancellationToken = default) @@ -332,11 +333,13 @@ public static async Task ValidateOpenApiDocument( throw new ArgumentNullException(nameof(openApi)); } + ReadResult? result = null; + try { using var stream = await GetStream(openApi, logger, cancellationToken).ConfigureAwait(false); - var result = await ParseOpenApi(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); + result = await ParseOpenApi(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Calculating statistics")) { @@ -358,6 +361,10 @@ public static async Task ValidateOpenApiDocument( { throw new InvalidOperationException($"Could not validate the document, reason: {ex.Message}", ex); } + + if (result is null) return null; + + return result.OpenApiDiagnostic.Errors.Count == 0; } private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index f7c5aab4..7314da8a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -203,6 +203,31 @@ public async Task ValidateCommandProcessesOpenApi() Assert.True(true); } + [Fact] + public async Task ValidFileReturnsTrue() + { + var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger); + + Assert.True(isValid); + } + + [Fact] + public async Task InvalidFileReturnsFalse() + { + var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "InvalidSampleOpenApi.yml"), _logger); + + Assert.False(isValid); + } + + [Fact] + public async Task CancellingValidationReturnsNull() + { + using var cts = new CancellationTokenSource(); + await cts.CancelAsync(); + var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, cts.Token); + + Assert.Null(isValid); + } [Fact] public async Task TransformCommandConvertsOpenApi() diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/InvalidSampleOpenApi.yml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/InvalidSampleOpenApi.yml new file mode 100644 index 00000000..772214f5 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/InvalidSampleOpenApi.yml @@ -0,0 +1,19 @@ +openapi: 3.0.0 +info: + title: Sample OpenApi + version: 1.0.0 +paths: + /api/editresource: + get: + operationId: api.ListEditresource + patch: + operationId: api.UpdateEditresource + responses: + '200': + description: OK + /api/viewresource: + get: + operationId: api.ListViewresource + responses: + '200': + description: OK \ No newline at end of file From 7657aaf3ccfee54e29d87c8494fddd47ceaffb10 Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Wed, 26 Jun 2024 16:49:21 +0300 Subject: [PATCH 473/720] Update conversion library version (#1702) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 01e5c142..7162a07e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.5 + 1.4.6 OpenAPI.NET CLI tool for slicing OpenAPI documents true @@ -35,7 +35,7 @@ - + From 68645b2306fdcdefcd21fcd4b82271536d67c0e1 Mon Sep 17 00:00:00 2001 From: Irvine Sunday <40403681+irvinesunday@users.noreply.github.com> Date: Thu, 27 Jun 2024 10:22:00 +0300 Subject: [PATCH 474/720] Release Hidi and libs (#1690) (#1704) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump Microsoft.Windows.Compatibility from 8.0.5 to 8.0.6 Bumps [Microsoft.Windows.Compatibility](https://github.com/dotnet/windowsdesktop) from 8.0.5 to 8.0.6. - [Release notes](https://github.com/dotnet/windowsdesktop/releases) - [Commits](https://github.com/dotnet/windowsdesktop/compare/v8.0.5...v8.0.6) --- updated-dependencies: - dependency-name: Microsoft.Windows.Compatibility dependency-type: direct:production update-type: version-update:semver-patch ... * Bump Microsoft.OData.Edm from 7.21.2 to 7.21.3 Bumps Microsoft.OData.Edm from 7.21.2 to 7.21.3. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... * Bump Verify.Xunit from 24.2.0 to 25.0.1 (#1685) Bumps [Verify.Xunit](https://github.com/VerifyTests/Verify) from 24.2.0 to 25.0.1. - [Release notes](https://github.com/VerifyTests/Verify/releases) - [Commits](https://github.com/VerifyTests/Verify/commits/25.0.1) --- updated-dependencies: - dependency-name: Verify.Xunit dependency-type: direct:production update-type: version-update:semver-major ... * Bump docker/login-action from 3.1.0 to 3.2.0 (#1683) Bumps [docker/login-action](https://github.com/docker/login-action) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3.1.0...v3.2.0) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-minor ... * Return -1 exit code when the document is not valid * Change to relative path in `Launch Hidi` task * Bump docker/build-push-action from 5.3.0 to 5.4.0 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.3.0 to 5.4.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v5.3.0...v5.4.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... * Update conversion lib. version (#1689) * Bump lib versions --------- Signed-off-by: dependabot[bot] Co-authored-by: Vincent Biret Co-authored-by: Eastman Co-authored-by: Darrel Co-authored-by: Maggie Kimani Co-authored-by: Vincent Biret Co-authored-by: Millicent Achieng Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Kurai András From f985948b9ce945e4dfd38e99d492057853c13ed0 Mon Sep 17 00:00:00 2001 From: HavenDV Date: Fri, 28 Jun 2024 00:21:33 +0400 Subject: [PATCH 475/720] feat: Added nullable enable to OpenApiComponents. --- .../Formatters/PowerShellFormatterTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 6bd55a4a..33996f04 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -59,9 +59,9 @@ public void RemoveAnyOfAndOneOfFromSchema() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var testSchema = openApiDocument.Components.Schemas["TestSchema"]; - var averageAudioDegradationProperty = testSchema.GetProperties()?.GetValueOrDefault("averageAudioDegradation"); - var defaultPriceProperty = testSchema.GetProperties()?.GetValueOrDefault("defaultPrice"); + var testSchema = openApiDocument.Components.Schemas?["TestSchema"]; + var averageAudioDegradationProperty = testSchema?.GetProperties()?.GetValueOrDefault("averageAudioDegradation"); + var defaultPriceProperty = testSchema?.GetProperties()?.GetValueOrDefault("defaultPrice"); // Assert Assert.Null(averageAudioDegradationProperty?.GetAnyOf()); @@ -71,7 +71,7 @@ public void RemoveAnyOfAndOneOfFromSchema() Assert.Null(defaultPriceProperty?.GetOneOf()); Assert.Equal(SchemaValueType.Number, defaultPriceProperty?.GetJsonType()); Assert.Equal("double", defaultPriceProperty?.GetFormat()?.Key); - Assert.NotNull(testSchema.GetAdditionalProperties()); + Assert.NotNull(testSchema?.GetAdditionalProperties()); } [Fact] From 34279d1475d935ab6c22ee3c7090e5e9f79d6526 Mon Sep 17 00:00:00 2001 From: HavenDV Date: Fri, 28 Jun 2024 00:38:28 +0400 Subject: [PATCH 476/720] feat: Added nullable enable to OpenApiDocument. --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 14 +++++++------- .../Formatters/PowerShellFormatterTests.cs | 4 ++-- .../Services/OpenApiFilterServiceTests.cs | 6 +++++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c4d34d4c..ce4055df 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -185,7 +185,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, stopwatch.Start(); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); stopwatch.Stop(); - logger.LogTrace("{Timestamp}ms: Creating filtered OpenApi document with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + logger.LogTrace("{Timestamp}ms: Creating filtered OpenApi document with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths?.Count); } return document; @@ -248,7 +248,7 @@ private static async Task GetOpenApi(HidiOptions options, strin document = await ConvertCsdlToOpenApi(filteredStream ?? stream, format, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); - logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths?.Count); } } else if (!string.IsNullOrEmpty(options.OpenApi)) @@ -659,7 +659,7 @@ internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocum { var rootNode = OpenApiUrlTreeNode.Create(document, "main"); - writer.WriteLine("# " + document.Info.Title); + writer.WriteLine("# " + document.Info?.Title); writer.WriteLine(); writer.WriteLine("API Description: " + openapiUrl); @@ -695,7 +695,7 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d """); - writer.WriteLine("

" + document.Info.Title + "

"); + writer.WriteLine("

" + document.Info?.Title + "

"); writer.WriteLine(); writer.WriteLine($"

API Description: {sourceUrl}

"); @@ -766,8 +766,8 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C // Create OpenAIPluginManifest from ApiDependency and OpenAPI document var manifest = new OpenAIPluginManifest { - NameForHuman = document.Info.Title, - DescriptionForHuman = document.Info.Description, + NameForHuman = document.Info?.Title, + DescriptionForHuman = document.Info?.Description, Api = new() { Type = "openapi", diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 33996f04..4a662be6 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -59,7 +59,7 @@ public void RemoveAnyOfAndOneOfFromSchema() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var testSchema = openApiDocument.Components.Schemas?["TestSchema"]; + var testSchema = openApiDocument.Components?.Schemas?["TestSchema"]; var averageAudioDegradationProperty = testSchema?.GetProperties()?.GetValueOrDefault("averageAudioDegradation"); var defaultPriceProperty = testSchema?.GetProperties()?.GetValueOrDefault("defaultPrice"); @@ -85,7 +85,7 @@ public void ResolveFunctionParameters() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var idsParameter = openApiDocument.Paths["/foo"].Operations[OperationType.Get].Parameters.Where(static p => p.Name == "ids").FirstOrDefault(); + var idsParameter = openApiDocument.Paths?["/foo"].Operations[OperationType.Get].Parameters.Where(static p => p.Name == "ids").FirstOrDefault(); // Assert Assert.Null(idsParameter?.Content); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 5fb1b15f..02e6cedb 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -43,6 +43,7 @@ public void ReturnFilteredOpenApiDocumentBasedOnOperationIdsAndTags(string? oper // Assert Assert.NotNull(subsetOpenApiDocument); + Assert.NotNull(subsetOpenApiDocument.Paths); Assert.NotEmpty(subsetOpenApiDocument.Paths); Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); } @@ -62,6 +63,7 @@ public void ReturnFilteredOpenApiDocumentBasedOnPostmanCollection() // Assert Assert.NotNull(subsetOpenApiDocument); + Assert.NotNull(subsetOpenApiDocument.Paths); Assert.NotEmpty(subsetOpenApiDocument.Paths); Assert.Equal(3, subsetOpenApiDocument.Paths.Count); } @@ -150,10 +152,11 @@ public void ContinueProcessingWhenUrlsInCollectionAreMissingFromSourceDocument() var pathCount = requestUrls.Count; var predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: _openApiDocumentMock); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(_openApiDocumentMock, predicate); - var subsetPathCount = subsetOpenApiDocument.Paths.Count; + var subsetPathCount = subsetOpenApiDocument.Paths?.Count; // Assert Assert.NotNull(subsetOpenApiDocument); + Assert.NotNull(subsetOpenApiDocument.Paths); Assert.NotEmpty(subsetOpenApiDocument.Paths); Assert.Equal(2, subsetPathCount); Assert.NotEqual(pathCount, subsetPathCount); @@ -180,6 +183,7 @@ public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string? oper var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(_openApiDocumentMock, predicate); // Assert + Assert.NotNull(subsetOpenApiDocument.Paths); foreach (var pathItem in subsetOpenApiDocument.Paths) { Assert.True(pathItem.Value.Parameters.Any()); From c7ce9020a298b2ece17c720650052f13c7d7cdd7 Mon Sep 17 00:00:00 2001 From: HavenDV Date: Fri, 28 Jun 2024 00:45:15 +0400 Subject: [PATCH 477/720] feat: Added nullable enable to OpenApiOperation. --- .../Formatters/PowerShellFormatter.cs | 9 +++++---- .../Formatters/PowerShellFormatterTests.cs | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index d8b19f91..5daa0c9b 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -54,7 +54,8 @@ public override void Visit(ref JsonSchema schema) public override void Visit(OpenApiPathItem pathItem) { - if (pathItem.Operations.TryGetValue(OperationType.Put, out var value)) + if (pathItem.Operations.TryGetValue(OperationType.Put, out var value) && + value.OperationId != null) { var operationId = value.OperationId; pathItem.Operations[OperationType.Put].OperationId = ResolvePutOperationId(operationId); @@ -69,14 +70,14 @@ public override void Visit(OpenApiOperation operation) throw new ArgumentException($"OperationId is required {PathString}", nameof(operation)); var operationId = operation.OperationId; - var operationTypeExtension = operation.Extensions.GetExtension("x-ms-docs-operation-type"); + var operationTypeExtension = operation.Extensions?.GetExtension("x-ms-docs-operation-type"); if (operationTypeExtension.IsEquals("function")) - operation.Parameters = ResolveFunctionParameters(operation.Parameters); + operation.Parameters = ResolveFunctionParameters(operation.Parameters ?? new List()); // Order matters. Resolve operationId. operationId = RemoveHashSuffix(operationId); if (operationTypeExtension.IsEquals("action") || operationTypeExtension.IsEquals("function")) - operationId = RemoveKeyTypeSegment(operationId, operation.Parameters); + operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? new List()); operationId = SingularizeAndDeduplicateOperationId(operationId.SplitByChar('.')); operationId = ResolveODataCastOperationId(operationId); operationId = ResolveByRefOperationId(operationId); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 4a662be6..81c1ca7a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -85,7 +85,7 @@ public void ResolveFunctionParameters() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var idsParameter = openApiDocument.Paths?["/foo"].Operations[OperationType.Get].Parameters.Where(static p => p.Name == "ids").FirstOrDefault(); + var idsParameter = openApiDocument.Paths?["/foo"].Operations[OperationType.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); // Assert Assert.Null(idsParameter?.Content); From 7dedcf7e5956fa92080911894146b930b08a10e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 09:13:01 +0300 Subject: [PATCH 478/720] Bump xunit.runner.visualstudio from 2.8.1 to 2.8.2 (#1723) Bumps xunit.runner.visualstudio from 2.8.1 to 2.8.2. --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index cb5405b3..18e41e94 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 73b6a90f29faff873945c8736b700409dbd9751f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 06:20:43 +0000 Subject: [PATCH 479/720] Bump xunit from 2.8.1 to 2.9.0 (#1722) Bumps xunit from 2.8.1 to 2.9.0. --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 18e41e94..cef3a917 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 44c5e26f7236bb84c733b53296d4852ee61eb6a4 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 16 Jul 2024 14:47:23 +0300 Subject: [PATCH 480/720] Update packages --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- .../Microsoft.OpenApi.Hidi.Tests.csproj | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 15aecc25..de24a525 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,8 +34,8 @@ - - + + diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 53e97de5..729b39e6 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,10 +12,10 @@ - + - - + + From 166ec03d7165b257510c919def523f58be57692a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Canales=20Mart=C3=ADn?= Date: Thu, 18 Jul 2024 17:32:50 +0200 Subject: [PATCH 481/720] Create test for bug --- .../Services/OpenApiServiceTests.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 7314da8a..e092a1c4 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -65,6 +65,46 @@ public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumen Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); } + [Fact] + public void CreateFilteredDocumentOnMinimalOpenApi() + { + // Arrange + + // We create a minimal OpenApiDocument with a single path and operation. + var openApiDoc = new OpenApiDocument + { + Info = new() + { + Title = "Test", + Version = "1.0.0" + }, + Paths = new() + { + ["/test"] = new OpenApiPathItem() + { + Operations = new Dictionary + { + [OperationType.Get] = new OpenApiOperation() + } + } + } + }; + + // Act + var requestUrls = new Dictionary>() + { + { "/test", ["GET"] } + }; + var filterPredicate = OpenApiFilterService.CreatePredicate(null, null, requestUrls, openApiDoc); + var filteredDocument = OpenApiFilterService.CreateFilteredDocument(openApiDoc, filterPredicate); + + // Assert + Assert.NotNull(filteredDocument); + Assert.NotNull(filteredDocument.Paths); + Assert.Single(filteredDocument.Paths); + } + + [Theory] [InlineData("UtilityFiles/appsettingstest.json")] [InlineData(null)] From 2ce77a54df40fb110b97501dd764ceb3f1f37f73 Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Wed, 24 Jul 2024 16:38:43 +0300 Subject: [PATCH 482/720] Bump up conversion lib version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7162a07e..3cc86e83 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -35,7 +35,7 @@ - + From 5b7c0b261c6fdb827e34aeee4ae33befba232b4c Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Wed, 24 Jul 2024 16:43:29 +0300 Subject: [PATCH 483/720] Bumps up hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3cc86e83..05293a68 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.6 + 1.4.7 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 1f3588b8c706f87ea2975fa7a8af9b64887268d0 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 12 Aug 2024 16:53:05 +0300 Subject: [PATCH 484/720] Replace JsonSchema with OpenApiSchema --- .../Formatters/PowerShellFormatter.cs | 276 +++++------------- 1 file changed, 67 insertions(+), 209 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index d8b19f91..fbfb1b71 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -4,12 +4,10 @@ using System.Text; using System.Text.RegularExpressions; using Humanizer; -using Json.Schema; -using Json.Schema.OpenApi; +using Humanizer.Inflections; using Microsoft.OpenApi.Hidi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; -using Microsoft.OpenApi.Extensions; namespace Microsoft.OpenApi.Hidi.Formatters { @@ -17,7 +15,7 @@ internal class PowerShellFormatter : OpenApiVisitorBase { private const string DefaultPutPrefix = ".Update"; private const string PowerShellPutPrefix = ".Set"; - private readonly Stack _schemaLoop = new(); + private readonly Stack _schemaLoop = new(); private static readonly Regex s_oDataCastRegex = new("(.*(?<=[a-z]))\\.(As(?=[A-Z]).*)", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); private static readonly Regex s_hashSuffixRegex = new(@"^[^-]+", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); private static readonly Regex s_oDataRefRegex = new("(?<=[a-z])Ref(?=[A-Z])", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); @@ -26,11 +24,11 @@ static PowerShellFormatter() { // Add singularization exclusions. // Enhancement: Read exclusions from a user provided file. - Humanizer.Inflections.Vocabularies.Default.AddSingular("(drive)s$", "$1"); // drives does not properly singularize to drive. - Humanizer.Inflections.Vocabularies.Default.AddSingular("(data)$", "$1"); // exclude the following from singularization. - Humanizer.Inflections.Vocabularies.Default.AddSingular("(delta)$", "$1"); - Humanizer.Inflections.Vocabularies.Default.AddSingular("(quota)$", "$1"); - Humanizer.Inflections.Vocabularies.Default.AddSingular("(statistics)$", "$1"); + Vocabularies.Default.AddSingular("(drive)s$", "$1"); // drives does not properly singularize to drive. + Vocabularies.Default.AddSingular("(data)$", "$1"); // exclude the following from singularization. + Vocabularies.Default.AddSingular("(delta)$", "$1"); + Vocabularies.Default.AddSingular("(quota)$", "$1"); + Vocabularies.Default.AddSingular("(statistics)$", "$1"); } //FHL task for PS @@ -43,13 +41,13 @@ static PowerShellFormatter() // 5. Fix anyOf and oneOf schema. // 6. Add AdditionalProperties to object schemas. - public override void Visit(ref JsonSchema schema) - { - AddAdditionalPropertiesToSchema(ref schema); - schema = ResolveAnyOfSchema(ref schema); - schema = ResolveOneOfSchema(ref schema); + public override void Visit(OpenApiSchema schema) + { + AddAdditionalPropertiesToSchema(schema); + ResolveAnyOfSchema(schema); + ResolveOneOfSchema(schema); - base.Visit(ref schema); + base.Visit(schema); } public override void Visit(OpenApiPathItem pathItem) @@ -165,237 +163,97 @@ private static IList ResolveFunctionParameters(IList Date: Mon, 12 Aug 2024 21:49:49 +0000 Subject: [PATCH 485/720] Bump Microsoft.OData.Edm from 7.21.3 to 8.0.0 Bumps Microsoft.OData.Edm from 7.21.3 to 8.0.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 05293a68..ba264d9c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,7 +34,7 @@ - + From 2a55c7e810c356e4649c502393bedd69c1b3ff99 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 13 Aug 2024 18:38:36 +0300 Subject: [PATCH 486/720] Code refactoring; replace JsonSchema with OpenApiSchema --- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index bc68746d..b6af0777 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using Json.Schema; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; @@ -20,7 +19,7 @@ public override void Visit(OpenApiParameter parameter) public int SchemaCount { get; set; } - public override void Visit(ref JsonSchema schema) + public override void Visit(OpenApiSchema schema) { SchemaCount++; } From f5d55d54a048e526fd7c997fd8e329eb5a13be42 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 13 Aug 2024 18:39:32 +0300 Subject: [PATCH 487/720] Clean up tests --- .../Formatters/PowerShellFormatterTests.cs | 84 ++++--- .../UtilityFiles/OpenApiDocumentMock.cs | 208 +++++++++++++----- 2 files changed, 207 insertions(+), 85 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 6bd55a4a..94f99a1d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -1,11 +1,9 @@ -using Json.Schema; -using Microsoft.OpenApi.Any; +using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Hidi.Formatters; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; using Xunit; -using Microsoft.OpenApi.Extensions; namespace Microsoft.OpenApi.Hidi.Tests.Formatters { @@ -60,18 +58,18 @@ public void RemoveAnyOfAndOneOfFromSchema() walker.Walk(openApiDocument); var testSchema = openApiDocument.Components.Schemas["TestSchema"]; - var averageAudioDegradationProperty = testSchema.GetProperties()?.GetValueOrDefault("averageAudioDegradation"); - var defaultPriceProperty = testSchema.GetProperties()?.GetValueOrDefault("defaultPrice"); + var averageAudioDegradationProperty = testSchema.Properties["averageAudioDegradation"]; + var defaultPriceProperty = testSchema.Properties["defaultPrice"]; // Assert - Assert.Null(averageAudioDegradationProperty?.GetAnyOf()); - Assert.Equal(SchemaValueType.Number, averageAudioDegradationProperty?.GetJsonType()); - Assert.Equal("float", averageAudioDegradationProperty?.GetFormat()?.Key); - Assert.True(averageAudioDegradationProperty?.GetNullable()); - Assert.Null(defaultPriceProperty?.GetOneOf()); - Assert.Equal(SchemaValueType.Number, defaultPriceProperty?.GetJsonType()); - Assert.Equal("double", defaultPriceProperty?.GetFormat()?.Key); - Assert.NotNull(testSchema.GetAdditionalProperties()); + Assert.Null(averageAudioDegradationProperty.AnyOf); + Assert.Equal("number", averageAudioDegradationProperty.Type); + Assert.Equal("float", averageAudioDegradationProperty.Format); + Assert.True(averageAudioDegradationProperty.Nullable); + Assert.Null(defaultPriceProperty.OneOf); + Assert.Equal("number", defaultPriceProperty.Type); + Assert.Equal("double", defaultPriceProperty.Format); + Assert.NotNull(testSchema.AdditionalProperties); } [Fact] @@ -90,7 +88,7 @@ public void ResolveFunctionParameters() // Assert Assert.Null(idsParameter?.Content); Assert.NotNull(idsParameter?.Schema); - Assert.Equal(SchemaValueType.Array, idsParameter?.Schema.GetJsonType()); + Assert.Equal("array", idsParameter?.Schema.Type); } private static OpenApiDocument GetSampleOpenApiDocument() @@ -120,10 +118,14 @@ private static OpenApiDocument GetSampleOpenApiDocument() "application/json", new OpenApiMediaType { - Schema = new JsonSchemaBuilder() - .Type(SchemaValueType.Array) - .Items(new JsonSchemaBuilder() - .Type(SchemaValueType.String)) + Schema = new() + { + Type = "array", + Items = new() + { + Type = "string" + } + } } } } @@ -143,22 +145,38 @@ private static OpenApiDocument GetSampleOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new Dictionary { - { "TestSchema", new JsonSchemaBuilder() - .Type(SchemaValueType.Object) - .Properties(("averageAudioDegradation", new JsonSchemaBuilder() - .AnyOf( - new JsonSchemaBuilder().Type(SchemaValueType.Number), - new JsonSchemaBuilder().Type(SchemaValueType.String)) - .Format("float") - .Nullable(true)), - - ("defaultPrice", new JsonSchemaBuilder() - .OneOf( - new JsonSchemaBuilder().Type(SchemaValueType.Number).Format("double"), - new JsonSchemaBuilder().Type(SchemaValueType.String)))) - } + { "TestSchema", new OpenApiSchema + { + Type = "object", + Properties = new Dictionary + { + { + "averageAudioDegradation", new OpenApiSchema + { + AnyOf = new List + { + new() { Type = "number" }, + new() { Type = "string" } + }, + Format = "float", + Nullable = true + } + }, + { + "defaultPrice", new OpenApiSchema + { + OneOf = new List + { + new() { Type = "number", Format = "double" }, + new() { Type = "string" } + } + } + } + } + } + } } } }; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 65ef0862..98ed181f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -1,7 +1,6 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using Json.Schema; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; @@ -84,7 +83,10 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new() + { + Type = "string" + } } } }, @@ -100,7 +102,10 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array) + Schema = new() + { + Type = "array" + } } } } @@ -118,7 +123,10 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new() + { + Type = "string" + } } } } @@ -149,7 +157,10 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new() + { + Type = "string" + } } } }, @@ -165,7 +176,10 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array) + Schema = new() + { + Type = "array" + } } } } @@ -182,7 +196,10 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new() + { + Type = "string" + } } } }, @@ -216,17 +233,29 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder() - .Title("Collection of user") - .Type(SchemaValueType.Object) - .Properties(("value", - new JsonSchemaBuilder() - .Type(SchemaValueType.Array) - .Items(new JsonSchemaBuilder() - .Ref("microsoft.graph.user") - .Build()) - .Build())) - .Build() + Schema = new() + { + Title = "Collection of user", + Type = "object", + Properties = new Dictionary + { + { + "value", + new OpenApiSchema + { + Type = "array", + Items = new() + { + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.user" + } + } + } + } + } + } } } } @@ -267,7 +296,14 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Ref("microsoft.graph.user").Build() + Schema = new() + { + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.user" + } + } } } } @@ -330,7 +366,10 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Query, Required = true, Description = "Select properties to be returned", - Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array).Build() + Schema = new() + { + Type = "array" + } // missing explode parameter } }, @@ -346,7 +385,14 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Ref("microsoft.graph.message").Build() + Schema = new() + { + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.message" + } + } } } } @@ -384,7 +430,10 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Required = true, Description = "key: id of administrativeUnit", - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build() + Schema = new() + { + Type = "string" + } } } }, @@ -400,12 +449,17 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder() - .AnyOf( - new JsonSchemaBuilder() - .Type(SchemaValueType.String) - .Build()) - .Build() + Schema = new() + { + AnyOf = new List + { + new() + { + Type = "string" + } + }, + Nullable = true + } } } } @@ -477,14 +531,29 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder() - .Title("Collection of hostSecurityProfile") - .Type(SchemaValueType.Object) - .Properties(("value1", - new JsonSchemaBuilder() - .Type(SchemaValueType.Array) - .Items(new JsonSchemaBuilder().Ref("microsoft.graph.networkInterface")))) - .Build() + Schema = new() + { + Title = "Collection of hostSecurityProfile", + Type = "object", + Properties = new Dictionary + { + { + "value", + new OpenApiSchema + { + Type = "array", + Items = new() + { + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.networkInterface" + } + } + } + } + } + } } } } @@ -521,7 +590,10 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of call", Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), + Schema = new() + { + Type = "string" + }, Extensions = new Dictionary { { @@ -573,8 +645,16 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of group", Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), - Extensions = new Dictionary { { "x-ms-docs-key-type", new OpenApiAny("group") } } + Schema = new() + { + Type = "string" + }, + Extensions = new Dictionary + { + { + "x-ms-docs-key-type", new OpenApiAny("group") + } + } }, new() { @@ -582,8 +662,16 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of event", Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), - Extensions = new Dictionary { { "x-ms-docs-key-type", new OpenApiAny("event") } } + Schema = new() + { + Type = "string" + }, + Extensions = new Dictionary + { + { + "x-ms-docs-key-type", new OpenApiAny("event") + } + } } }, Responses = new() @@ -598,7 +686,15 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array).Ref("microsoft.graph.event").Build() + Schema = new() + { + Type = "array", + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.event" + } + } } } } @@ -638,17 +734,25 @@ public static OpenApiDocument CreateOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new Dictionary { { - "microsoft.graph.networkInterface", new JsonSchemaBuilder() - .Title("networkInterface") - .Type(SchemaValueType.Object) - .Properties( - ("description", new JsonSchemaBuilder() - .Type(SchemaValueType.String) - .Description("Description of the NIC (e.g. Ethernet adapter, Wireless LAN adapter Local Area Connection <#>, etc.)."))) - .Build() + "microsoft.graph.networkInterface", new OpenApiSchema + { + Title = "networkInterface", + Type = "object", + Properties = new Dictionary + { + { + "description", new OpenApiSchema + { + Type = "string", + Description = "Description of the NIC (e.g. Ethernet adapter, Wireless LAN adapter Local Area Connection <#>, etc.).", + Nullable = true + } + } + } + } } } } From 16dc7938fd644ebd7dafc36ec3b934b0a32190fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 08:50:55 +0300 Subject: [PATCH 488/720] Bump Newtonsoft.Json from 13.0.1 to 13.0.3 (#1782) Bumps Newtonsoft.Json from 13.0.1 to 13.0.3. --- updated-dependencies: - dependency-name: Newtonsoft.Json dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index cef3a917..c1147319 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,6 +14,7 @@ + From bc44275b5d20a666264a8f991106b0f4d1644e14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 21:56:55 +0000 Subject: [PATCH 489/720] Bump Microsoft.OData.Edm from 8.0.0 to 8.0.1 Bumps Microsoft.OData.Edm from 8.0.0 to 8.0.1. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ba264d9c..e635fa5a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -34,7 +34,7 @@ - + From aa17dd0b74ebc49f6e5e5a4a3538eb871c51a60a Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 13 Aug 2024 18:38:36 +0300 Subject: [PATCH 490/720] Code refactoring; replace JsonSchema with OpenApiSchema --- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index bc68746d..b6af0777 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using Json.Schema; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; @@ -20,7 +19,7 @@ public override void Visit(OpenApiParameter parameter) public int SchemaCount { get; set; } - public override void Visit(ref JsonSchema schema) + public override void Visit(OpenApiSchema schema) { SchemaCount++; } From 9c9c4ca1a5a67fe140b5da83a4d65c94c2df335c Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 13 Aug 2024 18:39:32 +0300 Subject: [PATCH 491/720] Clean up tests --- .../Formatters/PowerShellFormatterTests.cs | 84 ++++--- .../UtilityFiles/OpenApiDocumentMock.cs | 208 +++++++++++++----- 2 files changed, 207 insertions(+), 85 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 6bd55a4a..94f99a1d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -1,11 +1,9 @@ -using Json.Schema; -using Microsoft.OpenApi.Any; +using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Hidi.Formatters; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; using Xunit; -using Microsoft.OpenApi.Extensions; namespace Microsoft.OpenApi.Hidi.Tests.Formatters { @@ -60,18 +58,18 @@ public void RemoveAnyOfAndOneOfFromSchema() walker.Walk(openApiDocument); var testSchema = openApiDocument.Components.Schemas["TestSchema"]; - var averageAudioDegradationProperty = testSchema.GetProperties()?.GetValueOrDefault("averageAudioDegradation"); - var defaultPriceProperty = testSchema.GetProperties()?.GetValueOrDefault("defaultPrice"); + var averageAudioDegradationProperty = testSchema.Properties["averageAudioDegradation"]; + var defaultPriceProperty = testSchema.Properties["defaultPrice"]; // Assert - Assert.Null(averageAudioDegradationProperty?.GetAnyOf()); - Assert.Equal(SchemaValueType.Number, averageAudioDegradationProperty?.GetJsonType()); - Assert.Equal("float", averageAudioDegradationProperty?.GetFormat()?.Key); - Assert.True(averageAudioDegradationProperty?.GetNullable()); - Assert.Null(defaultPriceProperty?.GetOneOf()); - Assert.Equal(SchemaValueType.Number, defaultPriceProperty?.GetJsonType()); - Assert.Equal("double", defaultPriceProperty?.GetFormat()?.Key); - Assert.NotNull(testSchema.GetAdditionalProperties()); + Assert.Null(averageAudioDegradationProperty.AnyOf); + Assert.Equal("number", averageAudioDegradationProperty.Type); + Assert.Equal("float", averageAudioDegradationProperty.Format); + Assert.True(averageAudioDegradationProperty.Nullable); + Assert.Null(defaultPriceProperty.OneOf); + Assert.Equal("number", defaultPriceProperty.Type); + Assert.Equal("double", defaultPriceProperty.Format); + Assert.NotNull(testSchema.AdditionalProperties); } [Fact] @@ -90,7 +88,7 @@ public void ResolveFunctionParameters() // Assert Assert.Null(idsParameter?.Content); Assert.NotNull(idsParameter?.Schema); - Assert.Equal(SchemaValueType.Array, idsParameter?.Schema.GetJsonType()); + Assert.Equal("array", idsParameter?.Schema.Type); } private static OpenApiDocument GetSampleOpenApiDocument() @@ -120,10 +118,14 @@ private static OpenApiDocument GetSampleOpenApiDocument() "application/json", new OpenApiMediaType { - Schema = new JsonSchemaBuilder() - .Type(SchemaValueType.Array) - .Items(new JsonSchemaBuilder() - .Type(SchemaValueType.String)) + Schema = new() + { + Type = "array", + Items = new() + { + Type = "string" + } + } } } } @@ -143,22 +145,38 @@ private static OpenApiDocument GetSampleOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new Dictionary { - { "TestSchema", new JsonSchemaBuilder() - .Type(SchemaValueType.Object) - .Properties(("averageAudioDegradation", new JsonSchemaBuilder() - .AnyOf( - new JsonSchemaBuilder().Type(SchemaValueType.Number), - new JsonSchemaBuilder().Type(SchemaValueType.String)) - .Format("float") - .Nullable(true)), - - ("defaultPrice", new JsonSchemaBuilder() - .OneOf( - new JsonSchemaBuilder().Type(SchemaValueType.Number).Format("double"), - new JsonSchemaBuilder().Type(SchemaValueType.String)))) - } + { "TestSchema", new OpenApiSchema + { + Type = "object", + Properties = new Dictionary + { + { + "averageAudioDegradation", new OpenApiSchema + { + AnyOf = new List + { + new() { Type = "number" }, + new() { Type = "string" } + }, + Format = "float", + Nullable = true + } + }, + { + "defaultPrice", new OpenApiSchema + { + OneOf = new List + { + new() { Type = "number", Format = "double" }, + new() { Type = "string" } + } + } + } + } + } + } } } }; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 65ef0862..98ed181f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -1,7 +1,6 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using Json.Schema; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; @@ -84,7 +83,10 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new() + { + Type = "string" + } } } }, @@ -100,7 +102,10 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array) + Schema = new() + { + Type = "array" + } } } } @@ -118,7 +123,10 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new() + { + Type = "string" + } } } } @@ -149,7 +157,10 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new() + { + Type = "string" + } } } }, @@ -165,7 +176,10 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array) + Schema = new() + { + Type = "array" + } } } } @@ -182,7 +196,10 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String) + Schema = new() + { + Type = "string" + } } } }, @@ -216,17 +233,29 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder() - .Title("Collection of user") - .Type(SchemaValueType.Object) - .Properties(("value", - new JsonSchemaBuilder() - .Type(SchemaValueType.Array) - .Items(new JsonSchemaBuilder() - .Ref("microsoft.graph.user") - .Build()) - .Build())) - .Build() + Schema = new() + { + Title = "Collection of user", + Type = "object", + Properties = new Dictionary + { + { + "value", + new OpenApiSchema + { + Type = "array", + Items = new() + { + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.user" + } + } + } + } + } + } } } } @@ -267,7 +296,14 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Ref("microsoft.graph.user").Build() + Schema = new() + { + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.user" + } + } } } } @@ -330,7 +366,10 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Query, Required = true, Description = "Select properties to be returned", - Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array).Build() + Schema = new() + { + Type = "array" + } // missing explode parameter } }, @@ -346,7 +385,14 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Ref("microsoft.graph.message").Build() + Schema = new() + { + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.message" + } + } } } } @@ -384,7 +430,10 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Required = true, Description = "key: id of administrativeUnit", - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build() + Schema = new() + { + Type = "string" + } } } }, @@ -400,12 +449,17 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder() - .AnyOf( - new JsonSchemaBuilder() - .Type(SchemaValueType.String) - .Build()) - .Build() + Schema = new() + { + AnyOf = new List + { + new() + { + Type = "string" + } + }, + Nullable = true + } } } } @@ -477,14 +531,29 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder() - .Title("Collection of hostSecurityProfile") - .Type(SchemaValueType.Object) - .Properties(("value1", - new JsonSchemaBuilder() - .Type(SchemaValueType.Array) - .Items(new JsonSchemaBuilder().Ref("microsoft.graph.networkInterface")))) - .Build() + Schema = new() + { + Title = "Collection of hostSecurityProfile", + Type = "object", + Properties = new Dictionary + { + { + "value", + new OpenApiSchema + { + Type = "array", + Items = new() + { + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.networkInterface" + } + } + } + } + } + } } } } @@ -521,7 +590,10 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of call", Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), + Schema = new() + { + Type = "string" + }, Extensions = new Dictionary { { @@ -573,8 +645,16 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of group", Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), - Extensions = new Dictionary { { "x-ms-docs-key-type", new OpenApiAny("group") } } + Schema = new() + { + Type = "string" + }, + Extensions = new Dictionary + { + { + "x-ms-docs-key-type", new OpenApiAny("group") + } + } }, new() { @@ -582,8 +662,16 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of event", Required = true, - Schema = new JsonSchemaBuilder().Type(SchemaValueType.String).Build(), - Extensions = new Dictionary { { "x-ms-docs-key-type", new OpenApiAny("event") } } + Schema = new() + { + Type = "string" + }, + Extensions = new Dictionary + { + { + "x-ms-docs-key-type", new OpenApiAny("event") + } + } } }, Responses = new() @@ -598,7 +686,15 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new JsonSchemaBuilder().Type(SchemaValueType.Array).Ref("microsoft.graph.event").Build() + Schema = new() + { + Type = "array", + Reference = new() + { + Type = ReferenceType.Schema, + Id = "microsoft.graph.event" + } + } } } } @@ -638,17 +734,25 @@ public static OpenApiDocument CreateOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new Dictionary { { - "microsoft.graph.networkInterface", new JsonSchemaBuilder() - .Title("networkInterface") - .Type(SchemaValueType.Object) - .Properties( - ("description", new JsonSchemaBuilder() - .Type(SchemaValueType.String) - .Description("Description of the NIC (e.g. Ethernet adapter, Wireless LAN adapter Local Area Connection <#>, etc.)."))) - .Build() + "microsoft.graph.networkInterface", new OpenApiSchema + { + Title = "networkInterface", + Type = "object", + Properties = new Dictionary + { + { + "description", new OpenApiSchema + { + Type = "string", + Description = "Description of the NIC (e.g. Ethernet adapter, Wireless LAN adapter Local Area Connection <#>, etc.).", + Nullable = true + } + } + } + } } } } From c4f4cf2d1126d4b46af8e34052e618705b7d1e19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 22:00:43 +0000 Subject: [PATCH 492/720] Bump Microsoft.NET.Test.Sdk from 17.10.0 to 17.11.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.10.0 to 17.11.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.10.0...v17.11.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c1147319..f5958e5b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,7 +12,7 @@ - + From ad479710b8bc049dcf2ed2e002d4057db9d4cb7c Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Fri, 23 Aug 2024 12:43:12 +0300 Subject: [PATCH 493/720] Update OData lib and bump Hidi version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index e635fa5a..309fec2d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.7 + 1.4.8 OpenAPI.NET CLI tool for slicing OpenAPI documents true @@ -35,7 +35,7 @@ - + From 2cfd1696d77619dcacb6a817b3d62ea18d61b905 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 28 Aug 2024 10:49:48 -0400 Subject: [PATCH 494/720] chore: linting tasks conventions Signed-off-by: Vincent Biret --- .../Handlers/AsyncCommandHandler.cs | 14 ++++ .../Handlers/PluginCommandHandler.cs | 10 +-- .../Handlers/ShowCommandHandler.cs | 10 +-- .../Handlers/TransformCommandHandler.cs | 10 +-- .../Handlers/ValidateCommandHandler.cs | 11 +-- .../Microsoft.OpenApi.Hidi.csproj | 1 + src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 44 ++++++------ .../Services/OpenApiServiceTests.cs | 72 +++++++++---------- 8 files changed, 85 insertions(+), 87 deletions(-) create mode 100644 src/Microsoft.OpenApi.Hidi/Handlers/AsyncCommandHandler.cs diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/AsyncCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/AsyncCommandHandler.cs new file mode 100644 index 00000000..385c0093 --- /dev/null +++ b/src/Microsoft.OpenApi.Hidi/Handlers/AsyncCommandHandler.cs @@ -0,0 +1,14 @@ +using System; +using System.CommandLine.Invocation; +using System.Threading.Tasks; + +namespace Microsoft.OpenApi.Hidi.Handlers; + +internal abstract class AsyncCommandHandler : ICommandHandler +{ + public int Invoke(InvocationContext context) + { + throw new InvalidOperationException("This method should not be called"); + } + public abstract Task InvokeAsync(InvocationContext context); +} diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs index bd240f00..b8f1155c 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/PluginCommandHandler.cs @@ -11,18 +11,14 @@ namespace Microsoft.OpenApi.Hidi.Handlers { - internal class PluginCommandHandler : ICommandHandler + internal class PluginCommandHandler : AsyncCommandHandler { public CommandOptions CommandOptions { get; } public PluginCommandHandler(CommandOptions commandOptions) { CommandOptions = commandOptions; } - public int Invoke(InvocationContext context) - { - return InvokeAsync(context).GetAwaiter().GetResult(); - } - public async Task InvokeAsync(InvocationContext context) + public override async Task InvokeAsync(InvocationContext context) { var hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); var cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); @@ -31,7 +27,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.PluginManifest(hidiOptions, logger, cancellationToken).ConfigureAwait(false); + await OpenApiService.PluginManifestAsync(hidiOptions, logger, cancellationToken).ConfigureAwait(false); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs index dc2f6d8c..e4f86c6f 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ShowCommandHandler.cs @@ -11,18 +11,14 @@ namespace Microsoft.OpenApi.Hidi.Handlers { - internal class ShowCommandHandler : ICommandHandler + internal class ShowCommandHandler : AsyncCommandHandler { public CommandOptions CommandOptions { get; set; } public ShowCommandHandler(CommandOptions commandOptions) { CommandOptions = commandOptions; } - public int Invoke(InvocationContext context) - { - return InvokeAsync(context).GetAwaiter().GetResult(); - } - public async Task InvokeAsync(InvocationContext context) + public override async Task InvokeAsync(InvocationContext context) { var hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); var cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); @@ -31,7 +27,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.ShowOpenApiDocument(hidiOptions, logger, cancellationToken).ConfigureAwait(false); + await OpenApiService.ShowOpenApiDocumentAsync(hidiOptions, logger, cancellationToken).ConfigureAwait(false); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs index c9f46b7e..3a9a6322 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/TransformCommandHandler.cs @@ -11,18 +11,14 @@ namespace Microsoft.OpenApi.Hidi.Handlers { - internal class TransformCommandHandler : ICommandHandler + internal class TransformCommandHandler : AsyncCommandHandler { public CommandOptions CommandOptions { get; } public TransformCommandHandler(CommandOptions commandOptions) { CommandOptions = commandOptions; } - public int Invoke(InvocationContext context) - { - return InvokeAsync(context).GetAwaiter().GetResult(); - } - public async Task InvokeAsync(InvocationContext context) + public override async Task InvokeAsync(InvocationContext context) { var hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); var cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); @@ -31,7 +27,7 @@ public async Task InvokeAsync(InvocationContext context) var logger = loggerFactory.CreateLogger(); try { - await OpenApiService.TransformOpenApiDocument(hidiOptions, logger, cancellationToken).ConfigureAwait(false); + await OpenApiService.TransformOpenApiDocumentAsync(hidiOptions, logger, cancellationToken).ConfigureAwait(false); return 0; } diff --git a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs index 4c14cbef..b2d4a465 100644 --- a/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs +++ b/src/Microsoft.OpenApi.Hidi/Handlers/ValidateCommandHandler.cs @@ -11,7 +11,7 @@ namespace Microsoft.OpenApi.Hidi.Handlers { - internal class ValidateCommandHandler : ICommandHandler + internal class ValidateCommandHandler : AsyncCommandHandler { public CommandOptions CommandOptions { get; } @@ -19,12 +19,7 @@ public ValidateCommandHandler(CommandOptions commandOptions) { CommandOptions = commandOptions; } - - public int Invoke(InvocationContext context) - { - return InvokeAsync(context).GetAwaiter().GetResult(); - } - public async Task InvokeAsync(InvocationContext context) + public override async Task InvokeAsync(InvocationContext context) { var hidiOptions = new HidiOptions(context.ParseResult, CommandOptions); var cancellationToken = (CancellationToken)context.BindingContext.GetRequiredService(typeof(CancellationToken)); @@ -33,7 +28,7 @@ public async Task InvokeAsync(InvocationContext context) try { if (hidiOptions.OpenApi is null) throw new InvalidOperationException("OpenApi file is required"); - var isValid = await OpenApiService.ValidateOpenApiDocument(hidiOptions.OpenApi, logger, cancellationToken).ConfigureAwait(false); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(hidiOptions.OpenApi, logger, cancellationToken).ConfigureAwait(false); return isValid is not false ? 0 : -1; } #if RELEASE diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 309fec2d..8d1f4d39 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -33,6 +33,7 @@ + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index d3d3fdd8..d98508a1 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -41,7 +41,7 @@ internal static class OpenApiService /// /// Implementation of the transform command /// - public static async Task TransformOpenApiDocument(HidiOptions options, ILogger logger, CancellationToken cancellationToken = default) + public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILogger logger, CancellationToken cancellationToken = default) { if (string.IsNullOrEmpty(options.OpenApi) && string.IsNullOrEmpty(options.Csdl) && string.IsNullOrEmpty(options.FilterOptions?.FilterByApiManifest)) { @@ -70,7 +70,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_0; // If ApiManifest is provided, set the referenced OpenAPI document - var apiDependency = await FindApiDependency(options.FilterOptions.FilterByApiManifest, logger, cancellationToken).ConfigureAwait(false); + var apiDependency = await FindApiDependencyAsync(options.FilterOptions.FilterByApiManifest, logger, cancellationToken).ConfigureAwait(false); if (apiDependency != null) { options.OpenApi = apiDependency.ApiDescripionUrl; @@ -80,12 +80,12 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l JsonDocument? postmanCollection = null; if (!string.IsNullOrEmpty(options.FilterOptions?.FilterByCollection)) { - using var collectionStream = await GetStream(options.FilterOptions.FilterByCollection, logger, cancellationToken).ConfigureAwait(false); + using var collectionStream = await GetStreamAsync(options.FilterOptions.FilterByCollection, logger, cancellationToken).ConfigureAwait(false); postmanCollection = await JsonDocument.ParseAsync(collectionStream, cancellationToken: cancellationToken).ConfigureAwait(false); } // Load OpenAPI document - var document = await GetOpenApi(options, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); if (options.FilterOptions != null) { @@ -116,7 +116,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l } } - private static async Task FindApiDependency(string? apiManifestPath, ILogger logger, CancellationToken cancellationToken = default) + private static async Task FindApiDependencyAsync(string? apiManifestPath, ILogger logger, CancellationToken cancellationToken = default) { ApiDependency? apiDependency = null; // If API Manifest is provided, load it, use it get the OpenAPI path @@ -130,7 +130,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l { apiDependencyName = apiManifestRef[1]; } - using (var fileStream = await GetStream(apiManifestRef[0], logger, cancellationToken).ConfigureAwait(false)) + using (var fileStream = await GetStreamAsync(apiManifestRef[0], logger, cancellationToken).ConfigureAwait(false)) { var document = await JsonDocument.ParseAsync(fileStream, cancellationToken: cancellationToken).ConfigureAwait(false); apiManifest = ApiManifestDocument.Load(document.RootElement); @@ -212,7 +212,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma } // Get OpenAPI document either from OpenAPI or CSDL - private static async Task GetOpenApi(HidiOptions options, ILogger logger, string? metadataVersion = null, CancellationToken cancellationToken = default) + private static async Task GetOpenApiAsync(HidiOptions options, ILogger logger, string? metadataVersion = null, CancellationToken cancellationToken = default) { OpenApiDocument document; Stream stream; @@ -223,7 +223,7 @@ private static async Task GetOpenApi(HidiOptions options, ILogg using (logger.BeginScope("Convert CSDL: {Csdl}", options.Csdl)) { stopwatch.Start(); - stream = await GetStream(options.Csdl, logger, cancellationToken).ConfigureAwait(false); + stream = await GetStreamAsync(options.Csdl, logger, cancellationToken).ConfigureAwait(false); Stream? filteredStream = null; if (!string.IsNullOrEmpty(options.CsdlFilter)) { @@ -233,15 +233,15 @@ private static async Task GetOpenApi(HidiOptions options, ILogg await stream.DisposeAsync().ConfigureAwait(false); } - document = await ConvertCsdlToOpenApi(filteredStream ?? stream, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); + document = await ConvertCsdlToOpenApiAsync(filteredStream ?? stream, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } } else if (!string.IsNullOrEmpty(options.OpenApi)) { - stream = await GetStream(options.OpenApi, logger, cancellationToken).ConfigureAwait(false); - var result = await ParseOpenApi(options.OpenApi, options.InlineExternal, logger, stream, cancellationToken).ConfigureAwait(false); + stream = await GetStreamAsync(options.OpenApi, logger, cancellationToken).ConfigureAwait(false); + var result = await ParseOpenApiAsync(options.OpenApi, options.InlineExternal, logger, stream, cancellationToken).ConfigureAwait(false); document = result.OpenApiDocument; } else throw new InvalidOperationException("No input file path or URL provided"); @@ -323,7 +323,7 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe /// Implementation of the validate command /// /// when valid, when invalid and when cancelled - public static async Task ValidateOpenApiDocument( + public static async Task ValidateOpenApiDocumentAsync( string openApi, ILogger logger, CancellationToken cancellationToken = default) @@ -337,9 +337,9 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe try { - using var stream = await GetStream(openApi, logger, cancellationToken).ConfigureAwait(false); + using var stream = await GetStreamAsync(openApi, logger, cancellationToken).ConfigureAwait(false); - result = await ParseOpenApi(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); + result = await ParseOpenApiAsync(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Calculating statistics")) { @@ -367,7 +367,7 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe return result.OpenApiDiagnostic.Errors.Count == 0; } - private static async Task ParseOpenApi(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) + private static async Task ParseOpenApiAsync(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) { ReadResult result; var stopwatch = Stopwatch.StartNew(); @@ -398,7 +398,7 @@ private static async Task ParseOpenApi(string openApiFile, bool inli /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApi(Stream csdl, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) + public static async Task ConvertCsdlToOpenApiAsync(Stream csdl, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) { using var reader = new StreamReader(csdl); var csdlText = await reader.ReadToEndAsync(token).ConfigureAwait(false); @@ -486,7 +486,7 @@ private static Dictionary> EnumerateJsonDocument(JsonElemen /// /// Reads stream from file system or makes HTTP request depending on the input string /// - private static async Task GetStream(string input, ILogger logger, CancellationToken cancellationToken = default) + private static async Task GetStreamAsync(string input, ILogger logger, CancellationToken cancellationToken = default) { Stream stream; using (logger.BeginScope("Reading input stream")) @@ -562,7 +562,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl return extension; } - internal static async Task ShowOpenApiDocument(HidiOptions options, ILogger logger, CancellationToken cancellationToken = default) + internal static async Task ShowOpenApiDocumentAsync(HidiOptions options, ILogger logger, CancellationToken cancellationToken = default) { try { @@ -571,7 +571,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl throw new ArgumentException("Please input a file path or URL"); } - var document = await GetOpenApi(options, logger, null, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, logger, null, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Creating diagram")) { @@ -722,17 +722,17 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d writer.WriteLine("(() => - OpenApiService.ValidateOpenApiDocument("", _logger)); + OpenApiService.ValidateOpenApiDocumentAsync("", _logger)); } [Fact] - public Task ThrowIfURLIsNotResolvableWhenValidating() + public Task ThrowIfURLIsNotResolvableWhenValidatingAsync() { return Assert.ThrowsAsync(() => - OpenApiService.ValidateOpenApiDocument("https://example.org/itdoesnmatter", _logger)); + OpenApiService.ValidateOpenApiDocumentAsync("https://example.org/itdoesnmatter", _logger)); } [Fact] - public Task ThrowIfFileDoesNotExistWhenValidating() + public Task ThrowIfFileDoesNotExistWhenValidatingAsync() { return Assert.ThrowsAsync(() => - OpenApiService.ValidateOpenApiDocument("aFileThatBetterNotExist.fake", _logger)); + OpenApiService.ValidateOpenApiDocumentAsync("aFileThatBetterNotExist.fake", _logger)); } [Fact] - public async Task ValidateCommandProcessesOpenApi() + public async Task ValidateCommandProcessesOpenApiAsync() { // create a dummy ILogger instance for testing - await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger); + await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger); Assert.True(true); } [Fact] - public async Task ValidFileReturnsTrue() + public async Task ValidFileReturnsTrueAsync() { - var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger); Assert.True(isValid); } [Fact] - public async Task InvalidFileReturnsFalse() + public async Task InvalidFileReturnsFalseAsync() { - var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "InvalidSampleOpenApi.yml"), _logger); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "InvalidSampleOpenApi.yml"), _logger); Assert.False(isValid); } [Fact] - public async Task CancellingValidationReturnsNull() + public async Task CancellingValidationReturnsNullAsync() { using var cts = new CancellationTokenSource(); await cts.CancelAsync(); - var isValid = await OpenApiService.ValidateOpenApiDocument(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, cts.Token); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, cts.Token); Assert.Null(isValid); } [Fact] - public async Task TransformCommandConvertsOpenApi() + public async Task TransformCommandConvertsOpenApiAsync() { var options = new HidiOptions { @@ -282,7 +282,7 @@ public async Task TransformCommandConvertsOpenApi() InlineExternal = false, }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); var output = await File.ReadAllTextAsync("sample.json"); Assert.NotEmpty(output); @@ -290,7 +290,7 @@ public async Task TransformCommandConvertsOpenApi() [Fact] - public async Task TransformCommandConvertsOpenApiWithDefaultOutputName() + public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAsync() { var options = new HidiOptions { @@ -301,14 +301,14 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputName() InlineExternal = false, }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); } [Fact] - public async Task TransformCommandConvertsCsdlWithDefaultOutputName() + public async Task TransformCommandConvertsCsdlWithDefaultOutputNameAsync() { var options = new HidiOptions { @@ -319,14 +319,14 @@ public async Task TransformCommandConvertsCsdlWithDefaultOutputName() InlineExternal = false, }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); } [Fact] - public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchFormat() + public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchFormatAsync() { var options = new HidiOptions { @@ -339,14 +339,14 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF InlineExternal = false, }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); } [Fact] - public Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() + public Task ThrowTransformCommandIfOpenApiAndCsdlAreEmptyAsync() { var options = new HidiOptions { @@ -356,11 +356,11 @@ public Task ThrowTransformCommandIfOpenApiAndCsdlAreEmpty() InlineExternal = false, }; return Assert.ThrowsAsync(() => - OpenApiService.TransformOpenApiDocument(options, _logger)); + OpenApiService.TransformOpenApiDocumentAsync(options, _logger)); } [Fact] - public async Task TransformToPowerShellCompliantOpenApi() + public async Task TransformToPowerShellCompliantOpenApiAsync() { var settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "examplepowershellsettings.json"); var options = new HidiOptions @@ -375,7 +375,7 @@ public async Task TransformToPowerShellCompliantOpenApi() SettingsConfig = SettingsUtilities.GetConfiguration(settingsPath) }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocument(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); var output = await File.ReadAllTextAsync("output.yml"); Assert.NotEmpty(output); From 9213c2d4e053625816f26000d218c191e42bd2c4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 28 Aug 2024 11:23:55 -0400 Subject: [PATCH 495/720] chore: tasks linting --- .../Services/OpenApiServiceTests.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 8d9d3ab0..a7ab42c0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -382,24 +382,24 @@ public async Task TransformToPowerShellCompliantOpenApiAsync() } [Fact] - public void InvokeTransformCommand() + public async Task InvokeTransformCommandAsync() { var rootCommand = Program.CreateRootCommand(); var openapi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); var args = new[] { "transform", "-d", openapi, "-o", "sample.json", "--co" }; var parseResult = rootCommand.Parse(args); - var handler = rootCommand.Subcommands.Where(c => c.Name == "transform").First().Handler; + var handler = rootCommand.Subcommands.First(c => c.Name == "transform").Handler; var context = new InvocationContext(parseResult); - handler!.Invoke(context); + await handler!.InvokeAsync(context); - var output = File.ReadAllText("sample.json"); + var output = await File.ReadAllTextAsync("sample.json"); Assert.NotEmpty(output); } [Fact] - public void InvokeShowCommand() + public async Task InvokeShowCommandAsync() { var rootCommand = Program.CreateRootCommand(); var openApi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); @@ -408,14 +408,14 @@ public void InvokeShowCommand() var handler = rootCommand.Subcommands.Where(c => c.Name == "show").First().Handler; var context = new InvocationContext(parseResult); - handler!.Invoke(context); + await handler!.InvokeAsync(context); - var output = File.ReadAllText("sample.md"); + var output = await File.ReadAllTextAsync("sample.md"); Assert.Contains("graph LR", output, StringComparison.Ordinal); } [Fact] - public void InvokePluginCommand() + public async Task InvokePluginCommandAsync() { var rootCommand = Program.CreateRootCommand(); var manifest = Path.Combine(".", "UtilityFiles", "exampleapimanifest.json"); @@ -424,9 +424,9 @@ public void InvokePluginCommand() var handler = rootCommand.Subcommands.Where(c => c.Name == "plugin").First().Handler; var context = new InvocationContext(parseResult); - handler!.Invoke(context); + await handler!.InvokeAsync(context); - using var jsDoc = JsonDocument.Parse(File.ReadAllText("ai-plugin.json")); + using var jsDoc = JsonDocument.Parse(await File.ReadAllTextAsync("ai-plugin.json")); var openAiManifest = OpenAIPluginManifest.Load(jsDoc.RootElement); Assert.NotNull(openAiManifest); From ba464e7dad6fa9e9ee85cdb9d47823e9071f6c51 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 29 Aug 2024 16:45:40 +0300 Subject: [PATCH 496/720] Bump hidi and lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 8d1f4d39..21a7f677 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.8 + 1.4.9 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 86f41b9bc958652ead99f326b63502e8f097da2b Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 30 Aug 2024 12:00:04 +0300 Subject: [PATCH 497/720] Add test --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 8 +- .../Services/OpenApiFilterServiceTests.cs | 29 +++++++ .../docWithReusableHeadersAndExamples.yaml | 79 +++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index f5958e5b..75c17630 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -34,4 +34,10 @@ + + + PreserveNewest + + + diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 5fb1b15f..ac566bf0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -3,9 +3,11 @@ using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; using Moq; +using SharpYaml.Tokens; using Xunit; namespace Microsoft.OpenApi.Hidi.Tests @@ -170,6 +172,33 @@ public void ThrowsInvalidOperationExceptionInCreatePredicateWhenInvalidArguments Assert.Equal("Cannot specify both operationIds and tags at the same time.", message2); } + [Fact] + public void CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() + { + // Arrange + var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "docWithReusableHeadersAndExamples.yaml"); + var operationIds = "getItems"; + + // Act + using var stream = File.OpenRead(filePath); + var doc = new OpenApiStreamReader().Read(stream, out var diagnostic); + + var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); + var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); + + var response = subsetOpenApiDocument.Paths["/items"].Operations[OperationType.Get].Responses["200"]; + var responseHeader = response.Headers["x-custom-header"]; + var mediaTypeExample = response.Content["application/json"].Examples.First().Value; + var targetHeaders = subsetOpenApiDocument.Components.Headers; + var targetExamples = subsetOpenApiDocument.Components.Examples; + + // Assert + Assert.False(responseHeader.UnresolvedReference); + Assert.False(mediaTypeExample.UnresolvedReference); + Assert.Single(targetHeaders); + Assert.Single(targetExamples); + } + [Theory] [InlineData("reports.getTeamsUserActivityUserDetail-a3f1", null)] [InlineData(null, "reports.Functions")] diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml new file mode 100644 index 00000000..2f86d766 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml @@ -0,0 +1,79 @@ +openapi: 3.0.1 +info: + title: Example with Multiple Operations and Local $refs + version: 1.0.0 +paths: + /items: + get: + operationId: getItems + summary: Get a list of items + responses: + '200': + description: A list of items + headers: + x-custom-header: + $ref: '#/components/headers/CustomHeader' + content: + application/json: + schema: + type: array + items: + type: string + examples: + ItemExample: + $ref: '#/components/examples/ItemExample' + post: + operationId: createItem + summary: Create a new item + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + example: + $ref: '#/components/examples/ItemExample' + responses: + '201': + description: Item created + content: + application/json: + schema: + type: object + properties: + id: + type: string + name: + type: string + example: + $ref: '#/components/examples/ItemExample' +components: + schemas: + pet: + type: object + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + headers: + CustomHeader: + description: Custom header for authentication + required: true + schema: + type: string + examples: + ItemExample: + summary: Example of a new item to be created + value: + name: "New Item" + From 2f5d97437ca44217da86671328d85e5368b6e9e3 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 30 Aug 2024 13:11:20 +0300 Subject: [PATCH 498/720] Add server info --- .../UtilityFiles/docWithReusableHeadersAndExamples.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml index 2f86d766..3260ea43 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml @@ -2,6 +2,8 @@ openapi: 3.0.1 info: title: Example with Multiple Operations and Local $refs version: 1.0.0 +servers: +- url: https://api.github.com paths: /items: get: From 8c92d60ed3e265f4fdaa24fbc2d20e1eb32ddb9c Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 30 Aug 2024 13:12:07 +0300 Subject: [PATCH 499/720] Compare the source document's server to that of the resulting subset document for equality --- .../Services/OpenApiFilterServiceTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index ac566bf0..f91d0db9 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -193,6 +193,7 @@ public void CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() var targetExamples = subsetOpenApiDocument.Components.Examples; // Assert + Assert.Same(doc.Servers, subsetOpenApiDocument.Servers); Assert.False(responseHeader.UnresolvedReference); Assert.False(mediaTypeExample.UnresolvedReference); Assert.Single(targetHeaders); From 64c167a571f289db8627ad8f7929d0b59910eb55 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 30 Aug 2024 08:52:58 -0400 Subject: [PATCH 500/720] fix: directly adds non-vulnerable versions of transitive deps to resolve alerts --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 21a7f677..ee760451 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,6 +39,10 @@ + + From b6f545d1df5555997f4d7b3a21baa2d46b8c0788 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 21:27:42 +0000 Subject: [PATCH 501/720] Bump Moq from 4.20.70 to 4.20.71 Bumps [Moq](https://github.com/moq/moq) from 4.20.70 to 4.20.71. - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/devlooped/moq/blob/main/changelog.md) - [Commits](https://github.com/moq/moq/compare/v4.20.70...v4.20.71) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 75c17630..a0689b47 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ - + From 7c67b241d493b5baafdb4e0d8ca60bbe25034070 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 4 Sep 2024 11:48:11 -0400 Subject: [PATCH 502/720] fix: uses the correct threading dependency to avoid impacting downstream projects Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ee760451..120210fb 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -33,7 +33,10 @@ - + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + From 1604b39d7215622314492b4b3d06d503ebcad95e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2024 00:59:23 +0300 Subject: [PATCH 503/720] Bump Microsoft.NET.Test.Sdk from 17.11.0 to 17.11.1 (#1824) Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.11.0 to 17.11.1. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.11.0...v17.11.1) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index a0689b47..5e2c6c88 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,7 +12,7 @@ - + From 27a3c7233222d0850570ea38fcde37c8bdb856c4 Mon Sep 17 00:00:00 2001 From: HavenDV Date: Fri, 6 Sep 2024 02:34:08 +0400 Subject: [PATCH 504/720] fix: Resolved conflicts. --- .../Formatters/PowerShellFormatterTests.cs | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 94f99a1d..f047ecdc 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -57,18 +57,21 @@ public void RemoveAnyOfAndOneOfFromSchema() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var testSchema = openApiDocument.Components.Schemas["TestSchema"]; - var averageAudioDegradationProperty = testSchema.Properties["averageAudioDegradation"]; - var defaultPriceProperty = testSchema.Properties["defaultPrice"]; + var testSchema = openApiDocument.Components?.Schemas?["TestSchema"]; + var averageAudioDegradationProperty = testSchema?.Properties["averageAudioDegradation"]; + var defaultPriceProperty = testSchema?.Properties["defaultPrice"]; // Assert - Assert.Null(averageAudioDegradationProperty.AnyOf); - Assert.Equal("number", averageAudioDegradationProperty.Type); - Assert.Equal("float", averageAudioDegradationProperty.Format); - Assert.True(averageAudioDegradationProperty.Nullable); - Assert.Null(defaultPriceProperty.OneOf); - Assert.Equal("number", defaultPriceProperty.Type); - Assert.Equal("double", defaultPriceProperty.Format); + Assert.NotNull(openApiDocument.Components); + Assert.NotNull(openApiDocument.Components.Schemas); + Assert.NotNull(testSchema); + Assert.Null(averageAudioDegradationProperty?.AnyOf); + Assert.Equal("number", averageAudioDegradationProperty?.Type); + Assert.Equal("float", averageAudioDegradationProperty?.Format); + Assert.True(averageAudioDegradationProperty?.Nullable); + Assert.Null(defaultPriceProperty?.OneOf); + Assert.Equal("number", defaultPriceProperty?.Type); + Assert.Equal("double", defaultPriceProperty?.Format); Assert.NotNull(testSchema.AdditionalProperties); } @@ -83,12 +86,12 @@ public void ResolveFunctionParameters() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var idsParameter = openApiDocument.Paths["/foo"].Operations[OperationType.Get].Parameters.Where(static p => p.Name == "ids").FirstOrDefault(); + var idsParameter = openApiDocument.Paths?["/foo"].Operations[OperationType.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); // Assert Assert.Null(idsParameter?.Content); Assert.NotNull(idsParameter?.Schema); - Assert.Equal("array", idsParameter?.Schema.Type); + Assert.Equal("array", idsParameter.Schema.Type); } private static OpenApiDocument GetSampleOpenApiDocument() From 9b645b92276505cd6927a3c78ad6302bf36f44ff Mon Sep 17 00:00:00 2001 From: HavenDV Date: Fri, 6 Sep 2024 02:52:24 +0400 Subject: [PATCH 505/720] feat: Make REQUIRED properties as non-nullable and revert some changes according this. --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 ++++++------ .../Formatters/PowerShellFormatterTests.cs | 4 ++-- .../Services/OpenApiFilterServiceTests.cs | 6 +----- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c0ff17aa..df3bf0e6 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -185,7 +185,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, stopwatch.Start(); document = OpenApiFilterService.CreateFilteredDocument(document, predicate); stopwatch.Stop(); - logger.LogTrace("{Timestamp}ms: Creating filtered OpenApi document with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths?.Count); + logger.LogTrace("{Timestamp}ms: Creating filtered OpenApi document with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } return document; @@ -248,7 +248,7 @@ private static async Task GetOpenApi(HidiOptions options, strin document = await ConvertCsdlToOpenApi(filteredStream ?? stream, format, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); - logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths?.Count); + logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } } else if (!string.IsNullOrEmpty(options.OpenApi)) @@ -666,7 +666,7 @@ internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocum { var rootNode = OpenApiUrlTreeNode.Create(document, "main"); - writer.WriteLine("# " + document.Info?.Title); + writer.WriteLine("# " + document.Info.Title); writer.WriteLine(); writer.WriteLine("API Description: " + openapiUrl); @@ -702,7 +702,7 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d """); - writer.WriteLine("

" + document.Info?.Title + "

"); + writer.WriteLine("

" + document.Info.Title + "

"); writer.WriteLine(); writer.WriteLine($"

API Description: {sourceUrl}

"); @@ -773,8 +773,8 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C // Create OpenAIPluginManifest from ApiDependency and OpenAPI document var manifest = new OpenAIPluginManifest { - NameForHuman = document.Info?.Title, - DescriptionForHuman = document.Info?.Description, + NameForHuman = document.Info.Title, + DescriptionForHuman = document.Info.Description, Api = new() { Type = "openapi", diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index f047ecdc..214bd47f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -86,12 +86,12 @@ public void ResolveFunctionParameters() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var idsParameter = openApiDocument.Paths?["/foo"].Operations[OperationType.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); + var idsParameter = openApiDocument.Paths["/foo"].Operations[OperationType.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); // Assert Assert.Null(idsParameter?.Content); Assert.NotNull(idsParameter?.Schema); - Assert.Equal("array", idsParameter.Schema.Type); + Assert.Equal("array", idsParameter?.Schema.Type); } private static OpenApiDocument GetSampleOpenApiDocument() diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 02e6cedb..5fb1b15f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -43,7 +43,6 @@ public void ReturnFilteredOpenApiDocumentBasedOnOperationIdsAndTags(string? oper // Assert Assert.NotNull(subsetOpenApiDocument); - Assert.NotNull(subsetOpenApiDocument.Paths); Assert.NotEmpty(subsetOpenApiDocument.Paths); Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); } @@ -63,7 +62,6 @@ public void ReturnFilteredOpenApiDocumentBasedOnPostmanCollection() // Assert Assert.NotNull(subsetOpenApiDocument); - Assert.NotNull(subsetOpenApiDocument.Paths); Assert.NotEmpty(subsetOpenApiDocument.Paths); Assert.Equal(3, subsetOpenApiDocument.Paths.Count); } @@ -152,11 +150,10 @@ public void ContinueProcessingWhenUrlsInCollectionAreMissingFromSourceDocument() var pathCount = requestUrls.Count; var predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: _openApiDocumentMock); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(_openApiDocumentMock, predicate); - var subsetPathCount = subsetOpenApiDocument.Paths?.Count; + var subsetPathCount = subsetOpenApiDocument.Paths.Count; // Assert Assert.NotNull(subsetOpenApiDocument); - Assert.NotNull(subsetOpenApiDocument.Paths); Assert.NotEmpty(subsetOpenApiDocument.Paths); Assert.Equal(2, subsetPathCount); Assert.NotEqual(pathCount, subsetPathCount); @@ -183,7 +180,6 @@ public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string? oper var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(_openApiDocumentMock, predicate); // Assert - Assert.NotNull(subsetOpenApiDocument.Paths); foreach (var pathItem in subsetOpenApiDocument.Paths) { Assert.True(pathItem.Value.Parameters.Any()); From e9dee602f6fac68ce6abc407e93bce3f540ad549 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 21:09:32 +0000 Subject: [PATCH 506/720] Bump Moq from 4.20.71 to 4.20.72 Bumps [Moq](https://github.com/moq/moq) from 4.20.71 to 4.20.72. - [Release notes](https://github.com/moq/moq/releases) - [Changelog](https://github.com/devlooped/moq/blob/main/changelog.md) - [Commits](https://github.com/moq/moq/compare/v4.20.71...v4.20.72) --- updated-dependencies: - dependency-name: Moq dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 5e2c6c88..82af1d03 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ - + From b071bfb61f38785a2f5ba3d1329646ff34240a4e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 06:12:55 +0000 Subject: [PATCH 507/720] Bump xunit from 2.9.0 to 2.9.1 Bumps [xunit](https://github.com/xunit/xunit) from 2.9.0 to 2.9.1. - [Commits](https://github.com/xunit/xunit/compare/2.9.0...2.9.1) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 82af1d03..c5f7d9ee 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 27ef9de9c887c5a13708836e4474c8423f7f4cdf Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Fri, 27 Sep 2024 11:35:14 +0300 Subject: [PATCH 508/720] Bump lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 120210fb..377f6799 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.9 + 1.4.10 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 7be58f850bc8b049c18c634132155493b0a384e6 Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Fri, 27 Sep 2024 11:35:46 +0300 Subject: [PATCH 509/720] Update test --- .../Services/OpenApiFilterServiceTests.cs | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index f91d0db9..ebb86346 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using Microsoft.Extensions.Logging; @@ -105,6 +105,57 @@ public void TestPredicateFiltersUsingRelativeRequestUrls() Assert.False(predicate("/foo", OperationType.Patch, null)); } + [Fact] + public void CreateFilteredDocumentUsingPredicateFromRequestUrl() + { + // Arrange + var openApiDocument = new OpenApiDocument + { + Info = new() { Title = "Test", Version = "1.0" }, + Servers = new List { new() { Url = "https://localhost/" } }, + Paths = new() + { + ["/test/{id}"] = new() + { + Operations = new Dictionary + { + { OperationType.Get, new() }, + { OperationType.Patch, new() } + }, + Parameters = new List + { + new() + { + Name = "id", + In = ParameterLocation.Path, + Required = true, + Schema = new() + { + Type = "string" + } + } + } + } + + + } + }; + + var requestUrls = new Dictionary> + { + {"/test/{id}", new List {"GET","PATCH"}} + }; + + // Act + var predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: openApiDocument); + var subsetDoc = OpenApiFilterService.CreateFilteredDocument(openApiDocument, predicate); + + // Assert that there's only 1 parameter in the subset document + Assert.NotNull(subsetDoc); + Assert.NotEmpty(subsetDoc.Paths); + Assert.Single(subsetDoc.Paths.First().Value.Parameters); + } + [Fact] public void ShouldParseNestedPostmanCollection() { From 3e0d2a2f03f557479fb52d57e925aaf37d3223b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 21:18:28 +0000 Subject: [PATCH 510/720] Bump xunit from 2.9.1 to 2.9.2 Bumps [xunit](https://github.com/xunit/xunit) from 2.9.1 to 2.9.2. - [Commits](https://github.com/xunit/xunit/compare/v2-2.9.1...v2-2.9.2) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c5f7d9ee..39783183 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - +
From eab43ec1bdae84f3227a34d6857312a9c6b13eb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 21:44:27 +0000 Subject: [PATCH 511/720] Bump Microsoft.OData.Edm from 8.0.1 to 8.0.2 Bumps Microsoft.OData.Edm from 8.0.1 to 8.0.2. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 377f6799..6a31bbe2 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all
- + From 3db97aaeae1b8a6d0d7959dbdd36d5f782bc7122 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 2 Oct 2024 18:18:45 +0300 Subject: [PATCH 512/720] Add support for transforming 3.1 docs --- .../OpenApiSpecVersionHelper.cs | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs index 23429848..222f7a8c 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs @@ -2,7 +2,6 @@ // Licensed under the MIT license. using System; -using System.Linq; namespace Microsoft.OpenApi.Hidi { @@ -14,17 +13,30 @@ public static OpenApiSpecVersion TryParseOpenApiSpecVersion(string value) { throw new InvalidOperationException("Please provide a version"); } - var res = value.Split('.', StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); + // Split the version string by the dot + var versionSegments = value.Split('.', StringSplitOptions.RemoveEmptyEntries); - if (int.TryParse(res, out var result)) + if (!int.TryParse(versionSegments[0], out var majorVersion) + || !int.TryParse(versionSegments[1], out var minorVersion)) { - if (result is >= 2 and < 3) - { - return OpenApiSpecVersion.OpenApi2_0; - } + throw new InvalidOperationException("Invalid version format. Please provide a valid OpenAPI version (e.g., 2.0, 3.0, 3.1)."); } - return OpenApiSpecVersion.OpenApi3_0; // default + // Check for specific version matches + if (majorVersion == 2) + { + return OpenApiSpecVersion.OpenApi2_0; + } + else if (majorVersion == 3 && minorVersion == 0) + { + return OpenApiSpecVersion.OpenApi3_0; + } + else if (majorVersion == 3 && minorVersion == 1) + { + return OpenApiSpecVersion.OpenApi3_1; + } + + return OpenApiSpecVersion.OpenApi3_1; // default } } } From a6db2a7a31f323f2b68c9a2bbdc725f6667bef62 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 2 Oct 2024 18:18:53 +0300 Subject: [PATCH 513/720] set 3.1 as the default version --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index fd53086d..7cde3f2f 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System; @@ -79,7 +79,7 @@ public static async Task TransformOpenApiDocument(HidiOptions options, ILogger l // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); - var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_0; + var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_1; // If ApiManifest is provided, set the referenced OpenAPI document var apiDependency = await FindApiDependency(options.FilterOptions.FilterByApiManifest, logger, cancellationToken).ConfigureAwait(false); @@ -768,7 +768,7 @@ internal static async Task PluginManifest(HidiOptions options, ILogger logger, C // Write OpenAPI to Output folder options.Output = new(Path.Combine(options.OutputFolder, "openapi.json")); options.TerseOutput = true; - WriteOpenApi(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_0, document, logger); + WriteOpenApi(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_1, document, logger); // Create OpenAIPluginManifest from ApiDependency and OpenAPI document var manifest = new OpenAIPluginManifest From a3ba99cfb5b659cd5d1849166c0b677058339641 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 21:55:44 +0000 Subject: [PATCH 514/720] Bump Microsoft.OpenApi.OData from 2.0.0-preview.2 to 2.0.0-preview.3 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 2.0.0-preview.2 to 2.0.0-preview.3. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 6a31bbe2..f33a9b68 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + From a99e0b0cd48ca060608007f20947ef412b391df6 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 7 Oct 2024 15:48:53 +0300 Subject: [PATCH 516/720] Fix merge conflicts --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 12 +-- .../Services/OpenApiFilterServiceTests.cs | 4 +- .../Services/OpenApiServiceTests.cs | 76 +------------------ 3 files changed, 10 insertions(+), 82 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 72f691b0..c981639e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -98,7 +98,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog // Load OpenAPI document var format = OpenApiModelFactory.GetFormat(options.OpenApi); - var document = await GetOpenApi(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); if (options.FilterOptions != null) { @@ -225,7 +225,7 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma } // Get OpenAPI document either from OpenAPI or CSDL - private static async Task GetOpenApi(HidiOptions options, string format, ILogger logger, string? metadataVersion = null, CancellationToken cancellationToken = default) + private static async Task GetOpenApiAsync(HidiOptions options, string format, ILogger logger, string? metadataVersion = null, CancellationToken cancellationToken = default) { OpenApiDocument document; Stream stream; @@ -246,7 +246,7 @@ private static async Task GetOpenApi(HidiOptions options, strin await stream.DisposeAsync().ConfigureAwait(false); } - document = await ConvertCsdlToOpenApi(filteredStream ?? stream, format, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); + document = await ConvertCsdlToOpenApiAsync(filteredStream ?? stream, format, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); } @@ -413,7 +413,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApi(Stream csdl, string format, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) + public static async Task ConvertCsdlToOpenApiAsync(Stream csdl, string format, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) { using var reader = new StreamReader(csdl); var csdlText = await reader.ReadToEndAsync(token).ConfigureAwait(false); @@ -588,7 +588,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl } var format = OpenApiModelFactory.GetFormat(options.OpenApi); - var document = await GetOpenApi(options, format, logger, null, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, format, logger, null, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Creating diagram")) { @@ -750,7 +750,7 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg // Load OpenAPI document var format = OpenApiModelFactory.GetFormat(options.OpenApi); - var document = await GetOpenApi(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index ebb86346..83e79d07 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using Microsoft.Extensions.Logging; @@ -232,7 +232,7 @@ public void CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() // Act using var stream = File.OpenRead(filePath); - var doc = new OpenApiStreamReader().Read(stream, out var diagnostic); + var doc = OpenApiDocument.Load(stream, "yaml").OpenApiDocument; var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index d282ded8..798b7532 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. using System.CommandLine; @@ -13,6 +13,7 @@ using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Readers; +using Microsoft.OpenApi.Services; using Xunit; namespace Microsoft.OpenApi.Hidi.Tests @@ -27,44 +28,6 @@ public OpenApiServiceTests() _logger = new Logger(_loggerFactory); OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader()); OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader()); - - [Fact] - public async Task ReturnConvertedCSDLFileAsync() - { - // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "Todo.xml"); - var fileInput = new FileInfo(filePath); - var csdlStream = fileInput.OpenRead(); - // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApiAsync(csdlStream); - var expectedPathCount = 5; - - // Assert - Assert.NotNull(openApiDoc); - Assert.NotEmpty(openApiDoc.Paths); - Assert.Equal(expectedPathCount, openApiDoc.Paths.Count); - } - - [Theory] - [InlineData("Todos.Todo.UpdateTodo", null, 1)] - [InlineData("Todos.Todo.ListTodo", null, 1)] - [InlineData(null, "Todos.Todo", 5)] - public async Task ReturnFilteredOpenApiDocBasedOnOperationIdsAndInputCsdlDocumentAsync(string? operationIds, string? tags, int expectedPathCount) - { - // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "Todo.xml"); - var fileInput = new FileInfo(filePath); - var csdlStream = fileInput.OpenRead(); - - // Act - var openApiDoc = await OpenApiService.ConvertCsdlToOpenApiAsync(csdlStream); - var predicate = OpenApiFilterService.CreatePredicate(operationIds, tags); - var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(openApiDoc, predicate); - - // Assert - Assert.NotNull(subsetOpenApiDocument); - Assert.NotEmpty(subsetOpenApiDocument.Paths); - Assert.Equal(expectedPathCount, subsetOpenApiDocument.Paths.Count); } [Fact] @@ -198,23 +161,6 @@ public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagramAsync() Assert.True(File.Exists(filePath)); } - [Fact] - public async Task ShowCommandGeneratesMermaidMarkdownFileFromCsdlWithMermaidDiagramAsync() - { - var options = new HidiOptions - { - Csdl = Path.Combine("UtilityFiles", "Todo.xml"), - CsdlFilter = "todos", - Output = new("sample.md") - }; - - // create a dummy ILogger instance for testing - await OpenApiService.ShowOpenApiDocumentAsync(options, _logger); - - var output = await File.ReadAllTextAsync(options.Output.FullName); - Assert.Contains("graph LR", output, StringComparison.Ordinal); - } - [Fact] public Task ThrowIfOpenApiUrlIsNotProvidedWhenValidatingAsync() { @@ -309,24 +255,6 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAsync() Assert.NotEmpty(output); } - [Fact] - public async Task TransformCommandConvertsCsdlWithDefaultOutputNameAsync() - { - var options = new HidiOptions - { - Csdl = Path.Combine("UtilityFiles", "Todo.xml"), - CleanOutput = true, - TerseOutput = false, - InlineLocal = false, - InlineExternal = false, - }; - // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); - - var output = await File.ReadAllTextAsync("output.yml"); - Assert.NotEmpty(output); - } - [Fact] public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchFormatAsync() { From d09965612e7c0dfe142b7abc5247a71e18222cd3 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 8 Oct 2024 21:53:23 +0300 Subject: [PATCH 517/720] Declare Annotations as nullable to prevent null reference assignment --- .../Services/OpenApiFilterServiceTests.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 83e79d07..99e559e3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -237,17 +237,19 @@ public void CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); - var response = subsetOpenApiDocument.Paths["/items"].Operations[OperationType.Get].Responses["200"]; - var responseHeader = response.Headers["x-custom-header"]; - var mediaTypeExample = response.Content["application/json"].Examples.First().Value; - var targetHeaders = subsetOpenApiDocument.Components.Headers; - var targetExamples = subsetOpenApiDocument.Components.Examples; + var response = subsetOpenApiDocument.Paths["/items"].Operations[OperationType.Get]?.Responses?["200"]; + var responseHeader = response?.Headers["x-custom-header"]; + var mediaTypeExample = response?.Content["application/json"]?.Examples?.First().Value; + var targetHeaders = subsetOpenApiDocument.Components?.Headers; + var targetExamples = subsetOpenApiDocument.Components?.Examples; // Assert Assert.Same(doc.Servers, subsetOpenApiDocument.Servers); - Assert.False(responseHeader.UnresolvedReference); - Assert.False(mediaTypeExample.UnresolvedReference); + Assert.False(responseHeader?.UnresolvedReference); + Assert.False(mediaTypeExample?.UnresolvedReference); + Assert.NotNull(targetHeaders); Assert.Single(targetHeaders); + Assert.NotNull(targetExamples); Assert.Single(targetExamples); } From 4c2ea728fc47c37c6c776f4a4480f6ede5ed3e51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:08:48 +0000 Subject: [PATCH 518/720] Bump System.Text.Json from 8.0.4 to 8.0.5 Bumps [System.Text.Json](https://github.com/dotnet/runtime) from 8.0.4 to 8.0.5. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.4...v8.0.5) --- updated-dependencies: - dependency-name: System.Text.Json dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4ff96a2f..52513225 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -45,7 +45,7 @@ - +
From dd951107707df6d6043332bfcf4d460925f0225f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 07:02:39 +0000 Subject: [PATCH 519/720] Bump Microsoft.Extensions.Logging and Microsoft.Extensions.Logging.Abstractions Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime) and [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.Extensions.Logging` from 8.0.0 to 8.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.0...v8.0.1) Updates `Microsoft.Extensions.Logging.Abstractions` from 8.0.1 to 8.0.2 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.1...v8.0.2) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 52513225..54d3c612 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,8 +29,8 @@ - - + + From d321da2f805c69fee6d8c5c5c8adbeedf8d32c00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 21:12:13 +0000 Subject: [PATCH 520/720] Bump Microsoft.Extensions.Logging.Console from 8.0.0 to 8.0.1 Bumps [Microsoft.Extensions.Logging.Console](https://github.com/dotnet/runtime) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.0...v8.0.1) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Console dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 54d3c612..cab2dcf8 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -31,7 +31,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive From 3051d0d4fe6b1a6a7688e080db08ff02bcb284db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 07:22:22 +0000 Subject: [PATCH 521/720] Bump Microsoft.Extensions.Logging.Debug from 8.0.0 to 8.0.1 Bumps [Microsoft.Extensions.Logging.Debug](https://github.com/dotnet/runtime) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.0...v8.0.1) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Debug dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cab2dcf8..7e65e7f7 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -32,7 +32,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From ae588f7e368cb5f304f4710c5bd4a686c14a9a73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 21:36:05 +0000 Subject: [PATCH 522/720] Bump Microsoft.OpenApi.OData from 2.0.0-preview.3 to 2.0.0-preview.4 Bumps [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET.OData) from 2.0.0-preview.3 to 2.0.0-preview.4. - [Release notes](https://github.com/Microsoft/OpenAPI.NET.OData/releases) - [Commits](https://github.com/Microsoft/OpenAPI.NET.OData/commits) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7e65e7f7..550f483d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + @@ -39,7 +39,7 @@ - + From c387ae55206a5b3e025e331d077e83adadfe38e4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 5 Sep 2024 13:06:05 -0400 Subject: [PATCH 527/720] feat: bumps v3 patch version to 3.0.4 Signed-off-by: Vincent Biret --- .../UtilityFiles/docWithReusableHeadersAndExamples.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml index 3260ea43..60ee7e5c 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml @@ -1,4 +1,4 @@ -openapi: 3.0.1 +openapi: 3.0.4 info: title: Example with Multiple Operations and Local $refs version: 1.0.0 From 8c820073f72f0eb7497cc3fdcac9912053db39d4 Mon Sep 17 00:00:00 2001 From: Irvine Sunday Date: Mon, 28 Oct 2024 16:12:43 +0300 Subject: [PATCH 528/720] Bump up hidi and yoko lib versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3cea6d29..ce51fae5 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.13 + 1.4.14 OpenAPI.NET CLI tool for slicing OpenAPI documents true @@ -39,7 +39,7 @@ - + From 33bab312c5985d822d9eb4ef37553c0279b10fa9 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 6 Nov 2024 20:47:31 +0300 Subject: [PATCH 532/720] Update comment --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c981639e..7dfb5d79 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -77,7 +77,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog throw new IOException($"The file {options.Output} already exists. Please input a new file path."); } - // Default to yaml and OpenApiVersion 3 during csdl to OpenApi conversion + // Default to yaml and OpenApiVersion 3_1 during csdl to OpenApi conversion var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_1; From 1cd8ccb209a45b5b4e72434a2b27a150d4aaae21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 21:06:59 +0000 Subject: [PATCH 533/720] chore(deps): bump Microsoft.OData.Edm from 8.1.0 to 8.2.0 Bumps Microsoft.OData.Edm from 8.1.0 to 8.2.0. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 05461793..c47865eb 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From 834eafa2b6d8cb43e35d1ec5377dafbd555bdfb7 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 12 Nov 2024 13:20:16 +0300 Subject: [PATCH 534/720] Bump up lib and hidi versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c47865eb..07f2e3e7 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.15 + 1.4.16 OpenAPI.NET CLI tool for slicing OpenAPI documents true From 73306e6af467aaad77669328b33229440bcf4be2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 21:59:46 +0000 Subject: [PATCH 535/720] chore(deps): bump Microsoft.Extensions.Logging.Abstractions Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 8.0.2 to 9.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.2...v9.0.0) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 07f2e3e7..549864fa 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -30,7 +30,7 @@ - + From 2c94d308fb54ad82e724e9cf99e3640d964f111f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:27:38 +0300 Subject: [PATCH 536/720] chore(deps): bump System.Text.Json from 8.0.5 to 9.0.0 (#1920) Bumps [System.Text.Json](https://github.com/dotnet/runtime) from 8.0.5 to 9.0.0. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.5...v9.0.0) --- updated-dependencies: - dependency-name: System.Text.Json dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 07f2e3e7..8bdebc50 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -45,7 +45,7 @@ - + From 7ce3d1a3bb883a965851002bc3482826f6550c19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 21:21:07 +0000 Subject: [PATCH 537/720] chore(deps): bump Microsoft.Extensions.Logging and Microsoft.Extensions.Logging.Abstractions Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime) and [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.Extensions.Logging` from 8.0.1 to 9.0.0 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.1...v9.0.0) Updates `Microsoft.Extensions.Logging.Abstractions` from 9.0.0 to 9.0.0 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.0) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 72016397..ecdb2f38 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,7 +29,7 @@ - + From 87070e2840d8e702493cd8b60397cf5b9605f12a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 21:21:26 +0000 Subject: [PATCH 538/720] chore(deps): bump Microsoft.OData.Edm from 8.2.0 to 8.2.1 Bumps Microsoft.OData.Edm from 8.2.0 to 8.2.1. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 72016397..0cd90d00 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From c3d6696eb88cc2e5e298f3ee71e2fab3a56c2bd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 21:22:21 +0000 Subject: [PATCH 539/720] chore(deps): bump Microsoft.VisualStudio.Threading.Analyzers Bumps [Microsoft.VisualStudio.Threading.Analyzers](https://github.com/microsoft/vs-threading) from 17.11.20 to 17.12.19. - [Release notes](https://github.com/microsoft/vs-threading/releases) - [Commits](https://github.com/microsoft/vs-threading/commits) --- updated-dependencies: - dependency-name: Microsoft.VisualStudio.Threading.Analyzers dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 72016397..9af98f51 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -33,7 +33,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 9fe9a707c94b53649670c85a66219a722a694cf9 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 14 Nov 2024 07:32:31 -0500 Subject: [PATCH 540/720] chore: removes newtonsoft dependency all together --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 39783183..07a571a5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,6 @@ - From 9c12f982cbddb3c9e9bd49fac75c6854cc396242 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Nov 2024 02:14:47 +0300 Subject: [PATCH 541/720] chore(deps): bump Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console and System.Text.Json (#1932) Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime), [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime), [Microsoft.Extensions.Logging.Console](https://github.com/dotnet/runtime) and [System.Text.Json](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.Extensions.Logging` from 9.0.0 to 9.0.0 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.0) Updates `Microsoft.Extensions.Logging.Abstractions` from 9.0.0 to 9.0.0 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.0) Updates `Microsoft.Extensions.Logging.Console` from 8.0.1 to 9.0.0 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.1...v9.0.0) Updates `System.Text.Json` from 9.0.0 to 9.0.0 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.0) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 995d5000..ec5d4c1c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -31,7 +31,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive From 6f77feac910ce7433c61b3d4cf4216c572b5e2db Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 19 Nov 2024 13:15:39 +0300 Subject: [PATCH 542/720] Use range for STJ reference and suppress warnings --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ec5d4c1c..1e4f0bc9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -45,7 +45,9 @@ - + + + From 77093f7d7fce717142f0f6451e5691cce4583b2f Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 19 Nov 2024 13:21:57 +0300 Subject: [PATCH 543/720] Revert change for hidi --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1e4f0bc9..ec5d4c1c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -45,9 +45,7 @@ - - - + From 42bdfd80a41555e4fc276612238f33fef04ffc50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:39:39 +0000 Subject: [PATCH 544/720] chore(deps): bump Microsoft.OData.Edm from 8.2.1 to 8.2.2 Bumps Microsoft.OData.Edm from 8.2.1 to 8.2.2. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ec5d4c1c..2b0582db 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From 6b7db0ffc544af0892f5caf4621a8b330195e76e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:40:22 +0000 Subject: [PATCH 545/720] chore(deps): bump Microsoft.NET.Test.Sdk from 17.11.1 to 17.12.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.11.1 to 17.12.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.11.1...v17.12.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 07a571a5..7b214091 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,7 +12,7 @@ - + From 372464f739e99f00d1e20641363affa2c63afd35 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 28 Nov 2024 12:16:06 +0300 Subject: [PATCH 546/720] Use the provided format in hidi options --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 7dfb5d79..b100eafb 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -66,7 +66,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog #pragma warning restore CA1308 // Normalize strings to uppercase options.Output = new($"./output{inputExtension}"); - }; + } if (options.CleanOutput && options.Output.Exists) { @@ -97,8 +97,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog } // Load OpenAPI document - var format = OpenApiModelFactory.GetFormat(options.OpenApi); - var document = await GetOpenApiAsync(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, openApiFormat.GetDisplayName(), logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); if (options.FilterOptions != null) { @@ -254,7 +253,7 @@ private static async Task GetOpenApiAsync(HidiOptions options, else if (!string.IsNullOrEmpty(options.OpenApi)) { stream = await GetStreamAsync(options.OpenApi, logger, cancellationToken).ConfigureAwait(false); - var result = await ParseOpenApiAsync(options.OpenApi, options.InlineExternal, logger, stream, cancellationToken).ConfigureAwait(false); + var result = await ParseOpenApiAsync(options.OpenApi, format, options.InlineExternal, logger, stream, cancellationToken).ConfigureAwait(false); document = result.OpenApiDocument; } else throw new InvalidOperationException("No input file path or URL provided"); @@ -351,8 +350,8 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe try { using var stream = await GetStreamAsync(openApi, logger, cancellationToken).ConfigureAwait(false); - - result = await ParseOpenApiAsync(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); + var openApiFormat = !string.IsNullOrEmpty(openApi) ? GetOpenApiFormat(openApi, logger) : OpenApiFormat.Yaml; + result = await ParseOpenApiAsync(openApi, openApiFormat.GetDisplayName(),false, logger, stream, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Calculating statistics")) { @@ -380,7 +379,7 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe return result.OpenApiDiagnostic.Errors.Count == 0; } - private static async Task ParseOpenApiAsync(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) + private static async Task ParseOpenApiAsync(string openApiFile, string format, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) { ReadResult result; var stopwatch = Stopwatch.StartNew(); @@ -396,7 +395,6 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) }; - var format = OpenApiModelFactory.GetFormat(openApiFile); result = await OpenApiDocument.LoadAsync(stream, format, settings, cancellationToken).ConfigureAwait(false); logger.LogTrace("{Timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); @@ -587,8 +585,8 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl throw new ArgumentException("Please input a file path or URL"); } - var format = OpenApiModelFactory.GetFormat(options.OpenApi); - var document = await GetOpenApiAsync(options, format, logger, null, cancellationToken).ConfigureAwait(false); + var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); + var document = await GetOpenApiAsync(options, openApiFormat.GetDisplayName(), logger, null, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Creating diagram")) { @@ -748,9 +746,11 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg options.OpenApi = apiDependency.ApiDescripionUrl; } + var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) + ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); + // Load OpenAPI document - var format = OpenApiModelFactory.GetFormat(options.OpenApi); - var document = await GetOpenApiAsync(options, format, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, openApiFormat.GetDisplayName(), logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); From 4175d384f40fe46de0825d3a9bd0e12110826218 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 28 Nov 2024 12:18:28 +0300 Subject: [PATCH 547/720] Clean up tests; refactor to use async --- .../Services/OpenApiFilterServiceTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 3bd9efd2..602a6902 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -224,7 +224,7 @@ public void ThrowsInvalidOperationExceptionInCreatePredicateWhenInvalidArguments } [Fact] - public void CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() + public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() { // Arrange var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "docWithReusableHeadersAndExamples.yaml"); @@ -232,7 +232,7 @@ public void CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() // Act using var stream = File.OpenRead(filePath); - var doc = OpenApiDocument.Load(stream, "yaml").OpenApiDocument; + var doc = (await OpenApiDocument.LoadAsync(stream, "yaml")).OpenApiDocument; var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); From bd107ae919a6412ea2ce3c54dbd0459889a669df Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 9 Dec 2024 10:34:05 +0300 Subject: [PATCH 548/720] Rename Read Result properties --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 10 +++++----- .../Services/OpenApiFilterServiceTests.cs | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 7dfb5d79..8a121f7a 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -255,7 +255,7 @@ private static async Task GetOpenApiAsync(HidiOptions options, { stream = await GetStreamAsync(options.OpenApi, logger, cancellationToken).ConfigureAwait(false); var result = await ParseOpenApiAsync(options.OpenApi, options.InlineExternal, logger, stream, cancellationToken).ConfigureAwait(false); - document = result.OpenApiDocument; + document = result.Document; } else throw new InvalidOperationException("No input file path or URL provided"); @@ -358,7 +358,7 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe { var statsVisitor = new StatsVisitor(); var walker = new OpenApiWalker(statsVisitor); - walker.Walk(result.OpenApiDocument); + walker.Walk(result.Document); logger.LogTrace("Finished walking through the OpenApi document. Generating a statistics report.."); #pragma warning disable CA2254 @@ -377,7 +377,7 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe if (result is null) return null; - return result.OpenApiDiagnostic.Errors.Count == 0; + return result.Diagnostic.Errors.Count == 0; } private static async Task ParseOpenApiAsync(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) @@ -439,7 +439,7 @@ public static OpenApiDocument FixReferences(OpenApiDocument document, string for var sb = new StringBuilder(); document.SerializeAsV3(new OpenApiYamlWriter(new StringWriter(sb))); - var doc = OpenApiDocument.Parse(sb.ToString(), format).OpenApiDocument; + var doc = OpenApiDocument.Parse(sb.ToString(), format).Document; return doc; } @@ -649,7 +649,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl private static void LogErrors(ILogger logger, ReadResult result) { - var context = result.OpenApiDiagnostic; + var context = result.Diagnostic; if (context.Errors.Count != 0) { using (logger.BeginScope("Detected errors")) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 3bd9efd2..01c4c59f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -232,7 +232,7 @@ public void CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() // Act using var stream = File.OpenRead(filePath); - var doc = OpenApiDocument.Load(stream, "yaml").OpenApiDocument; + var doc = OpenApiDocument.Load(stream, "yaml").Document; var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); From 87ab7934e04d5b7f1240e113d737076e059dad9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 21:31:11 +0000 Subject: [PATCH 549/720] chore(deps): bump Microsoft.OData.Edm from 8.2.2 to 8.2.3 Bumps Microsoft.OData.Edm from 8.2.2 to 8.2.3. --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 2b0582db..0a31b119 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From db4f91647a3df3b2ff8e353a10ac35cb143a73b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 21:50:20 +0000 Subject: [PATCH 550/720] chore(deps): bump xunit.runner.visualstudio from 2.8.2 to 3.0.0 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 2.8.2 to 3.0.0. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/2.8.2...3.0.0) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 7b214091..a0cc5337 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 6892c4f6ae64a54e37b251d68408b69f9b68f260 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Thu, 19 Dec 2024 15:18:44 +0300 Subject: [PATCH 551/720] Fix issues from resolving merge conflicts --- .../Services/OpenApiFilterServiceTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index f51c1ec9..12293c4e 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -232,7 +232,7 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( // Act using var stream = File.OpenRead(filePath); - var doc = OpenApiDocument.Load(stream, "yaml").Document; + var doc = (await OpenApiDocument.LoadAsync(stream, "yaml")).Document; var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); From 3381c718b2454592a57eab6a62d5df7349532957 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 19 Dec 2024 07:56:20 -0500 Subject: [PATCH 552/720] chore: aligns parameter names Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index b6af0777..d1f6f7f6 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -61,7 +61,7 @@ public override void Visit(OpenApiOperation operation) public int LinkCount { get; set; } - public override void Visit(OpenApiLink operation) + public override void Visit(OpenApiLink link) { LinkCount++; } From 995645b4d82818349d75dcedec863d2d34277502 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 19 Dec 2024 09:22:10 -0500 Subject: [PATCH 553/720] fix: sets hidi version to a preview Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 0a31b119..a42c9187 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 1.4.16 + 2.0.0-preview3 OpenAPI.NET CLI tool for slicing OpenAPI documents true From c0f70421012ad376f7c7a54a1981d87bf3b8d9fb Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 20 Dec 2024 08:05:21 -0500 Subject: [PATCH 554/720] chore: updates api manifest dependency Signed-off-by: Vincent Biret --- .../Microsoft.OpenApi.Hidi.csproj | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 17 +++++++---------- .../UtilityFiles/exampleapimanifest.json | 3 ++- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index a42c9187..04c42ee4 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -40,7 +40,7 @@ - + From eb832f9b91906327ad10246b7d45f2bd655927f6 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 31 Dec 2024 15:16:16 -0500 Subject: [PATCH 557/720] fix: side effects in tag references Signed-off-by: Vincent Biret --- .../UtilityFiles/OpenApiDocumentMock.cs | 198 ++++++++---------- 1 file changed, 83 insertions(+), 115 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 91dd5991..edbf143f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -4,6 +4,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; namespace Microsoft.OpenApi.Tests.UtilityFiles { @@ -19,6 +20,17 @@ public static class OpenApiDocumentMock public static OpenApiDocument CreateOpenApiDocument() { var applicationJsonMediaType = "application/json"; + const string getTeamsActivityByPeriodPath = "/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"; + const string getTeamsActivityByDatePath = "/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"; + const string usersPath = "/users"; + const string usersByIdPath = "/users/{user-id}"; + const string messagesByIdPath = "/users/{user-id}/messages/{message-id}"; + const string administrativeUnitRestorePath = "/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"; + const string logoPath = "/applications/{application-id}/logo"; + const string securityProfilesPath = "/security/hostSecurityProfiles"; + const string communicationsCallsKeepAlivePath = "/communications/calls/{call-id}/microsoft.graph.keepAlive"; + const string eventsDeltaPath = "/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"; + const string refPath = "/applications/{application-id}/createdOnBehalfOf/$ref"; var document = new OpenApiDocument { @@ -57,22 +69,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/reports/microsoft.graph.getTeamsUserActivityCounts(period={period})"] = new() + [getTeamsActivityByPeriodPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "reports.Functions" - } - } - }, OperationId = "reports.getTeamsUserActivityCounts", Summary = "Invoke function getTeamsUserActivityUserCounts", Parameters = new List @@ -131,22 +134,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/reports/microsoft.graph.getTeamsUserActivityUserDetail(date={date})"] = new() + [getTeamsActivityByDatePath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "reports.Functions" - } - } - }, OperationId = "reports.getTeamsUserActivityUserDetail-a3f1", Summary = "Invoke function getTeamsUserActivityUserDetail", Parameters = new List @@ -203,22 +197,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users"] = new() + [usersPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "users.user" - } - } - }, OperationId = "users.user.ListUser", Summary = "Get entities from users", Responses = new() @@ -266,22 +251,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users/{user-id}"] = new() + [usersByIdPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "users.user" - } - } - }, OperationId = "users.user.GetUser", Summary = "Get entity from users by key", Responses = new() @@ -315,15 +291,6 @@ public static OpenApiDocument CreateOpenApiDocument() { OperationType.Patch, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "users.user" - } - } - }, OperationId = "users.user.UpdateUser", Summary = "Update entity in users", Responses = new() @@ -339,22 +306,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/users/{user-id}/messages/{message-id}"] = new() + [messagesByIdPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "users.message" - } - } - }, OperationId = "users.GetMessages", Summary = "Get messages from users", Description = "The messages in a mailbox or folder. Read-only. Nullable.", @@ -403,22 +361,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/administrativeUnits/{administrativeUnit-id}/microsoft.graph.restore"] = new() + [administrativeUnitRestorePath] = new() { Operations = new Dictionary { { OperationType.Post, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "administrativeUnits.Actions" - } - } - }, OperationId = "administrativeUnits.restore", Summary = "Invoke action restore", Parameters = new List @@ -470,22 +419,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/applications/{application-id}/logo"] = new() + [logoPath] = new() { Operations = new Dictionary { { OperationType.Put, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "applications.application" - } - } - }, OperationId = "applications.application.UpdateLogo", Summary = "Update media content for application in applications", Responses = new() @@ -501,22 +441,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/security/hostSecurityProfiles"] = new() + [securityProfilesPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "security.hostSecurityProfile" - } - } - }, OperationId = "security.ListHostSecurityProfiles", Summary = "Get hostSecurityProfiles from security", Responses = new() @@ -564,22 +495,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/communications/calls/{call-id}/microsoft.graph.keepAlive"] = new() + [communicationsCallsKeepAlivePath] = new() { Operations = new Dictionary { { OperationType.Post, new OpenApiOperation { - Tags = new List - { - { - new() - { - Name = "communications.Actions" - } - } - }, OperationId = "communications.calls.call.keepAlive", Summary = "Invoke action keepAlive", Parameters = new List @@ -621,20 +543,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/groups/{group-id}/events/{event-id}/calendar/events/microsoft.graph.delta"] = new() + [eventsDeltaPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - new() - { - Name = "groups.Functions" - } - }, OperationId = "groups.group.events.event.calendar.events.delta", Summary = "Invoke function delta", Parameters = new List @@ -711,20 +626,13 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - ["/applications/{application-id}/createdOnBehalfOf/$ref"] = new() + [refPath] = new() { Operations = new Dictionary { { OperationType.Get, new OpenApiOperation { - Tags = new List - { - new() - { - Name = "applications.directoryObject" - } - }, OperationId = "applications.GetRefCreatedOnBehalfOf", Summary = "Get ref of createdOnBehalfOf from applications" } @@ -755,8 +663,68 @@ public static OpenApiDocument CreateOpenApiDocument() } } } + }, + Tags = new List + { + new() + { + Name = "reports.Functions", + Description = "The reports.Functions operations" + }, + new() + { + Name = "users.user", + Description = "The users.user operations" + }, + new() + { + Name = "users.message", + Description = "The users.message operations" + }, + new() + { + Name = "administrativeUnits.Actions", + Description = "The administrativeUnits.Actions operations" + }, + new() + { + Name = "applications.application", + Description = "The applications.application operations" + }, + new() + { + Name = "security.hostSecurityProfile", + Description = "The security.hostSecurityProfile operations" + }, + new() + { + Name = "communications.Actions", + Description = "The communications.Actions operations" + }, + new() + { + Name = "groups.Functions", + Description = "The groups.Functions operations" + }, + new() + { + Name = "applications.directoryObject", + Description = "The applications.directoryObject operations" + } } }; + document.Paths[getTeamsActivityByPeriodPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("reports.Functions", document)); + document.Paths[getTeamsActivityByDatePath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("reports.Functions", document)); + document.Paths[usersPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.user", document)); + document.Paths[usersByIdPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.user", document)); + document.Paths[usersByIdPath].Operations[OperationType.Patch].Tags!.Add(new OpenApiTagReference("users.user", document)); + document.Paths[messagesByIdPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.message", document)); + document.Paths[administrativeUnitRestorePath].Operations[OperationType.Post].Tags!.Add(new OpenApiTagReference("administrativeUnits.Actions", document)); + document.Paths[logoPath].Operations[OperationType.Put].Tags!.Add(new OpenApiTagReference("applications.application", document)); + document.Paths[securityProfilesPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("security.hostSecurityProfile", document)); + document.Paths[communicationsCallsKeepAlivePath].Operations[OperationType.Post].Tags!.Add(new OpenApiTagReference("communications.Actions", document)); + document.Paths[eventsDeltaPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("groups.Functions", document)); + document.Paths[refPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("applications.directoryObject", document)); return document; } } From 4ed3af2cee1506a2222f386a20d01edadf06068c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:47:22 +0000 Subject: [PATCH 558/720] chore(deps): bump coverlet.collector from 6.0.2 to 6.0.3 Bumps [coverlet.collector](https://github.com/coverlet-coverage/coverlet) from 6.0.2 to 6.0.3. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.2...v6.0.3) --- updated-dependencies: - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index a0cc5337..7dbfbed6 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + From bdd7e247a2c865263d86e6e604ae1b1721f75e6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:17:00 +0000 Subject: [PATCH 559/720] chore(deps): bump coverlet.msbuild from 6.0.2 to 6.0.3 Bumps [coverlet.msbuild](https://github.com/coverlet-coverage/coverlet) from 6.0.2 to 6.0.3. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.2...v6.0.3) --- updated-dependencies: - dependency-name: coverlet.msbuild dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 7dbfbed6..c04e5b14 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -11,7 +11,7 @@
- + From c70a4e6b1be0903ea34a2e31380fc9b13157e06b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 21:52:48 +0000 Subject: [PATCH 560/720] chore(deps): bump xunit from 2.9.2 to 2.9.3 Bumps [xunit](https://github.com/xunit/xunit) from 2.9.2 to 2.9.3. - [Commits](https://github.com/xunit/xunit/compare/v2-2.9.2...v2-2.9.3) --- updated-dependencies: - dependency-name: xunit dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c04e5b14..2a614ea5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 2bc41df7cba3de330ea8c1e33d9a0f001c01a40f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 8 Jan 2025 17:24:42 -0500 Subject: [PATCH 561/720] fix: inconsistant API surface usage --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 069f8cd6..c7bf1a55 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -113,7 +113,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(document); } - WriteOpenApi(options, openApiFormat, openApiVersion, document, logger); + await WriteOpenApiAsync(options, openApiFormat, openApiVersion, document, logger, cancellationToken).ConfigureAwait(false); } catch (TaskCanceledException) { @@ -191,7 +191,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, return document; } - private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger) + private static async Task WriteOpenApiAsync(HidiOptions options, OpenApiFormat openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger, CancellationToken cancellationToken) { using (logger.BeginScope("Output")) { @@ -216,11 +216,11 @@ private static void WriteOpenApi(HidiOptions options, OpenApiFormat openApiForma var stopwatch = new Stopwatch(); stopwatch.Start(); - document.Serialize(writer, openApiVersion); + await document.SerializeAsync(writer, openApiVersion, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); logger.LogTrace("Finished serializing in {ElapsedMilliseconds}ms", stopwatch.ElapsedMilliseconds); - textWriter.Flush(); + await textWriter.FlushAsync(cancellationToken).ConfigureAwait(false); } } @@ -769,7 +769,7 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg // Write OpenAPI to Output folder options.Output = new(Path.Combine(options.OutputFolder, "openapi.json")); options.TerseOutput = true; - WriteOpenApi(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_1, document, logger); + await WriteOpenApiAsync(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_1, document, logger, cancellationToken).ConfigureAwait(false); // Create OpenAIPluginManifest from ApiDependency and OpenAPI document var manifest = new OpenAIPluginManifest(document.Info?.Title ?? "Title", document.Info?.Title ?? "Title", "https://go.microsoft.com/fwlink/?LinkID=288890", document.Info?.Contact?.Email ?? "placeholder@contoso.com", document.Info?.License?.Url.ToString() ?? "https://placeholderlicenseurl.com") From 01ad41a5c4d5d8690fbda06c82f938f08dce4fd4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 21:23:16 +0000 Subject: [PATCH 562/720] chore(deps): bump xunit.runner.visualstudio from 3.0.0 to 3.0.1 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/3.0.0...3.0.1) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 2a614ea5..ad4dff3f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 32280b444be063321697020b2500a7b707f341e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 21:28:42 +0000 Subject: [PATCH 563/720] chore(deps): bump Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions and Microsoft.Extensions.Logging.Debug Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime), [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) and [Microsoft.Extensions.Logging.Debug](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.Extensions.Logging` from 9.0.0 to 9.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.1) Updates `Microsoft.Extensions.Logging.Abstractions` from 9.0.0 to 9.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.0...v9.0.1) Updates `Microsoft.Extensions.Logging.Debug` from 8.0.1 to 9.0.1 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.1...v9.0.1) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 52672405..46c9a197 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 5c2a6312db263313e45314cacf38c8621d528ed6 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Jan 2025 09:26:52 -0500 Subject: [PATCH 564/720] chore: removes unused usings Signed-off-by: Vincent Biret --- .../Services/OpenApiFilterServiceTests.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 12293c4e..77f2c9ae 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -3,11 +3,9 @@ using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; using Moq; -using SharpYaml.Tokens; using Xunit; namespace Microsoft.OpenApi.Hidi.Tests From 3947eb0902d3f56c362e42f8c3aaf7a12587e104 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:30:48 +0000 Subject: [PATCH 565/720] chore(deps): bump coverlet.msbuild from 6.0.3 to 6.0.4 Bumps [coverlet.msbuild](https://github.com/coverlet-coverage/coverlet) from 6.0.3 to 6.0.4. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.3...v6.0.4) --- updated-dependencies: - dependency-name: coverlet.msbuild dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index ad4dff3f..c009e1f0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -11,7 +11,7 @@
- + From 9cd0a8f619ebcf5a82a7c0529fe9307943265714 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 21:48:12 +0000 Subject: [PATCH 566/720] chore(deps): bump coverlet.collector from 6.0.3 to 6.0.4 Bumps [coverlet.collector](https://github.com/coverlet-coverage/coverlet) from 6.0.3 to 6.0.4. - [Release notes](https://github.com/coverlet-coverage/coverlet/releases) - [Commits](https://github.com/coverlet-coverage/coverlet/compare/v6.0.3...v6.0.4) --- updated-dependencies: - dependency-name: coverlet.collector dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index c009e1f0..b611d0b3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + From 1349450cdaf5cfb846ef78a6182f6ea4684ad784 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 21 Jan 2025 09:16:18 +0300 Subject: [PATCH 567/720] Bump preview versions --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 46c9a197..1e13eb15 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,7 @@ enable hidi ./../../artifacts - 2.0.0-preview4 + 2.0.0-preview5 OpenAPI.NET CLI tool for slicing OpenAPI documents true From c24a08605b2f19950ccae3acb5bd251160320433 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 24 Jan 2025 13:17:42 -0500 Subject: [PATCH 568/720] fix: proxy design pattern implementation for OpenAPiExample Signed-off-by: Vincent Biret --- .../Services/OpenApiFilterServiceTests.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 77f2c9ae..e8c49bbc 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; using Moq; @@ -243,7 +244,8 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( // Assert Assert.Same(doc.Servers, subsetOpenApiDocument.Servers); Assert.False(responseHeader?.UnresolvedReference); - Assert.False(mediaTypeExample?.UnresolvedReference); + var exampleReference = Assert.IsType(mediaTypeExample); + Assert.False(exampleReference?.UnresolvedReference); Assert.NotNull(targetHeaders); Assert.Single(targetHeaders); Assert.NotNull(targetExamples); From c453dd9e34cbe6e0cea2d8c3028d931a7425468e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 24 Jan 2025 13:49:34 -0500 Subject: [PATCH 569/720] fix: callback reference proxy implementation --- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index d1f6f7f6..a0dc1ae0 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Hidi @@ -68,7 +69,7 @@ public override void Visit(OpenApiLink link) public int CallbackCount { get; set; } - public override void Visit(OpenApiCallback callback) + public override void Visit(IOpenApiCallback callback) { CallbackCount++; } From 3dcf4ef1d4584392d6b81b979db994d266c212f3 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 24 Jan 2025 14:51:08 -0500 Subject: [PATCH 570/720] fix: Open API header proxy design pattern implementation Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- .../Services/OpenApiFilterServiceTests.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index a0dc1ae0..a6ea032f 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -27,7 +27,7 @@ public override void Visit(OpenApiSchema schema) public int HeaderCount { get; set; } - public override void Visit(IDictionary headers) + public override void Visit(IDictionary headers) { HeaderCount++; } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index e8c49bbc..8f0d0400 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -243,7 +243,8 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( // Assert Assert.Same(doc.Servers, subsetOpenApiDocument.Servers); - Assert.False(responseHeader?.UnresolvedReference); + var headerReference = Assert.IsType(responseHeader); + Assert.False(headerReference.UnresolvedReference); var exampleReference = Assert.IsType(mediaTypeExample); Assert.False(exampleReference?.UnresolvedReference); Assert.NotNull(targetHeaders); From 47ddedf298737cfb53d0a20d51b6b7a77f94b7a3 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 24 Jan 2025 15:30:48 -0500 Subject: [PATCH 571/720] fix: open API link reference proxy design pattern implementation Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index a6ea032f..700918f4 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -62,7 +62,7 @@ public override void Visit(OpenApiOperation operation) public int LinkCount { get; set; } - public override void Visit(OpenApiLink link) + public override void Visit(IOpenApiLink link) { LinkCount++; } From a6fc477ab1166eaecb230023de027a940e496253 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 24 Jan 2025 17:33:09 -0500 Subject: [PATCH 572/720] fix: parameter reference proxy design pattern implementation Signed-off-by: Vincent Biret --- .../Formatters/PowerShellFormatter.cs | 14 ++++---- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- .../Formatters/PowerShellFormatterTests.cs | 9 ++--- .../Services/OpenApiFilterServiceTests.cs | 9 ++--- .../UtilityFiles/OpenApiDocumentMock.cs | 35 ++++++++++--------- 5 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index c2bbc97d..10979938 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -7,6 +7,7 @@ using Humanizer.Inflections; using Microsoft.OpenApi.Hidi.Extensions; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Hidi.Formatters @@ -69,13 +70,13 @@ public override void Visit(OpenApiOperation operation) var operationId = operation.OperationId; var operationTypeExtension = operation.Extensions?.GetExtension("x-ms-docs-operation-type"); - if (operationTypeExtension.IsEquals("function")) - operation.Parameters = ResolveFunctionParameters(operation.Parameters ?? new List()); + if (operationTypeExtension.IsEquals("function") && operation.Parameters is { Count :> 0}) + ResolveFunctionParameters(operation.Parameters); // Order matters. Resolve operationId. operationId = RemoveHashSuffix(operationId); if (operationTypeExtension.IsEquals("action") || operationTypeExtension.IsEquals("function")) - operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? new List()); + operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? new List()); operationId = SingularizeAndDeduplicateOperationId(operationId.SplitByChar('.')); operationId = ResolveODataCastOperationId(operationId); operationId = ResolveByRefOperationId(operationId); @@ -143,7 +144,7 @@ private static string RemoveHashSuffix(string operationId) return s_hashSuffixRegex.Match(operationId).Value; } - private static string RemoveKeyTypeSegment(string operationId, IList parameters) + private static string RemoveKeyTypeSegment(string operationId, IList parameters) { var segments = operationId.SplitByChar('.'); foreach (var parameter in parameters) @@ -157,9 +158,9 @@ private static string RemoveKeyTypeSegment(string operationId, IList ResolveFunctionParameters(IList parameters) + private static void ResolveFunctionParameters(IList parameters) { - foreach (var parameter in parameters.Where(static p => p.Content?.Any() ?? false)) + foreach (var parameter in parameters.OfType().Where(static p => p.Content?.Any() ?? false)) { // Replace content with a schema object of type array // for structured or collection-valued function parameters @@ -173,7 +174,6 @@ private static IList ResolveFunctionParameters(IList - { - new() + Parameters = + [ + new OpenApiParameter() { Name = "ids", In = ParameterLocation.Query, @@ -133,7 +134,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() } } } - }, + ], Extensions = new Dictionary { { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 8f0d0400..0dceb612 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; @@ -121,9 +122,9 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() { OperationType.Get, new() }, { OperationType.Patch, new() } }, - Parameters = new List - { - new() + Parameters = + [ + new OpenApiParameter() { Name = "id", In = ParameterLocation.Path, @@ -133,7 +134,7 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() Type = JsonSchemaType.String } } - } + ] } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index edbf143f..f2f6386c 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -4,6 +4,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Models.References; namespace Microsoft.OpenApi.Tests.UtilityFiles @@ -78,10 +79,10 @@ public static OpenApiDocument CreateOpenApiDocument() { OperationId = "reports.getTeamsUserActivityCounts", Summary = "Invoke function getTeamsUserActivityUserCounts", - Parameters = new List + Parameters = new List { { - new() + new OpenApiParameter() { Name = "period", In = ParameterLocation.Path, @@ -118,10 +119,10 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Parameters = new List + Parameters = new List { { - new() + new OpenApiParameter() { Name = "period", In = ParameterLocation.Path, @@ -143,10 +144,10 @@ public static OpenApiDocument CreateOpenApiDocument() { OperationId = "reports.getTeamsUserActivityUserDetail-a3f1", Summary = "Invoke function getTeamsUserActivityUserDetail", - Parameters = new List + Parameters = new List { { - new() + new OpenApiParameter() { Name = "period", In = ParameterLocation.Path, @@ -183,9 +184,9 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Parameters = new List + Parameters = new List { - new() + new OpenApiParameter() { Name = "period", In = ParameterLocation.Path, @@ -316,9 +317,9 @@ public static OpenApiDocument CreateOpenApiDocument() OperationId = "users.GetMessages", Summary = "Get messages from users", Description = "The messages in a mailbox or folder. Read-only. Nullable.", - Parameters = new List + Parameters = new List { - new() + new OpenApiParameter() { Name = "$select", In = ParameterLocation.Query, @@ -370,10 +371,10 @@ public static OpenApiDocument CreateOpenApiDocument() { OperationId = "administrativeUnits.restore", Summary = "Invoke action restore", - Parameters = new List + Parameters = new List { { - new() + new OpenApiParameter() { Name = "administrativeUnit-id", In = ParameterLocation.Path, @@ -504,9 +505,9 @@ public static OpenApiDocument CreateOpenApiDocument() { OperationId = "communications.calls.call.keepAlive", Summary = "Invoke action keepAlive", - Parameters = new List + Parameters = new List { - new() + new OpenApiParameter() { Name = "call-id", In = ParameterLocation.Path, @@ -552,9 +553,9 @@ public static OpenApiDocument CreateOpenApiDocument() { OperationId = "groups.group.events.event.calendar.events.delta", Summary = "Invoke function delta", - Parameters = new List + Parameters = new List { - new() + new OpenApiParameter() { Name = "group-id", In = ParameterLocation.Path, @@ -571,7 +572,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - new() + new OpenApiParameter() { Name = "event-id", In = ParameterLocation.Path, From 1579bac10ee9522e4fe7bb1cc0af524174d98453 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 27 Jan 2025 12:21:56 -0500 Subject: [PATCH 573/720] fix: path item reference implementation Signed-off-by: Vincent Biret --- .../Formatters/PowerShellFormatter.cs | 6 ++--- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- .../Formatters/PowerShellFormatterTests.cs | 4 ++-- .../Services/OpenApiFilterServiceTests.cs | 4 ++-- .../UtilityFiles/OpenApiDocumentMock.cs | 24 +++++++++---------- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index 10979938..a6b6380d 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -51,7 +51,7 @@ public override void Visit(OpenApiSchema schema) base.Visit(schema); } - public override void Visit(OpenApiPathItem pathItem) + public override void Visit(IOpenApiPathItem pathItem) { if (pathItem.Operations.TryGetValue(OperationType.Put, out var value) && value.OperationId != null) @@ -81,13 +81,13 @@ public override void Visit(OpenApiOperation operation) operationId = ResolveODataCastOperationId(operationId); operationId = ResolveByRefOperationId(operationId); // Verb segment resolution should always be last. user.get -> user_Get - operationId = ResolveVerbSegmentInOpertationId(operationId); + operationId = ResolveVerbSegmentInOperationId(operationId); operation.OperationId = operationId; base.Visit(operation); } - private static string ResolveVerbSegmentInOpertationId(string operationId) + private static string ResolveVerbSegmentInOperationId(string operationId) { var charPos = operationId.LastIndexOf('.', operationId.Length - 1); if (operationId.Contains('_', StringComparison.OrdinalIgnoreCase) || charPos < 0) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 7ffe7706..53f52ab3 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -34,7 +34,7 @@ public override void Visit(IDictionary headers) public int PathItemCount { get; set; } - public override void Visit(OpenApiPathItem pathItem) + public override void Visit(IOpenApiPathItem pathItem) { PathItemCount++; } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 8d0e6010..abf7232d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -28,7 +28,7 @@ public void FormatOperationIdsInOpenAPIDocument(string operationId, string expec Servers = new List { new() { Url = "https://localhost/" } }, Paths = new() { - { path, new() { + { path, new OpenApiPathItem() { Operations = new Dictionary { { operationType, new() { OperationId = operationId } } @@ -102,7 +102,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() Info = new() { Title = "Test", Version = "1.0" }, Servers = new List { new() { Url = "https://localhost/" } }, Paths = new() { - { "/foo", new() + { "/foo", new OpenApiPathItem() { Operations = new Dictionary { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 0dceb612..ca4416ae 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -78,7 +78,7 @@ public void TestPredicateFiltersUsingRelativeRequestUrls() Servers = new List { new() { Url = "https://localhost/" } }, Paths = new() { - {"/foo", new() { + {"/foo", new OpenApiPathItem() { Operations = new Dictionary { { OperationType.Get, new() }, @@ -115,7 +115,7 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() Servers = new List { new() { Url = "https://localhost/" } }, Paths = new() { - ["/test/{id}"] = new() + ["/test/{id}"] = new OpenApiPathItem() { Operations = new Dictionary { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index f2f6386c..3c3644ad 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -49,7 +49,7 @@ public static OpenApiDocument CreateOpenApiDocument() }, Paths = new() { - ["/"] = new() // root path + ["/"] = new OpenApiPathItem() // root path { Operations = new Dictionary { @@ -70,7 +70,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [getTeamsActivityByPeriodPath] = new() + [getTeamsActivityByPeriodPath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -135,7 +135,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [getTeamsActivityByDatePath] = new() + [getTeamsActivityByDatePath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -198,7 +198,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [usersPath] = new() + [usersPath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -252,7 +252,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [usersByIdPath] = new() + [usersByIdPath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -307,7 +307,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [messagesByIdPath] = new() + [messagesByIdPath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -362,7 +362,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [administrativeUnitRestorePath] = new() + [administrativeUnitRestorePath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -420,7 +420,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [logoPath] = new() + [logoPath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -442,7 +442,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [securityProfilesPath] = new() + [securityProfilesPath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -496,7 +496,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [communicationsCallsKeepAlivePath] = new() + [communicationsCallsKeepAlivePath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -544,7 +544,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [eventsDeltaPath] = new() + [eventsDeltaPath] = new OpenApiPathItem() { Operations = new Dictionary { @@ -627,7 +627,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - [refPath] = new() + [refPath] = new OpenApiPathItem() { Operations = new Dictionary { From be1fca4e280173d28cbb9e522602cd9c42e6e4b2 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 27 Jan 2025 13:40:17 -0500 Subject: [PATCH 574/720] fix: proxy design pattern implementation for request body Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 53f52ab3..645f9431 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -41,7 +41,7 @@ public override void Visit(IOpenApiPathItem pathItem) public int RequestBodyCount { get; set; } - public override void Visit(OpenApiRequestBody requestBody) + public override void Visit(IOpenApiRequestBody requestBody) { RequestBodyCount++; } From e022dca65efe12eacb16a937b1dd8a8492b99674 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 27 Jan 2025 15:27:58 -0500 Subject: [PATCH 575/720] fix: response reference proxy design pattern implementation Signed-off-by: Vincent Biret --- .../UtilityFiles/OpenApiDocumentMock.cs | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 3c3644ad..0d25c770 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -60,7 +60,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200",new() + "200",new OpenApiResponse() { Description = "OK" } @@ -97,7 +97,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200", new() + "200", new OpenApiResponse() { Description = "Success", Content = new Dictionary @@ -162,7 +162,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200", new() + "200", new OpenApiResponse() { Description = "Success", Content = new Dictionary @@ -210,7 +210,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200", new() + "200", new OpenApiResponse() { Description = "Retrieved entities", Content = new Dictionary @@ -264,7 +264,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200", new() + "200", new OpenApiResponse() { Description = "Retrieved entity", Content = new Dictionary @@ -297,7 +297,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "204", new() + "204", new OpenApiResponse() { Description = "Success" } @@ -335,7 +335,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200", new() + "200", new OpenApiResponse() { Description = "Retrieved navigation property", Content = new Dictionary @@ -390,7 +390,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200", new() + "200", new OpenApiResponse() { Description = "Success", Content = new Dictionary @@ -432,7 +432,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "204", new() + "204", new OpenApiResponse() { Description = "Success" } @@ -454,7 +454,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200", new() + "200", new OpenApiResponse() { Description = "Retrieved navigation property", Content = new Dictionary @@ -528,7 +528,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "204", new() + "204", new OpenApiResponse() { Description = "Success" } @@ -593,7 +593,7 @@ public static OpenApiDocument CreateOpenApiDocument() Responses = new() { { - "200", new() + "200", new OpenApiResponse() { Description = "Success", Content = new Dictionary From 23a5bda36dc934a565a020de3b5b60880aa0a8cc Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 28 Jan 2025 16:52:02 -0500 Subject: [PATCH 576/720] fix: open api schema reference proxy design pattern implementation Signed-off-by: Vincent Biret --- .../Formatters/PowerShellFormatter.cs | 46 ++++------ src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- .../Formatters/PowerShellFormatterTests.cs | 20 ++-- .../Services/OpenApiFilterServiceTests.cs | 2 +- .../UtilityFiles/OpenApiDocumentMock.cs | 91 +++++++------------ 5 files changed, 64 insertions(+), 97 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index a6b6380d..2224f6f9 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -16,7 +16,7 @@ internal class PowerShellFormatter : OpenApiVisitorBase { private const string DefaultPutPrefix = ".Update"; private const string PowerShellPutPrefix = ".Set"; - private readonly Stack _schemaLoop = new(); + private readonly Stack _schemaLoop = new(); private static readonly Regex s_oDataCastRegex = new("(.*(?<=[a-z]))\\.(As(?=[A-Z]).*)", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); private static readonly Regex s_hashSuffixRegex = new(@"^[^-]+", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); private static readonly Regex s_oDataRefRegex = new("(?<=[a-z])Ref(?=[A-Z])", RegexOptions.Compiled, TimeSpan.FromSeconds(5)); @@ -42,7 +42,7 @@ static PowerShellFormatter() // 5. Fix anyOf and oneOf schema. // 6. Add AdditionalProperties to object schemas. - public override void Visit(OpenApiSchema schema) + public override void Visit(IOpenApiSchema schema) { AddAdditionalPropertiesToSchema(schema); ResolveAnyOfSchema(schema); @@ -165,10 +165,10 @@ private static void ResolveFunctionParameters(IList parameter // Replace content with a schema object of type array // for structured or collection-valued function parameters parameter.Content = null; - parameter.Schema = new() + parameter.Schema = new OpenApiSchema() { Type = JsonSchemaType.Array, - Items = new() + Items = new OpenApiSchema() { Type = JsonSchemaType.String } @@ -176,11 +176,11 @@ private static void ResolveFunctionParameters(IList parameter } } - private void AddAdditionalPropertiesToSchema(OpenApiSchema schema) + private void AddAdditionalPropertiesToSchema(IOpenApiSchema schema) { - if (schema != null && !_schemaLoop.Contains(schema) && schema.Type.Equals(JsonSchemaType.Object)) + if (schema is OpenApiSchema openApiSchema && !_schemaLoop.Contains(schema) && schema.Type.Equals(JsonSchemaType.Object)) { - schema.AdditionalProperties = new() { Type = JsonSchemaType.Object }; + openApiSchema.AdditionalProperties = new OpenApiSchema() { Type = JsonSchemaType.Object }; /* Because 'additionalProperties' are now being walked, * we need a way to keep track of visited schemas to avoid @@ -190,39 +190,29 @@ private void AddAdditionalPropertiesToSchema(OpenApiSchema schema) } } - private static void ResolveOneOfSchema(OpenApiSchema schema) + private static void ResolveOneOfSchema(IOpenApiSchema schema) { - if (schema.OneOf?.FirstOrDefault() is { } newSchema) + if (schema is OpenApiSchema openApiSchema && schema.OneOf?.FirstOrDefault() is OpenApiSchema newSchema) { - schema.OneOf = null; - FlattenSchema(schema, newSchema); + openApiSchema.OneOf = null; + FlattenSchema(openApiSchema, newSchema); } } - private static void ResolveAnyOfSchema(OpenApiSchema schema) + private static void ResolveAnyOfSchema(IOpenApiSchema schema) { - if (schema.AnyOf?.FirstOrDefault() is { } newSchema) + if (schema is OpenApiSchema openApiSchema && schema.AnyOf?.FirstOrDefault() is OpenApiSchema newSchema) { - schema.AnyOf = null; - FlattenSchema(schema, newSchema); + openApiSchema.AnyOf = null; + FlattenSchema(openApiSchema, newSchema); } } private static void FlattenSchema(OpenApiSchema schema, OpenApiSchema newSchema) { - if (newSchema != null) - { - if (newSchema.Reference != null) - { - schema.Reference = newSchema.Reference; - schema.UnresolvedReference = true; - } - else - { - // Copies schema properties based on https://github.com/microsoft/OpenAPI.NET.OData/pull/264. - CopySchema(schema, newSchema); - } - } + if (newSchema is null) return; + // Copies schema properties based on https://github.com/microsoft/OpenAPI.NET.OData/pull/264. + CopySchema(schema, newSchema); } private static void CopySchema(OpenApiSchema schema, OpenApiSchema newSchema) diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 645f9431..d157a6c4 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -20,7 +20,7 @@ public override void Visit(IOpenApiParameter parameter) public int SchemaCount { get; set; } - public override void Visit(OpenApiSchema schema) + public override void Visit(IOpenApiSchema schema) { SchemaCount++; } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index abf7232d..f868dfa0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -122,10 +122,10 @@ private static OpenApiDocument GetSampleOpenApiDocument() "application/json", new OpenApiMediaType { - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.Array, - Items = new() + Items = new OpenApiSchema() { Type = JsonSchemaType.String } @@ -149,20 +149,20 @@ private static OpenApiDocument GetSampleOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new Dictionary { { "TestSchema", new OpenApiSchema { Type = JsonSchemaType.Object, - Properties = new Dictionary + Properties = new Dictionary { { "averageAudioDegradation", new OpenApiSchema { - AnyOf = new List + AnyOf = new List { - new() { Type = JsonSchemaType.Number }, - new() { Type = JsonSchemaType.String } + new OpenApiSchema() { Type = JsonSchemaType.Number }, + new OpenApiSchema() { Type = JsonSchemaType.String } }, Format = "float", Nullable = true @@ -171,10 +171,10 @@ private static OpenApiDocument GetSampleOpenApiDocument() { "defaultPrice", new OpenApiSchema { - OneOf = new List + OneOf = new List { - new() { Type = JsonSchemaType.Number, Format = "double" }, - new() { Type = JsonSchemaType.String } + new OpenApiSchema() { Type = JsonSchemaType.Number, Format = "double" }, + new OpenApiSchema() { Type = JsonSchemaType.String } } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index ca4416ae..a3494ba1 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -129,7 +129,7 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() Name = "id", In = ParameterLocation.Path, Required = true, - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 0d25c770..b5289c1e 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -87,7 +87,7 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String } @@ -106,7 +106,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.Array } @@ -127,7 +127,7 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String } @@ -152,7 +152,7 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String } @@ -171,7 +171,7 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.Array } @@ -191,7 +191,7 @@ public static OpenApiDocument CreateOpenApiDocument() Name = "period", In = ParameterLocation.Path, Required = true, - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String } @@ -219,25 +219,17 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new() + Schema = new OpenApiSchema() { Title = "Collection of user", Type = JsonSchemaType.Object, - Properties = new Dictionary + Properties = new Dictionary { { "value", new OpenApiSchema { Type = JsonSchemaType.Array, - Items = new() - { - Reference = new() - { - Type = ReferenceType.Schema, - Id = "microsoft.graph.user" - } - } } } } @@ -273,14 +265,6 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new() - { - Reference = new() - { - Type = ReferenceType.Schema, - Id = "microsoft.graph.user" - } - } } } } @@ -325,7 +309,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Query, Required = true, Description = "Select properties to be returned", - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.Array } @@ -344,14 +328,6 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new() - { - Reference = new() - { - Type = ReferenceType.Schema, - Id = "microsoft.graph.message" - } - } } } } @@ -380,7 +356,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Required = true, Description = "key: id of administrativeUnit", - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String } @@ -399,11 +375,11 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new() + Schema = new OpenApiSchema() { - AnyOf = new List + AnyOf = new List { - new() + new OpenApiSchema() { Type = JsonSchemaType.String } @@ -463,25 +439,17 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new() + Schema = new OpenApiSchema() { Title = "Collection of hostSecurityProfile", Type = JsonSchemaType.Object, - Properties = new Dictionary + Properties = new Dictionary { { "value", new OpenApiSchema { Type = JsonSchemaType.Array, - Items = new() - { - Reference = new() - { - Type = ReferenceType.Schema, - Id = "microsoft.graph.networkInterface" - } - } } } } @@ -513,7 +481,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of call", Required = true, - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String }, @@ -561,7 +529,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of group", Required = true, - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String }, @@ -578,7 +546,7 @@ public static OpenApiDocument CreateOpenApiDocument() In = ParameterLocation.Path, Description = "key: id of event", Required = true, - Schema = new() + Schema = new OpenApiSchema() { Type = JsonSchemaType.String }, @@ -602,13 +570,17 @@ public static OpenApiDocument CreateOpenApiDocument() applicationJsonMediaType, new OpenApiMediaType { - Schema = new() + Schema = new OpenApiSchema() { - Type = JsonSchemaType.Array, - Reference = new() + Properties = new Dictionary { - Type = ReferenceType.Schema, - Id = "microsoft.graph.event" + { + "value", + new OpenApiSchema + { + Type = JsonSchemaType.Array, + } + } } } } @@ -643,14 +615,14 @@ public static OpenApiDocument CreateOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new Dictionary { { "microsoft.graph.networkInterface", new OpenApiSchema { Title = "networkInterface", Type = JsonSchemaType.Object, - Properties = new Dictionary + Properties = new Dictionary { { "description", new OpenApiSchema @@ -726,6 +698,11 @@ public static OpenApiDocument CreateOpenApiDocument() document.Paths[communicationsCallsKeepAlivePath].Operations[OperationType.Post].Tags!.Add(new OpenApiTagReference("communications.Actions", document)); document.Paths[eventsDeltaPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("groups.Functions", document)); document.Paths[refPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("applications.directoryObject", document)); + ((OpenApiSchema)document.Paths[usersPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.user", document); + document.Paths[usersByIdPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.user", document); + document.Paths[messagesByIdPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.message", document); + ((OpenApiSchema)document.Paths[securityProfilesPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.networkInterface", document); + ((OpenApiSchema)document.Paths[eventsDeltaPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.event", document); return document; } } From 86922fff1d5c772350abb89981878a5cce3efc4f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 3 Feb 2025 10:00:40 -0500 Subject: [PATCH 577/720] ci: adds release please configuration Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1e13eb15..b4bfa618 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -9,7 +9,6 @@ enable hidi ./../../artifacts - 2.0.0-preview5 OpenAPI.NET CLI tool for slicing OpenAPI documents true From c4ab5b5467dc4afcfd2677369365487a1e1e52f3 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 3 Feb 2025 14:55:47 -0500 Subject: [PATCH 578/720] fix: removes nullable property that shouldn't be part of dom --- .../Formatters/PowerShellFormatter.cs | 1 - .../Formatters/PowerShellFormatterTests.cs | 24 ++++++++++--------- .../UtilityFiles/OpenApiDocumentMock.cs | 12 ++-------- 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index 2224f6f9..df632b78 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -243,7 +243,6 @@ private static void CopySchema(OpenApiSchema schema, OpenApiSchema newSchema) schema.Enum ??= newSchema.Enum; schema.ReadOnly = !schema.ReadOnly ? newSchema.ReadOnly : schema.ReadOnly; schema.WriteOnly = !schema.WriteOnly ? newSchema.WriteOnly : schema.WriteOnly; - schema.Nullable = !schema.Nullable ? newSchema.Nullable : schema.Nullable; schema.Deprecated = !schema.Deprecated ? newSchema.Deprecated : schema.Deprecated; } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index f868dfa0..cad3b454 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -58,21 +58,23 @@ public void RemoveAnyOfAndOneOfFromSchema() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var testSchema = openApiDocument.Components?.Schemas?["TestSchema"]; - var averageAudioDegradationProperty = testSchema?.Properties["averageAudioDegradation"]; - var defaultPriceProperty = testSchema?.Properties["defaultPrice"]; + Assert.NotNull(openApiDocument.Components); + Assert.NotNull(openApiDocument.Components.Schemas); + var testSchema = openApiDocument.Components.Schemas["TestSchema"]; + var averageAudioDegradationProperty = testSchema.Properties["averageAudioDegradation"]; + var defaultPriceProperty = testSchema.Properties["defaultPrice"]; // Assert Assert.NotNull(openApiDocument.Components); Assert.NotNull(openApiDocument.Components.Schemas); Assert.NotNull(testSchema); - Assert.Null(averageAudioDegradationProperty?.AnyOf); - Assert.Equal(JsonSchemaType.Number, averageAudioDegradationProperty?.Type); - Assert.Equal("float", averageAudioDegradationProperty?.Format); - Assert.True(averageAudioDegradationProperty?.Nullable); - Assert.Null(defaultPriceProperty?.OneOf); - Assert.Equal(JsonSchemaType.Number, defaultPriceProperty?.Type); - Assert.Equal("double", defaultPriceProperty?.Format); + Assert.Null(averageAudioDegradationProperty.AnyOf); + Assert.Equal(JsonSchemaType.Number, averageAudioDegradationProperty.Type); + Assert.Equal("float", averageAudioDegradationProperty.Format); + Assert.Equal(JsonSchemaType.Null, averageAudioDegradationProperty.Type & JsonSchemaType.Null); + Assert.Null(defaultPriceProperty.OneOf); + Assert.Equal(JsonSchemaType.Number, defaultPriceProperty.Type); + Assert.Equal("double", defaultPriceProperty.Format); Assert.NotNull(testSchema.AdditionalProperties); } @@ -165,7 +167,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() new OpenApiSchema() { Type = JsonSchemaType.String } }, Format = "float", - Nullable = true + Type = JsonSchemaType.Number | JsonSchemaType.Null | JsonSchemaType.String } }, { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index b5289c1e..3f81c71a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -377,14 +377,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Schema = new OpenApiSchema() { - AnyOf = new List - { - new OpenApiSchema() - { - Type = JsonSchemaType.String - } - }, - Nullable = true + Type = JsonSchemaType.String | JsonSchemaType.Null } } } @@ -627,9 +620,8 @@ public static OpenApiDocument CreateOpenApiDocument() { "description", new OpenApiSchema { - Type = JsonSchemaType.String, + Type = JsonSchemaType.String | JsonSchemaType.Null, Description = "Description of the NIC (e.g. Ethernet adapter, Wireless LAN adapter Local Area Connection <#>, etc.).", - Nullable = true } } } From 6a09ec37b0a99fe867326e1f60db02739bca23d7 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 3 Feb 2025 15:34:07 -0500 Subject: [PATCH 579/720] fix: multiple unit test failures Signed-off-by: Vincent Biret --- .../Formatters/PowerShellFormatterTests.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index cad3b454..da6d8c61 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -69,7 +69,7 @@ public void RemoveAnyOfAndOneOfFromSchema() Assert.NotNull(openApiDocument.Components.Schemas); Assert.NotNull(testSchema); Assert.Null(averageAudioDegradationProperty.AnyOf); - Assert.Equal(JsonSchemaType.Number, averageAudioDegradationProperty.Type); + Assert.Equal(JsonSchemaType.Number | JsonSchemaType.Null, averageAudioDegradationProperty.Type); Assert.Equal("float", averageAudioDegradationProperty.Format); Assert.Equal(JsonSchemaType.Null, averageAudioDegradationProperty.Type & JsonSchemaType.Null); Assert.Null(defaultPriceProperty.OneOf); @@ -163,11 +163,10 @@ private static OpenApiDocument GetSampleOpenApiDocument() { AnyOf = new List { - new OpenApiSchema() { Type = JsonSchemaType.Number }, + new OpenApiSchema() { Type = JsonSchemaType.Number | JsonSchemaType.Null }, new OpenApiSchema() { Type = JsonSchemaType.String } }, Format = "float", - Type = JsonSchemaType.Number | JsonSchemaType.Null | JsonSchemaType.String } }, { From 21b156b74d218f9e6077a136666fcb622eda96e2 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 5 Feb 2025 14:10:04 +0300 Subject: [PATCH 580/720] Remove unnecessary format param; clean up extra semi-colon --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c7bf1a55..c757f403 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -254,7 +254,7 @@ private static async Task GetOpenApiAsync(HidiOptions options, else if (!string.IsNullOrEmpty(options.OpenApi)) { stream = await GetStreamAsync(options.OpenApi, logger, cancellationToken).ConfigureAwait(false); - var result = await ParseOpenApiAsync(options.OpenApi, format, options.InlineExternal, logger, stream, cancellationToken).ConfigureAwait(false); + var result = await ParseOpenApiAsync(options.OpenApi, options.InlineExternal, logger, stream, cancellationToken).ConfigureAwait(false); document = result.Document; } else throw new InvalidOperationException("No input file path or URL provided"); @@ -351,8 +351,7 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe try { using var stream = await GetStreamAsync(openApi, logger, cancellationToken).ConfigureAwait(false); - var openApiFormat = !string.IsNullOrEmpty(openApi) ? GetOpenApiFormat(openApi, logger) : OpenApiFormat.Yaml; - result = await ParseOpenApiAsync(openApi, openApiFormat.GetDisplayName(),false, logger, stream, cancellationToken).ConfigureAwait(false); + result = await ParseOpenApiAsync(openApi, false, logger, stream, cancellationToken).ConfigureAwait(false); using (logger.BeginScope("Calculating statistics")) { @@ -380,7 +379,7 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe return result.Diagnostic.Errors.Count == 0; } - private static async Task ParseOpenApiAsync(string openApiFile, string format, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) + private static async Task ParseOpenApiAsync(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) { ReadResult result; var stopwatch = Stopwatch.StartNew(); @@ -396,7 +395,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, stri new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) }; - result = await OpenApiDocument.LoadAsync(stream, format, settings, cancellationToken).ConfigureAwait(false); + result = await OpenApiDocument.LoadAsync(stream, settings: settings, cancellationToken: cancellationToken).ConfigureAwait(false); logger.LogTrace("{Timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); From f5dd8d880e9d11371fb48224393e4a7815615944 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Feb 2025 21:42:40 +0000 Subject: [PATCH 581/720] chore(deps): bump xunit.runner.visualstudio from 3.0.1 to 3.0.2 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 3.0.1 to 3.0.2. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/3.0.1...3.0.2) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index b611d0b3..4bdb251c 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 1fe99fac7851adf7ce3f07b34fb059f5696b5c4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 21:41:05 +0000 Subject: [PATCH 582/720] chore(deps): bump Microsoft.NET.Test.Sdk from 17.12.0 to 17.13.0 Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.12.0 to 17.13.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.12.0...v17.13.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 4bdb251c..13e98bc0 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,7 +12,7 @@ - + From 6017c396e76a4d08fdcd7097132918337e951dd1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 21:53:56 +0000 Subject: [PATCH 583/720] chore(deps): bump Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions and Microsoft.Extensions.Logging.Debug Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime), [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) and [Microsoft.Extensions.Logging.Debug](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.Extensions.Logging` from 9.0.1 to 9.0.2 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.1...v9.0.2) Updates `Microsoft.Extensions.Logging.Abstractions` from 9.0.1 to 9.0.2 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.1...v9.0.2) Updates `Microsoft.Extensions.Logging.Debug` from 9.0.1 to 9.0.2 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.1...v9.0.2) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b4bfa618..e895ef57 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,10 +28,10 @@ - - + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 53d852c9793eece04a019085283687aabec70a59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 22:00:23 +0000 Subject: [PATCH 584/720] chore(deps): bump Microsoft.OData.Edm, Microsoft.OpenApi.OData and System.Text.Json Bumps Microsoft.OData.Edm, [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET) and [System.Text.Json](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.OData.Edm` from 8.2.3 to 8.2.3 Updates `Microsoft.OpenApi.OData` from 2.0.0-preview.7 to 2.0.0-preview8 - [Release notes](https://github.com/Microsoft/OpenAPI.NET/releases) - [Changelog](https://github.com/microsoft/OpenAPI.NET/blob/main/CHANGELOG.md) - [Commits](https://github.com/Microsoft/OpenAPI.NET/commits) Updates `System.Text.Json` from 8.0.5 to 8.0.5 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v8.0.5...v8.0.5) --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b4bfa618..c72e5c86 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + - From a9d49a5f9240847b15c4d63e8948d84edb1cde13 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 18 Feb 2025 14:52:07 -0500 Subject: [PATCH 588/720] chore: cleanup of GetValues where possible --- .../Extensions/OpenApiExtensibleExtensions.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs index ee57125d..f4b4f77c 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs @@ -1,6 +1,7 @@ using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Interfaces; using System.Collections.Generic; +using System.Text.Json.Nodes; namespace Microsoft.OpenApi.Hidi.Extensions { @@ -14,9 +15,9 @@ internal static class OpenApiExtensibleExtensions /// A value matching the provided extensionKey. Return null when extensionKey is not found. internal static string GetExtension(this IDictionary extensions, string extensionKey) { - if (extensions.TryGetValue(extensionKey, out var value) && value is OpenApiAny castValue) + if (extensions.TryGetValue(extensionKey, out var value) && value is OpenApiAny { Node: JsonValue castValue } && castValue.TryGetValue(out var stringValue)) { - return castValue.Node.GetValue(); + return stringValue; } return string.Empty; } From caa6385e551040a211e9bdc2e042e915453ce549 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 24 Feb 2025 13:41:41 -0500 Subject: [PATCH 589/720] draft: removes static registry for readers Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c757f403..6e9aab6e 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -40,12 +40,6 @@ namespace Microsoft.OpenApi.Hidi { internal static class OpenApiService { - static OpenApiService() - { - OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader()); - OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader()); - } - /// /// Implementation of the transform command /// @@ -394,6 +388,9 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool new(openApiFile) : new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) }; + var yamlReader = new OpenApiYamlReader(); + settings.Readers.Add(OpenApiConstants.Yaml, yamlReader); + settings.Readers.Add(OpenApiConstants.Yml, yamlReader); result = await OpenApiDocument.LoadAsync(stream, settings: settings, cancellationToken: cancellationToken).ConfigureAwait(false); From 4d2340c45a0705b4dc024507c186800a81201afa Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 24 Feb 2025 13:56:00 -0500 Subject: [PATCH 590/720] fix: removes static readers registry Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 +--- .../Services/OpenApiServiceTests.cs | 2 -- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 6e9aab6e..68f79790 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -388,9 +388,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool new(openApiFile) : new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) }; - var yamlReader = new OpenApiYamlReader(); - settings.Readers.Add(OpenApiConstants.Yaml, yamlReader); - settings.Readers.Add(OpenApiConstants.Yml, yamlReader); + settings.AddYamlReader(); result = await OpenApiDocument.LoadAsync(stream, settings: settings, cancellationToken: cancellationToken).ConfigureAwait(false); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index b4a04c4c..c23222eb 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -26,8 +26,6 @@ public sealed class OpenApiServiceTests : IDisposable public OpenApiServiceTests() { _logger = new Logger(_loggerFactory); - OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader()); - OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader()); } [Fact] From e49f2df474757517f5d4919c5171d0769268c96d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 25 Feb 2025 08:05:10 -0500 Subject: [PATCH 591/720] chore: adds missing yaml reader for test Signed-off-by: Vincent Biret --- .../Services/OpenApiFilterServiceTests.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index a3494ba1..513355b5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -5,6 +5,7 @@ using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Models.References; +using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; using Moq; @@ -232,7 +233,9 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( // Act using var stream = File.OpenRead(filePath); - var doc = (await OpenApiDocument.LoadAsync(stream, "yaml")).Document; + var settings = new OpenApiReaderSettings(); + settings.AddYamlReader(); + var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings)).Document; var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); From 69e21927c895305c1d266bcdee3fd54156e48632 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 25 Feb 2025 09:24:31 -0500 Subject: [PATCH 592/720] fix avoid creating a client for each request in hidi Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 68f79790..72bb6623 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -492,6 +492,11 @@ private static Dictionary> EnumerateJsonDocument(JsonElemen return paths; } + private static readonly Lazy httpClient = new(() => new HttpClient() + { + DefaultRequestVersion = HttpVersion.Version20 + }); + /// /// Reads stream from file system or makes HTTP request depending on the input string /// @@ -507,11 +512,7 @@ private static async Task GetStreamAsync(string input, ILogger logger, C { try { - using var httpClient = new HttpClient - { - DefaultRequestVersion = HttpVersion.Version20 - }; - stream = await httpClient.GetStreamAsync(new Uri(input), cancellationToken).ConfigureAwait(false); + stream = await httpClient.Value.GetStreamAsync(new Uri(input), cancellationToken).ConfigureAwait(false); } catch (HttpRequestException ex) { From 2f4733ea4f2d7a8a9a4a534dc0ff878e533152bd Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 25 Feb 2025 09:32:52 -0500 Subject: [PATCH 593/720] fix: use a single http client in hidi Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 72bb6623..692e35c0 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -386,7 +386,8 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool LoadExternalRefs = inlineExternal, BaseUrl = openApiFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? new(openApiFile) : - new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar) + new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar), + HttpClient = httpClient.Value }; settings.AddYamlReader(); From 47896d61007c508276e26f5af4b1160a97668b1f Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 25 Feb 2025 17:47:51 +0300 Subject: [PATCH 594/720] BREAKING CHANGE: Rename Readers project to YamlReader --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- .../Services/OpenApiServiceTests.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c68a24ee..2aa25527 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -44,7 +44,7 @@ - + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index c757f403..49e905cb 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -31,9 +31,9 @@ using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Reader; -using Microsoft.OpenApi.Readers; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Writers; +using Microsoft.OpenApi.YamlReader; using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper; namespace Microsoft.OpenApi.Hidi diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index b4a04c4c..1389d324 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -12,7 +12,7 @@ using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Reader; -using Microsoft.OpenApi.Readers; +using Microsoft.OpenApi.YamlReader; using Microsoft.OpenApi.Services; using Xunit; From 341546eb6f28d1a2cb2bfc23483b7443f13451d8 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 25 Feb 2025 18:23:36 +0300 Subject: [PATCH 595/720] fix: clean up project references --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 13e98bc0..47d67fc5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -21,6 +21,7 @@ + From 91a0bd2a31d80ac60900471be5b2979c27f2e27f Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 25 Feb 2025 14:31:48 -0500 Subject: [PATCH 596/720] feat: deduplicates tags at the document level Signed-off-by: Vincent Biret --- .../UtilityFiles/OpenApiDocumentMock.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 3f81c71a..1bdcd246 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -629,7 +629,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Tags = new List + Tags = new HashSet { new() { From 30d5011cfddcf885d1871a97d0a49af9914f63fa Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 25 Feb 2025 15:09:57 -0500 Subject: [PATCH 597/720] feat: tags references are now deduplicated as well Signed-off-by: Vincent Biret --- .../UtilityFiles/OpenApiDocumentMock.cs | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 1bdcd246..0da22042 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -678,18 +678,18 @@ public static OpenApiDocument CreateOpenApiDocument() } } }; - document.Paths[getTeamsActivityByPeriodPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("reports.Functions", document)); - document.Paths[getTeamsActivityByDatePath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("reports.Functions", document)); - document.Paths[usersPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.user", document)); - document.Paths[usersByIdPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.user", document)); - document.Paths[usersByIdPath].Operations[OperationType.Patch].Tags!.Add(new OpenApiTagReference("users.user", document)); - document.Paths[messagesByIdPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("users.message", document)); - document.Paths[administrativeUnitRestorePath].Operations[OperationType.Post].Tags!.Add(new OpenApiTagReference("administrativeUnits.Actions", document)); - document.Paths[logoPath].Operations[OperationType.Put].Tags!.Add(new OpenApiTagReference("applications.application", document)); - document.Paths[securityProfilesPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("security.hostSecurityProfile", document)); - document.Paths[communicationsCallsKeepAlivePath].Operations[OperationType.Post].Tags!.Add(new OpenApiTagReference("communications.Actions", document)); - document.Paths[eventsDeltaPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("groups.Functions", document)); - document.Paths[refPath].Operations[OperationType.Get].Tags!.Add(new OpenApiTagReference("applications.directoryObject", document)); + document.Paths[getTeamsActivityByPeriodPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; + document.Paths[getTeamsActivityByDatePath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; + document.Paths[usersPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[usersByIdPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[usersByIdPath].Operations[OperationType.Patch].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[messagesByIdPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("users.message", document)}; + document.Paths[administrativeUnitRestorePath].Operations[OperationType.Post].Tags = new HashSet {new OpenApiTagReference("administrativeUnits.Actions", document)}; + document.Paths[logoPath].Operations[OperationType.Put].Tags = new HashSet {new OpenApiTagReference("applications.application", document)}; + document.Paths[securityProfilesPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("security.hostSecurityProfile", document)}; + document.Paths[communicationsCallsKeepAlivePath].Operations[OperationType.Post].Tags = new HashSet {new OpenApiTagReference("communications.Actions", document)}; + document.Paths[eventsDeltaPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("groups.Functions", document)}; + document.Paths[refPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("applications.directoryObject", document)}; ((OpenApiSchema)document.Paths[usersPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.user", document); document.Paths[usersByIdPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.user", document); document.Paths[messagesByIdPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.message", document); From 3bf84d24ab6af362f9ce7cce42d213511378a65b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 21:07:21 +0000 Subject: [PATCH 598/720] chore(deps): bump Microsoft.OData.Edm and Microsoft.OpenApi.OData Bumps Microsoft.OData.Edm and [Microsoft.OpenApi.OData](https://github.com/Microsoft/OpenAPI.NET). These dependencies needed to be updated together. Updates `Microsoft.OData.Edm` from 8.2.3 to 8.2.3 Updates `Microsoft.OpenApi.OData` from 2.0.0-preview8 to 2.0.0-preview9 - [Release notes](https://github.com/Microsoft/OpenAPI.NET/releases) - [Changelog](https://github.com/microsoft/OpenAPI.NET/blob/main/CHANGELOG.md) - [Commits](https://github.com/Microsoft/OpenAPI.NET/compare/v2.0.0-preview8...v2.0.0-preview9) --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.OpenApi.OData dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c68a24ee..0ed78ac1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From b2c29321b9cf3f9eba5401f20afc5204fd82707f Mon Sep 17 00:00:00 2001 From: Andrew Omondi Date: Fri, 7 Mar 2025 11:13:47 +0300 Subject: [PATCH 599/720] fix: fixes serialization of openApidocs with operation tags with settings to inline references. --- .../Services/OpenApiFilterServiceTests.cs | 32 ++++++++++++++++++- .../docWithReusableHeadersAndExamples.yaml | 2 ++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 513355b5..753f2e9d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -1,13 +1,16 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. +using System.Globalization; using Microsoft.Extensions.Logging; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; +using Microsoft.OpenApi.Writers; using Moq; using Xunit; @@ -235,7 +238,14 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( using var stream = File.OpenRead(filePath); var settings = new OpenApiReaderSettings(); settings.AddYamlReader(); - var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings)).Document; + var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings)).Document; + + // validated the tags are read as references + var openApiOperationTags = doc.Paths["/items"].Operations[OperationType.Get].Tags?.ToArray(); + Assert.NotNull(openApiOperationTags); + Assert.Single(openApiOperationTags); + Assert.True(openApiOperationTags[0].UnresolvedReference); + var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); @@ -255,6 +265,26 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( Assert.Single(targetHeaders); Assert.NotNull(targetExamples); Assert.Single(targetExamples); + // validated the tags of the trimmed document are read as references + var trimmedOpenApiOperationTags = subsetOpenApiDocument.Paths["/items"].Operations[OperationType.Get].Tags?.ToArray(); + Assert.NotNull(trimmedOpenApiOperationTags); + Assert.Single(trimmedOpenApiOperationTags); + Assert.True(trimmedOpenApiOperationTags[0].UnresolvedReference); + + // Finally try to write the trimmed document as v3 document + var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); + var writer = new OpenApiJsonWriter(outputStringWriter) + { + Settings = new OpenApiWriterSettings() + { + InlineExternalReferences = true, + InlineLocalReferences = true + } + }; + subsetOpenApiDocument.SerializeAsV3(writer); + await writer.FlushAsync(); + var result = outputStringWriter.ToString(); + Assert.NotEmpty(result); } [Theory] diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml index 60ee7e5c..8edeb194 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml @@ -7,6 +7,8 @@ servers: paths: /items: get: + tags: + - list.items operationId: getItems summary: Get a list of items responses: From d7ebe493f1c732c8093961500d94a4ece6182374 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Mar 2025 22:00:13 +0000 Subject: [PATCH 600/720] chore(deps): bump Microsoft.OpenApi.ApiManifest and SharpYaml Bumps [Microsoft.OpenApi.ApiManifest](https://github.com/Microsoft/OpenApi.ApiManifest) and [SharpYaml](https://github.com/xoofx/SharpYaml). These dependencies needed to be updated together. Updates `Microsoft.OpenApi.ApiManifest` from 2.0.0-preview1 to 2.0.0-preview2 - [Release notes](https://github.com/Microsoft/OpenApi.ApiManifest/releases) - [Changelog](https://github.com/microsoft/OpenApi.ApiManifest/blob/main/CHANGELOG.md) - [Commits](https://github.com/Microsoft/OpenApi.ApiManifest/compare/v2.0.0-preview1...v2.0.0-preview2) Updates `SharpYaml` from 2.1.1 to 2.1.1 - [Release notes](https://github.com/xoofx/SharpYaml/releases) - [Changelog](https://github.com/xoofx/SharpYaml/blob/master/changelog.md) - [Commits](https://github.com/xoofx/SharpYaml/compare/2.1.1...2.1.1) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.ApiManifest dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: SharpYaml dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 0ed78ac1..82426e87 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + From 5ccc41160077a43676606ade325053e59b051d02 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Mar 2025 21:14:30 +0000 Subject: [PATCH 601/720] chore(deps): bump Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions and Microsoft.Extensions.Logging.Console Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime), [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) and [Microsoft.Extensions.Logging.Console](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.Extensions.Logging` from 9.0.2 to 9.0.3 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.2...v9.0.3) Updates `Microsoft.Extensions.Logging.Abstractions` from 9.0.2 to 9.0.3 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.2...v9.0.3) Updates `Microsoft.Extensions.Logging.Console` from 9.0.2 to 9.0.3 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.2...v9.0.3) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 82426e87..60437d3f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,9 +28,9 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive From dae498be190c80701e6baba80c46817bd500656c Mon Sep 17 00:00:00 2001 From: Michael Mutunga Date: Wed, 12 Mar 2025 14:45:01 +0300 Subject: [PATCH 602/720] feat/use-http-method-object-instead-of-enum --- .../Formatters/PowerShellFormatter.cs | 5 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 +- .../Formatters/PowerShellFormatterTests.cs | 33 +++++--- .../Services/OpenApiFilterServiceTests.cs | 26 +++--- .../Services/OpenApiServiceTests.cs | 4 +- .../UtilityFiles/OpenApiDocumentMock.cs | 84 +++++++++---------- 6 files changed, 82 insertions(+), 74 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index df632b78..f263dae0 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Net.Http; using System.Text; using System.Text.RegularExpressions; using Humanizer; @@ -53,11 +54,11 @@ public override void Visit(IOpenApiSchema schema) public override void Visit(IOpenApiPathItem pathItem) { - if (pathItem.Operations.TryGetValue(OperationType.Put, out var value) && + if (pathItem.Operations.TryGetValue(HttpMethod.Put, out var value) && value.OperationId != null) { var operationId = value.OperationId; - pathItem.Operations[OperationType.Put].OperationId = ResolvePutOperationId(operationId); + pathItem.Operations[HttpMethod.Put].OperationId = ResolvePutOperationId(operationId); } base.Visit(pathItem); diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 692e35c0..e0cce589 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -256,9 +256,9 @@ private static async Task GetOpenApiAsync(HidiOptions options, return document; } - private static Func? FilterOpenApiDocument(string? filterByOperationIds, string? filterByTags, Dictionary> requestUrls, OpenApiDocument document, ILogger logger) + private static Func? FilterOpenApiDocument(string? filterByOperationIds, string? filterByTags, Dictionary> requestUrls, OpenApiDocument document, ILogger logger) { - Func? predicate = null; + Func? predicate = null; using (logger.BeginScope("Create Filter")) { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index da6d8c61..49b020a1 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -10,16 +10,23 @@ namespace Microsoft.OpenApi.Hidi.Tests.Formatters { public class PowerShellFormatterTests { + public static IEnumerable TestCases + { + get + { + yield return new object[] { "drives.drive.ListDrive", "drive_ListDrive", HttpMethod.Get }; + yield return new object[] { "print.taskDefinitions.tasks.GetTrigger", "print.taskDefinition.task_GetTrigger", HttpMethod.Get }; + yield return new object[] { "groups.sites.termStore.groups.GetSets", "group.site.termStore.group_GetSet", HttpMethod.Get }; + yield return new object[] { "external.industryData.ListDataConnectors", "external.industryData_ListDataConnector", HttpMethod.Get }; + yield return new object[] { "applications.application.UpdateLogo", "application_SetLogo", HttpMethod.Put }; + yield return new object[] { "identityGovernance.lifecycleWorkflows.workflows.workflow.activate", "identityGovernance.lifecycleWorkflow.workflow_activate", HttpMethod.Post }; + yield return new object[] { "directory.GetDeletedItems.AsApplication", "directory_GetDeletedItemAsApplication", HttpMethod.Get }; + yield return new object[] { "education.users.GetCount-6be9", "education.user_GetCount", HttpMethod.Get }; + } + } [Theory] - [InlineData("drives.drive.ListDrive", "drive_ListDrive", OperationType.Get)] - [InlineData("print.taskDefinitions.tasks.GetTrigger", "print.taskDefinition.task_GetTrigger", OperationType.Get)] - [InlineData("groups.sites.termStore.groups.GetSets", "group.site.termStore.group_GetSet", OperationType.Get)] - [InlineData("external.industryData.ListDataConnectors", "external.industryData_ListDataConnector", OperationType.Get)] - [InlineData("applications.application.UpdateLogo", "application_SetLogo", OperationType.Put)] - [InlineData("identityGovernance.lifecycleWorkflows.workflows.workflow.activate", "identityGovernance.lifecycleWorkflow.workflow_activate", OperationType.Post)] - [InlineData("directory.GetDeletedItems.AsApplication", "directory_GetDeletedItemAsApplication", OperationType.Get)] - [InlineData("education.users.GetCount-6be9", "education.user_GetCount", OperationType.Get)] - public void FormatOperationIdsInOpenAPIDocument(string operationId, string expectedOperationId, OperationType operationType, string path = "/foo") + [MemberData(nameof(TestCases))] + public void FormatOperationIdsInOpenAPIDocument(string operationId, string expectedOperationId, HttpMethod operationType, string path = "/foo") { // Arrange var openApiDocument = new OpenApiDocument @@ -29,7 +36,7 @@ public void FormatOperationIdsInOpenAPIDocument(string operationId, string expec Paths = new() { { path, new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { operationType, new() { OperationId = operationId } } } @@ -89,7 +96,7 @@ public void ResolveFunctionParameters() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var idsParameter = openApiDocument.Paths["/foo"].Operations[OperationType.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); + var idsParameter = openApiDocument.Paths["/foo"].Operations[HttpMethod.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); // Assert Assert.Null(idsParameter?.Content); @@ -106,10 +113,10 @@ private static OpenApiDocument GetSampleOpenApiDocument() Paths = new() { { "/foo", new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new() + HttpMethod.Get, new() { OperationId = "Foo.GetFoo", Parameters = diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 753f2e9d..57d2d509 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -83,11 +83,11 @@ public void TestPredicateFiltersUsingRelativeRequestUrls() Paths = new() { {"/foo", new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { - { OperationType.Get, new() }, - { OperationType.Patch, new() }, - { OperationType.Post, new() } + { HttpMethod.Get, new() }, + { HttpMethod.Patch, new() }, + { HttpMethod.Post, new() } } } } @@ -104,9 +104,9 @@ public void TestPredicateFiltersUsingRelativeRequestUrls() var predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: openApiDocument); // Then - Assert.True(predicate("/foo", OperationType.Get, null)); - Assert.True(predicate("/foo", OperationType.Post, null)); - Assert.False(predicate("/foo", OperationType.Patch, null)); + Assert.True(predicate("/foo", HttpMethod.Get, null)); + Assert.True(predicate("/foo", HttpMethod.Post, null)); + Assert.False(predicate("/foo", HttpMethod.Patch, null)); } [Fact] @@ -121,10 +121,10 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() { ["/test/{id}"] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { - { OperationType.Get, new() }, - { OperationType.Patch, new() } + { HttpMethod.Get, new() }, + { HttpMethod.Patch, new() } }, Parameters = [ @@ -241,7 +241,7 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings)).Document; // validated the tags are read as references - var openApiOperationTags = doc.Paths["/items"].Operations[OperationType.Get].Tags?.ToArray(); + var openApiOperationTags = doc.Paths["/items"].Operations[HttpMethod.Get].Tags?.ToArray(); Assert.NotNull(openApiOperationTags); Assert.Single(openApiOperationTags); Assert.True(openApiOperationTags[0].UnresolvedReference); @@ -249,7 +249,7 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); - var response = subsetOpenApiDocument.Paths["/items"].Operations[OperationType.Get]?.Responses?["200"]; + var response = subsetOpenApiDocument.Paths["/items"].Operations[HttpMethod.Get]?.Responses?["200"]; var responseHeader = response?.Headers["x-custom-header"]; var mediaTypeExample = response?.Content["application/json"]?.Examples?.First().Value; var targetHeaders = subsetOpenApiDocument.Components?.Headers; @@ -266,7 +266,7 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( Assert.NotNull(targetExamples); Assert.Single(targetExamples); // validated the tags of the trimmed document are read as references - var trimmedOpenApiOperationTags = subsetOpenApiDocument.Paths["/items"].Operations[OperationType.Get].Tags?.ToArray(); + var trimmedOpenApiOperationTags = subsetOpenApiDocument.Paths["/items"].Operations[HttpMethod.Get].Tags?.ToArray(); Assert.NotNull(trimmedOpenApiOperationTags); Assert.Single(trimmedOpenApiOperationTags); Assert.True(trimmedOpenApiOperationTags[0].UnresolvedReference); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index c23222eb..ec306bc5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -45,9 +45,9 @@ public void CreateFilteredDocumentOnMinimalOpenApi() { ["/test"] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { - [OperationType.Get] = new OpenApiOperation() + [HttpMethod.Get] = new OpenApiOperation() } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 0da22042..0cc1bc2f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -51,10 +51,10 @@ public static OpenApiDocument CreateOpenApiDocument() { ["/"] = new OpenApiPathItem() // root path { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "graphService.GetGraphService", Responses = new() @@ -72,10 +72,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [getTeamsActivityByPeriodPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "reports.getTeamsUserActivityCounts", Summary = "Invoke function getTeamsUserActivityUserCounts", @@ -137,10 +137,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [getTeamsActivityByDatePath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "reports.getTeamsUserActivityUserDetail-a3f1", Summary = "Invoke function getTeamsUserActivityUserDetail", @@ -200,10 +200,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [usersPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "users.user.ListUser", Summary = "Get entities from users", @@ -246,10 +246,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [usersByIdPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "users.user.GetUser", Summary = "Get entity from users by key", @@ -274,7 +274,7 @@ public static OpenApiDocument CreateOpenApiDocument() } }, { - OperationType.Patch, new OpenApiOperation + HttpMethod.Patch, new OpenApiOperation { OperationId = "users.user.UpdateUser", Summary = "Update entity in users", @@ -293,10 +293,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [messagesByIdPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "users.GetMessages", Summary = "Get messages from users", @@ -340,10 +340,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [administrativeUnitRestorePath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Post, new OpenApiOperation + HttpMethod.Post, new OpenApiOperation { OperationId = "administrativeUnits.restore", Summary = "Invoke action restore", @@ -391,10 +391,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [logoPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Put, new OpenApiOperation + HttpMethod.Put, new OpenApiOperation { OperationId = "applications.application.UpdateLogo", Summary = "Update media content for application in applications", @@ -413,10 +413,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [securityProfilesPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "security.ListHostSecurityProfiles", Summary = "Get hostSecurityProfiles from security", @@ -459,10 +459,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [communicationsCallsKeepAlivePath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Post, new OpenApiOperation + HttpMethod.Post, new OpenApiOperation { OperationId = "communications.calls.call.keepAlive", Summary = "Invoke action keepAlive", @@ -507,10 +507,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [eventsDeltaPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "groups.group.events.event.calendar.events.delta", Summary = "Invoke function delta", @@ -594,10 +594,10 @@ public static OpenApiDocument CreateOpenApiDocument() }, [refPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new Dictionary { { - OperationType.Get, new OpenApiOperation + HttpMethod.Get, new OpenApiOperation { OperationId = "applications.GetRefCreatedOnBehalfOf", Summary = "Get ref of createdOnBehalfOf from applications" @@ -678,23 +678,23 @@ public static OpenApiDocument CreateOpenApiDocument() } } }; - document.Paths[getTeamsActivityByPeriodPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; - document.Paths[getTeamsActivityByDatePath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; - document.Paths[usersPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; - document.Paths[usersByIdPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; - document.Paths[usersByIdPath].Operations[OperationType.Patch].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; - document.Paths[messagesByIdPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("users.message", document)}; - document.Paths[administrativeUnitRestorePath].Operations[OperationType.Post].Tags = new HashSet {new OpenApiTagReference("administrativeUnits.Actions", document)}; - document.Paths[logoPath].Operations[OperationType.Put].Tags = new HashSet {new OpenApiTagReference("applications.application", document)}; - document.Paths[securityProfilesPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("security.hostSecurityProfile", document)}; - document.Paths[communicationsCallsKeepAlivePath].Operations[OperationType.Post].Tags = new HashSet {new OpenApiTagReference("communications.Actions", document)}; - document.Paths[eventsDeltaPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("groups.Functions", document)}; - document.Paths[refPath].Operations[OperationType.Get].Tags = new HashSet {new OpenApiTagReference("applications.directoryObject", document)}; - ((OpenApiSchema)document.Paths[usersPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.user", document); - document.Paths[usersByIdPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.user", document); - document.Paths[messagesByIdPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.message", document); - ((OpenApiSchema)document.Paths[securityProfilesPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.networkInterface", document); - ((OpenApiSchema)document.Paths[eventsDeltaPath].Operations[OperationType.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.event", document); + document.Paths[getTeamsActivityByPeriodPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; + document.Paths[getTeamsActivityByDatePath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; + document.Paths[usersPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[usersByIdPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[usersByIdPath].Operations[HttpMethod.Patch].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[messagesByIdPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.message", document)}; + document.Paths[administrativeUnitRestorePath].Operations[HttpMethod.Post].Tags = new HashSet {new OpenApiTagReference("administrativeUnits.Actions", document)}; + document.Paths[logoPath].Operations[HttpMethod.Put].Tags = new HashSet {new OpenApiTagReference("applications.application", document)}; + document.Paths[securityProfilesPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("security.hostSecurityProfile", document)}; + document.Paths[communicationsCallsKeepAlivePath].Operations[HttpMethod.Post].Tags = new HashSet {new OpenApiTagReference("communications.Actions", document)}; + document.Paths[eventsDeltaPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("groups.Functions", document)}; + document.Paths[refPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("applications.directoryObject", document)}; + ((OpenApiSchema)document.Paths[usersPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.user", document); + document.Paths[usersByIdPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.user", document); + document.Paths[messagesByIdPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.message", document); + ((OpenApiSchema)document.Paths[securityProfilesPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.networkInterface", document); + ((OpenApiSchema)document.Paths[eventsDeltaPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.event", document); return document; } } From 606b261db6345be1899934ba3251cecb7749b6eb Mon Sep 17 00:00:00 2001 From: Musale Martin Date: Thu, 13 Mar 2025 12:11:21 +0300 Subject: [PATCH 603/720] chore: update the readme for hidi examples and commands --- src/Microsoft.OpenApi.Hidi/readme.md | 112 ++++++++++++++++----------- 1 file changed, 67 insertions(+), 45 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 55986d14..7a7667e0 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -17,21 +17,22 @@ Install [Microsoft.OpenApi.Hidi](https://www.nuget.org/packages/Microsoft.OpenAp ### .NET CLI(Global) - 1. dotnet tool install --global Microsoft.OpenApi.Hidi --prerelease - +```bash +dotnet tool install --global Microsoft.OpenApi.Hidi --prerelease +``` ### .NET CLI(local) - - 1. dotnet new tool-manifest #if you are setting up the OpenAPI.NET repo - 2. dotnet tool install --local Microsoft.OpenApi.Hidi --prerelease +```bash +dotnet new tool-manifest #if you are setting up the OpenAPI.NET repo +dotnet tool install --local Microsoft.OpenApi.Hidi --prerelease +``` ## How to use Hidi -Once you've installed the package locally, you can invoke the Hidi by running: hidi [command]. -You can access the list of command options we have by running hidi -h +Once you've installed the package locally, you can invoke the Hidi by running: `hidi [command]`. You can access the list of command options we have by running `hidi -h` The tool avails the following commands: • Validate @@ -57,9 +58,13 @@ It accepts the following command: • --loglevel(-ll) - The log level to use when logging messages to the main output -**Example:** `hidi.exe validate --openapi C:\OpenApidocs\Mail.yml --loglevel trace` +#### Example: -Run validate -h to see the options available. +```bash +hidi validate --openapi C:\OpenApidocs\Mail.yml --loglevel trace` +``` + +> Run `hidi validate -h` to see the options available. ### Transform @@ -67,53 +72,70 @@ Used to convert file formats from JSON to YAML and vice versa and performs slici This command accepts the following parameters: - • --openapi(-d) - OpenAPI description file path in the local filesystem or a valid URL hosted on a HTTPS server - • --csdl(--cs) - CSDL file path in the local filesystem or a valid URL hosted on a HTTPS server - • --csdlfilter(--csf) - a filter parameter that a user can use to select a subset of a large CSDL file. They do so by providing a comma delimited list of EntitySet and Singleton names that appear in the EntityContainer. - • --output(-o) - Output directory path for the transformed document. - • --output-folder(--of) - The output directory path for the generated files. - • --clean-ouput(--co) - an optional param that allows a user to overwrite an existing file. - • --version(-v) - OpenAPI specification version. - • --metadata-version(--mv) - the metadata version to use. - • --format(-f) - File format - • --terse-output(--to) - Produce terse json output - • --settings-path(--sp) - The configuration file with CSDL conversion settings. - • --loglevel(--ll) - The log level to use when logging messages to the main output - • --inline-local - Inline local $ref instances - • --inline-external(--ex) - Inline external $refs - • --filterByOperationIds(--op) - Slice document based on OperationId(s) provided. Accepts a comma delimited list of operation ids. - • --filterByTags(-t) - Slice document based on tag(s) provided. Accepts a comma delimited list of tags. - • --filterByCollection(-c) - Slices the OpenAPI document based on the Postman Collection file generated by Resource Explorer - • --manifest (-m) - Slices the OpenAPI document based on the requests defined in the API Manifest file referenced by the provided URI. For API manifests with multiple API Dependenties, use a fragment identifier to select the desired one. e.g ./apimanifest.json#example + + • --openapi, (-d) - OpenAPI description file path in the local filesystem or a valid URL hosted on a HTTPS server + • --csdl (--cs) - CSDL file path in the local filesystem or a valid URL hosted on a HTTPS server + • --csdl-filter (--csf) - a filter parameter that a user can use to select a subset of a large CSDL file. They do so by providing a comma delimited list of EntitySet and Singleton names that appear in the EntityContainer. + • --output (-o) - Output directory path for the transformed document. + • --clean-output (--co) - an optional param that allows a user to overwrite an existing file. + • --version (-v) - OpenAPI specification version. + • --metadata-version (--mv) - the metadata version to use. + • --format (-f) - File format + • --terse-output (--to) - Produce terse json output + • --settings-path (--sp) - The configuration file with CSDL conversion settings. + • --log-level (--ll) - The log level to use when logging messages to the main output + • --inline-local (--il) - Inline local $ref instances + • --inline-external (--ie) - Inline external $refs instances + • --filter-by-operationids(--op) - Slice document based on OperationId(s) provided. Accepts a comma delimited list of operation ids. + • --filter-by-tags (--t) - Slice document based on tag(s) provided. Accepts a comma delimited list of tags. + • --filter-by-collection (-c) - Slices the OpenAPI document based on the Postman Collection file generated by Resource Explorer - **Examples:** + #### Examples: - 1. Filtering by OperationIds - hidi transform -d files\People.yml -f yaml -o files\People.yml -v OpenApi3_0 --op users_UpdateInsights --co - - 2. Filtering by Postman collection - hidi transform --openapi files\People.yml --format yaml --output files\People2.yml --version OpenApi3_0 --filterByCollection Graph-Collection-0017059134807617005.postman_collection.json - - 3. CSDL--->OpenAPI conversion and filtering - hidi transform --csdl Files/Todo.xml --output Files/Todo-subset.yml --format yaml --version OpenApi3_0 --filterByOperationIds Todos.Todo.UpdateTodo - - 4. CSDL Filtering by EntitySets and Singletons - hidi transform --cs dataverse.csdl --csdlFilter "appointments,opportunities" -o appointmentsAndOpportunities.yaml --ll trace - -Run transform -h to see all the available usage options. +1. Filtering by OperationIds + +```bash +hidi transform -d files\People.yml -f yaml -o files\People.yml -v OpenApi3_0 --op users_UpdateInsights --co +``` + +2. Filtering by Postman collection + +```bash +hidi transform --openapi files\People.yml --format yaml --output files\People2.yml --version OpenApi3_0 --filter-by-collection Graph-Collection-0017059134807617005.postman_collection.json +``` + +3. CSDL--->OpenAPI conversion and filtering + +```bash +hidi transform --csdl Files/Todo.xml --output Files/Todo-subset.yml --format yaml --version OpenApi3_0 --filter-by-operationids Todos.Todo.UpdateTodo +``` + +4. CSDL Filtering by EntitySets and Singletons + +```bash +hidi transform --cs dataverse.csdl --csdl-filter "appointments,opportunities" -o appointmentsAndOpportunities.yaml --ll trace +``` + +> Run `hidi transform -h` to see all the available usage options. ### Show This command accepts an OpenAPI document as an input parameter and generates a Markdown file that contains a diagram of the API using Mermaid syntax. -**Examples:** +#### Examples: - 1. hidi show -d files\People.yml -o People.md -ll trace +```bash +hidi show -d files\People.yml -o People.md -ll trace +``` ### Plugin This command generates an OpenAI style Plugin manifest and minimal OpenAPI file based on the provided API Manifest -**Examples:** +#### Examples: + +```bash +hidi plugin -m exampleApiManifest.yml -o mypluginfolder +``` - 1. hidi plugin -m exampleApiManifest.yml -o mypluginfolder +> Run `hidi plugin -h` to see all the available usage options. \ No newline at end of file From df28d6e6a8fe28013cac036f6419a023b033fd73 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Fri, 14 Mar 2025 16:36:14 +0300 Subject: [PATCH 604/720] feat: enable null reference type support (#2146) * feat: enable NRT * fix: dereference of a possible null reference * chore: code cleanup * chore: convert to conditional expression * Update src/Microsoft.OpenApi/Models/OpenApiOperation.cs Co-authored-by: Vincent Biret * Update src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs Co-authored-by: Vincent Biret * chore: PR feedback * fix: resolve merge conflict errors * chore: remove deprecated code and tests; make param required * chore: code refactor and cleanup * chore: update public API * chore: address PR comments * fix: remove nullable Json node params * chore: use conditional compilation to make reference a required field * refactor: apply nullable to new changes * chore: bad merge Signed-off-by: Vincent Biret * chore: simplifies filtering condition * Update src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs Co-authored-by: Vincent Biret * chore: address more PR feedback * chore: add check for both null and empty strings * chore: revert to include check for empty strings * chore: cleanup * chore: clean up public API * Update src/Microsoft.OpenApi/Reader/Services/OpenApiRemoteReferenceCollector.cs Co-authored-by: Vincent Biret * fix: resolve PR feedback * chore: add defensive programming * chore: resolve merge conflicts * chore: more refactoring * Update src/Microsoft.OpenApi/Reader/V2/OpenApiOperationDeserializer.cs Co-authored-by: Vincent Biret * Update src/Microsoft.OpenApi/Reader/V2/OpenApiPathItemDeserializer.cs Co-authored-by: Vincent Biret * Update src/Microsoft.OpenApi/Reader/V31/OpenApiServerVariableDeserializer.cs Co-authored-by: Vincent Biret * Update src/Microsoft.OpenApi/Reader/V31/OpenApiSecurityRequirementDeserializer.cs Co-authored-by: Vincent Biret * Update src/Microsoft.OpenApi/Reader/V2/OpenApiSecurityRequirementDeserializer.cs Co-authored-by: Vincent Biret * Update src/Microsoft.OpenApi/Reader/V3/OpenApiServerVariableDeserializer.cs Co-authored-by: Vincent Biret * Update src/Microsoft.OpenApi/Reader/V3/OpenApiSecurityRequirementDeserializer.cs Co-authored-by: Vincent Biret * chore: another round of refactoring * chore: clean up nullability of params * fix: compiler errors * fix: remove redundant cast and update public API * chore: fix merge conflict issues * chore: apply copilot suggestion * Update src/Microsoft.OpenApi/Services/OpenApiWalker.cs --------- Signed-off-by: Vincent Biret Co-authored-by: Vincent Biret --- .../Formatters/PowerShellFormatter.cs | 13 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 146 ++++++++++-------- .../Formatters/PowerShellFormatterTests.cs | 22 +-- .../Services/OpenApiFilterServiceTests.cs | 93 +++++------ .../UtilityFiles/OpenApiDocumentMock.cs | 34 ++-- 5 files changed, 165 insertions(+), 143 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index f263dae0..b46e0b2a 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -54,7 +54,7 @@ public override void Visit(IOpenApiSchema schema) public override void Visit(IOpenApiPathItem pathItem) { - if (pathItem.Operations.TryGetValue(HttpMethod.Put, out var value) && + if (pathItem.Operations is not null && pathItem.Operations.TryGetValue(HttpMethod.Put, out var value) && value.OperationId != null) { var operationId = value.OperationId; @@ -150,7 +150,7 @@ private static string RemoveKeyTypeSegment(string operationId, IList parameter private void AddAdditionalPropertiesToSchema(IOpenApiSchema schema) { - if (schema is OpenApiSchema openApiSchema && !_schemaLoop.Contains(schema) && schema.Type.Equals(JsonSchemaType.Object)) + if (schema is OpenApiSchema openApiSchema + && !_schemaLoop.Contains(schema) + && schema.Type.Equals(JsonSchemaType.Object)) { openApiSchema.AdditionalProperties = new OpenApiSchema() { Type = JsonSchemaType.Object }; @@ -187,7 +189,10 @@ private void AddAdditionalPropertiesToSchema(IOpenApiSchema schema) * we need a way to keep track of visited schemas to avoid * endlessly creating and walking them in an infinite recursion. */ - _schemaLoop.Push(schema.AdditionalProperties); + if (schema.AdditionalProperties is not null) + { + _schemaLoop.Push(schema.AdditionalProperties); + } } } diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index e0cce589..7cdf9a2c 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -94,7 +94,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog // Load OpenAPI document var document = await GetOpenApiAsync(options, openApiFormat.GetDisplayName(), logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); - if (options.FilterOptions != null) + if (options.FilterOptions != null && document is not null) { document = ApplyFilters(options, logger, apiDependency, postmanCollection, document); } @@ -107,7 +107,11 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(document); } - await WriteOpenApiAsync(options, openApiFormat, openApiVersion, document, logger, cancellationToken).ConfigureAwait(false); + if (document is not null) + { + // Write the OpenAPI document to the output file + await WriteOpenApiAsync(options, openApiFormat, openApiVersion, document, logger, cancellationToken).ConfigureAwait(false); + } } catch (TaskCanceledException) { @@ -172,7 +176,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, options.FilterOptions.FilterByTags, requestUrls, document, - logger); + logger); if (predicate != null) { var stopwatch = new Stopwatch(); @@ -210,6 +214,7 @@ private static async Task WriteOpenApiAsync(HidiOptions options, OpenApiFormat o var stopwatch = new Stopwatch(); stopwatch.Start(); + await document.SerializeAsync(writer, openApiVersion, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); @@ -219,9 +224,9 @@ private static async Task WriteOpenApiAsync(HidiOptions options, OpenApiFormat o } // Get OpenAPI document either from OpenAPI or CSDL - private static async Task GetOpenApiAsync(HidiOptions options, string format, ILogger logger, string? metadataVersion = null, CancellationToken cancellationToken = default) + private static async Task GetOpenApiAsync(HidiOptions options, string format, ILogger logger, string? metadataVersion = null, CancellationToken cancellationToken = default) { - OpenApiDocument document; + OpenApiDocument? document; Stream stream; if (!string.IsNullOrEmpty(options.Csdl)) @@ -242,7 +247,7 @@ private static async Task GetOpenApiAsync(HidiOptions options, document = await ConvertCsdlToOpenApiAsync(filteredStream ?? stream, format, metadataVersion, options.SettingsConfig, cancellationToken).ConfigureAwait(false); stopwatch.Stop(); - logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document.Paths.Count); + logger.LogTrace("{Timestamp}ms: Generated OpenAPI with {Paths} paths.", stopwatch.ElapsedMilliseconds, document?.Paths.Count); } } else if (!string.IsNullOrEmpty(options.OpenApi)) @@ -370,7 +375,7 @@ private static MemoryStream ApplyFilterToCsdl(Stream csdlStream, string entitySe if (result is null) return null; - return result.Diagnostic.Errors.Count == 0; + return result.Diagnostic?.Errors.Count == 0; } private static async Task ParseOpenApiAsync(string openApiFile, bool inlineExternal, ILogger logger, Stream stream, CancellationToken cancellationToken = default) @@ -407,7 +412,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool /// /// The CSDL stream. /// An OpenAPI document. - public static async Task ConvertCsdlToOpenApiAsync(Stream csdl, string format, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) + public static async Task ConvertCsdlToOpenApiAsync(Stream csdl, string format, string? metadataVersion = null, IConfiguration? settings = null, CancellationToken token = default) { using var reader = new StreamReader(csdl); var csdlText = await reader.ReadToEndAsync(token).ConfigureAwait(false); @@ -425,7 +430,7 @@ public static async Task ConvertCsdlToOpenApiAsync(Stream csdl, /// /// The converted OpenApiDocument. /// A valid OpenApiDocument instance. - public static OpenApiDocument FixReferences(OpenApiDocument document, string format) + public static OpenApiDocument? FixReferences(OpenApiDocument document, string format) { // This method is only needed because the output of ConvertToOpenApi isn't quite a valid OpenApiDocument instance. // So we write it out, and read it back in again to fix it up. @@ -584,52 +589,54 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); var document = await GetOpenApiAsync(options, openApiFormat.GetDisplayName(), logger, null, cancellationToken).ConfigureAwait(false); - - using (logger.BeginScope("Creating diagram")) + if (document is not null) { - // If output is null, create a HTML file in the user's temporary directory - var sourceUrl = (string.IsNullOrEmpty(options.OpenApi), string.IsNullOrEmpty(options.Csdl)) switch { - (false, _) => options.OpenApi!, - (_, false) => options.Csdl!, - _ => throw new InvalidOperationException("No input file path or URL provided") - }; - if (options.Output == null) + using (logger.BeginScope("Creating diagram")) { - var tempPath = Path.GetTempPath() + "/hidi/"; - if (!File.Exists(tempPath)) + // If output is null, create a HTML file in the user's temporary directory + var sourceUrl = (string.IsNullOrEmpty(options.OpenApi), string.IsNullOrEmpty(options.Csdl)) switch { - Directory.CreateDirectory(tempPath); - } - - var fileName = Path.GetRandomFileName(); - - var output = new FileInfo(Path.Combine(tempPath, fileName + ".html")); - using (var file = new FileStream(output.FullName, FileMode.Create)) + (false, _) => options.OpenApi!, + (_, false) => options.Csdl!, + _ => throw new InvalidOperationException("No input file path or URL provided") + }; + if (options.Output == null) { - using var writer = new StreamWriter(file); - WriteTreeDocumentAsHtml(sourceUrl, document, writer); + var tempPath = Path.GetTempPath() + "/hidi/"; + if (!File.Exists(tempPath)) + { + Directory.CreateDirectory(tempPath); + } + + var fileName = Path.GetRandomFileName(); + + var output = new FileInfo(Path.Combine(tempPath, fileName + ".html")); + using (var file = new FileStream(output.FullName, FileMode.Create)) + { + using var writer = new StreamWriter(file); + WriteTreeDocumentAsHtml(sourceUrl, document, writer); + } + logger.LogTrace("Created Html document with diagram "); + + // Launch a browser to display the output html file + using var process = new Process(); + process.StartInfo.FileName = output.FullName; + process.StartInfo.UseShellExecute = true; + process.Start(); + + return output.FullName; } - logger.LogTrace("Created Html document with diagram "); - - // Launch a browser to display the output html file - using var process = new Process(); - process.StartInfo.FileName = output.FullName; - process.StartInfo.UseShellExecute = true; - process.Start(); - - return output.FullName; - } - else // Write diagram as Markdown document to output file - { - using (var file = new FileStream(options.Output.FullName, FileMode.Create)) + else // Write diagram as Markdown document to output file { + using var file = new FileStream(options.Output.FullName, FileMode.Create); using var writer = new StreamWriter(file); WriteTreeDocumentAsMarkdown(sourceUrl, document, writer); + + logger.LogTrace("Created markdown document with diagram "); + return options.Output.FullName; } - logger.LogTrace("Created markdown document with diagram "); - return options.Output.FullName; } - } + } } catch (TaskCanceledException) { @@ -645,7 +652,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl private static void LogErrors(ILogger logger, ReadResult result) { var context = result.Diagnostic; - if (context.Errors.Count != 0) + if (context is not null && context.Errors.Count != 0) { using (logger.BeginScope("Detected errors")) { @@ -697,7 +704,7 @@ internal static void WriteTreeDocumentAsHtml(string sourceUrl, OpenApiDocument d """); - writer.WriteLine("

" + document.Info.Title + "

"); + writer.WriteLine("

" + document?.Info.Title + "

"); writer.WriteLine(); writer.WriteLine($"

API Description: {sourceUrl}

"); @@ -751,7 +758,7 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg cancellationToken.ThrowIfCancellationRequested(); - if (options.FilterOptions != null) + if (options.FilterOptions != null && document is not null) { document = ApplyFilters(options, logger, apiDependency, null, document); } @@ -765,24 +772,31 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg // Write OpenAPI to Output folder options.Output = new(Path.Combine(options.OutputFolder, "openapi.json")); options.TerseOutput = true; - await WriteOpenApiAsync(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_1, document, logger, cancellationToken).ConfigureAwait(false); - - // Create OpenAIPluginManifest from ApiDependency and OpenAPI document - var manifest = new OpenAIPluginManifest(document.Info?.Title ?? "Title", document.Info?.Title ?? "Title", "https://go.microsoft.com/fwlink/?LinkID=288890", document.Info?.Contact?.Email ?? "placeholder@contoso.com", document.Info?.License?.Url.ToString() ?? "https://placeholderlicenseurl.com") - { - DescriptionForHuman = document.Info?.Description ?? "Description placeholder", - Api = new("openapi", "./openapi.json"), - Auth = new ManifestNoAuth(), - }; - manifest.NameForModel = manifest.NameForHuman; - manifest.DescriptionForModel = manifest.DescriptionForHuman; - - // Write OpenAIPluginManifest to Output folder - var manifestFile = new FileInfo(Path.Combine(options.OutputFolder, "ai-plugin.json")); - using var file = new FileStream(manifestFile.FullName, FileMode.Create); - using var jsonWriter = new Utf8JsonWriter(file, new() { Indented = true }); - manifest.Write(jsonWriter); - await jsonWriter.FlushAsync(cancellationToken).ConfigureAwait(false); + if (document is not null) + { + await WriteOpenApiAsync(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_1, document, logger, cancellationToken).ConfigureAwait(false); + + // Create OpenAIPluginManifest from ApiDependency and OpenAPI document + var manifest = new OpenAIPluginManifest(document.Info.Title ?? "Title", + document.Info.Title ?? "Title", + "https://go.microsoft.com/fwlink/?LinkID=288890", + document.Info?.Contact?.Email ?? "placeholder@contoso.com", + document.Info?.License?.Url?.ToString() ?? "https://placeholderlicenseurl.com") + { + DescriptionForHuman = document.Info?.Description ?? "Description placeholder", + Api = new("openapi", "./openapi.json"), + Auth = new ManifestNoAuth(), + }; + manifest.NameForModel = manifest.NameForHuman; + manifest.DescriptionForModel = manifest.DescriptionForHuman; + + // Write OpenAIPluginManifest to Output folder + var manifestFile = new FileInfo(Path.Combine(options.OutputFolder, "ai-plugin.json")); + using var file = new FileStream(manifestFile.FullName, FileMode.Create); + using var jsonWriter = new Utf8JsonWriter(file, new() { Indented = true }); + manifest.Write(jsonWriter); + await jsonWriter.FlushAsync(cancellationToken).ConfigureAwait(false); + } } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 49b020a1..92cfae01 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -51,7 +51,7 @@ public void FormatOperationIdsInOpenAPIDocument(string operationId, string expec walker.Walk(openApiDocument); // Assert - Assert.Equal(expectedOperationId, openApiDocument.Paths[path].Operations[operationType].OperationId); + Assert.Equal(expectedOperationId, openApiDocument.Paths[path].Operations?[operationType].OperationId); } [Fact] @@ -68,20 +68,20 @@ public void RemoveAnyOfAndOneOfFromSchema() Assert.NotNull(openApiDocument.Components); Assert.NotNull(openApiDocument.Components.Schemas); var testSchema = openApiDocument.Components.Schemas["TestSchema"]; - var averageAudioDegradationProperty = testSchema.Properties["averageAudioDegradation"]; - var defaultPriceProperty = testSchema.Properties["defaultPrice"]; + var averageAudioDegradationProperty = testSchema.Properties?["averageAudioDegradation"]; + var defaultPriceProperty = testSchema.Properties?["defaultPrice"]; // Assert Assert.NotNull(openApiDocument.Components); Assert.NotNull(openApiDocument.Components.Schemas); Assert.NotNull(testSchema); - Assert.Null(averageAudioDegradationProperty.AnyOf); - Assert.Equal(JsonSchemaType.Number | JsonSchemaType.Null, averageAudioDegradationProperty.Type); - Assert.Equal("float", averageAudioDegradationProperty.Format); - Assert.Equal(JsonSchemaType.Null, averageAudioDegradationProperty.Type & JsonSchemaType.Null); - Assert.Null(defaultPriceProperty.OneOf); - Assert.Equal(JsonSchemaType.Number, defaultPriceProperty.Type); - Assert.Equal("double", defaultPriceProperty.Format); + Assert.Null(averageAudioDegradationProperty?.AnyOf); + Assert.Equal(JsonSchemaType.Number | JsonSchemaType.Null, averageAudioDegradationProperty?.Type); + Assert.Equal("float", averageAudioDegradationProperty?.Format); + Assert.Equal(JsonSchemaType.Null, averageAudioDegradationProperty?.Type & JsonSchemaType.Null); + Assert.Null(defaultPriceProperty?.OneOf); + Assert.Equal(JsonSchemaType.Number, defaultPriceProperty?.Type); + Assert.Equal("double", defaultPriceProperty?.Format); Assert.NotNull(testSchema.AdditionalProperties); } @@ -96,7 +96,7 @@ public void ResolveFunctionParameters() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var idsParameter = openApiDocument.Paths["/foo"].Operations[HttpMethod.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); + var idsParameter = openApiDocument.Paths["/foo"].Operations?[HttpMethod.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); // Assert Assert.Null(idsParameter?.Content); diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 57d2d509..7702c56c 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -104,9 +104,9 @@ public void TestPredicateFiltersUsingRelativeRequestUrls() var predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: openApiDocument); // Then - Assert.True(predicate("/foo", HttpMethod.Get, null)); - Assert.True(predicate("/foo", HttpMethod.Post, null)); - Assert.False(predicate("/foo", HttpMethod.Patch, null)); + Assert.True(predicate("/foo", HttpMethod.Get, null!)); + Assert.True(predicate("/foo", HttpMethod.Post, null!)); + Assert.False(predicate("/foo", HttpMethod.Patch, null!)); } [Fact] @@ -157,7 +157,7 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() // Assert that there's only 1 parameter in the subset document Assert.NotNull(subsetDoc); Assert.NotEmpty(subsetDoc.Paths); - Assert.Single(subsetDoc.Paths.First().Value.Parameters); + Assert.Single(subsetDoc.Paths.First().Value.Parameters!); } [Fact] @@ -239,52 +239,55 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( var settings = new OpenApiReaderSettings(); settings.AddYamlReader(); var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings)).Document; - + // validated the tags are read as references - var openApiOperationTags = doc.Paths["/items"].Operations[HttpMethod.Get].Tags?.ToArray(); + var openApiOperationTags = doc?.Paths["/items"].Operations?[HttpMethod.Get].Tags?.ToArray(); Assert.NotNull(openApiOperationTags); Assert.Single(openApiOperationTags); Assert.True(openApiOperationTags[0].UnresolvedReference); - - var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); - var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); - - var response = subsetOpenApiDocument.Paths["/items"].Operations[HttpMethod.Get]?.Responses?["200"]; - var responseHeader = response?.Headers["x-custom-header"]; - var mediaTypeExample = response?.Content["application/json"]?.Examples?.First().Value; - var targetHeaders = subsetOpenApiDocument.Components?.Headers; - var targetExamples = subsetOpenApiDocument.Components?.Examples; - // Assert - Assert.Same(doc.Servers, subsetOpenApiDocument.Servers); - var headerReference = Assert.IsType(responseHeader); - Assert.False(headerReference.UnresolvedReference); - var exampleReference = Assert.IsType(mediaTypeExample); - Assert.False(exampleReference?.UnresolvedReference); - Assert.NotNull(targetHeaders); - Assert.Single(targetHeaders); - Assert.NotNull(targetExamples); - Assert.Single(targetExamples); - // validated the tags of the trimmed document are read as references - var trimmedOpenApiOperationTags = subsetOpenApiDocument.Paths["/items"].Operations[HttpMethod.Get].Tags?.ToArray(); - Assert.NotNull(trimmedOpenApiOperationTags); - Assert.Single(trimmedOpenApiOperationTags); - Assert.True(trimmedOpenApiOperationTags[0].UnresolvedReference); - - // Finally try to write the trimmed document as v3 document - var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); - var writer = new OpenApiJsonWriter(outputStringWriter) + var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); + if (doc is not null) { - Settings = new OpenApiWriterSettings() + var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); + + var response = subsetOpenApiDocument.Paths?["/items"].Operations?[HttpMethod.Get]?.Responses?["200"]; + var responseHeader = response?.Headers?["x-custom-header"]; + var mediaTypeExample = response?.Content?["application/json"]?.Examples?.First().Value; + var targetHeaders = subsetOpenApiDocument.Components?.Headers; + var targetExamples = subsetOpenApiDocument.Components?.Examples; + + // Assert + Assert.Same(doc.Servers, subsetOpenApiDocument.Servers); + var headerReference = Assert.IsType(responseHeader); + Assert.False(headerReference.UnresolvedReference); + var exampleReference = Assert.IsType(mediaTypeExample); + Assert.False(exampleReference?.UnresolvedReference); + Assert.NotNull(targetHeaders); + Assert.Single(targetHeaders); + Assert.NotNull(targetExamples); + Assert.Single(targetExamples); + // validated the tags of the trimmed document are read as references + var trimmedOpenApiOperationTags = subsetOpenApiDocument.Paths?["/items"].Operations?[HttpMethod.Get].Tags?.ToArray(); + Assert.NotNull(trimmedOpenApiOperationTags); + Assert.Single(trimmedOpenApiOperationTags); + Assert.True(trimmedOpenApiOperationTags[0].UnresolvedReference); + + // Finally try to write the trimmed document as v3 document + var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); + var writer = new OpenApiJsonWriter(outputStringWriter) { - InlineExternalReferences = true, - InlineLocalReferences = true - } - }; - subsetOpenApiDocument.SerializeAsV3(writer); - await writer.FlushAsync(); - var result = outputStringWriter.ToString(); - Assert.NotEmpty(result); + Settings = new OpenApiWriterSettings() + { + InlineExternalReferences = true, + InlineLocalReferences = true + } + }; + subsetOpenApiDocument.SerializeAsV3(writer); + await writer.FlushAsync(); + var result = outputStringWriter.ToString(); + Assert.NotEmpty(result); + } } [Theory] @@ -299,8 +302,8 @@ public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string? oper // Assert foreach (var pathItem in subsetOpenApiDocument.Paths) { - Assert.True(pathItem.Value.Parameters.Any()); - Assert.Single(pathItem.Value.Parameters); + Assert.True(pathItem.Value.Parameters!.Any()); + Assert.Single(pathItem.Value.Parameters!); } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 0cc1bc2f..71768bfb 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -678,23 +678,23 @@ public static OpenApiDocument CreateOpenApiDocument() } } }; - document.Paths[getTeamsActivityByPeriodPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; - document.Paths[getTeamsActivityByDatePath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; - document.Paths[usersPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; - document.Paths[usersByIdPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; - document.Paths[usersByIdPath].Operations[HttpMethod.Patch].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; - document.Paths[messagesByIdPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.message", document)}; - document.Paths[administrativeUnitRestorePath].Operations[HttpMethod.Post].Tags = new HashSet {new OpenApiTagReference("administrativeUnits.Actions", document)}; - document.Paths[logoPath].Operations[HttpMethod.Put].Tags = new HashSet {new OpenApiTagReference("applications.application", document)}; - document.Paths[securityProfilesPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("security.hostSecurityProfile", document)}; - document.Paths[communicationsCallsKeepAlivePath].Operations[HttpMethod.Post].Tags = new HashSet {new OpenApiTagReference("communications.Actions", document)}; - document.Paths[eventsDeltaPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("groups.Functions", document)}; - document.Paths[refPath].Operations[HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("applications.directoryObject", document)}; - ((OpenApiSchema)document.Paths[usersPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.user", document); - document.Paths[usersByIdPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.user", document); - document.Paths[messagesByIdPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.message", document); - ((OpenApiSchema)document.Paths[securityProfilesPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.networkInterface", document); - ((OpenApiSchema)document.Paths[eventsDeltaPath].Operations[HttpMethod.Get].Responses!["200"].Content[applicationJsonMediaType].Schema!.Properties["value"]).Items = new OpenApiSchemaReference("microsoft.graph.event", document); + document.Paths[getTeamsActivityByPeriodPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; + document.Paths[getTeamsActivityByDatePath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("reports.Functions", document)}; + document.Paths[usersPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[usersByIdPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[usersByIdPath].Operations![HttpMethod.Patch].Tags = new HashSet {new OpenApiTagReference("users.user", document)}; + document.Paths[messagesByIdPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("users.message", document)}; + document.Paths[administrativeUnitRestorePath].Operations![HttpMethod.Post].Tags = new HashSet {new OpenApiTagReference("administrativeUnits.Actions", document)}; + document.Paths[logoPath].Operations![HttpMethod.Put].Tags = new HashSet {new OpenApiTagReference("applications.application", document)}; + document.Paths[securityProfilesPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("security.hostSecurityProfile", document)}; + document.Paths[communicationsCallsKeepAlivePath].Operations![HttpMethod.Post].Tags = new HashSet {new OpenApiTagReference("communications.Actions", document)}; + document.Paths[eventsDeltaPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("groups.Functions", document)}; + document.Paths[refPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("applications.directoryObject", document)}; + ((OpenApiSchema)document.Paths[usersPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema!.Properties!["value"]).Items = new OpenApiSchemaReference("microsoft.graph.user", document); + document.Paths[usersByIdPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.user", document); + document.Paths[messagesByIdPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.message", document); + ((OpenApiSchema)document.Paths[securityProfilesPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema!.Properties!["value"]).Items = new OpenApiSchemaReference("microsoft.graph.networkInterface", document); + ((OpenApiSchema)document.Paths[eventsDeltaPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema!.Properties!["value"]).Items = new OpenApiSchemaReference("microsoft.graph.event", document); return document; } } From fd2680ceb5975fc14ca8d2a96314a93478bc0f21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 21:40:31 +0000 Subject: [PATCH 605/720] chore(deps): bump Microsoft.VisualStudio.Threading.Analyzers Bumps [Microsoft.VisualStudio.Threading.Analyzers](https://github.com/microsoft/vs-threading) from 17.13.2 to 17.13.61. - [Release notes](https://github.com/microsoft/vs-threading/releases) - [Commits](https://github.com/microsoft/vs-threading/commits) --- updated-dependencies: - dependency-name: Microsoft.VisualStudio.Threading.Analyzers dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 60437d3f..f510d987 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -1,4 +1,4 @@ - + Exe @@ -32,7 +32,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 429744bf95825cb708dac5dd4c4f753c88d7cab0 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 18 Mar 2025 19:28:11 +0300 Subject: [PATCH 606/720] chore: upgrade package version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index eec5874c..f86df01d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - +
From 2f561cf726c48f59dbd361da61c42db7608b357a Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 18 Mar 2025 19:49:57 +0300 Subject: [PATCH 607/720] chore: upgrade OData lib version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f86df01d..3d2d9759 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@
- + From a538ac021b1a5f970009e368f44d25006cc948c6 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 31 Mar 2025 14:04:41 -0400 Subject: [PATCH 608/720] fix: hidi fails to parse yaml files when fixing references --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 9f026c3e..8b412d14 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -438,7 +438,10 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool var sb = new StringBuilder(); document.SerializeAsV3(new OpenApiYamlWriter(new StringWriter(sb))); - var doc = OpenApiDocument.Parse(sb.ToString(), format).Document; + var settings = new OpenApiReaderSettings(); + settings.AddYamlReader(); + + var doc = OpenApiDocument.Parse(sb.ToString(), format, settings).Document; return doc; } From 1b5e65e3f92111999b94ac8a6202f0d9af4ba428 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 2 Apr 2025 11:16:02 -0400 Subject: [PATCH 609/720] chore: upgrades yoko to the latest preview --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 3d2d9759..5bc72d2c 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 06a93f35df4f30b71eb362d73497666ccb987e97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 22:00:50 +0000 Subject: [PATCH 610/720] chore(deps): bump Microsoft.Extensions.Logging.Abstractions Bumps [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime) from 9.0.3 to 9.0.4. - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.3...v9.0.4) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 9.0.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 5bc72d2c..437fbef5 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,7 +29,7 @@ - + From b18095dbe64bb42a599b514115e4b89520895009 Mon Sep 17 00:00:00 2001 From: Maggie Kimani Date: Wed, 9 Apr 2025 12:29:41 +0300 Subject: [PATCH 611/720] feat: Remove default collection initialization for perf reasons (#2284) * feat: use lazy get for collection initialization to reduce resource allocation * chore: use Lazy pattern; preserve null values * chore: replicate for collections in other components * chore: remove unnecessary usings * fix: revert lazy initialization; remove collection initialization * chore: initialize collections to prevent NREs * chore: fix failing tests * chore: revert changes * chore: remove default collection initialization across all models; clean up and fix tests * chore: clean up code; initialize collections where applicable * chore: more cleanup * chore: move assignment within the condition * chore: replace interface with concrete type * chore: simplify collection initialization * Update src/Microsoft.OpenApi/Models/OpenApiPathItem.cs Co-authored-by: Vincent Biret * chore: implement PR feedback * chore: reverts casing change --------- Co-authored-by: Vincent Biret --- .../Extensions/OpenApiExtensibleExtensions.cs | 2 +- .../Extensions/StringExtensions.cs | 2 +- .../Formatters/PowerShellFormatter.cs | 10 +- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- .../Formatters/PowerShellFormatterTests.cs | 30 ++-- .../Services/OpenApiFilterServiceTests.cs | 14 +- .../Services/OpenApiServiceTests.cs | 2 +- .../UtilityFiles/OpenApiDocumentMock.cs | 150 +++++++++--------- 8 files changed, 103 insertions(+), 109 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs index f4b4f77c..368b67e8 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs @@ -13,7 +13,7 @@ internal static class OpenApiExtensibleExtensions /// A dictionary of . /// The key corresponding to the . /// A value matching the provided extensionKey. Return null when extensionKey is not found. - internal static string GetExtension(this IDictionary extensions, string extensionKey) + internal static string GetExtension(this Dictionary extensions, string extensionKey) { if (extensions.TryGetValue(extensionKey, out var value) && value is OpenApiAny { Node: JsonValue castValue } && castValue.TryGetValue(out var stringValue)) { diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs index 3d636208..bd05e964 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/StringExtensions.cs @@ -34,7 +34,7 @@ public static bool IsEquals(this string? target, string? searchValue, StringComp /// The target string to split by char. /// The char separator. /// An containing substrings. - public static IList SplitByChar(this string target, char separator) + public static List SplitByChar(this string target, char separator) { if (string.IsNullOrWhiteSpace(target)) { diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index b46e0b2a..a07888a9 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -77,7 +77,7 @@ public override void Visit(OpenApiOperation operation) // Order matters. Resolve operationId. operationId = RemoveHashSuffix(operationId); if (operationTypeExtension.IsEquals("action") || operationTypeExtension.IsEquals("function")) - operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? new List()); + operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? []); operationId = SingularizeAndDeduplicateOperationId(operationId.SplitByChar('.')); operationId = ResolveODataCastOperationId(operationId); operationId = ResolveByRefOperationId(operationId); @@ -119,7 +119,7 @@ private static string ResolveODataCastOperationId(string operationId) return match.Success ? $"{match.Groups[1]}{match.Groups[2]}" : operationId; } - private static string SingularizeAndDeduplicateOperationId(IList operationIdSegments) + private static string SingularizeAndDeduplicateOperationId(List operationIdSegments) { var segmentsCount = operationIdSegments.Count; var lastSegmentIndex = segmentsCount - 1; @@ -145,7 +145,7 @@ private static string RemoveHashSuffix(string operationId) return s_hashSuffixRegex.Match(operationId).Value; } - private static string RemoveKeyTypeSegment(string operationId, IList parameters) + private static string RemoveKeyTypeSegment(string operationId, List parameters) { var segments = operationId.SplitByChar('.'); foreach (var parameter in parameters) @@ -159,9 +159,9 @@ private static string RemoveKeyTypeSegment(string operationId, IList parameters) + private static void ResolveFunctionParameters(List parameters) { - foreach (var parameter in parameters.OfType().Where(static p => p.Content?.Any() ?? false)) + foreach (var parameter in parameters.OfType().Where(static p => p.Content?.Count > 0)) { // Replace content with a schema object of type array // for structured or collection-valued function parameters diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index d157a6c4..0f5a9faf 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -27,7 +27,7 @@ public override void Visit(IOpenApiSchema schema) public int HeaderCount { get; set; } - public override void Visit(IDictionary headers) + public override void Visit(Dictionary headers) { HeaderCount++; } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 92cfae01..7b3cd338 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -32,11 +32,11 @@ public void FormatOperationIdsInOpenAPIDocument(string operationId, string expec var openApiDocument = new OpenApiDocument { Info = new() { Title = "Test", Version = "1.0" }, - Servers = new List { new() { Url = "https://localhost/" } }, + Servers = [new() { Url = "https://localhost/" }], Paths = new() { { path, new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { operationType, new() { OperationId = operationId } } } @@ -96,7 +96,7 @@ public void ResolveFunctionParameters() var walker = new OpenApiWalker(powerShellFormatter); walker.Walk(openApiDocument); - var idsParameter = openApiDocument.Paths["/foo"].Operations?[HttpMethod.Get].Parameters?.Where(static p => p.Name == "ids").FirstOrDefault(); + var idsParameter = openApiDocument.Paths["/foo"].Operations?[HttpMethod.Get].Parameters?.FirstOrDefault(static p => p.Name == "ids"); // Assert Assert.Null(idsParameter?.Content); @@ -109,11 +109,11 @@ private static OpenApiDocument GetSampleOpenApiDocument() return new() { Info = new() { Title = "Test", Version = "1.0" }, - Servers = new List { new() { Url = "https://localhost/" } }, + Servers = [new() { Url = "https://localhost/" }], Paths = new() { { "/foo", new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new() @@ -125,7 +125,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() { Name = "ids", In = ParameterLocation.Query, - Content = new Dictionary + Content = new() { { "application/json", @@ -144,7 +144,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() } } ], - Extensions = new Dictionary + Extensions = new() { { "x-ms-docs-operation-type", new OpenApiAny("function") @@ -158,32 +158,32 @@ private static OpenApiDocument GetSampleOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new() { { "TestSchema", new OpenApiSchema { Type = JsonSchemaType.Object, - Properties = new Dictionary + Properties = new() { { "averageAudioDegradation", new OpenApiSchema { - AnyOf = new List - { + AnyOf = + [ new OpenApiSchema() { Type = JsonSchemaType.Number | JsonSchemaType.Null }, new OpenApiSchema() { Type = JsonSchemaType.String } - }, + ], Format = "float", } }, { "defaultPrice", new OpenApiSchema { - OneOf = new List - { + OneOf = + [ new OpenApiSchema() { Type = JsonSchemaType.Number, Format = "double" }, new OpenApiSchema() { Type = JsonSchemaType.String } - } + ] } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 7702c56c..e617d3b3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -79,11 +79,11 @@ public void TestPredicateFiltersUsingRelativeRequestUrls() var openApiDocument = new OpenApiDocument { Info = new() { Title = "Test", Version = "1.0" }, - Servers = new List { new() { Url = "https://localhost/" } }, + Servers = [new() { Url = "https://localhost/" }], Paths = new() { {"/foo", new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new() }, { HttpMethod.Patch, new() }, @@ -97,7 +97,7 @@ public void TestPredicateFiltersUsingRelativeRequestUrls() // Given a set of RequestUrls var requestUrls = new Dictionary> { - {"/foo", new List {"GET","POST"}} + {"/foo", ["GET","POST"]} }; // When @@ -116,12 +116,12 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() var openApiDocument = new OpenApiDocument { Info = new() { Title = "Test", Version = "1.0" }, - Servers = new List { new() { Url = "https://localhost/" } }, + Servers = [new() { Url = "https://localhost/" }], Paths = new() { ["/test/{id}"] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new() }, { HttpMethod.Patch, new() } @@ -147,7 +147,7 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() var requestUrls = new Dictionary> { - {"/test/{id}", new List {"GET","PATCH"}} + {"/test/{id}",["GET","PATCH"]} }; // Act @@ -302,7 +302,7 @@ public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string? oper // Assert foreach (var pathItem in subsetOpenApiDocument.Paths) { - Assert.True(pathItem.Value.Parameters!.Any()); + Assert.True(pathItem.Value.Parameters!.Count != 0); Assert.Single(pathItem.Value.Parameters!); } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index f39e87c6..7e5b4de3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -45,7 +45,7 @@ public void CreateFilteredDocumentOnMinimalOpenApi() { ["/test"] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { [HttpMethod.Get] = new OpenApiOperation() } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 71768bfb..421cecdd 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -40,18 +40,18 @@ public static OpenApiDocument CreateOpenApiDocument() Title = "People", Version = "v1.0" }, - Servers = new List - { + Servers = + [ new() { Url = "https://graph.microsoft.com/v1.0" } - }, + ], Paths = new() { ["/"] = new OpenApiPathItem() // root path { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation @@ -72,35 +72,33 @@ public static OpenApiDocument CreateOpenApiDocument() }, [getTeamsActivityByPeriodPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation { OperationId = "reports.getTeamsUserActivityCounts", Summary = "Invoke function getTeamsUserActivityUserCounts", - Parameters = new List - { + Parameters = + [ + new OpenApiParameter() { - new OpenApiParameter() + Name = "period", + In = ParameterLocation.Path, + Required = true, + Schema = new OpenApiSchema() { - Name = "period", - In = ParameterLocation.Path, - Required = true, - Schema = new OpenApiSchema() - { - Type = JsonSchemaType.String - } + Type = JsonSchemaType.String } } - }, + ], Responses = new() { { "200", new OpenApiResponse() { Description = "Success", - Content = new Dictionary + Content = new() { { applicationJsonMediaType, @@ -119,53 +117,49 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Parameters = new List - { + Parameters = + [ + new OpenApiParameter() { - new OpenApiParameter() + Name = "period", + In = ParameterLocation.Path, + Required = true, + Schema = new OpenApiSchema() { - Name = "period", - In = ParameterLocation.Path, - Required = true, - Schema = new OpenApiSchema() - { - Type = JsonSchemaType.String - } + Type = JsonSchemaType.String } } - } + ] }, [getTeamsActivityByDatePath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation { OperationId = "reports.getTeamsUserActivityUserDetail-a3f1", Summary = "Invoke function getTeamsUserActivityUserDetail", - Parameters = new List - { + Parameters = + [ + new OpenApiParameter() { - new OpenApiParameter() + Name = "period", + In = ParameterLocation.Path, + Required = true, + Schema = new OpenApiSchema() { - Name = "period", - In = ParameterLocation.Path, - Required = true, - Schema = new OpenApiSchema() - { - Type = JsonSchemaType.String - } + Type = JsonSchemaType.String } } - }, + ], Responses = new() { { "200", new OpenApiResponse() { Description = "Success", - Content = new Dictionary + Content = new() { { applicationJsonMediaType, @@ -184,8 +178,8 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Parameters = new List - { + Parameters = + [ new OpenApiParameter() { Name = "period", @@ -196,11 +190,11 @@ public static OpenApiDocument CreateOpenApiDocument() Type = JsonSchemaType.String } } - } + ] }, [usersPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation @@ -213,7 +207,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved entities", - Content = new Dictionary + Content = new() { { applicationJsonMediaType, @@ -223,7 +217,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Title = "Collection of user", Type = JsonSchemaType.Object, - Properties = new Dictionary + Properties = new() { { "value", @@ -246,7 +240,7 @@ public static OpenApiDocument CreateOpenApiDocument() }, [usersByIdPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation @@ -259,7 +253,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved entity", - Content = new Dictionary + Content = new() { { applicationJsonMediaType, @@ -293,7 +287,7 @@ public static OpenApiDocument CreateOpenApiDocument() }, [messagesByIdPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation @@ -301,8 +295,8 @@ public static OpenApiDocument CreateOpenApiDocument() OperationId = "users.GetMessages", Summary = "Get messages from users", Description = "The messages in a mailbox or folder. Read-only. Nullable.", - Parameters = new List - { + Parameters = + [ new OpenApiParameter() { Name = "$select", @@ -315,14 +309,14 @@ public static OpenApiDocument CreateOpenApiDocument() } // missing explode parameter } - }, + ], Responses = new() { { "200", new OpenApiResponse() { Description = "Retrieved navigation property", - Content = new Dictionary + Content = new() { { applicationJsonMediaType, @@ -340,7 +334,7 @@ public static OpenApiDocument CreateOpenApiDocument() }, [administrativeUnitRestorePath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Post, new OpenApiOperation @@ -369,7 +363,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new Dictionary + Content = new() { { applicationJsonMediaType, @@ -391,7 +385,7 @@ public static OpenApiDocument CreateOpenApiDocument() }, [logoPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Put, new OpenApiOperation @@ -413,7 +407,7 @@ public static OpenApiDocument CreateOpenApiDocument() }, [securityProfilesPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation @@ -426,7 +420,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved navigation property", - Content = new Dictionary + Content = new() { { applicationJsonMediaType, @@ -436,7 +430,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Title = "Collection of hostSecurityProfile", Type = JsonSchemaType.Object, - Properties = new Dictionary + Properties = new() { { "value", @@ -459,15 +453,15 @@ public static OpenApiDocument CreateOpenApiDocument() }, [communicationsCallsKeepAlivePath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Post, new OpenApiOperation { OperationId = "communications.calls.call.keepAlive", Summary = "Invoke action keepAlive", - Parameters = new List - { + Parameters = + [ new OpenApiParameter() { Name = "call-id", @@ -478,14 +472,14 @@ public static OpenApiDocument CreateOpenApiDocument() { Type = JsonSchemaType.String }, - Extensions = new Dictionary + Extensions = new() { { "x-ms-docs-key-type", new OpenApiAny("call") } } } - }, + ], Responses = new() { { @@ -495,7 +489,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Extensions = new Dictionary + Extensions = new() { { "x-ms-docs-operation-type", new OpenApiAny("action") @@ -507,15 +501,15 @@ public static OpenApiDocument CreateOpenApiDocument() }, [eventsDeltaPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation { OperationId = "groups.group.events.event.calendar.events.delta", Summary = "Invoke function delta", - Parameters = new List - { + Parameters = + [ new OpenApiParameter() { Name = "group-id", @@ -526,7 +520,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Type = JsonSchemaType.String }, - Extensions = new Dictionary + Extensions = new() { { "x-ms-docs-key-type", new OpenApiAny("group") @@ -543,21 +537,21 @@ public static OpenApiDocument CreateOpenApiDocument() { Type = JsonSchemaType.String }, - Extensions = new Dictionary + Extensions = new() { { "x-ms-docs-key-type", new OpenApiAny("event") } } } - }, + ], Responses = new() { { "200", new OpenApiResponse() { Description = "Success", - Content = new Dictionary + Content = new() { { applicationJsonMediaType, @@ -565,7 +559,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Schema = new OpenApiSchema() { - Properties = new Dictionary + Properties = new() { { "value", @@ -582,7 +576,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Extensions = new Dictionary + Extensions = new() { { "x-ms-docs-operation-type", new OpenApiAny("function") @@ -594,7 +588,7 @@ public static OpenApiDocument CreateOpenApiDocument() }, [refPath] = new OpenApiPathItem() { - Operations = new Dictionary + Operations = new() { { HttpMethod.Get, new OpenApiOperation @@ -608,14 +602,14 @@ public static OpenApiDocument CreateOpenApiDocument() }, Components = new() { - Schemas = new Dictionary + Schemas = new() { { "microsoft.graph.networkInterface", new OpenApiSchema { Title = "networkInterface", Type = JsonSchemaType.Object, - Properties = new Dictionary + Properties = new() { { "description", new OpenApiSchema From 035100a4a7b0b9303bd32e63e587bdce5ff64b3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 22:04:40 +0000 Subject: [PATCH 612/720] chore(deps): bump Microsoft.Extensions.Logging, Microsoft.Extensions.Logging.Abstractions, Microsoft.Extensions.Logging.Console and System.Text.Json Bumps [Microsoft.Extensions.Logging](https://github.com/dotnet/runtime), [Microsoft.Extensions.Logging.Abstractions](https://github.com/dotnet/runtime), [Microsoft.Extensions.Logging.Console](https://github.com/dotnet/runtime) and [System.Text.Json](https://github.com/dotnet/runtime). These dependencies needed to be updated together. Updates `Microsoft.Extensions.Logging` from 9.0.3 to 9.0.4 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.3...v9.0.4) Updates `Microsoft.Extensions.Logging.Abstractions` from 9.0.4 to 9.0.4 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.4...v9.0.4) Updates `Microsoft.Extensions.Logging.Console` from 9.0.3 to 9.0.4 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.3...v9.0.4) Updates `System.Text.Json` from 9.0.4 to 9.0.4 - [Release notes](https://github.com/dotnet/runtime/releases) - [Commits](https://github.com/dotnet/runtime/compare/v9.0.4...v9.0.4) --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.4 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 9.0.4 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.4 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 437fbef5..1e1a8c80 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,9 +28,9 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive From 3db290241ec3db3e9cd333daf5f926296f6f7389 Mon Sep 17 00:00:00 2001 From: Martin Costello Date: Tue, 15 Apr 2025 13:25:00 +0100 Subject: [PATCH 613/720] fix: Improve handling of OpenAPI tag references (#2325) * Fix OpenApiTagComparer behaviour Update `OpenApiTagComparer` to behave intuitively with `OpenApiTagReference` instances pointing to tags not defined in an `OpenApiDocument`. Contributes to #2319. * Verify tag references on serialization Verify OpenAPI tag references refer to a valid OpenAPI tag in the document on serialization. Resolves #2319. --- .../Services/OpenApiFilterServiceTests.cs | 7 ++++--- .../UtilityFiles/docWithReusableHeadersAndExamples.yaml | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index e617d3b3..4b17ad69 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -244,7 +244,7 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( var openApiOperationTags = doc?.Paths["/items"].Operations?[HttpMethod.Get].Tags?.ToArray(); Assert.NotNull(openApiOperationTags); Assert.Single(openApiOperationTags); - Assert.True(openApiOperationTags[0].UnresolvedReference); + Assert.NotNull(openApiOperationTags[0].Target); var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); if (doc is not null) @@ -271,7 +271,7 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( var trimmedOpenApiOperationTags = subsetOpenApiDocument.Paths?["/items"].Operations?[HttpMethod.Get].Tags?.ToArray(); Assert.NotNull(trimmedOpenApiOperationTags); Assert.Single(trimmedOpenApiOperationTags); - Assert.True(trimmedOpenApiOperationTags[0].UnresolvedReference); + Assert.NotNull(trimmedOpenApiOperationTags[0].Target); // Finally try to write the trimmed document as v3 document var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); @@ -302,7 +302,8 @@ public void ReturnsPathParametersOnSlicingBasedOnOperationIdsOrTags(string? oper // Assert foreach (var pathItem in subsetOpenApiDocument.Paths) { - Assert.True(pathItem.Value.Parameters!.Count != 0); + Assert.NotNull(pathItem.Value.Parameters); + Assert.NotEmpty(pathItem.Value.Parameters); Assert.Single(pathItem.Value.Parameters!); } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml index 8edeb194..60ccbe05 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/docWithReusableHeadersAndExamples.yaml @@ -81,3 +81,5 @@ components: value: name: "New Item" +tags: + - name: list.items From eeda88350c74d1f49da85ee6bc75ada2d1fe74a1 Mon Sep 17 00:00:00 2001 From: Michael Wamae <68949852+Michael-Wamae@users.noreply.github.com> Date: Wed, 16 Apr 2025 13:49:02 +0300 Subject: [PATCH 614/720] feat: openapiformat enum cleanup (#2326) * feat: openapiformat enum cleanup * align string options Co-authored-by: Vincent Biret * resolve PR comments --------- Co-authored-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 31 ++++++++++--------- .../Options/CommandOptions.cs | 2 +- .../Options/HidiOptions.cs | 2 +- .../Services/OpenApiServiceTests.cs | 4 +-- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8b412d14..52d25ef2 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -55,7 +55,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog if (options.Output == null) { #pragma warning disable CA1308 // Normalize strings to uppercase - var extension = options.OpenApiFormat?.GetDisplayName().ToLowerInvariant(); + var extension = options.OpenApiFormat?.ToLowerInvariant(); var inputExtension = !string.IsNullOrEmpty(extension) ? string.Concat(".", extension) : GetInputPathExtension(options.OpenApi, options.Csdl); @@ -73,7 +73,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog } // Default to yaml and OpenApiVersion 3_1 during csdl to OpenApi conversion - var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); + var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiConstants.Yaml); var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_1; // If ApiManifest is provided, set the referenced OpenAPI document @@ -92,7 +92,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog } // Load OpenAPI document - var document = await GetOpenApiAsync(options, openApiFormat.GetDisplayName(), logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, openApiFormat, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); if (options.FilterOptions != null && document is not null) { @@ -189,7 +189,7 @@ private static OpenApiDocument ApplyFilters(HidiOptions options, ILogger logger, return document; } - private static async Task WriteOpenApiAsync(HidiOptions options, OpenApiFormat openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger, CancellationToken cancellationToken) + private static async Task WriteOpenApiAsync(HidiOptions options, string openApiFormat, OpenApiSpecVersion openApiVersion, OpenApiDocument document, ILogger logger, CancellationToken cancellationToken) { using (logger.BeginScope("Output")) { @@ -202,11 +202,12 @@ private static async Task WriteOpenApiAsync(HidiOptions options, OpenApiFormat o InlineLocalReferences = options.InlineLocal, InlineExternalReferences = options.InlineExternal }; - - IOpenApiWriter writer = openApiFormat switch +#pragma warning disable CA1308 + IOpenApiWriter writer = openApiFormat.ToLowerInvariant() switch +#pragma warning restore CA1308 { - OpenApiFormat.Json => options.TerseOutput ? new(textWriter, settings, options.TerseOutput) : new OpenApiJsonWriter(textWriter, settings, false), - OpenApiFormat.Yaml => new OpenApiYamlWriter(textWriter, settings), + OpenApiConstants.Json => options.TerseOutput ? new(textWriter, settings, options.TerseOutput) : new OpenApiJsonWriter(textWriter, settings, false), + OpenApiConstants.Yaml => new OpenApiYamlWriter(textWriter, settings), _ => throw new ArgumentException("Unknown format"), }; @@ -560,10 +561,10 @@ SecurityException or /// /// /// - private static OpenApiFormat GetOpenApiFormat(string input, ILogger logger) + private static string GetOpenApiFormat(string input, ILogger logger) { logger.LogTrace("Getting the OpenApi format"); - return !input.StartsWith("http", StringComparison.OrdinalIgnoreCase) && Path.GetExtension(input) == ".json" ? OpenApiFormat.Json : OpenApiFormat.Yaml; + return !input.StartsWith("http", StringComparison.OrdinalIgnoreCase) && Path.GetExtension(input) == ".json" ? OpenApiConstants.Json : OpenApiConstants.Yaml; } private static string GetInputPathExtension(string? openapi = null, string? csdl = null) @@ -590,8 +591,8 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl throw new ArgumentException("Please input a file path or URL"); } - var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); - var document = await GetOpenApiAsync(options, openApiFormat.GetDisplayName(), logger, null, cancellationToken).ConfigureAwait(false); + var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiConstants.Yaml); + var document = await GetOpenApiAsync(options, openApiFormat, logger, null, cancellationToken).ConfigureAwait(false); if (document is not null) { using (logger.BeginScope("Creating diagram")) @@ -754,10 +755,10 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg } var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) - ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiFormat.Yaml); + ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiConstants.Yaml); // Load OpenAPI document - var document = await GetOpenApiAsync(options, openApiFormat.GetDisplayName(), logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); + var document = await GetOpenApiAsync(options, openApiFormat, logger, options.MetadataVersion, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); @@ -777,7 +778,7 @@ internal static async Task PluginManifestAsync(HidiOptions options, ILogger logg options.TerseOutput = true; if (document is not null) { - await WriteOpenApiAsync(options, OpenApiFormat.Json, OpenApiSpecVersion.OpenApi3_1, document, logger, cancellationToken).ConfigureAwait(false); + await WriteOpenApiAsync(options, OpenApiConstants.Json, OpenApiSpecVersion.OpenApi3_1, document, logger, cancellationToken).ConfigureAwait(false); // Create OpenAIPluginManifest from ApiDependency and OpenAPI document var manifest = new OpenAIPluginManifest(document.Info.Title ?? "Title", diff --git a/src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs b/src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs index 6fee866c..908435c3 100644 --- a/src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs +++ b/src/Microsoft.OpenApi.Hidi/Options/CommandOptions.cs @@ -16,7 +16,7 @@ internal class CommandOptions public readonly Option CleanOutputOption = new("--clean-output", "Overwrite an existing file"); public readonly Option VersionOption = new("--version", "OpenAPI specification version"); public readonly Option MetadataVersionOption = new("--metadata-version", "Graph metadata version to use."); - public readonly Option FormatOption = new("--format", "File format"); + public readonly Option FormatOption = new("--format", "File format"); public readonly Option TerseOutputOption = new("--terse-output", "Produce terse json output"); public readonly Option SettingsFileOption = new("--settings-path", "The configuration file with CSDL conversion settings."); public readonly Option LogLevelOption = new("--log-level", () => LogLevel.Information, "The log level to use when logging messages to the main output."); diff --git a/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs b/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs index fca97c87..127a0a14 100644 --- a/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs +++ b/src/Microsoft.OpenApi.Hidi/Options/HidiOptions.cs @@ -20,7 +20,7 @@ internal class HidiOptions public bool CleanOutput { get; set; } public string? Version { get; set; } public string? MetadataVersion { get; set; } - public OpenApiFormat? OpenApiFormat { get; set; } + public string? OpenApiFormat { get; set; } public bool TerseOutput { get; set; } public IConfiguration? SettingsConfig { get; set; } public LogLevel LogLevel { get; set; } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 7e5b4de3..97c27fe3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -261,7 +261,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, Version = "3.0", - OpenApiFormat = OpenApiFormat.Yaml, + OpenApiFormat = OpenApiConstants.Yaml, TerseOutput = false, InlineLocal = false, InlineExternal = false, @@ -296,7 +296,7 @@ public async Task TransformToPowerShellCompliantOpenApiAsync() OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, Version = "3.0", - OpenApiFormat = OpenApiFormat.Yaml, + OpenApiFormat = OpenApiConstants.Yaml, TerseOutput = false, InlineLocal = false, InlineExternal = false, From c498ce192f8d118f71b8154dc430e572808ac746 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 17 Apr 2025 16:08:57 -0400 Subject: [PATCH 615/720] feat: upgrades openapi.net.odata and apimanifest to the latest version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1e1a8c80..1cf2489e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -31,15 +31,15 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + From 5e7238e9bf19bc22b3b255b146b559bdc8016195 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Apr 2025 21:39:02 +0000 Subject: [PATCH 616/720] chore(deps): bump Microsoft.OpenApi.ApiManifest and SharpYaml Bumps [Microsoft.OpenApi.ApiManifest](https://github.com/Microsoft/OpenApi.ApiManifest) and [SharpYaml](https://github.com/xoofx/SharpYaml). These dependencies needed to be updated together. Updates `Microsoft.OpenApi.ApiManifest` from 2.0.0-preview3 to 2.0.0-preview4 - [Release notes](https://github.com/Microsoft/OpenApi.ApiManifest/releases) - [Changelog](https://github.com/microsoft/OpenApi.ApiManifest/blob/main/CHANGELOG.md) - [Commits](https://github.com/Microsoft/OpenApi.ApiManifest/compare/v2.0.0-preview3...v2.0.0-preview4) Updates `SharpYaml` from 2.1.1 to 2.1.1 - [Release notes](https://github.com/xoofx/SharpYaml/releases) - [Changelog](https://github.com/xoofx/SharpYaml/blob/master/changelog.md) - [Commits](https://github.com/xoofx/SharpYaml/compare/2.1.1...2.1.1) --- updated-dependencies: - dependency-name: Microsoft.OpenApi.ApiManifest dependency-version: 2.0.0-preview4 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: SharpYaml dependency-version: 2.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1e1a8c80..fc1a2b9a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + From e12fdab208dbeae37438c8f1cfe1549b9f3005ce Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 18 Apr 2025 12:03:23 -0400 Subject: [PATCH 617/720] Update src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 1cf2489e..8be5b720 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 7439692ba547199e39c7874b87aa2e723a74f0ca Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Wed, 23 Apr 2025 19:07:42 +0300 Subject: [PATCH 618/720] chore: rename OpenApiAny to JsonNodeExtension --- .../Extensions/OpenApiExtensibleExtensions.cs | 4 ++-- .../Formatters/PowerShellFormatterTests.cs | 6 ++---- .../UtilityFiles/OpenApiDocumentMock.cs | 13 ++++++------- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs index 368b67e8..1287e704 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs @@ -1,4 +1,4 @@ -using Microsoft.OpenApi.Any; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Interfaces; using System.Collections.Generic; using System.Text.Json.Nodes; @@ -15,7 +15,7 @@ internal static class OpenApiExtensibleExtensions /// A value matching the provided extensionKey. Return null when extensionKey is not found. internal static string GetExtension(this Dictionary extensions, string extensionKey) { - if (extensions.TryGetValue(extensionKey, out var value) && value is OpenApiAny { Node: JsonValue castValue } && castValue.TryGetValue(out var stringValue)) + if (extensions.TryGetValue(extensionKey, out var value) && value is JsonNodeExtension { Node: JsonValue castValue } && castValue.TryGetValue(out var stringValue)) { return stringValue; } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 7b3cd338..0e618ba1 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -1,8 +1,6 @@ -using Microsoft.OpenApi.Any; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Hidi.Formatters; -using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Services; using Xunit; @@ -147,7 +145,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() Extensions = new() { { - "x-ms-docs-operation-type", new OpenApiAny("function") + "x-ms-docs-operation-type", new JsonNodeExtension("function") } } } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 421cecdd..3335f6b7 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -1,8 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using Microsoft.OpenApi.Any; -using Microsoft.OpenApi.Interfaces; +using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Models.References; @@ -475,7 +474,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new() { { - "x-ms-docs-key-type", new OpenApiAny("call") + "x-ms-docs-key-type", new JsonNodeExtension("call") } } } @@ -492,7 +491,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new() { { - "x-ms-docs-operation-type", new OpenApiAny("action") + "x-ms-docs-operation-type", new JsonNodeExtension("action") } } } @@ -523,7 +522,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new() { { - "x-ms-docs-key-type", new OpenApiAny("group") + "x-ms-docs-key-type", new JsonNodeExtension("group") } } }, @@ -540,7 +539,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new() { { - "x-ms-docs-key-type", new OpenApiAny("event") + "x-ms-docs-key-type", new JsonNodeExtension("event") } } } @@ -579,7 +578,7 @@ public static OpenApiDocument CreateOpenApiDocument() Extensions = new() { { - "x-ms-docs-operation-type", new OpenApiAny("function") + "x-ms-docs-operation-type", new JsonNodeExtension("function") } } } From d6f9ed9e20661946113748aff87909d9dd55a79c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 22:00:13 +0000 Subject: [PATCH 619/720] chore(deps): bump xunit.runner.visualstudio from 3.0.2 to 3.1.0 Bumps [xunit.runner.visualstudio](https://github.com/xunit/visualstudio.xunit) from 3.0.2 to 3.1.0. - [Release notes](https://github.com/xunit/visualstudio.xunit/releases) - [Commits](https://github.com/xunit/visualstudio.xunit/compare/3.0.2...3.1.0) --- updated-dependencies: - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 47d67fc5..ec82664d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -15,7 +15,7 @@ - + From 0d435fd88756dd0d2dfd6fd1617e992bc4a78a4e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 15 May 2025 13:54:56 -0400 Subject: [PATCH 620/720] chore: upgrades yoko to preview 14 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 8be5b720..ae01f086 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 03155d319dd552014db561f42743c14ece4c8fa5 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 19 May 2025 18:49:57 +0300 Subject: [PATCH 621/720] fix: revert to using IDictionary for collections --- .../Extensions/OpenApiExtensibleExtensions.cs | 2 +- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 +- .../Formatters/PowerShellFormatterTests.cs | 10 +++-- .../UtilityFiles/OpenApiDocumentMock.cs | 37 ++++++++++--------- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs index 1287e704..914a6135 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs @@ -13,7 +13,7 @@ internal static class OpenApiExtensibleExtensions /// A dictionary of . /// The key corresponding to the . /// A value matching the provided extensionKey. Return null when extensionKey is not found. - internal static string GetExtension(this Dictionary extensions, string extensionKey) + internal static string GetExtension(this IDictionary extensions, string extensionKey) { if (extensions.TryGetValue(extensionKey, out var value) && value is JsonNodeExtension { Node: JsonValue castValue } && castValue.TryGetValue(out var stringValue)) { diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 0f5a9faf..d157a6c4 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -27,7 +27,7 @@ public override void Visit(IOpenApiSchema schema) public int HeaderCount { get; set; } - public override void Visit(Dictionary headers) + public override void Visit(IDictionary headers) { HeaderCount++; } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 0e618ba1..15ddf9e1 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -1,6 +1,8 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Hidi.Formatters; +using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Services; using Xunit; @@ -123,7 +125,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() { Name = "ids", In = ParameterLocation.Query, - Content = new() + Content = new Dictionary() { { "application/json", @@ -142,7 +144,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() } } ], - Extensions = new() + Extensions = new Dictionary() { { "x-ms-docs-operation-type", new JsonNodeExtension("function") @@ -156,12 +158,12 @@ private static OpenApiDocument GetSampleOpenApiDocument() }, Components = new() { - Schemas = new() + Schemas = new Dictionary() { { "TestSchema", new OpenApiSchema { Type = JsonSchemaType.Object, - Properties = new() + Properties = new Dictionary() { { "averageAudioDegradation", new OpenApiSchema diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 3335f6b7..535e04a2 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Models.References; @@ -97,7 +98,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new() + Content = new Dictionary() { { applicationJsonMediaType, @@ -158,7 +159,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new() + Content = new Dictionary() { { applicationJsonMediaType, @@ -206,7 +207,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved entities", - Content = new() + Content = new Dictionary() { { applicationJsonMediaType, @@ -216,7 +217,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Title = "Collection of user", Type = JsonSchemaType.Object, - Properties = new() + Properties = new Dictionary() { { "value", @@ -252,7 +253,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved entity", - Content = new() + Content = new Dictionary() { { applicationJsonMediaType, @@ -315,7 +316,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved navigation property", - Content = new() + Content = new Dictionary() { { applicationJsonMediaType, @@ -362,7 +363,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new() + Content = new Dictionary() { { applicationJsonMediaType, @@ -419,7 +420,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved navigation property", - Content = new() + Content = new Dictionary() { { applicationJsonMediaType, @@ -429,7 +430,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Title = "Collection of hostSecurityProfile", Type = JsonSchemaType.Object, - Properties = new() + Properties = new Dictionary() { { "value", @@ -471,7 +472,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Type = JsonSchemaType.String }, - Extensions = new() + Extensions = new Dictionary() { { "x-ms-docs-key-type", new JsonNodeExtension("call") @@ -488,7 +489,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Extensions = new() + Extensions = new Dictionary() { { "x-ms-docs-operation-type", new JsonNodeExtension("action") @@ -519,7 +520,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Type = JsonSchemaType.String }, - Extensions = new() + Extensions = new Dictionary() { { "x-ms-docs-key-type", new JsonNodeExtension("group") @@ -536,7 +537,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Type = JsonSchemaType.String }, - Extensions = new() + Extensions = new Dictionary() { { "x-ms-docs-key-type", new JsonNodeExtension("event") @@ -550,7 +551,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new() + Content = new Dictionary() { { applicationJsonMediaType, @@ -558,7 +559,7 @@ public static OpenApiDocument CreateOpenApiDocument() { Schema = new OpenApiSchema() { - Properties = new() + Properties = new Dictionary() { { "value", @@ -575,7 +576,7 @@ public static OpenApiDocument CreateOpenApiDocument() } } }, - Extensions = new() + Extensions = new Dictionary() { { "x-ms-docs-operation-type", new JsonNodeExtension("function") @@ -601,14 +602,14 @@ public static OpenApiDocument CreateOpenApiDocument() }, Components = new() { - Schemas = new() + Schemas = new Dictionary() { { "microsoft.graph.networkInterface", new OpenApiSchema { Title = "networkInterface", Type = JsonSchemaType.Object, - Properties = new() + Properties = new Dictionary() { { "description", new OpenApiSchema From c539ee49a82c8d5ce12e404c58d79f4493170606 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Fri, 23 May 2025 14:49:18 +0300 Subject: [PATCH 622/720] chore: revert collections to use interface types --- .../Formatters/PowerShellFormatter.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index a07888a9..c3aa81e6 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -77,7 +77,7 @@ public override void Visit(OpenApiOperation operation) // Order matters. Resolve operationId. operationId = RemoveHashSuffix(operationId); if (operationTypeExtension.IsEquals("action") || operationTypeExtension.IsEquals("function")) - operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? []); + operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? new List()); operationId = SingularizeAndDeduplicateOperationId(operationId.SplitByChar('.')); operationId = ResolveODataCastOperationId(operationId); operationId = ResolveByRefOperationId(operationId); @@ -145,7 +145,7 @@ private static string RemoveHashSuffix(string operationId) return s_hashSuffixRegex.Match(operationId).Value; } - private static string RemoveKeyTypeSegment(string operationId, List parameters) + private static string RemoveKeyTypeSegment(string operationId, IList parameters) { var segments = operationId.SplitByChar('.'); foreach (var parameter in parameters) @@ -159,7 +159,7 @@ private static string RemoveKeyTypeSegment(string operationId, List parameters) + private static void ResolveFunctionParameters(IList parameters) { foreach (var parameter in parameters.OfType().Where(static p => p.Content?.Count > 0)) { From ef461fabe61da5440bee3ba7d2b8f210aa0e1d84 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Mon, 26 May 2025 16:23:50 +0300 Subject: [PATCH 623/720] chore: flatten namespaces to align with top-level namespace --- .../Extensions/OpenApiExtensibleExtensions.cs | 1 - src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs | 2 -- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 5 ++--- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 2 -- .../Formatters/PowerShellFormatterTests.cs | 1 - .../Services/OpenApiFilterServiceTests.cs | 4 ---- .../Services/OpenApiServiceTests.cs | 3 --- .../UtilityFiles/OpenApiDocumentMock.cs | 3 --- 8 files changed, 2 insertions(+), 19 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs index 1287e704..8ce7cb97 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs @@ -1,5 +1,4 @@ using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Interfaces; using System.Collections.Generic; using System.Text.Json.Nodes; diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index a07888a9..d953792e 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -7,8 +7,6 @@ using Humanizer; using Humanizer.Inflections; using Microsoft.OpenApi.Hidi.Extensions; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Hidi.Formatters diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 52d25ef2..338c8416 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -28,12 +28,10 @@ using Microsoft.OpenApi.Hidi.Formatters; using Microsoft.OpenApi.Hidi.Options; using Microsoft.OpenApi.Hidi.Utilities; -using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Writers; -using Microsoft.OpenApi.YamlReader; using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper; namespace Microsoft.OpenApi.Hidi @@ -420,7 +418,8 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); settings ??= SettingsUtilities.GetConfiguration(); - var document = edmModel.ConvertToOpenApi(SettingsUtilities.GetOpenApiConvertSettings(settings, metadataVersion)); + // TODO: uncomment when namespaces are fixed in OData lib + var document = new OpenApiDocument(); //edmModel.ConvertToOpenApi(SettingsUtilities.GetOpenApiConvertSettings(settings, metadataVersion)); document = FixReferences(document, format); return document; diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 0f5a9faf..8b7e31b5 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -3,8 +3,6 @@ using System; using System.Collections.Generic; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Hidi diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 0e618ba1..b366d80b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -1,6 +1,5 @@ using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Hidi.Formatters; -using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Services; using Xunit; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 4b17ad69..d5dc9065 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -3,10 +3,6 @@ using System.Globalization; using Microsoft.Extensions.Logging; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; -using Microsoft.OpenApi.Models.References; using Microsoft.OpenApi.Reader; using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 97c27fe3..de1ef50d 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -9,10 +9,7 @@ using Microsoft.OpenApi.ApiManifest.OpenAI; using Microsoft.OpenApi.Hidi.Options; using Microsoft.OpenApi.Hidi.Utilities; -using Microsoft.OpenApi.Models; using Microsoft.OpenApi.OData; -using Microsoft.OpenApi.Reader; -using Microsoft.OpenApi.YamlReader; using Microsoft.OpenApi.Services; using Xunit; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 3335f6b7..5dd08951 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -2,9 +2,6 @@ // Licensed under the MIT license. using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; -using Microsoft.OpenApi.Models.References; namespace Microsoft.OpenApi.Tests.UtilityFiles { From 7a6070ed21d2532223d7c988063f07d50605a5ec Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 27 May 2025 18:21:36 +0300 Subject: [PATCH 624/720] chore: flatten namespaces for more classes --- .../Extensions/OpenApiExtensibleExtensions.cs | 3 +-- src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs | 1 - src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ---- src/Microsoft.OpenApi.Hidi/StatsVisitor.cs | 1 - .../Formatters/PowerShellFormatterTests.cs | 4 +--- .../Services/OpenApiFilterServiceTests.cs | 2 -- .../Services/OpenApiServiceTests.cs | 1 - .../UtilityFiles/OpenApiDocumentMock.cs | 2 -- 8 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs index 8ce7cb97..0801d1d4 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs @@ -1,5 +1,4 @@ -using Microsoft.OpenApi.Extensions; -using System.Collections.Generic; +using System.Collections.Generic; using System.Text.Json.Nodes; namespace Microsoft.OpenApi.Hidi.Extensions diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index d953792e..a4614e58 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -7,7 +7,6 @@ using Humanizer; using Humanizer.Inflections; using Microsoft.OpenApi.Hidi.Extensions; -using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Hidi.Formatters { diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 338c8416..a0146af6 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -23,15 +23,11 @@ using Microsoft.OpenApi.ApiManifest; using Microsoft.OpenApi.ApiManifest.OpenAI; using Microsoft.OpenApi.ApiManifest.OpenAI.Authentication; -using Microsoft.OpenApi.Extensions; using Microsoft.OpenApi.Hidi.Extensions; using Microsoft.OpenApi.Hidi.Formatters; using Microsoft.OpenApi.Hidi.Options; using Microsoft.OpenApi.Hidi.Utilities; -using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Reader; -using Microsoft.OpenApi.Services; -using Microsoft.OpenApi.Writers; using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper; namespace Microsoft.OpenApi.Hidi diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs index 8b7e31b5..d12d9bdf 100644 --- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs +++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Hidi { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index b366d80b..2d6694b2 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -1,6 +1,4 @@ -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Hidi.Formatters; -using Microsoft.OpenApi.Services; +using Microsoft.OpenApi.Hidi.Formatters; using Xunit; namespace Microsoft.OpenApi.Hidi.Tests.Formatters diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index d5dc9065..483deaf2 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -4,9 +4,7 @@ using System.Globalization; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Reader; -using Microsoft.OpenApi.Services; using Microsoft.OpenApi.Tests.UtilityFiles; -using Microsoft.OpenApi.Writers; using Moq; using Xunit; diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index de1ef50d..af65700c 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -10,7 +10,6 @@ using Microsoft.OpenApi.Hidi.Options; using Microsoft.OpenApi.Hidi.Utilities; using Microsoft.OpenApi.OData; -using Microsoft.OpenApi.Services; using Xunit; namespace Microsoft.OpenApi.Hidi.Tests diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 5dd08951..ce518f69 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -1,8 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -using Microsoft.OpenApi.Extensions; - namespace Microsoft.OpenApi.Tests.UtilityFiles { /// From 18356d3099e38bc427c6935ba1d9e7f0d48fa171 Mon Sep 17 00:00:00 2001 From: Maggiekimani1 Date: Tue, 3 Jun 2025 23:43:47 +0300 Subject: [PATCH 625/720] feat: upgrades OData lib to preview15 --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ae01f086..7a3fb968 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index a0146af6..8787e769 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -27,6 +27,7 @@ using Microsoft.OpenApi.Hidi.Formatters; using Microsoft.OpenApi.Hidi.Options; using Microsoft.OpenApi.Hidi.Utilities; +using Microsoft.OpenApi.OData; using Microsoft.OpenApi.Reader; using static Microsoft.OpenApi.Hidi.OpenApiSpecVersionHelper; @@ -414,8 +415,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool var edmModel = CsdlReader.Parse(XElement.Parse(csdlText).CreateReader()); settings ??= SettingsUtilities.GetConfiguration(); - // TODO: uncomment when namespaces are fixed in OData lib - var document = new OpenApiDocument(); //edmModel.ConvertToOpenApi(SettingsUtilities.GetOpenApiConvertSettings(settings, metadataVersion)); + var document = edmModel.ConvertToOpenApi(SettingsUtilities.GetOpenApiConvertSettings(settings, metadataVersion)); document = FixReferences(document, format); return document; From c59f2286238141ed2a435b6d34a2c7b9131c2f60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Jun 2025 21:58:20 +0000 Subject: [PATCH 626/720] Bump BenchmarkDotNet and 14 others Bumps BenchmarkDotNet from 0.14.0 to 0.15.0 Bumps BenchmarkDotNet.Diagnostics.Windows from 0.14.0 to 0.15.0 Bumps Microsoft.Extensions.DependencyInjection from 9.0.4 to 9.0.5 Bumps Microsoft.Extensions.Logging to 9.0.5, 9.0.5 Bumps Microsoft.Extensions.Logging.Abstractions from 9.0.4 to 9.0.5 Bumps Microsoft.Extensions.Logging.Console to 9.0.5, 9.0.5 Bumps Microsoft.Extensions.Logging.Debug to 9.0.5, 9.0.5 Bumps Microsoft.NET.Test.Sdk to 17.14.1, 17.14.1 Bumps Microsoft.OpenApi.ApiManifest from 2.0.0-preview4 to 2.0.0-preview5 Bumps Microsoft.OpenApi.OData from 2.0.0-preview.15 to 2.0.0-preview9 Bumps Microsoft.VisualStudio.Threading.Analyzers to 17.13.61, 17.14.15, 17.14.15 Bumps Microsoft.Windows.Compatibility from 9.0.4 to 9.0.5 Bumps SharpYaml to 2.1.1, 2.1.2, 2.1.2, 2.1.2 Bumps System.Text.Json to 9.0.5, 9.0.5, 9.0.5, 9.0.5 Bumps Verify.Xunit from 30.0.0 to 30.3.1 --- updated-dependencies: - dependency-name: BenchmarkDotNet dependency-version: 0.15.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: BenchmarkDotNet.Diagnostics.Windows dependency-version: 0.15.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 17.14.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 17.14.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.OpenApi.ApiManifest dependency-version: 2.0.0-preview5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.OpenApi.OData dependency-version: 2.0.0-preview9 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.VisualStudio.Threading.Analyzers dependency-version: 17.13.61 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.VisualStudio.Threading.Analyzers dependency-version: 17.14.15 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.VisualStudio.Threading.Analyzers dependency-version: 17.14.15 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.Windows.Compatibility dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: SharpYaml dependency-version: 2.1.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: SharpYaml dependency-version: 2.1.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: SharpYaml dependency-version: 2.1.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: SharpYaml dependency-version: 2.1.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Verify.Xunit dependency-version: 30.3.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.csproj | 14 +++++++------- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7a3fb968..7108f24e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,18 +28,18 @@ - - - - - + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index ec82664d..97ffb9b8 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -12,7 +12,7 @@ - + From c59948630749aa7ddfc77dab7751460433a44aa8 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 4 Jun 2025 18:49:16 -0400 Subject: [PATCH 627/720] Update src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7108f24e..ffe538d1 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,8 +38,8 @@ - - + + From 7ee6055a136db37452e3d5304ea0769e783e830c Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 4 Jun 2025 18:50:01 -0400 Subject: [PATCH 628/720] Update src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index ffe538d1..81a2aff9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + From f73a7f3038bea07ef69ed3d6dd21f4a3fe97c1ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 21:35:42 +0000 Subject: [PATCH 629/720] Bump BenchmarkDotNet and 5 others Bumps BenchmarkDotNet from 0.15.0 to 0.15.1 Bumps BenchmarkDotNet.Diagnostics.Windows from 0.15.0 to 0.15.1 Bumps Microsoft.OpenApi.ApiManifest from 2.0.0-preview4 to 2.0.0-preview5 Bumps Microsoft.OpenApi.OData from 2.0.0-preview.15 to 2.0.0-preview9 Bumps System.Text.Json to 9.0.5, 9.0.5 Bumps xunit.runner.visualstudio to 3.1.1, 3.1.1 --- updated-dependencies: - dependency-name: BenchmarkDotNet dependency-version: 0.15.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: BenchmarkDotNet.Diagnostics.Windows dependency-version: 0.15.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.OpenApi.ApiManifest dependency-version: 2.0.0-preview5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.OpenApi.OData dependency-version: 2.0.0-preview9 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.5 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 81a2aff9..7108f24e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,8 +38,8 @@ - - + + diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 97ffb9b8..b06645c3 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -15,7 +15,7 @@ - + From 59d252fa85bddc30274eb56439cbc1516c5c6b7a Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 10 Jun 2025 08:42:25 -0400 Subject: [PATCH 630/720] chore: reverts yoko changes --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7108f24e..81a2aff9 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,8 +38,8 @@ - - + + From accd8fabea9b54e447ede946a967cb5d6bf939d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:57:01 +0000 Subject: [PATCH 631/720] Bump Microsoft.Extensions.DependencyInjection and 8 others Bumps Microsoft.Extensions.DependencyInjection from 9.0.5 to 9.0.6 Bumps Microsoft.Extensions.Logging to 9.0.6 Bumps Microsoft.Extensions.Logging.Abstractions from 9.0.5 to 9.0.6 Bumps Microsoft.Extensions.Logging.Console to 9.0.6 Bumps Microsoft.Extensions.Logging.Debug to 9.0.6 Bumps Microsoft.OpenApi.ApiManifest from 2.0.0-preview4 to 2.0.0-preview5 Bumps Microsoft.OpenApi.OData from 2.0.0-preview.15 to 2.0.0-preview9 Bumps Microsoft.Windows.Compatibility from 9.0.5 to 9.0.6 Bumps System.Text.Json to 9.0.6 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.OpenApi.ApiManifest dependency-version: 2.0.0-preview5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.OpenApi.OData dependency-version: 2.0.0-preview9 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Windows.Compatibility dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.csproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 81a2aff9..c08852d3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,18 +28,18 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - + + From cfc48199e2df4927cc71afd0c71d3207364ce727 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 11 Jun 2025 09:35:03 -0400 Subject: [PATCH 632/720] chore: reverts yoko upgrade --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c08852d3..cf8f30cb 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From b5eb2577316041b7c6e28c7fadb27eacf963ac22 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 11 Jun 2025 09:35:32 -0400 Subject: [PATCH 633/720] chore: typo --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index cf8f30cb..5049653f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 881f3d94be14c45b0d5badb8a5b4c3b8975dad6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 21:47:22 +0000 Subject: [PATCH 634/720] Bump Microsoft.OpenApi.OData, System.Text.Json and Verify.Xunit Bumps Microsoft.OpenApi.OData from 2.0.0-preview.15 to 2.0.0-preview9 Bumps System.Text.Json to 9.0.6 Bumps Verify.Xunit from 30.3.1 to 30.4.0 --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-version: 2.0.0-preview9 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Verify.Xunit dependency-version: 30.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 5049653f..c08852d3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 8343dc5871815ff666e38e58386a4278d4a9653e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 16 Jun 2025 08:03:39 -0400 Subject: [PATCH 635/720] chore: reverts yoko upgrade --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c08852d3..5049653f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From eeff8d1c0f85b81815adf1e5af33c287d12be1b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 22:18:56 +0000 Subject: [PATCH 636/720] Bump BenchmarkDotNet and 3 others Bumps BenchmarkDotNet from 0.15.1 to 0.15.2 Bumps BenchmarkDotNet.Diagnostics.Windows from 0.15.1 to 0.15.2 Bumps Microsoft.OpenApi.OData from 2.0.0-preview.15 to 2.0.0-preview9 Bumps System.Text.Json to 9.0.6 --- updated-dependencies: - dependency-name: BenchmarkDotNet dependency-version: 0.15.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: BenchmarkDotNet.Diagnostics.Windows dependency-version: 0.15.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.OpenApi.OData dependency-version: 2.0.0-preview9 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 5049653f..c08852d3 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 489fee6922f2eb6eb30c8d28bc0c10f359e2c31b Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 17 Jun 2025 09:08:00 -0400 Subject: [PATCH 637/720] chore: reverts yoko upgrade --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c08852d3..5049653f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 35215c23dc91302c0b196718e69d2a6e65180dde Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Jun 2025 21:26:20 +0000 Subject: [PATCH 638/720] Bump Microsoft.OpenApi.OData and 3 others Bumps Microsoft.OpenApi.OData from 2.0.0-preview.15 to 2.0.0-preview9 Bumps System.CommandLine to 2.0.0-beta5.25306.1 Bumps System.CommandLine.Hosting from 0.4.0-alpha.22272.1 to 0.4.0-alpha.25306.1 Bumps System.Text.Json to 9.0.6 --- updated-dependencies: - dependency-name: Microsoft.OpenApi.OData dependency-version: 2.0.0-preview9 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.CommandLine dependency-version: 2.0.0-beta5.25306.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.CommandLine dependency-version: 2.0.0-beta5.25306.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.CommandLine.Hosting dependency-version: 0.4.0-alpha.25306.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 5049653f..4a884926 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -36,11 +36,11 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + - + - + From b5c754fa8779118c9400ec833c443f1376ed3671 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 20 Jun 2025 07:50:02 -0400 Subject: [PATCH 639/720] chore: reverts yoko upgrade --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4a884926..44692376 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From f646c87ef12b03ed5fab680bfd1fd62db8fda18d Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 30 Jun 2025 09:14:55 -0400 Subject: [PATCH 640/720] fix: migration of hidi to the latest version of system.commandline Signed-off-by: Vincent Biret --- .../Extensions/CommandExtensions.cs | 2 +- .../Handlers/AsyncCommandHandler.cs | 14 -- .../Handlers/PluginCommandHandler.cs | 9 +- .../Handlers/ShowCommandHandler.cs | 9 +- .../Handlers/TransformCommandHandler.cs | 9 +- .../Handlers/ValidateCommandHandler.cs | 9 +- .../Options/CommandOptions.cs | 139 +++++++++++------- .../Options/HidiOptions.cs | 38 ++--- src/Microsoft.OpenApi.Hidi/Program.cs | 15 +- .../Services/OpenApiServiceTests.cs | 15 +- 10 files changed, 139 insertions(+), 120 deletions(-) delete mode 100644 src/Microsoft.OpenApi.Hidi/Handlers/AsyncCommandHandler.cs diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs index 5b83212d..1a2dc477 100644 --- a/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs +++ b/src/Microsoft.OpenApi.Hidi/Extensions/CommandExtensions.cs @@ -12,7 +12,7 @@ public static void AddOptions(this Command command, IReadOnlyList - - + + From 5775a4449c2528dac63406b90d939468b2f54c68 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 1 Jul 2025 08:26:40 -0400 Subject: [PATCH 642/720] chore: reverts Yoko upgrade --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index aa488975..263f743b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From 18f342702035cc24f48ff06ebaa4881d3d9722a4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 2 Jul 2025 12:53:15 -0400 Subject: [PATCH 643/720] fix: upgrades openapi.odata to avoid hidi failing to load --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 263f743b..657ac943 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From a3e41248ef74eca61af55ccc4c99108a987e2f51 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 2 Jul 2025 19:27:27 -0400 Subject: [PATCH 644/720] fix: bumps openapi.net.odata to fix two critical bugs in hidi --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 657ac943..00d354b7 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ - + From a149901992fc175427615fcc608ec1610dec4ec0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 21:29:36 +0000 Subject: [PATCH 645/720] Bump Microsoft.Extensions.DependencyInjection and 6 others Bumps Microsoft.Extensions.DependencyInjection from 9.0.6 to 9.0.7 Bumps Microsoft.Extensions.Logging to 9.0.7 Bumps Microsoft.Extensions.Logging.Abstractions from 9.0.6 to 9.0.7 Bumps Microsoft.Extensions.Logging.Console to 9.0.7 Bumps Microsoft.Extensions.Logging.Debug to 9.0.7 Bumps Microsoft.Windows.Compatibility from 9.0.6 to 9.0.7 Bumps System.Text.Json from 9.0.6 to 9.0.7 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Windows.Compatibility dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 00d354b7..9cec2cea 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,10 +28,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From ae9df31a1a630920ee42d35bcd7ac2691487d707 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 10 Jul 2025 08:14:29 -0400 Subject: [PATCH 646/720] fix: removes public mermaid types that were not usuable Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 1 + src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs | 1 + .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 9cec2cea..62341888 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -16,6 +16,7 @@ $(NoWarn);NU5048;NU5104;CA1848; readme.md All + ..\Microsoft.OpenApi.snk diff --git a/src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs b/src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs index e5a59206..a3ee32f7 100644 --- a/src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs +++ b/src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs @@ -2,3 +2,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] +[assembly: InternalsVisibleTo("Microsoft.OpenApi.Hidi.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4")] diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index b06645c3..f9b2b41b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -8,6 +8,8 @@ false All CA2007 + true + ..\..\src\Microsoft.OpenApi.snk From d90629f3984696cc3292829562348c8720a335d3 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 10 Jul 2025 08:41:32 -0400 Subject: [PATCH 647/720] chore: fixes internals visible to declaration Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 5 ++++- src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs | 5 ----- 2 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 62341888..921c39e7 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -52,7 +52,10 @@ - <_Parameter1>Microsoft.OpenApi.Hidi.Tests + <_Parameter1>Microsoft.OpenApi.Hidi.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4 + + + <_Parameter1>DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7 diff --git a/src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs b/src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs deleted file mode 100644 index a3ee32f7..00000000 --- a/src/Microsoft.OpenApi.Hidi/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,5 +0,0 @@ - -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] -[assembly: InternalsVisibleTo("Microsoft.OpenApi.Hidi.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100957cb48387b2a5f54f5ce39255f18f26d32a39990db27cf48737afc6bc62759ba996b8a2bfb675d4e39f3d06ecb55a178b1b4031dcb2a767e29977d88cce864a0d16bfc1b3bebb0edf9fe285f10fffc0a85f93d664fa05af07faa3aad2e545182dbf787e3fd32b56aca95df1a3c4e75dec164a3f1a4c653d971b01ffc39eb3c4")] From 10d72984b5a4dd9dcfbe4cc29848d7db1c9c06a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Jul 2025 21:17:38 +0000 Subject: [PATCH 648/720] Bump Microsoft.OData.Edm and System.Text.Json Bumps Microsoft.OData.Edm from 8.2.4 to 8.3.0 Bumps System.Text.Json to 9.0.7 --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-version: 8.3.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: System.Text.Json dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 921c39e7..a43f5d21 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From 34c384615f0b617c9fac8cd922a8fa4e81035ab7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 01:22:03 +0000 Subject: [PATCH 649/720] Bump System.Text.Json and xunit.runner.visualstudio Bumps System.Text.Json to 9.0.7 Bumps xunit.runner.visualstudio to 3.1.2 --- updated-dependencies: - dependency-name: System.Text.Json dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: System.Text.Json dependency-version: 9.0.7 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index f9b2b41b..f9244943 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -17,7 +17,7 @@ - + From 81d80a5653a021341bcf6dd63c0891bbc7746088 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 15 Aug 2025 09:30:49 -0400 Subject: [PATCH 650/720] chore: updates extensions dependencies --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index a43f5d21..308dff92 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From 9f5ead43f08ab31148aef9569f4287313b6d50c6 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 15 Aug 2025 09:40:36 -0400 Subject: [PATCH 651/720] chore: updates STJ chore: updates xunit --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index f9244943..b5f2eac5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -17,7 +17,7 @@ - + From a2ddbf759c65fb51a32b265329a60a2f81fd321a Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 15 Aug 2025 09:41:58 -0400 Subject: [PATCH 652/720] chore: updates yoko dependency to latest --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 308dff92..7d7b1ee7 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + From b1df9edafa8f7cd3a17e3951b10366d49e3b4b1e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 15 Aug 2025 10:31:00 -0400 Subject: [PATCH 653/720] ci: fixes flaky test Signed-off-by: Vincent Biret --- .../Services/OpenApiServiceTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 05345aaf..6342f670 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -166,7 +166,7 @@ public Task ThrowIfOpenApiUrlIsNotProvidedWhenValidatingAsync() public Task ThrowIfURLIsNotResolvableWhenValidatingAsync() { return Assert.ThrowsAsync(() => - OpenApiService.ValidateOpenApiDocumentAsync("https://example.org/itdoesnmatter", _logger)); + OpenApiService.ValidateOpenApiDocumentAsync("https://example.org926F4F21-88E7-4DC5-BF88-6C529BB77844/itdoesnmatter", _logger)); } [Fact] From ee9f631af3ea61c40d89a13fb669554777ee683e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Sep 2025 12:10:39 +0000 Subject: [PATCH 654/720] Bump Microsoft.Extensions.Logging.Abstractions from 9.0.8 to 9.0.9 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 9.0.9 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7d7b1ee7..b41102cb 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -30,7 +30,7 @@ - + From b4d664f23fc75d875b11fa300d97917c50fbb1fa Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 10 Sep 2025 08:16:05 -0400 Subject: [PATCH 655/720] chore: updates logging dependencies --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b41102cb..bcb83b96 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all From adc6e11e3d0832fa927af14349c5b51c9f3a98e9 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 10 Sep 2025 08:17:02 -0400 Subject: [PATCH 656/720] chore: updates edm dep --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index bcb83b96..72a6485e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From 84ca8546d095830a07d786c786877a4613ff2e37 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 10 Sep 2025 08:18:19 -0400 Subject: [PATCH 657/720] chore: updates xunit deps --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index b5f2eac5..20f6516a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -17,7 +17,7 @@ - + From a6aa9dfc927b322ec8ee1336ac42c80e18356a7a Mon Sep 17 00:00:00 2001 From: Peter Bons Date: Fri, 19 Sep 2025 14:23:24 +0200 Subject: [PATCH 658/720] Merge pull request #2509 from Expecho/patch-1 docs: fix wrong version specification in hidi examples in readme.md --- src/Microsoft.OpenApi.Hidi/readme.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 7a7667e0..38efe66a 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -95,19 +95,19 @@ This command accepts the following parameters: 1. Filtering by OperationIds ```bash -hidi transform -d files\People.yml -f yaml -o files\People.yml -v OpenApi3_0 --op users_UpdateInsights --co +hidi transform -d files\People.yml -f yaml -o files\People.yml -v 3.0 --op users_UpdateInsights --co ``` 2. Filtering by Postman collection ```bash -hidi transform --openapi files\People.yml --format yaml --output files\People2.yml --version OpenApi3_0 --filter-by-collection Graph-Collection-0017059134807617005.postman_collection.json +hidi transform --openapi files\People.yml --format yaml --output files\People2.yml --version 3.0 --filter-by-collection Graph-Collection-0017059134807617005.postman_collection.json ``` 3. CSDL--->OpenAPI conversion and filtering ```bash -hidi transform --csdl Files/Todo.xml --output Files/Todo-subset.yml --format yaml --version OpenApi3_0 --filter-by-operationids Todos.Todo.UpdateTodo +hidi transform --csdl Files/Todo.xml --output Files/Todo-subset.yml --format yaml --version 3.0 --filter-by-operationids Todos.Todo.UpdateTodo ``` 4. CSDL Filtering by EntitySets and Singletons @@ -138,4 +138,5 @@ This command generates an OpenAI style Plugin manifest and minimal OpenAPI file hidi plugin -m exampleApiManifest.yml -o mypluginfolder ``` -> Run `hidi plugin -h` to see all the available usage options. \ No newline at end of file + +> Run `hidi plugin -h` to see all the available usage options. From 595633ae3a8ffa8fa8ce8eae0634745184735139 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 23 Sep 2025 21:47:39 -0400 Subject: [PATCH 659/720] feat: adds parsing infrastructure for version 3.2 Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8787e769..d63d559f 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -69,7 +69,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog // Default to yaml and OpenApiVersion 3_1 during csdl to OpenApi conversion var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiConstants.Yaml); - var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_1; + var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_2; // If ApiManifest is provided, set the referenced OpenAPI document var apiDependency = await FindApiDependencyAsync(options.FilterOptions.FilterByApiManifest, logger, cancellationToken).ConfigureAwait(false); diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs index 222f7a8c..b8bff319 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiSpecVersionHelper.cs @@ -35,8 +35,12 @@ public static OpenApiSpecVersion TryParseOpenApiSpecVersion(string value) { return OpenApiSpecVersion.OpenApi3_1; } + else if (majorVersion == 3 && minorVersion == 2) + { + return OpenApiSpecVersion.OpenApi3_2; + } - return OpenApiSpecVersion.OpenApi3_1; // default + return OpenApiSpecVersion.OpenApi3_2; // default } } } From f2f0234efe142edc62db5d1d71456946bc01ed5e Mon Sep 17 00:00:00 2001 From: kilifu Date: Tue, 23 Sep 2025 23:00:02 -0400 Subject: [PATCH 660/720] Update default OpenApiVersion to 3_2 --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index d63d559f..d6ec132d 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -67,7 +67,7 @@ public static async Task TransformOpenApiDocumentAsync(HidiOptions options, ILog throw new IOException($"The file {options.Output} already exists. Please input a new file path."); } - // Default to yaml and OpenApiVersion 3_1 during csdl to OpenApi conversion + // Default to yaml and OpenApiVersion 3_2 during csdl to OpenApi conversion var openApiFormat = options.OpenApiFormat ?? (!string.IsNullOrEmpty(options.OpenApi) ? GetOpenApiFormat(options.OpenApi, logger) : OpenApiConstants.Yaml); var openApiVersion = options.Version != null ? TryParseOpenApiSpecVersion(options.Version) : OpenApiSpecVersion.OpenApi3_2; From 6892482f2cadffc454ab55ca3af1d6c1eeebc087 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 21:05:15 +0000 Subject: [PATCH 661/720] Bump Microsoft.NET.Test.Sdk from 17.14.1 to 18.0.0 --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 20f6516a..33656177 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 2ffc3030521cf42341e7c6c181b461e3f2e3c8c3 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 2 Oct 2025 21:08:49 -0400 Subject: [PATCH 662/720] feat: make response request body, header and parameter content referenceable Signed-off-by: Vincent Biret --- .../Formatters/PowerShellFormatterTests.cs | 2 +- .../UtilityFiles/OpenApiDocumentMock.cs | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs index 2fa6a86d..6b601a2f 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Formatters/PowerShellFormatterTests.cs @@ -120,7 +120,7 @@ private static OpenApiDocument GetSampleOpenApiDocument() { Name = "ids", In = ParameterLocation.Query, - Content = new Dictionary() + Content = new Dictionary() { { "application/json", diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index da3821c5..4654b43b 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -92,7 +92,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new Dictionary() + Content = new Dictionary() { { applicationJsonMediaType, @@ -153,7 +153,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new Dictionary() + Content = new Dictionary() { { applicationJsonMediaType, @@ -201,7 +201,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved entities", - Content = new Dictionary() + Content = new Dictionary() { { applicationJsonMediaType, @@ -247,7 +247,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved entity", - Content = new Dictionary() + Content = new Dictionary() { { applicationJsonMediaType, @@ -310,7 +310,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved navigation property", - Content = new Dictionary() + Content = new Dictionary() { { applicationJsonMediaType, @@ -357,7 +357,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new Dictionary() + Content = new Dictionary() { { applicationJsonMediaType, @@ -414,7 +414,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Retrieved navigation property", - Content = new Dictionary() + Content = new Dictionary() { { applicationJsonMediaType, @@ -545,7 +545,7 @@ public static OpenApiDocument CreateOpenApiDocument() "200", new OpenApiResponse() { Description = "Success", - Content = new Dictionary() + Content = new Dictionary() { { applicationJsonMediaType, @@ -679,8 +679,8 @@ public static OpenApiDocument CreateOpenApiDocument() document.Paths[eventsDeltaPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("groups.Functions", document)}; document.Paths[refPath].Operations![HttpMethod.Get].Tags = new HashSet {new OpenApiTagReference("applications.directoryObject", document)}; ((OpenApiSchema)document.Paths[usersPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema!.Properties!["value"]).Items = new OpenApiSchemaReference("microsoft.graph.user", document); - document.Paths[usersByIdPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.user", document); - document.Paths[messagesByIdPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema = new OpenApiSchemaReference("microsoft.graph.message", document); + ((OpenApiMediaType)document.Paths[usersByIdPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType]).Schema = new OpenApiSchemaReference("microsoft.graph.user", document); + ((OpenApiMediaType)document.Paths[messagesByIdPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType]).Schema = new OpenApiSchemaReference("microsoft.graph.message", document); ((OpenApiSchema)document.Paths[securityProfilesPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema!.Properties!["value"]).Items = new OpenApiSchemaReference("microsoft.graph.networkInterface", document); ((OpenApiSchema)document.Paths[eventsDeltaPath].Operations![HttpMethod.Get].Responses!["200"].Content![applicationJsonMediaType].Schema!.Properties!["value"]).Items = new OpenApiSchemaReference("microsoft.graph.event", document); return document; From 4d8b9a36d1c1c432daf5ad4062b9f5f62c795d33 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 14 Oct 2025 10:00:39 -0400 Subject: [PATCH 663/720] fix: use settings for terse output in serialization extension methods Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 8787e769..797ec235 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -192,16 +192,17 @@ private static async Task WriteOpenApiAsync(HidiOptions options, string openApiF using var outputStream = options.Output.Create(); using var textWriter = new StreamWriter(outputStream); - var settings = new OpenApiWriterSettings + var settings = new OpenApiJsonWriterSettings { InlineLocalReferences = options.InlineLocal, - InlineExternalReferences = options.InlineExternal + InlineExternalReferences = options.InlineExternal, + Terse = options.TerseOutput }; #pragma warning disable CA1308 IOpenApiWriter writer = openApiFormat.ToLowerInvariant() switch #pragma warning restore CA1308 { - OpenApiConstants.Json => options.TerseOutput ? new(textWriter, settings, options.TerseOutput) : new OpenApiJsonWriter(textWriter, settings, false), + OpenApiConstants.Json => new OpenApiJsonWriter(textWriter, settings), OpenApiConstants.Yaml => new OpenApiYamlWriter(textWriter, settings), _ => throw new ArgumentException("Unknown format"), }; From bc625b884b3f81f77a82f6aa97af4a8fa8560920 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 21:04:57 +0000 Subject: [PATCH 664/720] Bump Microsoft.Extensions.Logging.Abstractions from 9.0.9 to 9.0.10 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 9.0.10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 72a6485e..580e4188 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -30,7 +30,7 @@ - + From 4ae205c3004b35c93a5ef186f2cc5f4b41cf3680 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 21:05:15 +0000 Subject: [PATCH 665/720] Bump Microsoft.Extensions.Logging and Microsoft.Extensions.Logging.Debug Bumps Microsoft.Extensions.Logging from 9.0.9 to 9.0.10 Bumps Microsoft.Extensions.Logging.Debug from 9.0.9 to 9.0.10 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.10 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 9.0.10 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging dependency-version: 9.0.10 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 9.0.10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 580e4188..b06b7927 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 61b69a2c314f6bb259fb754070d6d029789c35c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 21:25:37 +0000 Subject: [PATCH 666/720] Bump Microsoft.Extensions.Logging.Console and System.Text.Json Bumps Microsoft.Extensions.Logging.Console from 9.0.9 to 9.0.10 Bumps System.Text.Json from 9.0.9 to 9.0.10 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.10 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: System.Text.Json dependency-version: 9.0.10 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b06b7927..7e61230e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -31,7 +31,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive From 28b69729caafbd487dc65fab2ea7e1000800cec6 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 15 Oct 2025 18:54:48 -0400 Subject: [PATCH 667/720] chore: updates xunit deps --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 33656177..5b5b5fed 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -17,7 +17,7 @@ - + From eb1c10b084fba627aa32a81a50f9ad43c15abfd8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 21:04:05 +0000 Subject: [PATCH 668/720] Bump Microsoft.OData.Edm from 8.4.0 to 8.4.2 --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-version: 8.4.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7e61230e..465e2308 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From 50d60bd7e326b5ed3a8d2994a1b17ba2507524eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 21:05:10 +0000 Subject: [PATCH 669/720] Bump Microsoft.Extensions.Logging.Abstractions from 9.0.10 to 10.0.0 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 465e2308..c7456e9f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -30,7 +30,7 @@ - + From 2ebe76cd46caedbfa020309c5cf71b8b98e8aa5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 21:09:08 +0000 Subject: [PATCH 670/720] Bump Microsoft.NET.Test.Sdk from 18.0.0 to 18.0.1 --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.0.1 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 5b5b5fed..b7153019 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 33a0d8a4ba3181d7553ac199a029842052d03e39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 21:06:31 +0000 Subject: [PATCH 671/720] Bump Microsoft.Extensions.Logging and Microsoft.Extensions.Logging.Debug Bumps Microsoft.Extensions.Logging from 9.0.10 to 10.0.0 Bumps Microsoft.Extensions.Logging.Debug from 9.0.10 to 10.0.0 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index c7456e9f..73b681f2 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 4fe8a59cbc5419fc2423981a7c0fed1973af90ad Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 13 Nov 2025 10:31:51 -0500 Subject: [PATCH 672/720] chore: upgrades microsoft extensions deps --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 73b681f2..a069c77b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -31,7 +31,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive From c63206139a4c4326e35aa8cce013cca122e3f2c0 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 13 Nov 2025 10:35:55 -0500 Subject: [PATCH 673/720] chore: upgrades openapi deps for alignment --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 73b681f2..81d0f03a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,8 +39,8 @@ - - + + From 930eacef827517946b5bcee9247754ddb93bb2cc Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 13 Nov 2025 10:39:17 -0500 Subject: [PATCH 674/720] chore: upgrades commandline deps to stable version --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 73b681f2..fe7e6b8f 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -37,7 +37,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From a14ad5beb86a3607f4d01e7a519e6d66adcd7529 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Nov 2025 21:05:24 +0000 Subject: [PATCH 675/720] Bump Microsoft.OData.Edm from 8.4.2 to 8.4.3 --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-version: 8.4.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index a7cb5111..b6afc595 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From e27d1a3395070d303a3db8996089473fb292ca53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 21:05:34 +0000 Subject: [PATCH 676/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.0 to 10.0.1 Bumps Microsoft.Extensions.Logging from 10.0.0 to 10.0.1 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.0 to 10.0.1 Bumps Microsoft.Extensions.Logging.Console from 10.0.0 to 10.0.1 Bumps Microsoft.Extensions.Logging.Debug from 10.0.0 to 10.0.1 Bumps System.Text.Json from 10.0.0 to 10.0.1 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b6afc595..458972ef 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From f6ace05b3682f442c14e668b704b182df923243d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 21:25:54 +0000 Subject: [PATCH 677/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.1 to 10.0.2 Bumps Microsoft.Extensions.Logging from 10.0.1 to 10.0.2 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.1 to 10.0.2 Bumps Microsoft.Extensions.Logging.Console from 10.0.1 to 10.0.2 Bumps Microsoft.Extensions.Logging.Debug from 10.0.1 to 10.0.2 Bumps System.Text.Json from 10.0.1 to 10.0.2 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 458972ef..2e955f3a 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From b101a6cc3c57c0edccca7fe88a7fbaa7029782c4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 19 Jan 2026 13:13:05 -0500 Subject: [PATCH 678/720] feat: hidi validate command now logs warnings Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 48f1d1c3..a494b4f2 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -398,6 +398,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool logger.LogTrace("{Timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); LogErrors(logger, result); + LogWarnings(logger, result); stopwatch.Stop(); } @@ -652,7 +653,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl private static void LogErrors(ILogger logger, ReadResult result) { var context = result.Diagnostic; - if (context is not null && context.Errors.Count != 0) + if (context is { Errors.Count: > 0 }) { using (logger.BeginScope("Detected errors")) { @@ -664,6 +665,21 @@ private static void LogErrors(ILogger logger, ReadResult result) } } + private static void LogWarnings(ILogger logger, ReadResult result) + { + var context = result.Diagnostic; + if (context is { Warnings.Count: > 0 }) + { + using (logger.BeginScope("Detected warnings")) + { + foreach (var warning in context.Warnings) + { + logger.LogWarning("Detected warning during parsing: {Warning}", warning.ToString()); + } + } + } + } + internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocument document, StreamWriter writer) { var rootNode = OpenApiUrlTreeNode.Create(document, "main"); From a7851bd9943654f11c0eeb34f52c0cec7a5d5cdf Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 19 Jan 2026 13:13:05 -0500 Subject: [PATCH 679/720] feat: hidi validate command now logs warnings Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Hidi/OpenApiService.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs index 797ec235..b35cc2cb 100644 --- a/src/Microsoft.OpenApi.Hidi/OpenApiService.cs +++ b/src/Microsoft.OpenApi.Hidi/OpenApiService.cs @@ -398,6 +398,7 @@ private static async Task ParseOpenApiAsync(string openApiFile, bool logger.LogTrace("{Timestamp}ms: Completed parsing.", stopwatch.ElapsedMilliseconds); LogErrors(logger, result); + LogWarnings(logger, result); stopwatch.Stop(); } @@ -652,7 +653,7 @@ private static string GetInputPathExtension(string? openapi = null, string? csdl private static void LogErrors(ILogger logger, ReadResult result) { var context = result.Diagnostic; - if (context is not null && context.Errors.Count != 0) + if (context is { Errors.Count: > 0 }) { using (logger.BeginScope("Detected errors")) { @@ -664,6 +665,21 @@ private static void LogErrors(ILogger logger, ReadResult result) } } + private static void LogWarnings(ILogger logger, ReadResult result) + { + var context = result.Diagnostic; + if (context is { Warnings.Count: > 0 }) + { + using (logger.BeginScope("Detected warnings")) + { + foreach (var warning in context.Warnings) + { + logger.LogWarning("Detected warning during parsing: {Warning}", warning.ToString()); + } + } + } + } + internal static void WriteTreeDocumentAsMarkdown(string openapiUrl, OpenApiDocument document, StreamWriter writer) { var rootNode = OpenApiUrlTreeNode.Create(document, "main"); From 8490a720baf182129269091dafc58a5daff9343c Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 29 Jan 2026 13:26:07 -0500 Subject: [PATCH 680/720] docs: adds container information for hidi --- src/Microsoft.OpenApi.Hidi/readme.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 38efe66a..95aba5f1 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -14,7 +14,7 @@ Hidi has these key capabilities that enable you to build different scenarios off ## Installation Install [Microsoft.OpenApi.Hidi](https://www.nuget.org/packages/Microsoft.OpenApi.Hidi/1.0.0-preview4) package from NuGet by running the following command: - + ### .NET CLI(Global) ```bash @@ -23,12 +23,18 @@ dotnet tool install --global Microsoft.OpenApi.Hidi --prerelease ### .NET CLI(local) -```bash +```bash dotnet new tool-manifest #if you are setting up the OpenAPI.NET repo dotnet tool install --local Microsoft.OpenApi.Hidi --prerelease ``` - - + +### Docker + +Hidi is also available as a Docker image: + +```bash +docker pull mcr.microsoft.com/openapi/hidi +``` ## How to use Hidi From cb8433b4207e70882c17b792a9b204170b917f4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:27:02 +0000 Subject: [PATCH 681/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.2 to 10.0.3 Bumps Microsoft.Extensions.Logging from 10.0.2 to 10.0.3 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.2 to 10.0.3 Bumps Microsoft.Extensions.Logging.Console from 10.0.2 to 10.0.3 Bumps Microsoft.Extensions.Logging.Debug from 10.0.2 to 10.0.3 Bumps System.Text.Json from 10.0.2 to 10.0.3 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 2e955f3a..475f4ce6 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From ebe43db74551f8934e4095717d55ec16fe7dc73f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 21:26:53 +0000 Subject: [PATCH 682/720] Bump coverlet.msbuild from 6.0.4 to 8.0.0 --- updated-dependencies: - dependency-name: coverlet.msbuild dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: coverlet.msbuild dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index b7153019..a238b255 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,7 +13,7 @@ - + From 2ec86ebe56787e942baa56f9dc2802f03d6cd02e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 21:27:52 +0000 Subject: [PATCH 683/720] Bump Microsoft.NET.Test.Sdk from 18.0.1 to 18.3.0 --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.3.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index a238b255..0e9bad64 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From a00ebee40b8391751312bbe03d429e5d77a3518f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 21:26:27 +0000 Subject: [PATCH 684/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.3 to 10.0.4 Bumps Microsoft.Extensions.Logging from 10.0.3 to 10.0.4 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.3 to 10.0.4 Bumps Microsoft.Extensions.Logging.Console from 10.0.3 to 10.0.4 Bumps Microsoft.Extensions.Logging.Debug from 10.0.3 to 10.0.4 Bumps System.Text.Json from 10.0.3 to 10.0.4 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 475f4ce6..00ed9dca 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From 1452d33128138e1fac53b5b7e51f7176e6005e06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 21:26:33 +0000 Subject: [PATCH 685/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.4 to 10.0.5 Bumps Microsoft.Extensions.Logging from 10.0.4 to 10.0.5 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.4 to 10.0.5 Bumps Microsoft.Extensions.Logging.Console from 10.0.4 to 10.0.5 Bumps Microsoft.Extensions.Logging.Debug from 10.0.4 to 10.0.5 Bumps System.Text.Json from 10.0.4 to 10.0.5 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 00ed9dca..7e3db37d 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From bd76e8dad9005a2b6d4810daa9bd90d84b5ba29d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2026 14:52:10 +0000 Subject: [PATCH 686/720] Bump Humanizer.Core from 2.14.1 to 3.0.10 --- updated-dependencies: - dependency-name: Humanizer.Core dependency-version: 3.0.10 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7e3db37d..b7a86dc4 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -28,7 +28,7 @@ - + From 9f2461e43287cb82d9fadfd536a71093f6d5d74e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Mar 2026 15:41:59 +0000 Subject: [PATCH 687/720] Bump the coverlet group with 2 updates Bumps coverlet.collector from 6.0.4 to 8.0.1 Bumps coverlet.msbuild from 8.0.0 to 8.0.1 --- updated-dependencies: - dependency-name: coverlet.collector dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: coverlet - dependency-name: coverlet.collector dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: coverlet - dependency-name: coverlet.msbuild dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: coverlet - dependency-name: coverlet.msbuild dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: coverlet ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 0e9bad64..b2cb4de5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,12 +13,12 @@ - + - + From d24cbba390f22f39bf26afac229ebb52e361875a Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 20 Mar 2026 12:38:06 -0400 Subject: [PATCH 688/720] chore: upgrades system.commandline dependency --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 7e3db37d..56a98870 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -37,7 +37,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From 51c88bd30ebe86fa07ec29151fc7cb6190ee5677 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 20 Mar 2026 12:39:12 -0400 Subject: [PATCH 689/720] chore: upgrades yoko --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 56a98870..3352b5a2 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + From c86dc775df862c98cd396c3e0ef3090291b1a2a1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 16:53:10 +0000 Subject: [PATCH 690/720] Initial plan From a8b3a5819a6786cfc7c2e7d5274a721764a55153 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 17:23:37 +0000 Subject: [PATCH 691/720] fix(hidi): remove Humanizer.Inflections namespace for Humanizer 3.x compatibility Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --- src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs index bb4bc58d..6d2282b3 100644 --- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs +++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs @@ -5,7 +5,6 @@ using System.Text; using System.Text.RegularExpressions; using Humanizer; -using Humanizer.Inflections; using Microsoft.OpenApi.Hidi.Extensions; namespace Microsoft.OpenApi.Hidi.Formatters From a8723384b2a415d9b6b95022982fd17715d3c0c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 21:26:34 +0000 Subject: [PATCH 692/720] Bump Microsoft.NET.Test.Sdk from 18.3.0 to 18.4.0 --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.4.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index b2cb4de5..76afffd9 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From d88dbac1de5c0c2754b36907acb7e27a69dddae1 Mon Sep 17 00:00:00 2001 From: "Gavin Barron (from Dev Box)" Date: Tue, 14 Apr 2026 09:24:54 -0700 Subject: [PATCH 693/720] fix(hidi): update Microsoft.OpenApi.OData to 3.2.1 Fixes CSDL to OpenAPI conversion issue with binding functions to multiple types in an inheritance tree. Closes #2811 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index d28fb038..d856e948 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -39,7 +39,7 @@ - + From 328411bae7a8399dcf76363f201cc3972c70ab0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 11:36:19 +0000 Subject: [PATCH 694/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.5 to 10.0.6 Bumps Microsoft.Extensions.Logging from 10.0.5 to 10.0.6 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.5 to 10.0.6 Bumps Microsoft.Extensions.Logging.Console from 10.0.5 to 10.0.6 Bumps Microsoft.Extensions.Logging.Debug from 10.0.5 to 10.0.6 Bumps System.Text.Json from 10.0.5 to 10.0.6 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index d856e948..d125c2ec 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From 41b55ba0faf7a0f9820b404abead2075b04cc837 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Thu, 16 Apr 2026 09:53:27 -0400 Subject: [PATCH 695/720] ci: upgrades repository to net10 --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../UtilityFiles/OpenApiDocumentMock.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 76afffd9..46a20d20 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable enable diff --git a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs index 4654b43b..535b43a8 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/OpenApiDocumentMock.cs @@ -6,7 +6,7 @@ namespace Microsoft.OpenApi.Tests.UtilityFiles /// /// Mock class that creates a sample OpenAPI document. /// - public static class OpenApiDocumentMock + internal static class OpenApiDocumentMock { /// /// Creates an OpenAPI document. From 67936fcce5079c8d391f1ef105172dae0ea2883c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Apr 2026 21:27:36 +0000 Subject: [PATCH 696/720] Bump the coverlet group with 2 updates Bumps coverlet.collector from 8.0.1 to 10.0.0 Bumps coverlet.msbuild from 8.0.1 to 10.0.0 --- updated-dependencies: - dependency-name: coverlet.collector dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: coverlet - dependency-name: coverlet.collector dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: coverlet - dependency-name: coverlet.msbuild dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: coverlet - dependency-name: coverlet.msbuild dependency-version: 10.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: coverlet ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 46a20d20..2ff261d6 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,12 +13,12 @@ - + - + From 73bf0467057c24cee70fb6ea195ce6a62717ec45 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 21:26:48 +0000 Subject: [PATCH 697/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.6 to 10.0.7 Bumps Microsoft.Extensions.Logging from 10.0.6 to 10.0.7 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.6 to 10.0.7 Bumps Microsoft.Extensions.Logging.Console from 10.0.6 to 10.0.7 Bumps Microsoft.Extensions.Logging.Debug from 10.0.6 to 10.0.7 Bumps System.Text.Json from 10.0.6 to 10.0.7 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index d125c2ec..eb6a089b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From 0a86d83ad893d9f6e06d9a979808fb1248231cdd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2026 21:30:11 +0000 Subject: [PATCH 698/720] Bump Microsoft.NET.Test.Sdk from 18.4.0 to 18.5.1 --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.5.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.5.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 2ff261d6..84f3e3dd 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 2003512e0ee5d4334597fb911d3997d4dccc382e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 May 2026 09:31:50 +0000 Subject: [PATCH 699/720] Bump Microsoft.Extensions.DependencyInjection and 5 others Bumps Microsoft.Extensions.DependencyInjection from 10.0.7 to 10.0.8 Bumps Microsoft.Extensions.Logging from 10.0.7 to 10.0.8 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.7 to 10.0.8 Bumps Microsoft.Extensions.Logging.Console from 10.0.7 to 10.0.8 Bumps Microsoft.Extensions.Logging.Debug from 10.0.7 to 10.0.8 Bumps System.Text.Json from 10.0.7 to 10.0.8 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index eb6a089b..6642b9fb 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From ed6430eddd3e664558fcc031ec6afdb284da40d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 06:27:52 +0000 Subject: [PATCH 700/720] Bump the coverlet group with 2 updates Bumps coverlet.collector from 10.0.0 to 10.0.1 Bumps coverlet.msbuild from 10.0.0 to 10.0.1 --- updated-dependencies: - dependency-name: coverlet.collector dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: coverlet - dependency-name: coverlet.collector dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: coverlet - dependency-name: coverlet.msbuild dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: coverlet - dependency-name: coverlet.msbuild dependency-version: 10.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: coverlet ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 84f3e3dd..d0766cb5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -13,12 +13,12 @@ - + - + From 827524e48d31f0d379fa8473f0b68a9a69877690 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 May 2026 01:29:37 +0000 Subject: [PATCH 701/720] Bump Microsoft.NET.Test.Sdk from 18.5.1 to 18.6.0 --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.6.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.6.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index d0766cb5..8e30f7f5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From ad2b6a563319b0eab67a8677b9a9e5b32b8c5534 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 1 Jun 2026 10:19:16 -0400 Subject: [PATCH 702/720] test(coverage): add reader and walker edge tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../OpenApiSpecVersionHelperTests.cs | 31 +++++ .../Services/OpenApiFilterServiceTests.cs | 66 +++++++++++ .../StatsVisitorTests.cs | 110 ++++++++++++++++++ .../Utilities/SettingsUtilitiesTests.cs | 44 +++++++ 4 files changed, 251 insertions(+) create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/OpenApiSpecVersionHelperTests.cs create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/StatsVisitorTests.cs create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/Utilities/SettingsUtilitiesTests.cs diff --git a/test/Microsoft.OpenApi.Hidi.Tests/OpenApiSpecVersionHelperTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/OpenApiSpecVersionHelperTests.cs new file mode 100644 index 00000000..da7da8e7 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/OpenApiSpecVersionHelperTests.cs @@ -0,0 +1,31 @@ +#nullable enable +using System; +using Microsoft.OpenApi.Hidi; +using Xunit; + +namespace Microsoft.OpenApi.Hidi.Tests; + +public class OpenApiSpecVersionHelperTests +{ + [Theory] + [InlineData("2.0", OpenApiSpecVersion.OpenApi2_0)] + [InlineData("3.0", OpenApiSpecVersion.OpenApi3_0)] + [InlineData("3.1", OpenApiSpecVersion.OpenApi3_1)] + [InlineData("3.2", OpenApiSpecVersion.OpenApi3_2)] + [InlineData("4.0", OpenApiSpecVersion.OpenApi3_2)] + public void TryParseOpenApiSpecVersionReturnsExpectedVersion(string version, OpenApiSpecVersion expectedVersion) + { + var result = OpenApiSpecVersionHelper.TryParseOpenApiSpecVersion(version); + + Assert.Equal(expectedVersion, result); + } + + [Theory] + [InlineData(null)] + [InlineData("")] + [InlineData("abc")] + public void TryParseOpenApiSpecVersionThrowsForInvalidValues(string? version) + { + Assert.Throws(() => OpenApiSpecVersionHelper.TryParseOpenApiSpecVersion(version!)); + } +} diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 483deaf2..8f8aa0c8 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -221,6 +221,72 @@ public void ThrowsInvalidOperationExceptionInCreatePredicateWhenInvalidArguments Assert.Equal("Cannot specify both operationIds and tags at the same time.", message2); } + [Fact] + public void ThrowsInvalidOperationExceptionWhenRequestUrlsAreCombinedWithOtherFilters() + { + var requestUrls = new Dictionary> + { + ["/users"] = ["GET"] + }; + + var message = Assert.Throws(() => + OpenApiFilterService.CreatePredicate("users.user.ListUser", null, requestUrls, _openApiDocumentMock)).Message; + + Assert.Equal("Cannot filter by Postman collection and either operationIds and tags at the same time.", message); + } + + [Fact] + public void ThrowsWhenPredicateDoesNotMatchAnyPath() + { + var source = new OpenApiDocument + { + Info = new() { Title = "Test", Version = "1.0" }, + Paths = new() + { + ["/test"] = new OpenApiPathItem + { + Operations = new() + { + [HttpMethod.Get] = new OpenApiOperation { OperationId = "getTest" } + } + } + } + }; + + var subset = OpenApiFilterService.CreateFilteredDocument(source, static (_, _, _) => false); + + Assert.Empty(subset.Paths); + } + + [Fact] + public void CreatePredicateMatchesAbsoluteUrlsWhenSourceHasNoServers() + { + var source = new OpenApiDocument + { + Info = new() { Title = "Test", Version = "v1" }, + Paths = new() + { + ["/users"] = new OpenApiPathItem + { + Operations = new() + { + [HttpMethod.Get] = new OpenApiOperation { OperationId = "listUsers" } + } + } + } + }; + var requestUrls = new Dictionary> + { + ["https://graph.contoso.com/users"] = ["GET"] + }; + + var predicate = OpenApiFilterService.CreatePredicate(requestUrls: requestUrls, source: source); + var subset = OpenApiFilterService.CreateFilteredDocument(source, predicate); + + Assert.Single(subset.Paths); + Assert.True(subset.Paths.ContainsKey("/users")); + } + [Fact] public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() { diff --git a/test/Microsoft.OpenApi.Hidi.Tests/StatsVisitorTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/StatsVisitorTests.cs new file mode 100644 index 00000000..76354026 --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/StatsVisitorTests.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using Xunit; + +namespace Microsoft.OpenApi.Hidi.Tests; + +public class StatsVisitorTests +{ + [Fact] + public void GetStatisticsReportReflectsVisitedElements() + { + var document = new OpenApiDocument + { + Paths = new() + { + ["/pets"] = new OpenApiPathItem + { + Operations = new() + { + [HttpMethod.Post] = new OpenApiOperation + { + Parameters = + [ + new OpenApiParameter + { + Name = "expand", + In = ParameterLocation.Query, + Schema = new OpenApiSchema { Type = JsonSchemaType.String } + } + ], + RequestBody = new OpenApiRequestBody + { + Content = new Dictionary + { + ["application/json"] = new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Type = JsonSchemaType.Object, + Properties = new Dictionary + { + ["name"] = new OpenApiSchema { Type = JsonSchemaType.String } + } + } + } + } + }, + Responses = new OpenApiResponses + { + ["200"] = new OpenApiResponse + { + Headers = new Dictionary + { + ["x-rate-limit"] = new OpenApiHeader + { + Schema = new OpenApiSchema { Type = JsonSchemaType.Integer } + } + }, + Links = new Dictionary + { + ["next"] = new OpenApiLink() + } + } + }, + Callbacks = new Dictionary + { + ["onData"] = new OpenApiCallback + { + PathItems = new Dictionary + { + [RuntimeExpression.Build("$request.body#/callbackUrl")] = new OpenApiPathItem + { + Operations = new() + { + [HttpMethod.Post] = new OpenApiOperation + { + Responses = new OpenApiResponses + { + ["202"] = new OpenApiResponse { Description = "Accepted" } + } + } + } + } + } + } + } + } + } + } + } + }; + + var visitor = new StatsVisitor(); + new OpenApiWalker(visitor).Walk(document); + var report = visitor.GetStatisticsReport(); + + Assert.Equal(2, visitor.PathItemCount); + Assert.Equal(2, visitor.OperationCount); + Assert.Equal(1, visitor.ParameterCount); + Assert.Equal(1, visitor.RequestBodyCount); + Assert.Equal(2, visitor.ResponseCount); + Assert.Equal(1, visitor.LinkCount); + Assert.Equal(1, visitor.CallbackCount); + Assert.Equal(4, visitor.SchemaCount); + Assert.Contains("Path Items: 2", report, StringComparison.Ordinal); + Assert.Contains("Callbacks: 1", report, StringComparison.Ordinal); + Assert.Contains("Schemas: 4", report, StringComparison.Ordinal); + } +} diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Utilities/SettingsUtilitiesTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Utilities/SettingsUtilitiesTests.cs new file mode 100644 index 00000000..aa31367a --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/Utilities/SettingsUtilitiesTests.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using Microsoft.Extensions.Configuration; +using Microsoft.OpenApi.Hidi.Utilities; +using Microsoft.OpenApi.OData; +using Xunit; + +namespace Microsoft.OpenApi.Hidi.Tests; + +public class SettingsUtilitiesTests +{ + [Fact] + public void GetOpenApiConvertSettingsThrowsWhenConfigurationIsNull() + { + Assert.Throws(() => SettingsUtilities.GetOpenApiConvertSettings(null!, null)); + } + + [Fact] + public void GetOpenApiConvertSettingsUsesMetadataVersionWhenSectionIsMissing() + { + var configuration = new ConfigurationBuilder().AddInMemoryCollection(new Dictionary()).Build(); + + var settings = SettingsUtilities.GetOpenApiConvertSettings(configuration, "2.1"); + + Assert.Equal("2.1", settings.SemVerVersion); + } + + [Fact] + public void GetOpenApiConvertSettingsBindsConfiguredValuesOverMetadataVersion() + { + var configuration = new ConfigurationBuilder() + .AddInMemoryCollection(new Dictionary + { + [$"{nameof(OpenApiConvertSettings)}:{nameof(OpenApiConvertSettings.SemVerVersion)}"] = "3.0", + [$"{nameof(OpenApiConvertSettings)}:{nameof(OpenApiConvertSettings.EnablePagination)}"] = bool.TrueString + }) + .Build(); + + var settings = SettingsUtilities.GetOpenApiConvertSettings(configuration, "2.1"); + + Assert.Equal("3.0", settings.SemVerVersion); + Assert.True(settings.EnablePagination); + } +} From d91066673b48f7dee6165bed2a96879314805ead Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 21:28:12 +0000 Subject: [PATCH 703/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.8 to 10.0.9 Bumps Microsoft.Extensions.Logging from 10.0.8 to 10.0.9 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.8 to 10.0.9 Bumps Microsoft.Extensions.Logging.Console from 10.0.8 to 10.0.9 Bumps Microsoft.Extensions.Logging.Debug from 10.0.8 to 10.0.9 Bumps System.Text.Json from 10.0.8 to 10.0.9 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.9 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 6642b9fb..4c659736 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From 69c30656cf4a987ae74acd40853bf6840d3937a5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 21:27:51 +0000 Subject: [PATCH 704/720] Bump Microsoft.NET.Test.Sdk from 18.6.0 to 18.7.0 --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.7.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.7.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 8e30f7f5..5b4e651e 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 78a2f33fc084470c673391ccb9e40d9793c7d12c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jun 2026 21:27:12 +0000 Subject: [PATCH 705/720] Bump Microsoft.VisualStudio.Threading.Analyzers from 17.14.15 to 18.7.23 --- updated-dependencies: - dependency-name: Microsoft.VisualStudio.Threading.Analyzers dependency-version: 18.7.23 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4c659736..f060053b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -33,7 +33,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From 017b6a716a5c13558a69ef370861c67c896ae83c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jul 2026 17:22:55 +0000 Subject: [PATCH 706/720] Bump Microsoft.NET.Test.Sdk from 18.7.0 to 18.8.1 --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.8.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.8.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 5b4e651e..3becd1bd 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From f76de669ae90d9ae8dc31ba0b51d0bf4fdfbb1d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jul 2026 17:23:17 +0000 Subject: [PATCH 707/720] Bump Microsoft.OData.Edm from 8.4.3 to 8.4.4 --- updated-dependencies: - dependency-name: Microsoft.OData.Edm dependency-version: 8.4.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index f060053b..4d8bc9fa 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -38,7 +38,7 @@ all - + From b240161c8e05f0b8b8c68d64ece49b58aa3a195e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jul 2026 21:27:31 +0000 Subject: [PATCH 708/720] Bump the microsoftextensions group with 6 updates Bumps Microsoft.Extensions.DependencyInjection from 10.0.9 to 10.0.10 Bumps Microsoft.Extensions.Logging from 10.0.9 to 10.0.10 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.9 to 10.0.10 Bumps Microsoft.Extensions.Logging.Console from 10.0.9 to 10.0.10 Bumps Microsoft.Extensions.Logging.Debug from 10.0.9 to 10.0.10 Bumps System.Text.Json from 10.0.9 to 10.0.10 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 4d8bc9fa..b6034c5e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From de25426462569f2890067cc8a7d9b4655c3b824e Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 11 Aug 2026 09:14:46 -0400 Subject: [PATCH 709/720] chore: upgrades dependencies not picked up by dependabot --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index b6034c5e..371fb339 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -37,7 +37,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From 69e3d6297e8f5513d00fce6352e30add89d606aa Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 11 Aug 2026 13:34:40 -0400 Subject: [PATCH 710/720] tests: upgrades to xunit v3 Signed-off-by: Vincent Biret --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- .../Services/OpenApiFilterServiceTests.cs | 4 +- .../Services/OpenApiServiceTests.cs | 48 +++++++++---------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 3becd1bd..9d98d4ab 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 8f8aa0c8..2dc91151 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -298,7 +298,7 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( using var stream = File.OpenRead(filePath); var settings = new OpenApiReaderSettings(); settings.AddYamlReader(); - var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings)).Document; + var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings, TestContext.Current.CancellationToken)).Document; // validated the tags are read as references var openApiOperationTags = doc?.Paths["/items"].Operations?[HttpMethod.Get].Tags?.ToArray(); @@ -344,7 +344,7 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( } }; subsetOpenApiDocument.SerializeAsV3(writer); - await writer.FlushAsync(); + await writer.FlushAsync(TestContext.Current.CancellationToken); var result = outputStringWriter.ToString(); Assert.NotEmpty(result); } diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index 6342f670..f4c1ef97 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -138,9 +138,9 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagramAsync Output = new("sample.md") }; - await OpenApiService.ShowOpenApiDocumentAsync(options, _logger); + await OpenApiService.ShowOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync(options.Output.FullName); + var output = await File.ReadAllTextAsync(options.Output.FullName, TestContext.Current.CancellationToken); Assert.Contains("graph LR", output, StringComparison.Ordinal); } @@ -151,7 +151,7 @@ public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagramAsync() { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml") }; - var filePath = await OpenApiService.ShowOpenApiDocumentAsync(options, _logger); + var filePath = await OpenApiService.ShowOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); Assert.True(File.Exists(filePath)); } @@ -159,28 +159,28 @@ public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagramAsync() public Task ThrowIfOpenApiUrlIsNotProvidedWhenValidatingAsync() { return Assert.ThrowsAsync(() => - OpenApiService.ValidateOpenApiDocumentAsync("", _logger)); + OpenApiService.ValidateOpenApiDocumentAsync("", _logger, TestContext.Current.CancellationToken)); } [Fact] public Task ThrowIfURLIsNotResolvableWhenValidatingAsync() { return Assert.ThrowsAsync(() => - OpenApiService.ValidateOpenApiDocumentAsync("https://example.org926F4F21-88E7-4DC5-BF88-6C529BB77844/itdoesnmatter", _logger)); + OpenApiService.ValidateOpenApiDocumentAsync("https://example.org926F4F21-88E7-4DC5-BF88-6C529BB77844/itdoesnmatter", _logger, TestContext.Current.CancellationToken)); } [Fact] public Task ThrowIfFileDoesNotExistWhenValidatingAsync() { return Assert.ThrowsAsync(() => - OpenApiService.ValidateOpenApiDocumentAsync("aFileThatBetterNotExist.fake", _logger)); + OpenApiService.ValidateOpenApiDocumentAsync("aFileThatBetterNotExist.fake", _logger, TestContext.Current.CancellationToken)); } [Fact] public async Task ValidateCommandProcessesOpenApiAsync() { // create a dummy ILogger instance for testing - await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger); + await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); Assert.True(true); } @@ -188,7 +188,7 @@ public async Task ValidateCommandProcessesOpenApiAsync() [Fact] public async Task ValidFileReturnsTrueAsync() { - var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); Assert.True(isValid); } @@ -196,7 +196,7 @@ public async Task ValidFileReturnsTrueAsync() [Fact] public async Task InvalidFileReturnsFalseAsync() { - var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "InvalidSampleOpenApi.yml"), _logger); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "InvalidSampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); Assert.False(isValid); } @@ -224,9 +224,9 @@ public async Task TransformCommandConvertsOpenApiAsync() InlineExternal = false, }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("sample.json"); + var output = await File.ReadAllTextAsync("sample.json", TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -243,9 +243,9 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAsync() InlineExternal = false, }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("output.yml"); + var output = await File.ReadAllTextAsync("output.yml", TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -263,9 +263,9 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF InlineExternal = false, }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("output.yml"); + var output = await File.ReadAllTextAsync("output.yml", TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -280,7 +280,7 @@ public Task ThrowTransformCommandIfOpenApiAndCsdlAreEmptyAsync() InlineExternal = false, }; return Assert.ThrowsAsync(() => - OpenApiService.TransformOpenApiDocumentAsync(options, _logger)); + OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken)); } [Fact] @@ -299,9 +299,9 @@ public async Task TransformToPowerShellCompliantOpenApiAsync() SettingsConfig = SettingsUtilities.GetConfiguration(settingsPath) }; // create a dummy ILogger instance for testing - await OpenApiService.TransformOpenApiDocumentAsync(options, _logger); + await OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("output.yaml"); + var output = await File.ReadAllTextAsync("output.yaml", TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -314,9 +314,9 @@ public async Task InvokeTransformCommandAsync() var parseResult = rootCommand.Parse(args); var handler = Assert.IsType(rootCommand.Subcommands.First(c => c.Name == "transform").Action, exactMatch: false); - await handler.InvokeAsync(parseResult); + await handler.InvokeAsync(parseResult, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("sample.json"); + var output = await File.ReadAllTextAsync("sample.json", TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -330,9 +330,9 @@ public async Task InvokeShowCommandAsync() var parseResult = rootCommand.Parse(args); var handler = Assert.IsType(rootCommand.Subcommands.First(c => c.Name == "show").Action, exactMatch: false); - await handler.InvokeAsync(parseResult); + await handler.InvokeAsync(parseResult, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("sample.md"); + var output = await File.ReadAllTextAsync("sample.md", TestContext.Current.CancellationToken); Assert.Contains("graph LR", output, StringComparison.Ordinal); } @@ -345,9 +345,9 @@ public async Task InvokePluginCommandAsync() var parseResult = rootCommand.Parse(args); var handler = Assert.IsType(rootCommand.Subcommands.First(c => c.Name == "plugin").Action, exactMatch: false); - await handler.InvokeAsync(parseResult); + await handler.InvokeAsync(parseResult, TestContext.Current.CancellationToken); - using var jsDoc = JsonDocument.Parse(await File.ReadAllTextAsync("ai-plugin.json")); + using var jsDoc = JsonDocument.Parse(await File.ReadAllTextAsync("ai-plugin.json", TestContext.Current.CancellationToken)); var openAiManifest = OpenAIPluginManifest.Load(jsDoc.RootElement); Assert.NotNull(openAiManifest); From c6177b4e3990e8e946fabfe1b3c13c53574eae60 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 11 Aug 2026 13:49:57 -0400 Subject: [PATCH 711/720] tests: use unique file names to avoid race conditions Signed-off-by: Vincent Biret --- .../Services/OpenApiServiceTests.cs | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index f4c1ef97..be9c203a 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -135,7 +135,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagramAsync var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), - Output = new("sample.md") + Output = new($"{nameof(ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagramAsync)}.md") }; await OpenApiService.ShowOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); @@ -217,7 +217,7 @@ public async Task TransformCommandConvertsOpenApiAsync() var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), - Output = new("sample.json"), + Output = new($"{nameof(TransformCommandConvertsOpenApiAsync)}.json"), CleanOutput = true, TerseOutput = false, InlineLocal = false, @@ -226,7 +226,7 @@ public async Task TransformCommandConvertsOpenApiAsync() // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("sample.json", TestContext.Current.CancellationToken); + var output = await File.ReadAllTextAsync(options.Output.FullName, TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -241,11 +241,12 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAsync() TerseOutput = false, InlineLocal = false, InlineExternal = false, + Output = new FileInfo($"{nameof(TransformCommandConvertsOpenApiWithDefaultOutputNameAsync)}.yml") }; // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("output.yml", TestContext.Current.CancellationToken); + var output = await File.ReadAllTextAsync(options.Output.FullName, TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -255,6 +256,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), + Output = new($"{nameof(TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchFormatAsync)}.yml"), CleanOutput = true, Version = "3.0", OpenApiFormat = OpenApiConstants.Yaml, @@ -265,7 +267,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("output.yml", TestContext.Current.CancellationToken); + var output = await File.ReadAllTextAsync(options.Output.FullName, TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -290,6 +292,7 @@ public async Task TransformToPowerShellCompliantOpenApiAsync() var options = new HidiOptions { OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), + Output = new($"{nameof(TransformToPowerShellCompliantOpenApiAsync)}.yaml"), CleanOutput = true, Version = "3.0", OpenApiFormat = OpenApiConstants.Yaml, @@ -301,7 +304,7 @@ public async Task TransformToPowerShellCompliantOpenApiAsync() // create a dummy ILogger instance for testing await OpenApiService.TransformOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("output.yaml", TestContext.Current.CancellationToken); + var output = await File.ReadAllTextAsync(options.Output.FullName, TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -310,13 +313,14 @@ public async Task InvokeTransformCommandAsync() { var rootCommand = Program.CreateRootCommand(); var openapi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); - var args = new[] { "transform", "-d", openapi, "-o", "sample.json", "--co" }; + var outputPath = $"{nameof(InvokeTransformCommandAsync)}.json"; + var args = new[] { "transform", "-d", openapi, "-o", outputPath, "--co" }; var parseResult = rootCommand.Parse(args); var handler = Assert.IsType(rootCommand.Subcommands.First(c => c.Name == "transform").Action, exactMatch: false); await handler.InvokeAsync(parseResult, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("sample.json", TestContext.Current.CancellationToken); + var output = await File.ReadAllTextAsync(outputPath, TestContext.Current.CancellationToken); Assert.NotEmpty(output); } @@ -326,13 +330,14 @@ public async Task InvokeShowCommandAsync() { var rootCommand = Program.CreateRootCommand(); var openApi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); - var args = new[] { "show", "-d", openApi, "-o", "sample.md" }; + var outputPath = $"{nameof(InvokeShowCommandAsync)}.md"; + var args = new[] { "show", "-d", openApi, "-o", outputPath }; var parseResult = rootCommand.Parse(args); var handler = Assert.IsType(rootCommand.Subcommands.First(c => c.Name == "show").Action, exactMatch: false); await handler.InvokeAsync(parseResult, TestContext.Current.CancellationToken); - var output = await File.ReadAllTextAsync("sample.md", TestContext.Current.CancellationToken); + var output = await File.ReadAllTextAsync(outputPath, TestContext.Current.CancellationToken); Assert.Contains("graph LR", output, StringComparison.Ordinal); } @@ -341,13 +346,14 @@ public async Task InvokePluginCommandAsync() { var rootCommand = Program.CreateRootCommand(); var manifest = Path.Combine(".", "UtilityFiles", "exampleapimanifest.json"); - var args = new[] { "plugin", "-m", manifest, "--of", AppDomain.CurrentDomain.BaseDirectory }; + var outputPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, nameof(InvokePluginCommandAsync)); + var args = new[] { "plugin", "-m", manifest, "--of", outputPath }; var parseResult = rootCommand.Parse(args); var handler = Assert.IsType(rootCommand.Subcommands.First(c => c.Name == "plugin").Action, exactMatch: false); await handler.InvokeAsync(parseResult, TestContext.Current.CancellationToken); - using var jsDoc = JsonDocument.Parse(await File.ReadAllTextAsync("ai-plugin.json", TestContext.Current.CancellationToken)); + using var jsDoc = JsonDocument.Parse(await File.ReadAllTextAsync(Path.Combine(outputPath, "ai-plugin.json"), TestContext.Current.CancellationToken)); var openAiManifest = OpenAIPluginManifest.Load(jsDoc.RootElement); Assert.NotNull(openAiManifest); From af1cc0cf8126e51f1feaa5f826b445d7e4703429 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 11 Aug 2026 13:55:15 -0400 Subject: [PATCH 712/720] linting: use path join instead of combine Signed-off-by: Vincent Biret --- .../Services/OpenApiServiceTests.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs index be9c203a..981a0055 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs @@ -134,7 +134,7 @@ public async Task ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagramAsync // create a dummy ILogger instance for testing var options = new HidiOptions { - OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), + OpenApi = Path.Join("UtilityFiles", "SampleOpenApi.yml"), Output = new($"{nameof(ShowCommandGeneratesMermaidMarkdownFileWithMermaidDiagramAsync)}.md") }; @@ -149,7 +149,7 @@ public async Task ShowCommandGeneratesMermaidHtmlFileWithMermaidDiagramAsync() { var options = new HidiOptions { - OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml") + OpenApi = Path.Join("UtilityFiles", "SampleOpenApi.yml") }; var filePath = await OpenApiService.ShowOpenApiDocumentAsync(options, _logger, TestContext.Current.CancellationToken); Assert.True(File.Exists(filePath)); @@ -180,7 +180,7 @@ public Task ThrowIfFileDoesNotExistWhenValidatingAsync() public async Task ValidateCommandProcessesOpenApiAsync() { // create a dummy ILogger instance for testing - await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); + await OpenApiService.ValidateOpenApiDocumentAsync(Path.Join("UtilityFiles", "SampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); Assert.True(true); } @@ -188,7 +188,7 @@ public async Task ValidateCommandProcessesOpenApiAsync() [Fact] public async Task ValidFileReturnsTrueAsync() { - var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Join("UtilityFiles", "SampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); Assert.True(isValid); } @@ -196,7 +196,7 @@ public async Task ValidFileReturnsTrueAsync() [Fact] public async Task InvalidFileReturnsFalseAsync() { - var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "InvalidSampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Join("UtilityFiles", "InvalidSampleOpenApi.yml"), _logger, TestContext.Current.CancellationToken); Assert.False(isValid); } @@ -206,7 +206,7 @@ public async Task CancellingValidationReturnsNullAsync() { using var cts = new CancellationTokenSource(); await cts.CancelAsync(); - var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Combine("UtilityFiles", "SampleOpenApi.yml"), _logger, cts.Token); + var isValid = await OpenApiService.ValidateOpenApiDocumentAsync(Path.Join("UtilityFiles", "SampleOpenApi.yml"), _logger, cts.Token); Assert.Null(isValid); } @@ -216,7 +216,7 @@ public async Task TransformCommandConvertsOpenApiAsync() { var options = new HidiOptions { - OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), + OpenApi = Path.Join("UtilityFiles", "SampleOpenApi.yml"), Output = new($"{nameof(TransformCommandConvertsOpenApiAsync)}.json"), CleanOutput = true, TerseOutput = false, @@ -236,7 +236,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAsync() { var options = new HidiOptions { - OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), + OpenApi = Path.Join("UtilityFiles", "SampleOpenApi.yml"), CleanOutput = true, TerseOutput = false, InlineLocal = false, @@ -255,7 +255,7 @@ public async Task TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchF { var options = new HidiOptions { - OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), + OpenApi = Path.Join("UtilityFiles", "SampleOpenApi.yml"), Output = new($"{nameof(TransformCommandConvertsOpenApiWithDefaultOutputNameAndSwitchFormatAsync)}.yml"), CleanOutput = true, Version = "3.0", @@ -288,10 +288,10 @@ public Task ThrowTransformCommandIfOpenApiAndCsdlAreEmptyAsync() [Fact] public async Task TransformToPowerShellCompliantOpenApiAsync() { - var settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "examplepowershellsettings.json"); + var settingsPath = Path.Join(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "examplepowershellsettings.json"); var options = new HidiOptions { - OpenApi = Path.Combine("UtilityFiles", "SampleOpenApi.yml"), + OpenApi = Path.Join("UtilityFiles", "SampleOpenApi.yml"), Output = new($"{nameof(TransformToPowerShellCompliantOpenApiAsync)}.yaml"), CleanOutput = true, Version = "3.0", @@ -312,7 +312,7 @@ public async Task TransformToPowerShellCompliantOpenApiAsync() public async Task InvokeTransformCommandAsync() { var rootCommand = Program.CreateRootCommand(); - var openapi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); + var openapi = Path.Join(".", "UtilityFiles", "SampleOpenApi.yml"); var outputPath = $"{nameof(InvokeTransformCommandAsync)}.json"; var args = new[] { "transform", "-d", openapi, "-o", outputPath, "--co" }; var parseResult = rootCommand.Parse(args); @@ -329,7 +329,7 @@ public async Task InvokeTransformCommandAsync() public async Task InvokeShowCommandAsync() { var rootCommand = Program.CreateRootCommand(); - var openApi = Path.Combine(".", "UtilityFiles", "SampleOpenApi.yml"); + var openApi = Path.Join(".", "UtilityFiles", "SampleOpenApi.yml"); var outputPath = $"{nameof(InvokeShowCommandAsync)}.md"; var args = new[] { "show", "-d", openApi, "-o", outputPath }; var parseResult = rootCommand.Parse(args); @@ -345,15 +345,15 @@ public async Task InvokeShowCommandAsync() public async Task InvokePluginCommandAsync() { var rootCommand = Program.CreateRootCommand(); - var manifest = Path.Combine(".", "UtilityFiles", "exampleapimanifest.json"); - var outputPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, nameof(InvokePluginCommandAsync)); + var manifest = Path.Join(".", "UtilityFiles", "exampleapimanifest.json"); + var outputPath = Path.Join(AppDomain.CurrentDomain.BaseDirectory, nameof(InvokePluginCommandAsync)); var args = new[] { "plugin", "-m", manifest, "--of", outputPath }; var parseResult = rootCommand.Parse(args); var handler = Assert.IsType(rootCommand.Subcommands.First(c => c.Name == "plugin").Action, exactMatch: false); await handler.InvokeAsync(parseResult, TestContext.Current.CancellationToken); - using var jsDoc = JsonDocument.Parse(await File.ReadAllTextAsync(Path.Combine(outputPath, "ai-plugin.json"), TestContext.Current.CancellationToken)); + using var jsDoc = JsonDocument.Parse(await File.ReadAllTextAsync(Path.Join(outputPath, "ai-plugin.json"), TestContext.Current.CancellationToken)); var openAiManifest = OpenAIPluginManifest.Load(jsDoc.RootElement); Assert.NotNull(openAiManifest); From 403060dd0357adaeeea520f9321cb579f9b17fe1 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 11 Aug 2026 14:19:12 -0400 Subject: [PATCH 713/720] linting: further path combine replacement --- .../Services/OpenApiFilterServiceTests.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs index 2dc91151..6883bab5 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs +++ b/test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiFilterServiceTests.cs @@ -51,7 +51,7 @@ public void ReturnFilteredOpenApiDocumentBasedOnOperationIdsAndTags(string? oper public void ReturnFilteredOpenApiDocumentBasedOnPostmanCollection() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver2.json"); + var filePath = Path.Join(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver2.json"); var fileInput = new FileInfo(filePath); var stream = fileInput.OpenRead(); @@ -158,7 +158,7 @@ public void CreateFilteredDocumentUsingPredicateFromRequestUrl() public void ShouldParseNestedPostmanCollection() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver3.json"); + var filePath = Path.Join(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver3.json"); var fileInput = new FileInfo(filePath); var stream = fileInput.OpenRead(); @@ -175,7 +175,7 @@ public void ShouldParseNestedPostmanCollection() public void ThrowsExceptionWhenUrlsInCollectionAreMissingFromSourceDocument() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver1.json"); + var filePath = Path.Join(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver1.json"); var fileInput = new FileInfo(filePath); var stream = fileInput.OpenRead(); @@ -192,7 +192,7 @@ public void ThrowsExceptionWhenUrlsInCollectionAreMissingFromSourceDocument() public void ContinueProcessingWhenUrlsInCollectionAreMissingFromSourceDocument() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver4.json"); + var filePath = Path.Join(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "postmanCollection_ver4.json"); var fileInput = new FileInfo(filePath); var stream = fileInput.OpenRead(); @@ -291,7 +291,7 @@ public void CreatePredicateMatchesAbsoluteUrlsWhenSourceHasNoServers() public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly() { // Arrange - var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "docWithReusableHeadersAndExamples.yaml"); + var filePath = Path.Join(AppDomain.CurrentDomain.BaseDirectory, "UtilityFiles", "docWithReusableHeadersAndExamples.yaml"); var operationIds = "getItems"; // Act From b3f739588bb32a2d2e08df20bc24640bda9c0241 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 19:56:25 -0400 Subject: [PATCH 714/720] Bump the microsoftextensions group with 6 updates (#3029) Bumps Microsoft.Extensions.DependencyInjection from 10.0.10 to 10.0.11 Bumps Microsoft.Extensions.Logging from 10.0.10 to 10.0.11 Bumps Microsoft.Extensions.Logging.Abstractions from 10.0.10 to 10.0.11 Bumps Microsoft.Extensions.Logging.Console from 10.0.10 to 10.0.11 Bumps Microsoft.Extensions.Logging.Debug from 10.0.10 to 10.0.11 Bumps System.Text.Json from 10.0.10 to 10.0.11 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Abstractions dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: System.Text.Json dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions - dependency-name: Microsoft.Extensions.Logging.Debug dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: microsoftextensions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 371fb339..d578c9e6 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -29,10 +29,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all From a52033fde2c951e0ad14c8fdc1ed75e0ec2144d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Aug 2026 11:33:29 -0400 Subject: [PATCH 715/720] Bump Microsoft.NET.Test.Sdk from 18.8.1 to 18.9.0 (#3054) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.9.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.9.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 9d98d4ab..95b45736 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -14,7 +14,7 @@ - + From 5d76709c15598c2f71a31eed9097527606c9cd9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Aug 2026 10:03:58 -0600 Subject: [PATCH 716/720] Bump xunit.v3 from 3.2.2 to 4.0.0 (#3055) * Bump xunit.v3 from 3.2.2 to 4.0.0 --- updated-dependencies: - dependency-name: xunit.v3 dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: xunit.v3 dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * test(mtp): migrate xunit projects to MTP Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 95b45736..57543e05 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -10,15 +10,14 @@ CA2007 true ..\..\src\Microsoft.OpenApi.snk + true - + - - - + From eccd440f106ba50d1534a90456aa640b84796401 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Wed, 2 Sep 2026 15:55:35 -0400 Subject: [PATCH 717/720] chore: updates dependencies (#3064) --- src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index d578c9e6..5e2fd04e 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -37,7 +37,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all - + From b9cf23ea24fcc34085796f446eb91a109d1a4944 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 4 Sep 2026 13:00:34 -0400 Subject: [PATCH 718/720] ci: migrate MTP reporting (#3068) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: fdbdcaaf-cc50-4b1b-b81f-0a43a08249b0 --- .../Microsoft.OpenApi.Hidi.Tests.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 57543e05..2271cbb8 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -16,6 +16,8 @@ + + From 451125d92201339142b9514f1dff802aaf0b60ce Mon Sep 17 00:00:00 2001 From: "Gavin Barron (from Dev Box)" Date: Mon, 14 Sep 2026 14:08:18 -0700 Subject: [PATCH 719/720] feat(hidi): complete destination integration Wire Hidi into the OData solution, CI, release automation, signed package and executable publishing, and multi-architecture container publishing. Preserve the filtered-history provenance and independent hidi-v release stream. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f99b0703-cadf-4828-b649-8c63b7b27626 --- .azure-pipelines/ci-build.yml | 230 +- .github/workflows/ci-cd.yml | 131 +- .github/workflows/codeql-analysis.yml | 7 +- .github/workflows/sonarcloud.yml | 9 +- .release-please-manifest.json | 3 +- .vscode/launch.json | 13 + .vscode/tasks.json | 27 +- Dockerfile | 25 + HIDI-RELOCATION-IMPLEMENTATION-PLAN.md | 452 ++ HIDI-RELOCATION-OVERVIEW.md | 86 + Microsoft.OpenApi.OData.sln | 72 + README.md | 9 +- docs/hidi-migration/README.md | 26 + docs/hidi-migration/commit-map.txt | 6087 +++++++++++++++++ install-tool.ps1 | 15 + release-please-config.json | 23 + scripts/import-hidi-history.ps1 | 61 + .../Microsoft.OpenApi.Hidi.csproj | 12 +- src/Microsoft.OpenApi.Hidi/readme.md | 4 + src/OoasUtil/README.md | 5 +- .../Microsoft.OpenApi.Hidi.Tests.csproj | 6 +- test/Microsoft.OpenApi.Hidi.Tests/global.json | 9 + tool/Microsoft.OpenApi.Hidi.snk | Bin 0 -> 596 bytes 23 files changed, 7185 insertions(+), 127 deletions(-) create mode 100644 Dockerfile create mode 100644 HIDI-RELOCATION-IMPLEMENTATION-PLAN.md create mode 100644 HIDI-RELOCATION-OVERVIEW.md create mode 100644 docs/hidi-migration/README.md create mode 100644 docs/hidi-migration/commit-map.txt create mode 100644 install-tool.ps1 create mode 100644 scripts/import-hidi-history.ps1 create mode 100644 test/Microsoft.OpenApi.Hidi.Tests/global.json create mode 100644 tool/Microsoft.OpenApi.Hidi.snk diff --git a/.azure-pipelines/ci-build.yml b/.azure-pipelines/ci-build.yml index bbd00501..c2643231 100644 --- a/.azure-pipelines/ci-build.yml +++ b/.azure-pipelines/ci-build.yml @@ -12,6 +12,7 @@ trigger: tags: include: - 'v*' + - 'hidi-v*' pr: branches: include: @@ -54,6 +55,10 @@ extends: displayName: 'Publish Artifact: Nugets' artifactName: Nugets targetPath: '$(Build.ArtifactStagingDirectory)' + - output: pipelineArtifact + displayName: 'Publish Artifact: Hidi Docker Context' + artifactName: HidiDockerContext + targetPath: '$(Build.ArtifactStagingDirectory)\HidiDockerContext' steps: - task: UseDotNet@2 @@ -66,6 +71,11 @@ extends: inputs: version: 8.x + - task: UseDotNet@2 + displayName: 'Use .NET 10' + inputs: + version: 10.x + # Install the nuget tool. - task: NuGetToolInstaller@1 displayName: 'Use NuGet >=6.11.0' @@ -96,12 +106,16 @@ extends: # Run the Unit test - task: DotNetCoreCLI@2 - displayName: 'test' + displayName: 'test OData' inputs: command: test - projects: '$(Build.SourcesDirectory)\Microsoft.OpenApi.OData.sln' + projects: '$(Build.SourcesDirectory)\test\Microsoft.OpenAPI.OData.Reader.Tests\Microsoft.OpenAPI.OData.Reader.Tests.csproj' arguments: '--configuration $(BuildConfiguration) --no-build' + - pwsh: dotnet test --configuration $(BuildConfiguration) --no-build + workingDirectory: '$(Build.SourcesDirectory)\test\Microsoft.OpenApi.Hidi.Tests' + displayName: 'test Hidi' + - task: EsrpCodeSigning@6 displayName: 'ESRP CodeSigning' inputs: @@ -156,14 +170,21 @@ extends: MaxRetryAttempts: '5' PendingAnalysisWaitTimeoutMinutes: '5' - # Pack + # Pack OData - task: DotNetCoreCLI@2 - displayName: 'pack' + displayName: 'pack OData' inputs: command: pack projects: src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj arguments: '-o $(Build.ArtifactStagingDirectory) --configuration $(BuildConfiguration) --no-build --include-symbols --include-source /p:SymbolPackageFormat=snupkg' + - task: DotNetCoreCLI@2 + displayName: 'pack Hidi' + inputs: + command: pack + projects: src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj + arguments: '-o $(Build.ArtifactStagingDirectory) --configuration $(BuildConfiguration) --no-build --include-symbols --include-source /p:SymbolPackageFormat=snupkg' + - task: EsrpCodeSigning@6 displayName: 'ESRP CodeSigning Nuget Packages' inputs: @@ -198,11 +219,93 @@ extends: MaxRetryAttempts: '5' PendingAnalysisWaitTimeoutMinutes: '5' + - task: DotNetCoreCLI@2 + displayName: 'publish Hidi as executable' + inputs: + command: publish + projects: src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj + arguments: '-c $(BuildConfiguration) --runtime win-x64 -p:RestoreConfigFile=$(Build.SourcesDirectory)\nuget.config /p:PublishSingleFile=true /p:PackAsTool=false --self-contained --output $(Build.ArtifactStagingDirectory)\Microsoft.OpenApi.Hidi' + publishWebProjects: false + zipAfterPublish: false + + - task: EsrpCodeSigning@6 + displayName: 'ESRP CodeSigning Hidi executable' + inputs: + ConnectedServiceName: 'Federated DevX ESRP Managed Identity Connection' + FolderPath: '$(Build.ArtifactStagingDirectory)\Microsoft.OpenApi.Hidi' + AppRegistrationClientId: '65035b7f-7357-4f29-bf25-c5ee5c3949f8' + AppRegistrationTenantId: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' + AuthAKVName: 'akv-prod-eastus' + AuthCertName: 'ReferenceLibraryPrivateCert' + AuthSignCertName: 'ReferencePackagePublisherCertificate' + signConfigType: inlineSignParams + inlineOperation: | + [ + { + "keyCode": "CP-230012", + "operationSetCode": "SigntoolSign", + "parameters": [ + { + "parameterName": "OpusName", + "parameterValue": "Microsoft" + }, + { + "parameterName": "OpusInfo", + "parameterValue": "http://www.microsoft.com" + }, + { + "parameterName": "FileDigest", + "parameterValue": "/fd \"SHA256\"" + }, + { + "parameterName": "PageHash", + "parameterValue": "/NPH" + }, + { + "parameterName": "TimeStamp", + "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" + } + ], + "toolName": "sign", + "toolVersion": "1.0" + }, + { + "keyCode": "CP-230012", + "operationSetCode": "SigntoolVerify", + "parameters": [ ], + "toolName": "sign", + "toolVersion": "1.0" + } + ] + SessionTimeout: '20' + MaxConcurrency: '50' + MaxRetryAttempts: '5' + PendingAnalysisWaitTimeoutMinutes: '5' + + - task: CopyFiles@2 + displayName: 'Prepare Hidi Docker context' + inputs: + SourceFolder: '$(Build.SourcesDirectory)' + Contents: | + Dockerfile + Directory.Build.props + Build.props + README.md + src/Build.props + src/Microsoft.OpenApi.Hidi/** + src/Microsoft.OpenApi.OData.Reader/** + tool/Microsoft.OpenApi.Hidi.snk + tool/Microsoft.OpenApi.OData.snk + !**/bin/** + !**/obj/** + TargetFolder: '$(Build.ArtifactStagingDirectory)\HidiDockerContext' + - stage: deploy - condition: and(contains(variables['build.sourceBranch'], 'refs/tags/v'), succeeded()) + condition: and(or(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'), startsWith(variables['Build.SourceBranch'], 'refs/tags/hidi-v'), eq(variables['Build.SourceBranch'], 'refs/heads/main')), succeeded()) dependsOn: build jobs: - deployment: deploy + condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'), succeeded()) templateContext: type: releaseJob isProduction: true @@ -225,7 +328,32 @@ extends: publishFeedCredentials: 'OpenAPI Nuget Connection' packageParentPath: '$(Pipeline.Workspace)' + - deployment: deploy_hidi + condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags/hidi-v'), succeeded()) + templateContext: + type: releaseJob + isProduction: true + inputs: + - input: pipelineArtifact + artifactName: Nugets + targetPath: '$(Pipeline.Workspace)' + environment: nuget-org + strategy: + runOnce: + deploy: + pool: + vmImage: ubuntu-latest + steps: + - task: 1ES.PublishNuget@1 + displayName: 'NuGet push Hidi' + inputs: + packagesToPush: '$(Pipeline.Workspace)/Microsoft.OpenApi.Hidi.*.nupkg' + nuGetFeedType: external + publishFeedCredentials: 'OpenAPI Nuget Connection' + packageParentPath: '$(Pipeline.Workspace)' + - deployment: create_github_release + condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags/v'), succeeded()) templateContext: type: releaseJob isProduction: true @@ -242,7 +370,7 @@ extends: vmImage: ubuntu-latest steps: - pwsh: | - $artifactName = Get-ChildItem -Path $(Pipeline.Workspace) -Filter Microsoft.OpenApi.*.nupkg -recurse | select -First 1 + $artifactName = Get-ChildItem -Path $(Pipeline.Workspace) -Filter Microsoft.OpenApi.OData.*.nupkg -recurse | select -First 1 $artifactVersion= $artifactName.Name -replace "Microsoft.OpenApi.OData.", "" -replace ".nupkg", "" #Set Variable $artifactName and $artifactVersion Write-Host "##vso[task.setvariable variable=artifactVersion; isSecret=false;]$artifactVersion" @@ -258,5 +386,93 @@ extends: tag: 'v$(artifactVersion)' title: 'v$(artifactVersion)' releaseNotesSource: inline - assets: '$(Pipeline.Workspace)\**\*.nupkg' + assets: '$(Pipeline.Workspace)/**/Microsoft.OpenApi.OData.*.nupkg' addChangeLog: false + + - deployment: create_hidi_github_release + condition: and(startsWith(variables['Build.SourceBranch'], 'refs/tags/hidi-v'), succeeded()) + templateContext: + type: releaseJob + isProduction: true + inputs: + - input: pipelineArtifact + artifactName: Nugets + targetPath: '$(Pipeline.Workspace)' + dependsOn: [] + environment: kiota-github-releases + strategy: + runOnce: + deploy: + pool: + vmImage: ubuntu-latest + steps: + - pwsh: | + $version = "$(Build.SourceBranch)" -replace "^refs/tags/hidi-v", "" + Write-Host "##vso[task.setvariable variable=hidiVersion;isSecret=false]$version" + displayName: 'Read Hidi version from tag' + - task: GitHubRelease@1 + displayName: 'GitHub release Hidi' + inputs: + gitHubConnection: 'Github-MaggieKimani1' + action: edit + tagSource: userSpecifiedTag + tag: 'hidi-v$(hidiVersion)' + title: 'Hidi v$(hidiVersion)' + releaseNotesSource: inline + assets: | + $(Pipeline.Workspace)/**/Microsoft.OpenApi.Hidi.*.nupkg + $(Pipeline.Workspace)/**/Microsoft.OpenApi.Hidi/** + addChangeLog: false + + - deployment: deploy_hidi_docker + condition: and(or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), startsWith(variables['Build.SourceBranch'], 'refs/tags/hidi-v')), succeeded()) + templateContext: + type: releaseJob + isProduction: true + inputs: + - input: pipelineArtifact + artifactName: HidiDockerContext + targetPath: '$(Pipeline.Workspace)/HidiDockerContext' + environment: docker-images-deploy + strategy: + runOnce: + deploy: + pool: + vmImage: ubuntu-latest + steps: + - task: AzureCLI@2 + displayName: 'Login to Azure Container Registry' + inputs: + azureSubscription: 'ACR Images Push Service Connection' + scriptType: bash + scriptLocation: inlineScript + inlineScript: az acr login --name msgraphprodregistry.azurecr.io + - bash: | + docker run --privileged --rm msgraphprodregistry.azurecr.io/tonistiigi/binfmt --install all + docker buildx create --use --name hidi-builder + docker buildx inspect --bootstrap + displayName: 'Configure multi-platform build' + - bash: | + version=$(sed -n 's:.*\(.*\).*:\1:p' src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj | head -1) + runnumber=$(echo "$(Build.BuildNumber)" | grep -o '[0-9]\+$') + docker buildx build \ + --platform linux/amd64,linux/arm64/v8 \ + --push \ + -t "msgraphprodregistry.azurecr.io/public/openapi/hidi:nightly" \ + -t "msgraphprodregistry.azurecr.io/public/openapi/hidi:${version}.$(date +'%Y%m%d')${runnumber}" \ + . + workingDirectory: '$(Pipeline.Workspace)/HidiDockerContext' + displayName: 'Build and push Hidi nightly image' + condition: eq(variables['Build.SourceBranch'], 'refs/heads/main') + - bash: | + version="$(Build.SourceBranch)" + version="${version#refs/tags/hidi-v}" + docker buildx build \ + --platform linux/amd64,linux/arm64/v8 \ + --push \ + -t "msgraphprodregistry.azurecr.io/public/openapi/hidi:latest" \ + -t "msgraphprodregistry.azurecr.io/public/openapi/hidi:${version}" \ + . + workingDirectory: '$(Pipeline.Workspace)/HidiDockerContext' + displayName: 'Build and push Hidi release image' + condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/hidi-v') diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 63e92e59..cdf1482c 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -3,15 +3,12 @@ name: CI/CD Pipeline on: [push, pull_request, workflow_dispatch] permissions: - contents: write + contents: read jobs: ci: name: Continuous Integration runs-on: ubuntu-latest - outputs: - latest_version: ${{ steps.tag_generator.outputs.new_version }} - is_default_branch: ${{ steps.conditionals_handler.outputs.is_default_branch }} env: ARTIFACTS_FOLDER: ${{ github.workspace }}/Artifacts GITHUB_RUN_NUMBER: ${{ github.run_number }} @@ -21,26 +18,10 @@ jobs: with: dotnet-version: 8.0.x - - name: Data gatherer - id: data_gatherer - shell: pwsh - run: | - # Get default branch - $repo = 'microsoft/OpenAPI.NET.OData' - $defaultBranch = Invoke-RestMethod -Method GET -Uri https://api.github.com/repos/$repo | Select-Object -ExpandProperty default_branch - Write-Output "default_branch=$(echo $defaultBranch) >> $GITHUB_OUTPUT" - - - name: Conditionals handler - id: conditionals_handler - shell: pwsh - run: | - $defaultBranch = "${{ steps.data_gatherer.outputs.default_branch }}" - $githubRef = "${{ github.ref }}" - $isDefaultBranch = 'false' - if ( $githubRef -like "*$defaultBranch*" ) { - $isDefaultBranch = 'true' - } - Write-Output "is_default_branch=$(echo $isDefaultBranch) >> $GITHUB_OUTPUT" + - name: Setup .NET 10 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x - name: Checkout repository id: checkout_repo @@ -49,94 +30,36 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 - - if: steps.conditionals_handler.outputs.is_default_branch == 'true' - name: Bump GH tag - id: tag_generator - uses: mathieudutour/github-tag-action@a22cf08638b34d5badda920f9daf6e72c477b07b # v6.2 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - default_bump: false - release_branches: ${{ steps.data_gatherer.outputs.default_branch }} - - name: Build projects id: build_projects shell: pwsh run: | - $projectsArray = @( - '.\src\Microsoft.OpenApi.OData.Reader\Microsoft.OpenAPI.OData.Reader.csproj' - ) - $gitNewVersion = if ("${{ steps.tag_generator.outputs.new_version }}") {"${{ steps.tag_generator.outputs.new_version }}"} else {$null} - $projectCurrentVersion = ([xml](Get-Content .\src\Microsoft.OpenApi.OData.Reader\Microsoft.OpenAPI.OData.Reader.csproj)).Project.PropertyGroup.Version - $projectNewVersion = $gitNewVersion ?? $projectCurrentVersion - - $projectsArray | ForEach-Object { - dotnet build $PSItem ` - -c Release # ` - # -o $env:ARTIFACTS_FOLDER ` - # /p:Version=$projectNewVersion - } - - # Move NuGet packages to separate folder for pipeline convenience - # New-Item Artifacts/NuGet -ItemType Directory - # Get-ChildItem Artifacts/*.nupkg | Move-Item -Destination "Artifacts/NuGet" + dotnet build .\Microsoft.OpenApi.OData.sln -c Release - - name: Run unit tests - id: run_unit_tests + - name: Run OData unit tests + id: run_odata_unit_tests shell: pwsh run: | - $testProjectsArray = @( - '.\test\Microsoft.OpenAPI.OData.Reader.Tests\Microsoft.OpenAPI.OData.Reader.Tests.csproj' - ) + dotnet test .\test\Microsoft.OpenAPI.OData.Reader.Tests\Microsoft.OpenAPI.OData.Reader.Tests.csproj -c Release --no-build - $testProjectsArray | ForEach-Object { - dotnet test $PSItem ` - -c Release - } - - # - if: steps.tag_generator.outputs.new_version != '' - # name: Upload NuGet packages as artifacts - # id: ul_packages_artifact - # uses: actions/upload-artifact@v1 - # with: - # name: NuGet packages - # path: Artifacts/NuGet/ - - cd: - if: needs.ci.outputs.is_default_branch == 'true' && needs.ci.outputs.latest_version != '' - name: Continuous Deployment - needs: ci - runs-on: ubuntu-latest - steps: - # - name: Download and extract NuGet packages - # id: dl_packages_artifact - # uses: actions/download-artifact@v2 - # with: - # name: NuGet packages - # path: NuGet/ - - # - name: Push NuGet packages to NuGet.org - # id: push_nuget_packages - # continue-on-error: true - # shell: pwsh - # run: | - # Get-ChildItem NuGet/*.nupkg | ForEach-Object { - # nuget push $PSItem ` - # -ApiKey $env:NUGET_API_KEY ` - # -Source https://api.nuget.org/v3/index.json - # } - # env: - # NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + - name: Run Hidi unit tests + id: run_hidi_unit_tests + working-directory: test/Microsoft.OpenApi.Hidi.Tests + shell: pwsh + run: | + dotnet test -c Release --no-build - - name: Create and publish release - id: create_release - uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3 - with: - name: OpenAPI.Net.OData v${{ needs.ci.outputs.latest_version }} - tag_name: v${{ needs.ci.outputs.latest_version }} - # files: | - # NuGet/Microsoft.OpenApi.${{ needs.ci.outputs.latest_version }}.nupkg - # NuGet/Microsoft.OpenApi.Readers.${{ needs.ci.outputs.latest_version }}.nupkg - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Smoke test Hidi package + shell: pwsh + run: | + $hidiVersion = ([xml](Get-Content .\src\Microsoft.OpenApi.Hidi\Microsoft.OpenApi.Hidi.csproj)).Project.PropertyGroup.Version + $inputDocument = '.\test\Microsoft.OpenApi.Hidi.Tests\UtilityFiles\SampleOpenApi.yml' + dotnet pack .\src\Microsoft.OpenApi.Hidi\Microsoft.OpenApi.Hidi.csproj -c Release --no-build -o .\Artifacts + dotnet tool install --tool-path .\.hidi-smoke --source .\Artifacts --version $hidiVersion Microsoft.OpenApi.Hidi + .\.hidi-smoke\hidi --help + .\.hidi-smoke\hidi validate --openapi $inputDocument + .\.hidi-smoke\hidi transform --openapi $inputDocument --output .\Artifacts\transformed.json --format json --version 3.0 --clean-output + .\.hidi-smoke\hidi show --openapi $inputDocument --output .\Artifacts\paths.txt --clean-output + .\.hidi-smoke\hidi plugin --help # Built with ❤ by [Pipeline Foundation](https://pipeline.foundation) \ No newline at end of file diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 98da2c8a..3733a2c5 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -46,6 +46,11 @@ jobs: with: dotnet-version: 8.0.x + - name: Setup .NET 10 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x + # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9 @@ -62,7 +67,7 @@ jobs: # uses: github/codeql-action/autobuild@v2 - name: build - run: dotnet build src\Microsoft.OpenApi.OData.Reader\Microsoft.OpenAPI.OData.Reader.csproj -c Release + run: dotnet build Microsoft.OpenApi.OData.sln -c Release # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 492b86cb..509759a1 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -44,6 +44,10 @@ jobs: uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 with: dotnet-version: 8.0.x + - name: Setup .NET 10 + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 + with: + dotnet-version: 10.0.x - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis @@ -65,5 +69,8 @@ jobs: dotnet tool run dotnet-sonarscanner begin /k:"microsoft_OpenAPI.NET.OData" /o:"microsoft" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="test/**/coverage.net8.0.opencover.xml" dotnet workload restore dotnet build - dotnet test Microsoft.OpenApi.OData.sln --no-build --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover + dotnet test test/Microsoft.OpenAPI.OData.Reader.Tests/Microsoft.OpenAPI.OData.Reader.Tests.csproj --no-build --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=opencover + Push-Location test/Microsoft.OpenApi.Hidi.Tests + dotnet test --no-build + Pop-Location dotnet tool run dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}" diff --git a/.release-please-manifest.json b/.release-please-manifest.json index a9e40ee0..2899cedb 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,4 @@ { - ".": "3.2.1" + ".": "3.2.1", + "src/Microsoft.OpenApi.Hidi": "3.10.2" } \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 271598ce..ea09b32e 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,6 +1,19 @@ { "version": "0.2.0", "configurations": [ + { + "name": "Launch Hidi", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/src/Microsoft.OpenApi.Hidi/bin/Debug/net8.0/Microsoft.OpenApi.Hidi.dll", + "args": [ + "--help" + ], + "cwd": "${workspaceFolder}/src/Microsoft.OpenApi.Hidi", + "console": "internalConsole", + "stopAtEntry": false + }, { "name": "Launch Update Docs", "type": "coreclr", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 097a0567..87c95552 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -15,19 +15,40 @@ "problemMatcher": "$msCompile" }, { - "label": "test", + "label": "test:odata", "command": "dotnet", "type": "process", - "group": "test", "args": [ "test", - "${workspaceFolder}/Microsoft.OpenApi.OData.sln", + "${workspaceFolder}/test/Microsoft.OpenAPI.OData.Reader.Tests/Microsoft.OpenAPI.OData.Reader.Tests.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary", "--collect:\"XPlat Code Coverage\"" ], "problemMatcher": "$msCompile" }, + { + "label": "test:hidi", + "command": "dotnet", + "type": "process", + "options": { + "cwd": "${workspaceFolder}/test/Microsoft.OpenApi.Hidi.Tests" + }, + "args": [ + "test", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "test", + "group": "test", + "dependsOn": [ + "test:odata", + "test:hidi" + ] + }, { "label": "coverage:clean", "type": "shell", diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..6a775308 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build-env +WORKDIR /app/hidi + +COPY Directory.Build.props Build.props README.md ./ +COPY src/Build.props src/Build.props +COPY tool/Microsoft.OpenApi.OData.snk tool/Microsoft.OpenApi.OData.snk +COPY tool/Microsoft.OpenApi.Hidi.snk tool/Microsoft.OpenApi.Hidi.snk +COPY src/Microsoft.OpenApi.OData.Reader src/Microsoft.OpenApi.OData.Reader +COPY src/Microsoft.OpenApi.Hidi src/Microsoft.OpenApi.Hidi +RUN dotnet publish ./src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj -c Release + +FROM mcr.microsoft.com/dotnet/runtime:8.0-jammy-chiseled AS runtime +WORKDIR /app + +COPY --from=build-env /app/hidi/src/Microsoft.OpenApi.Hidi/bin/Release/net8.0 ./ + +VOLUME /app/output +VOLUME /app/openapi.yml +VOLUME /app/api.csdl +VOLUME /app/collection.json +ENV HIDI_CONTAINER=true DOTNET_TieredPGO=1 DOTNET_TC_QuickJitForLoops=1 +ENTRYPOINT ["dotnet", "Microsoft.OpenApi.Hidi.dll"] +LABEL description="# Welcome to Hidi \ +To start transforming OpenAPI documents, see https://github.com/microsoft/OpenAPI.NET.OData/tree/main/src/Microsoft.OpenApi.Hidi. \ +Source: https://github.com/microsoft/OpenAPI.NET.OData/blob/main/Dockerfile" diff --git a/HIDI-RELOCATION-IMPLEMENTATION-PLAN.md b/HIDI-RELOCATION-IMPLEMENTATION-PLAN.md new file mode 100644 index 00000000..801649ec --- /dev/null +++ b/HIDI-RELOCATION-IMPLEMENTATION-PLAN.md @@ -0,0 +1,452 @@ +# Hidi Relocation Implementation Plan + +## 1. Purpose and scope + +Move the Hidi command-line tool from `microsoft/OpenAPI.NET` to +`microsoft/OpenAPI.NET.OData`, including source, tests, package ownership, +documentation, continuous integration, ADO publishing, GitHub releases, and Docker/MCR +publishing. + +### In scope + +- `Microsoft.OpenApi.Hidi` source project and embedded `CsdlFilter.xslt` +- `Microsoft.OpenApi.Hidi.Tests` and test resources +- NuGet global/local tool package `Microsoft.OpenApi.Hidi` +- Windows self-contained executable release asset +- `mcr.microsoft.com/openapi/hidi` nightly and release images +- GitHub Actions, ADO YAML, release-please, solution, CodeQL, developer build/debug + helpers, and repository documentation in both repos +- Filtered Hidi source/test history, path normalization, commit mapping, and history + integrity validation +- ADO pipeline-definition settings, service-connection permissions, environments, + triggers, and required-check updates that are managed outside YAML + +### Out of scope + +- Renaming the NuGet package, CLI command, namespaces, or MCR image +- Functional redesign of Hidi commands +- Preserving original OpenAPI.NET commit IDs or cryptographic commit signatures after + history filtering +- Importing unrelated OpenAPI.NET source, branches, tags, or complete repository + history +- Moving OpenAPI.NET core or YAML reader source into the OData repo +- Combining OData and Hidi release versions + +## 2. Current-state findings + +### OpenAPI.NET source repo + +- The migration baseline is source commit + `afd4967a9e6db390175e2df9e6f34ff77168d19d` (September 11, 2026). It includes + Workbench removal commit `07fac9e07e53746ff14a6110338530f99531cc9e`. +- `Microsoft.OpenApi.Workbench`, its solution entry, README section, image, VS Code + integration, and pipeline package-exclusion entry have been removed. Workbench is + not a Hidi dependency and must not be reintroduced by filtering or cleanup. +- Hidi consists of 20 source/configuration files under `src/Microsoft.OpenApi.Hidi` and + 19 test/resource files under `test/Microsoft.OpenApi.Hidi.Tests` when generated + `bin`/`obj` content is excluded. +- Across current and legacy paths, Hidi has 850 path-related commits in OpenAPI.NET; + 332 of those also modify non-Hidi paths and must be reduced to their Hidi portions + by history filtering. +- Source history includes the path transitions + `src/Microsoft.OpenApi.Tool` -> `src/Microsoft.Hidi` -> + `src/Microsoft.OpenApi.Hidi`, plus the test-project move from + `Microsoft.OpenApi.Hidi.Tests` at the repository root to + `test/Microsoft.OpenApi.Hidi.Tests`. +- `Microsoft.OpenApi.Hidi.csproj` is a `net8.0` packed .NET tool with command name + `hidi`, assembly signing, package generation, and package README support. +- The project references local `Microsoft.OpenApi` and + `Microsoft.OpenApi.YamlReader` projects, but references `Microsoft.OpenApi.OData` + `3.2.1` as a package. It also consumes `Microsoft.OpenApi.ApiManifest`, + `Microsoft.OData.Edm`, `System.CommandLine`, and logging packages. +- Hidi tests target `net10.0`, use xUnit v3/Microsoft Testing Platform, are signed, and + depend on Hidi internals through a strong-name `InternalsVisibleTo`. +- `Microsoft.OpenApi.Tests.csproj` has a Hidi project reference despite no source-level + Hidi usage found; this should be verified and removed during source cleanup. +- `Microsoft.OpenApi.slnx`, `build.cmd`, `build.sh`, VS Code launch/tasks/settings, + `install-tool.ps1`, root README, CONTRIBUTING, CodeQL, and the root Dockerfile all + contain Hidi-specific integration. +- `.azure-pipelines/ci-build.yml` builds/tests Hidi, packs and signs its NuGet, emits a + Windows executable, publishes the tool to NuGet, attaches the executable to a GitHub + release, and builds/pushes multi-architecture nightly/release images. +- Hidi currently inherits the source repo's repository-wide version (`3.10.2` at + analysis time). + +### OpenAPI.NET.OData destination repo + +- The solution currently contains the OData reader and tests plus `OoasUtil` and + `OoasGui`; its GitHub CI builds/tests only the reader path or solution depending on + workflow. +- The OData project targets `net8.0`, references `Microsoft.OpenApi` `3.10.2`, and uses + `tool/Microsoft.OpenApi.OData.snk` for signing. +- The destination repository version is `3.2.1` at analysis time and release-please + treats the repository as one `Microsoft.OpenApi.OData` package with `v*` tags. +- Its ADO pipeline already builds/tests, ESRP-signs, packs, publishes to NuGet, and + edits a GitHub release for OData. It does not currently publish Hidi or an MCR image. +- The pipeline already uses the `OpenAPI Nuget Connection`, federated ESRP connection, + `nuget-org`, and `kiota-github-releases`. Hidi Docker publishing additionally needs + the ACR push connection and `docker-images-deploy` environment used by the source + pipeline. +- `src/OoasUtil/README.md` already directs users to Hidi in the source repo and must be + relinked after the move. + +## 3. Target architecture + +### Project dependency direction + +In `OpenAPI.NET.OData/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj`: + +- Replace the `Microsoft.OpenApi.OData` package reference with a project reference to + `../Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj`. +- Replace source-repo project references to `Microsoft.OpenApi` and + `Microsoft.OpenApi.YamlReader` with explicit package references. Pin compatible + released versions and update them through normal dependency automation. +- Retain the existing external package dependencies unless restore/build proves a + version adjustment is required. +- Preserve `PackageId`, `ToolCommandName`, target framework, package README, + `PackAsTool`, package description, embedded XSLT, and public namespace behavior. +- Give Hidi an explicit version property/file managed independently from + `Directory.Build.props`. +- Preserve Hidi's existing OpenAPI.NET strong-name identity in a Hidi-specific key. + Released `Microsoft.OpenApi` packages grant friend access to that identity, so using + the OData key would break Hidi's required internal API access. Keep the matching + `InternalsVisibleTo` public key for signed tests. + +This direction lets Hidi validate against the exact OData source under change while +testing against released core/YAML packages, eliminating the current need to wait for +an OData package publication before Hidi can consume a fix. + +### Release boundaries + +- Keep the root OData component on `v` tags. +- Add a Hidi release-please component rooted at `src/Microsoft.OpenApi.Hidi`, with its + own manifest version and `hidi-v` tags. +- Ensure release-please updates Hidi's explicit version location and Hidi changelog, + while the existing root component continues to update OData's + `Directory.Build.props` and root changelog. +- Route ADO deployment by exact tag family: + - `refs/tags/v*`: publish OData package/release only. + - `refs/tags/hidi-v*`: publish Hidi package, executable/release asset, and release + MCR image only. + - `refs/heads/main`: build/test everything and publish only Hidi nightly images. +- Use distinct artifact selection rather than broad + `Microsoft.OpenApi.*.nupkg` globs where a job owns one package. + +## 4. Implementation phases + +### Phase A - Establish provenance, filtered-history design, and release design + +1. Record the source repository URL, branch, and exact commit SHA in the destination + relocation PR and Hidi README. Use that immutable SHA for review comparisons. +2. Pin the initial filtering run to + `afd4967a9e6db390175e2df9e6f34ff77168d19d`. If source HEAD advances before + execution, deliberately select a new baseline and repeat commit counts, tree + comparison, and mixed-commit analysis. +3. Create a disposable mirror/clone of OpenAPI.NET. Install and pin an approved + `git filter-repo` version; never perform history rewriting in either working + repository. +4. Filter the source history to retain these historical paths: + - `src/Microsoft.OpenApi.Tool` + - `src/Microsoft.Hidi` + - `src/Microsoft.OpenApi.Hidi` + - `Microsoft.OpenApi.Hidi.Tests` + - `test/Microsoft.OpenApi.Hidi.Tests` +5. Normalize all retained source paths to `src/Microsoft.OpenApi.Hidi` and all retained + test paths to `test/Microsoft.OpenApi.Hidi.Tests`. Account for commits where old and + new names coexist so the rewrite does not create path collisions. +6. Exclude OpenAPI.NET branches and tags from the deliverable import. Import one audited + filtered branch/ref so source release tags cannot collide with OData's existing + `v*` refs. +7. Preserve author, committer, timestamps, and messages. Document that filtering + rewrites commit IDs, invalidates cryptographic signatures, and retains only the Hidi + portions of the 332 cross-cutting commits. +8. Export and retain the `git filter-repo` source-to-rewritten commit map as a migration + artifact. Use it with the recorded source SHA to trace destination history back to + original OpenAPI.NET commits and PRs. +9. Record the latest published `Microsoft.OpenApi.Hidi` NuGet version and current MCR + image digests/tags before selecting the first destination-managed Hidi version. +10. Add the Hidi component to `release-please-config.json` and + `.release-please-manifest.json` without changing OData's root component/tag. +11. Configure an explicit Hidi version source that starts above the latest published + package version; do not inherit OData's `3.2.x` repository version. +12. Document conventional commit scopes so Hidi-only changes feed the Hidi release + component and OData changes remain independently releasable. + +**Exit criteria:** The filtered branch and commit map are reproducible from the recorded +source SHA; release automation can distinguish an OData release from a Hidi release; +and the proposed next Hidi version cannot collide with or regress an existing NuGet +version. + +### Phase B - Audit and import history, then adapt the destination + +1. Audit the filtered repository before importing it: + - Compare the filtered tip's Hidi source/test trees with the recorded source SHA. + - Confirm no unrelated OpenAPI.NET paths, generated `bin`/`obj` files, secrets, or + unexpected large objects remain. + - Confirm no deleted Workbench source, documentation, image, solution, VS Code, or + pipeline content appears in the filtered tree. + - Confirm `git log --follow` traverses the known source and test renames. + - Sample cross-cutting dependency, test, and feature commits using the commit map. +2. Fetch the filtered branch into OpenAPI.NET.OData under a temporary namespace and + inspect the incoming graph and tree before merging. +3. Merge the filtered tip with `--allow-unrelated-histories`. Do not squash, replay the + history as one patch, cherry-pick hundreds of commits, or rebase it onto OData, + because those alternatives prevent first-class blame/history preservation. +4. Resolve only destination layout conflicts at the merge boundary. Historical commits + are evidence and are not expected to build against OData's repository layout. +5. Add a new integration commit after the merge that applies the target + project-reference/package-reference inversion described above. +6. Add the Hidi-specific copy of the existing signing key and retain the matching + `InternalsVisibleTo` public key data. +7. Add both projects to `Microsoft.OpenApi.OData.sln`. +8. Preserve the Hidi test project's xUnit v3/Microsoft Testing Platform setup unless a + destination runner incompatibility is demonstrated; install both .NET 8 and .NET 10 + in CI because production and test targets differ. +9. Copy/adapt `install-tool.ps1`, relevant VS Code launch/task/settings entries, and + developer build helpers. Prefer solution-level build commands over duplicating + per-project build lists. +10. Move/adapt the Hidi Dockerfile into the destination. Update build context, project + paths, copied props/files, runtime output path, and source/documentation labels. +11. Update the destination root README and `src/OoasUtil/README.md` to make OData the + canonical source and documentation location for Hidi. +12. Add a relocation note containing the source SHA, filtered tip, commit-map location, + and links to the previous location. + +**Exit criteria:** The destination contains only the audited filtered history plus +explicit integration commits, and a clean checkout can restore, build, test, pack, +install, and run Hidi without checking out OpenAPI.NET or consuming an unpublished +OData package. + +### Phase C - Extend destination GitHub CI + +1. Update `.github/workflows/ci-cd.yml` to install .NET 8 and .NET 10, build the full + solution, and run all solution tests, including Hidi tests. +2. Produce a Hidi `.nupkg` as a non-publishing CI artifact and add a tool-install smoke + test from that artifact. Exercise at least `--help`, `validate`, `transform`, `show`, + and `plugin` using copied fixtures where applicable. +3. Update `.github/workflows/codeql-analysis.yml` to build the solution or explicitly + include Hidi and OData, instead of building only the reader project. +4. Confirm SonarCloud and any path-based/required workflows include the new source and + test directories; update explicit project lists only where present. +5. Update release-please workflow permissions/configuration so it can create separate + OData and Hidi release PRs/tags without one component advancing the other. +6. Update branch-protection required checks if job names change or new Hidi smoke checks + become required. + +**Exit criteria:** Destination pull requests block on Hidi compilation, unit tests, +package installation, and security analysis. + +### Phase D - Extend destination ADO build and publishing + +#### YAML changes + +1. Add .NET 10 setup and build/test the full destination solution. +2. Pack Hidi separately into the pipeline artifact, include symbols/source consistently, + and ESRP-sign its binaries and NuGet package with the established signing tasks. +3. Publish a self-contained `win-x64` single-file Hidi executable to a dedicated + artifact directory. +4. Add distinct deployment jobs and conditions: + - OData NuGet job on `refs/tags/v*`. + - Hidi NuGet job on `refs/tags/hidi-v*`. + - OData GitHub release job on `refs/tags/v*`. + - Hidi GitHub release job on `refs/tags/hidi-v*`, attaching the executable and + intended package assets. +5. Add a repository-files/Docker-context artifact containing only files required to + build Hidi's image. +6. Move the multi-architecture Docker build/push steps and variables + (`REGISTRY=msgraphprodregistry.azurecr.io`, + `IMAGE_NAME=public/openapi/hidi`) from the source pipeline. +7. Derive Docker tags from Hidi's explicit version, not OData's + `Directory.Build.props`: + - Main: `nightly` and a unique prerelease/nightly tag. + - Hidi release tag: `latest` and ``. +8. Keep package/release jobs independent where safe, but make the Hidi release-image and + GitHub-release jobs depend on successful Hidi build/sign/package output. +9. Tighten file globs so OData jobs cannot publish Hidi and Hidi jobs cannot publish + OData. + +#### ADO definition and resource changes + +1. Update the existing OData pipeline definition's repository YAML path if necessary + and add CI/tag triggers for `main`, supported branches, `v*`, and `hidi-v*`. +2. Authorize the pipeline to use: + - `Federated DevX ESRP Managed Identity Connection` + - `OpenAPI Nuget Connection` + - `Github-MaggieKimani1` or its approved replacement + - `ACR Images Push Service Connection` +3. Grant the pipeline access to `nuget-org`, `kiota-github-releases`, and + `docker-images-deploy` environments. Preserve production approvals/checks. +4. Confirm the ACR connection can push the existing + `public/openapi/hidi` repository; no image rename should occur. +5. Configure retention for signed packages, executable, Docker context, test results, + and logs sufficient to diagnose the first destination releases. +6. Run the YAML through 1ES template validation and pipeline security/compliance review. + +**Exit criteria:** An ordinary destination commit runs build/test/package validation +without publishing; only matching tag families can enter their corresponding production +deployment jobs; main can update only Hidi nightly images. + +### Phase E - Destination-first validation and release + +1. Compare the filtered tip against the recorded source SHA and account for every + retained, omitted, and path-normalized file. +2. Verify history integrity: + - `git log --follow` reaches the January 2020 command-line tool history. + - `git blame` on representative source and test files resolves to original authors + and dates. + - No OpenAPI.NET tags, unrelated branches, or unrelated source paths were imported. + - No Workbench files or integration were resurrected by the filtered import. + - The commit map resolves sampled original commits, including cross-cutting changes. +3. Treat the imported graph as historical evidence, not as a sequence expected to + build against OData. Require only the filtered tip plus integration commits to build. +4. Validate clean restore/build/test in Release configuration on the same SDKs used by + GitHub and ADO. +5. Pack Hidi and inspect the `.nupkg` for: + - Package ID and version + - `DotnetToolSettings.xml` command `hidi` + - README, license, repository URL/commit, symbols, and dependency versions + - No destination-only project paths or unintended files +6. Install the package into an isolated tool path and run CLI smoke tests against known + OpenAPI, CSDL, API manifest, and output fixtures. +7. Build and run the Docker image locally for the host architecture; confirm the same + CLI smoke cases and output-volume behavior. +8. Run destination GitHub CI and an ADO non-tag validation build. Confirm no NuGet, + GitHub release, or release-image deployment is reachable. +9. Exercise a controlled Hidi release tag using the next non-colliding version. Verify: + - Signed NuGet package is available and installable from NuGet.org. + - GitHub release uses `hidi-v*` and contains expected assets. + - `linux/amd64` and `linux/arm64/v8` manifests exist under the existing MCR image. + - `latest` points to the released version and `nightly` remains independently + updateable. +10. Monitor downstream installation/smoke tests before beginning source removal. + +**Exit criteria:** One real Hidi version has been produced entirely by the destination +repo and all existing distribution identities remain functional. + +### Phase F - Remove Hidi ownership from OpenAPI.NET + +Perform this phase only after Phase E succeeds. + +1. Remove `src/Microsoft.OpenApi.Hidi` and `test/Microsoft.OpenApi.Hidi.Tests`. +2. Remove Hidi entries from `Microsoft.OpenApi.slnx`. +3. Remove the stale Hidi project reference from + `test/Microsoft.OpenApi.Tests/Microsoft.OpenApi.Tests.csproj` after confirming no + compile-time dependency. +4. Update `.azure-pipelines/ci-build.yml` to remove: + - Hidi pack and executable publish steps + - Hidi NuGet deployment + - Hidi package exclusion workaround in the core deployment + - Docker variables, repository-files artifact, ACR login, and all image deployment + steps + - Main-branch deploy-stage behavior that existed only for nightly Hidi images + The current core-package exclusion workaround removes Hidi and YAML Reader packages; + it no longer includes Workbench. +5. Remove or repurpose the root Hidi Dockerfile and remove Hidi-specific entries from + CodeQL, `build.cmd`, `build.sh`, VS Code files, and `install-tool.ps1`. +6. Update README and CONTRIBUTING entries to link to Hidi's OData repository source, + documentation, issues, and contribution flow. Retain a concise relocation notice + where it helps existing deep-link users. +7. Confirm the OpenAPI.NET release pipeline now packages/publishes only core and YAML + reader assets and no broad glob can pick up Hidi. +8. Update source-repo branch protection/required checks if removed jobs changed check + names. + +**Exit criteria:** OpenAPI.NET has no Hidi build or publishing responsibility, while +user-facing links direct consumers to the new canonical location. + +## 5. Validation matrix + +| Surface | Required validation | +| --- | --- | +| Build | Destination solution builds in Release on CI SDKs; source solution builds after removal. | +| Unit tests | All Hidi and OData tests pass together; all remaining OpenAPI.NET tests pass without a Hidi reference. | +| NuGet tool | Package metadata and signing are valid; isolated install exposes `hidi`; upgrade from the prior version succeeds. | +| CLI compatibility | Help and representative validate/transform/show/plugin commands preserve exit codes and outputs. | +| CSDL integration | Hidi tests run against the destination OData project and cover conversion/filtering behavior. | +| Security | Destination CodeQL and existing security workflows analyze Hidi; ESRP verification succeeds. | +| ADO routing | `v*`, `hidi-v*`, main, PR, and ordinary branch runs reach only their intended jobs. | +| GitHub release | Hidi creates its own tag/release and assets without advancing the OData component. | +| Docker | Local smoke test succeeds; release and nightly tags contain amd64/arm64 manifests and use Hidi's version. | +| Documentation | NuGet README, repository links, Docker labels, badges, OoasUtil link, and relocation links resolve correctly. | +| Git history | Known renames traverse correctly; blame retains authors/dates; no source refs or unrelated files are imported; sampled original commits resolve through the commit map. | + +## 6. Cutover controls and rollback + +### Before the first destination publication + +- Keep source ADO Hidi publishing intact. +- Prevent destination publishing jobs from receiving production approval until package, + signing, routing, and smoke validation pass. +- If validation fails, disable destination Hidi tag deployment and continue releasing + from the source repo. + +### After NuGet publication + +- NuGet packages are immutable; never attempt to overwrite or reuse the released + version. Fix forward with a new Hidi version. +- If the destination pipeline is unavailable, temporarily retain or restore the source + publishing path and release a new non-colliding version only after confirming exactly + one pipeline can publish it. + +### Docker rollback + +- Record the previous `latest` and `nightly` image digests before cutover. +- If the new image fails smoke or production checks, repoint the mutable tag to the + previous approved digest while preserving the failed immutable version tag for + diagnosis. + +### Source cleanup rollback + +- Land source removal in a standalone PR after destination release success so it can be + reverted without reverting unrelated OpenAPI.NET changes. +- Do not delete ADO service connections or environments as part of source cleanup; + remove only the old pipeline's authorization when the destination has proven stable. + +### History import rollback + +- Record the destination commit before the history merge and keep the filtered import + under a temporary ref until validation and cutover complete. +- If the import is invalid before the relocation branch is shared, recreate the branch + from the recorded pre-import commit and rerun filtering. +- If the relocation branch is already under review, replace it through the agreed + migration-branch workflow rather than rewriting `main` or another shared branch. +- Do not attempt to repair a faulty import with mass follow-up deletions; correct and + rerun the deterministic filter specification so the resulting graph remains auditable. + +## 7. Pull request and ownership sequence + +1. **OData release-boundary PR:** Independent Hidi release-please component and version + source, with no production publishing enabled. +2. **OData history-import PR:** Audited filtered source/test graph, deterministic filter + specification, source SHA, filtered tip, and commit map. +3. **OData relocation PR:** Dependency/signing/solution/docs/developer tooling + integration plus GitHub CI. +4. **OData ADO PR:** Build, signing, artifacts, tag-routed publishing, GitHub release, + and Docker jobs; complete external ADO authorizations alongside it. +5. **Destination release operation:** Create and verify the first `hidi-v*` release. +6. **OpenAPI.NET cleanup PR:** Remove Hidi and all old CI/CD/distribution ownership; + add relocation links. + +Each PR should identify an owner for repository code, release-please, ADO/1ES, ESRP +signing, NuGet publishing, ACR/MCR, and branch-protection changes. The release operation +requires an explicit go/no-go review from those owners. + +## 8. Definition of done + +- The destination repo is the canonical source for Hidi and contains audited filtered + history through the recorded source SHA. +- Representative files retain useful `git blame` and `git log --follow` history; the + migration artifact maps original OpenAPI.NET commits to rewritten commits. +- Hidi uses a destination OData project reference and released core/YAML packages. +- Hidi has an independent version/changelog/tag stream and cannot be published by an + OData tag. +- GitHub and ADO CI build, test, analyze, package, and smoke-test Hidi. +- ADO signs and publishes the Hidi NuGet package and executable only on `hidi-v*`. +- ADO publishes existing-name nightly/release multi-architecture MCR images from the + destination. +- A destination-created release has passed package, CLI, GitHub release, and Docker + verification. +- OpenAPI.NET contains no Hidi project, test, build, release, Docker, or resident-project + documentation ownership. +- Both repositories' required checks and external ADO resource permissions reflect the + final ownership model. diff --git a/HIDI-RELOCATION-OVERVIEW.md b/HIDI-RELOCATION-OVERVIEW.md new file mode 100644 index 00000000..6c65a58e --- /dev/null +++ b/HIDI-RELOCATION-OVERVIEW.md @@ -0,0 +1,86 @@ +# Hidi Relocation Overview + +## Objective + +Relocate the `Microsoft.OpenApi.Hidi` .NET tool from +[`microsoft/OpenAPI.NET`](https://github.com/microsoft/OpenAPI.NET) to +[`microsoft/OpenAPI.NET.OData`](https://github.com/microsoft/OpenAPI.NET.OData) +without changing the NuGet package identity, `hidi` command name, public behavior, or +`mcr.microsoft.com/openapi/hidi` image location. + +The move puts Hidi beside the OData conversion library it directly consumes and +reverses the current dependency arrangement: + +- Hidi will reference `Microsoft.OpenApi.OData` as a project in the destination repo. +- Hidi will consume `Microsoft.OpenApi` and `Microsoft.OpenApi.YamlReader` as released + packages instead of projects from the source repo. + +## Agreed migration model + +| Decision | Approach | +| --- | --- | +| Release versioning | Give Hidi an independent version and `hidi-v*` tag stream in the OData repo. | +| Cutover | Use a destination-first, two-phase cutover. Publish successfully from OData before removing Hidi from OpenAPI.NET. | +| Git history | Import an audited, path-normalized Hidi history with `git filter-repo`, preserving authorship, dates, messages, renames, and useful blame. | +| Signing | Preserve Hidi's existing strong-name identity so it retains friend access to released `Microsoft.OpenApi` packages. | +| Distribution | Move NuGet tool, Windows executable artifact, GitHub release asset, and MCR nightly/release image publishing. | + +## Delivery outline + +1. Establish package/version boundaries in OpenAPI.NET.OData so its library releases + remain on `v*` tags while Hidi releases use `hidi-v*`. +2. Filter Hidi's source and test history from a disposable OpenAPI.NET clone, normalize + legacy paths, audit the result, and merge it into OpenAPI.NET.OData. +3. Update project references, signing, solution membership, documentation, Docker + support, local build tooling, and repository links in destination integration + commits after the history import. +4. Extend OData GitHub Actions and ADO YAML to build and test Hidi on every relevant + change, sign its binaries/packages, and publish only on the matching Hidi tag. +5. Authorize the OData ADO pipeline for the existing NuGet, ESRP, GitHub, and ACR + connections and configure required checks/triggers. +6. Validate history integrity, package contents, CLI behavior, Docker behavior, and + both release paths; + publish one Hidi version from the destination. +7. Remove Hidi projects and all Hidi-specific CI/CD, Docker, local tooling, and + documentation from OpenAPI.NET, replacing user-facing links with the new location. + +## Key safeguards + +- Never enable both repositories to publish the same Hidi version. +- Baseline the initial history filter at OpenAPI.NET commit + `afd4967a9e6db390175e2df9e6f34ff77168d19d`. If source HEAD advances before + execution, deliberately re-baseline and repeat the history/tree audit. +- Perform filtering only in a disposable mirror/clone; never rewrite either working + repository in place. +- Retain legacy source paths (`src/Microsoft.OpenApi.Tool`, `src/Microsoft.Hidi`, and + `src/Microsoft.OpenApi.Hidi`) and both historical test locations, then normalize them + to the destination layout. +- Exclude OpenAPI.NET branches and tags from the import. Filtering rewrites commit IDs + and signatures, so retain a source-to-filtered commit map for traceability. +- Audit the filtered graph for unrelated files, generated output, secrets, oversized + objects, and correct rename traversal before merging it with + `--allow-unrelated-histories`. +- Do not resurrect the removed `Microsoft.OpenApi.Workbench` project or its solution, + README, image, VS Code, or pipeline integration. Workbench removal is part of the + source baseline and is unrelated to Hidi relocation. +- Do not derive the Hidi version from OData's repository-wide `Directory.Build.props`; + this would regress Hidi from the source repo's `3.10.x` stream to OData's `3.2.x` + stream and would couple unrelated releases. +- Keep package ID `Microsoft.OpenApi.Hidi`, tool command `hidi`, namespaces, supported + target framework, and MCR repository unchanged. +- Gate NuGet and release-image publishing on `refs/tags/hidi-v*`; keep OData publishing + gated on `refs/tags/v*`. +- Keep the old source-repo publishing path available until the destination pipeline + has produced and smoke-tested a real release. + +## Completion criteria + +The relocation is complete when Hidi's audited history supports useful blame and rename +traversal in OpenAPI.NET.OData, Hidi builds and tests there, a destination-created +package installs and executes as `hidi`, both MCR architectures are available under the +existing image name, destination release automation owns future Hidi versions, and +OpenAPI.NET no longer builds, tests, packages, publishes, or documents Hidi as a +resident project. + +See [HIDI-RELOCATION-IMPLEMENTATION-PLAN.md](./HIDI-RELOCATION-IMPLEMENTATION-PLAN.md) +for the detailed implementation and cutover checklist. diff --git a/Microsoft.OpenApi.OData.sln b/Microsoft.OpenApi.OData.sln index 085f0a15..f0b31f64 100644 --- a/Microsoft.OpenApi.OData.sln +++ b/Microsoft.OpenApi.OData.sln @@ -16,32 +16,104 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.OpenApi.Hidi", "src\Microsoft.OpenApi.Hidi\Microsoft.OpenApi.Hidi.csproj", "{77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0C88DD14-F956-CE84-757C-A364CCF449FC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.OpenApi.Hidi.Tests", "test\Microsoft.OpenApi.Hidi.Tests\Microsoft.OpenApi.Hidi.Tests.csproj", "{539420CE-FF7C-4738-9AFE-19C676595EF4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Debug|x64.ActiveCfg = Debug|Any CPU + {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Debug|x64.Build.0 = Debug|Any CPU + {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Debug|x86.ActiveCfg = Debug|Any CPU + {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Debug|x86.Build.0 = Debug|Any CPU {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Release|Any CPU.Build.0 = Release|Any CPU + {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Release|x64.ActiveCfg = Release|Any CPU + {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Release|x64.Build.0 = Release|Any CPU + {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Release|x86.ActiveCfg = Release|Any CPU + {FF3ACD93-19E0-486C-9C0F-FA1C2E7FC8C2}.Release|x86.Build.0 = Release|Any CPU {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Debug|x64.ActiveCfg = Debug|Any CPU + {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Debug|x64.Build.0 = Debug|Any CPU + {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Debug|x86.ActiveCfg = Debug|Any CPU + {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Debug|x86.Build.0 = Debug|Any CPU {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Release|Any CPU.ActiveCfg = Release|Any CPU {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Release|Any CPU.Build.0 = Release|Any CPU + {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Release|x64.ActiveCfg = Release|Any CPU + {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Release|x64.Build.0 = Release|Any CPU + {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Release|x86.ActiveCfg = Release|Any CPU + {90A98718-75EB-4E2B-A51E-66ACF66F15B4}.Release|x86.Build.0 = Release|Any CPU {2D06C660-B550-432C-8062-D4070F7C371F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2D06C660-B550-432C-8062-D4070F7C371F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D06C660-B550-432C-8062-D4070F7C371F}.Debug|x64.ActiveCfg = Debug|Any CPU + {2D06C660-B550-432C-8062-D4070F7C371F}.Debug|x64.Build.0 = Debug|Any CPU + {2D06C660-B550-432C-8062-D4070F7C371F}.Debug|x86.ActiveCfg = Debug|Any CPU + {2D06C660-B550-432C-8062-D4070F7C371F}.Debug|x86.Build.0 = Debug|Any CPU {2D06C660-B550-432C-8062-D4070F7C371F}.Release|Any CPU.ActiveCfg = Release|Any CPU {2D06C660-B550-432C-8062-D4070F7C371F}.Release|Any CPU.Build.0 = Release|Any CPU + {2D06C660-B550-432C-8062-D4070F7C371F}.Release|x64.ActiveCfg = Release|Any CPU + {2D06C660-B550-432C-8062-D4070F7C371F}.Release|x64.Build.0 = Release|Any CPU + {2D06C660-B550-432C-8062-D4070F7C371F}.Release|x86.ActiveCfg = Release|Any CPU + {2D06C660-B550-432C-8062-D4070F7C371F}.Release|x86.Build.0 = Release|Any CPU {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Debug|x64.ActiveCfg = Debug|Any CPU + {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Debug|x64.Build.0 = Debug|Any CPU + {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Debug|x86.ActiveCfg = Debug|Any CPU + {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Debug|x86.Build.0 = Debug|Any CPU {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Release|Any CPU.ActiveCfg = Release|Any CPU {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Release|Any CPU.Build.0 = Release|Any CPU + {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Release|x64.ActiveCfg = Release|Any CPU + {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Release|x64.Build.0 = Release|Any CPU + {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Release|x86.ActiveCfg = Release|Any CPU + {79B190E8-EDB0-4C03-8FD8-EB48E4807CFB}.Release|x86.Build.0 = Release|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Debug|x64.ActiveCfg = Debug|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Debug|x64.Build.0 = Debug|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Debug|x86.ActiveCfg = Debug|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Debug|x86.Build.0 = Debug|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Release|Any CPU.Build.0 = Release|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Release|x64.ActiveCfg = Release|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Release|x64.Build.0 = Release|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Release|x86.ActiveCfg = Release|Any CPU + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C}.Release|x86.Build.0 = Release|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Debug|x64.ActiveCfg = Debug|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Debug|x64.Build.0 = Debug|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Debug|x86.ActiveCfg = Debug|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Debug|x86.Build.0 = Debug|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Release|Any CPU.Build.0 = Release|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Release|x64.ActiveCfg = Release|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Release|x64.Build.0 = Release|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Release|x86.ActiveCfg = Release|Any CPU + {539420CE-FF7C-4738-9AFE-19C676595EF4}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {77BDC528-BA5A-4FA3-A4E9-3C1A2294738C} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} + {539420CE-FF7C-4738-9AFE-19C676595EF4} = {0C88DD14-F956-CE84-757C-A364CCF449FC} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9AE22713-F94E-45CA-81F4-0806CA195B69} EndGlobalSection diff --git a/README.md b/README.md index b0212307..d1d8a304 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -[![nuget](https://img.shields.io/nuget/v/Microsoft.OpenApi.OData.svg)](https://www.nuget.org/packages/Microsoft.OpenApi.OData/) +| Package | NuGet | +| --- | --- | +| Microsoft.OpenApi.OData | [![nuget](https://img.shields.io/nuget/v/Microsoft.OpenApi.OData.svg)](https://www.nuget.org/packages/Microsoft.OpenApi.OData/) | +| Microsoft.OpenApi.Hidi | [![nuget](https://img.shields.io/nuget/v/Microsoft.OpenApi.Hidi.svg)](https://www.nuget.org/packages/Microsoft.OpenApi.Hidi/) | # Convert OData to OpenAPI.NET @@ -6,6 +9,10 @@ The **Microsoft.OpenAPI.OData.Reader** library helps represent an OData service metadata as an OpenApi description. It converts [OData](http://www.odata.org) [CSDL](http://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/odata-csdl-xml-v4.01.html), the XML representation of the Entity Data Model (EDM) describing an OData service into [Open API](https://github.com/OAI/OpenAPI-Specification) based on [OpenAPI.NET](http://aka.ms/openapi) object model. +This repository also contains [Hidi](./src/Microsoft.OpenApi.Hidi/readme.md), a +command-line tool for validating, transforming, filtering, and visualizing OpenAPI +documents, including conversion from OData CSDL. + The conversion is based on the mapping doc from [OASIS OData OpenAPI v1.0](https://www.oasis-open.org/committees/document.php?document_id=61852&wg_abbrev=odata) and uses the following : 1. [Capabilities vocabulary annotation](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Capabilities.V1.xml) diff --git a/docs/hidi-migration/README.md b/docs/hidi-migration/README.md new file mode 100644 index 00000000..872a6b81 --- /dev/null +++ b/docs/hidi-migration/README.md @@ -0,0 +1,26 @@ +# Hidi history migration provenance + +Hidi was migrated from +[`microsoft/OpenAPI.NET`](https://github.com/microsoft/OpenAPI.NET) using filtered Git +history rather than a source-only copy. + +| Item | Value | +| --- | --- | +| Source commit | `afd4967a9e6db390175e2df9e6f34ff77168d19d` | +| Filtered tip before merge | `b9cf23ea24fcc34085796f446eb91a109d1a4944` | +| Destination paths | `src/Microsoft.OpenApi.Hidi`, `test/Microsoft.OpenApi.Hidi.Tests` | +| Reproduction script | [`scripts/import-hidi-history.ps1`](../../scripts/import-hidi-history.ps1) | +| Commit map | [`commit-map.txt`](./commit-map.txt) | + +The filter retained the historical `src/Microsoft.OpenApi.Tool`, +`src/Microsoft.Hidi`, `src/Microsoft.OpenApi.Hidi`, +`Microsoft.OpenApi.Hidi.Tests`, and `test/Microsoft.OpenApi.Hidi.Tests` paths and +normalized them to the destination paths. + +Filtering preserves commit authors, committers, timestamps, messages, and useful +file-history traversal. It rewrites commit IDs and invalidates source commit signatures. +Commits that also changed unrelated OpenAPI.NET files retain only their Hidi changes. +The commit map relates original commit IDs to rewritten IDs. + +OpenAPI.NET branches, tags, Workbench content, and unrelated source files were excluded +from the imported ref. diff --git a/docs/hidi-migration/commit-map.txt b/docs/hidi-migration/commit-map.txt new file mode 100644 index 00000000..1d9fa327 --- /dev/null +++ b/docs/hidi-migration/commit-map.txt @@ -0,0 +1,6087 @@ +old new +001f1a0b50693bd9c6e3ba7c2d0d9429bea0c21b 292f4acb63d8ba0dc2f52e2c99730f5999a5a53b +0069b53be2ffca1dd639168f5ce302dfa2174338 0000000000000000000000000000000000000000 +006bcf26860eebb93ffd0ce080e01be9cbb3b3d1 0000000000000000000000000000000000000000 +006d1de0a561bf9f3f897b1ad18af5a7208e2d58 0000000000000000000000000000000000000000 +0070675d42f950c7073cb77b2661cb6ed5c100a7 0000000000000000000000000000000000000000 +00721e1e7f285b1fe736e3c77ea1a3f41ab8a613 0000000000000000000000000000000000000000 +008576c31f8dcecf59363c9c2f85d691601faa73 0000000000000000000000000000000000000000 +008d59ef94447eb90dee03fc1e357904e0801314 0000000000000000000000000000000000000000 +008d5baffb871cbb5057b046a0be5317c346a296 0000000000000000000000000000000000000000 +0091f1cbf5f430fe9f54cfb5e2b66279663de632 0000000000000000000000000000000000000000 +009fa1078eb172e581ccb80f02da1ce1ce2e2e4f 0000000000000000000000000000000000000000 +00a0545bdea1a5db894e0f23e351a17e2ecd4a3a 0000000000000000000000000000000000000000 +00a1649e7a096f9161ceffcfb83a3746e7f2a206 0000000000000000000000000000000000000000 +00a92a8850397dfb60a22dc22ccea5e476f1facb 0000000000000000000000000000000000000000 +00acffd42b0664e44fd4759fa17597b1091865aa 0000000000000000000000000000000000000000 +00c30181214b35f4817be0cbd3827d765efd04d9 77945b4b7d1d8824ca2ab0e18ed1b1b0a2386c87 +00dd9c47202e66c3dc031cb5aab72a4c66d8e003 1b4d2411cccd2b86d9a67319496301b58e642279 +00e19eb417567452024d02a27c89a0c123973781 0000000000000000000000000000000000000000 +00eca6f7b057073791e9d234574093865a1a442d e68f84138470687fc5d6c25e9450b68084480bd5 +00f00f00a0cb484250a503bb6f67d617cc6415ed 0000000000000000000000000000000000000000 +00fe8db93bce4e449af3b505dfeaf8d2cd0d05ee 0000000000000000000000000000000000000000 +010b7116d92faa3687fe9c7c3fffdd021c868d23 0000000000000000000000000000000000000000 +011517a37d230238789a21b68b498cfbc9ef29d3 0000000000000000000000000000000000000000 +011e72caadb488d4fe4d289d566f54691631ff73 0000000000000000000000000000000000000000 +012440bd148cd6c2f973b8ffb2006fa615c7d8a5 0000000000000000000000000000000000000000 +012ed306b3c34e1e59b2270a17a8568d971520e0 0000000000000000000000000000000000000000 +0138361c84833a8e68e18c813642cb8381be8ced 0000000000000000000000000000000000000000 +01398f0cbe717f43d8f558c234a25c5e794261a2 0000000000000000000000000000000000000000 +014cb70e9696b8b939cec0130f05b9098cf38661 a6eab2b2145c6c6a0eae1faf30df6dca1e7e8449 +015448fba520612be2408dc4a41b80a86f0d1b0b 0000000000000000000000000000000000000000 +01544f983dc7051fd4fdd32e3208ec75eb5cb199 0000000000000000000000000000000000000000 +0156943368877e5f6bd6ea8c0a2a169ebe0d6e6c 0000000000000000000000000000000000000000 +015b3cd27b7454e7b905c5e804365ec5fa013b5c cb605e22e17ff93afd660b6cc3c1db81d1a44897 +01784e4e4a3ce679af9df0b6fc1ed59586eabe53 0000000000000000000000000000000000000000 +0178e881e27acd032aa49a0ca3bc545f44194d0f 0000000000000000000000000000000000000000 +01885659ebb992c6e5ce235475af336ccd0ef05f 0000000000000000000000000000000000000000 +0192123ae6aec7ff50d7607c33a2156a68a44318 0000000000000000000000000000000000000000 +019948411154b4417f0bb677dc717017cd0a054f 0000000000000000000000000000000000000000 +019eb99fc26f323f7a5bc79609954d237b1c0bfc 0000000000000000000000000000000000000000 +01d0a42dbe7214feeb1fab82d66ae3696dd30022 0000000000000000000000000000000000000000 +01e4f4940598008dac81d2fc2f288988bbcd65ec 0000000000000000000000000000000000000000 +01fefe9c62eeb2830a1b8c8cffaa0845da645cbc 0000000000000000000000000000000000000000 +02001c3293f1986ba0439a4f5da00cb1aaa4000c 0000000000000000000000000000000000000000 +020790d0f0fe1333ac150645fc1f8094ebe50751 0000000000000000000000000000000000000000 +020bf61f84f340f3156f5c27ea1589eee23ead24 1eb2bf2531db7803f9308e2dcc0e4f81490c03b6 +0223425c12999e8c5a72bcbaeeeab9451628c0a0 0000000000000000000000000000000000000000 +0224604f0311105dcad5226ff94c681d9df86512 0d2a656c69644096b1862b3fe5d7c6d2d504c7fa +02451fcbbace99c316aba2fbebb9b505adc4a54a 0000000000000000000000000000000000000000 +0252298094719607c4836a4ee3864bc6db046a50 0000000000000000000000000000000000000000 +02570f58a9c8de39f1a211cc9180f944d0d359ef 8c1c051be1ef000f864db73fd6dbeed7b1365aac +025d9f8b0e597cde73b7e3af66c504e0c6d1f1e5 d7ebe493f1c732c8093961500d94a4ece6182374 +02800f3cce625d1bcf4e7883de1ccb41281181da 0000000000000000000000000000000000000000 +028d60bd4003f54f6f130e56400cd7533951e1f2 73e30f4fccd7e85e6851f433b65e03fc6ccf8c44 +029280baee962fb4ea56feec623967ac16622b47 0000000000000000000000000000000000000000 +0298364fad5c76b3f3b3f1b079721340e9426bd5 0000000000000000000000000000000000000000 +02b42e3bcd0b65c919eb7b8b5358ee02d8d22513 c7577b92e36d3b351b047aa36c7a087df03482af +02b526626aefe6acd2e0c2acaf80b806ce373ea4 0000000000000000000000000000000000000000 +02cf2b87643981a3a5213b178984113fb47ede9e 0000000000000000000000000000000000000000 +02e3708d3d08104d574f327856878550bec31613 3f43e0d55f9e9d365769fc3f69d8cad62bb547a2 +02eeec141408446c62135747e87406e9ae317787 0000000000000000000000000000000000000000 +030d397434104aae3f7b15e4a3ef71507bc59e2d 0000000000000000000000000000000000000000 +03337b9c244377445ae9b61eea592538da63dcb2 0000000000000000000000000000000000000000 +0335675c941503b5bff2e6cfabe7269b2b4eb25d 0000000000000000000000000000000000000000 +0337655329694b75785f3f46a1dfff8ddc10b7e0 0000000000000000000000000000000000000000 +0338e605df471769e0a1e24551330ccea95a2716 0000000000000000000000000000000000000000 +03436cb8560227fd8b2e07b3405e6d077df663b3 0000000000000000000000000000000000000000 +0347f0193f57113117223cdbd16fd77fb189d215 83b2e55f8577a4cbc2f98d1e5fe6f336db0d1ca0 +0353793610d575cd49f71510c6779f108a0a44b3 580f81ac248e8327a1e5d0ec8b0722c067e2750c +03659f7d055e6b339e15ac4434ae4037abb3a546 0000000000000000000000000000000000000000 +0373d02f3bddfc4422b7249d41d93f0a491a688e 0000000000000000000000000000000000000000 +037dbf37213fc561542a8622248d3938a902cd82 0000000000000000000000000000000000000000 +03814376b57ca68b36dc52985333cf458bba055f 9e69e518882ce943dee64cb2812396c2ee1107f4 +03870b559a07f71a7c3a32eb5a197ad9330de1b8 d6c1fef0f0a17cfe4b8e73eacf9b78aa38b537bf +038a35659c7d0ff1e0d25add6941af4cb6c6e39a d261e1c12c3df51b0b43395da7c4defb478bfa72 +0390a8152a95b5fd68c23df230714b4747233d10 0000000000000000000000000000000000000000 +03a28106176f527b28331a992dd0d3fa4113fe36 1dc455b759a4cba966e1a5f274af93842c437666 +03a6b54a24a27cd4529b54b171f8665131a6904e 0000000000000000000000000000000000000000 +03aed8ad2a220b72bf2891de9b73edd5f0a7a6c1 0000000000000000000000000000000000000000 +03b0e37d8547c62f49b538564a80d245c67a3c4e 3460707e4a46f1ad81fa16ec7274842dfe080e49 +03b103496c4d18532df5db6c4617bcd3d2f75429 86ee5a1b35a376a274bff8f97ee6294cec530fba +03c8aa5e427bcee939cf3b4b6552628d5173b108 0000000000000000000000000000000000000000 +03edbc95184ce975f37d74a5826da6db737c822f 0000000000000000000000000000000000000000 +03ff37799d9e2a3df24bad71a881351ae61a2e3b 2a41f3d31ac5585173ceef62fd33f907b7f9fd23 +041932539f1d07847f7909ef75a44999aaeaf481 0000000000000000000000000000000000000000 +041938d3ee8114b5a209d1846c54ae04d4003607 0000000000000000000000000000000000000000 +041e9e8345c95327c6ffe43953850f59f29c5f18 0000000000000000000000000000000000000000 +04206a146345f8b090cd6c21896231d65d82eaad 0000000000000000000000000000000000000000 +043a592724cc9fe42c4c8d0e99ab0965c11ad7bb 0000000000000000000000000000000000000000 +043f5d783e69f0871b20553fc143151fcd1d5390 0000000000000000000000000000000000000000 +044ddde5a10b408ab87c1314821bf7fd65742958 0000000000000000000000000000000000000000 +0468d5c0f61f1dcb7039303f200db04cd5e24267 0000000000000000000000000000000000000000 +048518a2ba5273c7f3a9fac09d9f839a2b5c1030 0000000000000000000000000000000000000000 +048abb226f31a352ebaf2a508212aaaff8ec27c9 0000000000000000000000000000000000000000 +04a4880d132a45407de9e9f8c45750ff6d266206 87946520a76646916110ba82237baff396aee008 +04af1a6f90b82c7dc7ad2ccac68b6f13668c6baa 0000000000000000000000000000000000000000 +04b357c083715afff893af2a08d922058838dcd1 d51af1ca67b1b5e8b5f1bc072eb4e7be3cfda6b2 +04bd04e9fef6d58b08f8a44bca11c31a0067939e 0000000000000000000000000000000000000000 +04d39528d838678f71fdf227aa76c0505391407f 0000000000000000000000000000000000000000 +050dd51f8e34d9d3bac16d9aab3b2c12e9bd0e6f 0000000000000000000000000000000000000000 +05204435c7276df39d63a86492ee18f6de1dad43 0000000000000000000000000000000000000000 +0522d631fe6ff2c07613ff36421ec58cdcbe3c66 0000000000000000000000000000000000000000 +05256ddbc71359739b845bc71dd315f44bb50a57 9dad66e170b01e45a99599341836eabc1ad62175 +0527f999ce4a52de3aa421588e1368db8fdb94a6 0000000000000000000000000000000000000000 +053d10d8e4444a24d89f89e08c95f40701a8df6e 10d72984b5a4dd9dcfbe4cc29848d7db1c9c06a0 +05512ec0035bfab31ab4a75592c21e0a227b9487 c62f63d74c8062c45313b08bf006aec2a8dab34b +055a6e1761d693b888883543028e4abcf762d029 0000000000000000000000000000000000000000 +0560a4a3d3165c7521ac253c1228a752308c1891 15bc4af4dfc1ee27dfba1dd0ef8dab5bce78f3ae +05619b5b8125c73ddf0beae1305ef3c03f91280a 0000000000000000000000000000000000000000 +05713cb3b52ccfbb9172e5c59ce688e09baeaa1f 0000000000000000000000000000000000000000 +05737645433d78040a9218bb27dac052718fdadf 0000000000000000000000000000000000000000 +05a1d77b3b39be7b7f26204fb67c02b232a99e03 0000000000000000000000000000000000000000 +05a1fd8ee3f6eb011d92d0f02931b2bbdc2e0ee7 0000000000000000000000000000000000000000 +05a5f4da377cafe4a53b0f2d9adfc7d83ca30bdc 0000000000000000000000000000000000000000 +05b44beb9783f5bab1d8988b3cb916d0278d42ce 0000000000000000000000000000000000000000 +05b9baf99a366aca4fe282dc0013837eea73134f 0000000000000000000000000000000000000000 +05bbf41464cd687fee7d7470d674350755207487 64cbae62a6fa8130ad0e33794a52f25e7a10d721 +05bfddbbefcd70ba8fb2e9db7f5f66c1cdd0d235 0000000000000000000000000000000000000000 +05c56159eaed252744ed3a77aef0a6cc8351e31c 0000000000000000000000000000000000000000 +05d3959c430f536090860431cb17ccf185eef173 0000000000000000000000000000000000000000 +05e43a4667e7cae646f0107621c3f4bf3b71fffb 3d61a45f4f12a82ab4167b057262ed7a5a83e1e3 +06000026e5a88ea4cea7673caf7644bc45565076 0000000000000000000000000000000000000000 +06090d0956ffe7a1e8f0d93620b89460813d6bfc 2003283f53ad89be2f436617a4c02cc7f94ffecd +06274dff7e315ed680bca4701d7e2d4069d88a0a 9e15f34a905d406dab2c9dbb7104964bfb7c406b +0629de31ae0d31fb2a32a3449680ecdaa15d9088 0000000000000000000000000000000000000000 +06301228211d01bbba4b323d6985d98bd0ddd76f 0000000000000000000000000000000000000000 +0636e4a7e60f1bd8244333b756fb0a85a428e847 0000000000000000000000000000000000000000 +0646b23891a8378667b8306506d5a4b106220402 0000000000000000000000000000000000000000 +0648cd494f5f040c389494c9442c00ee991782f1 0000000000000000000000000000000000000000 +064b6caea5dab26250b12725e6b00aa3fae7196f 0000000000000000000000000000000000000000 +06767a295dcbee679e4d342968ad4c581d73b4e2 0000000000000000000000000000000000000000 +06783653f828fa878dcb2baf74efc79e1978ed8f 0000000000000000000000000000000000000000 +067ec94a9bc28f221044ba11a776a337e4b7efce 0000000000000000000000000000000000000000 +067fbddde24b19fe646ed26959f349e3c1069312 0000000000000000000000000000000000000000 +068b8e69df9f057332307e4614e3273b751cc2ea d517cfb195126b4f5eded17af26450e853d20379 +069a410252483c8be979ed33012d94f6b85f2377 aaa625301e5f09e2fc26bcecc7f33cec495a879c +069f8432788b2ac1dca3d27b07f4e68b40f53c46 0000000000000000000000000000000000000000 +06b54c377330c5a17a45bf4ec5f50bbdac6bab9e 0000000000000000000000000000000000000000 +06b608ccfff42e17bc5d5201c53e1e600638c1fa 0000000000000000000000000000000000000000 +06bc518007a9cb9011c67560bc0b55b7c18c3422 0000000000000000000000000000000000000000 +06bccb9749ea3e11342de8ff325752e23ec06e3f 0000000000000000000000000000000000000000 +06bf70bdde6ea6aa1f007639d351f4fa173b33d5 73b6a90f29faff873945c8736b700409dbd9751f +06cc025dca43d24955bcd205facefa4347d3f0c7 0000000000000000000000000000000000000000 +06d499abdc232ee5deab967c417e3b971f941286 0000000000000000000000000000000000000000 +06e13ffac201aa5a0f22d655bb8aa6b61d5a0558 0000000000000000000000000000000000000000 +06f91f636b4a52b77be03948562fcf0083e558e4 0000000000000000000000000000000000000000 +06fb54b13fc0dcf4a42add831edd88d7e9edcc6f 0000000000000000000000000000000000000000 +06fb78ff7b3e28c5c46807013e289b026fadacb7 0000000000000000000000000000000000000000 +06fd1df8e6eba8ec5ddc74bfaaecfb93fcf7cdbd 9c56465d6c756d0256d3a4c0e129147c6b437345 +06fffa23a35522523de1df96b902565190df9111 0000000000000000000000000000000000000000 +07071aca73472dbe5f760296a0cde798a824f954 0000000000000000000000000000000000000000 +07076a7a34735801721aacf14a0b7b374b495c94 0000000000000000000000000000000000000000 +07169a4dac80ed7f6bc0f78a7089bcba38d552c2 1f8fd7dd82808e242d6621d913954769dc86c1e8 +07202317c7cdee148941ac1ea0fd5d83faf529eb 0000000000000000000000000000000000000000 +07209a6496181c430e0db7fef7e6ec38c327a2c8 0000000000000000000000000000000000000000 +0721eca65e55a3fce046d8f43b2e7b9828094162 0000000000000000000000000000000000000000 +07237af37d92ea66f855ec9739f55203a3e8971f 0000000000000000000000000000000000000000 +0737b0c2bec86f0c73e5b0002cc0390ad37ca65b 0000000000000000000000000000000000000000 +07580e19791a785af16bf8af18db1cfdabc83681 0000000000000000000000000000000000000000 +076009c82f21194ba9157dd040febcf4f9061a0f 0000000000000000000000000000000000000000 +076cc4ebfb331b3a7be8bde098cb8453dd6f1390 0000000000000000000000000000000000000000 +0781a89056210eb4eea53d6a38530564db999551 0000000000000000000000000000000000000000 +07987aeb64e7c0e6bb82bcfb9690b4faedef335f 0000000000000000000000000000000000000000 +079ab116d1ff0bec905f466b69536e3bb0eb5f4b 6b75db03f684c318ed51147c308253b9abc2195e +079da0f22f4c2b3eb4a9acb1f20b531a49a609e8 0000000000000000000000000000000000000000 +07ab67ae0deba3ccb6de97f8b7cb2892efcd12c6 0000000000000000000000000000000000000000 +07acf27512baf3282ca3cb18c94dee481eb660c2 0000000000000000000000000000000000000000 +07b525f568b65b5003deaccc56829f5e7e8e2641 0000000000000000000000000000000000000000 +07c4567ada2c914d203e5a3016794c3ea4c97da5 2fcc71f28be1153b8bd4ba9853d973cd8abfe26a +07d66aa7036b2417d96344ea80b67b572ba41cfb 0000000000000000000000000000000000000000 +07e32d3d0078ff6e93bc81b0a69d552f76b2fb33 0000000000000000000000000000000000000000 +07f0edfb169415a410f0fb44850243997c002af5 2e8a886be0bdc5026cd8657135f34b405e17af10 +07f8f08b3c82573aa11c13217dfe2266c9dce39c 0000000000000000000000000000000000000000 +07fac9e07e53746ff14a6110338530f99531cc9e 0000000000000000000000000000000000000000 +080095e6427e89dcddc7c21c69213cf39484c1e6 34f49c55ca190fa52bd1f911f9d9d98227d1d6e1 +0805f57851fc1fc436ca63649fe081bee8b9fb5a f5dd8d880e9d11371fb48224393e4a7815615944 +080c271be6f4b97513d837fd12995578bbd58885 0000000000000000000000000000000000000000 +0810b3337171947a104f07873a611fcd9f5f3b4f 0000000000000000000000000000000000000000 +08154c74bbe0347ca6c47eb5cd13d0ae153e7ee2 0000000000000000000000000000000000000000 +08160c872a5f931eecd12446335c2f51fdad083e 0000000000000000000000000000000000000000 +0818fb742bca9c330dcd066b37aed8c0288b7ac7 0000000000000000000000000000000000000000 +081e2511b9df964ad74f7cb0e48761977e50cc45 0000000000000000000000000000000000000000 +08273f632b01606397cb2f9ec740dc1efced9909 8495c4a18ada091a38811e19052c63aa5f1113d6 +082f0bded04125c0cca6f4012cc4e19bfee0f1a3 0000000000000000000000000000000000000000 +0834f1ff633c66d1c22f0a30a685f22fa256acbb d821db1db8dde4e83b29649eb2500a17bcf5bd25 +0836e97d4b21966ee6aa75278fea812e25cb5e77 0000000000000000000000000000000000000000 +08414a16db5e0a627c953f107aa34501c18996bb 0000000000000000000000000000000000000000 +0844498da7ef3c321078171b57fc3e723a7159ba 2ebe76cd46caedbfa020309c5cf71b8b98e8aa5a +085c1f1da526c0f8b6e0804f2ddbe46c137f7935 d0bc05ced1b5b8838dd1c260731449539beb5df7 +085e3b42c877e42e5c3ea298df5c9acdd565f8d9 0000000000000000000000000000000000000000 +085f33e71fb1e16f6a940f036ee381f957a03f4a 0000000000000000000000000000000000000000 +086fc56d0996e33e77358c84a893a88e91cdc4d2 0000000000000000000000000000000000000000 +0870ba998be04fbe4ed855b2e48e0c8bb4a208a0 0000000000000000000000000000000000000000 +08718e15e72f4236e37f160e57f1767c8428b8f9 0000000000000000000000000000000000000000 +087a5333bcd28f56c18ff08d6434a16d95723f0c 0000000000000000000000000000000000000000 +0880d82a8b5a3bb8110662d1e60ad80b29fd60d8 0000000000000000000000000000000000000000 +08976beed3a39198be47e6d0288874c1d39028ec 0000000000000000000000000000000000000000 +089d181d14e8e12ff1b495cf35293366e0b7c55a 3b38195e1653a1813b267a9df2b472baed7e86c4 +089ddc2e66b6d3068ef6d7289851fd01d246c9e5 0000000000000000000000000000000000000000 +08acaaa791194bcee20bea329e1901b894db8b27 0000000000000000000000000000000000000000 +08b21d1a448ccbb7e9e76a29a2b2b7e394ed311d 8baa5102ecbe8460e0497e232374d4d3a1f1230e +08b41133ca7d530782c58bd08101237e5de7a45a 0000000000000000000000000000000000000000 +08bb98f8b85f385cc70307cfe248dd1ec3eaf188 0000000000000000000000000000000000000000 +08c05faee951ede4db8ee9875dab41d65caabe4b 0000000000000000000000000000000000000000 +08c949cdbaeaf723afb14e57e1324b9cd2ce6b70 0000000000000000000000000000000000000000 +08d9b24384918de7dcfa7ff5080abb0534ffde4b 0000000000000000000000000000000000000000 +08da8fa829728e12126d6b9dee191b5156705ada 51c88bd30ebe86fa07ec29151fc7cb6190ee5677 +08ed1d32b7b5810af57615fe1a52fbcc2caed3e1 0000000000000000000000000000000000000000 +08f0754552c14cfb82f2e12b2be4db185238136d 0000000000000000000000000000000000000000 +090a819c3b472998979fb1ab56e1e62e6a46cd80 0000000000000000000000000000000000000000 +09158e2c8ec70f3e4687be3017f8a800c9a7572f 0000000000000000000000000000000000000000 +092af5151d906edc49b8ee283e12a631b4b0c253 0000000000000000000000000000000000000000 +0934c91c9672a7a8b69b8984405580e030ef48ad bf39f4c56cbe06bc7a7d7d9701e5886fca3edea1 +093737e6843b4d4e2bcffc4254a5ae39fd8a67b8 0000000000000000000000000000000000000000 +093993b2795ba62630f16160cbe865feb6a735cc 0000000000000000000000000000000000000000 +093f761b15a1a739b4b1ded5cc105ecc3f7fcf83 0000000000000000000000000000000000000000 +09444c0637a140cbb61b097c4393fe9eaee201f0 0000000000000000000000000000000000000000 +094a9806771bb1ff7b44b7d9c1463e773982e8e8 0000000000000000000000000000000000000000 +097025a089dc449fe70a66f48e9c50fcce47c346 0000000000000000000000000000000000000000 +0970eff2af381cf45f8bc170955399ebf237ae63 0000000000000000000000000000000000000000 +0975409b437dc90b1db21504777a77c894899e4b 90fa4d0736de1dc7c30c691203e57be1096d3bd1 +097b7f30c940502af18889b92c074beef618c7ff 0000000000000000000000000000000000000000 +0988b1b63f38b9f40be2f40697356009a34ad5ba 0000000000000000000000000000000000000000 +09a561f0853b4c0fec80e327db52f1423b8c2b35 0000000000000000000000000000000000000000 +09a957a1af98c4cf6818163e9ce97dbefb1ae78a 0000000000000000000000000000000000000000 +09b5c9f99114f3e42974fd3a22a17da3fa3fe4c4 0000000000000000000000000000000000000000 +09b7e2020c79b28e42adfe7c6b9d501f1fe7d602 0000000000000000000000000000000000000000 +09ba6822c7c7b6109b73b26166d2481d530acd37 0000000000000000000000000000000000000000 +09bef6c8713b2b4787ae03c692fabadbd2aa33a5 0000000000000000000000000000000000000000 +09c9a74efaa47c988fafaea7fd15431717d6f1b7 0000000000000000000000000000000000000000 +09cd4af1e38c913b4cf7fc988fc552e2664ec61c 0000000000000000000000000000000000000000 +09f661f0ff0511d5937fad49ae8a6182b1ea1aff 0000000000000000000000000000000000000000 +0a0ec5fcf3a1bbad79ac960551ffa839fc63025b 0000000000000000000000000000000000000000 +0a12b639efac9006a21fee574d06dd6f112ea708 0000000000000000000000000000000000000000 +0a2c16c0df6b370de997dd2fa3f046689223b327 0000000000000000000000000000000000000000 +0a4c3ee3cf6d497e228c2f69bcc25d094b86ae78 0000000000000000000000000000000000000000 +0a5d0495158fe2d28efdb9bd077c0e46506c6933 0000000000000000000000000000000000000000 +0a633520ee0936ba4492e99078424cd745c07633 0000000000000000000000000000000000000000 +0a686fd06270418125d8bc3fdf954b54797aa4d4 0000000000000000000000000000000000000000 +0a6d8e409f59a69476d721d65f84a78cacb53ff0 0000000000000000000000000000000000000000 +0a7a7e0b4113ccded5a21b0abf1ba9bca9843c9d 0000000000000000000000000000000000000000 +0a7b4f6a8265f390ea452fc6bc9ab528c33bd2de 0000000000000000000000000000000000000000 +0a7c00186ebf8c0092fbd18a388d6f84d278709e 403060dd0357adaeeea520f9321cb579f9b17fe1 +0a819b454944d2a0e46bccc46062896a9c12d068 0000000000000000000000000000000000000000 +0a9ba534b130140beea085c7c9e29687f78519bc 0000000000000000000000000000000000000000 +0ab2350ef305e6f3984aa1a02012d3482a1ae073 2c94d308fb54ad82e724e9cf99e3640d964f111f +0ac9a52fc1be2062c73c1ad6387e79162db1602c f1ba690848156e2cc87f9ccb4731ee5ba0607327 +0acd7a72e52c723a407a920995fd3c8c9f5c7209 0000000000000000000000000000000000000000 +0ace243ebbabe82aacc52d49fe58f54f039bdf76 0000000000000000000000000000000000000000 +0adb312e63060db79c2b167b433c70d365aa46ed 0000000000000000000000000000000000000000 +0ae4031e9e1659fb1babdef934731a7bae22d3b7 0000000000000000000000000000000000000000 +0afb104aa9386e7ff441231fd2e0a608c6e94694 0000000000000000000000000000000000000000 +0afb4977d1b03db62435c4a94db7b3ca09885eea 0000000000000000000000000000000000000000 +0b062dcda8fc607b689b13ad7aa08156711537e9 b4d664f23fc75d875b11fa300d97917c50fbb1fa +0b0db7caabdf8ec633e79787b8b918c0dc86682c 0000000000000000000000000000000000000000 +0b141fa92a0cebe4d056d00602a9158cbcfc84dd 0000000000000000000000000000000000000000 +0b1f6e9ed1bb164141e8620ac846fbd426d20bfe 0000000000000000000000000000000000000000 +0b31edd1a604b8eab463c33acdb408c5869a84be 0000000000000000000000000000000000000000 +0b360dbd65aed2e848a7d4eb7d8a3d3b53eff872 0000000000000000000000000000000000000000 +0b379b874c309d5396566877c39ad35c774a6116 0000000000000000000000000000000000000000 +0b389b586414a217a5382af06926d64d5f429784 27629a8ce38a8a3d2c6adf162d165b7f6b9c06cf +0b4110aa9d296a220ce3516eb94949655d614cdf 0000000000000000000000000000000000000000 +0b423951fe2467ba3598dfff0961abc19beef3ca 0000000000000000000000000000000000000000 +0b63d77c6e8deb09c12cecd8493584106f49cb39 0000000000000000000000000000000000000000 +0b67b7cd02a244ed2cdf9ff901da73c26e165593 0000000000000000000000000000000000000000 +0b710d553eb5fe4bfceb0b1452923c09c6b2d098 0000000000000000000000000000000000000000 +0b717a4f6dce73b500648c87bfd2a82db750034a 0000000000000000000000000000000000000000 +0b88c3b62a7ee47e8c8203ee075fd36b5160be1e 0000000000000000000000000000000000000000 +0b916e412b0a3d94e77870d000b48e63c65eb0f8 0000000000000000000000000000000000000000 +0ba258fe144122869387d503c80c70d0dbda3771 0000000000000000000000000000000000000000 +0bb8a93525379479d209e279729b0515a9161c70 0000000000000000000000000000000000000000 +0bb99af4e0b5da400e889887a5944db963b9dd11 0000000000000000000000000000000000000000 +0bbb3a149d0ebec23dc7f8f5e32262dc0436aa0e 0000000000000000000000000000000000000000 +0bbc23e63704f3703c41f12f35102f55834c2615 0000000000000000000000000000000000000000 +0bc172675c9d65cabcb1649c08a388a3732372f8 23bdaa2076fa372f98219376cdbb51619da805b4 +0bd881b5a8f6144e5d6de72e3c81bbf5c27676df 0000000000000000000000000000000000000000 +0be7a035d6f05cc048c124a1ab0e62b2585c1e03 0000000000000000000000000000000000000000 +0bea5ed3cbb10230bf026288e118ce0e5025e55a a8c5dfdb6bde17adc11c22c295bf1b46b2efbb58 +0bf3dbbf13783257a89372548dfc08219729931e 0000000000000000000000000000000000000000 +0bf5a42a5b2ec0bb5d8e9beedc6910ddb3aea623 0000000000000000000000000000000000000000 +0bfa68165f41d2f13c5d9d1a3f5c08bc029d06e8 0000000000000000000000000000000000000000 +0c10c4a30182d0039f9d5bd948ad7f87f574d644 d90629f3984696cc3292829562348c8720a335d3 +0c1ccbdc1ba4c53662ff6c7132366ae435d8fedb 0000000000000000000000000000000000000000 +0c2e0806acf3b3e0deab25ffbb218d021c67756d 0000000000000000000000000000000000000000 +0c342ad4cbde8c798becefd935413c4675e0d648 4c33348d85c9ca8f775abf6651d4d55f56b9525e +0c54668703cce447ffcbe8dabbb62d3703b2639c 0000000000000000000000000000000000000000 +0c5e3e37b1f8f54de6df63be732aebeb620fc27b 0000000000000000000000000000000000000000 +0c6395e5d20596293f980fc66dc32c7509e9ecac 44bebd0d07684464ebaf009bf1d5f69eccef34cc +0c7ae127481d44eb9d7f46965fdf7b440f468d3b 0000000000000000000000000000000000000000 +0c7dac5efadfb5dda7f0cdb89d8cf1d1642af95a 0000000000000000000000000000000000000000 +0c82895022e6980bc1fc9063e7d08d5ef408ed30 16dc7938fd644ebd7dafc36ec3b934b0a32190fb +0c86ee2b75448bf826a5de7a1e5a54f2d98f3283 0000000000000000000000000000000000000000 +0c8ccf298ea70043bbe3cc91e32098e32ed49ae6 0000000000000000000000000000000000000000 +0c913273dc02873e3fc35733630a0d53585bcdca cacfe4757593025774661ca563102f1321e87783 +0c9ee09804baf88eccca2312cb25e15dc87c5425 0000000000000000000000000000000000000000 +0ca10db3bb9ffa937dd35862068926f3586d6991 0000000000000000000000000000000000000000 +0cab0e724f70cdb702a67b7c46622b766bd0cd58 0000000000000000000000000000000000000000 +0cb4ccb925ab54e15351cbf2b0f4ae58c6b866c8 0000000000000000000000000000000000000000 +0cca61ac59f94e69308fa98994039c43cb9988d0 0000000000000000000000000000000000000000 +0ce605ea47795e809fee2101adce225ebff3cbcc 0000000000000000000000000000000000000000 +0ce92cc948869e0d5eb46d388559405c9b412b06 0000000000000000000000000000000000000000 +0cf02d4e3f22b57765dd786f7f92565dc4b7e6cd 0000000000000000000000000000000000000000 +0cf947be15aae447bebc94bb010e93567200731a 0000000000000000000000000000000000000000 +0cfb2cad6f15e05e783f693f7b7929ad4b2bbe3e 0000000000000000000000000000000000000000 +0cfe9045d6e3082358edfa272665ba1d3f1a08b9 0000000000000000000000000000000000000000 +0d074d0b3b9e57b8956dda2ab3489e831d2afd9f 0000000000000000000000000000000000000000 +0d124c22c417bb1184a01bf66688d7dc298f356e 0000000000000000000000000000000000000000 +0d15ba15fb2d23bc2e3e8b174efac62e859584b4 0000000000000000000000000000000000000000 +0d1924ac1eacec85a574e352c7fcade30e42910d 0000000000000000000000000000000000000000 +0d2d89e892e15278c1da10e4571616c01c07026c acacd872a95f04b27184758e2cf466f20af8cce3 +0d3593dffe03f1878ef2d40a6a3709c3b3f697d0 0000000000000000000000000000000000000000 +0d51847db33da0af44e8cd5bcc926572af34901c 0000000000000000000000000000000000000000 +0d5b4716d8cf0215257680d6cbaddaa84438eac5 0000000000000000000000000000000000000000 +0d68e70bdd795aa2c3394b1675de0bef5c36a556 0000000000000000000000000000000000000000 +0d884010d7023e212a45d4b7367103f68329ff44 e25779320bbcdad1980efcf13c9b31569cd24dcd +0d8f18d2e465719c5afd6d2e84ef47611323dcd0 a841d607df32f62f4b70d119814452a574f295cf +0d9d96b010f6e5962e513cfa9cdb782c1b055006 3e534dbba14c20f51dd83dde3b8b6c1cd11004db +0db148383cca625eb2cc791cfb7981a5e9f3f55a 0000000000000000000000000000000000000000 +0dc267c1afc44336327b344b151584915de8583a 0000000000000000000000000000000000000000 +0dd71eb447ebb58a64298cdf2956acf505168bc3 0000000000000000000000000000000000000000 +0def7871a31cb81488f55a3e62d11e86865c18d5 0000000000000000000000000000000000000000 +0dff83856750125f5f6f17797d447af115993ec6 0000000000000000000000000000000000000000 +0e13150a6fc2d268fe04a9f672cca1bc32b6cf5c f1bfc9ee3ec1943f8293e3db91988a53b18c3431 +0e39178616322b24862fd6d46debe5e37765f2f2 4ee39e671f7b7ce2728ce8507a66b679e57927d6 +0e3b7ed91e018093403a5f687d15a09f2eac7dfd b254cab7d7bb1401f111262b45941d64d096de69 +0e3bf94519e9179059ba4aceb55e45e99ef06ecb 0000000000000000000000000000000000000000 +0e6387935907d6e52bba48e0673784501a9af80b 0000000000000000000000000000000000000000 +0e67b93fadea80778c7d708251e1c6946546f18e 0000000000000000000000000000000000000000 +0e6851ef73fe5b69bc00b0b56a0476007452fbbd 0000000000000000000000000000000000000000 +0e8245e855e1653d900e5c243b09477845565b2e 0000000000000000000000000000000000000000 +0e864c73791b8610a95f06da9fbb44bfa1cf75a9 0000000000000000000000000000000000000000 +0e95cedfddcc9151b6d259cf96e89f3315733afb 0000000000000000000000000000000000000000 +0eb6becf41ccc0adaae4da41804048c22b3e7952 0000000000000000000000000000000000000000 +0ec11c156cfd2169f7c0ccdf9720240ba97816dd 0000000000000000000000000000000000000000 +0ecaed80638ebf6de212e0324895873191b6ee3e 0000000000000000000000000000000000000000 +0ecca08551dcab24364ff3e1c02cc88b649a0fb9 0000000000000000000000000000000000000000 +0ececacf11f898be0d5e28f5a72f6d51049b7922 0000000000000000000000000000000000000000 +0ed8e2b4cbd49cfc942990bce76cd28b018f31ec 0000000000000000000000000000000000000000 +0ed8e456736be0d69952195923f260f0aa6ff3ae 0000000000000000000000000000000000000000 +0ef8aa02fd49af695a7510c9887eb4c7486d518c 0000000000000000000000000000000000000000 +0f1350d724eb5de7383d5db55e7c57b27f2d6376 0000000000000000000000000000000000000000 +0f19a01a67814ca2cdaff2a5255d368a33006dff 0000000000000000000000000000000000000000 +0f1ee46a50731a25488f33f24f58880d674aaa2e 0000000000000000000000000000000000000000 +0f23798f61ac964f9e71ef7402213392ebe91151 0000000000000000000000000000000000000000 +0f27ddbf263435ede816d8c5ef2d0a7cc7f1249d 0000000000000000000000000000000000000000 +0f3b3f868117ed0a8b13f7ca4db451b0d0ea90a6 0000000000000000000000000000000000000000 +0f540aea10a1429b3d8344cfd7ff31c31846aa69 0000000000000000000000000000000000000000 +0f5e411db979a8e604610b63301eb8ec84254c13 0000000000000000000000000000000000000000 +0f65be0b2208b7de5c09b3647bb4e71004ab6474 0000000000000000000000000000000000000000 +0f68120ea6abea0800ac5a42e154f4c260f5ab5a 0000000000000000000000000000000000000000 +0f6a6ca008ffaf9d89cd449e3bf9d05eec57bb2f a5522d241fb575866c2e5dd59d08ac5c6bb0586e +0f77d61a5a8e24be8fe9917cc736290b2e012a88 0000000000000000000000000000000000000000 +0f84c3edf2bb396fbbeb68014e245b4821f379b1 658b060df90fcd5e5c6ec81786b0e54bc923c423 +0f8bffaa2dbe8b2fc2bca36ed3085c84c7fc87d9 0000000000000000000000000000000000000000 +0f93f39aba4d240ef87f9b7663f2d9b037acfdc5 0000000000000000000000000000000000000000 +0fb689dba98be93428966360c4b31e0577266b5d 0000000000000000000000000000000000000000 +0fb9f1d89db13ea780987016ec2c7f36a5bd5017 0000000000000000000000000000000000000000 +0fcdf65bd2d0f1e6f59506e47cdbc494b6214eae 0000000000000000000000000000000000000000 +0fd4e590c7699e5200db555418d3e7a23592f86c 0000000000000000000000000000000000000000 +0fd9639d5bb2d4bc697116bf1a0d46e5cf3c1888 3d3e6278e655eeae1b1f13235a813cb6bb74bf98 +0fdfae1b0bf4d371af8ad3bfa6ad4df3da8d545b 0000000000000000000000000000000000000000 +0fe2ab2227a070fadb8a973d8ce80fa91745333e 0000000000000000000000000000000000000000 +0fe6bc366a01bc28170d618755916fb4377f1ec7 1572da4e0979048469f88aee0867cd57f36ee467 +0feb27315cdbe26af0477216a95310080b69ba75 0000000000000000000000000000000000000000 +0feb41e6251700327eafdafcc7716fae5243891b 0000000000000000000000000000000000000000 +0fec6aa09edbb2db15b2fd0bffdcc897a810b089 0000000000000000000000000000000000000000 +0fee1a175dbb5ef92ba4aee45ea0cedae479c835 0000000000000000000000000000000000000000 +0ff19f869920f18755d2bae880f57b5ffe95c7f6 caa6385e551040a211e9bdc2e042e915453ce549 +0ff4587f17b7d089bf8c5ae33591f3417199d0e0 0000000000000000000000000000000000000000 +10031d0b44e2ce276ab2917dd7d8eab768e26736 0000000000000000000000000000000000000000 +10068797577e14ed4ebf6909face0aef7e3f7d56 0000000000000000000000000000000000000000 +1017c6bac3a6f61ab471dc7988947143094ae4ad 0000000000000000000000000000000000000000 +101979e82e5cf444c13a6d47a9938d85c7780301 1a0faec47e3ea34c1cb6cfb06515354b9c915eb5 +102c705dc96a46d4dd5a79eec0d7a2d4207daeba 1604b39d7215622314492b4b3d06d503ebcad95e +1036e53d43a114e36984a8a3ea8fa2dee290a6c4 1b6f22eae0b43e91e40551b0f9aeb0ad4c26e075 +103abfac3a75ff03a651410ea8b98c6660375dbc 0000000000000000000000000000000000000000 +103ea8418651005535c500d7e411ca9ac0c3343b 0000000000000000000000000000000000000000 +103f123c544f229c3b547284f8f3538ad48c5b8f 0000000000000000000000000000000000000000 +1043e4e3d2fbe4bf84aae453c5d76ce5672f64b6 0000000000000000000000000000000000000000 +10485c000f8e854b38b0b2236736a60c1ed7f0b9 0000000000000000000000000000000000000000 +104f5f58e80011b6fb16f120c9c12b60781ef222 101f912242b8509d958c6364526ed45e95fe33ec +105b029233c48570ccd33c9c6e9947873a7340c1 0000000000000000000000000000000000000000 +1075617dcfd2307c644a1120a9b20375f32d7de2 0000000000000000000000000000000000000000 +107b0f0858c577b4896539fbdf39f38b4af27ced 0000000000000000000000000000000000000000 +10806b71a55a5686592ebc715c0be28b666b1fcc 0000000000000000000000000000000000000000 +10895ff6121989cf22d55aca845a034d72620f5b 0000000000000000000000000000000000000000 +108bb1b098f4f468ebd25f5f1052858d1e2c1a07 0000000000000000000000000000000000000000 +109358a6bec1fe51cbc9425937883e277fcd4620 0000000000000000000000000000000000000000 +1093d9380c9b51b40065f5ccc74cefc96f3600cf 0000000000000000000000000000000000000000 +10a022a81fe9404f61665df0ec331b04dba0f4cb 0000000000000000000000000000000000000000 +10a405075a40f63fc433cb6093c9211b7a4c3d40 0000000000000000000000000000000000000000 +10ad2363315ef8e40d2b6d304f5ee1371bec8e7f 6b2e683c5e9a4bd177c976c0bc5e845038884269 +10b46b9b7f42d951f2466b5b947747d6cdcfc719 0000000000000000000000000000000000000000 +10bd37807dbd512596781cc2104d9c5965404f0b 8490a720baf182129269091dafc58a5daff9343c +10c2c39dedcdb5dd5852ee4ae7622852388aa7d1 0000000000000000000000000000000000000000 +10c64e18804a58066c46909c0ac968a624cd5f1f 1b5e65e3f92111999b94ac8a6202f0d9af4ba428 +10c69a86304ae7e5c80de0642ee273ecd39abef2 0000000000000000000000000000000000000000 +10c92a10fa0fe2343d2d9ae59e807a3b03f7f8e2 0000000000000000000000000000000000000000 +10cde393082072c629ed6698546b39d69efe4027 0000000000000000000000000000000000000000 +10e548ac943d6e87b132a2fcd3784c21d320346d 0000000000000000000000000000000000000000 +110b3b9611dbeb5a241dfcc2be4a7850c3e1bd41 0000000000000000000000000000000000000000 +1123e290280462a7e87bab7c87a961b92de5afe0 a049b789d7f8c96a4a39b17042a21d5049b877ee +1125d61d0071b148ac27507341d1a52a8e81b62e 0000000000000000000000000000000000000000 +1127aedfe6d2ab6029b6c0e5e12474dbea99e86e 0000000000000000000000000000000000000000 +11320f054a19ac5afa0cc8c58d320311a872c750 0000000000000000000000000000000000000000 +113e07ff17ca8ee60a68636f0f82df165c535475 0000000000000000000000000000000000000000 +114156a84641f58cdb96167c828a76f560fc7d42 0000000000000000000000000000000000000000 +11466d76fe4687f7924a94584410d4b55e9afb9a 0000000000000000000000000000000000000000 +11525409947bbf998cb443dc90470611607ed4ce 0000000000000000000000000000000000000000 +11608ef8a3c5742ad6f4ad614adac958884c32aa c2fe4592124e6aad5e2146fdb2ea066b59ea9b65 +116aca8a438082beb759af5e45f76495b40104cd 3a157ada3b4e7c83f5abf681e8cacadfd6fa229d +116b56d16714b3cf25b34d2f5bf8ae0ef6e88c86 0000000000000000000000000000000000000000 +116eba55b0f3c580c39e0213d2c5b986229bce7a 0000000000000000000000000000000000000000 +11925be70ed772f8cbede6f4a9b54d1559851a49 0000000000000000000000000000000000000000 +1192a6eb9c206b3edd506000e59c533d41c07c08 0000000000000000000000000000000000000000 +119cf04c36f4df95604d90fc8d9cf8af71ed402c 0000000000000000000000000000000000000000 +11b3399885484688e53def447cf3ae52474f7540 0000000000000000000000000000000000000000 +11b71b47a41f600d2fa022064a3e59507e9fb402 0000000000000000000000000000000000000000 +11c169caabc638603453f1a9f2567d7e2a7d7c4b 0000000000000000000000000000000000000000 +11c346692fff56d10e6ec76536452e60fa494100 0000000000000000000000000000000000000000 +11cfc7d445ca9e6267b032510b4121db4e69f916 9752fdf0350c45a4832e2a679d9fce9fd527cfb4 +11d0a4ea0cff68b2f9e69023151047d1d9213d24 0000000000000000000000000000000000000000 +11d35b7a78c3d48285289d99c6dfaa9340f5eb55 2d521f998a8f680b6b585eef1fb8bf873ff8d052 +11d9f6800fffdde6677dee09e8d45756b2a03f32 0000000000000000000000000000000000000000 +11e20aad0ee9bf818b009a800d869dd0129e489c 0000000000000000000000000000000000000000 +11e5c63f16c9341218df1efd97942f7e9b9a6464 075c0490515a453cf65114fb4cb54e3be7026a8b +11edf02261a4911c5fd0af0fad8954c606daf4b9 0000000000000000000000000000000000000000 +11ff30b1ec692596a03b09543fe33fd843327adb 363651df458607a99ae907b9ea6a3cb9fe7b0d35 +121bb48a8f376e0257e4c2ced80978116efaa3a3 0000000000000000000000000000000000000000 +1228e7526fb0a5f09553c610eb774b73258b3109 0000000000000000000000000000000000000000 +122a47147380d5cf889cc8f7a2ed5ced663f0183 0000000000000000000000000000000000000000 +122d8411a41fe15ce9cdc2289f840b0ddbdf6087 0000000000000000000000000000000000000000 +1234bfa257eaac56d151be207754c9203865df4f 0000000000000000000000000000000000000000 +125961b8c49d5cea513d24c94f4355f64099b42b 0000000000000000000000000000000000000000 +125bda95e40d3eab6113ad1eab8f5e21c6cfcb6c 0000000000000000000000000000000000000000 +126c86fe19efa211001822856007c4e3062e2bf6 0000000000000000000000000000000000000000 +126e1d722c0ceae35367b91aa5325217c94aaed3 43c7eee6b09f17666a39660a1d168b2568ae9fa2 +1280e48768f60f03fc62d6bc54fc8478ca60b242 0000000000000000000000000000000000000000 +1286aa8783be3038a5518ed08f6def3ce90668ef 0000000000000000000000000000000000000000 +128c1fa2edbec6f180e624b62635b967cbe8da73 0000000000000000000000000000000000000000 +1292e9ec7ccf54741a101bde0f9b8fb910bdb2a4 c2af00fd79b286eb5df1bbded3b7a41211ae1146 +12a7ee734ac29755dca8edadbbcfad31bbfd39c7 8330a63b63ad62c6cbdcebb9b5b1b311bac722ba +12ae9504beb63f183e3ec8dd9d59c575a5dc9f16 0000000000000000000000000000000000000000 +12aec9ae1d229698414f0398d5019e518dd31d36 0000000000000000000000000000000000000000 +12ee205fd24c458a7570286b3e0c9c7fcb85e372 0000000000000000000000000000000000000000 +12f1230f94338715bfb78905394461e256f1f747 0000000000000000000000000000000000000000 +12f649959fe73d76c36a51f0126b41f14f4823fd 0000000000000000000000000000000000000000 +12fa16b758366c9063b0434da33ee16830033a17 0000000000000000000000000000000000000000 +12ff2154a8bb62640a7e12ee51f359eb23187eb6 0000000000000000000000000000000000000000 +130884418503cb822a06d99541248681b30f70e0 0000000000000000000000000000000000000000 +1316ee96125ca1cd5c155992edb47eeb750435ab 5fe23064f01a34084fbb332ed389442e0ebaeb0c +1321c1e2999b99db476f9cf6b073e6e65228dc41 81be26810db75e506ec4142490d0dc9dcc9fa495 +13287596a6b2f2aef2a8b992e12d3a382317cc93 0000000000000000000000000000000000000000 +1335035e6709dfe5a54143c63ff4a702d8b0aee5 0000000000000000000000000000000000000000 +1338905859eaa083f89a8819227073feef8836a3 b7329462b894aabbd374f90a06730da950db48ef +1349182c56e4d2e71ccd4a40a97490ccd73e1395 0000000000000000000000000000000000000000 +134dd0cc3427866104b860828fc38a629c1bc34e 0000000000000000000000000000000000000000 +135f8b1681b8daed97a024576f91e4f61828d757 0000000000000000000000000000000000000000 +13617eb3e7a7878b8f4e145152c4ef7c76af24e1 0000000000000000000000000000000000000000 +1368eed03769e62231c82231a0d5e1c1fa52c381 4ed3af2cee1506a2222f386a20d01edadf06068c +136a724b52aecd240a7413e83bd456109cf24cc4 0000000000000000000000000000000000000000 +1374d779bcd1afe87afd81ec0bceba178638d54f edc7f7ba7766d2f84f8734d5b9771c5a86449373 +137a4561ebd8e8e685f86ea92c37ec4cf23c2d4b 735c6268a186f377d64b1c1a1b490af9d610fee5 +13812b153a355faa230292f443a5eb432c6eecfd 46859e980e595b74f664c66d278fa77375f3aad2 +1394da736194f6105cdce82b1b4350370024d5c6 0000000000000000000000000000000000000000 +13960d90a9803c0da6aa41089a4588a5c31b45cc 0000000000000000000000000000000000000000 +13ab77ded93e12890f19e4398c241b36858a2a66 0000000000000000000000000000000000000000 +13b351dcd05bb39a7ab4795940dbc614d6d7d7d6 0000000000000000000000000000000000000000 +13bc87917806e5791009dc9709c53cc094a0849b 0000000000000000000000000000000000000000 +13bf0aa71ff434d557addb8104faaf134450ef3f 0000000000000000000000000000000000000000 +13c32b05925568490c05be7fab6531d91faceeea 0000000000000000000000000000000000000000 +13d5061c7d12bc5ad6884b89a190c5284c5c48b5 0000000000000000000000000000000000000000 +13ddb254333814b28d8eabeb21b8c08e4556e40b 0000000000000000000000000000000000000000 +13e2d0677ede6b9156ffd1bee97379e0822a01e3 0dead316b9d5b5869652a58bdca14dec6797676f +13e2ee90901420499dd7171a59a8a3f7028f2501 0000000000000000000000000000000000000000 +13e888881c627e8d512ee6e72a7af54941ade424 0000000000000000000000000000000000000000 +13fa9e82cd09007f416f2ae117f58594bfca6864 0000000000000000000000000000000000000000 +1407b9d01f17ddd71b358ba3e14c22026a088b67 029a4b40389ba53083583fb0effa871c0179aa45 +14106722f523cfd47f19d7c4b590de974ca78cd8 0000000000000000000000000000000000000000 +14478e3ab514dbcef7245b2cdb57bb31ce5325ff 0000000000000000000000000000000000000000 +14597de509540b9eab10cd752831b44904985323 0000000000000000000000000000000000000000 +145bf44b1dfdea385db0dd4dcc09e23e95b136c1 0000000000000000000000000000000000000000 +1464e2cbde5a8db4372c267632f3b7c90f9fdf35 0000000000000000000000000000000000000000 +1465fff56b165ffeb909ad08faf573226d40363d 0000000000000000000000000000000000000000 +146b44ff4b8ee926d2923a64c350c8ab9bc83ebc 0000000000000000000000000000000000000000 +14750dcabe29805479c3fed10152dee1ac4111af 0000000000000000000000000000000000000000 +1475af6ea8dbe92e3fa37dda9982cd2e18cee026 0000000000000000000000000000000000000000 +147b947ca08198965e2b26ebc0367e7154adc6d6 0000000000000000000000000000000000000000 +149175cad5f838a4e062c6d7c9c10605b96808d8 0000000000000000000000000000000000000000 +14936d62d897378754666a37d9fdf181a9655bab 0000000000000000000000000000000000000000 +149c66088cfd129caa8da85a7c40b0105e9635f7 0000000000000000000000000000000000000000 +14c04d2e54bb7967fc6c72e60ae62d8599212e0e 0000000000000000000000000000000000000000 +14ec8381294a9d0f7ba5113f38c16d16b8ffd268 0000000000000000000000000000000000000000 +14f1cfccecd17f22a4ac60ca145061edb981edb6 0000000000000000000000000000000000000000 +1502f72bb7008b5e9ad9cf7b8fa1c94fec5b6420 0000000000000000000000000000000000000000 +15082faa91b9098a41b1a5ae85e7a9e6b8f756b1 0000000000000000000000000000000000000000 +151149010a3d22a7d6171b8cb0628165d9b42126 f0ebcb6246a348517d96502955cc2b9cb645cffa +151a3ff45605f1bab098c7cc62c75c9d2d389f6f 03547752c039c49474cb7ab51b3c1f0e072b2582 +15291caab7bd9a5ced116857fea7d693eef8d6eb 0000000000000000000000000000000000000000 +15352bd981b5ef6db705a4f4214414642c34d9c2 e6e433e1a79b330abd291aa439353b65345bcd20 +153ebed6a7586e99800f707c1943dcbc8df179bb c59f2286238141ed2a435b6d34a2c7b9131c2f60 +1542284280bb85b0b04417e43c8d94ef8af78dea 0000000000000000000000000000000000000000 +154d2017df6ef91c7cff54a1fa5ef0a69a0e1379 0000000000000000000000000000000000000000 +1553a0c862c029a31a45f047cb6920b01e95a6c9 71e0035500ab8b0088a66a282727f821bc21a1fc +15618e1f6a79874ae61dc31e3bcd5e1f3177d7ff 0000000000000000000000000000000000000000 +157e72b1213bbcb3ddabf9e41c4c44794d8a0b66 0000000000000000000000000000000000000000 +158cd86a470b0c883cf2ade8e0c23840c53f4cdd 0000000000000000000000000000000000000000 +15910070f2bf3006f79e1c43dd9c2b56e45d665c 0000000000000000000000000000000000000000 +159138c5d7d35ccdada483f95cc3961b7e10e0c7 0000000000000000000000000000000000000000 +15b4c7520d09510d3ab56eed683aa0ffa4f8f3a9 005ab91b303688fc8384e2e974119b9b3d4adbe4 +15bd390f50694d1159d13ed6074e96ca2e7f4b70 0000000000000000000000000000000000000000 +15c1122f3d1c931e76d4c4a9e90227d22ad118e1 c2c02155f1d23a3fb6554870a694594e33cee27e +15c1305d3e2c0603ae4e68bd495b76f0c0ff0b98 0000000000000000000000000000000000000000 +15ce520692a37c7254da4e15a2c26b1b6531ad59 0000000000000000000000000000000000000000 +15d06f7fb8469cfc1df0cb98d85b8d2b08c91f7c 0000000000000000000000000000000000000000 +15e7cc4e9eb7511835ec55b52c24f95292b1e6bc 0000000000000000000000000000000000000000 +15ece47830a2d0d281a9752974cbaa888d56c2d0 cbd5ba7ab27c2800ce361759fce031f883ed8c62 +1610c921a010b315c9e14c88836c189f4192f16a 0000000000000000000000000000000000000000 +161605f1d765290506cc411d061287b95686cced 0000000000000000000000000000000000000000 +16334536dcb5182f26c0d58463bd15a124dd1505 0000000000000000000000000000000000000000 +1633535e93d02c1a15fe280858ee2c3c85d42f07 0000000000000000000000000000000000000000 +163b7bb6d08641baa6cef566f56611251e228032 0000000000000000000000000000000000000000 +163c1ba0c5e65ba5e336464968972c3194582733 0000000000000000000000000000000000000000 +163e655542c63eccc867648df51c558b2b44e1ad 0000000000000000000000000000000000000000 +166747f21d904c493603b5f84b6f72606a33c66b 0000000000000000000000000000000000000000 +166dafdd05f40a06f3a576147c384021b34e93fb 0000000000000000000000000000000000000000 +1676b19b39d643cfbaecce0b6364b9ef0145b748 0000000000000000000000000000000000000000 +168a58b1fcd4749d6603938f2538c3bee880946f 2fdbd75dde559f832e45017f99c4754a7d576d88 +1697d8ab9f8e5aa7022b773f5e0aac98180899e6 0000000000000000000000000000000000000000 +169c94c93e137f997816d962f91cf6d3815a1666 0000000000000000000000000000000000000000 +16a34bfcca3c6f438c54b0aeb0d5728d9187f592 bd76e8dad9005a2b6d4810daa9bd90d84b5ba29d +16ab5e42bdef6e08e2afaf7ad3921ac8178f059c 0000000000000000000000000000000000000000 +16b058d72e2a399e4f57e8c246c90d1947e8aec9 0000000000000000000000000000000000000000 +16b5bd5764b95148234d5c981bdae39d45cf8d28 531889158e6b86b17e9c2326d060e9b70cf7491d +16ba3b7fe1924034c19769564e59a9da46827696 0000000000000000000000000000000000000000 +16ba95742466e3fe7c411068f93b5ac85618ccea 0000000000000000000000000000000000000000 +16c6251a58e9e17ed497399569aed3a1adbdf784 0000000000000000000000000000000000000000 +16d0fab9c71abd6b66a7eb4da8a4a31c6d31238e d24cbba390f22f39bf26afac229ebb52e361875a +16e9c7abe0b50c1c7fbf9b7aff934a403ad1db9b 0000000000000000000000000000000000000000 +16ec3b1920b738d7ff5010f5b49440442cecbbce 0000000000000000000000000000000000000000 +17079eeca0578f4da51ab2bd3295d46392488156 0000000000000000000000000000000000000000 +170ee5090d9e1de0cb9155b0baea3a7c2299468b f01db6d427a8a800eb6797370d5b403585795409 +171241e228819f23f9c146333d200d9cb4a10c68 0000000000000000000000000000000000000000 +171cf910a4bd59bfcc6c233958a0ce32d280ed22 0000000000000000000000000000000000000000 +17241ec450893a979a8da7de27a971d3f0fa22e5 0000000000000000000000000000000000000000 +17255f35a4f258762cc6fa42002aee8a2f38996c 0000000000000000000000000000000000000000 +172c4538e2a8e35192de2a95f005a443c678448f 0000000000000000000000000000000000000000 +17485f67fad296dd242a6cd39b69629256a844e1 0000000000000000000000000000000000000000 +1752217130fe675470fe1b53e37598fba452ef00 0000000000000000000000000000000000000000 +17649dcd59814bcbfe444d45f242c3516d40d5f4 b5c3881d5614c0b2ae42f04eb9f8f85b819c627c +1773b3d7543477608aea8aad5e9485457722fc51 0000000000000000000000000000000000000000 +177456cad11d78f4f6ff22fac7ae04bc0a7bd33e 0000000000000000000000000000000000000000 +17779b225e7b3f0507852ef67890657c59b08be5 0000000000000000000000000000000000000000 +177b5ea3aac73e68b6c924c96d0da41c5ee99170 21d37f5176e488ff42852e104c2d8a0b212eea9a +1785e9508f68209a538bb2f10283f310534bb83c 0000000000000000000000000000000000000000 +1786a4a38f0d58eb66d7b9f08a309b8f014d559e e0fe6cd71a6d0622a4155d8d39ad5134764587cd +178bb469ca3ea509142ac9c24d17bf3afc25a597 0000000000000000000000000000000000000000 +17b1c2dc0f503962abe90d1f2772ad577bfbf068 0000000000000000000000000000000000000000 +17bf0c2c3c722bf4fb020703b055cb17155c5ec9 0000000000000000000000000000000000000000 +17d437104ed27adce74cfe27500e8204ecda16e7 0000000000000000000000000000000000000000 +17d867070613203d06f17d6c925fc03c1d9b3edb 0000000000000000000000000000000000000000 +17deefe78ce837ef66014fe585ba677a8b23d50f 0000000000000000000000000000000000000000 +17dfe3c6fa32b634d846bf26b73f7d09fe800f21 0000000000000000000000000000000000000000 +17e738691844fee2f35c5475b64899452a84d566 0000000000000000000000000000000000000000 +17f36c6caff58a745d30d9d584a86998162b0b72 8b8fab006ade705f64c21b990c58cb1fd1ad7b6c +180eb5cda78482441251910b7ce81cded02db6a9 bb5fabacaf7c35ccad8f27c6cb0aa9794d72cb17 +181c6c3ea0c7d554152908647545a14f4ae669a3 ac25e8a2ceab2d9c0d0875505c751db5297e38a0 +1825825284ff8d65998940111e0a4589184b9308 0000000000000000000000000000000000000000 +18482f3b93237328098e94119241e27ef1b121b1 53794497eb55b3c73ba2c7016b7d11f0dc16facf +1852b873ee1e944b6e9d07ced7ee87117136dfd8 0000000000000000000000000000000000000000 +18637f9108f57444e39b90a4f50cf27329a88c22 0000000000000000000000000000000000000000 +1865f328aee7f5e0b3180509d1ddf484fce0c08f 0000000000000000000000000000000000000000 +186b18297febb5c9feb2f232ecd5d820285b9347 0000000000000000000000000000000000000000 +1872c1b7f880bbbf67099bba4b37984b26f94269 f76de669ae90d9ae8dc31ba0b51d0bf4fdfbb1d9 +188593d3692b8e0eabab23b648c5c2b55da173f4 0000000000000000000000000000000000000000 +188fb9ce2b1c919c852f6e08030368466a43ff94 0000000000000000000000000000000000000000 +18967a2f3f04343de4a5cbf22a47b6f9572205a2 0000000000000000000000000000000000000000 +18a152ee4c9a34c70e4a0ad880b5a6ac64aa1cbd 0000000000000000000000000000000000000000 +18a8cbeeb00ee39e5bbdaabdde097ee9f8a75668 0000000000000000000000000000000000000000 +18abdedd1703a938bdd36226f129f97f30b50c95 0000000000000000000000000000000000000000 +18babce6d1f7cac3f7dae49599592a2c92127f97 0000000000000000000000000000000000000000 +18d99e6ebd2425a1196a886a740bfbd61ac2fca7 0000000000000000000000000000000000000000 +18df497826a3082b4a1d35913c65c6d57031ea01 0000000000000000000000000000000000000000 +18e679e508bbf7d9b1a356d3c5b0eacda46aef30 0000000000000000000000000000000000000000 +18eb15f01ea5e05cb4a0e6d11d0b922ceeddc38f 6ca794e37b388a0c01bc5fbc9774a1343b8156e6 +18ec0d0514def714d1fef2e5bbe9d3589f481208 0000000000000000000000000000000000000000 +18ed5acce9661639e1698f19c194e520eb5c93c1 a7851bd9943654f11c0eeb34f52c0cec7a5d5cdf +18f2a110e2771e9e8269dafbe208530ade4f79b2 0000000000000000000000000000000000000000 +18f91d01a5bf0f31faa507b1da1b589e191d1f9a 0000000000000000000000000000000000000000 +19140e74379318ef6b3f76c3b1233fbe91f30736 9586c9d3a0f380d013209bcc37e85d4d018fa8f1 +1915ae626b778a9fc887fb1aee9499c0cb205c88 0000000000000000000000000000000000000000 +19220ea2f21ae017c783db0ac8c67f3725c6d668 0000000000000000000000000000000000000000 +193098e080f41b3fe881164280eb7863d0bc5837 0000000000000000000000000000000000000000 +1941a57ad4b90e261b162ee33af20086e273f71f 0000000000000000000000000000000000000000 +194576e7e3df29fb387b51fd51aa4c9bd33d99ae c838730801d571b4c92eca2dddbb9cca3c672c41 +19463dd35d9285b7cf61c7db283697cfcc834f31 617d88791874552131e9220f31ddb6692616833e +1947e9d699f8a5d1643bee8c97dd4e363647d866 0000000000000000000000000000000000000000 +194ef814417b7d619ee36107616be8f092ed5f3d 0000000000000000000000000000000000000000 +19538aa169b708dac3baf04a1315bed1dd25eac6 0000000000000000000000000000000000000000 +1960a222f93f1abc821e9e7c2073a2f52c033cc9 0000000000000000000000000000000000000000 +196938708a6983907aba6735c7bd33e43796a0b5 0000000000000000000000000000000000000000 +196a3066b8897d3654954de9e3ef95548f3b95cf 0000000000000000000000000000000000000000 +196ed7489165116b4ca1b2184dbffcd6bc1afd28 0000000000000000000000000000000000000000 +1978a482b744797d1f7b06f12d6d449335353227 8f324cc1e963a379a9d0b1699ccde5f21ee3361d +1984e31bae49a72f09967a0a4fec227a3b906711 0000000000000000000000000000000000000000 +19943206f5b1c96458a758055c401c7df2dec27f 0000000000000000000000000000000000000000 +199b8870c99f760d8d2288ad79c3b41fd5f9b083 0000000000000000000000000000000000000000 +19a9c73da2abc13d237d00fa09e7f82656336e84 0000000000000000000000000000000000000000 +19d6e4bcef17bbbd3ae0936bb99f91c045af9d81 0000000000000000000000000000000000000000 +19d7935ac2d78716e43d496cb2b90ec1da1251dc 0000000000000000000000000000000000000000 +19d9edc216236dba862158f9ffb107bd872146ea 0000000000000000000000000000000000000000 +19e2cc0971b359138d706b2ea7245323737fa48e 0000000000000000000000000000000000000000 +19f2364d4e2b67750f210968cc3101a4c5ccc0a3 0000000000000000000000000000000000000000 +19ffd136a7d2137f3de0896148d9a39f469ac711 eeda88350c74d1f49da85ee6bc75ada2d1fe74a1 +1a0153bdf7d0f681447f1acc105652bfaf38b23f 0000000000000000000000000000000000000000 +1a104d95701751f3d3a4729ed241e58e7cbeae20 0000000000000000000000000000000000000000 +1a1e0135e977440be91e64d14e3d2b094238facd 0000000000000000000000000000000000000000 +1a2877f2144e0f655caa9006166256a817d239cd 0000000000000000000000000000000000000000 +1a2a22ac4a93afe190ab393a669a549285c7010b 0000000000000000000000000000000000000000 +1a370840d2d110c373d87b5babc6c0c633001d6d 0000000000000000000000000000000000000000 +1a398570cdbc27ac981c42ad61cbb0fefebf02a8 23d6f84a1330052dc248b80684e02b7aedecf72c +1a3dc799c20c4c88f343b65f40e38eba813264a8 0000000000000000000000000000000000000000 +1a42bc4b8c58617c4da0f417eb570993d21882dd 0000000000000000000000000000000000000000 +1a44fe85d27c6923bab1cbf05929cb7a787d1a4f 0000000000000000000000000000000000000000 +1a49d95c6b4c7ab1ed4b0069635be120d8a3355f 0000000000000000000000000000000000000000 +1a5352a35b361f352bdc237ed8d5bad2e212bb1e 0000000000000000000000000000000000000000 +1a59658b5e3f2dd8f6f47b3a9f2431aaccb09d4e 0000000000000000000000000000000000000000 +1a63ab8816e525dc3dee4641c1ebc399e7b2b684 0000000000000000000000000000000000000000 +1a689bd7c7e0aa45aee2b3c4ed56736de0ecd7dd 341546eb6f28d1a2cb2bfc23483b7443f13451d8 +1a7392f64c1586286526945fe9d3c00b684f8fa2 0000000000000000000000000000000000000000 +1a8cdc97c60883e1c127ec3b5f60f8fe56231501 0000000000000000000000000000000000000000 +1a974f8dfcd7850c70d80133ceecee08f6671cd7 0000000000000000000000000000000000000000 +1a9e58cc5b26c6d9863ec12db5775958e44fd726 0000000000000000000000000000000000000000 +1abb34529bff3a72096f9d1eb466672fecbd1b07 0000000000000000000000000000000000000000 +1ac5b1bf361de7d8c5b2d31c9413bfa9a22fd446 0000000000000000000000000000000000000000 +1acfec69d3577078953c8a9aa8cba29b9d8478f4 f0d98e1a47459ea65a80cae88d67916522e6b98a +1ad3f5e5383eadb08a4900c0804301c0f943612c 0000000000000000000000000000000000000000 +1ad4edef1ae4803572e5aafad25f8f3735493a4f 0000000000000000000000000000000000000000 +1ae06b1ed1d1870236f24e7894dc46af25cf8c90 0000000000000000000000000000000000000000 +1aea4d31d1dd1b5d27b28d9864c5214319b10040 0000000000000000000000000000000000000000 +1aeb913888ab1ac657016692696f77b493395f04 0000000000000000000000000000000000000000 +1af4f13158aae6bed57a210b15f9d997b7f45319 0000000000000000000000000000000000000000 +1afe195d1cc2d2b0be5167b0d18a056a521ecfde 0000000000000000000000000000000000000000 +1b02c0195fdd87f43ecd469bd084925148b255b4 41605f5ae8918d733fe257a65b054646a214ced3 +1b0c11d96ce270088fa1c06fe7500ad33fffbcf9 0000000000000000000000000000000000000000 +1b0cb3d1a35c94fcf3dd191579a7b8ce37f2bfec 0000000000000000000000000000000000000000 +1b198dcc043ef2223e053a46892ee320391bf9f7 0000000000000000000000000000000000000000 +1b27a26e7c835e9f6fa52d22a6b01b4689850421 0000000000000000000000000000000000000000 +1b286e5e1ef355f816afe2071c080041a32cac9e 0000000000000000000000000000000000000000 +1b353c675ae2cf5a843891875b731eacfd7a84ad 0000000000000000000000000000000000000000 +1b40298b5db0fb91e266a95afaf7e37d6cc21fbe 0fb763d46cd8ca89738646da05a1f7c722d7284f +1b4ad078f8c5a3607c47f0c4aac70129a157b60d 03155d319dd552014db561f42743c14ece4c8fa5 +1b54b85560b7c1e4602300bb5b1b62bb880b2228 0000000000000000000000000000000000000000 +1b55a1dc5161291d13183af6b32608fdfbc8fdd0 0000000000000000000000000000000000000000 +1b57b16a174545cc7b4c1e871f729364789326f9 0000000000000000000000000000000000000000 +1b65d407d929f20832b45ce2325cf420c578b60a 6742c4064e4e953ad0150d6b98e3270df57a3c85 +1b675923488fa7bc6ff93d001cbf786309a9d8d4 0000000000000000000000000000000000000000 +1b74e110dd2b61678d2c66012e7ac2d5fe071bc9 4fbbb840001c97ff6dc0f64b8df3a34c235e98bb +1b7df1737218b4e8ace472f02d302430547ccfdc 0000000000000000000000000000000000000000 +1b904ab22a00ce9b7facccb7faddd89d7656e5f8 0000000000000000000000000000000000000000 +1bb7dcbb4d41926648eba53673e0cb4060330625 0000000000000000000000000000000000000000 +1bd2624dcb6751c9f31ecec422d5ec9852370397 0000000000000000000000000000000000000000 +1be53699ff241cf9307ea5f0f781f7195e7df645 0000000000000000000000000000000000000000 +1be8edc8958afb8947ca8bda1fb79603f1a0c360 0a1912b14ed0b3db61a105db2745c60a34306620 +1beb8af8c105e1bcf0a6a6d7e6d38be4f38b3288 b72ec3f95aab2030046bfbb5ec5a24a2ddf0bf9c +1bec22207572dc611ea270089cdbd967ecb064c8 5ac47745172f2261629a2a596feb2bafd648e3a6 +1bf8e53503ce9af467fcd0cb6f3bacbb961f2a09 bde9f18a2241572254d16da4ae55ed881e05199d +1c0a19156949ce638d5b9c900c3d7201d9bf2c42 d190a292b6b715a3bfd5bac453611625963a7122 +1c1388d38822b510ada4c15d0a5b9d8013d2e81c 0000000000000000000000000000000000000000 +1c199862c3debef1dc93df361d4088f1329ffb34 0000000000000000000000000000000000000000 +1c4721a410e6a699c8c90463fedf7d3fdc4521ee 0000000000000000000000000000000000000000 +1c4985517ad4c236ea797566d43c5de5e076de82 0000000000000000000000000000000000000000 +1c4d227f58a3e1ed2b270807e317341603a35d9e a2f27cabe6da567285ac694871769233df88a23d +1c6fd8e8ff38d0259af7fbd9903f361ecfb19225 0000000000000000000000000000000000000000 +1c8398c8f3a0e5bc47ebcc158f659d6d04972fcc 0000000000000000000000000000000000000000 +1c8dacbeb8559e94667f879c5f4505e3386f2bf8 74d68c83e90ae6a72923b46f38b08a2f5286f9c1 +1c8fb6f1a441092dcf670f4279a787ab0ba2d96a 0000000000000000000000000000000000000000 +1c96521c82cfa7414602e4f4da64e629b6c69c29 0000000000000000000000000000000000000000 +1caaaaa07221d96ed4a363a06738fee5a9814fab 87ab7934e04d5b7f1240e113d737076e059dad9a +1cac1a29a1b02ad23ab82d014f06b6d4940b2266 0000000000000000000000000000000000000000 +1cc7c733ab66df85f217cfd41f610e367ecad47b 0000000000000000000000000000000000000000 +1d09b16db32b957b246630102dc37270d9678b08 d19454909dc7fa8bb900ecdac19aea30af6dc7fe +1d1116bfa33d9ccb713ebba7658b552f05ac02c9 79f603915369208ee13ff862043ae1b245b452a8 +1d2eee6d35229bbf554f02e9ce76bcddc059b0b5 0000000000000000000000000000000000000000 +1d34cf87d5c22f7fe2cbc5da578c22f26411f281 cad17aac8163548c15874df8be41916ff4783ddd +1d35f0b428953795b8c9a75836d7e363ee0638cf 0000000000000000000000000000000000000000 +1d3d085e0278d9341d7bd10065eba584cb25773c aa44072a0a581ac04430b6a9f88b74f4713d192b +1d538dcf865a2638d98c4b77218e5c9454ebe0c2 0000000000000000000000000000000000000000 +1d593963abf3fb1620be3e35bc647b40791b6a5d 06a93f35df4f30b71eb362d73497666ccb987e97 +1d6b0a686ad7a71774297cbda3c234044cdfe582 0000000000000000000000000000000000000000 +1d7aa767eee626236a8e9f476f292137cb82de8b 0000000000000000000000000000000000000000 +1d80375475a1163f097ade0ff69163304e331347 0000000000000000000000000000000000000000 +1d81b81bbcb6020c80cf02ad0774626702077058 0000000000000000000000000000000000000000 +1d848476af80215e28714f2fdf543a5112a9efc5 0000000000000000000000000000000000000000 +1d986d105ae07f106c45acc008c09b8dcdf153a5 1acc024efd354c6fe3bdde75cb9b761c56127101 +1dae1fff4fcd8170f38672593a30b023a66c052c 0000000000000000000000000000000000000000 +1dae8dc97198486032006bfce09c6402f1fd18a7 0000000000000000000000000000000000000000 +1db34f580168971e2b8f05928fd115af4ed2c0d5 0000000000000000000000000000000000000000 +1dbab5dc1f1cd03fc164f4e1db4cfd5dfde6cfb9 0000000000000000000000000000000000000000 +1dbd8701fa26ad91f202e93455e74eed7c70c620 0000000000000000000000000000000000000000 +1dbd8bc7e9e6fc5b2298ad492677159b05d50f6a 0000000000000000000000000000000000000000 +1dc9bcc2f0cfde7b94db58b3fdb4c1989c8ceab5 0000000000000000000000000000000000000000 +1dd1cd5f359e82b6a3853ca4272c881f70596fe3 776aed09aca62b64de14e5eadbeb5fcf738bef75 +1de73556db82f9eb83e7ad9e14e51120f7dba597 0000000000000000000000000000000000000000 +1deb0a2ad71fd34a90015bb4eb99e6c54f8ccd3a 0000000000000000000000000000000000000000 +1debbf287fb431d54e0e9ca7be27a43c737e8a04 0000000000000000000000000000000000000000 +1df21ae0783190c4843bdf43c817455b8b1c1927 a4db3cc56952117e14033cafa7a310b70ff5e7cd +1dffe4f0381fd7df630696ab312dba21a7bd8d95 0000000000000000000000000000000000000000 +1e42e51df55562aa7bccfe36a0dfea31a5a7daf2 0000000000000000000000000000000000000000 +1e57b38a9057b32f3e626be550e9c6dece2904bc eb56f9e4670e88e3b27a2cd61da3f2d8d66c18e5 +1e65ae1bc700c3762844678536cce5a4fbb3106b 0000000000000000000000000000000000000000 +1e66305dd6772074a0efff852b84f3bb5cff970f 0000000000000000000000000000000000000000 +1e6e65407a97c68edb5a8f380d59ef032cf74c9c 48bee34e4cd83b556f4785fa6c8ca61f7759c2bc +1e735f425bea62659705cbba8d850bdbacae756b 0000000000000000000000000000000000000000 +1e75f9a5d7021a8505eeeab730339b3b7e619baa 0000000000000000000000000000000000000000 +1e83b7424944269b0a582674c1a28ee59c62e9e7 0000000000000000000000000000000000000000 +1e9112a4cfc01a54f265858c81b0effb8a897976 0000000000000000000000000000000000000000 +1ea00a77522875eb0c578337527ee4ef4efac934 47896d61007c508276e26f5af4b1160a97668b1f +1ea0f5b782e5e909af84c8835485d38e6bd5cf05 f738f1e40cb90118bb9ff296a40d1e5ebc8dbe23 +1eae0461b6bdfdba04923171678d18124de5cefd 0000000000000000000000000000000000000000 +1ec51774e69e45c8e10dc4e09d92e11c4c62b88f f2bb3108073e1c40ddc0159b3d3e748f45583227 +1ecc6fda7fe9689814d7a21b784b453f11ea6586 0000000000000000000000000000000000000000 +1ed02e3cbe7a6b484ee7db224e056ae2f0244a30 0000000000000000000000000000000000000000 +1ed30a088561a76b084038c93590e7dd875c759c 0000000000000000000000000000000000000000 +1ee0c615d06b286f3f59538500543412058120d0 ae049c896e819a3f9879847f069b37a9986e1c2a +1eeb31ace4425c2860a343df053b0a71b50010fc 0000000000000000000000000000000000000000 +1eeb35c088d4236221da31a7f20d5bdccbc31431 0000000000000000000000000000000000000000 +1eed76aa2c1242d7804b3a75634dfd49fac707ba 0000000000000000000000000000000000000000 +1ef0f3bc8e04f1363e97f650131752b9128713d4 0000000000000000000000000000000000000000 +1f00b44c38927d31d01a972da3e5ddbbcfd8c621 0000000000000000000000000000000000000000 +1f0e133eb90a734841fdae6d319297fd4a2f0475 0000000000000000000000000000000000000000 +1f3c5711b4bcdbe9509a401c6734fefeb72261b5 0000000000000000000000000000000000000000 +1f3daed77b83686717c36b344f381014220865b6 0000000000000000000000000000000000000000 +1f61a31466434f159ae711f2c91e7408c0f2c720 e168f8d43d670aaaac6ed933f7f7a1bfd45cca5b +1f72ebf108467d15771a823f6fec7cac3c9164ad 0000000000000000000000000000000000000000 +1f815a2c11f8a79023a84ceceb0e08ca79927808 0000000000000000000000000000000000000000 +1f9bff4da91ed7c46bb372f44476a071d98641a2 0000000000000000000000000000000000000000 +1fb854763a88d125f3cb018482ac8f2d480a2740 0000000000000000000000000000000000000000 +1fc5629fdf7270812c0e174e93145a8672870ef0 0e0876376cf7aa9469d32de11d8108550ae7492f +1fd8b8ec8109ce0655d9860c8fb036d29584c457 f26dfee78801ee4f8d0a34a17fa4de3e5608f062 +1febce67cb8473c8f4f266a83f9a006f29a4bcd1 0000000000000000000000000000000000000000 +1ffc0bcaf215b523739c9589021a301e91d9eb1d 0000000000000000000000000000000000000000 +201e90e9ce887f8547fb3e60a3e2aa5258e52d68 0000000000000000000000000000000000000000 +202c684e12982a9feddaaa395d6794b57a9a178e 0000000000000000000000000000000000000000 +202fbe12a57a7f87cb747db8f00ab28ef4401ab0 0000000000000000000000000000000000000000 +2033a944404c92b1700c6c9ed9dc62c6f77c303c 0000000000000000000000000000000000000000 +2049b7379e4a7461c54fa8e11b8c7837e0981f8b 0000000000000000000000000000000000000000 +205fec19b9f4243ce9cad57d6fdb3ec9642e3a6e 0000000000000000000000000000000000000000 +208d0fd2a1fb6c6bd5e258c1e458fd32e42a1a27 0000000000000000000000000000000000000000 +20aacc1a21510dbfe8cb21fb6ec2fc8b7720f2aa 0000000000000000000000000000000000000000 +20cd5a83f639fbe022c6646076222ba8f118a58c 0000000000000000000000000000000000000000 +20d90e463d69b8f318ee5167ab995c32ff0de5af 0000000000000000000000000000000000000000 +2102659a374021940837a49b78ac73547f36dd31 0000000000000000000000000000000000000000 +210b33357086a80959e83a4ce4fa9a18feb684ce 0000000000000000000000000000000000000000 +21253f6d5e01500bd569e5b7f9d9b80c227b6088 0000000000000000000000000000000000000000 +212840898f980b7b4214fcd6a329012693fde1a7 0000000000000000000000000000000000000000 +212b6aca4e97d39cc558b129ad0acf6b908a9964 0000000000000000000000000000000000000000 +21325aa3e8584a0ffc631bbffd985086293bb92b 8f07829b49d1d54e5ef74cf528601d316d80847b +21354db68b417975956be01be0c4cdff10f71492 0000000000000000000000000000000000000000 +2139d998763807b8da0e5124465d08ed8e5ccd2c 0000000000000000000000000000000000000000 +214774b07889286f9019830465a9fbd8a8696450 97eb92470fe63afaf7c13833ce5875f157668f32 +21488c605f648295e6eb09d7cb9600ef8830ecb1 0000000000000000000000000000000000000000 +21793261d6860fb6e607b71fd95c0bd320724764 0000000000000000000000000000000000000000 +217d40adc8ffff423a6e6cd1ccfca9af96dec2a4 d2c83307631699394137f3b2bdbb84af4280454f +217fa59322071a7f339c42f3a3f0cb25675c78ec 0000000000000000000000000000000000000000 +21925a3c9fc81d701797335bd0b8ad8427692dcb 0000000000000000000000000000000000000000 +219da17cf516a10361e3d2b1c52812d9d07f9033 0000000000000000000000000000000000000000 +21bed6b6c9849ba2adae14f5b8d251eb7cf4ef18 0000000000000000000000000000000000000000 +21c1f14bb5b53c541eb6c25b5ab3bd0dd59c94e7 0000000000000000000000000000000000000000 +21c1f20053abaff839b0d156332bdb45e651cd76 8c73140a77eaf85717b12d4d3db4fd189eea41ac +21cffc032342c7fdf71753c6114aff48acfb69d3 fd2680ceb5975fc14ca8d2a96314a93478bc0f21 +21d06888888d3a14bd5e0a3860e68b950e71432c 0000000000000000000000000000000000000000 +21d71e96435ce03f21a6a55715acc2b0a4a81a77 5630e0557bb0b80cbceab822ff107bb6eae297eb +21e19a093e584b54f4d477f3dcd34a2605fccb97 0000000000000000000000000000000000000000 +21e91c6709c2d961f7721d29ece4ba6bc41eb61a 0000000000000000000000000000000000000000 +21f668714015dc1ecc93cde92989029650cd7b35 0000000000000000000000000000000000000000 +220b43f45511f1f60a558b3cddee60846210b0aa 0000000000000000000000000000000000000000 +220f11d07cde6e708f2114dceafd86d09ce9f700 0000000000000000000000000000000000000000 +22195f48fdf96e64d7a2f184abb8a86c412f766c 07f0974bab24b25997d85c488e263cebd09d0978 +222357487b67282c25e62e8ec3fa3afb4da93c00 902901d20809472fe869d6d90b4ca1e7a16b018d +22308bcc588459fc8cb0b00cab0b1f07859e668e 0000000000000000000000000000000000000000 +224648bfd02e274c5fb58a8c6441325685a0a649 0000000000000000000000000000000000000000 +224a67d38957dec108ddbe42f57c6023c6256b96 0000000000000000000000000000000000000000 +224bc86910d1f52c55f224a220c952adb02643fd 0000000000000000000000000000000000000000 +224d9ad46d0700d2832369095a17c0a6327172c0 a62c83bd0fbdec18473dcc904f5a0a6e4067c567 +225056504aaea0f7abc9a433f4744b816afff1a5 0000000000000000000000000000000000000000 +225077609405211bd54b6c4d7643007f6cad6c95 0000000000000000000000000000000000000000 +2258501030355fbda99c62df5a8d6a0579906360 0000000000000000000000000000000000000000 +22613a17ed445d90993ec5a4ac2e96adf329c3f1 0000000000000000000000000000000000000000 +2272b87a21e9dc2d5b9568c1ba0a2d1af71eb065 0000000000000000000000000000000000000000 +227d99d23557fab82fcb7eb7d6e8fa34b486719d 0000000000000000000000000000000000000000 +227e74dd37d6f6df5ccf1a0b792d32fcc0a43d01 0000000000000000000000000000000000000000 +229911725685c1b5b5d5b750b35a922f0eca6a0e 0000000000000000000000000000000000000000 +22a14ea4fda6b579831c321eef094947aebf850a 0000000000000000000000000000000000000000 +22c4ea17b4ec89bca30858f6c0e626e92379595b 0000000000000000000000000000000000000000 +22c7a3d13f334c7fa99db02a9f22560ef13aadd1 0000000000000000000000000000000000000000 +22fca8d31ec3aa47a3d047b9efa7ef63663e9619 69d67564c745d5309c149ca1ee16b71106bcda62 +22fca8df537f3a9fd32962c3f06d841dc4ac4963 0000000000000000000000000000000000000000 +230a17bb134f68e6df18f6e3f13c23c9b13d3a5e 0000000000000000000000000000000000000000 +230af2f1009769756ade41e855be6f74e4985898 0000000000000000000000000000000000000000 +231ab6bcaff3b3f79839db9f3325abcf1f50f916 0000000000000000000000000000000000000000 +2322792c511e1b43023427150bf40b05fd2c1e37 edb565fbbb7f94a5c93056468ce4836d6721b85b +232b45f9752de022f9192dc00ade49b2522ec37d 0000000000000000000000000000000000000000 +23395c5776a781f64a7dc7bfd2867ca83eaa0bb7 0000000000000000000000000000000000000000 +233da50838de49415a3662ff96166657c6cf59e4 0000000000000000000000000000000000000000 +234504c6a1a53be8630b1f2eda8640f04a92327d 0000000000000000000000000000000000000000 +2348814707ec6b65cc321c5a186adbf910db7cbd 0000000000000000000000000000000000000000 +2351e242848cedcbb2e621ab155358e41c18d20a 0000000000000000000000000000000000000000 +235be5cae9e27c8ecd9526037095c7709be11851 0000000000000000000000000000000000000000 +23683059064a527fe48db5697f61a2ec0527d97a 0000000000000000000000000000000000000000 +236a48da0bcbb94756555b01115621950aaa7156 0000000000000000000000000000000000000000 +236a8873938bf56f372ca9510645221ea7b25179 b5b0daab966c4597ae353646ebc9ad30ca6798fb +23718baefde8a2a21f403ac0f13e398e0af53214 1c0112b6259f478addc6fcb9a5fba67c08949052 +2397e9d94370f212668e10eb3eecb21354cc7350 0000000000000000000000000000000000000000 +23a8991f78e09e8db3c25af1e31529257a41cfa2 0000000000000000000000000000000000000000 +23c8417f4ac56ad8750090139a7f4d2f20a9236d 0000000000000000000000000000000000000000 +23c8fdf3569c92ebd8f7bc765bfb6a6e57d1515f bfb8c52d93f153341fb1699528f84e2b3c60378a +23d0cdfa019d2824cbf7cd775503a0ee0d683476 0000000000000000000000000000000000000000 +23e3b3276d8de93c064f6eb03c2d6eafb3a36146 8eda9538428a171b3855992f706753445577fdfa +23f775a52f790e18783bbe5d7d347868582491cf c59948630749aa7ddfc77dab7751460433a44aa8 +23fde0538fc0e0b1099eb659b32a38cbd406ddbe 0000000000000000000000000000000000000000 +24106939b43659e307ee6cd9403374d2ef2889e1 0000000000000000000000000000000000000000 +24222f640daf1b1e35c885407559de4d065caa62 0000000000000000000000000000000000000000 +242428a0811e63a7fe18b23dfb3adf69bb7a3a50 0000000000000000000000000000000000000000 +242edaf3118bf07f668f345f77272d79775aa29b 0000000000000000000000000000000000000000 +242f2ffd25d354b3653045196af592b0ac30143a 0000000000000000000000000000000000000000 +2436d7382bfbf8b9ba501d88f682e952bdf27146 0000000000000000000000000000000000000000 +243a111c19f2939b0a5d27c21db302f8349049eb 0000000000000000000000000000000000000000 +243d6808f389c44e4bca2273d5cf9a26f66683e0 7ce3d1a3bb883a965851002bc3482826f6550c19 +243eb23ed6e67804b64a9b82c50d54b35094ef78 0000000000000000000000000000000000000000 +2441224df7c6196f8b0c008c7c61cd2b992eed3c 0000000000000000000000000000000000000000 +2443fa0d3da5ec4ef09d9e6cae2491a117fac77b 0000000000000000000000000000000000000000 +2445be90350984e9404dadf4897b0463d769f7f8 09922ea834eeea2f25d0651e0443ac65d860eb94 +24469a7216516789af227349e5bdbf5aceb63703 0000000000000000000000000000000000000000 +246039bfa8a16c042a10a87126289de82d18b321 c7c7621084147416c914dc5101a16889ef476ba3 +24762361a65e81a583644b25a39288b8beec4505 0000000000000000000000000000000000000000 +2495dea83fef872752120edeb842be492a0723d4 0000000000000000000000000000000000000000 +249ff45503c26a38cdf72fdc4972030ae4756e55 0000000000000000000000000000000000000000 +24a002e0feef8033a21ad999303b30bcd8697263 0000000000000000000000000000000000000000 +24a08175432776f94b831b970b3c2bdf6ebd0302 0000000000000000000000000000000000000000 +24bb7f47f8c0a960b3c38b3b75e2ab57b3527315 0000000000000000000000000000000000000000 +24be7921cc5ecb1cc9b193c5fc46a3cc50c25886 0000000000000000000000000000000000000000 +24c2a0b989846f6a23f17dd142e6ffee1c161ea5 0000000000000000000000000000000000000000 +24cf4335b786c9675cb77a9c1da3cf0fe66d58aa 0000000000000000000000000000000000000000 +24daf0ceab2bccb8017d2ef78a980f6a054df443 b81d32eed607abc2a4a4f8dff0b4db8946916f39 +24de0cad6e84980a1009ff4cd83b35d5ac9aacc6 0000000000000000000000000000000000000000 +24ed6e3eac9258986fb22f503fcd2166462db538 0000000000000000000000000000000000000000 +250ab7b642f733af019f2ffc2f05042edaededfa 0000000000000000000000000000000000000000 +25136afa5a35160c75ab6e8bd297fbab479efd74 0000000000000000000000000000000000000000 +25145266a70a961e6899368951d95ce41fe55f5b 0000000000000000000000000000000000000000 +2520fa811c2cd4947fcaac3d8ecec008607a2102 0000000000000000000000000000000000000000 +252d08c48c2fc6708d6c3d039250fd70840c0c1f 0000000000000000000000000000000000000000 +25395760922737cef9efd8c54f55af26bb16ca67 0000000000000000000000000000000000000000 +254b70f04e6daca40898fdc8046ba02c09a094b3 0000000000000000000000000000000000000000 +25535088409aca26dc95761de66d0d349b4cf89c 0000000000000000000000000000000000000000 +25556cdfa7971348f4a83e1f8ea4e44243c28794 0000000000000000000000000000000000000000 +2557ef037c372cf45644af9e355ce67fd19e4e14 0000000000000000000000000000000000000000 +2559e7f6d7df0f2948039c59daccc5d25c8a5148 0000000000000000000000000000000000000000 +2565ec0db09b5d9f64e6bf60c3c48c5fb8a1b5cb 0000000000000000000000000000000000000000 +256b5133b81885c2defcf5c7bafa679c8ac8bc70 5dd2e904326942eb431cf0c62793aaf3ace9a01a +256d86f99fe6d88d5a4450875b1a702a78ef2142 0000000000000000000000000000000000000000 +257107c56a3ec218cfa5e3d6368f549414e1a806 0000000000000000000000000000000000000000 +25765f9f02ec3fbae8d5d1073300429a422387c8 0000000000000000000000000000000000000000 +2583b89b3cfc4fde04ebb03b257ce1279147cc53 3c60487b03f743a9bd43b490eacec789df2e3127 +2595c94cbfc0ce7991acf4dd761969d6130958a2 0000000000000000000000000000000000000000 +25a297fe117a644bd3b99a13a7cc55ee6df46ea1 5f193b40a1601c0910269b5b95cd80ffc3eaca99 +25ab8f65b84e8010948492d5327619d5bc1a5cc0 0000000000000000000000000000000000000000 +25b54f6da2d4444a78ce1d7655b89d83f992e7c1 0000000000000000000000000000000000000000 +25b7357d84efa790081b89226959404310c68855 0000000000000000000000000000000000000000 +25ca05e769c50b2dfd9b1681226a986444044cb7 0000000000000000000000000000000000000000 +25cd4a760476adbf79d93f2622cf3f8ce246ff0e 0000000000000000000000000000000000000000 +25d45ed06009063f6d5a0c46367b63c2279c0f4c 0000000000000000000000000000000000000000 +25f1974d42b99c9202372df41ead35d10d1d7786 0000000000000000000000000000000000000000 +25fb628c9ece3c18b869e8a5bc09592e5b488961 0000000000000000000000000000000000000000 +2601edbf0d7fd3e73b8f98e09a3d28e586e78a9d 0000000000000000000000000000000000000000 +2605650f0a60108187a9fb8a796fd2a38ef5983e 57d22a711e3e1a71b8f217d2eb5aa8bb6c7ae80c +26071cbf9728d6fd907057b81382572b3201565e 0000000000000000000000000000000000000000 +262acd4b4c611dfb0e248e67858e5baa5a9acce3 0000000000000000000000000000000000000000 +2630ebb7338af4d9d9442f6fedacc7253db57621 42bdfd80a41555e4fc276612238f33fef04ffc50 +263a8d9954bdcd242cacba4cd53b3de90adbc01c 0000000000000000000000000000000000000000 +264226bf8907fd7426c40349314d1a7a337999ae 548c4c272846b1982f17a200dc5e713141d2344b +2645555c49a5dd6b198697b7dc9622ec21acc185 b60e0fc91d48a00a7c9a599a0864c16ae97e7d9c +264611d48707c3367e07e44597e229bc8c0cc896 0000000000000000000000000000000000000000 +264bb2b9545bdf7ea0051382c7c6d65a692d17a3 0000000000000000000000000000000000000000 +264eaf8b2c8243bd7e68165a4052a0069285c301 0000000000000000000000000000000000000000 +264f9100aa9397248a413ef9684ae56db7678703 0000000000000000000000000000000000000000 +26561e317919b48a173628dba660bb5ba20d640f 0000000000000000000000000000000000000000 +266896bd32eaac76c22e0aa1b19f618c819ffbc8 0000000000000000000000000000000000000000 +2672575c7474474f3fec2c215c6b135004b6bf05 0000000000000000000000000000000000000000 +267daff1a60f87a2193e00ae183ca4ebcc8aa6c5 0000000000000000000000000000000000000000 +2688845de024458b2aac8086248e982227660e10 0000000000000000000000000000000000000000 +268a39819d7bc247a93cb1834868eacea6c56442 0000000000000000000000000000000000000000 +2690da5a98bd008f1f47f6c45c9d964afc19158f 0000000000000000000000000000000000000000 +269181b6924e6b2f49131e1d891074689902b2b2 0000000000000000000000000000000000000000 +26943c403dfbf2bcdf7d97e85f8ca4defbdbffb0 0000000000000000000000000000000000000000 +2697ebcc2cd7dc101fac65eee528288334191f87 0000000000000000000000000000000000000000 +269a215b523e8ef617a6e5e45dce098a1a2ef998 0000000000000000000000000000000000000000 +269c1c72cb00fa713c6f363d0e8d60be612948af 0000000000000000000000000000000000000000 +26a2ef12ec03ecef21e0d0f92abeb0612cf5b06c 0000000000000000000000000000000000000000 +26ae20897812dac0aee89e1c2c97a7d6c5ac26a8 0000000000000000000000000000000000000000 +26b13677730a89b6c2bc3dd4c76052261f7aa61c 0000000000000000000000000000000000000000 +26c2358ec69fc71a254795b89ff2471b8f26ce90 0000000000000000000000000000000000000000 +26c61d1791fdceb36811e55f1c77c490d587a050 0000000000000000000000000000000000000000 +26cac432b0bcf3bd26f5de4a1fc625f6ce8008fc c0e18c8a271223dacbec1e3d3b034dfb98215ced +26d3781021a686b91d51ea83e1e30658b4429c96 9e18b45c41db752e090b7126a17a6e3695b5e741 +26d47689668d066879a0e445a87bf212792b473d 0000000000000000000000000000000000000000 +26f52f52e6869e85fdcafc28d95d79af3ec92c27 0000000000000000000000000000000000000000 +2707493e77b3dcac79e1531bd46fe550e2f36d9b 0000000000000000000000000000000000000000 +27179a94c27f1c61a678791b19182f265446c8ee 01494a4d81d7ced97af62c4b1bd366192ef9c408 +271e1aa66af24548f93b999a91b609d80bc2c90a 7b52bf471635a0022ddd20c21f92f76607cfb739 +27215ddc80d6b4789596b5aca71efa0b80e37f99 0000000000000000000000000000000000000000 +27258e911c93a932b61837c4f4c202e62a544840 0000000000000000000000000000000000000000 +2729704cd3e1131d1a09bfe57a9a3e9828d2fb08 0000000000000000000000000000000000000000 +274174068f22d217bf52949409a2d32670b93d8b 0000000000000000000000000000000000000000 +274acb583a7d04f90ae66410ef0fdbd967e745d7 74e32b6d3e5d62f907579cd12f7707fccedd1b1d +275dd9d7525b1f490eccaf1e6e60829ae51bdf5d 0000000000000000000000000000000000000000 +276e5eeba6b890306450ab6536086c2f215015e8 0000000000000000000000000000000000000000 +27755ece64c74a80aab7dc57311b81ba46e047f3 0000000000000000000000000000000000000000 +27779300f388b3aae0d245bc173d3d9c49a6fac5 0000000000000000000000000000000000000000 +2779e986a901f92cca1080e58643504df956c4b3 0000000000000000000000000000000000000000 +2783cb75ab6a2a390ded1cf345ee587a18550702 4f6ebaf09254a90f5c76fd25cdabcfeee4ac99a4 +2789c0b83f1b01e9a5092732a71fd51f69766398 0000000000000000000000000000000000000000 +279673c4c8a3c4be4688e90298f2cb185c628d20 0000000000000000000000000000000000000000 +27a2ad83b84b606ac05d985d4abfa262f29207a0 0000000000000000000000000000000000000000 +27a986cdf744aeda0684a20e6a4c2aff4ddd67fc 0000000000000000000000000000000000000000 +27ab7f7655bd74aa038534288d66e8bc8b22c801 0000000000000000000000000000000000000000 +27b3384176d9a98b7ab7904701db9e830a89883d 0000000000000000000000000000000000000000 +27b76232075639fa60dbd029a71f24c346c1ab1c 0000000000000000000000000000000000000000 +27b81b94629236752651042f8de428b2ae66a4ec 0000000000000000000000000000000000000000 +27bf18f676878e7052d63304cd585c0af26aac14 a5e056f804ea046af0383a253b33c58d71111f63 +27c0e7828e515cc2c184ab073825013678301927 0000000000000000000000000000000000000000 +27dd1e9b0fcc73ee1bbcd28efbe060a104014967 0000000000000000000000000000000000000000 +27f07b92b2bbb087dbf64867aafb2e69b5a70704 0000000000000000000000000000000000000000 +27f3fc42c24a4e7775897fb0295be5f3ca93db68 0000000000000000000000000000000000000000 +27f4aa2188e47c1495293a4eee58481ecdff345f 0000000000000000000000000000000000000000 +28142d5cb4319e6b02a37a56691c150e92ae8957 0000000000000000000000000000000000000000 +281fc856a92cab1f2b5005b558d0797e240f7d70 0000000000000000000000000000000000000000 +28255e473400055bb1f18d8b1c6ac5d7a7247a13 0000000000000000000000000000000000000000 +2837c4aac2d85fb73d5e9d0a56eed85bad78d6b2 0000000000000000000000000000000000000000 +284fc64c91db3c547e756f47c7d43965a808ce23 0000000000000000000000000000000000000000 +286c317e0e50fcedcf485d8f0febaa197d629e63 0000000000000000000000000000000000000000 +28882567b8877024ddaf5acd4048ae20609b96e0 0000000000000000000000000000000000000000 +28969c3f33ed7cbe20337c344a73bc3e51ac2299 0000000000000000000000000000000000000000 +28b226e635cf147a33f0263cb83eb20ad53e72b9 7a1955e0dfc9f2d1eb3bfcc967b03ec65434dd18 +28b44e6fe8701cbcf2eba450846140ee8f8dc66a 0000000000000000000000000000000000000000 +28bba06a32686eada87c30b32ed503d6334aea5b 98a5a56a5bdc17a8235ab884f9cdf9d785983d53 +28ced82da4883769f882e61187c073dd26c61a81 0000000000000000000000000000000000000000 +28e1ecd5d48cd4499d5feda1487815c7dd4a6f77 0000000000000000000000000000000000000000 +28e43a803181fe2b58ea12f14fc14a9ac6b0b13f 0000000000000000000000000000000000000000 +28e4a7590fb3525e30970112191d72eaf048ad6b 0000000000000000000000000000000000000000 +28ebfebfb747c1fd0b867b02bc32469a24e1f62b 0000000000000000000000000000000000000000 +28ecfed1257444acc72d94dcbaf53b6146e9344f 0000000000000000000000000000000000000000 +28ffdac5eb0811543643d7bc07d23280b892503b 0000000000000000000000000000000000000000 +29173e0a576f3cded6eb77e8116263c889cbb502 0000000000000000000000000000000000000000 +29273c60f0b35d5a5a02894979b1eab3746cd9c1 0000000000000000000000000000000000000000 +292a28b71e25b66a3e69389c399d44414378417e 0000000000000000000000000000000000000000 +292b8ed8da8b92c48fb2a0a58d222f5a2e5236bd a6aa9dfc927b322ec8ee1336ac42c80e18356a7a +2937f02a1c8440a7633590032da91d797e0bd3d6 80f7aeb7ead8695ecfbb883276420f141e0d029b +293e6c2dbf13628790bc48516117153707655322 0000000000000000000000000000000000000000 +2944d5eac97ab1f65ae268973a746e090e417e7d 0000000000000000000000000000000000000000 +2950b5acd6cd527d4a67f29fadbb4712b432eb6f 0000000000000000000000000000000000000000 +2980d58e82a7e76dfa132f54f65591cffa0e8a7a 4b3960dadfdab86a285c2362cc66686273ef8f13 +2984d30ebcdb82b332af644a8d0e806748ade5a5 0000000000000000000000000000000000000000 +2988c4bfdf143ccad46ba04388909fdf6ddbb953 0000000000000000000000000000000000000000 +298b3e91a62ecc2438380bd3389dbc5e5a8abc84 0000000000000000000000000000000000000000 +29acad79de4f530891024081ec73d49b97d6eb70 0000000000000000000000000000000000000000 +29b1a1a9acbc65d7b2961b3f08e681a1e59d7c38 78dcd8f066a4aee1a5f871dd2e20a86902b343e7 +29b8144d1241aef8959ee57c2b5e998e337f9947 0000000000000000000000000000000000000000 +29c9d0d156548a3476e6e076c4f86d015b7a88e0 52f2cd14fbf597456f9b985ac9b4203f794a43e9 +29d207c6c04f46726fa316e493946d737ef05469 0000000000000000000000000000000000000000 +2a08ff5bbc4e834d181e4f5150425e5f73e18266 0000000000000000000000000000000000000000 +2a10cd95d254001c397a7cd28568e468800e6644 0000000000000000000000000000000000000000 +2a1c346691e2d880aebe7cc0b313418ee677c282 0000000000000000000000000000000000000000 +2a22cd16b348440639463ac0a337eb80bbf50e5d d33532df8b5239fdd306de6cf7aa92e2ad36e5a4 +2a2770d0afc3163bcccabc0b0417e44749bab7c6 0000000000000000000000000000000000000000 +2a3aad4c8d6e76361a629b01ddde0baa37e71fdc 0000000000000000000000000000000000000000 +2a42c36eb7d83c0b83f8263b7989f84c5ddf911d 0000000000000000000000000000000000000000 +2a4a7803ef5620510af8aa59398968c2f5cd17ac 0000000000000000000000000000000000000000 +2a4eeb39b6635b1b06a0674294d33ade05b5833a 0000000000000000000000000000000000000000 +2a602ca43acbd1339118096954b0b82017d9f57b 0000000000000000000000000000000000000000 +2a62c5a2874d935aba09c1995d022988ac793609 0000000000000000000000000000000000000000 +2a6ebec9caa7dc525348e0ff1081905f5ee84d80 0000000000000000000000000000000000000000 +2a782477162590ae8651fccce6925ebf03e5a9a8 0000000000000000000000000000000000000000 +2a7c75559aad4023c28dc37b4447a8094f7cfde2 0000000000000000000000000000000000000000 +2a7cfdc7fd5872d42c1e822fd7bc48778215c2a9 0000000000000000000000000000000000000000 +2a83fccfd66f7ca6d87b8b2638b84bb1104e43be 0000000000000000000000000000000000000000 +2a8996d414e3f546c5c885441174dc1a6b223e4f 0000000000000000000000000000000000000000 +2a94e2115277102d7b93f4d1f5868117dfeae200 0000000000000000000000000000000000000000 +2a955473d5ad48d68036fd4217f0a5e038de4349 0000000000000000000000000000000000000000 +2aa18905cc001a8a01dc1121033df75166e1b0c8 c86dc775df862c98cd396c3e0ef3090291b1a2a1 +2ab1effa7651fcd783f3438c4ea66eb1bcae9ad5 0000000000000000000000000000000000000000 +2ab393fa126f77713cbe1291fa2d393bf01a9f40 0000000000000000000000000000000000000000 +2ac0b8cb97eb03381f0347afd4cea2112a6df823 0000000000000000000000000000000000000000 +2ac64648d8354174c73b624c2cc6579037b9df15 0000000000000000000000000000000000000000 +2acc2090eace70abbbea5278cfba4ba5059bebf2 0000000000000000000000000000000000000000 +2ad17ba74a3604f405b490a201c17e74966908a9 0000000000000000000000000000000000000000 +2ade929ed5d33c3b9f49756b5a6f9b30b3694082 42e867d14cd7427a7a7b74ad0f9c5bf2fe1a0d94 +2ae43e80a98fdab072ebe9393dd28c28ba20627a a60770110c249ac0b1f43866b8da10358bf1903d +2aeed15ed7d7df8d8d855bcc2c021dff828135e9 0000000000000000000000000000000000000000 +2b13d3f71f049df68fa0432e212f4c9ad3e683c1 0000000000000000000000000000000000000000 +2b159ad0e10cc8ef6f6ab4a8789a5251af378cc8 0000000000000000000000000000000000000000 +2b1613f3fc29b3a08f475cef591a4d8698dd7469 0000000000000000000000000000000000000000 +2b1d0826c524541c454a8db61979e06c2dbae17f 0000000000000000000000000000000000000000 +2b21a91f679004960bb22f26d5b8087979a49878 0000000000000000000000000000000000000000 +2b26975a4fe6095e765d3fbccf0d709ce5487670 0000000000000000000000000000000000000000 +2b2bc251d17c1ac9624494d6a3373e5e306fdbba 0000000000000000000000000000000000000000 +2b304a73d4c4194336e8b1f6be7555898a8065ad eaa0bc292d2a6c57fc4d8c9e1435f5d2ee68e909 +2b34d2dad6c7fcdb657437a5c320a0c655cdcd9e 0000000000000000000000000000000000000000 +2b3abef4f9f18be6493381c303e9aef9f10cbc2e 0000000000000000000000000000000000000000 +2b52cbcfeaa25b817b6c6547870d12746d767976 0000000000000000000000000000000000000000 +2b82a74b805be0a4a9971b3fc0cbc6cd11fa2518 b88e021ca61b521d819ec51daf3ee37d7fc34228 +2b8fe221d5b36528d7ebcb8533904b3d859be899 0000000000000000000000000000000000000000 +2b9d7f46bfcef3e2d5da3f73fd4bf83be677c79a 0000000000000000000000000000000000000000 +2ba6f70fcafae09d44bcf1d00be63cfc23563ba7 0000000000000000000000000000000000000000 +2baa14cff03ae6541200785f44d100a8ac1bff12 0000000000000000000000000000000000000000 +2bad4dadb527a963657888b955bb21fe637d4291 0000000000000000000000000000000000000000 +2baf2f4fc98fb84ed2249c57dfeecfc105c4e486 0000000000000000000000000000000000000000 +2bb12033a171b25df1ecdd96e40fd48bd896b004 0000000000000000000000000000000000000000 +2bb28f0b61c044a9bfc06aea2ea8a9992ff2d5bf 0000000000000000000000000000000000000000 +2bb383cd0630fd86967fb08aa48238a7c6ecd59a 0000000000000000000000000000000000000000 +2bca1dfe916074898f93522f0c4ec0f0f3e25902 0000000000000000000000000000000000000000 +2bde9e8f799b9f57e5a71074bf325519198c1d7c a406f09813121bfed3ec468db629a5c0149c061a +2bf6b366afb4d3eb488bc2ceb6b8ac026ee63824 0000000000000000000000000000000000000000 +2c0a32003e69f5308f29669e7a036f55286e93ad 4fe8a59cbc5419fc2423981a7c0fed1973af90ad +2c107b02ce9cf6fcd9277f842e06983a855a366c 0000000000000000000000000000000000000000 +2c21e3ef7b97847a4a4f4decdd56ed545c1ade96 0000000000000000000000000000000000000000 +2c262aeedae4ba436f0cc7b7427713916f595ff1 0000000000000000000000000000000000000000 +2c2bbe672eae87b4d3a6f3d68daf3e300b4b0ce8 0000000000000000000000000000000000000000 +2c2f973e7afd1f49994a6298715066ce7e0c40ed 0000000000000000000000000000000000000000 +2c3aad7c28cbd70d2a91726c669d6199f0d21600 0000000000000000000000000000000000000000 +2c3f6af1fbe5e208affb8be16c01c704950d89ea cff135e3c51387ff1c448244f92082896ca50077 +2c41ac9aafaf93ba94c3edec874070e8dcf16412 0000000000000000000000000000000000000000 +2c431c0a422c63ef20a68c1de02ac6a9b82a971d 0000000000000000000000000000000000000000 +2c4d5176718d0cd2d8275a6b37c130a557538ba5 0000000000000000000000000000000000000000 +2c5aa40cbb8bf1e96c1ccce6273579e70b69ade2 0000000000000000000000000000000000000000 +2c64dad7e22336720bae38a226bc3e4d8510aadf 0af4ec714050558ed01b5b786012a6ff7ad06c90 +2c753650f439a5dea0e826f8cb6eeab43dfa09a0 0000000000000000000000000000000000000000 +2c7663a0c709a71b7126097fab97e7d190024fdf 0000000000000000000000000000000000000000 +2c7d44efe25d033345aa6f1c4cd51234f0eb78e7 08e598e60d784eded41b2f8e2a94bcfc46f5aea1 +2c99ccfe6caae1eb6fad3d7848f9229cbc7b1481 0000000000000000000000000000000000000000 +2cb8f0538898dcacff1e369541634ac94d6aa6a2 0000000000000000000000000000000000000000 +2cbb0fa352ecaf09014f26ab5fddc8ca89e63c2c c453dd9e34cbe6e0cea2d8c3028d931a7425468e +2cf6873912c2ec2a52a6fdb700a84e157898e6fa 0000000000000000000000000000000000000000 +2cfa031f31bb59e6c345a5a01a9fd04c70ea5dbd 0000000000000000000000000000000000000000 +2cfaf7a127d914b467cef800e2bdff3879e28639 0000000000000000000000000000000000000000 +2d0af629aa344f4085ff4df8c9b2c0cf75c37e8b 0000000000000000000000000000000000000000 +2d231927f12848062225ad746aeff29a51a77b25 0000000000000000000000000000000000000000 +2d48b610f589a1488f1ddf9ca087b28c6685a592 0000000000000000000000000000000000000000 +2d8212e792f7b566c26cebd2b277eb771afa626a 0000000000000000000000000000000000000000 +2d8640a76ca79104516c7ca936e073217624e981 0000000000000000000000000000000000000000 +2d9809891aa510a83f4942aab377f7861ef94ad0 0000000000000000000000000000000000000000 +2d9a007c24d0581a34857aa5dc14b6c06188e267 0000000000000000000000000000000000000000 +2d9b2c5420f16b22415156126eea75d63a00c7fb 0000000000000000000000000000000000000000 +2d9cffe643e513b0c9e11d7efb1ece916d8b8ce9 0000000000000000000000000000000000000000 +2db6e64433a39a7dc298668851e64168924dbe0c 0000000000000000000000000000000000000000 +2db9643cdf99ad2135de897a7fcd530da3e2c8b5 0000000000000000000000000000000000000000 +2ddc0a7889fa9088f623f989c906fc4427236bc4 0000000000000000000000000000000000000000 +2deb4aa30b67354ad887c27edb675d976967216c 34279d1475d935ab6c22ee3c7090e5e9f79d6526 +2df890a8cc139c8ea4c42adcada4c6cc7ee76aac 0000000000000000000000000000000000000000 +2dff9d32910c5bb33d1f0ad859c536cd94ca6416 0000000000000000000000000000000000000000 +2e03505627875bb49bf9d66cdf93e809d8e5297c 64a8ae4db60436a365884a14e30412266cb89868 +2e07dc2bc037fa124241d2b7c375b51ade4c0e8a 0000000000000000000000000000000000000000 +2e12d5de6ff280ab459aaeea71b299db2e163309 0000000000000000000000000000000000000000 +2e2651b5c815ace3c2e6e7f2752e3b67b049798c 0000000000000000000000000000000000000000 +2e27cd960dedd6b2a6273f8639183131c792d867 0000000000000000000000000000000000000000 +2e2ad57dd30be497de97e2b892342e66123850bb 0000000000000000000000000000000000000000 +2e2c3cf06416daa5d1a35680638e5fca984920a9 0000000000000000000000000000000000000000 +2e3055ebb27a86defabe8dd6734389cd423d7c9f 7cf130c01aed0f9f105e2007d7b280c97b69b064 +2e51617707964749e557cfb3a01c4629cb953422 0000000000000000000000000000000000000000 +2e516a535264233599df1e3b06facbf90bcdeb79 0330940a01aa1f5ecd6eb40b237353d86f5f40a5 +2e5c5f89058cd9a3c83c28c6636f60d7d268e15d eac28557a254757ba840a4cea63b01e21dd3557c +2e6219b882c198beb25e6c619f4656a42e3a169e 0000000000000000000000000000000000000000 +2e6b4b5d38c5ea4b238bfe6405387cc877adcfef 0000000000000000000000000000000000000000 +2e6c5141ede85ea2d9f64a38daf9a0f19f426a36 0000000000000000000000000000000000000000 +2e77c9cf91e2879b63e5d09b25475c916174b9ca 0000000000000000000000000000000000000000 +2e7866ca21a237d817fe45d70bc3db5f8247e1fc 0000000000000000000000000000000000000000 +2e7c33afd6aeb72855a24c3d3e2a14bed9057faa 0000000000000000000000000000000000000000 +2e7e2dd62c9b81bfd813ce46d817fd0219af7826 0000000000000000000000000000000000000000 +2e81fc2ea62093b454faec09eae0515a243ee5dc 0000000000000000000000000000000000000000 +2e85912032267e19ff77fdc475ff8c99d87c0aac a49e504959183d2a50a9688a3730c03257cfe77f +2e86f2e9a8367045bdb13f78960be7cd3ae5eb54 f87d2a10ad03f9d4adcfa14c2f0791b7fd69768e +2eb98528c7e2bbc122ed156d8ec971413b6bb1d4 0000000000000000000000000000000000000000 +2ec0688b1a615ac6b7af4ac074569786c84ed9d2 0000000000000000000000000000000000000000 +2ec2ca00c96dc3a15abfaa076d91819cd974bd46 0000000000000000000000000000000000000000 +2ecd4625d517349997fa567e30b849e87cac6616 0000000000000000000000000000000000000000 +2ed2f7c1d2734fecfb892210df86dae72eb45f6d 0000000000000000000000000000000000000000 +2ed5c8d9148eb55298b1b28a739570164dc243e0 0000000000000000000000000000000000000000 +2efd4ebd2a9e0c90dec51cf867ef2cc337ac8006 0000000000000000000000000000000000000000 +2f131d9fed3323ea6cef620537ef9fbc27e8d475 0000000000000000000000000000000000000000 +2f171a3476ea0f3227ecdcb724f1d1af5406ec0e 6a09ec37b0a99fe867326e1f60db02739bca23d7 +2f1c74564aff0b4b22dd9c6561718ade0bad3858 0000000000000000000000000000000000000000 +2f29a302da73f352772ff4cd4a88ddce389ba1cd 0000000000000000000000000000000000000000 +2f35fc3245a2f868b76357ae37c5b103fd411c4f ee5316d75e7cd8a69322a5a2c1089b335c739566 +2f3b42c3bf110960158f4c7c8628c9b6f718a657 0000000000000000000000000000000000000000 +2f4a1c8007a7bb6ad90137a5166563703c6bd81c 0000000000000000000000000000000000000000 +2f5b9a0657031d9a106d2d86a0843f81bb185a10 0000000000000000000000000000000000000000 +2f5bd230345b1340e295dc41cce5979aa6df7f20 0000000000000000000000000000000000000000 +2f6447897fe75a660e61e1e7f61a10036ae61ac9 0000000000000000000000000000000000000000 +2f6e323d69fb8c1e944ac4299750e636ce571076 212c737c4d2dc51a91d6e7495aaf8a105c0caf5e +2f7307f2fd4e488a6c943b37dc5f4dc6d0fa293d 9b369fd889b9a4396fc0ee1b3189abf602bca14e +2f7cd057554f032315ee3894ff35586158abc4c3 0000000000000000000000000000000000000000 +2f8b3d2a160f5b44b5aeaa3d83ff2025302ce1e2 0000000000000000000000000000000000000000 +2f8cd46bc36d03216c99968c6272d7e8b8d102c2 0000000000000000000000000000000000000000 +2f8f460cf87de553146acaf0b2f1a6c073aee39f 0000000000000000000000000000000000000000 +2f9a78b3724d505af3b44566d4ab7e664094367c 8891097d41266349b9d167307c395833c038e24a +2f9acdac0036bcc3437e72501822c67f7ac4ee38 0000000000000000000000000000000000000000 +2fa91a81bc01bfeac0e66e3fa0b76f2852f6ffbf 0000000000000000000000000000000000000000 +2faeb0b0e3e7b453488f8c14f761e9c67002985e 0000000000000000000000000000000000000000 +2fcda792101dbd5bd3af6192360af7c0df471269 0000000000000000000000000000000000000000 +2fd11fa8f6098bf8d05b41dbd97a7cfcc1a44be2 0000000000000000000000000000000000000000 +2fd15910ed989cc76d34d41ca24b85b72a7d6174 0000000000000000000000000000000000000000 +2ff2667c3cb0e5fd6d23b5e6e9754e0921e080cb 0000000000000000000000000000000000000000 +2ffb2735aa3718370d6094186142f9cf50b194fa 0000000000000000000000000000000000000000 +2ffebe7f9bb9dad71e3a84bc2f4cc62d6df3a441 0000000000000000000000000000000000000000 +3000226a93dd506a8e0d745d587c19ab0c27b997 0000000000000000000000000000000000000000 +30077d373215b97c8c7bb1228d794fd99f869e84 bf61fb30d576e107dac67497d57bfff2f40dc36d +300a597ed3d99fadff06c0811c27363e3d9c80cb 0000000000000000000000000000000000000000 +30163703f23d934463819bf1e195a7326eca0dbd 0000000000000000000000000000000000000000 +30227efb678f0a5c3727a9ee3dec42721778ca3d 0000000000000000000000000000000000000000 +3024fac84587682030684a7ad8f93434e1d64e63 6c8a485b9487924e426f6d25b3abead1d3b6f3c3 +302659648d8b8fe622abb68416b9e3d1b0879580 0000000000000000000000000000000000000000 +305f0269a70568e61af3b58b560bbcd4c5f30c5b 0000000000000000000000000000000000000000 +306cd32cd9727e7b17a4117c84f39bb661a90e88 0000000000000000000000000000000000000000 +306dda230f197c230efd71f15953f2a06eb82289 0000000000000000000000000000000000000000 +307d569ba9073ba1ce792588bdea0ae100bfdd62 0000000000000000000000000000000000000000 +309b0ed355ca3e57b4ea46b4323933653bffe999 2ce77a54df40fb110b97501dd764ceb3f1f37f73 +30ad5399ac38c9f3cedf031a933a463d2f802811 0000000000000000000000000000000000000000 +30af040e1b94adb468868924acfc6a737220f736 4a40cfa5cbf6503a176bfbcf30702219de014f36 +30af74a9fc3c6363451b960140c616c391c56238 0000000000000000000000000000000000000000 +30bcea6ce4b5cfe3abbf11f6b51e19034c2bc8ef 0000000000000000000000000000000000000000 +30ca593e5b588a9ec73f85db5f9598ad7a956de2 0000000000000000000000000000000000000000 +30cf9b9e88272b5e87544e20b86d8d2628463282 34c384615f0b617c9fac8cd922a8fa4e81035ab7 +30d996971fc85b3c400f06578c95555142e477ef 0000000000000000000000000000000000000000 +30ee6ed9ac8e6a6a7d1931bed9da22e0116ec9af 0000000000000000000000000000000000000000 +310b999fe4872b387cbacb40142fe63804b15e5a 37cbef38ec8b746217b9062b3049812fa1a07ac3 +310ced7a2b730a921bc110116404654dd47d8668 0000000000000000000000000000000000000000 +311abea03a7e999bb22abbe161499ead733d558f 0000000000000000000000000000000000000000 +3123cb76abc3b638e1d287c262906a86b0461544 0000000000000000000000000000000000000000 +312abb088e45e60ab099a14d2f4594296ffa39ed 0000000000000000000000000000000000000000 +3142bdc915e7c59991c67f1ec865503725fcca3f 0000000000000000000000000000000000000000 +314880d8fc53d24bcb8a04a0874910f26ca993b9 0000000000000000000000000000000000000000 +314dd380871fa6a54a009810b5c114b08cd92cfd 0000000000000000000000000000000000000000 +3154d4545e6e981395be2a8e51600400402f927d 4c59156d517d35be95cfe595f051247a75a094c2 +31574c94abd54489438e9280e06bc58060873be3 0000000000000000000000000000000000000000 +315df74b4c384ffbb512fddceeff782f8b22c324 0000000000000000000000000000000000000000 +31610dbf14a31a8fdb6acb63d03f0ded5a0306d0 0000000000000000000000000000000000000000 +316c365db351f3100b6dd5a2e8a3da91fe8f8b14 0000000000000000000000000000000000000000 +316d7037dc67a18d40ced313ff74e758de7c9cb0 0000000000000000000000000000000000000000 +3178fc3bbf7e343c8561186ffdf1980d22ef6281 0000000000000000000000000000000000000000 +317ad10fd88140e5a4640f132000cd7c3f514dd0 0000000000000000000000000000000000000000 +318d7b46df2e94f565bd9abe6fb8c0b3da64caf2 400dcd824865ce91304b2b70a281c0d6fa062926 +319fd9d043a04c481ac0b51751ab7d21f2e2ac82 0000000000000000000000000000000000000000 +31a3cd9b71e3407d46842ea1a8376d04961ef8ba 0000000000000000000000000000000000000000 +31b38210e819ccc7b9422d591afecc53ef70d161 0000000000000000000000000000000000000000 +31b946ec7d5fa51df07654f46d66a80a4956744d 0000000000000000000000000000000000000000 +31bfaace7fa72f6c9e457e4e19082674973caace 0000000000000000000000000000000000000000 +31e082684c835d1485360301075d63445a2947bf 81d80a5653a021341bcf6dd63c0891bbc7746088 +31e6c9ed566fe9a8095c706eff61082208f6f4af f1c403850170e9082af9f0427dc7b3993613d45a +31f39c469dd191d519928acc4844201e6b95783a b3f29941ac92c8d60de6bfe621812097250a3abf +320d54b453b5c352312763a9b36e3b2983fada9b 0000000000000000000000000000000000000000 +321096d1539cc3817a8151115b4a93adaf3916fc 0000000000000000000000000000000000000000 +321e20d7b8c1897cb1fc5453c0cfd55a5ed9f31f 0000000000000000000000000000000000000000 +322544f4e64b5f2c7f862b11ce487e045921b8f8 0000000000000000000000000000000000000000 +3233c118ed0e183e7e7aa1a471893ff41300a2d3 0000000000000000000000000000000000000000 +3239b8d86cd2410091a016b39f5e25b4722987d3 0000000000000000000000000000000000000000 +323c1f565f9c2518660102c12deff77eb3f757ff ee9f631af3ea61c40d89a13fb669554777ee683e +3274dec8a44c61ce11a475f198cfb240347f1cba 0000000000000000000000000000000000000000 +3277e463e1c5a7d8e03549886015768f80bf144e 0000000000000000000000000000000000000000 +328c380efb95104db022e24ffdcffe8322599d64 0000000000000000000000000000000000000000 +32905c7862967fddd71147d151a3eda5c9df3ae2 0000000000000000000000000000000000000000 +329df70e4068493368d095f3de047b3da7a89233 0000000000000000000000000000000000000000 +32a081f48f9fac8c31faa7ee98b8f00e1a89b1c8 e70525f176c853cf4a17346fe1b429a2575b4d3e +32a5ec53fc8f83d8ee0cf7cfece5ffb279bc62c1 0000000000000000000000000000000000000000 +32b2525ab7c472131d05b891b292c0023d870315 0000000000000000000000000000000000000000 +32b373faf5f750acdd79de4576aa60fd9f474a39 0000000000000000000000000000000000000000 +32bef0ff09ff579e228af638b6ce485d7bf1777a 0000000000000000000000000000000000000000 +32bf9602cd1bf7ea12a6771e49b61be31a0cf81a 0000000000000000000000000000000000000000 +32cf60708d74bc85777ce2190b9cbfb4c2c544cb 0000000000000000000000000000000000000000 +32d0cd4c2ddd8e0f3fd0f9bdb822ff9ce0215928 0000000000000000000000000000000000000000 +32ed80b181747b1306b628f9402b9c9d9594f583 0000000000000000000000000000000000000000 +32efa383e23937941bd56548fca4032e508b02a6 0000000000000000000000000000000000000000 +32f75a1fa3e33521e1b1fd80fcfe50adcfb363fa 0000000000000000000000000000000000000000 +3311cb892fb6c5132579fc21d4fda14d941dafa7 0000000000000000000000000000000000000000 +33236ad4ad0aa82f0540af59bf520ef15c2ce2fd 0000000000000000000000000000000000000000 +3326022b016fd3fc795f45926a55895b02557a09 0000000000000000000000000000000000000000 +332bea099abeb38718cc7fd7ab6ecd96342d931e 0000000000000000000000000000000000000000 +33465ba1f287d5dcf60e97e226f33b51fbde7a8e 5c696e185d11419c1a3621b9bb4686f535631a71 +3350d86bab72a22bd84372ea2ccfbe82a2575f7d ef36aa73a525ad5367d4af72fe46f5e423d45575 +337c6eb08a9cc99bfbe2cd08fed61678030b8b8b 0000000000000000000000000000000000000000 +338566fafce04ee1329f4ead61fe1e87e01144ad 0000000000000000000000000000000000000000 +3385a0e0088c44fb926affcb20f166a02391427c 0000000000000000000000000000000000000000 +339ea2506101e3f2d57e1832d044e3c8b3edb5bf 6d9172a398937452de04f9f746413f5eba83a410 +339f61f13e118e6f08d6d052a56b5197366cc58f 0000000000000000000000000000000000000000 +33a219e3c942ad0428511e6718282d518b067fb7 0000000000000000000000000000000000000000 +33a573b4ebeb1361bdea750467e2b28625021018 0000000000000000000000000000000000000000 +33b4a07f7d8f8f8040752fbf1a873a06c1361051 0000000000000000000000000000000000000000 +33cc2388b5d5d9e89df3492e02e769dfeff45365 0000000000000000000000000000000000000000 +33e578b2779d1e4bb4c28e680eabe0a13f3223ed 0000000000000000000000000000000000000000 +33f1fac3afbe56f35e760a35b662be4235785b15 0000000000000000000000000000000000000000 +33fc7cbcda71efea47070ab7a6ebf9db8787a7f8 0000000000000000000000000000000000000000 +33ff05480f754eda46e393bddecef3b7cc642d72 0000000000000000000000000000000000000000 +3408bfc8285b8e866056478aa081113084fb3aa2 0000000000000000000000000000000000000000 +34154fa7eea362dc6fddf149e207a10915f2d4ef 0000000000000000000000000000000000000000 +342e643dd5d74268b1bc1e8a4b68426db88e6ada 87070e2840d8e702493cd8b60397cf5b9605f12a +342f79e19012af8a6f48d57530c25934351461fe 0000000000000000000000000000000000000000 +3445c1d3199ebd8dc598d8d08a05f27904b4faca 0000000000000000000000000000000000000000 +3453f989661040f450c1a934ee48d01c2f553fec 0000000000000000000000000000000000000000 +345f13602c512a29f4418acc005cfb52cb1d53fd 0000000000000000000000000000000000000000 +34613320bd48cd0419fc3fe286d3e27a2878ac2c 0000000000000000000000000000000000000000 +348e8cf1e6342990565099947ced4bb116a8ce4b 0000000000000000000000000000000000000000 +34b0f77734f467b71b6bf46c9d3834f6815913f8 0000000000000000000000000000000000000000 +34b56de5ff45fe7771cfb2b64591746920d0de37 0000000000000000000000000000000000000000 +34b81cead8a3f9707b09bc1d37945a18344d8659 0000000000000000000000000000000000000000 +34bad0ed33823aba004d1b598391abfcda6e5ab3 b5eb2577316041b7c6e28c7fadb27eacf963ac22 +34c97e4c6d36d620d13939799c28cad6ab31a55c 0000000000000000000000000000000000000000 +34c9de176fb973dab537d0e935dd8c192238fe71 0000000000000000000000000000000000000000 +34cf8b6983f3419e141c6aa33365944effb1e2bf 0000000000000000000000000000000000000000 +34de0441f771328ad1da4cfeaa26209f7a265571 4c2ea728fc47c37c6c776f4a4480f6ede5ed3e51 +34e21214ea29861ddfe3d80b9a0d68f0179885a0 0000000000000000000000000000000000000000 +34f7f173c83db394497fefc27bf172fb4d23c850 0000000000000000000000000000000000000000 +35045ae5a0d590ec1eb9bc50a638de3c3e36cba1 0000000000000000000000000000000000000000 +3510c726c1857d6a53014fc6f17ebc15684f53a7 0000000000000000000000000000000000000000 +3511f0a799b68d24fda86bf7034b8acbe1186793 0000000000000000000000000000000000000000 +3516127d41a94b499fb82bf01086e607acc4111b 0000000000000000000000000000000000000000 +351baec2031e472bf1d18f28f945fc24b3bc2480 0000000000000000000000000000000000000000 +3529d077687c6aeb0ae0f33c65eead871d6c3194 0000000000000000000000000000000000000000 +3534a6586f0e163464bf187af8c657cb74de7259 0000000000000000000000000000000000000000 +35398a180542bfa9d36964ce4fa2003cd6e1a443 0000000000000000000000000000000000000000 +354c204fa0852d42161417c364dc40f3ca23fda4 0000000000000000000000000000000000000000 +356dfe6a5feef1ddb24bdee6dcdda3af8e9d19c1 0000000000000000000000000000000000000000 +3573a7f59c1f629ac24eafd0a570806436c3512c a5290539dbfaa20d52975b15d25fd5f3108e10ae +3575e809124cb8c839f2451ca27c224e3fdc9745 0000000000000000000000000000000000000000 +35811cc51ef23845e30710de0269fdec13f51c47 0000000000000000000000000000000000000000 +35851e0e9666c0864113bf69ebbd307fe601525a 7865f505724374e0f7803dc39035e2f974c3aec2 +358c9219494a95a4346f8dbc1bdd12a3c29cb841 0000000000000000000000000000000000000000 +35a9fc5787aa000c8dce62b33ed0b7090821f9dd 79453a6f90a0418b035ab3c7c3527f159ce4afc9 +35b5282836726a17207a8e3c08223abf2381e507 caa38d721e61ca364cc1b749bc4bf5057e98d371 +35e787f77fdf9ea32dedbf484d7e6c56c0426cbd 9f2461e43287cb82d9fadfd536a71093f6d5d74e +36043829d29340a47fc93c6477a38ea93e59ef57 b18095dbe64bb42a599b514115e4b89520895009 +3611b62558ebf8d25da9b119f39bcb519f6bf957 0000000000000000000000000000000000000000 +361acaebe4faaba9ec665819b4021167faa3fa2c 0000000000000000000000000000000000000000 +361f703eec2f84b90957e9e4d40fce975c6aa318 0000000000000000000000000000000000000000 +36324393e0d6af6d2178dd71bb42eb3d474eb79d 0000000000000000000000000000000000000000 +36350fe7f3c352e70f285eeed8e2fd5b9e2f3836 0000000000000000000000000000000000000000 +3636351c94f8bf6ead3ca766b594cc54f0962877 0000000000000000000000000000000000000000 +3645ba172022f77c08c1777d6ba7edc18ff75df2 0000000000000000000000000000000000000000 +3646b59c14036be745f94f362ff38cab008bcfd8 0000000000000000000000000000000000000000 +364952b423861b6b79d04efbf92de858ee0f7e4d 0000000000000000000000000000000000000000 +36515c45ab483c832d79a1cb0077e500f106af41 0000000000000000000000000000000000000000 +3665930fdf6949fa40f7739b2f0d57c247b88a98 0000000000000000000000000000000000000000 +3669c568798eeb6ad97d712591ad0484c90e3be9 0000000000000000000000000000000000000000 +366b8c62927a3c618b4ff76529646687948e9db0 0000000000000000000000000000000000000000 +36720bb1a7438843f933e9a28916484241316440 0000000000000000000000000000000000000000 +36752ada9303a5113e1359e4ac1a267b8a4c8e49 9c12f982cbddb3c9e9bd49fac75c6854cc396242 +36758834155a7b67cac5b7cb7b9ce151ea47eaf3 4c85783322ba50ca9d15e78f94307e781077cb61 +3682ceaea538e6026c9e81edb78fa52c6c88bc3e 0000000000000000000000000000000000000000 +36a11bb662d1f9ad4a2bfa66d40f98662551c817 419c747e29b244b5d7c7a428847df7e0b5f490eb +36a4f35a2bc5d715a5bae14797351b992ad8e08a 4ffe1e043b1239f5149b93780e2760dbfdfd5142 +36aa78088d814a45f3abc53a57de77d3d46d90a0 0000000000000000000000000000000000000000 +36baadfdb75295987982529b5631e28737ad2af9 8ff48e1f2c0bf72300e74bc9d5f873483ef027f9 +36bc99085c9b1648c9b90cb837085ac0bb5c23b8 6b7db0ffc544af0892f5caf4621a8b330195e76e +36de7b8ae521a3fca9ad9091743de1b50995b372 0000000000000000000000000000000000000000 +36df13d07d57f65815d968f7698b052e9ce0f021 0000000000000000000000000000000000000000 +36df271fc0454c6f0468a2f22b5a45e4e60e87d0 6edd6fc697a005399ec2e362ec8969e2af044c1a +36e644f1aef269f6edcae94bc8374cf6a9a00eed 188d6ecab1a62a59737f8da2276165d20728bf60 +36f38339a6926f6654dd1c103002f3f191d9e459 0000000000000000000000000000000000000000 +36f8f596f02281f059588f086526dcad5cf08db2 0000000000000000000000000000000000000000 +36fac8ff9737a026a2ff571629ba3f8eca40091c a3ba99cfb5b659cd5d1849166c0b677058339641 +37054bf37c101096c41d1a8ec1e379b12a1dfef1 0000000000000000000000000000000000000000 +371a57405b013bdc257a51cc831f7487d1749823 0000000000000000000000000000000000000000 +3724eeb2478324c270561951dea4b06d0d8b73cf 0000000000000000000000000000000000000000 +3730d634ea2d543b11da63c23dbee9b77fb3fda5 0000000000000000000000000000000000000000 +373818a6e1db0c6953cce0114287c8d222356684 0000000000000000000000000000000000000000 +374af0ce009b2ad5990aa3965878bee9b6e39026 0000000000000000000000000000000000000000 +374fe98b5ec8b5e25fc13374eb71298d6ffc2611 956ee5c00dea4a5f54595cdb66ffd66f6025adc8 +375f263f41badb99200ab5991af299b062d17365 6faf90e4d136b8c76d325610e6d67cb93b5c1502 +37641424837df0b5e142ca130cb16df699bdb09f 0000000000000000000000000000000000000000 +376a0ccb3f00af5d9d8f7744dc4d29ece45a04e5 0000000000000000000000000000000000000000 +376e54de6d419c4e6673111538140bedafd7896e 47ddedf298737cfb53d0a20d51b6b7a77f94b7a3 +37991b498ba4e410e9592a58a684f54965a0c4f3 0000000000000000000000000000000000000000 +379c6bdfd960ad6f1c1d3af40ea29d90264a63a4 0000000000000000000000000000000000000000 +37afc804893216dda1f9831a34265432e70e5cc7 61469110588b2817b4ad4e59f45fdab1d28c2031 +37c097e358e2aff66b5451f57807ac8e8a11fa87 0000000000000000000000000000000000000000 +37c9e748cbe23675ae1407dd8a6ec47c30ba3b76 0000000000000000000000000000000000000000 +37dc71ae64004e657d8a8b840725822e330bb800 0000000000000000000000000000000000000000 +37ecce28f8459a5b25987d6a5f71c2ade9677030 a3fe24ee4a664fe8505df26e49dba64e8eaa64b8 +37f82a158b4f1ac89821ad81fecf58dadc7d8499 566d15fa6a6c2e17f3f06872d7a901c7a635d074 +38004cdcc0b0514a4e4c4d4e17f98267e71f92d2 0000000000000000000000000000000000000000 +38077d9491ad7b25a598fd3f1c511b4ff51f8712 0000000000000000000000000000000000000000 +381c45902158a99610c894e54e2818aa0fe304b2 0000000000000000000000000000000000000000 +38287d734d00095bef63ebe5948fc36a4c2f28b8 0000000000000000000000000000000000000000 +382ed0973d8379dd710cf72cf2996eb1ea934675 0000000000000000000000000000000000000000 +3845be8aba145938e2ec63f5edd2207ca5611be5 c4d92477daedcf1c89c518976ec019b8121cf67a +385e5af9872c70cab4dfb056b97572dc8c9b0fc6 2278a1a3ef6374aaee4560250f9fea8c335d9c0d +387a256fad8b52899da79a86c3672d657bf86e63 0000000000000000000000000000000000000000 +387e7f3d0acea98ddab11f4cf3bd53e9b68b9234 0000000000000000000000000000000000000000 +388d6f79b4b45d1c30bddbff66dd79eef2d4e4b7 0000000000000000000000000000000000000000 +38954dce7ddeac66b37132a832e698da798509bd 0000000000000000000000000000000000000000 +38aa759f0c00b68c0aa55a3b1e4cf8bf262f0815 0000000000000000000000000000000000000000 +38af1812ac8ddab1a57c6111b645cfd2a3c57407 0000000000000000000000000000000000000000 +38ba98ec054e60de02ee4fb02406e9cefac7b986 0000000000000000000000000000000000000000 +38bd152777e08bd62400b140da031152aba14540 0000000000000000000000000000000000000000 +38c5c3ff4dada3532707895c39c8a93eba3124af 0000000000000000000000000000000000000000 +38cb60562b3cefa2fe17602c9c3aaf544d46720a 03cf064109f0499237a764b3c8135b8e6b12b5fd +38f35c2ea7304855a06632155e4781cfc9a6c368 c7ce9020a298b2ece17c720650052f13c7d7cdd7 +3914db408870f1a909c0f25cfeb5d5025c89fd75 0000000000000000000000000000000000000000 +392e5a7a83fe10e59fde9ee894281255f0687e3d c539ee49a82c8d5ce12e404c58d79f4493170606 +393c78cd092a1b99bb764a612580e05a15b31801 0000000000000000000000000000000000000000 +395b740925288d1c9e19d274fb2ca7de84a5f830 0000000000000000000000000000000000000000 +395bb8798d77c38a7f7c12507395fbe8d783b74c 0000000000000000000000000000000000000000 +396779e38a9b02b749badb59bf8ceae75cf21408 0000000000000000000000000000000000000000 +396d450ab71178e1e3394bde1f72c5524791ef28 f5d55d54a048e526fd7c997fd8e329eb5a13be42 +398f1a26064e4e3a3d1985c01520dc33e9e6af0e 0000000000000000000000000000000000000000 +39a2cc8dca3fbc2b94cc927fbbd126866d0fa3b4 0000000000000000000000000000000000000000 +39a80f31a3347e5eb22a402e12deddb60cac9b88 0000000000000000000000000000000000000000 +39a9f4112a123b9207504d4a840a9be553703555 0000000000000000000000000000000000000000 +39b9a4725feaf0e3216699f826e5f18fbd497450 0000000000000000000000000000000000000000 +39bcf9f5c3cdbc3b58148cefefd77c502f5c9af7 fb4181290450df1b778181699b458931fafceaee +39ce0e966f7080cb2f6becfefc670dc5543d233a 0000000000000000000000000000000000000000 +39d3cc23b819d09b0e990ec375fdb6261091f188 0000000000000000000000000000000000000000 +39d8c2957fe50b15e6f0ba07e4c4aca831bea3b3 7beff26328c35a24641baa01aa81a3ca8e60dcae +39e732e7c03bf43e168fb627566b2b1317bbf768 0000000000000000000000000000000000000000 +39ed5b7e24efcb4b66be077ffba265d71898a8b0 0000000000000000000000000000000000000000 +39f300d26f667be736ac4ba5a551837861cc2c87 0000000000000000000000000000000000000000 +39f510f4a2ad939503b94940e067f46c81df2cf7 0000000000000000000000000000000000000000 +39f5beaadd48079a099c9f1713b931ef3ff8fcec fefda948a3e6daa59e325c785e43f7ac4f265fad +3a0a35b0a81a9168909f4401b74294a178f2028a 65c403ef29520249507d8d2aa0658b80119f278c +3a2d5f30eea2cfd8e82756f562224ee9ad62c5af 3a115cd0c819f037ba48a9e98002de1dbfef33c2 +3a35cb9328b7dec61b900372bc7f86331664df2d 0000000000000000000000000000000000000000 +3a41a1dd88833bbd0ccb8734e504cf9edfe3dd7d 0000000000000000000000000000000000000000 +3a42a9c64d40f6d70182b01b68285d5a903fe484 0000000000000000000000000000000000000000 +3a5278c38970a5e682ec450c5aa02a3c8c44e28c 0000000000000000000000000000000000000000 +3a59b695a15d0b35212d47fde0ffe0e29612c671 0000000000000000000000000000000000000000 +3a679ddf3419d9d1d7437538b9946b093b09f76e ca9df0c97c37bcfd1e8e0dbc0f852092981736fb +3a6b1a03b635fb8c5905dc4d5e0a761fa718d601 0000000000000000000000000000000000000000 +3a7829cce69d6b63574f39174fc58570518f99f8 0000000000000000000000000000000000000000 +3a837b6a2170212e1424c4dac001e90f94ec4f4b 0000000000000000000000000000000000000000 +3a8417b017b3fb4ea3e51d7e379c79e56765e988 c11796d594bdefce171488086ea615d9c716e3df +3a8f7e229316c248bb26fc63cd1786d255a05bb4 0000000000000000000000000000000000000000 +3aac5807a1f67ae4aa9272390fd7ac35b571b763 0000000000000000000000000000000000000000 +3aac661ca2e8050136c423f2835fcdd3a9096482 0000000000000000000000000000000000000000 +3ab3071d64204e2601be623869b8c9c9322a3050 a6db2a7a31f323f2b68c9a2bbdc725f6667bef62 +3abe36c3d7c96f08edcf9048b8276a8fbbdb4569 0000000000000000000000000000000000000000 +3ad1f71fcc35935519d2596949de24a32c3a6dff 0000000000000000000000000000000000000000 +3ad8eced5750f395b136103a540ac9e7a7c96669 0000000000000000000000000000000000000000 +3ae2f9154c4fef117b0f09b40a77e221604af518 0000000000000000000000000000000000000000 +3ae9c5255b63370088cc834a2ffa92ef42ce5da9 0000000000000000000000000000000000000000 +3aeeef600d19e4ecfdf0d116725658b1c496eba0 0000000000000000000000000000000000000000 +3af819af19571aaa5adfa81b44ce1d70d0af4cdd 24e141947f8d667c942c4cfd44bce24cfb8db0c3 +3afb8db7279e32f83ded36ae2c80c75477bf5588 0000000000000000000000000000000000000000 +3afe5c7ededa6ec87f664159ca261430e0af039a 0000000000000000000000000000000000000000 +3b0c7204f211a36fded602dc31e3538d229fd600 cfc913489adf9e5eee7d61daa5137dcc4306c7d6 +3b0d10a1c33582cc7019a69ffca92b33fdff5794 0000000000000000000000000000000000000000 +3b260ad3c8e3a03dc258b3495bfa747dc380d67a 0000000000000000000000000000000000000000 +3b3356b9fb6b3a8b292618841c6fed61785d6109 0000000000000000000000000000000000000000 +3b3d0e6da51f7958285b8aa5be5d1eb73ec69acd 0000000000000000000000000000000000000000 +3b41c0b677b4de3a6994f734e9f86f32098adba8 0000000000000000000000000000000000000000 +3b59e4cabedf0398e7f9c6815e3b0b7a62a942f0 0000000000000000000000000000000000000000 +3b61b45991dded1aaecb16330430628d26a406de cc956766ab47cd43368ab6a78bb9cafa6c3018b8 +3b66e24e6034c097f5abc22323d13e49e856d605 57488c3fb55afa88d2bda0c87e226f05306dbfbd +3b686a51ca421570bbdaf3357d0e2b3915f3eb21 0000000000000000000000000000000000000000 +3b6efb88ac4619794e667b0147331d9605705e31 357f8b1765d938744ad9dbeaf6d90f0263826311 +3b727ef5954fd06426bf0a87b8de45857bb53087 0000000000000000000000000000000000000000 +3b73598964a2d3b654093da7ee1724cfe0f40888 0000000000000000000000000000000000000000 +3b74c3e32b2d2336a68c96c576106e63534ddb2b 0000000000000000000000000000000000000000 +3b8f30eb3d1bfc46d52894e8578ca1cba3d35b22 0000000000000000000000000000000000000000 +3b8fb981328b414ef9faaaaed7fcc340a1bec4a7 0000000000000000000000000000000000000000 +3b8fc5247b37f0e37b5638058dd847655aab1f62 0000000000000000000000000000000000000000 +3ba6cd67661420ee3134371e24c83720a557cbfd 0000000000000000000000000000000000000000 +3be00e424a9dde0d1cea2c984c6883e19595b806 0000000000000000000000000000000000000000 +3be26f5f3010a282810178e814c2a0a0ce8a13c6 d5bd7df606f2f32c9cb64d42832febe88d091d87 +3be490447011ec899db05b29bef59bcf10b93004 44f88d113f166c67ce408e94ee4873ac0fdde8c3 +3bfa1fcea622adeec9d3a1e99502a8d492135a35 53e109f69a23a5de44f7e7a0f8efa39b042f8330 +3c058fd6cb98b676fe2586923e01b20c08d4c0b7 0000000000000000000000000000000000000000 +3c1f6445bbf31735da89f1e4fcbc8f42952d4661 0000000000000000000000000000000000000000 +3c2042fa1e78dcd3f933eec33d7e0cdfb4b67c69 0000000000000000000000000000000000000000 +3c36aee90d397ed22f1d101d40974eea8bdbe429 0000000000000000000000000000000000000000 +3c40598f031c2d4456a0be9223e627b43ece06e1 0000000000000000000000000000000000000000 +3c43ea176ac08db90ea02b561a8fb75092935595 1eac28826d41bbb249ca39db07af2124a92fd9f9 +3c53f1d13d7753b4173585dd5c70834968729e68 0000000000000000000000000000000000000000 +3c597ea62ed28b55a80fea951b912fe0d92a117a b14293f49c546d86a55903120f7564226b1739b8 +3c5e279e220be3760569a5f7608f295403a66073 0000000000000000000000000000000000000000 +3c5f8abab47574a856ba0a6b43543afb6af3dbf5 0000000000000000000000000000000000000000 +3c644511afba381b0c580f31d7282ac1e98c8d41 a99e0b0cd48ca060608007f20947ef412b391df6 +3c76bf723acbc62fb43f54389789c0c500e5f2bc 0000000000000000000000000000000000000000 +3c7c894bcc180123090dcb46e3821329a3c4f816 0000000000000000000000000000000000000000 +3c8224ad253fb29088f4dcfeb9d64446f50eb54f 0000000000000000000000000000000000000000 +3c88aa97902a00c9c10f63bfdcb928f581f6b673 0000000000000000000000000000000000000000 +3c91a1d944aea9119967a7a66b2e0096918ad8f1 0000000000000000000000000000000000000000 +3c944e1b71ddd4fbe5536f856b23a4a9c2c1485d 0000000000000000000000000000000000000000 +3c987ad8aa7b0d816a7b9be37348505319b9ad16 5e93c8c3bf579c7df1dc64ef0bf164194263fd90 +3c9e289b1a3f75a87774ae9b22cf6e6448ceb571 0000000000000000000000000000000000000000 +3ca0672ad0f12c97ce34edfe81d3d75be5f9d781 9fe9a707c94b53649670c85a66219a722a694cf9 +3caa0bfc7253a8fc65da540daeb2d6886acafe3d 0000000000000000000000000000000000000000 +3cab6f96aa0f58646d998ecdeb1b7570674b1926 0000000000000000000000000000000000000000 +3cae500302596d22d9535cc443bbf1b095639a96 0000000000000000000000000000000000000000 +3cb80af7c53a557d0b6d14518c84441e271e3385 0000000000000000000000000000000000000000 +3cbc10ee8bb1e622e337bb4ab8c4e0ceb2fa66a4 0000000000000000000000000000000000000000 +3cc169f1e69d02794ce6ce0ec445afaa9b29f1fa 12feafd8aa1d528e19d554936886551d3bd33a5b +3cca127ade2d18a49d05932a305ae4b1bc5cf63c 0000000000000000000000000000000000000000 +3cdbb175a1b72d3270b2582ee6d9c27675728d16 0000000000000000000000000000000000000000 +3ce1566327481c64d7a6a0f2a392faf2c8651a70 0000000000000000000000000000000000000000 +3ce683009673c8eb65345aa0bc75287063ef8b75 0000000000000000000000000000000000000000 +3ceaa12a1dff15273fa8da7812f315ad9aa16d9d 5c2a6312db263313e45314cacf38c8621d528ed6 +3ceb809dff017493aa1753cb9e226f253d99017f 0000000000000000000000000000000000000000 +3d01ae0bfec787e3b911247c9d1c19aaece6f7bb 0000000000000000000000000000000000000000 +3d0775610a9e74b6d5ce845195ccb935576bcd31 0000000000000000000000000000000000000000 +3d0a9e17902e28b7fe1865f7b95973afab6ef9a5 0000000000000000000000000000000000000000 +3d0b406558fe147f9fc2a7a53d4996a7be9651e6 0000000000000000000000000000000000000000 +3d15d2eb3ced55fe544ba30159578023f203cbbe 0000000000000000000000000000000000000000 +3d2681ec0d41a2544dae8b4feae4bb8d4a12a35a 0000000000000000000000000000000000000000 +3d321be5b963cd155df276b60733dd50841767c1 0000000000000000000000000000000000000000 +3d3265555241243cb75d6582f1db83f39166f4b6 0000000000000000000000000000000000000000 +3d3269ad08b31ae2437db7214b21d4d1c67f03cd 0000000000000000000000000000000000000000 +3d362c37c6dd61745f09a5bb94428727318dd020 0000000000000000000000000000000000000000 +3d37908ea674a63c708b6b5a0279a3a7eb76c319 0000000000000000000000000000000000000000 +3d551de775d28871e0d20033de1ff9bef24ad062 0000000000000000000000000000000000000000 +3d583f5432805fef0e401ec80b903dc88b726803 ebe43db74551f8934e4095717d55ec16fe7dc73f +3d620544669801bc334e875d707feccbebf90d8d 0000000000000000000000000000000000000000 +3d6c85e9f0d95335de58194c325f6bdaa74bbcdb b110f27f8480fd7646d799307f0fc754ba262a90 +3d8019ed086755a8488e0defee69570a4cfb2a77 0000000000000000000000000000000000000000 +3d8a671371adbb109dae237c337e707b0109b3fd 0000000000000000000000000000000000000000 +3d8c66f2e96b963300f432482ac939831b2b8344 0000000000000000000000000000000000000000 +3d971dea96e1d531f395d808743b0d1e863c1b23 0000000000000000000000000000000000000000 +3db2ffc5baad6dc4bba2ebd0c6c897b6f94a0cb9 0000000000000000000000000000000000000000 +3dbe5d8040a7c64db0e4c62425c74703f2fc800d 0000000000000000000000000000000000000000 +3dbeb5671ba06b95fbe36b0c054a99d2e10b3fd0 0000000000000000000000000000000000000000 +3dc4536a68d74f62817dfd8affd9ffdfcc5dfe22 a9c5d183ed14d414476f211f949bcaef72002a3e +3dcbaad0fbf309d936bd2867c634b3da3d820760 0000000000000000000000000000000000000000 +3dcd0816f8bb9907aa65d1ced8b0f3e1873149d4 0000000000000000000000000000000000000000 +3e0a83fda38fbff608cf4941cb6aafa53d438424 c661e0ba3b95da32c880221f95330411006753c4 +3e1077a24a87f3476516b4324a590bd71a252d61 0000000000000000000000000000000000000000 +3e159d24c9b9aa7f56e3fc95f811236b15756f4e 0000000000000000000000000000000000000000 +3e44113d0f7e02382a635d22b6df10e03f20e985 0000000000000000000000000000000000000000 +3e46594b24ceb15594c2ef86560de8a150e7ebdb 0000000000000000000000000000000000000000 +3e4bf0171c6587b34518a35c38f06347e55371d5 22317494e228eed78f0730ad4ec9f35009d4965c +3e55735f9c7f254bd394b40a7237c449244b38ae 08c7338bc5c96a48d279bf8b9c5589e888a67492 +3e5cd0fe913d1020bd51fa1bde4029b07895e308 0000000000000000000000000000000000000000 +3e625bc6fffd50851bd4cf02f4e28bf76de5eb94 0000000000000000000000000000000000000000 +3e6b10531c18832f961773451a05ea3800ad767a 7a0de7947e6c122d3a6128585c39bf2b0fc611d8 +3e6ee80491ab32d810d40f29761b8eb8e4c4ce23 0000000000000000000000000000000000000000 +3e7584b63ac107402f6a24f4a5bdff340e8c7f1d 0000000000000000000000000000000000000000 +3e79514997d3687e73f9f60daf6bd22c99b96b60 0000000000000000000000000000000000000000 +3e89450df6823cf49c6ac9a4cd5e4014247a30e6 beac5b103bf54c93933cc9bba8b7829a2fd1d533 +3ea1fa981ec4d94909358e1c70c0904a2e3c4269 0000000000000000000000000000000000000000 +3eb14c0b2e3ab3dd4926fa3998e018f5a1db9ae7 0000000000000000000000000000000000000000 +3eb2200e052f724959d1544677a2ed9c384d780a 0000000000000000000000000000000000000000 +3eb25f5709aa026d529ab27bcb3a019dd9ebfb71 0000000000000000000000000000000000000000 +3eb4f02cd4650e7b4bf1a4154ac62b2e6baaf208 0000000000000000000000000000000000000000 +3ebe0f069a5d4e9f3f9a66c118d4cba6cf1053c1 e398adf23bd862fe600695ebc509edcf26c1c05c +3ec0849cd0497b9b72e0c7884bd71b7295d6e520 e40e3238fe9bd102a4bf3a4d96ac05778782c051 +3ec086fb07e0ab3e65664bf04987f2262c675f10 0000000000000000000000000000000000000000 +3ecc8e06aef8b45834469a21fa50b078fc3ef89c 0000000000000000000000000000000000000000 +3ee8ad8dccb3330e84c7c77d0d9d48b0a11d5d0f 0000000000000000000000000000000000000000 +3ef2b9e2306a9398ef921a721027103d04de15d9 647e422b13b06fabf5ece17e49d36625a8275a8f +3efc983a090b5a1d979d8d15c5983c0f3d4aa06b 0000000000000000000000000000000000000000 +3f012bc4cd4f46a25b0b6f6dd4d35b3f0525bd91 0000000000000000000000000000000000000000 +3f058f497561a596ae95edd53526504bf4c286f1 0000000000000000000000000000000000000000 +3f11c6175107d27a3ce279f29b4866c3f22a1665 0000000000000000000000000000000000000000 +3f19293f23bee4c2c2c674f5314e42b8eb8866f6 0000000000000000000000000000000000000000 +3f19ca6e09b0a4049749dbc4845d174433ab691d 5775a4449c2528dac63406b90d939468b2f54c68 +3f3dae04bdff4da9b3801b2f1acd016ee1922b5d f30159a3df9cd19e0c141ed0581941022ddbdbe6 +3f433916e845e6241332afb43574f9a2daf5bdba 0000000000000000000000000000000000000000 +3f46ebf30f36e865e8abdd77b374c6bf8cbbf64c 21b156b74d218f9e6077a136666fcb622eda96e2 +3f5978410e5e0cb9deb024f97f7ed26b08a61c1c c6864eb3a3d84a0f3b71e22a439157be7a3fa12b +3f597ba4e5325653449b0200a8ef91dc20c12135 0000000000000000000000000000000000000000 +3f685efd0c3f9248e9160a0bb6ff9ce4d6be4e1a 0000000000000000000000000000000000000000 +3f701e950033ededdc6e675700e4f1d7e73af1af ad479710b8bc049dcf2ed2e002d4057db9d4cb7c +3f8238ca70e1fd4c063cbca80e900e4eea1da08a 0000000000000000000000000000000000000000 +3f82eb9843c172e5353b2b59072d0c823657efa2 0000000000000000000000000000000000000000 +3f8b2b99c07bd3c58825728c2dd2ffed91d88fbe 0000000000000000000000000000000000000000 +3fa7c0294f5ae47cf0e6282ce23423bfa9ff784e e12fdab208dbeae37438c8f1cfe1549b9f3005ce +3fa8ca215c8c9884aa88a786f83119e733d1a18e a14ad5beb86a3607f4d01e7a519e6d66adcd7529 +3fad72f1152a82f975daf122b6c5ea41fe117969 0000000000000000000000000000000000000000 +3fad8067a8cc4dc111d80e89047a27c1415602c0 591c74c825fcb6bd45315cdcc487e51a6d904301 +3fae2f4776511d829572ac77724d08ffd825d94a 0000000000000000000000000000000000000000 +3fbc257a8d63a2c1ab482968f1bf9e3d7c3048c7 9cc857605b91a3d00d883574735213a724b80fa9 +3fd21d28b29e276d39a2a307a6d19e2b613ea6dd 0000000000000000000000000000000000000000 +3fe4e8df47e891f056c7b31994cafe7a8e2c9ebf 0000000000000000000000000000000000000000 +3ff45fa686347c49f124a9d585a7904b61bee203 0000000000000000000000000000000000000000 +3fff889b786ae3544d75157cf2db26c4770ca644 0000000000000000000000000000000000000000 +3fffa56a55841b86d14315628f63700d4f46d043 0000000000000000000000000000000000000000 +401072cda11eff90ae1f9c06577cf32d5c02904d 0000000000000000000000000000000000000000 +4015f13c89c2140216d3b263a2293b39290cf0f9 0000000000000000000000000000000000000000 +4016ba1fe3a09bbb1fade1e3d43ea5e8bdbb97b5 0000000000000000000000000000000000000000 +4030c1fda6a04006326e76c8a2ca7ffd98e2d1d6 0000000000000000000000000000000000000000 +403a40ff85eeb780deccef692e48572adc5d9ba0 fcce20f8e105e4c091af9fdeab128d0058dc0e52 +403fdbc6ab8bbd0352e07067853e1e6ca085d8cb 3b75335267b4d97c782bddb9b757df3c2df89f5b +404be88345e3ce519fc89ad5c6ce863fc3fdaf96 0000000000000000000000000000000000000000 +404d10674a92f1a856a630d8eb1b8c8192020cee 0000000000000000000000000000000000000000 +4060938e5f6e871d5d4c3931f91ce4a89f4f1e97 0000000000000000000000000000000000000000 +40621e06e6514d8e47aa4206784dfb18ebcb9a43 0000000000000000000000000000000000000000 +4063c43682138d1c7921326d168b9799f4760cd8 0000000000000000000000000000000000000000 +4071fb380814fd67e9d6289a1321cb54bef6e20f 0000000000000000000000000000000000000000 +4076513f5e3c1498fc219afc3c22a3a252f8a56d 0000000000000000000000000000000000000000 +407e64aab1c1ddf67b03321fd56f0a17949e8933 0000000000000000000000000000000000000000 +4084e4096adf0d030c8f4d9583e41f4e12ae9b1f 0000000000000000000000000000000000000000 +40860c64a47611beb4da4128b5f8e789c08809de 0000000000000000000000000000000000000000 +408e793cfe1fcf76c5a89f1e5af2122e4c7881a9 0000000000000000000000000000000000000000 +408eed77572094487ae8193fb67f0a812db9a6fa 126d9009e35d11cb6c951014bcaa2d9098cef189 +409247226c431db497ac86f7039810ee00785918 0000000000000000000000000000000000000000 +4093310eae4d9ae682377de0cf121b5c7087c7ae 44840a71fe12fddc2859cbf4e767f820a93b3a09 +409e03951b5c6740933b180aae6ed2547d558569 0000000000000000000000000000000000000000 +40a22f80f0e20b9f2b8312bc1bfdc7b3b24e980a 0000000000000000000000000000000000000000 +40c224bcb3104e037a98ad6e832396d5c8948ae6 0000000000000000000000000000000000000000 +40d0c973826c9eb149bb3ae1d39c7e5c6b2ef08c 0000000000000000000000000000000000000000 +40d19248a0b7f03e32c74facec33a03b789f81b5 0000000000000000000000000000000000000000 +40d4f32a3350132f8df56ec5033e92ed1ab0fe4b 5f35c808579b8a6cb7718b3790f422a86ecc6919 +40d67ac929299fd007cc6bf9e5cf44e83187f948 2b6129513238dcef3c86e81d355f9a2c03d5db2e +40e2681e44efca842d9c0b8892e2ecb732877a90 0000000000000000000000000000000000000000 +41180287ae6f253511bc7ae639b0cecd4ed01e87 0000000000000000000000000000000000000000 +4126f8a1d769b3bfaf0fd2cab22f795ea4edb18a 0000000000000000000000000000000000000000 +4130c001dea3746a9a6733892a48df9695b11ac4 fc39ac53df9330f6f59441dcfbd20ee93769cd53 +41391704567850b2ca960c886ca201a03e0e4399 0000000000000000000000000000000000000000 +4150c483dcd1700e6e4f623ca0cc5d4360c1a6e5 0000000000000000000000000000000000000000 +415b77aeb2e62fe9d0a507add2b7fb489fa60cfc 0000000000000000000000000000000000000000 +415c95937bb209134b0d67742d1470e2baf35ead 0000000000000000000000000000000000000000 +415f6076d9797d6c50b2e66a2d0422ec43a2c4a5 0000000000000000000000000000000000000000 +4168614b8e1f26a09a5fcd4dfb86274f225d9fab a0837bdb56380423495902c45f00edf6c21c2ff2 +416b8ce3fb097600218934df395177b47017b118 b8c7e11e1ecf361853770706dda0ee57ab03b9eb +41759a1cb587d38392f730dfce74e974c76189c6 0000000000000000000000000000000000000000 +4198c82f3fddb404f4bac5029fda6fda04aa3cd8 0000000000000000000000000000000000000000 +41a231eb6bc9734a885dee32900ac47dbeca5450 0000000000000000000000000000000000000000 +41adb1f25479d60330ba81f17f908ec71088288e c1c32be0521c334c0e3d1ceca2c590442b95d9df +41b049d085ca2031d19f96020d389b89294ccdcf 0000000000000000000000000000000000000000 +41b0f367b4ee96065c7376608dab26adb9c6cdab 0000000000000000000000000000000000000000 +41b3d9db02670dbaf98bd2ccc3dfa91e7a861816 0000000000000000000000000000000000000000 +41bd285d8ddf6111fba9e0209caa3c3e86f4fbaf 0000000000000000000000000000000000000000 +41c198338fecfac12eefc50c15c9670df4ce6f44 0000000000000000000000000000000000000000 +41c53c95c6affdfd75051d99377538cb09a84f65 0000000000000000000000000000000000000000 +41cf6ad276047437936882e03b5d5e0cd41562f4 0000000000000000000000000000000000000000 +41d00497e0967cf26abe1365ea6ae72b7f560ded 0000000000000000000000000000000000000000 +41dce19c16f1018f0f544d5530f7071f7c270dc7 0000000000000000000000000000000000000000 +41e3ef66ba49218fe170f5a2cbbf95de96b0c8fb 0000000000000000000000000000000000000000 +41fd508074f1b70415026df3aa878cd5f5e7b1ee 0000000000000000000000000000000000000000 +41febcd03fada49c0b1f197bd1eeacca56b9a1a8 0000000000000000000000000000000000000000 +4207845d68ae940ca3bb57d9b154b4697c966c34 9a2f3169828c7f9d9efbdb2b8dfac3e158097dd8 +4211a2f7d3de14d0400135c92943e03eb271b31c 0000000000000000000000000000000000000000 +4212ce01a2e4d53afb46052dee085bf06dc3ce8c 0000000000000000000000000000000000000000 +42258a87a95899be4bcb1b56efb89589ca7a90d2 0000000000000000000000000000000000000000 +422cdb2134180518dbf53f1d3aa32115fe84a3c5 5dcc9ef0cdaad5d3e69a9c2a1f518e026d82fe4c +42303da40894ace808dcaa459b90026772a4a118 0000000000000000000000000000000000000000 +4230dfeff34f394c03ae12f0d8b26f6e16f292d0 0000000000000000000000000000000000000000 +424257be67327fa361e30f5d609459ad1bfacce6 0000000000000000000000000000000000000000 +42438730a57acada699a017da41838d0d54e141d 0000000000000000000000000000000000000000 +4245de9ff333a1d34e125ba72c543b6e78db6980 0000000000000000000000000000000000000000 +425003a875e2eb63226c7774e363d2528102b75e 0000000000000000000000000000000000000000 +425335eb46d4a48104046af62265ba0ca6a1ec7b be1fca4e280173d28cbb9e522602cd9c42e6e4b2 +42614bee7858682db0bb9bf36ef13a68ea451d92 629c3b8354d488e4ba1f2a92f3f2b2e0932843e9 +4284c5d9d4c822a7b1cccc7c7f1ad5d08db50e5e 0000000000000000000000000000000000000000 +428a5babf0ec6a019ed0056ba81cf2cd00e292f3 69903ce5293a3d4fa75af9db076fdbea2900c75a +428b9e430c9bf504a5751553a43fde16645e3835 0000000000000000000000000000000000000000 +429a1b0f52342d4cee1aeae882d3c408f81ddfe1 0000000000000000000000000000000000000000 +429c6e48f694042b30184caa1aa30da07d975c31 0000000000000000000000000000000000000000 +429d7c599001d39454cd6a45fbfbf38d6d982f69 0000000000000000000000000000000000000000 +42a40150251ef16933127511133dcb5ae39842db 0000000000000000000000000000000000000000 +42b4ef7208c64ea5181ee59e8303ad7d4b6df99c 0000000000000000000000000000000000000000 +42bbd79158a2d7479f246e25319e93c0045e1a49 0000000000000000000000000000000000000000 +42bd3960d799af3d522ba122ce713a7d418c98ba 0000000000000000000000000000000000000000 +42c805e6363c2126a3014efde0168a4938a246ac 0000000000000000000000000000000000000000 +42d51bb35b52b6da2636b49aa73610237fca9819 0000000000000000000000000000000000000000 +42dda81f3c3fcb15455a7752e3a06942feb4173f 0000000000000000000000000000000000000000 +42df50c3d9330e12e1e2d3a7558c0e11566342bc 0000000000000000000000000000000000000000 +42f7213468c09f97597b3623adf244531b57aa3c 0000000000000000000000000000000000000000 +42fce8090e052c885103433ff2a76f3b83383837 0000000000000000000000000000000000000000 +42ffc779749f7a0d36c96f6532089d704aa2d2d9 0000000000000000000000000000000000000000 +431a4e9ff0095db55a35e2d6726c374789f8c42a 0000000000000000000000000000000000000000 +43282ec71908cffcc697f6b1b00500b5a247f7dc 0000000000000000000000000000000000000000 +43351ca0532227da7b5a6ddbb18aaf101e0a8e02 0000000000000000000000000000000000000000 +434b2f8b34e4a3a27bd99e43f61692f0b00c3054 0000000000000000000000000000000000000000 +434cfc092454b10c1c22abca75eaf4101ebe1656 0000000000000000000000000000000000000000 +4357373ce8a94609829af79acbe358319c6571b3 0000000000000000000000000000000000000000 +436ad1f0a39061d864812132f8a534e9833f0b35 0000000000000000000000000000000000000000 +4382dbbe41857226d14063ea2d4a8922d64d0b74 0000000000000000000000000000000000000000 +43895aeaaf24eeced26208578155e1413a1aef56 0000000000000000000000000000000000000000 +438a8892b19bb8962562efbcb02efa91d5a453fb 0000000000000000000000000000000000000000 +4393e09cc1a93cd3a19d36bfce788c5c42575a0c 0000000000000000000000000000000000000000 +439994d7137969617e1772e1f9a2a0c490c1c232 930eacef827517946b5bcee9247754ddb93bb2cc +43ae5162394f03e419822fbf837e1010549fada3 0000000000000000000000000000000000000000 +43b16cd4560fd8efde62bb5c54358abbcc821729 2d2575cee6d3a62e9312e02f059f19024e7fe1e0 +43bc838161d7296ca0a5470dd89633d225631d65 0000000000000000000000000000000000000000 +43c75a90746344fcc975611100e995fe4045edf0 0000000000000000000000000000000000000000 +43ceb3034aa7af5f005399f4b7f22bbd4db09a9e 0000000000000000000000000000000000000000 +43e165cc06e601faf9b0402c5d35d7d27d71b2f7 0000000000000000000000000000000000000000 +43e7d77725ada025f630fc46147f7fb932851e17 0000000000000000000000000000000000000000 +43f48ec9fc5caf2ed4a4b5b9b973b1b2c738de78 0000000000000000000000000000000000000000 +43f6d64f6f3503d2aaf715c55c4fe391993aef46 543a3bfe8046681cf20bfa7b1c062f7c7ebaec80 +4403a9c0afda2e6d1c07715cdd97fca029b88f43 5b6f0d83d6355a9352c1041afa9f62180eef04be +441584b94e9e1b4823a5e6516190483f58a2eabf 0000000000000000000000000000000000000000 +4419da42acae4bd96b9a7c460bede5765174237d 0000000000000000000000000000000000000000 +4424c8502382447890f5991fb01bd69358606603 0000000000000000000000000000000000000000 +4428e67a9d61c69d9b77bd526e94b6c9ae42c0b7 0000000000000000000000000000000000000000 +442ca2f0936cc8fcb5175ca315ebec944f54cba4 0000000000000000000000000000000000000000 +443934060e1e446de726addde69a2de955b95a7b 0000000000000000000000000000000000000000 +445b6284807c5cf013c61de467d84f380834c8cb 9cd0a8f619ebcf5a82a7c0529fe9307943265714 +44702042ca82d4b181fbe16f9650accef78f2448 0000000000000000000000000000000000000000 +449ab2634484029c2a24c1775c9de4c9c861db1d 0000000000000000000000000000000000000000 +44aa1d60eaf4de030f1f5d5cb2c875b23d1b5358 0000000000000000000000000000000000000000 +44ba78e5177e9d9b9002e1844d6201e8be1c60db 0000000000000000000000000000000000000000 +44def6adeffaef2f984ca2b868f73ab5eddbfd5a 0000000000000000000000000000000000000000 +44e1bb83ac1b1333292bbdff8df2ffe9735c9110 0000000000000000000000000000000000000000 +44e5156f7bb63889dc80c5882f38de005ffbe151 0000000000000000000000000000000000000000 +4509488f2e8725e37a60a3b7a3a8a0b6c0c74378 0000000000000000000000000000000000000000 +452a6b9730a2fa310aee64d0b9d2a0c7ea6d131f 0000000000000000000000000000000000000000 +452c6299fbc9e01824b0503bbfb4f476ded7079b 0000000000000000000000000000000000000000 +45329e4e5b3606964e85bbfdece4b5f239865353 0000000000000000000000000000000000000000 +45372397dfe9514ac55c1f873919c7587807a599 2f118812d52422359b266b9f129f867153d4ec69 +453dc5d79ef06a3b1c67d9ca6f898e29d47e5618 2ec86ebe56787e942baa56f9dc2802f03d6cd02e +456914ffaeb632049139cbc9885abd47536b7216 7c67b241d493b5baafdb4e0d8ca60bbe25034070 +456cec5adc64aa7136b9cb8503a9fdc8a2039395 0000000000000000000000000000000000000000 +458cabe6cd0fbdb192dbd17f2d6ab3b8162d1166 0000000000000000000000000000000000000000 +4591988891dea3b3102e66543df69abce39d6728 0000000000000000000000000000000000000000 +45968f3263f39206bc31dbf9f8488e1991a380cf e07d201f279314edbaff49597f036990b63d6d67 +45977b50188a0065fde02a3ac44a1fe718a85b30 0000000000000000000000000000000000000000 +45a544e1c8ed9f32b5d47e92584e7cfcf4e540ac 0000000000000000000000000000000000000000 +45b0e5ea73885a74f07d725bf49ab94c2fc5f7e9 9b645b92276505cd6927a3c78ad6302bf36f44ff +45b43c3cb0f176f75ebc1eeeae6c393ccb624db9 0000000000000000000000000000000000000000 +45b835ca25a32cc71c8eb955d24fdf790bbfc043 0000000000000000000000000000000000000000 +45d19e567ee6b714145d30817d94d590219ddec9 5931876a8577b8d4711969dd65d7a24240656ec5 +45d49f1a9dbac0d83839fc557933585e25e120b4 0000000000000000000000000000000000000000 +45d7ab1b765cee7376565a858dba00d2ba4cbd0d 0000000000000000000000000000000000000000 +45dc6b334ab82f09a951db9388d423a744996bee 0000000000000000000000000000000000000000 +45e40fa675570fc382d4a72684a009b567d45118 0000000000000000000000000000000000000000 +45e85c77831d9dcf59cb1332839e0aaf266e2e72 0000000000000000000000000000000000000000 +45edb769cd0c862fd73b04126c847104846b3508 0000000000000000000000000000000000000000 +4606cd954a2deeedf8040d5dd17f6deff52e4e52 2f19140044b00ac5a248f341e00aa06cca45dffe +46093b76581090357ae102e7e504c5688a3bed15 0ba0b7e2cf3aeaaed0fc07cc774aa64526f92f9d +460d267cc463ca8ea6028a16d7cabf0a62c0701e 11582a2a2d1dba27b25e2798231232413f4ce2b9 +463a3fc4bad4623415ab4560b18f7dd6f578c84a 0000000000000000000000000000000000000000 +464bd218c36add1264d2ca5b950b57bcfed43d52 0000000000000000000000000000000000000000 +46718f0e4e978fca7e719f25cc94bfb8fd092cfc 0000000000000000000000000000000000000000 +4692c6b5594fde0d278518efd5583674c681ba24 0000000000000000000000000000000000000000 +469a55a4d223217a8ee465f9f9e0e25df38beef9 0000000000000000000000000000000000000000 +46a95c8fc13db18cd76ab48878b4906d61f841dc 0000000000000000000000000000000000000000 +46b18cd594c3552d07b926816d93cc576905c639 0000000000000000000000000000000000000000 +46c5f53743ec4e2d7dec4b216b68b4844151054f 0000000000000000000000000000000000000000 +46d5273a50df914128cd90e096818c0ad9e2cb16 0000000000000000000000000000000000000000 +46dbe16a6e2ebfd59898f9439afdb613107884c6 0000000000000000000000000000000000000000 +46dbfbb760db01adf33e199a047f04402d4732cd 0000000000000000000000000000000000000000 +46df7d20b52130e766da90361bd1a94350f0d814 bceed5bb816d21333f6459e2b687a8ac2a6161dc +46e08d4b53e756db5d717337488c9bb787ec8ee7 0000000000000000000000000000000000000000 +46e8e2e28207ca9cb18e76f992c83f0d032b2a31 0000000000000000000000000000000000000000 +46e9db7dea8a5c8072f5e9d26eabc91deb1cbfbb 2eb00a91fa235a882a46ac4805f30340b5959981 +471a61a2567bb517ede94f0bec1a53ef806b2db3 0000000000000000000000000000000000000000 +473566baec3943b8ab5b496870d95cc35f483dea 0000000000000000000000000000000000000000 +474348f4864efe1ba4e3aefd0f2459f564a17d1e 0000000000000000000000000000000000000000 +474944daa73a441a26fdd031a20ff12eb141ea10 0000000000000000000000000000000000000000 +47535286760cf5bf9efc9f0e954465163f3dd3e4 0000000000000000000000000000000000000000 +47636dad0c0452bf3b3cae7b857fae817129632b 0000000000000000000000000000000000000000 +4788e49cbe56a49acf1a8a4c944c1d0b2e90cc62 0000000000000000000000000000000000000000 +4789c8705bfd72556f3a32154846b130538f2ab8 0000000000000000000000000000000000000000 +478e08f8af338f5bbdc8f3a297e8d210d816087c 0000000000000000000000000000000000000000 +47984b463a6d7e515401623d51e0ef8d8b63b417 0000000000000000000000000000000000000000 +479e6c7ce4214941dc3c215526de6185337af3d7 0000000000000000000000000000000000000000 +47a391b7b5771a767e1d29638b59e4e30a1ae782 1b002f5d0e16d85c3db541d99c3d0612c5c98f47 +47ad39db0a318b7e1751d2bab6fe71c764a0601e 0000000000000000000000000000000000000000 +47ad76b4318d1a468478d4c1c82092bd5aa0eb6a 2bc41df7cba3de330ea8c1e33d9a0f001c01a40f +47b3873bfa9b7125b3e6ad5010942c41bb2088be 0000000000000000000000000000000000000000 +47bf1eba62b6aa3bc32b8bfcd510ff9779310796 0000000000000000000000000000000000000000 +47c6f58c0e71076f0b1460a22d9d63cfe38b4b12 0000000000000000000000000000000000000000 +47dca99227d1f357a823034c359027f72ee52e09 0000000000000000000000000000000000000000 +47e3e253ec99d5d1f6eb87d1d2e2d940717beb13 0000000000000000000000000000000000000000 +47e5cfda06c0f7ed286d5ae492e10d353f28faf5 0000000000000000000000000000000000000000 +47e83949db56b1668138921df8d515784fb9508b 0000000000000000000000000000000000000000 +47ed9333bb1383e9f8c623a9ba7cda217035884a fe03781dd4617c8e5e2142632125d53fd8b0a18b +47ef7754479275495973fac82552b2f83a6502cf 4888e09642b72848b82bb58e54da14ed129149f3 +47f10d323e78b9e6caa757c0d2efa378a19fc28c 0000000000000000000000000000000000000000 +4801b062c015f696872e3ae67afa115351a43f46 0000000000000000000000000000000000000000 +480310e2fcfcb0e0edbf237c22c6b200993a2911 0000000000000000000000000000000000000000 +481432c775f2e353bea62e9a4f203dc825f92681 0000000000000000000000000000000000000000 +4819c0cb0fb354d00524aed699e96385283927c7 0000000000000000000000000000000000000000 +481d3bca0462b3c0560e38f9de6491c6b3f3462a 0000000000000000000000000000000000000000 +482175dc5c9d94aefa3e487bcd154168aaa5601e 0000000000000000000000000000000000000000 +4821b922d9228b239e876e6204d5d1358d10a1c9 0ece00274e2c94931f7274bb7fb52eb6a1904afa +482787f0ef636762a6ab53713ed5db00e4c06f2d e02caf022f84402ab39b923a6e6e1699962b9a32 +48394eff6208973a7df7b816b97d3814f56d2a27 0000000000000000000000000000000000000000 +483b35eab81047275c5b382d2ff348f1374a0810 0000000000000000000000000000000000000000 +483cd7b85b63728f2263fb9c90d56aa96460eb67 c4faaf8dd8592e436823525d81c78dee82166e74 +4846e118d20ad7cc01fc7829ef504a83656636f0 0000000000000000000000000000000000000000 +485c45c0fe884c5859ae85092b59edef11c51ff8 0000000000000000000000000000000000000000 +48685d312a1f13077d90a655df83c92d66f7ce17 0000000000000000000000000000000000000000 +4871242fe4d6bf3c92a8d3ab1b18e81cc78d719c 0000000000000000000000000000000000000000 +487194f3c3435b876982921a38f194d49c04c582 0000000000000000000000000000000000000000 +487b1f93da7cea980b38fe95e403328c92561b52 0000000000000000000000000000000000000000 +4890e0e0ccc1d01fcf468769d564c27253219ec2 0000000000000000000000000000000000000000 +48a809e987a1331263d460d711e4f7955281892f 0000000000000000000000000000000000000000 +48ea5e1cc5e38949bc0481e35ef38797f678d973 0000000000000000000000000000000000000000 +48f56b09be2a64fa42e141121a9a7b19d606e4e7 0000000000000000000000000000000000000000 +48fb81c978ce9f9cfd6f5cda3d8dbea571a8f1ba 0000000000000000000000000000000000000000 +48fbe511f00bff69ea09228e6ec1f83b83a934ee 902549d173ad5d99c04ed980109e83edbc9def4f +48fe3d52edc521ef58a9bea0e8de7bd947b53847 0000000000000000000000000000000000000000 +48ff9a415e7b83c2b5c760fdda949b761743b0fc 0000000000000000000000000000000000000000 +49014cf38c6dad02bb52569de55286829a968d3d 0000000000000000000000000000000000000000 +4901a657f6c4bbc44e6397e77594fa63923f4799 0000000000000000000000000000000000000000 +4902c192e2a38655a8225d458737a694eaa9c13c 0000000000000000000000000000000000000000 +4905fc82a5e4cb8bf9fb977c52774cf0b42b6801 0000000000000000000000000000000000000000 +4906d21f65f10f09b73fff2cbad6534facfdde72 0000000000000000000000000000000000000000 +4907d1c1c4d5b8450d32459752e64e5beb592f46 0000000000000000000000000000000000000000 +49158bef07fd32f9c9e943ea0444dbbe34bde344 55fba95433010b65eb90a29b144e8fb041a86633 +49253199fc56791f355719c974585e77144fa04a e315f02e949c3636f292f8a6f00d5a3fcff2d847 +49270e398b98dd5f8698e727ccf4c374afa1ae6f 0000000000000000000000000000000000000000 +49435c072937d6f5dd3659ba8d0d800dea2152d2 c2687f56781dbbb115e52bcdcd7e2d89f4665797 +494e59cdbef3ea3e091a770c138f41dbd2f4c78f 0000000000000000000000000000000000000000 +4952d55dbf789f1fb6a82294bb4ec8c16f751418 0000000000000000000000000000000000000000 +495a8094d732f8d4af89c7d05794db724ee0f29b 8a290ec0db8f9deacff2523007dc5b8749620832 +495d8e635e03b427403624e7971ad081015322c3 0000000000000000000000000000000000000000 +4963f146c102fa81ea8962805eaf2f90e6b2a379 0000000000000000000000000000000000000000 +4965a7be64af114f97141b56c5371d38a64f1901 0000000000000000000000000000000000000000 +4969c9f1a72f3e5c5af20ea097565ca0aec9d490 0000000000000000000000000000000000000000 +498f51d674ca8f0917f9c853e818c27d5646a886 0000000000000000000000000000000000000000 +499136062efbe515136d95ba67d1b43480180f99 0000000000000000000000000000000000000000 +49a12f384632a08c2cb663c7a9c8350a62953294 4d9e6ec2918edf49a537d63a3c3906271f4b12b8 +49a65c362cb5977674e8a60c4330254ff9ed60a9 4f400795309e0de69e27ec411eadae96c919d7aa +49a94355540cb9eba9a8b50c70da0a2333eb8660 0000000000000000000000000000000000000000 +49a99c6f80be50ae4234d2d50c479657653e28d1 0000000000000000000000000000000000000000 +49f39218affadcf33040455200e6d1e6d91daff0 0000000000000000000000000000000000000000 +49f6d705bf8f5aa7f76881b72d19831d5200b4e3 0000000000000000000000000000000000000000 +49f9560b38009d32a9dc43f99cdeb4bd2c3e8b42 0000000000000000000000000000000000000000 +49feef3bf855e956786489773769b56964c55f1f 0000000000000000000000000000000000000000 +4a015992724cc175e870688fb76aa663c212eee2 0000000000000000000000000000000000000000 +4a0ef24275d2cf0a23d618a9ea3722ee6be31253 3978c757b7a77bd7d34085e58822d91bf27adb12 +4a163a6ea3701734989ad270d7e5071e95c5317e 16b50ad42555a2bdf016c9ae828555237e18db1a +4a24112565fd9b07c398d547e669d77778286488 dce943e73ca63204ceeebe027cc65d963a954068 +4a2adf549528dd82a4c62233db455a62a6d3157c 0000000000000000000000000000000000000000 +4a2f20e8c59352ca533d9be2b11e997bad22b62c 0000000000000000000000000000000000000000 +4a46c6f0fdd77d76ff97c18e528e623a126b1b53 0000000000000000000000000000000000000000 +4a50c77a90f0e9810b4912cbb694883921c508cd 0000000000000000000000000000000000000000 +4a6547d08c86194e1783ce7f52e8248ca15556e0 0000000000000000000000000000000000000000 +4a6b81683e33736e1280f02d940e62540d390db8 0000000000000000000000000000000000000000 +4a6ca43701b589a359794a9fa99e3ff6e1c0d33a 0000000000000000000000000000000000000000 +4a7238776505cbad489cadd8eb0dcc642058b3a4 1349450cdaf5cfb846ef78a6182f6ea4684ad784 +4a79e7fafdec38238b0ac9cb261d2063ad8ee41d aeed90a1117649448806f3026f725cb81439f3d5 +4a8991cc9ec4beb943a7385df5c4b0d88472227e 0000000000000000000000000000000000000000 +4a940c95b97460687a5f1670be66b086957f5e55 0000000000000000000000000000000000000000 +4aad962e821956e5c54347e0fc33aec15b465d65 0000000000000000000000000000000000000000 +4ab77f91f76b0fcd617e18d7e8b1557dddd49ae0 0000000000000000000000000000000000000000 +4ac479a2fbc0f9588b551467a711dd7d54b64106 0bf8ff5f9aa7304524898ec0785c7dc2330420d5 +4acf416d6f1ca212894fb36979db3fe07d7cdb24 0000000000000000000000000000000000000000 +4ae5fb5bd1e097d8a6280d3ac7fe130ab68086b5 0000000000000000000000000000000000000000 +4aef7b7aa4d6f19be86f7bdaf1c37edb7d174317 0000000000000000000000000000000000000000 +4af08780c3a9cd3735613a937467cc8deb8a7d85 0000000000000000000000000000000000000000 +4af574cc8857e8654dbb408f6247263e3e0c512a fd6b2232864811268fc222a551be81dc6e1e5271 +4afdd159b992867fbf40c5947f07b35c6e9f1571 0000000000000000000000000000000000000000 +4b3164a76b316951cb043aebf950663a17e51c90 0000000000000000000000000000000000000000 +4b31bc368ccf4b77f68b0be59d6c29dc0164a545 0000000000000000000000000000000000000000 +4b341a04bfcba7242eb7ca424c3ba1e97ee381e5 4e1cdf0ed30711c04bf8d021319466aa2e9e8e79 +4b3722f69730fc8ecf81db4507623bb4eb9112cc 6757cacb79042cd4738dfbf98504383593439b41 +4b4d31ddf4ff152417cbd20e76ee630dcf4b181e 0000000000000000000000000000000000000000 +4b50cc5d7f52cdfe743742d9aa9f9731cd1587bc 0000000000000000000000000000000000000000 +4b5468d126b07b2667825479339e9fd726c78bd0 0000000000000000000000000000000000000000 +4b5f56270182d1b51547176e529eea226e3fbf33 0000000000000000000000000000000000000000 +4b71d938a3c1abe278693194513721a2ea4af064 0000000000000000000000000000000000000000 +4b761dfb3183ab9b16801f2163379f5607fd6546 e93a95779458f1b2ab4dd88d7b233da9b3197cb8 +4b7c165d50e8793c3078aa33e20187b5bf170e9f 0000000000000000000000000000000000000000 +4b8b343be69256f1b7cb9c8e1fb5576466808a29 0000000000000000000000000000000000000000 +4b8c697ac37eb7cc34ed4048c2e4ca80525f53d6 9c9c4ca1a5a67fe140b5da83a4d65c94c2df335c +4b8ee8a4d9229f9342c0d6e9b3eb9f9a19c5eefa 0000000000000000000000000000000000000000 +4b8f8aa2b20e8803a0ba18d73e265b725e96050b 0000000000000000000000000000000000000000 +4ba044df811ef413a2e212ed064264bd7798e1eb 0000000000000000000000000000000000000000 +4ba2d8bb1ef486e7a6ed920705380ae642b2c83c 0000000000000000000000000000000000000000 +4bb924a32aea8bbb3c2214964b3bb45539baab82 0000000000000000000000000000000000000000 +4bbb876e98a50bb1ea8c67a075f24c7071390e81 0000000000000000000000000000000000000000 +4bc07e32ac33e36109e692e7735641c2acc8eb53 0000000000000000000000000000000000000000 +4bc34b14a31757b95e0cfd4b67f559c24387d5c0 0000000000000000000000000000000000000000 +4bc80e4c06448946af2864e1eda1acefed580580 5d76709c15598c2f71a31eed9097527606c9cd9f +4bcbd51caff689a73e90efbc08f683383741e004 0000000000000000000000000000000000000000 +4bd1685f98dac62c29a9c5c5e7a98593237da4e5 0000000000000000000000000000000000000000 +4bdc8b1e40ed3a432210618ebbbdaf05d7e42acf 7195d836beae71af33a9129305ea0c6dfa68fd54 +4be1ec4fc5befa9c81083f6312d7c034d94ca310 0000000000000000000000000000000000000000 +4bf34d3a96ca45ad55529270e23fcd62a9c8cb20 162e37d63ef4ece236ea957855c8220eb7b27dbd +4c085dff395019f61f60ea091542e9c142708101 0000000000000000000000000000000000000000 +4c26dbb5727b2b8412a380e7dd7ae61df96cf780 d16ba4b94af9e356a3756033aa729bf7210a7dd1 +4c4d257c0cf10d1742fae9f3961e4a6242c0ce1d 0000000000000000000000000000000000000000 +4c4ebd360ee1166760bbf4dae7ee106ae907f0fd 0000000000000000000000000000000000000000 +4c558a886605f6f3b6f8db53e5594a61d4619998 f92b7c4ae162ecb755bbcc44df02a728a6926cb3 +4c757e1e9806f95ed598f349e4fc35a0307b9342 0000000000000000000000000000000000000000 +4c78e8fc48d18feee20801051d79838caebe2255 0000000000000000000000000000000000000000 +4c7a4712e2badac08db6585310af4cc97d72462e 0000000000000000000000000000000000000000 +4c8a3809e41d3f391e4b17380c656ea9d25320d0 0000000000000000000000000000000000000000 +4c8ab292ed47562945dfb0232dd68d3d536ac02f 0000000000000000000000000000000000000000 +4c9cef5e128b6f96ca1f172f6e0f903fd13f11c7 0000000000000000000000000000000000000000 +4ca2f877eb282560783ce7afc02cf836bb7120fc 0000000000000000000000000000000000000000 +4cb0347d58c9c5d5ccea4171cc8e8c0d152b49b5 0000000000000000000000000000000000000000 +4cbbab299ec6b2e56705d2a7504de22ab3e9baa2 0000000000000000000000000000000000000000 +4cbd66d22821ead4a8f4c0a31586e2f61c0ce503 0000000000000000000000000000000000000000 +4cc030d19c063ce83a128b39513eddbb0a9661fe 0000000000000000000000000000000000000000 +4cc1db290d838c86cef0a2ed0951dbf2558a4db4 2ae4422a057445efed1e89246f67e45415a65043 +4cd04c6708745a8602cf527ce3588289b85c95c4 0000000000000000000000000000000000000000 +4ce0b5d068b894067078f041f66110cb0a8cb33b 10d6d56873be210017d849263486cee25c33e693 +4ce99724bb52e2060d06a44640ae91df387c2879 a90025bcabe06fb7c46df1d43cef322daa90517b +4ced0e9c477ddb892a7dcf3c5d7bb04ca143baf0 0000000000000000000000000000000000000000 +4d256e5bcb32f431b3c86ef018807a1a169441d7 0000000000000000000000000000000000000000 +4d25aba1baa546fda4c5e91c36ce24dcd43e4929 0000000000000000000000000000000000000000 +4d6bd484d6cf6c02aa6e40b7368fdfd8f0e47227 9bd3a13f718c6e93c590b35f9a881cb8244a6fdd +4d780a6f55e93f086f00ecd8ce33b3d9eaf1d41f 0000000000000000000000000000000000000000 +4d84210ba96b344192ccf8ee8bcb85ffd4837478 0000000000000000000000000000000000000000 +4d8429cbfb177eb10cc037c491e178b006c567b8 0000000000000000000000000000000000000000 +4d87ad4f895a944899f7dda85ea3392cb27a4a04 0000000000000000000000000000000000000000 +4d965dcef99f8a5016544d5b3539bf7cf9627ed8 0000000000000000000000000000000000000000 +4d9c17b7287b27b9058828765722f55eb378e40a c4ab5b5467dc4afcfd2677369365487a1e1e52f3 +4d9cfb5a22f8ab2975a5d037ac6fb50665a5f339 0000000000000000000000000000000000000000 +4da0fbfcb896de7dc790dd858087e7a71d485d0d 6e2c12d4990330438d99a32d61091a76fd77668f +4da5e7aaa682e37b33b4f75b64d34c15b81e9a7f d2ae92184d4dd98ce3f768686c4361d146b1fbfc +4db5c1ae39d4bc6c5138fda5d9d14904f069fa3e 0000000000000000000000000000000000000000 +4dbc57eda52a847125b02c089acf003a42ecd9fb 0000000000000000000000000000000000000000 +4dd593cd065f1f708b42c4de2297ac7f072a7b55 0000000000000000000000000000000000000000 +4ddad20b9604cd6629147ea634b1238761e0eccd 0000000000000000000000000000000000000000 +4dddbc3b10f44d8eab152fabd9fcf8e951832a73 42ba53307ef2dd4925892456a6c08edf47be78f0 +4de55a4cfa714de748983677f9b3f49c608ce951 0000000000000000000000000000000000000000 +4de931392d244dd6393417a92173a98ffaa594f2 0000000000000000000000000000000000000000 +4df2357e4eb313b80f1edbb5467108fbf5ddb89b 0000000000000000000000000000000000000000 +4df30254f6c41aa34f9072ece2152d4a62ffbe5c 0000000000000000000000000000000000000000 +4df4b264ae5bf65f67a9029df39d67e1d5170168 0000000000000000000000000000000000000000 +4df5db817e447abad55a826044de57a8eb9452e7 0000000000000000000000000000000000000000 +4dfc9b8c533d454cefa3d576adb4d3d422747d16 0000000000000000000000000000000000000000 +4dfe0e7c909de40cfbeaf430772a4a8f99193453 0000000000000000000000000000000000000000 +4e0639f02e8f8d3261ef1ae8364de4d689247ac2 1166bc348a12531889bb47797829f645dd462ee2 +4e0792369fecfdc715499d03e879310b8efe2c9c 0000000000000000000000000000000000000000 +4e17d060862ecb31279240e02c5035cd8684c62f 0000000000000000000000000000000000000000 +4e392e18151c41b01e688673487db94ce18cce6a 0000000000000000000000000000000000000000 +4e406ceaa6755d640bbebae934ef485455c9ea8a 0000000000000000000000000000000000000000 +4e480eda07f9a6b0f1a077187c747d390fe3b450 0000000000000000000000000000000000000000 +4e4ba5d489c2be9d4bd2fc0be924c582efbcb043 0000000000000000000000000000000000000000 +4e4da8e45a6b26b1d07416d8eaa9093bb99c7c3e 0000000000000000000000000000000000000000 +4e4f4c6ed737bb759fce508cd2a6e8dd3c4e2084 0000000000000000000000000000000000000000 +4e505235180737948988446b51946296d76b5835 0000000000000000000000000000000000000000 +4e54dfd0af0768050f7f6d0a85a4968ba0e60025 0000000000000000000000000000000000000000 +4e613084cf22f96bfc96bb7f585476147ac41a2e 22614524e60d3ac9455ce5dee9a95a9fa9772bc3 +4e664e04cdf9b7db6610326f11529eee05bba7ed 0000000000000000000000000000000000000000 +4e6a9866e87ffc72be0c60f1fa42628261edb513 9351b4d79fa019a42db03121ce0626d8cc00036a +4e73330127d8710a951b0df8aa50cf679827b08b 0000000000000000000000000000000000000000 +4e75438344847abe30b10aa12270c6320674e97c 0000000000000000000000000000000000000000 +4e81b9b1d9d2d825b5b338ab4c33a65a843b4dda 58965a25e06aa2c7070a3843d0dd3b5970f71fe1 +4e81bd7e06e5ef2278216f4f89b031052e261690 0000000000000000000000000000000000000000 +4e81bf938300b62f275a7806328c97525fda597b 0000000000000000000000000000000000000000 +4e9c56abccafeacb5235c0a30383471af6ba7d2b 0000000000000000000000000000000000000000 +4ea87efad0edde89f2e29c0c495a33a4467ba939 0000000000000000000000000000000000000000 +4eb1c6c1ae576785e12f80c531868ad97942c424 0000000000000000000000000000000000000000 +4eb9a133bc4a4bdb684bf17942347b2b70da5d98 0000000000000000000000000000000000000000 +4ecb4e4b7131d19e0d759c031b999e249c90516e 0000000000000000000000000000000000000000 +4ecd027f3ffffdbd224c5a99268a4483ff48ad4f 0000000000000000000000000000000000000000 +4ecf8a4123c6d190ab39e9ad59bc9c3ca8cde45b 0000000000000000000000000000000000000000 +4ed525190f5f2163e782c2a02b05aadd91b29bbb 0000000000000000000000000000000000000000 +4ede8e6cd0b4106e7ab57aeb35a7480172bbc7eb 0000000000000000000000000000000000000000 +4ee1d8bf44b5fcdf0fd22deca1d36ee4faf421d1 0000000000000000000000000000000000000000 +4ee34a8a2bc63ef48f20e8973e5a0e99e7c1065b 0000000000000000000000000000000000000000 +4eff4c46ceab6fc4f9bdb56476580660093f534f 19e22ca3ea0e99a980379350ab23356325ccd194 +4f0554d5f5de6a31b649e1757590f3fe422fd858 0000000000000000000000000000000000000000 +4f09473c592b38947cce1d7b0a93333142e4887f 0000000000000000000000000000000000000000 +4f1513e24e7a73365d90cd814e0cb867aadd40d9 e44f173228e899ab124e240dd477ab84689f9a4e +4f28b657310b90c82a5b5af9f91ef6e097847a97 0000000000000000000000000000000000000000 +4f329d1ebbae89e9c4099f047eb2bfa9c18d8719 0000000000000000000000000000000000000000 +4f36bc22bd4f5ae24935eaacfe9e1e89b68470a9 0000000000000000000000000000000000000000 +4f47916f096ada4335ccf1b4a44154bfa98e1c64 0000000000000000000000000000000000000000 +4f4c12f4b7aa727be5752d3c12deba5fb517f79f 0000000000000000000000000000000000000000 +4f55597866e1b5405723c9c98b97da626baeeb8e 0000000000000000000000000000000000000000 +4f5e04e609e367d6e5d549bb1f2ab9c4bcafc694 0000000000000000000000000000000000000000 +4f6549aa0c9fffaa9a14bea3c81323ff18a6478f 0000000000000000000000000000000000000000 +4f7f41a500281279320b95790a72b8ff44fbd7c9 0000000000000000000000000000000000000000 +4f83e5dc670c7d28ae6c9615f0163d5bb42bd979 0000000000000000000000000000000000000000 +4f949113ef78c3e2252322bc181cf9abaf42e768 c7073b9269fdcee4c6ee17a574250f1f8f6fd441 +4f99ad4839af56edfe626a25826bf7b89ac44344 0000000000000000000000000000000000000000 +4fa15b4729da04fa82f1c447a02f5075de679fea 0000000000000000000000000000000000000000 +4fa6efe6130decf6cdc346b6b8b28bcf5f1b7bb7 0000000000000000000000000000000000000000 +4faf403e8729d95ea4512f0083bb193e00250111 0000000000000000000000000000000000000000 +4fc2a755266ee80ed3d1250fd43e79feadc83d55 0000000000000000000000000000000000000000 +4fdd0e87dd3b05994ec14ef14da91087260647e7 149f3bcd4d46c2275657463af48c9a8e92bcb9cf +4fdfd7040311898eaffb1c17a5b2771964a63301 0000000000000000000000000000000000000000 +4fe58269277ee939775ec98e0ffa7b5706c958bc 7657aaf3ccfee54e29d87c8494fddd47ceaffb10 +4ff0d5449c513c2b73354b046d0a9f939dc9c8d9 0000000000000000000000000000000000000000 +4ff2176859c1592dea572a64633a3da8ed97d02c 0000000000000000000000000000000000000000 +4ffe0836e7672444a0f1a485621c44a0b88ddbdf 0000000000000000000000000000000000000000 +500f0c7f45a81a13d51cafc9a74208d0280585a0 0000000000000000000000000000000000000000 +5015239edcca143c15b01a229b45d76b1f3455c9 0eb98e5cbb92d2fb6a9d63ce9d10c7926d906f54 +501e88cebec533095d1fade8e3e43f45c54d904c 0000000000000000000000000000000000000000 +502830aabd72a15d6b9090c2de535153b9d81664 0000000000000000000000000000000000000000 +503436b89e4dd268c0958c110688f5fc7e4695a4 0000000000000000000000000000000000000000 +5034952d506ae08837ca75d73fb71940eda070b9 19e989d4a88bbf53485768adc32c439d868aff96 +503602ef8f6da811c0135dc937794c3b3b4d29b0 0000000000000000000000000000000000000000 +503cf84f140ca3f2cc40bc0f5dff26bcc2ee0a8c 0000000000000000000000000000000000000000 +50438ba2d710f094f3b084acacf1e7cbdbbf25d5 0000000000000000000000000000000000000000 +5046131cdea8851baef9285198ec0ad9a3776cc5 0000000000000000000000000000000000000000 +5059a7f37fce7b80db5f32f747d4c5e48df20980 0000000000000000000000000000000000000000 +505b735f42ad08dbe4ac0864e62c7f334c4a5dab 0000000000000000000000000000000000000000 +50610bef8a1e43ea6d67cab95bfd20318e05cb93 0000000000000000000000000000000000000000 +50649b334724d1ee528f6979a611e9258b13d0e1 0000000000000000000000000000000000000000 +506ef1f3f0fa262fd790e9155d173808719fcb61 0000000000000000000000000000000000000000 +5071753d0468ae3333c6c791d9bf697ce36c23d7 0000000000000000000000000000000000000000 +5078a58da2d8a942406cb5509192fa9e92569aed 0000000000000000000000000000000000000000 +508dc0a58ce3c2de90933f0cdf4b9af446c2f23f 9ff25472ecfc6a448c1eed12340fc20424eca5b4 +5090c01e8297b53beaff88aea3ae4ab1d56f39b5 0000000000000000000000000000000000000000 +509d53c5caedf672094e2cc7d0b7a513ae64de8e 0000000000000000000000000000000000000000 +509f3327975552b974962ce2d8546409bbf441e6 0000000000000000000000000000000000000000 +50b44aad12d8fa86a46f7f6d62896a7b1c344d2e 0000000000000000000000000000000000000000 +50b9a27945b7f4720bfca04449016bcad4403910 0000000000000000000000000000000000000000 +50bdc63c52ce03151c940d7464cf0aaac2210452 0000000000000000000000000000000000000000 +50c8e3459d9849d0f9acfc1e7efc99668828e8a4 0000000000000000000000000000000000000000 +50ddca2f72a9b4eef21c45fdd1c978e8f6f32eb3 0ebbf0ed09e70f1497ad23b54cdfc84c160bca12 +50e02ae2c3f46b7c904abcdbb2531888726c579b 0000000000000000000000000000000000000000 +50f5a2bb119089bb48987494d906cb1a95cddbd1 0000000000000000000000000000000000000000 +50f7fc0b7688e3f77737d34bdd54bbb8e6959013 0000000000000000000000000000000000000000 +50faf87fa177e298077b83340de7749f77156509 0000000000000000000000000000000000000000 +50fec0147cd24bc01b8564900316261cae5e88fc 0000000000000000000000000000000000000000 +510cd047966e51d2035b9c22b2d31c5010ca94e7 0000000000000000000000000000000000000000 +512c795fc6b6a20994245e4b8ea60bb8b5de1c35 0000000000000000000000000000000000000000 +512f75c326b1f647ccfb449aa937681d64e8148e 0000000000000000000000000000000000000000 +51323b8ddb0757a4699f5fb7e20f441a6ad04bc5 0463b64c6655418e8a768e68e16eb74fc7628075 +5137545fdca8fbc1956cd79a2590d6d3562fe509 0000000000000000000000000000000000000000 +513abb9c0bbbc0f32d98f96440aee891ab483cb3 0000000000000000000000000000000000000000 +5140bafd7ebda60ad97126b66aa8df3afb9eb111 0000000000000000000000000000000000000000 +51492e9abc69714cfddb8321a73cc267a467b0cf 0000000000000000000000000000000000000000 +514dc31b5e496c5957bb62a22799af7a38c71a3a dae498be190c80701e6baba80c46817bd500656c +514fb4c7f3141a2e4cdfdfd04a4b6d8cce0d955e 0000000000000000000000000000000000000000 +5174fbd622a5f4ce97b01347c781c62d215e3f71 0000000000000000000000000000000000000000 +51890ee000a76a17a9ac3019c0ba81cd5d74abfa 0000000000000000000000000000000000000000 +5189855c9c9abb159d3e6140849cecfb7e5ea0e9 84b35c988d5b0cbdc178d84e4f49e97a085afea8 +518abac32cc4158590820b19d3873f8585861ce4 0000000000000000000000000000000000000000 +51bb845edf0fbf75aa917ce474a771e11b6cff25 0000000000000000000000000000000000000000 +51d5018b2eac078362ac836e0dc27bbec0b4a62d 0000000000000000000000000000000000000000 +51d7b3041f145713e0adedbbd398c16fb1e98d09 0000000000000000000000000000000000000000 +51e2cd135f90fb900ca26c09677044da4b9611c9 0000000000000000000000000000000000000000 +51e85a7a24c446659faf4221130f7eb403b6c898 51491469429147084cc3e40d1f3845f82140491c +51f8923ddf4849f4a8b81ba33d644b8455d42ec8 ae7f56810907f2a9d164bcc3285d9b6d88ebd504 +52030f06011c17d5c314213f257677c88b7f9080 0000000000000000000000000000000000000000 +52036688b030247eb22cd2368f35cf0a48cd1530 0000000000000000000000000000000000000000 +520a55e4d2bb7531dd4d493b534302c8b296e809 0000000000000000000000000000000000000000 +520b3272a28ef57061886e9bded11cf789586a61 0000000000000000000000000000000000000000 +521920dec1ec7db1c08c74afcaa4a53cff4ba885 0000000000000000000000000000000000000000 +521a9c3b833d4ffdc1e97122da32ec13f07ea4b9 0000000000000000000000000000000000000000 +521d636e2c437c25e1758e9f6a22793d74adf2d7 0000000000000000000000000000000000000000 +522f703e6a40f7119961f42e860c78b9049d089a 8a0fa45e82c32486dacb723b3c200b060a29d70d +5230e28b835b081e32481bc724b9f23a16fdd019 0000000000000000000000000000000000000000 +52467f6b0250d5e04f2e5bd20ee62f8707b5ce59 0000000000000000000000000000000000000000 +52468a5f469082a82b2b49a24143f5ed24deb4b8 15c7f5e97596e00686c1937e6fce701c9e35dbe5 +524a03d5a78fa86c23c7be09992acec2fbc37ba1 55663f4e631f27a1d4e0baa00edb0cdff7d8d356 +5257198a44d7fbd384dfed82cba419efc5df4aa6 0000000000000000000000000000000000000000 +5261400de87a168ef1e321b3d1326718a24673cd 0000000000000000000000000000000000000000 +526162e3a1bc4a45d7142b2d380ba47ab8e81c8b 0000000000000000000000000000000000000000 +5267b645535f4a3e03125d225cfdefa5e4686966 0000000000000000000000000000000000000000 +526938e423f08daa9d87889d65ce3267094866e1 0000000000000000000000000000000000000000 +526aa2928b6929632d27f81b1ca83fe73df62110 ae9c87bf00fdfbdbc085006662b5eaef4063920e +527a2cfee69c34efef97675f1fac0121c0c8203e 0000000000000000000000000000000000000000 +52873821f29f1bf1dc23ce6b50619788bb3a1ccc 0000000000000000000000000000000000000000 +528cee20915a5957146d4331f3a9abde94588333 3adac53e5e7afdc07383e334d6d28f851f1a7180 +528fb1b9600d15604df9c829ce074f143bde36bb 0000000000000000000000000000000000000000 +529400d0216d7147142dfbbcc6d5dc947e4d5bb3 0000000000000000000000000000000000000000 +52981d4cebf4831f94dd59968231740e7891c5a3 0000000000000000000000000000000000000000 +52a66098870e1cde312fc26606854f38faca2c2b 7bb0abd90f095f35919e2fe8327ff85b76294bdc +52a7438415fb5ad951008f6f4d7148a6532ef85c 0000000000000000000000000000000000000000 +52aa4fb7dba0f250be9819dd0e95232a22eb81bb 0000000000000000000000000000000000000000 +52be452e3638e2429a6cd20ae96cffd6037a45a5 0000000000000000000000000000000000000000 +52db2ec78cf2e99fb9631aec83d452239aaabcac 0000000000000000000000000000000000000000 +530cf623133aa0e7b14be41a890519d60d8a5ed5 0000000000000000000000000000000000000000 +53167949319692d50f0410599601e7e4b956ce40 e7e3259d752751c5e36acbed7e8aa4b22b97801e +532fb65d4a497c32095510fb0db1610f6b47e8a3 0000000000000000000000000000000000000000 +532fc11f652d65426748d6a3621bf136e1288390 0000000000000000000000000000000000000000 +534594a29de149a91c6ac3229a69fb8173f59408 0000000000000000000000000000000000000000 +536218cc92c62b09068ef29571ca1a2939768971 0000000000000000000000000000000000000000 +53748ad035c57b6cb5bb2f49e1d72135929fe88e a0397ecf679083b9baf8d00cef06aa17f1d1fd0b +537af2ef6691666fb2f8b115ff872ee8e1d17906 0000000000000000000000000000000000000000 +537dc9860610933a1d3aa79e16693c7086251a58 0000000000000000000000000000000000000000 +537f96490afbd86ef1ad96037ab136d125b01785 a077462d40a693f5732e06b985a112acba2a87f2 +538013df93653370dfe43072ac9d5e6130888097 0000000000000000000000000000000000000000 +5389c78c7fcbe775b2d113997674a009676cebc4 0000000000000000000000000000000000000000 +538d2ebab86efe39cc2129d967ae293619d70dde 0000000000000000000000000000000000000000 +5396ba2112ec059196975f7a57abaa9364c126aa 0000000000000000000000000000000000000000 +539d1493faa906905e7b28b4c0f03dd41910ae39 0000000000000000000000000000000000000000 +53a5621272a39dc5c33424321705e85027e862e5 0000000000000000000000000000000000000000 +53b94bdc07c497573d60c286e2ccb75228ebbe0f 0000000000000000000000000000000000000000 +53c160cb08824c6ac7ebc1ba4e657b7ee2f4a442 0000000000000000000000000000000000000000 +53c4e2c225de1b0d4fc3cb59e3025784ba147ea7 87e744e5dcb94b576f06f2d30826c7a70ee9293c +53c56f7dc2cfa3824c738d9ca133a05c9ceb544e 0000000000000000000000000000000000000000 +53c74417f7e1c426f10ec8a490247458bb4ddc8b 0000000000000000000000000000000000000000 +53ced4e460a8036881b6eeeadfc0d45c7fe3fc0c 0000000000000000000000000000000000000000 +53f5f805a8c624b89a0cc5f9c5d2a15c817c274a 0000000000000000000000000000000000000000 +53face225782b214a651e2ffbff282080100bf38 0000000000000000000000000000000000000000 +540240aba9f96b598459cd49b67cd02adc82713d 356f4b5b8b3015deb622ed6471921db2b7e366e4 +540b624a8efa0c93052ac0e37307dae739b7a5d0 550bfc8255be2b45df72379a95f9cc29e72be594 +540f02bdc72364779aac5089474b3ad670f27820 eb526abd7167a259ee903856d79d96dfa1157f8f +540ff3d6ba5700d5e4dea23f943cfeabc5e9a9dc 0000000000000000000000000000000000000000 +5419ecb04ba16d9aea269f2e1959ec2daeda481b 0000000000000000000000000000000000000000 +541a3530d9244fe25771797a49c2ac718b509e05 0000000000000000000000000000000000000000 +5429810a87def5416b94a2d9620fa7d1b9bb0a30 0000000000000000000000000000000000000000 +5429aec78f3a89fe34f2671d41cca1ea7d2cec5d 0000000000000000000000000000000000000000 +542a0341eacb61d6d610c13e7054575190d692ab 0000000000000000000000000000000000000000 +542bddc1c930f1c5528c3c9d9482440225e64524 0000000000000000000000000000000000000000 +543da26e260c0fa5dbf8fe1869e8814f284bfafc 0000000000000000000000000000000000000000 +544d0ba44cfa5efd5ab672ac178f92f4a211d274 0000000000000000000000000000000000000000 +54554b3de4242475ef929fd6a53b3f3a6b1f41e7 0000000000000000000000000000000000000000 +545d4b392bfc273fa5e182d130738a9f5a36d82f b8901e659eb32373ec5e532d353f8a349c665a55 +54617e695ed561d73c75303190fe8738f7cce67b 0000000000000000000000000000000000000000 +546bd7086cc5e66299fbe1dac53bf1bfdeb9303f cff4dfd483c1479f6b437fb395d71c4c20e62011 +54712c138db83d1758af70481db4f295fbafa674 0000000000000000000000000000000000000000 +54713e833dbbe6f3e9c57fe0539d538910551cb3 24c4bced8238c5f026dc99a7ea06e0afbad1e4ef +54750f4f22b7cf4d311122c8658884e5a8ba8936 0000000000000000000000000000000000000000 +548e22b2c03c25fac552dd3f0d7e79eec734f29e 0000000000000000000000000000000000000000 +549111afeed29dadfecc988b9b0edbb7b5819c2c 0000000000000000000000000000000000000000 +54b320231a2874febf09e15c14aeb370a2d71f19 0000000000000000000000000000000000000000 +54bdbbea15a982ede1617d60784370202d5c99ff 0000000000000000000000000000000000000000 +54cf5dce303dafe7f7bc0505e8f551a50ceb9453 0000000000000000000000000000000000000000 +54ebe440ad4ce52425e16d3cd33b6dc3d14121e6 0000000000000000000000000000000000000000 +54f10eb7a466b65004b48617f0c6286fd51e5507 0000000000000000000000000000000000000000 +54f5fad01cb928f8c735d89005fd17590a623865 0000000000000000000000000000000000000000 +54fed370b24dc603575b35f39e1d562e9a1983f3 0000000000000000000000000000000000000000 +550c2b47c095823b649671dd6f27a341c22c0a32 0000000000000000000000000000000000000000 +553061a69b2d8b8b1653f172707409a16f2a9579 0000000000000000000000000000000000000000 +55317d36882e5352c10947b901b712838c1b34cb 0000000000000000000000000000000000000000 +55352f183eb89980046a1123a82514f5d0dbf863 0000000000000000000000000000000000000000 +55429817a2ebc9854e8b4c2b2ec9b62b10449dd6 0000000000000000000000000000000000000000 +5550f01d766013209f1ac8a68468a5ad3c9be224 6664659b6254679086b4fa95850fe11829aec4bd +555639d817d028e3aa13cb615e37c03f89653184 1429d993d53718ca3f5a240d4743ae0702c5d946 +556060d0d4de8022d637870c5df44de5e47877dd 0000000000000000000000000000000000000000 +55753d590985abaa9405f24eb02f54085928176a 0000000000000000000000000000000000000000 +55778da7f914d55830ea1df6df279b04dc902c6d 0000000000000000000000000000000000000000 +557af9cb48da1cf16ffc2a6b923f496b8e59a6c6 0000000000000000000000000000000000000000 +557bf8150a754e01f73bec7a0d0b66bb40c6443b 0000000000000000000000000000000000000000 +558a1ceafc22e6075470a8799582575c8c1e125d 0000000000000000000000000000000000000000 +55901d32e969e6a27a18ccfc152a4c1c9736a6fc 26743fa9501ae0642b3d619fb53117a1974c64fc +55955426a1346d7b1dbd8bd43fe65734903390b7 0000000000000000000000000000000000000000 +55c3036d130e82b45acee47d8e7b67f32367decc 3db97aaeae1b8a6d0d7959dbdd36d5f782bc7122 +55e0eac2a1fff9b5a67852abc475fe0c8cc7356c 0000000000000000000000000000000000000000 +55e10fef14ec3310fdfb20ae9fe53abbbb46c4cb 0000000000000000000000000000000000000000 +55ef6dd5c99ad93883942ab73ab4ce96c105a9f5 0000000000000000000000000000000000000000 +55f333a857382816bb702240c7a46b5876900493 0000000000000000000000000000000000000000 +55fed519f62b3a0e6cbc5b88c68f8838980ac2de 1ae8b9d0910aa5b5ab60f28fba4dc75d3d934930 +561b07ac7810b6e7b4d5751283de399950783209 0000000000000000000000000000000000000000 +561e33c0f49778c653396db310e8bfcf1e1e73a6 0a86d83ad893d9f6e06d9a979808fb1248231cdd +5629d9efc31004b475a9e7dfb522d6d05ed6a762 0000000000000000000000000000000000000000 +56339bdc2d1d89d87be604ada2996dd7da576167 0000000000000000000000000000000000000000 +563b0462fe3c3f8e308c284389e3b11ef9796270 0000000000000000000000000000000000000000 +56446a66da295d3f1cf0797935f86195a5be3570 0000000000000000000000000000000000000000 +564ed76f2443265d038897ace70ed1b1e94abd86 4c3bcec7f4d5fa375abf7286469bbfee458fcf00 +56608866ce815cb60fcc13917bb3499872194c49 4798430b7cd1d4f7cff64e6501382dc25910aa84 +56742b996ff73a963fa27b26df1a2e4e34f50da7 0000000000000000000000000000000000000000 +5678b053ee7a21d53f1900d26780a4dd873db4a3 0000000000000000000000000000000000000000 +5679f1a11b287a3da71f8867e3123f8b37ac7675 0000000000000000000000000000000000000000 +568cf91a855480a67e8583a9a399b3995c0c1257 c956525375f86e108f4430448e4a1221d7977a21 +569aa57157869ad67432b053e6cb4ca2455c1270 f082bfc8166891ff565485e6f7336771dbab2417 +56a7c96d4a26f1e6a795f702ded89200aafcd1f0 0000000000000000000000000000000000000000 +56c07ec433869f0e26b29b493ea5d4235d97ba46 09a9bcf514c481f3a44320ae6fb60d8fe6c03d72 +56c47cb374c18fd0f67f7983815cccc7cda03af3 0000000000000000000000000000000000000000 +56f291b325682e72f1f347097be2fb9786c628b1 a075e56ced0a3cc626193c02cc86e2efaaf1360a +56f45245dc00e25ba2bf6b08fa09dd53e72f4262 0000000000000000000000000000000000000000 +57084f46dd5d2e4b8c4aecf81bc11b5446ad5340 37d79d60943808caf3d51a32f00d745c80f58fdd +571990d0b04ad638e832b1ac3a2f09571e68a552 0000000000000000000000000000000000000000 +5727db514d3754112ec4173bafb9824f56b3dd82 0000000000000000000000000000000000000000 +572b0b6ddab76a2a9872bdeee3e855a1024887de 0000000000000000000000000000000000000000 +572b303f15cb56fc8e78bb9e828457f9cc3679e0 7c069671808032dfe5176f8df9dd032e3f4c976f +57312fab212e4cb266567d601bbee33ddc1ec207 0b3c01190b97867458a4924e27a9e479e87bb1fc +5741ae6767862b2253ad2026ae3627be8b2ac7b0 0000000000000000000000000000000000000000 +5742db6b5f0f8bd9990fbf43a7e03a8b0b6f674a 0000000000000000000000000000000000000000 +575244b83bdf3a36780d42a8e6f72a6cc6a2d199 8dd296a64b2539cfd5e1e64e005b923d64b1c7e6 +575a48a0c2493393d70008b990682be114446568 e46ec78a18ffe3271043de4268e9560c48d25e59 +5767934f97a546302dcac34ab8ceac513388dea1 421f84ed3934a86578a362d56f86a4302d7dfa78 +576de46f97f6938ba392fdc13bb1aa349ed69959 0000000000000000000000000000000000000000 +57706d136b7de4082cf6b3cdead555aa6a8ceb61 0000000000000000000000000000000000000000 +577df4e86e2e4e322845dc73a8013e6b8b24c19b 0000000000000000000000000000000000000000 +578e5870d299992b9cd8414c1a1e655a56e0403c 0000000000000000000000000000000000000000 +579575e84d06b26e8dc3a41f0e67fba266c49efc 0d435fd88756dd0d2dfd6fd1617e992bc4a78a4e +57ad85f17b1ce5d018e253df6d51be0e07376aec 0000000000000000000000000000000000000000 +57b6c1ec57bf3beb19344b73901ae632190e0ca1 0000000000000000000000000000000000000000 +57c3f398d3b598a9f1c1e2fe2c8c1cbbb80a5b6e 0000000000000000000000000000000000000000 +57ca1cc27114e0ac361bfb9799748dc44e44f346 0000000000000000000000000000000000000000 +57cf7edd736770fed5c2b550b6399c9424b9a461 0000000000000000000000000000000000000000 +57e3c760e5acf532b1739368033842621fb259ca 0000000000000000000000000000000000000000 +5801f23a2135363158735fe9d184e11a1fc05228 69e1d3efb7300692b11f76a841a2619b10db00ae +581023c6d991ee12ffffe93f31cb9a16e623eeca 5aceeba9e1d4bf852eaa5610a543296732b4755d +581a1076ca03bf8ef549aaf453a2cfc2fefaacc8 0000000000000000000000000000000000000000 +581dc63dbc72c4a115efab398263c9c309cd996b 56ec56d79b1c67afc7156e500fdc01e1ed61f9fc +582563f8e4827764eb38204f0d53f954831bb37a 0000000000000000000000000000000000000000 +582e00a7c0a1e63c8ba2d3ad64ec454e8881a4fd 984e22531d6f4759bfbf1b6d8fb3299f64afde07 +5835057a7e905e371f859e727ddaf65ec08c6db0 0000000000000000000000000000000000000000 +5842eff9101fad52af824581d69a5df9242ffe3a 0000000000000000000000000000000000000000 +58434a841485136ded4fd2aab0be5ffd9a7a5fe7 0000000000000000000000000000000000000000 +585903d188281aa570bbb6131caf2886fb4751f3 0000000000000000000000000000000000000000 +585a5af6d896bc899d73edd8ab167d4889a1d34d 0000000000000000000000000000000000000000 +5869a55250583fb656a4e6c96c23db9ba001f891 0000000000000000000000000000000000000000 +58700121ddeb7d89195a5f5a8c0f903853602d16 39f693b8565431e0c7606a2bae0ee6b65d1cfc0e +589944d52dc00bd75daec0f1797094556a93a66b 0000000000000000000000000000000000000000 +58a1183610d40e55d38de3b778b90662eb0b8327 0000000000000000000000000000000000000000 +58a139e89d18b22179bf72ddb439ef0e023dca6a 0000000000000000000000000000000000000000 +58b380f6577909cce011dc13c881fc7cfe61fcd4 0000000000000000000000000000000000000000 +58c2f84b8ed1e321baf674244db5440f0025aefa 0000000000000000000000000000000000000000 +58c4c362d460a99508e6be71fe436f048f5a91f9 0000000000000000000000000000000000000000 +58cb4ac718a840a8dfb5c8821a3c0a484c29befd 0000000000000000000000000000000000000000 +58ccd916a6bc55827147de32716646ba120bad56 d373ca014f0b4536e7e3f36f5340350c5e054838 +58cfb225f402282ed6bc0758cacbd68c3294b181 0000000000000000000000000000000000000000 +58e3cd646625f544f255eeed743d4a0c3f71cc16 0000000000000000000000000000000000000000 +58e63cfa9b333e84d457b74334ae9897e6c6ba76 0000000000000000000000000000000000000000 +5901f492d0dbacfa826582b8770e0e9861ccc8ca 0000000000000000000000000000000000000000 +590fcbe74ead3b54eef678e2fd87a0b865eb80e8 b708e2558f2dcbf782e9db9f4d28904f95a49b80 +591711d6e3b77fe2ee9f0bee42ed85e383a8b869 0000000000000000000000000000000000000000 +59260d3789c11857cc6cde66c161588fcd2bd391 0000000000000000000000000000000000000000 +593091621926defcbc2727a922613e34557d882a 0000000000000000000000000000000000000000 +5938d425c55ad4580e16fdba23ac12fbdca344e7 0000000000000000000000000000000000000000 +5955a51439ed86c4283d1d269206d4d82a536249 0000000000000000000000000000000000000000 +59564e04cd1602f71d04047f0717a090c1849229 0000000000000000000000000000000000000000 +596b35971156e65ca866f0eaa861988d5b6af41c 0000000000000000000000000000000000000000 +59718f9c120bc96e6167ff8cfa0ef52809e023eb 0000000000000000000000000000000000000000 +5971c6eded0a353cf8754125db5daddf6fa8cc82 0000000000000000000000000000000000000000 +597bbd24a95d56c6e344668e2286ddf237262dc9 0000000000000000000000000000000000000000 +597fc12fd1ddf5b184a2794315f49a392fdeb671 e27d1a3395070d303a3db8996089473fb292ca53 +5984798377db70f3a0407818747a0f5f0529a30a 0000000000000000000000000000000000000000 +598f2b6962695fd05a15cf1b49dde622cd309479 166ec03d7165b257510c919def523f58be57692a +59927cd4dc5369b9161a4c5ffc6853a06986fc4e 3c3213fafe085cade050ff053e9b6313b5935e76 +59c8e79ad461bd573c9142a68190aaa0a34427be 0000000000000000000000000000000000000000 +59d7c81fae8cbc320a9005c529806e94cc4e9444 0000000000000000000000000000000000000000 +59e0b72ebfea792c4ea465bd250e562e4860a98a 0000000000000000000000000000000000000000 +59e5d2cabd531c6b57e19a0395c3559ee829f2e3 0000000000000000000000000000000000000000 +59f59c172608b01780c254eda62a945c18a3b2c0 0000000000000000000000000000000000000000 +59fbec8586f44a4cca786c99a53ca97c3d658be9 0000000000000000000000000000000000000000 +5a055f9f616028116f1d035ee744820f37a85464 0000000000000000000000000000000000000000 +5a05d1e7fef2489edba206a420b369b303983d1d 0000000000000000000000000000000000000000 +5a1159128a433a0265f95effc389eaaf9da58f47 7ee6055a136db37452e3d5304ea0769e783e830c +5a27a3ea59f47e0ed2ed11cc0a7b043f18119eaf 0000000000000000000000000000000000000000 +5a3826cd02297560356d65f9056d924e6d4d4def 606b261db6345be1899934ba3251cecb7749b6eb +5a3da1a0b5c6ac2fed216f642078c3ab6c23bfbf aa8965fd7ac8ff8b5e3ec28538d527b09ba9b57e +5a51460dbdbef7482c3acd9426a2000f476045dd 0000000000000000000000000000000000000000 +5a58d79f50b527b970cb4ce8602fc06919c4cd0c 13888ed5ad9afac40d07b8390d524dc33d917d09 +5a662001bd2676e7bbceb9b3e3c3240d2296a8e8 b7779983b24dca08b5de6c6316fccc496bde047e +5a70352bbe3a8aefcf5ba806799590b303854902 2b636d16edbebe8fd54fd8c29ab0e371bd599182 +5a7146c09799b395b548e256f1a9c4aedca5a927 0000000000000000000000000000000000000000 +5a824bbaecad98bf96ea1470c8792b0653c92c39 0000000000000000000000000000000000000000 +5a8384043b94e8f9fd377b40ea5167574e0e25bf 0000000000000000000000000000000000000000 +5a99e7b47977226e76b61b67bf70cece329f4483 0000000000000000000000000000000000000000 +5aa1dc889cfa2cab778e5fa3cc67e0bc8fc1ee66 0000000000000000000000000000000000000000 +5ac95596bc609cb9ff7c2523e79e40e799319088 ff6953d480d21c0fc4278c095db6d06a2b559bdd +5ad2f37daf3d14d584cddc501be5b9bd9fef3020 0000000000000000000000000000000000000000 +5ae62484ed6480d6d0ac8885891e34d165cc13a4 adc6e11e3d0832fa927af14349c5b51c9f3a98e9 +5aea977651167b96bed2a394066b901647d1daf6 0000000000000000000000000000000000000000 +5af79d4b55185c4fb6f926791caf9ab81f7f8d15 0000000000000000000000000000000000000000 +5b006b2a6507fd8216604eaa352ac7d1328fcabe 0000000000000000000000000000000000000000 +5b080619be23f2b9e2e3995f53393f2263e5a4e3 d5bc79ae136052e45ad41f82cd88086019972143 +5b0c504d7f5e6112c28cbfc7c6a650ec524acdb1 0000000000000000000000000000000000000000 +5b11414d11ea739753125f891936f3a6a563fd79 0000000000000000000000000000000000000000 +5b17f3762cc4fcf5acbdc535f755eb5baa9b4c5e 0000000000000000000000000000000000000000 +5b18f4b90ce59f749e06d2ab9e02090323fc16f2 0000000000000000000000000000000000000000 +5b22ef498b7070c5d0dee949ed19a20fab03ab38 0000000000000000000000000000000000000000 +5b2d38c980f0ab7414230cc33a8627dc4e654dde 38094938d0625ebc6bf576543d5075e9bcc49c76 +5b37f59ed93da62a1c7b5876fa0c7a96347b5698 0000000000000000000000000000000000000000 +5b4003bd04d59fd460280fa06e6151b0203680cb e022dca65efe12eacb16a937b1dd8a8492b99674 +5b408268e292a193cecacb87f47f4319bae7f9fd 0000000000000000000000000000000000000000 +5b4c94e71bff02202fddda6ae4b8c00f8b7b1b6f 0000000000000000000000000000000000000000 +5b73c153a4dd3abc16cc6bde89529ed547868d1b 0000000000000000000000000000000000000000 +5ba458d98528b0d6a5b83f5b9f5f5ecc5e5564b7 0000000000000000000000000000000000000000 +5bb6a4820ed7f43a07ce01887ee883d10631af86 0000000000000000000000000000000000000000 +5bb8f441b028bed6ffcdff880e073772544f9b68 0000000000000000000000000000000000000000 +5bbb3447302e385b79dbdf8e06d81781d3db4356 6ae3da2cef562d31f5e4fc6a949d88e0950c1148 +5bc0bd4dcce47830964714677cbd87e0b7e60f1f a018b81746977799e6ecc5b36075f872bfb63183 +5bc683b15f83501fd2bf06ec38446d0e14776f4d 0000000000000000000000000000000000000000 +5bc9159256982222aff6638175f0891179b02e61 0000000000000000000000000000000000000000 +5bc9cb90cfa0056838c8f9cca3b9830f133b344a 0000000000000000000000000000000000000000 +5bd0463ed52a9685e0d42f81b9b13cb24b2a2550 0000000000000000000000000000000000000000 +5be504bcbc34b77b75a610a89874657c0de858cc 0000000000000000000000000000000000000000 +5be9a79b48a097fb8e152c30b89e9e947253c4d1 9b60614b565e7166b7976d87b047685d19d88b77 +5c01fbe7676a12a22022e6a06e1c356d8bf7cef7 2e723f7b9b9d9b33aa7af9a4cb7da726a8eb751c +5c05d56f0178126f4f80dd03eb858736cb66a88b 0000000000000000000000000000000000000000 +5c152aeb3edb9c1655ab3c6c7f75513daa731be2 0000000000000000000000000000000000000000 +5c2dddaa0d13e65a99d4ce23a373ab59a2a0d81a 0000000000000000000000000000000000000000 +5c3230192140c8b4e078c5721f039891de59969d 0000000000000000000000000000000000000000 +5c35c7b6c0178e8f31a0e30258d1de9163507988 0000000000000000000000000000000000000000 +5c40b3303fe8de8e53aabd0fd85771e305f2958e 0000000000000000000000000000000000000000 +5c40c174fbb700b487691b0e491d92ed3a7728a5 0000000000000000000000000000000000000000 +5c56379ef90bc18bc335c942457cdc1e454ca34c 3594ba2dba8b01027d3a58368e760c95afa2fb11 +5c6038c2354b4471417edcbcb8bb5c5a911ba70d 0000000000000000000000000000000000000000 +5c6d17f7e2835c2a31aea9c550bd2a1462937e6f 0000000000000000000000000000000000000000 +5c849a29926caf0c5f6d994de53fb4295dc9eb68 0000000000000000000000000000000000000000 +5c8c4986aee7b240ee2390e2cef321429451c6a2 0000000000000000000000000000000000000000 +5c8de4a921a8e171d15de24b76c97004e5ef7993 0000000000000000000000000000000000000000 +5c958f8a83db0185ffb73946333c0db7ebee25da 0000000000000000000000000000000000000000 +5c96d1ced3b7b7eb8658a26d121663afcc10d9ba 0000000000000000000000000000000000000000 +5c9e0783e124fd358589e672e0985a286a6b45bb 0000000000000000000000000000000000000000 +5ca061bb05e35a7325a3de84b95eb59121e687e8 0000000000000000000000000000000000000000 +5ca593e6351ede627671ff8e8e4ead582f59db12 0000000000000000000000000000000000000000 +5cad512422203d9ba13bc9e761eb86d2abc862bd 0000000000000000000000000000000000000000 +5cadbb299a11be4269c72aa17ec66bbd53d5f053 459603f2fc2d4a273225af0fe69b885661df86c9 +5cc010e62c40077c126637822066a5dba49a554f 0000000000000000000000000000000000000000 +5cc5724d1ba0524e2f299736294756f69a2443df 0000000000000000000000000000000000000000 +5cd548d400ad1fbb614fc3aef4681665a98d07ca 0000000000000000000000000000000000000000 +5ce15b834f06fd507d2aa3ec6244ba2b0101deee 0000000000000000000000000000000000000000 +5cea77e407f41a1b9271fa105896351962ffb276 0000000000000000000000000000000000000000 +5ceb17450e50c07d3f0fd84fe55928a70f83b269 0000000000000000000000000000000000000000 +5cedb2646015af791038c7271a5bfc2ea13d8aa2 0000000000000000000000000000000000000000 +5ceedcddafc5548bb580af5da140bb19785ebdff 0000000000000000000000000000000000000000 +5cfce6e17a8a6e0f04994996244d40a4ed9974a4 0000000000000000000000000000000000000000 +5d3073aab180e6e0c0d696b25a5b4d8e89c6753a 0000000000000000000000000000000000000000 +5d3580c6e8d352b11ff1cab80f122ccd172517a7 0000000000000000000000000000000000000000 +5d365c0b0ad854b84d000bb14be02cf5aaf27aa5 595633ae3a8ffa8fa8ce8eae0634745184735139 +5d3e699abee1a06eedbe626b1d6cf3776bb4c96c 0000000000000000000000000000000000000000 +5d4488201fb7323dfdd948a6334fb2b58eee1609 0000000000000000000000000000000000000000 +5d46ecedd79209944bcf1dc8721593e6ae74cdee 0000000000000000000000000000000000000000 +5d4d684d71877022e3a36dc969fbbcceb6cd852a 0000000000000000000000000000000000000000 +5d56fac2f9958b6cabeb1bece3e530b0145a8a20 0000000000000000000000000000000000000000 +5d576c718d9f82bd730057dcea2e117f48b82d7d 0000000000000000000000000000000000000000 +5d5c4b04fcc31483ef7a8e98f55ca88187807fde 0e13ec4a00442dab367d1271baa3adcabcd441a0 +5d69c0f17e5b0952053b099b88f4619b2f605b56 0000000000000000000000000000000000000000 +5d69edae1dbd6d261db1146ee89092e989bdddf6 0000000000000000000000000000000000000000 +5d6db61ee07d893768a0131818a4190c7ca3a934 f2c0969b6091566e76d399587741e8d492341e1a +5d87820d686424d50136e3de330570b97cfbaaba 0000000000000000000000000000000000000000 +5d892708ee3dd9040462f77c137953adc23973cc 0000000000000000000000000000000000000000 +5d8ec3a32d49059b68d00cf2ee267a6537c1a678 0000000000000000000000000000000000000000 +5d8ef7f208fd379693b57b570915bce05aea69b1 a584f5fe91c6f00e2468d57f3bbdc228f8c4f3d4 +5d92b293a711a3ff224599d589433797202bebad 0000000000000000000000000000000000000000 +5d99cc422c7646ec74528287003c6f449e421eb9 0000000000000000000000000000000000000000 +5d9d099e80722b52418506d7e818e748bb09a3b5 0000000000000000000000000000000000000000 +5db8757df642dbe651552ce4a7c740e94474eafc 8f9132b137634240f2f7ec2b8df3fb7b07ce9b48 +5dc4d8a2fe13cf39e67f31523a0dacd3ac46766b 0000000000000000000000000000000000000000 +5dc7e81fa7fad856edd96640ea7ee0e23e25a7f2 0000000000000000000000000000000000000000 +5dd7f22797b09d2965240c0729e00cb834e97147 0000000000000000000000000000000000000000 +5de1bf2510f3d4173b6e18f33bc687f522173c83 c3c6e9df0d91a52a19e7d5187da8c0b6a7f762c2 +5e0c6a72eafd7070cbc9164b66d4e343d0077360 0000000000000000000000000000000000000000 +5e3d9d3543d5373023097649b609ff38da723c6d 56271e7b4eb757b9ed42040cc6517babc9201bc4 +5e44ad5b75aa8e6027a009625e249529ce41880f 0000000000000000000000000000000000000000 +5e456defe303f897d0dc7257b5f4868bd21f76e2 0000000000000000000000000000000000000000 +5e4f6d8eb198f94cc7a73425c77d749ed9961162 c209b6c3dd5db7962212f401db9bd692598d93ee +5e65689d477fd490d1e830fb326425d06102ab5e 0000000000000000000000000000000000000000 +5e6e1b3db2788adbe92e48cdbf9ecf3d1ebc7655 0000000000000000000000000000000000000000 +5e8e492583f6b5ac503f4e99e5d39d097b2bb1dd 0000000000000000000000000000000000000000 +5e9bb19f9882f2296106dd28abe5cb8f5a9a863c 0000000000000000000000000000000000000000 +5e9bb928b1bd4e6104b4522cd76a719a554653d1 0000000000000000000000000000000000000000 +5eb0010503a48ade154dcf5f67895a78ff8b3ed9 0000000000000000000000000000000000000000 +5eb148183950ef24132a070da19cc088124aa4fe 2ac33c9b6111813ad8c07f23d185baccc59c4126 +5eba55841b4c375bbcf51a7830e94e84176c6075 14bd03d77f7eec5d93ec91bdbc2c87682ff5b62a +5ebf4793506e5c54ed3e19a9da6b4b846df4d96f 0000000000000000000000000000000000000000 +5ec066ac27b754651e59daa9bef2f848f2f1fbd4 0000000000000000000000000000000000000000 +5eccf02d2202d33fe66309537d5c97cf2c6a336d 0000000000000000000000000000000000000000 +5ee609586084482613f148c75b4c75f316707ab1 0000000000000000000000000000000000000000 +5ee9df4ae479433aada8e11387f51a2b7f534627 0000000000000000000000000000000000000000 +5ef48adc627812f9d674974124625692151fcf51 d7cb5175b32e6954b58816f048d79bed3927c533 +5ef9eb7fbdd9146a41078f3738ab5d27f5132290 0000000000000000000000000000000000000000 +5f06b5a11ccf398062a40c305f86f1b55baa7aa8 0000000000000000000000000000000000000000 +5f24110902aae8f2da77eabfb6f4a3e6d1791c92 0000000000000000000000000000000000000000 +5f2a32dbd7846a607735305415dea3280a8eb08c 69c30656cf4a987ae74acd40853bf6840d3937a5 +5f2b018bf0efdad918466f2efd6d611e7a8a709e 0336cb076469eb542881d65a8fd418d084644a68 +5f514b53d1508066e7da9f1950a7baf613b6674e 0000000000000000000000000000000000000000 +5f5a3103c9c19f1c4c7b9ef6ae676cc8bde44ac2 0000000000000000000000000000000000000000 +5f5fa02f14a186dbdb0f5a53920060af6bf8dd59 0000000000000000000000000000000000000000 +5f6660f71f006fbb1fec550f9038fbe09ff2aa2e 0000000000000000000000000000000000000000 +5f8a702433890d4a836895810b4d477e165806ab 0000000000000000000000000000000000000000 +5f8b0cecadcfa1ba3b62e82f9e7f9da35bd5025e 0000000000000000000000000000000000000000 +5f90def1e4f82e0d6462f17f689f161a822079c6 0000000000000000000000000000000000000000 +5f975be8d5870e3db904a54820f1199e28c32695 0000000000000000000000000000000000000000 +5fa053acbdb69c4dda87024a21dc5fd51b54dac8 d2e473a9b2cde5f6fab682aa3527f02213e35c30 +5fa4cf0876c5573012d8e9677d0b16b92037550a 0000000000000000000000000000000000000000 +5fa5c6560ddf6f025545d0991a79406ed50b05ca 0000000000000000000000000000000000000000 +5fab841a8ef647637d5ae652d7f8e7f97976d6cb 0000000000000000000000000000000000000000 +5fbb5683195a2879374c8df0588fa3373b8d44bb 4c1dfacfc7acee9fdc5bcacedd85755f37910106 +5fd60398c3347ec814f9f65b38fbc164055601fe 0000000000000000000000000000000000000000 +5fe88e8e4a8154560ec60058c1d66316c19a9846 8683c248ead38e2ae00527f10803fd24baf2a9e3 +5fef51c4cb3685eceabfdbb21abb1e88a87571a9 0000000000000000000000000000000000000000 +5fefd0aab440192e9eb82b73f219510642eddd9e 0000000000000000000000000000000000000000 +60063343e2e0ce82da5ff7caaedc39f240c04b19 0000000000000000000000000000000000000000 +6011cba07713d44e7d36272b19ef938ed5d7a4d7 0000000000000000000000000000000000000000 +601a3f610830d843170e8113ac9709d3f2bef976 0000000000000000000000000000000000000000 +601ebf7eb400e6d11bfe74b8bbc68caed08fe0fe 0000000000000000000000000000000000000000 +6022bdd91e242a6256642fcbe32d0f9fc0ae1cb7 0000000000000000000000000000000000000000 +60258b55ea88642f915dcce47854ca89d5b2c3f1 0000000000000000000000000000000000000000 +604355198e488e92d59abd7b4dff27a96a19b780 0000000000000000000000000000000000000000 +604388c454404ee386681b0e2c1f809930a0a754 0000000000000000000000000000000000000000 +607751acdc5b10892b674268108eb22f20092dcb 0000000000000000000000000000000000000000 +607f2a2b521808175aef78a606acced3004eb225 341d6f03bc13fb13d87469d0b0cf90fad012ed4d +6082b4e3b76fd80280b3b81460540d20e3da6fd5 0000000000000000000000000000000000000000 +60869f6d7eb6d201da23d00d49ede44f5f21e639 0000000000000000000000000000000000000000 +60876655e7afe931fb740f83dcc8d5c35469449a 0000000000000000000000000000000000000000 +608d908664008641983f76a0b764cb1789a92007 0000000000000000000000000000000000000000 +60971ba87ced4162e471ebfc1b878776d09cc62f 0000000000000000000000000000000000000000 +60a26b235a90912700a4829dae2d9fd96a44bd5b 0000000000000000000000000000000000000000 +60b72fcf742b926d8e347ca3f55480560376175d 0000000000000000000000000000000000000000 +60c11ade5d783c615c300b4b38dd5db6fac9d742 7f9d1fdc2395c51348e7641cd1c549e5306536c6 +60d26403d873d544f3c41c6e1594e09c47fb5e4d 0000000000000000000000000000000000000000 +60d69934c73377187675681d254e09a6eead1a68 0000000000000000000000000000000000000000 +60da5b7cbe65b5ed9fc37423146fdfddca8938c0 0000000000000000000000000000000000000000 +60e34669ac3fd1625de58addcbc87338803a7ea1 0000000000000000000000000000000000000000 +60e9b134d823906286b6fa7bd81c88f7d993639c 0000000000000000000000000000000000000000 +60ef50e005f8a5cca4ae4c76db901d39648ec75c 0000000000000000000000000000000000000000 +60f8f74cff5f034d59e7e3af9b5c9d4ee90f5ca8 2dd805e17735cf74693c2891c34e423a2fce4933 +61094ca4701dc691cb680e0a853d2d5362c0b233 0000000000000000000000000000000000000000 +610e3c0a5d7d0f710b24b0638350e62d83ec9a7c 0000000000000000000000000000000000000000 +6112dd7b91708bb5fc9791dd9764b2167912e05a 0000000000000000000000000000000000000000 +6115e5fbfe1886e3b072a1a66cd69568f1d57314 0000000000000000000000000000000000000000 +6123803e4ae3bf6466ccee8961a0d1ac96f1a74a c484980cb8882297bd67a32b88a89d6c5b308f10 +612fa81bf7602f40ab32847902ab3a1816386d58 0000000000000000000000000000000000000000 +6130485359a8b1d5a42409678ac2a9012239873a 0000000000000000000000000000000000000000 +613a8e0e4850e0ed23cf8527ed47a5fc1a0f3e5d 0000000000000000000000000000000000000000 +6149e55defabdf62713acb9c174cc554ac2e36c7 2cf4808e4462c21e5402f25b26d5c1c61dc4247e +615233690469d5c49c1e4ea524783cf927fd1f59 0000000000000000000000000000000000000000 +615d66109641b72071a014eece52d78ba79a1317 bcb6790efdfffc02a9c013fbf89d51239d5f4f08 +615e3fec43cbf1ae846610f72ef85729b0a8dd4a 0000000000000000000000000000000000000000 +61645ae88accbb4174430236bc690df2a1c49233 0000000000000000000000000000000000000000 +619350ef19298693be45f9637e2c1ed384bf2037 0000000000000000000000000000000000000000 +619552b97b0897cc28579ae3c33cd8f40dd49ec6 0000000000000000000000000000000000000000 +61b44fc60c0d8ac8e0ee0ded4bd9586e59acbcc7 0000000000000000000000000000000000000000 +61bf18b8d5bf42b1ff9d0c9a0dda154bb4b744d4 0000000000000000000000000000000000000000 +61cfb91caaa746dc0ec565a1b0ac4b66b3a50492 0000000000000000000000000000000000000000 +61d50b5bfdd6323cd4780c64ee55b5d94499094a 0000000000000000000000000000000000000000 +61e6a402f73304dbd7727fbf24640a99c12727cd 0000000000000000000000000000000000000000 +61e878eecbdffe0e1261b6166e09ede495a25d8b 0000000000000000000000000000000000000000 +61e94ea68ee658e65db5f6a14cc05f50ebae13a4 0000000000000000000000000000000000000000 +61f467da2b68b2e29be845f0774ffd54579f7e2a 788479e203a13ba0e18153b239b79c1317500db4 +61fcb9ffc47f0aecd8f299cbd23481080f5411dd 0000000000000000000000000000000000000000 +61fd3f7579cf949f6b9e346a8c8566f8d47ecaaa 0000000000000000000000000000000000000000 +620076775a00c495a0ae06d0bd3dc99b1225a97a 0000000000000000000000000000000000000000 +6206f1743c2c0e3183c4af7bab42efa419753b5e 84ca8546d095830a07d786c786877a4613ff2e37 +620b0f21114cb2cdd0c68c70a2cf37d0976f8e3c 0000000000000000000000000000000000000000 +622a6e20d5eed9201f3297d376a2ad497ab19af5 147f80f02a13d49364aba2a23d3e6d6a2ac8348d +6238e32c686fa6d4067a81c7a6b84d7ba46bc917 0000000000000000000000000000000000000000 +6239db1416b5302fd674b15486ea3bda5d9561a5 0000000000000000000000000000000000000000 +624814d64cbd1fd413c6dbed675eb0514f655200 9c8b82576e4055a1e0d674fee2e1d3812cdadb73 +624bd0ce752b61ef7308052c2e8cf8a6976db732 0000000000000000000000000000000000000000 +625d780c28db905fa2ba90434e89350e4fe99e43 0000000000000000000000000000000000000000 +627b928c12a8b9f5ef3ccaa56dc1c506bfe678b1 0000000000000000000000000000000000000000 +627c4005bcabc0db65a2771796b9f36877b24142 0000000000000000000000000000000000000000 +627d75b37483377d06d7fe36709d35f22fd99978 0000000000000000000000000000000000000000 +6294631bc7b4241cd105deb2c6b4bd01882ad912 916e713a8980100359b2d85b0f83bee846d37079 +62999e8f48527719d60ada96966962e1514c0db8 0000000000000000000000000000000000000000 +62a9fa1e0c56160c0af68f42e0837e8d2ab666b2 0000000000000000000000000000000000000000 +62b089a7e9c9bdc058195decdefff9d1114d2ef3 0000000000000000000000000000000000000000 +62b7e63dedd8be6a6d03a68e2abe834b0001a96c 0000000000000000000000000000000000000000 +62d0975d136f51e91564fe56850a7f22a6872957 0000000000000000000000000000000000000000 +62e7d56ac0863875999240d68a2766d2cc2d594c b101a6cc3c57c0edccca7fe88a7fbaa7029782c4 +62ec21b5c77b84ad570405a20792c9c4518f5051 0000000000000000000000000000000000000000 +62f78799bd797e86986ae358542c8fc76a731b56 0000000000000000000000000000000000000000 +631199e9d13a711e0698b4f2400b6d2869d2812e a149901992fc175427615fcc608ec1610dec4ec0 +6322c0ed057cd9f5fd0f949434bb0de3597f912e 0000000000000000000000000000000000000000 +632d6556a8903c7fbd3ca8e469aa0ffdb75b2d01 0000000000000000000000000000000000000000 +632e259641aefd89570ae69c3472928b2d37fcda 0000000000000000000000000000000000000000 +6341fdb7b99b64f758e5bb35520177003ee502c3 0000000000000000000000000000000000000000 +6347c7ab2fb8b5002b0630029e06dcad620e0e56 0000000000000000000000000000000000000000 +634aa2f2e5c37d881c2a578045f1395c7b05f981 0000000000000000000000000000000000000000 +634cb1c428fffee698a968e7e901a10d5f607fe7 0000000000000000000000000000000000000000 +634e8c50db44175c8f2a572e46912c8f24ec123e 0000000000000000000000000000000000000000 +6352a457cd06219b67693ba72753dc5768577771 0000000000000000000000000000000000000000 +6356fc2ae91ba44173929e37d9e0f30009ab924f 2142dfd229e808f528c089d790c66deeaac62472 +63570c1d8a3468d9946f886ce23a0ee031a96196 0000000000000000000000000000000000000000 +636cf089ab6bfd57d43675321f90cdf4938205e8 0000000000000000000000000000000000000000 +6375671679c509c33e7dbb26ee29acf82a9ef5e8 0000000000000000000000000000000000000000 +6376640a622b7e7a265933ab5e19aead2193947e 0000000000000000000000000000000000000000 +63767d0128f0b73fb90d92f7778ec633b5e1348e 0000000000000000000000000000000000000000 +63772576a3bafcea581dd122c83a1d48f843a49f 0000000000000000000000000000000000000000 +637ac1d78c73a788bfb3ab82924b4eee60905b1d a21f91a0fa2ddfdd73ce484e6131d370b9f0e1c1 +639aa7eba514adfde2f8dba656dfd560952e0b0a 0000000000000000000000000000000000000000 +63a48fde6459335e65f7b5cce86833715cef4bcd 0000000000000000000000000000000000000000 +63a8a3480b20809367c2dc7616e23be87a51f8fe 0000000000000000000000000000000000000000 +63aa7330355e42acc73b3daf30bddbdf57687ce5 eeaf4f28836009a26b62a35862cbdcd08f91d52b +63ab53f3125b2ad729d77c9689a8fbc6931ebd19 0000000000000000000000000000000000000000 +63b2b98b64633fdef3b7fafee882060a3e0808fd 0000000000000000000000000000000000000000 +63b7373ac3ef42638bd2941159072bcd0e5e3987 0000000000000000000000000000000000000000 +63c096e5e1a77cce7dd1da78d7c4121cd01d6d14 0000000000000000000000000000000000000000 +63c11396673e424cdf71c2413f4d681531bf968b 0000000000000000000000000000000000000000 +63c634524903c7d4cc4c9aeedf04ec7f9424827a 0000000000000000000000000000000000000000 +63cf4a3029fe2d285a6fe2724e30ffcf3bdd2f9f 0000000000000000000000000000000000000000 +63fc55d69274ebd405e677983e0a72efd2b96079 0000000000000000000000000000000000000000 +640dc8e61245733678beed509d8a6f7311caed3d 0000000000000000000000000000000000000000 +640e59a143a2a6d3b79c9f6a97a6029593d7dd8f 0000000000000000000000000000000000000000 +640e7dc3462654e072ad0621b15fd37ff692457a 0000000000000000000000000000000000000000 +643343c4127dd4268dcf3db307236d941f5e1ea2 0000000000000000000000000000000000000000 +6442d7622e980627d354762040027553c8df73ec 0000000000000000000000000000000000000000 +64499f6674a8cfb419aabcaaef9cf4bebcd9af12 c21af5a995041cb923ba482004c9b4716ef6bcfb +6461bac01c4176424210e9ac249698f665a514a6 0000000000000000000000000000000000000000 +64627b6012b42e2637e40b963fc3dbed13f87b37 b1df9edafa8f7cd3a17e3951b10366d49e3b4b1e +646f9535571751539a5209c4d1bf9224317d876e 0000000000000000000000000000000000000000 +64730eff152f53628d7517d37c98aea5d74ee779 f2434eabadff0cba3976f0b20587a9b4af1d49e0 +6485aa66b1041201349fbaa09b0f8063640bd37b 0000000000000000000000000000000000000000 +649dfe3167f03d920c0392653dce0323468ed543 0000000000000000000000000000000000000000 +649f0b1780c575c4780f4091eedd7a555e8ccc4a 0000000000000000000000000000000000000000 +64b1c368ef38815971108272bf583ff470c9b54c 0000000000000000000000000000000000000000 +64c8627f868600bc5b0111c07c1825f37dc8299d 0000000000000000000000000000000000000000 +64cda201859c9a9cd8b395d51e0a1bbdab5940fe 0000000000000000000000000000000000000000 +64d6f319f36a1942b4c13dd5c04db81b243c8aee 0000000000000000000000000000000000000000 +64d7719587090a46cfa4a341e792f9a0422cc91e 0000000000000000000000000000000000000000 +64fb4ab4520918d833d669b47516bb7693f4affe 0000000000000000000000000000000000000000 +652379e5a22db04d4123a870a02e60de5f04cf1b 0000000000000000000000000000000000000000 +652408b00a3239302d8ebc660d9c31af5a79ffbc 863ca77ed7f82dafe4836ec2dbcef96a6d5106cc +6525525b5cff95795a3ee1ac7abeaa11e211176f 0000000000000000000000000000000000000000 +6528d8692ea6bee6d93953c278debc189c69f7dc 0000000000000000000000000000000000000000 +6532349c63242dc6fe638e45370d0ac7957c8963 0000000000000000000000000000000000000000 +653b79a6e51b62fd11c9308028e2947015f5ea98 0000000000000000000000000000000000000000 +6544822f756286f54b1ac2f8f54e2418aee1177c 0000000000000000000000000000000000000000 +654cf53de3ce9c43aa2b55c53043cb9962300b81 0000000000000000000000000000000000000000 +6553f300ec4c9b70ec2b9bc30b1bf2770cecfbd3 835b67aeb6f1a61054ee1b6dcccf3e76e4d9a9b9 +655c2c843732faba3687f8fd64568ba509b0065a 0000000000000000000000000000000000000000 +656259a8d6f74bb90e0623a666c9eed2e918ecbc 0000000000000000000000000000000000000000 +656697e9b95d4ffabf17e4b1a3b5ae6387777171 0000000000000000000000000000000000000000 +656ac9a8ddd0fa60efe341d5f64b401ff43cc5a1 c18d64f1652deb3237352d3ecf3ee1549948c597 +657737394e5317a200523395de9b6b46acf44044 0000000000000000000000000000000000000000 +6591a7b97c2ccbd742840dad5c84e7fff9f827c8 0000000000000000000000000000000000000000 +65a57c73ae5c1a63a6e1cd53037088f2c23304a5 0000000000000000000000000000000000000000 +65ae5b72c24003f4a29660ceaca4fc96ab4cdd0e 0000000000000000000000000000000000000000 +65b70f2913897c76d6aa4a9c751359b9a3432306 0000000000000000000000000000000000000000 +65b7e7eb0d8376148e802e0d187f59fab3e99e83 2f4da036fd38ed7a2284e3c02d1cdede14f950c3 +65c87897c914f6f79c57f6091fbddc76b498e4c9 0000000000000000000000000000000000000000 +65d7cc853cdbd4619c94749553f1f7cf808e9f29 0000000000000000000000000000000000000000 +65e92bfb963c798b752b0152850cb481d7279290 0000000000000000000000000000000000000000 +65f8d7e07a9d60eee4766d55990c5ce8f92da735 0000000000000000000000000000000000000000 +65fe6440a0abd7d375033a81e7467f3821cafc07 0000000000000000000000000000000000000000 +66150791aabe593f479e0389f8f0fe05336a4caf 6f77feac910ce7433c61b3d4cf4216c572b5e2db +66176311c94c4f3cecb355fa0f2b09a7bd58dc28 0000000000000000000000000000000000000000 +661bd1a813c0ca79cf6ad880e9c67b721f5e9948 0000000000000000000000000000000000000000 +662c901e03cf5483ce73bcdab068d0cf994d8e87 0000000000000000000000000000000000000000 +662d2d99570bddefec9c5ba8dcf36c2c2b9b22f2 0000000000000000000000000000000000000000 +662e9d7405b1d75099348a28e4884c08dc4da7ad 0000000000000000000000000000000000000000 +66333a9499cf8aa6b2a12e445371ab5d559af193 0000000000000000000000000000000000000000 +663b1ab172d84b561f2b6b02a44c84746a13c4ca 0000000000000000000000000000000000000000 +6645fa77f6bb42f974e964deba7b831935a91016 0000000000000000000000000000000000000000 +6650a28b5e1c88e172b192096172e5d34b41fa92 0000000000000000000000000000000000000000 +6651c36ff341329c053776d65b36b1b7fa9dd3ea 0000000000000000000000000000000000000000 +6655ded3d5669d356414e8a34a245038ebfff574 0000000000000000000000000000000000000000 +6657430303b2f35673b6f213321e931b9d82be53 0000000000000000000000000000000000000000 +666a94e79a03b9b9530012b9fe69ef009ae59e9a 0000000000000000000000000000000000000000 +666e45240748a41d74767d325042051083aa34e2 0000000000000000000000000000000000000000 +667f2414fd0b1a9ee1fb68f42517ca5ba1df066f a9cb64ae20be33adbf91201d47ede16a86b3aded +66a032e48886225a1b578ffd9f76c03acc15a195 9f0eff28466ad5b30a648ec82dc4d6fcb014fff1 +66a033c5ee67cf574b4a4708ccfcadc9e2db9aa4 0000000000000000000000000000000000000000 +66a1f12ff620e5f0e5fbacdaa3bc135d5e4c76fd 0000000000000000000000000000000000000000 +66a7ea2c355cd669feb77ad3c3d6cc81f3992225 0000000000000000000000000000000000000000 +66a9d04036556945ee3222849b7d071a30016b81 0000000000000000000000000000000000000000 +66b81674049371a7fff94b750a7d08fad1a75e27 50747bc4209f15b5ce6d6e4e692c4b3bfa905089 +66c06b6d4c4061629eb06751a4b5b184e9d7e9b9 5cbff4b307bb342a95f8b2f302cf0fbb8d0be4d7 +66c3e5ca253571070659cc121c398cbaa4c40e1c 0000000000000000000000000000000000000000 +66cc6e093080d824be09d5e3b2f782fdf1e514fa 0000000000000000000000000000000000000000 +66ccf74125f29fd9877aac17c76f1912538061ec 0000000000000000000000000000000000000000 +66dcb215661dbe272aabad528d64a19072e190b5 0000000000000000000000000000000000000000 +66e4101c3d656b5e557ed9dfa9b120a9850c0df1 0000000000000000000000000000000000000000 +66e4d8700de335532e79b9f1ef975158801421c2 0000000000000000000000000000000000000000 +66fb5994a10738c8a311041345cbf17a77512374 0000000000000000000000000000000000000000 +670b2595b0b8f248dc2f3befb0c60587f2e290d8 0000000000000000000000000000000000000000 +670f6417a36489e9028ce1d7730a480d8f96fb70 0000000000000000000000000000000000000000 +67245931a3e438de296842740180956166a0f6eb 0000000000000000000000000000000000000000 +672508eac5e2ab46c3ce17248ce662e17fa73242 0000000000000000000000000000000000000000 +673440ef36843caddbfdcb9f26ad0caf5d4c2e46 0000000000000000000000000000000000000000 +67353976b8a17dcb6760223d06c097469fa6f794 18f342702035cc24f48ff06ebaa4881d3d9722a4 +674fe14b22d37c82380814b72150905cecee1c14 0000000000000000000000000000000000000000 +6753cc2806e47415fe47a389f071a951386c0c36 0000000000000000000000000000000000000000 +67586ec6b99730d4de4883e5295112c3142f5faf bdbee555b8189d6f89a0a0514fc5f6da563ef4ab +67789f3df47cfbab32b7150545fa967b0e0f3667 0000000000000000000000000000000000000000 +67899ae3c64615be6e743594cd01b63a70e9ff0d 0000000000000000000000000000000000000000 +67a47c6c3e5e3a32c67d0bf1a8507d60cef1647f 0000000000000000000000000000000000000000 +67a6b0715ba1c4d0cf01a3f5235d5d79b89d7375 405c503c6f02f418130b0d3969bd444a4bcbae2e +67c3501b8a37605e9b33e07022cf19cf89486b0c 0000000000000000000000000000000000000000 +67ce8f427636497f90c9f298b399f858878a81e4 0000000000000000000000000000000000000000 +67e49bbb60c30914e5e2c7f8d363a08381136a87 0000000000000000000000000000000000000000 +67e66b98319ab40052b72fc3c84e08cc83008840 0000000000000000000000000000000000000000 +67f1b406031f3517a09cd7ce38ae4f10296d3d19 0000000000000000000000000000000000000000 +680ee90089ede27fca9a981525590153e3566aa1 0000000000000000000000000000000000000000 +681454232dea9bd0a27ba4b44489309befa431ba e409e592b248ec3c3d0576375db671368947ef20 +6819a4d90ed33827de83b7d7758343d3a5e494d1 0000000000000000000000000000000000000000 +681f60a81cb69acdd2811e85aca4f0e9394fb51a 0000000000000000000000000000000000000000 +683589e79061129e0c0ba3bb3856c831d44aaa84 0000000000000000000000000000000000000000 +683aed417552f82d0217a9bd553e2cefc4620a01 0000000000000000000000000000000000000000 +6848bd060cc055428f3ca815852d6327b09581ae 0000000000000000000000000000000000000000 +685ef5bab153ba308c4d97e67341416ab34c5ac5 0000000000000000000000000000000000000000 +686ca47a0c533cde12f51ef55c843a6c85cf8b7a 0000000000000000000000000000000000000000 +6877019bdc69b6d6a91734aae2d614c814b832cc 0000000000000000000000000000000000000000 +687fa8745eea33653b460d46c74acabfe782a463 27614bfed8edc33c21b0991e033342cb029b0eff +688fcc5b2b0beea9e8c46c2c61a0b7828de72409 0000000000000000000000000000000000000000 +68927bd44ee1232617bd99e25bcfabd86c168a32 b240161c8e05f0b8b8c68d64ece49b58aa3a195e +6899424d5911061a7869c109df9d29a67618382d 2adf8bab4cecefe90b70069f3ffbdb8ffac136d0 +6899d5f161bd0087ccea0a090cebbe4eaffdf99a 0000000000000000000000000000000000000000 +68b25cc5cc9ffd809a45ce532200ce3262f39ad2 0000000000000000000000000000000000000000 +68c98bce5ed4713d0e93dbd522af4d6cdba6852a 0000000000000000000000000000000000000000 +68df31b76d47a28fa3f3b965992bb144b25be1f8 0000000000000000000000000000000000000000 +68e16e807c45edaad3e86121e37fa71afba67dee 0000000000000000000000000000000000000000 +68e7dea0689a5e2aec9ef98931752395f04e84a5 0000000000000000000000000000000000000000 +68e9b24f0067926b395eb9d962d16ede1ab68c77 0000000000000000000000000000000000000000 +68ea59cd528da1ef3535bb64ccb014ad515018d7 0000000000000000000000000000000000000000 +68f2c229085d755a0e45f824e4cf90d875c3457f 0000000000000000000000000000000000000000 +68f4ec050acd8d3a8d76dedde06bdc4e109d22b7 0000000000000000000000000000000000000000 +68f9bd2fbf55fe85831b1ccd5cb51ff25920ad75 0000000000000000000000000000000000000000 +68fc2de165ad4be1b7231c43138c9ce45f6a4c5e 8afba140d33f7795f14304e96bef9441ee0d8c65 +691d99d99b9db22fe0e8e96a5c639601cb70a718 0000000000000000000000000000000000000000 +6922d611752c16b900bec06721ff08336c04c1e6 46b7dafa1bbd9182dd714438bd8d077e141fb7e7 +6926b6d7bae6c0abed07e96733ac681ba63af96e 840d593fefce95473c3903e5889d0d379c685a62 +6929114e8a9bcd7aef587185f8a625a16855a8b7 0000000000000000000000000000000000000000 +692c100c15cfdd07a4c76bd0fa87c8de62eefa6b 0000000000000000000000000000000000000000 +6933ada5c7a758919720d890fa5e2c66e166da58 0000000000000000000000000000000000000000 +693d3e389c3a942eb61621c64b27b3a64addcb45 0000000000000000000000000000000000000000 +694a74b0514f52437c7632351d321e996f724bbc 0000000000000000000000000000000000000000 +6952bfcbcfba90b95b559294c27929adb404b166 0000000000000000000000000000000000000000 +6954790d0faead0c984ceb69346b0a0b3da20c07 0000000000000000000000000000000000000000 +695eb05f39636c9a861c87d8f542b14f6453e91c 9649df6ebbb50ced373c49de88a5290406d22f59 +69611df8485b5b5985a7f67dbeecb34011e0fa34 0000000000000000000000000000000000000000 +6966be594a2cf0a4da7b1526e0e79da3ce224024 0000000000000000000000000000000000000000 +697cc055b5bb60340666f528eaf508214e2dd895 6b53a97cf5bef34502bc9778285a9b22979f4a0e +6987f7b1a718682165496b6290ef16a55a4c126b 0000000000000000000000000000000000000000 +69a464be3787674de1b5cd03513bacd04cf6f7a5 0000000000000000000000000000000000000000 +69aa3d52ff8d33a7a15df5cdf19532813c80f4e2 0000000000000000000000000000000000000000 +69cf2c533d43fa4d3d1c577e47c5f5b3f1dc28ae 0000000000000000000000000000000000000000 +69d0bdd667f04a82fdb8a8b7bf1a2c3975eafead 0000000000000000000000000000000000000000 +69e6d816210423081848329df304773670269e41 0000000000000000000000000000000000000000 +69e7f496e44fd7a3fcf1866549bdceb266c13ad5 0000000000000000000000000000000000000000 +6a07cab67f8feb158541a6b56b576530fbae0912 eeff8d1c0f85b81815adf1e5af33c287d12be1b7 +6a1ac5ee2099108a9b576b4bab5a5a4be02f045b 0000000000000000000000000000000000000000 +6a28240bad6316bb8c71ca30955adb47857edcb5 0000000000000000000000000000000000000000 +6a31f300ac272c9f4fd7c216efa2387396be7f21 0000000000000000000000000000000000000000 +6a3b2a91b159670d92f5f50dd229df593bd80d1f 0000000000000000000000000000000000000000 +6a3dd015694bd07f883fe4e00f6970f9337896a7 fd8ed35bf67a9848bd12acb6cdd87b805eafbb22 +6a3e9489699233661d82c20a0b0ff77339cce5c8 0000000000000000000000000000000000000000 +6a4633807be2e1f311dbb51fadeb1cccc99fc725 0000000000000000000000000000000000000000 +6a53f2433127521d43091561b5083593226d8db3 44b969204091a27148c51545f0870f65c5a26bf2 +6a65cf4c02b13eee81d076c82dcd2214bf65bb0a 0000000000000000000000000000000000000000 +6a6a2fd9c57f80ac1f1d52f945bb794ed8d6fcfe 0000000000000000000000000000000000000000 +6a72c057ca815e1015e7e52b0c47d1afdc385132 0000000000000000000000000000000000000000 +6a755eb7809a80e6f883ca33adc0a18964291850 0000000000000000000000000000000000000000 +6a761082ca9f0d7c8ddf7502b1696e1e03b8b6b0 0000000000000000000000000000000000000000 +6a7993e8033efc05158d535e00de2e6910628390 0000000000000000000000000000000000000000 +6a830b82527ac0fb3ae25ef9b24efd0a01c8bbef 0000000000000000000000000000000000000000 +6a91750fc46924b0d6fcaffab7e7e353f6a01361 c63206139a4c4326e35aa8cce013cca122e3f2c0 +6a9646278377d0f81289c34ad25b2102b488dd9e 8dd57225fb41328b85a6230a315bcf5bbdfd0875 +6a9f845d15e14fb8254cbac3f8a651241d57cc09 0000000000000000000000000000000000000000 +6aa5e05d942aab63358a17c0ea973dbbe65bbe6d 6cdbac3791ec3808d04b093106d461d5da8b4047 +6ac0bd12d9ae754bf233556493584deb3e76a7cc 0000000000000000000000000000000000000000 +6ac327fa7e55e22b79928ab5377c1f6e586e6cbd 0000000000000000000000000000000000000000 +6acf634798c74f4fe9f462b95254e85571366dbb 0000000000000000000000000000000000000000 +6ad5d02cda8276893306ba699b61476ba45b9191 0000000000000000000000000000000000000000 +6adac99a93ec7e9ca164d12d895ece8aebef0072 0000000000000000000000000000000000000000 +6ae128c19797c9b85a515a76df65dfbc825e49b4 9b06067244f0c12861ad397e619bbc144ea4acf6 +6af10c23e2c68f5f14c7c9d3dcb49400fd0cbb43 0000000000000000000000000000000000000000 +6af46af11e099e3ad7a419c0ab4f64c735cf1c4c 0000000000000000000000000000000000000000 +6b26052d4c907f2cd3592b5e384fb854edb4c387 0000000000000000000000000000000000000000 +6b2dab4c347223e984cba65affb41dda9f10468a 0000000000000000000000000000000000000000 +6b3343c41672d096fbf0119e566bf41baf04dc7b 0000000000000000000000000000000000000000 +6b4e2cef2453cb005eab67da190ea635bdc25faf 0000000000000000000000000000000000000000 +6b58df28e2479b52e1551ff03067a23f4c24a52d 0000000000000000000000000000000000000000 +6b599f07d18998415fe246b270521502671c94c9 0000000000000000000000000000000000000000 +6b636d53a7842e3eaf5fa70a91bc27c72be14e47 0000000000000000000000000000000000000000 +6b6ec06ea07323947fba3a58569dcf972b86830f 0000000000000000000000000000000000000000 +6b727655b4a7b0b08f1acd1092c4c5d0a2204eab 0000000000000000000000000000000000000000 +6b743fdb901d308bbec2e0823e950597bc388aae 0000000000000000000000000000000000000000 +6b99fc070a70e3cfe10e79814dd2d6cccb841ef7 0000000000000000000000000000000000000000 +6ba95c180aa6006d722bb1a14f74a8eb38b280fd 0000000000000000000000000000000000000000 +6bb1e54623af7073bc84221032c7a47db49afb5b 988aaa6e8a84a5a6cd8a4e9470c3f799709ecdea +6bb23b6fee1d45d97bf47be0ce1ab3d20db74df5 0000000000000000000000000000000000000000 +6bb2546ca33929a59098245bae331849013f38a6 0000000000000000000000000000000000000000 +6bc0c5ea3dfae67e29b9daa38ce8154c74bf574b 0000000000000000000000000000000000000000 +6bc8a1d6b633d3084d97750c57959cc5b8e71187 0000000000000000000000000000000000000000 +6bc8aa37db57e35b30c4e5aafa33ec3a11178304 0000000000000000000000000000000000000000 +6bcc4bc0b4efda31165d1e4deac8b877ce68e0f0 0000000000000000000000000000000000000000 +6bda890fc7f19db283123a7aa4327b2cc39bc99e 0000000000000000000000000000000000000000 +6be5fcdd8fe419708797656bded5603841943881 0000000000000000000000000000000000000000 +6becd0dbd53a46ce09d693f506d1dc47f6789fc3 0000000000000000000000000000000000000000 +6bed1d9eb80f67e5a98d0d84ba10632f0a90d3df 0000000000000000000000000000000000000000 +6bf026f9c5c5b9f62a0e72a02e3aac2e1716752e aa17dd0b74ebc49f6e5e5a4a3538eb871c51a60a +6bf85c5bd09203f8fcf4e6d8111b83cddeb306cc 0000000000000000000000000000000000000000 +6c07415614ecff658f2660ea190a45d0ecc7a3e0 0000000000000000000000000000000000000000 +6c08b16a95042b9f003d789c485db059019daaac 0000000000000000000000000000000000000000 +6c0b9fa5642ca81afb74dace00b84a98640d32a0 0000000000000000000000000000000000000000 +6c19052e87f0e2a7b17a52923c3c1cd09e5e57e1 0000000000000000000000000000000000000000 +6c1a630c8e4870e7adf987ac874555f329b8718d 0000000000000000000000000000000000000000 +6c1e502616c4338e17f7d818d802b66a6220599a 8122d5e4d98cf84801e86a8cb620fb59dfd5acf9 +6c2a95b689b38eb8bf51ea99b67af71441125832 0000000000000000000000000000000000000000 +6c47d495028d43b173efa9e2ac1f6da9bb853f51 0000000000000000000000000000000000000000 +6c57e8da3b8820ec7f82500f4fcfb098de86eac9 0000000000000000000000000000000000000000 +6c5f86ff000189c14532c0c866341253d20d8aed 0000000000000000000000000000000000000000 +6c696056c1ed95ea53b0bb505f39bd4e0564f7c5 0000000000000000000000000000000000000000 +6c82aa6b2d6e4f39af3c594edd8590a0cf749530 0000000000000000000000000000000000000000 +6c88daa3ef0ec5a26b5edce5895c56a43f60cb1e 0000000000000000000000000000000000000000 +6c994a589fdda06b2c86514709fbb2fdde4fd9d0 0000000000000000000000000000000000000000 +6c9f35af819f85ea0f5ce8bf20fa060a8bcc9109 5fb97b9232e1918a226394cde357e0b14c977bd8 +6cbf2abfa77537be8fa2c5d720acb48fe152f5b9 a8b3a5819a6786cfc7c2e7d5274a721764a55153 +6cca4012709a5f99f2ef888f2baf7fd2c7a4f6dd d5aaf8522d7c2e62243d7802fb9847c1d511f684 +6cd0f0251a3156a1a221a10288ac2f3d6e6c68a4 0000000000000000000000000000000000000000 +6cd1db69931010040cebba91bfa0487d63719484 0000000000000000000000000000000000000000 +6cd35dcedd95ca0506925ea2048a24aa7f7decfb 017b6a716a5c13558a69ef370861c67c896ae83c +6cd8a82503449f77c4b054ca122e13df33fddf6d 0000000000000000000000000000000000000000 +6cdb8f9e1d3a0fcfdb200b2e4eff4a2adb016eeb 1fb1f19bc3011872c0b1c9d0424958084d820bee +6cdceb0e5e3e4ad4daa88b5fc7bc3bfd4ac6e390 0000000000000000000000000000000000000000 +6ce0d2522d33332aa7d552817e8a1e41839ebb0e 0000000000000000000000000000000000000000 +6ce3214ad3beb5abe6045e5aa1743db4249c1974 0000000000000000000000000000000000000000 +6cf19d02de1c80d9f13c9dd7b50f1245b478ac0f 0000000000000000000000000000000000000000 +6cf490e4470efa519224686725175c6fb41893f1 5141e1c7f0e9f57457252ef906d5e45af34dcdeb +6cf6f511c6b295b3aa2b35d987fbf9621660588b 0000000000000000000000000000000000000000 +6cf9059fdfd58ecb0a0f50abf3ab3ba08a164762 0000000000000000000000000000000000000000 +6d064c4b967f7f9262a85438d27cf7bf2ccc412c 0000000000000000000000000000000000000000 +6d21b494362fa51ef62433363a10553758862928 0000000000000000000000000000000000000000 +6d228edda9f04a83d3701d05d4b8d220886a3c13 0000000000000000000000000000000000000000 +6d249bc755613bedcdeb656905f23c317f93c19d 035100a4a7b0b9303bd32e63e587bdce5ff64b3f +6d251f132775a86cb80463025d916de1d1a83780 0000000000000000000000000000000000000000 +6d32cc1a366a2e4565756a94446b59d63f1baa29 0000000000000000000000000000000000000000 +6d34a775ee298196a0fe2f2d7c53e45d25eab105 0000000000000000000000000000000000000000 +6d60b73af02d85d986efb14d735a477ef2d4ef38 b38c45e2181ccdedfe69ee3f0e85fea788cf481d +6d78e9606c59d15ca2431a1e9ae1bbab35baf628 0000000000000000000000000000000000000000 +6d7eca5b9af4d5f04f2fd33dbbb9efc8bd375fad 0000000000000000000000000000000000000000 +6d7f73592af60e598a322d37db07259691986954 0000000000000000000000000000000000000000 +6d9503341c49d30a6b89f7cdaf49286fc9bef415 0000000000000000000000000000000000000000 +6dac23b96069119e73d8514bb921c2ca708df915 0000000000000000000000000000000000000000 +6db021654ac61de6c12629d891572256b2dfd903 86f41b9bc958652ead99f326b63502e8f097da2b +6ddb5631e915665aab893aefd0374d5c675a8c97 38527ec0a426ea6baebaf1bac7b7915a10ff046a +6dded810cfba50d3a8093795a9359c384dd52c6a 0000000000000000000000000000000000000000 +6dff962408f391422e16f0a58e954d27c0392176 0000000000000000000000000000000000000000 +6e0f84a6f783d96119a80fef710aece7cd4d08b9 0000000000000000000000000000000000000000 +6e12152deb827fbe3988554565db39d835447e5e 0000000000000000000000000000000000000000 +6e16cbc84b7bab8438d3876b49e145a9af5c1760 0000000000000000000000000000000000000000 +6e20485bbdee79121a374e8966055ee9ce1a30ab 0000000000000000000000000000000000000000 +6e22ec6948509d2e256932ee55f1781a544cb53f 0000000000000000000000000000000000000000 +6e24f44efa1db92df94e4fe074860843bddd4d66 0000000000000000000000000000000000000000 +6e57b48db991b3c65af8fd06f8ced442334b1ef3 0000000000000000000000000000000000000000 +6e5c402c58f6cc3f7c4aa9cc4dce3c0c8aeb9983 0000000000000000000000000000000000000000 +6e5d120570c4d8f16a63f86c100c35cf9f80cd6f 6d3a9a9602e3ed736308c899bfcc1086c03fb4d3 +6e62de205f0a5d58b385b4536dc30035a9977054 0000000000000000000000000000000000000000 +6e656333e2a1b6b06057ce3a0babb232348eacd2 0000000000000000000000000000000000000000 +6e675d943537312386c9683790848ad1cbacb713 0000000000000000000000000000000000000000 +6e6a2b8e438500e3549a841945e809bd0d02f25f 1bce6f5641bc0c9bd02dcf5463a6d6cd8fe871e4 +6e7c5a8b38cac4071fd30c0f35c27849ffe912b0 0000000000000000000000000000000000000000 +6e833ff357b212b558d1d2a1c67185b4ea5dd1ed 0000000000000000000000000000000000000000 +6e86bffb1cc7bf521834959c5e17ed043eecf20a 0000000000000000000000000000000000000000 +6e904d021239f710e4ba28b1cd80c159c2aa5b90 0000000000000000000000000000000000000000 +6eac7c0211f2b01331d90018475bed9d5966b09d 0000000000000000000000000000000000000000 +6ebc49271b533f77e82be26a846569e4a5c0b16b 0000000000000000000000000000000000000000 +6ed161fca18862b3b29a2da3b56576934bd102c7 0000000000000000000000000000000000000000 +6ee2dd66b88b7abbbf5a57be5d74a4833e9905ca 0000000000000000000000000000000000000000 +6eee9730e3e25005e27a0891c62996d1b9d42d82 0000000000000000000000000000000000000000 +6f06ae470710c6a15d06bd466082044279559da6 882c133e0024b16ae8a95dd7f13a13d24a892f3d +6f0bf136194bdc0d422a6abe4d34f9efd95ebe7f 475398c3688c3873f669fc6c0465e240f7ccef68 +6f22b44db09b952e912fc1a3919c468b05016c76 6017c396e76a4d08fdcd7097132918337e951dd1 +6f234f0c56ff75565499340a2e29e802212a20fe c3bff0347cad89f925af77d0a2810ecebde3bf52 +6f28adfc7976837e79b7d0224741931810484d00 0000000000000000000000000000000000000000 +6f3e634cdf3a793fce725f2f0021ec9a89a9e370 0000000000000000000000000000000000000000 +6f4e7a245376cb816367ff86c497cbba023b6faf 0000000000000000000000000000000000000000 +6f57a03b8555f841d69af629731d44322797e2e0 0000000000000000000000000000000000000000 +6f5bc4a16185aeae2bf81d03824080efe8e1cfee 0000000000000000000000000000000000000000 +6f5e63ce7a5ff0af91ad969840fa6b9635f4fb60 0000000000000000000000000000000000000000 +6f63c622aa72abb6f9fb4366c422bc1e219d2d8f 0000000000000000000000000000000000000000 +6f6590a11e3afea3aec128287e39338abf7283a5 0000000000000000000000000000000000000000 +6f7e533712274815682adc10f39140004ec04c0c 0000000000000000000000000000000000000000 +6f9eab1644887d4e71acc181957a1fb2f37eeee4 7362a6bb70615186d262e146ab4dbab89f1545da +6fce1eed4f72f9ab76c056da880090b50e3df845 0000000000000000000000000000000000000000 +6fd6884eb2791d245d40ec23e1ea341f17600242 0000000000000000000000000000000000000000 +6fd73a0c813b04c4de22c9e268bce1210cfb6118 0000000000000000000000000000000000000000 +6fed3851ee1c07b301cab566ed05218755e7bc94 0000000000000000000000000000000000000000 +6ff3176aae598ead11894df46088c446e5637aba 0000000000000000000000000000000000000000 +6ffc56193b813a8cbdad9a2c97afe3521f2b56b1 0000000000000000000000000000000000000000 +7003d30b0e5fcc2ad28f45d9bcf733fcbaad48d8 0000000000000000000000000000000000000000 +702908cc202c302635a55e6cee2e2428cddcbe6c 765bee6126ada41415c51576e8ff687be8f7775e +703c6dbb353ab9a8307ce40f359c56bafa3725f3 b7e9eec7855c687eecf18336c58bc0fd548651f6 +704943c28f87257e896d1a79eb6962d60f719bec 0000000000000000000000000000000000000000 +70694469c1426489632f8d2794a68acf6a5b53af 0000000000000000000000000000000000000000 +70724b511d38373c1554df7525beef2c546f8c85 f4db838897e226d15043badacf77c152f36014d4 +707394ed42c82c1eea8ad3df26ba422f84ee22cd 65f0f31b7cc0150953c0589aab7ce1d9a4022f5b +70768e1fdc39584566a673c43b7c395de9694a66 0000000000000000000000000000000000000000 +707d7b7326fb895dfb81a9592de8903e07458f92 fdf97ccaee2dfec96c93fe66dd7ac53d7489dae3 +70881f4701478eb8133490eea7ef29f276416b67 0000000000000000000000000000000000000000 +70a5b57fed8f448ff9c5884028626404d1d6be84 a9f79fd097e38ee000f4656eb0beb865bb82d075 +70c7d437b1d16c7607472c48d50a0da734ebc76e 0000000000000000000000000000000000000000 +70d0888e5ad17610aa85794708590f3159bd2016 0000000000000000000000000000000000000000 +70e42b322106e0e33c4c73aaff83fa5cec13c98a 0000000000000000000000000000000000000000 +70f4c87cb89e87c2bdcc5b5ee2721fb90ac315b1 0000000000000000000000000000000000000000 +70f510b58ee9b2b40db0ebb15b64749173770f30 2cfd1696d77619dcacb6a817b3d62ea18d61b905 +7109809ddfb1b1bdbc1822f211cbee24cb018c8d 0000000000000000000000000000000000000000 +710ccea28aafca0a8c2baf862393ef69cf981f7f 0000000000000000000000000000000000000000 +7118be62b613b3e44b7b03ad5052a2ee50550790 0000000000000000000000000000000000000000 +711b3d17a07c23930e9ae5ca5b2d815701e2516d 0000000000000000000000000000000000000000 +71215ac1d2394f810c313d495a8be9437dc4319c 0000000000000000000000000000000000000000 +7125af3366df20d8337aa8fc0ad348fa1a961e80 0000000000000000000000000000000000000000 +7128fb235107e1a589ff338c5fcdef11b6dfc7c2 5c437aa4df5ea9a7e8b742e6438e2c4c32916509 +712b6d48bfaaf9217912892a2c6b74f36b7953cf 0000000000000000000000000000000000000000 +712b75b8eba6b7cb80cab27652f8288602318ba4 0000000000000000000000000000000000000000 +71399f6141bf7da70b367c9a453550bdb48c9754 0000000000000000000000000000000000000000 +7143cd385df4dbe84e199ecfefe18d596fe15097 0000000000000000000000000000000000000000 +714401356834a92896b429520065a765e226bc4a 0000000000000000000000000000000000000000 +7151d664b909825dead3e461470a238b47a5b754 0000000000000000000000000000000000000000 +716c2b4cbf0a8f1fab37872fa1dfd403a1323e45 b9dbef603bb6ccd7142b6ef2e0d17c7390420ff9 +717dcfa29610d623601f66db5b972b40b6f332db 0000000000000000000000000000000000000000 +717deb08d2198519a69a3ccf701f46dac229e608 780052b7a10e8cf6275c38b358c1f8770d83ae7f +717f1547bf94c3e9f76078d9a3b93ce684e17306 0000000000000000000000000000000000000000 +718956f316ced087495274270c2237835e9f486d 0000000000000000000000000000000000000000 +71beac4bc5bcdd1b9b6c0e0071824662ca880043 14e58e218a50926f062862d0bd0f6f2925eb30b5 +71c396326901c07e5321e1e79442387680d2fc24 72537cebfa11ae24005e00bf462b7628dfa6f127 +71c4eea851f94101233de28ce8608bee8196a837 088d1c5690b3f4f97e4bcca8a88823583dca4384 +71d90725d780085741f2bfd529120903cd44e124 830804f313904339b7db77411ebd46bd2753c08b +71de0e0bf8bc4d13b1c637e3c6a08f519528ff7e 0000000000000000000000000000000000000000 +71e51eaf8459a657fae9e2706dd00b0a4a88a850 0000000000000000000000000000000000000000 +720115940364c950f5158ce71a3ed3d7987bd066 0000000000000000000000000000000000000000 +7212aa3e6e4099178c5ba5a47af8243f7897901f 0000000000000000000000000000000000000000 +7218f3239c232c755faf7a03d89b624fde4d8224 0000000000000000000000000000000000000000 +721e40737212db4a1da1971d8e9798c8d8f8a648 0000000000000000000000000000000000000000 +72364c52cb50985ec7982bc11912866ad1fceb8a 0000000000000000000000000000000000000000 +7247f7449e406e5f5f07d6553fcf8910dd3a17d9 10c3d552d067efbfc613a614e28d5a7f1ac98c66 +724f51c986969f27da249d5aafeaa84d59c0b731 0000000000000000000000000000000000000000 +7252763afdbf8b08f1cec2105c08f574b91fc6f6 0000000000000000000000000000000000000000 +725fbe20b32e08f8561dca054813b9cc3f22c6f5 0000000000000000000000000000000000000000 +7261ad9dc3b277f60c4872313681a75280d598ba 0000000000000000000000000000000000000000 +7270a89dc96867a0398ef68d41cce630e7f0a090 0000000000000000000000000000000000000000 +728d06192398067893c229180269778c7045bc4e 0000000000000000000000000000000000000000 +72959fda06ce4db5f5107ac69c779639dea4c6c4 0000000000000000000000000000000000000000 +7299f9908e608ad584e44876910931920265f890 0000000000000000000000000000000000000000 +72c9b7d6d158eef8c8d6b4fa6090d3f7e01660a0 9bcc61f254df95c6828c6b0005027473af555b45 +72daa544f2bfe8d51ed69d7ba82d31cbc36580f2 0000000000000000000000000000000000000000 +72db982037a45ebed212357b7926431a47d730c7 0000000000000000000000000000000000000000 +72e8584b7e8a86ad671f3bb17bbf6e32a6bb71b8 3dd9150a6fa66aef8a40d42358a53b01535dec85 +7316184c87f117c61a1266e8c7ec660973d3b8b5 0000000000000000000000000000000000000000 +7316e3f0e7b9acc11bc1e0255d7ca33837a1bbdc 0000000000000000000000000000000000000000 +731a2f43a9eaf481d9746ff38311a14516a135f1 0000000000000000000000000000000000000000 +733185f4ea2b659cd695b797b7b3bbd4034f30be 0000000000000000000000000000000000000000 +73339e10f04af0794ccf3f6728acc1e0aa09e1f0 0000000000000000000000000000000000000000 +733ca6b349d5556e352a4f738677145fc6f53c37 0000000000000000000000000000000000000000 +7345caac686dde49e97e36b2509f9fb674c825ca 0000000000000000000000000000000000000000 +734b957080a6aa155c9b6115c3686a365b80efad 0000000000000000000000000000000000000000 +734e1d7fb1c3290731dc11dd71a31cde694a8e89 0000000000000000000000000000000000000000 +734e84f1ef8dc43b46ddf89060a106dfca4d253f 0000000000000000000000000000000000000000 +734ee71ec1c0c859f1a10c2f724d364a81d1b942 0000000000000000000000000000000000000000 +737d180c71a8c1bf39164b0b5ad65836b04abb24 0000000000000000000000000000000000000000 +7387007d4c57b9b36348b732f49c22ee3ba399f1 a87f5c69693c4f43764cf2c178cbc8156264c5f1 +738a855528dc6a97aed2af121d9c0237d42fdd16 0000000000000000000000000000000000000000 +73a457bac2f18883f8c74e2ccad8c2bd1ea50c71 0000000000000000000000000000000000000000 +73a85273516068d70d9cc56c879a03491ed488a9 0000000000000000000000000000000000000000 +73aead3cb8260d7e606f372ffa1ffeb5b48079d2 a6ae68aaf5f899826ca2d3b9092678b46629476f +73beef2338bcf24b8fea81e9da3910706d7a39e4 0000000000000000000000000000000000000000 +73bef228c86b86abf96043855ecb981c2f39e720 0000000000000000000000000000000000000000 +73c11c53e81adfd7c7878b349c871a1d36e69744 0000000000000000000000000000000000000000 +73c33530fb6ee9c770b63dfd9b8c6f1aa1b3c906 0000000000000000000000000000000000000000 +73c6b3f9cf81df994f6e7610d850cac4e45ac2ec 0000000000000000000000000000000000000000 +73cb87e053aa06042dcc1b5614e2c34dbb5f2847 0000000000000000000000000000000000000000 +73cbb34d6a2c2e2913dc1f03625103bf14b4c1d1 0000000000000000000000000000000000000000 +73d7f32e143d2baa64f99b3c0c596ab76d810450 bc6d277ecbd88e95406e60f7f90c8d7851b29376 +73ec5a7489040c8fb68ea8bf69f68c3da7f61fe6 0000000000000000000000000000000000000000 +73ee166aeb90c2928138ab08440ac5ad340d8080 0000000000000000000000000000000000000000 +73ee43f7d33885ee992d0eabec9320a95035671a 0000000000000000000000000000000000000000 +73f04da5fd45877479ee55282e8e12e10f89c68e 0000000000000000000000000000000000000000 +7405f3c0c2d48b9b124a28796c3a7e9bce909aa7 0000000000000000000000000000000000000000 +7406953f7299292f320181777a147cc150c6a8b5 0000000000000000000000000000000000000000 +74153b53a65d1ab12ab8a6ef2055d814ad2b8d17 0000000000000000000000000000000000000000 +741550046c3dfa97abb8b9202f8725e09a35cf7a 0000000000000000000000000000000000000000 +74275b80e8c132ac0c90476f8e1235735cc87769 0000000000000000000000000000000000000000 +742df9f07d8e3ce2f47e446b287ab60d0a69ded9 48800ca874d0ebb9926882b9ad1de94aebc64b1a +744d045f98c5729219d38f54024293ed33c152da 0000000000000000000000000000000000000000 +746a1ef9f3b920899576b24852e15789d3ceb1fc 0000000000000000000000000000000000000000 +746fe68ac0f3954d8af1fc6d57b9f12844ece1cc 0000000000000000000000000000000000000000 +7472db9852d12cb5327bf7313da85fa793b4ef9f 0000000000000000000000000000000000000000 +74785231c8b894f3411cc4279c0279746f650870 0000000000000000000000000000000000000000 +7479780ff9c305a71dae7057875af4aeadf683e9 0000000000000000000000000000000000000000 +748b3d2c230ed986c8fb9f7c348f8d027c81e56a 0000000000000000000000000000000000000000 +74a336b7cd589e968f73f02d9acc2a032cb5fce8 bc62aff1bbeffbdaffca8ef114cf06d646728b58 +74a90eb9985e6824b80afe888ad947b43866156e 0000000000000000000000000000000000000000 +74a9f083674134482b1349bce1643d9f4636ed82 0000000000000000000000000000000000000000 +74b8b4beb31634e5752def9c9394faef2f2ba7b2 0000000000000000000000000000000000000000 +74ce7db1b33bb6330df3142d4dc76223b817486f 4e37722524cb3b5bdfcbc037e0d249525d333ddc +74d20edebb6c5ee6150e8e03a42a40ed8c01d1da 0000000000000000000000000000000000000000 +74d88665e9e9c8afbe4e7a802935005ce3e9e921 0000000000000000000000000000000000000000 +74db9654796f39072111b415ce214e03c8301461 17a33b6920ac2dde2a6894b77438a4cedc34a41b +74e4b4d2aeaeb4512f93a95d65bc99a8523f80eb 0000000000000000000000000000000000000000 +74f0e2d74bfe6e373f0f6a4301bf6c7079358f3a 0000000000000000000000000000000000000000 +74f2c4388807b2e691b1d50c79ed49ab02d32863 0000000000000000000000000000000000000000 +74fd5143c553758a74ddb7600fdce1b32eaed176 0000000000000000000000000000000000000000 +7519797b7cb107f95c5029e9069109018e416e8f 0000000000000000000000000000000000000000 +751f4c688006bb7bf81da313ace6bc3239ace907 0000000000000000000000000000000000000000 +751fe5658f51bc6f956a2796f66e4481582f7a37 35215c23dc91302c0b196718e69d2a6e65180dde +75267c216e5f5e5f3224cf714406301b36cb9410 0e181798b8ffb6f7ed9e1a05b01d503f8f90dc25 +754499bb1708c79b6ec11450bc8fde1a2acaf375 0000000000000000000000000000000000000000 +754f763c2b148c04f0ba11b9c8e948557cc91b14 0000000000000000000000000000000000000000 +755439f45ad753f84e6a75ee709a86d4014bf113 225c69eef86b703e90a51cdb15f80d9f3f445e60 +7556ba5e37766719b35bb8fef3d5b34dc1179598 0000000000000000000000000000000000000000 +7568e30924a7e5e675364c7c80c5425b2117900b 0000000000000000000000000000000000000000 +75886717269d21df704238e6e816f5b95604374f aca4208fc56c04558a0b3463f5d7f01532df5221 +758bcc59b504b8b9396ce54fe4c2380748eb1fae 9323bdb9eb08b42461fef714612df7dc3e6be214 +7591c320774c63ddc78e5a7a47034304bdc565a3 0000000000000000000000000000000000000000 +75b009dc7da74e4bd9ea942e982fa18e816d74b3 0000000000000000000000000000000000000000 +75bb4ef3fb7029b99152b6fd05bb678eaef40d06 0000000000000000000000000000000000000000 +75c8e15346a3b7e95fec697b4b21c1bc04dd3fc2 310e698acf7da54f1440a89f9356b7c72b402afd +75d1d2b62a6fab3727047be5c0e10b9987ad9f37 0000000000000000000000000000000000000000 +75d7a662fc873566e50191127e4082b4ecf5ca7a 0000000000000000000000000000000000000000 +75e9d9abe61a73d5b91f653886fa2cbf0fe2e244 0000000000000000000000000000000000000000 +75f21b48de71a3ec979a3a35c55b4e279ced2cc5 0000000000000000000000000000000000000000 +75f3144e4a15dc336616aaee94963e1d3d820e43 0000000000000000000000000000000000000000 +760445cf88cdb6aff00a6ca3a0fd0827f45f91db e3c17b2487756f21200e42f7ac2fbaf1725b2caf +7606916c19f1b1a9ca52d6e9b9834fcf53186c7a d48e0c73e7cddf95e482d6786e85e9cd57326118 +7608e88cdc75c90e17e72d293975649a3b527156 0000000000000000000000000000000000000000 +761088f1a07971aeca8d96a7905350ca12221adb 0000000000000000000000000000000000000000 +7610d07bd11a99a4ce1cc31338d180dbd764d952 0000000000000000000000000000000000000000 +761b982ad6320b98e58374e2ba7ab744ebca119e 0000000000000000000000000000000000000000 +762976504e4d381b5ceabcd35656a581459e0364 0000000000000000000000000000000000000000 +76321be060729713bb5534ebc0665b94cce401f4 0000000000000000000000000000000000000000 +76378616c2bc4d29030e57b920853cf2ad055fa7 977da0215ede5be59897087aef47516e43a5e42f +7638805bf8d2c1a5d169bc1900b32e167c1c8b87 11bf614d266377d4fc30c3c688a2cb0e18c86ee5 +763c0c1c5856a0ed56128b0ab8ce4b3a29ed193a 30d5011cfddcf885d1871a97d0a49af9914f63fa +76512a24360e7d727b338aaa96dac7581262d1ee 0000000000000000000000000000000000000000 +765a8dd4d6efd1a31b6a76d282ccffa5877a845a 0000000000000000000000000000000000000000 +765e42d772bc9e5cbf2a2ed04bb990059b6e5f66 fbd72e501c0e6e2e5d115d5ef9b88b32d281f0ee +76681b01876184801b9043df3763f1a5ddd6e293 0000000000000000000000000000000000000000 +7668c28500554f4e2a1ef7844d11b031dd525659 f0cad8268662b202f14ff74ab59e41c8c34dd217 +766f217d1ec931337e9ed562c15a31640319f1bb ac67c653c8439f2af749b32aeb92b3d98f1d2d2a +767399f2d7104c5b18b1b6c91b7c49573351296e 0000000000000000000000000000000000000000 +76763ddabd550c62994244935407ef28dc0afd73 0000000000000000000000000000000000000000 +767d3fb163b273b275cd67d710c573c59e4e642b 0000000000000000000000000000000000000000 +76973e5ff2528618ad551bb16c57b506e2b36f7e 0000000000000000000000000000000000000000 +76a3c0fe33a6c953263d9d91669b2f1bab562a79 e22561d5724efb151dfd9086f8b000321d49533c +76a41de75972b16f4b84c74f133b4ecb02d8113f 0000000000000000000000000000000000000000 +76a7cc1815085a58b20ab0c07edb31028351a161 0000000000000000000000000000000000000000 +76b0159d12790ab00310ff107e37396ecdf13336 0000000000000000000000000000000000000000 +76b9f705c76a86d2bce32d0f87153c59f11caac8 0000000000000000000000000000000000000000 +76bdb251f911c2efe34132a93f4effa868eeb3c1 0000000000000000000000000000000000000000 +76c6277d92fa4d646e06dd4554795e305a39438a 0000000000000000000000000000000000000000 +76d581bc94e86f7d412e9d2d240764a44e3bf388 0000000000000000000000000000000000000000 +76dcb4555ea3cd87b4f0709d0e74a45aa230c96c 7bc09014c07552deb3002fe757f895462d497db9 +76e27fda90b5a95b61ff2bb8a6c8b12349132230 0000000000000000000000000000000000000000 +76e7ceb72cbb23e61438e42a3d8742ced3c2e7f3 0000000000000000000000000000000000000000 +76ee72e7ef66c8e8ecfb8da84b58572f42919d4e 0000000000000000000000000000000000000000 +76effe459db69ff483080ed299a73c450ee5e8ed 0000000000000000000000000000000000000000 +770047fddb1106bdcc658e5aff91e097795fe262 0000000000000000000000000000000000000000 +7701da15b16697594ece199bc319d0707a2feeb9 0000000000000000000000000000000000000000 +77063ae270bd5c22fa63fba3e3ddb7aeefb5da0b 0000000000000000000000000000000000000000 +7709058fad40c5629cd8697ae3b09a254d8ede9e 8b9d785a53f80a0d1a7794c21a2c329d0e46d480 +772c98eceb657b27db652b2d08607b74f969f847 0000000000000000000000000000000000000000 +772f27454812115f4d509a375445d7e52f463020 0000000000000000000000000000000000000000 +7731e6df864b2f9f14c6c13632041442fe120edd 9f3603efe417fe417ecdcd0becf241b934f6f420 +773e2b9b2980536ca082107edfdb4dbf63bdd44d 0000000000000000000000000000000000000000 +77586aced674ef40aef3412a8d305d453e0d293d 0000000000000000000000000000000000000000 +775c136da9809af6d79a4b72f4d226905a9ab351 0000000000000000000000000000000000000000 +77616513119d27045ab57d61014f5e1a24fabd3a 0000000000000000000000000000000000000000 +776af11db9d33122d3a36b993b0772420d0b3420 0000000000000000000000000000000000000000 +776c1566c5bc01db7d2eb11d533c5c0793acd86b 2fe9b2e82babb09f57d65bd72d6968971863db7e +776d584698d7e944442760db3505e6853c6a31df 014e807fbf4da8a9dee69fae32adda1bf76c90f8 +776e98faa90ba6f6ad90e8e4d37d357c671ed8b5 8763b1b604c9556534dc151ac6d8e44ddb380e51 +777cc97634d565ce1d3517b6b746498b7a6c6411 0000000000000000000000000000000000000000 +778184ff608cd4172de689684272b2d7a8627339 0000000000000000000000000000000000000000 +77869cd239ca4bf7f6e3a272294e2a7ecb3d818c 0000000000000000000000000000000000000000 +779060f11f27d8edc51737e258a3ed58da704119 0000000000000000000000000000000000000000 +77b925bbe52a13f7081c775f528b45618214f29d 0000000000000000000000000000000000000000 +77bdafec7589bfe368224e226281ac9be12e9037 0000000000000000000000000000000000000000 +77cd25a35e2378f49f8ef6e49644264307c0f379 0000000000000000000000000000000000000000 +77ce0bcb483eb6dcd87f0c6e5ff85a2479252def 3f5ad6351d434a89d8365f6b2b9cdf88fc6a532f +77d1e493ea7cccb002ca6ea893bfb9152883af49 0000000000000000000000000000000000000000 +77d2c23802e8deb8c2d217c2d12912fad043e07b 0000000000000000000000000000000000000000 +77e0ad10ca213c449523e9ff1802da6a6bd800e2 3dcf4ef1d4584392d6b81b979db994d266c212f3 +77f239481baa666ac7c464762e16b7206be763f5 80715694d3f04b398cd4fcc188e80dacd4af7b36 +77f45b0d35c3ebb8be1b85545a8162f1d4e8fb8b 0000000000000000000000000000000000000000 +780a12f435a7184311a6a8797d8665517a74f220 0000000000000000000000000000000000000000 +782b2ec5f822472981dac5a7c9eabb21c2376631 0000000000000000000000000000000000000000 +782cf8d1ff8166e3c7be706e08dabf168b9616a4 0000000000000000000000000000000000000000 +7836a2c1311f9ace4cac98e70c4446d639bb07d6 0000000000000000000000000000000000000000 +7839bb62a7c7c102682aae512f9cea95ef4bd2f1 0000000000000000000000000000000000000000 +783c1227c3857d91cd00412bdb2c32f3c8e7f7e1 eaf93f9fb9ba6e374fdbf7e6f04ea874c49b1a35 +78458e842b27de0dd1e63b24412677d18317a054 0000000000000000000000000000000000000000 +78475e38f7c61e349f2d2ad477b5a96a9c3df848 0000000000000000000000000000000000000000 +7855b97af7765e21659735dfd6cb53903ae91d8b 0000000000000000000000000000000000000000 +78576636003ca79bc13b5cd1ab266e06ef1ad60b eca0be1f7d33e4d9f8f392d6e8f942bff7c2d737 +7867fdd569c13969fe34345c9a81f09133a7adde 86f0b3ec52ff9d1a2dc6f04164ff452629c835a1 +7876018a15fbfe162372d50451e2a50727dd1568 0000000000000000000000000000000000000000 +787b045faa15f23528be70c9a6fde2d45ec3bd90 0000000000000000000000000000000000000000 +78802161a037a9df5a13616afa9278f081279b55 0000000000000000000000000000000000000000 +7882fdde69e60e9073eab23db3363d09e440f9b6 0000000000000000000000000000000000000000 +7884c879353b855950d6a0f96890153b1a677d5f 0000000000000000000000000000000000000000 +789c807b5532e4552c21cf836cd8287aec0d72ea 0000000000000000000000000000000000000000 +78b0154d1632bf0ceef43ffa4bdc20af81b34e17 0000000000000000000000000000000000000000 +78b65b54f61339cb7014b2215e02c226593f3e32 0000000000000000000000000000000000000000 +78b6d604232e3fcce802e51a0b3c19d77519ca2f 0000000000000000000000000000000000000000 +78bcdd47e18b3ce510261e26deac32030261db80 0000000000000000000000000000000000000000 +78bceee19eb84e1a332e4953cf64f87fd1b06f38 0000000000000000000000000000000000000000 +78c8e65d55615e49e4d920ef23d38ee4bede4d0f 0000000000000000000000000000000000000000 +78cf794436b623cedad4a229882d4daad8e5563d 0000000000000000000000000000000000000000 +78e17caf68cc63f53ef1ddb4c2110b3612d2871f 0000000000000000000000000000000000000000 +78e7eeee9d0635ec67e0b710198e8e4b151fb7a7 0000000000000000000000000000000000000000 +78f53c2e6065c7d874ac579cafe3904469e8eb42 0000000000000000000000000000000000000000 +79104bfd9ad6465d004224153e011c0c274f976d cfc48199e2df4927cc71afd0c71d3207364ce727 +791e2860e575dac98805a3e4aea109f6c9469c4d 0000000000000000000000000000000000000000 +791ffad0569370fdba7e4a6a5ddf5b5a47e9f12f 0000000000000000000000000000000000000000 +7921f287d854cb12aa7bbfbf1e143795e800aa39 0000000000000000000000000000000000000000 +7926dc287fb9ac9e64463e1817e10e6ae1ba83c7 1ae9ae8c2f94e99430b2f3f7f78f1c890ea4cad2 +7927d30739411b54354d97619a56ad57c7ac3088 0000000000000000000000000000000000000000 +79336f6b1432c33f612cfc5c8ac9c79abdc04659 0000000000000000000000000000000000000000 +79604214f58e92fade1a118337509959f3a7bc35 0000000000000000000000000000000000000000 +79649750ba326e12abdf50f724a2a01a1e02c2aa 0000000000000000000000000000000000000000 +7967256e214aaeb2cb6f3060b6abefb85192b8a2 0000000000000000000000000000000000000000 +797508257501c8b4a336310c84030d0e128caf14 0000000000000000000000000000000000000000 +798fc08a2d1c8a0f5b5bd3211b035bdae9ce4749 0000000000000000000000000000000000000000 +799102290c701b5a2f8b66cae2644f03ec96040d 0000000000000000000000000000000000000000 +7994691db279c23e3ac120a54b5d96cc7f88ae3f 0000000000000000000000000000000000000000 +7995db95d82686d9eff0e6c6dd18545dda802450 0000000000000000000000000000000000000000 +799acd6b1cdc2629b1f2a0276f3f651432ae58a4 2ea9275184ab59533fa140acb3c12f1680372d3a +799d161d5e1a64778076c44a7ff2154b38aa2fad 0000000000000000000000000000000000000000 +79a1ee65c8da0ae41a5e5c763821064d991fb019 0000000000000000000000000000000000000000 +79a773db70d63982a048e087041ba0181ca90e16 5d3f994d26f8895aafd7554100f9cf08510fe74a +79b8df94519dbf269676f6fb2e85a52ce76b09b3 0000000000000000000000000000000000000000 +79c271eb8f16cb07cf5217b994631a85fe12a493 32b28e1eaaa7c04f6b72bcff133935e448def90f +79e99ed6a86820246ed8235de5ff2eb8408a62f4 0000000000000000000000000000000000000000 +79f3e9464a9b4ca1db7ed816c55f5dad418d4d42 4358aa0244fe67de1c345c2efd221ee9ce8ea43f +79f59bfda03deed752faf9483d49a34b3d93033a f84b452f5fe05fa3082d61c0962b0c11e099c728 +79f608df09250ae191cd212ab18198695344b005 0000000000000000000000000000000000000000 +79f60f72d9427ff824114c4b0c610d12732df9a5 0000000000000000000000000000000000000000 +79ff30cd7e30dc4d7e53b01f489395ccb88c23a9 0000000000000000000000000000000000000000 +7a145758c29cb2e52a36730a94c61032a132b2f4 0000000000000000000000000000000000000000 +7a3f93fce8e8e92c05fcc5687360f5e16e9c4586 0000000000000000000000000000000000000000 +7a443c298fb87346338095b5df86f6608fb4d582 0000000000000000000000000000000000000000 +7a4ee7f83b2f4a52ddb40fda02a7c456629e2042 0000000000000000000000000000000000000000 +7a58221b10c43bb7f42a01f679b12c46c5866cc9 0000000000000000000000000000000000000000 +7a5c39ae3dcea1971df30eccd7769cd7dcf2e66b 0000000000000000000000000000000000000000 +7a5e7097e082c6310626a7720c492a513ec39a3c 0000000000000000000000000000000000000000 +7a6f1f7c20dfa9e3354f2216bd62973cfbd5812f 0000000000000000000000000000000000000000 +7a774986e101952f3e963a234d48a2929d0bd6b9 0000000000000000000000000000000000000000 +7a7bba1015f5e99d2114fadcd70f5f1b8fe487bd 0000000000000000000000000000000000000000 +7a7bda14ef82ff764f4082dffb358349d0bc3cc1 0000000000000000000000000000000000000000 +7a821741c5dc7c78a2a229c66a6488e0152fd041 0000000000000000000000000000000000000000 +7a8dfc5d3a293573e16ecdbd8e96b78f8a4fbb4d 0000000000000000000000000000000000000000 +7a9012fae6099886b3f472c30a6b00607b87917b 0000000000000000000000000000000000000000 +7a9be2b23a668a728e1e77ee9f013ce05809cf59 0000000000000000000000000000000000000000 +7aa2e323643e8398d8d081386489e702d9b61829 0000000000000000000000000000000000000000 +7aa4c8850b54c69eb0ca9886b5d4dd6fff9ea245 0000000000000000000000000000000000000000 +7aac03ffd6f5e1fbe6d6c8cb07a280c1bacc47c4 04aa29126e958b902b8f6778c848329ef954d290 +7aae53be9813a0b12478dbaf8f1e4c18a9c6a4dd 9fd53f6fe6492e5f46f6f8b4396b9c25fb2b168b +7ac149c70d69c357aa0dc0d8e29e975a886226f9 0000000000000000000000000000000000000000 +7ac200e87446bed7a245429c0e0d2a3f22629e0c 1bc021aede348cf75c957db05ec77ace744d4970 +7ac6245350963a58f0326db8c9debdbabb555f28 0000000000000000000000000000000000000000 +7ac9fd46754d96cf582ea31711b33c16feb40ecc 0000000000000000000000000000000000000000 +7acdf9b7fcca2e5285cf9ee6231ff69a1f4db38b 0000000000000000000000000000000000000000 +7ad163a705e83c68d8ab182423ca34b81fa32522 0000000000000000000000000000000000000000 +7ada65a5aef6362cf7cf2f69a9d3e5056a30c890 0000000000000000000000000000000000000000 +7aefc0aa822cd69a6a1a826ce2311e976c37ddce daa9412f4d2e512d19807784e2b4639f7d9af0fc +7af0f5ff50ae8582a5c7b1fb7a3ed623a2e7e96d 0000000000000000000000000000000000000000 +7afeabe003658ae3c8c7e626141124b140579856 0000000000000000000000000000000000000000 +7b01a00e46fed030554198bd7ea7e9f26c828f37 0000000000000000000000000000000000000000 +7b0332abfe663be221aff6daee2ad976bd8c5abb 0000000000000000000000000000000000000000 +7b156367d9104e96702f97ca7f5a84d81db40348 0000000000000000000000000000000000000000 +7b15e3efd4cfbf0f372f85b193bb73d3accb8364 0000000000000000000000000000000000000000 +7b19dcd363c31b561466a08f6474f81e6d3b03fe 0000000000000000000000000000000000000000 +7b1a2404be89e94273466cfacc51d15267325d10 0000000000000000000000000000000000000000 +7b2028046cd076f7375d616d345604f267abf07d 0000000000000000000000000000000000000000 +7b2821e8668b19c8dc34593b505cf1b2597f49e7 0000000000000000000000000000000000000000 +7b33c1d6e6c71db9c578a5283d488abde9075f5f 0000000000000000000000000000000000000000 +7b42b1b0455b66e58dfe5ca093cf45c44fe6b59d 0000000000000000000000000000000000000000 +7b4a8a743d84ea29d41dd11ebe7172405a44b1bf 0000000000000000000000000000000000000000 +7b63999ec89c52b384ca9483e25dd429b387572e 9f5ead43f08ab31148aef9569f4287313b6d50c6 +7b678a8a2c20d182f20e97735244b8b2c59b75f3 0000000000000000000000000000000000000000 +7b71b56fae71e4608b1c68bfb66ea34af4d17064 0000000000000000000000000000000000000000 +7b78fd120149ce93c151dc304d95282f628a13ff 0000000000000000000000000000000000000000 +7b7be4af0cbaf18f12f6569bf6854df78b8b3a9b 0000000000000000000000000000000000000000 +7b7d4a63d6a24fa048b979c9c9ee011284071236 0000000000000000000000000000000000000000 +7b8a95918aa55adf65910a3e40ea5974bae2e00f 0000000000000000000000000000000000000000 +7bbb331124c3fa2515e461076d89790b4d608c91 0000000000000000000000000000000000000000 +7bc9089c37a30c47dfa80dd1665e74ece9222804 0000000000000000000000000000000000000000 +7bd51e59cfa5f6b18dfa70ca57bde724fc9b2fa7 fea7f6e6356fac059b3a33aaa49a694a4f8e9386 +7bd8c367a1cc05231b137ebdb542ab1ae4903863 0000000000000000000000000000000000000000 +7bda14f02b1aa39b6c6872c2ee0f21131390c19c 0000000000000000000000000000000000000000 +7be32b93cc0503de84fb326cf361d1051fade3a7 0000000000000000000000000000000000000000 +7be32fcdf1e1fa70b98cb67dc1aabf3bbc07ea3f 0000000000000000000000000000000000000000 +7bf081fb5c244a25b7d4036301956332a0e65ada e1c06ed94cec82a312995be27696df653ce1b6c9 +7c13fb3910685b5c17897cd7799b9ef1bba7f80d 0000000000000000000000000000000000000000 +7c14e8c87857f24d6397c46a0d4c03694c9bb5d7 0000000000000000000000000000000000000000 +7c17a099e276fb90a03f9791b140906966b15d5d 0000000000000000000000000000000000000000 +7c20deed494108c54feca636e22fe7b9123e9c30 0000000000000000000000000000000000000000 +7c2568f4fa1013a84f44dbf8081874ae1efd9886 0000000000000000000000000000000000000000 +7c3e87c5e1ee21743393dade55f0167abadc5a87 0000000000000000000000000000000000000000 +7c46deb701cb258d646cf1d42363b987342211c3 0000000000000000000000000000000000000000 +7c49b8b2d028d32b450ab3215c018b840a8ec652 0000000000000000000000000000000000000000 +7c5376f223ff058c2c00ca5b862fedf4c22b881b 0000000000000000000000000000000000000000 +7c5512d6dd903a0b3b562a301d1c21aacca4fd08 0000000000000000000000000000000000000000 +7c63538b52180645c457227ee79468a48875957d c0f70421012ad376f7c7a54a1981d87bf3b8d9fb +7c71ad3de7e3dcdb8d9daa4a6f1f65c42580f1d8 f6568ae2a9b23dbec7e7ba5fb709d168c7b8b6bf +7c7a32a3d6a182593ea70384a61ebc1f624f5374 0000000000000000000000000000000000000000 +7c7b053b543ebdedf05b0357175fea3dc9d345db 0000000000000000000000000000000000000000 +7c7c25e8d6f98ad747b4c88de2c7fd8d39d04331 0000000000000000000000000000000000000000 +7c918a47acb22abfdcd3c8e1a183d9dfa10b7c45 bc625b884b3f81f77a82f6aa97af4a8fa8560920 +7c9199bc68bd7dfd8212bcebec7e448ae891dc97 0000000000000000000000000000000000000000 +7c96ae0430e795e9eca7523141a1a173e5650d5b 0be1b0f23be4f9c12a801fb346e75dc095c35711 +7c9fac2667658abee93f15606aa816cbd5ec7ce1 0000000000000000000000000000000000000000 +7ca4c08cedddf205cb7cd6929e1661330772e3ba 0000000000000000000000000000000000000000 +7ca70f2b75dbb486db02ce663734187ca57447ba 0000000000000000000000000000000000000000 +7ca97308b4df67030f2f10d47687eae619367308 0000000000000000000000000000000000000000 +7cc3e86ebeae5386da5923de9b2475aaf2e50477 0000000000000000000000000000000000000000 +7ccf612344fc8ac7d36b3809f56b767961d40464 0000000000000000000000000000000000000000 +7ccf9167c1c94801958e34cc7dabc1724a0f3c0c 0000000000000000000000000000000000000000 +7cd6abc1d5fd9dc0a132397284cb4a9847462756 0000000000000000000000000000000000000000 +7ce406fb1ac8cd70cec074f7a47593821a204a17 0000000000000000000000000000000000000000 +7d0ac2450f3e1b21ee4fa9f11936117e737156da 0000000000000000000000000000000000000000 +7d0df919cf4ecdac681b71b52cfba5b75b81855f 0000000000000000000000000000000000000000 +7d1de9ed2b7c97d518258452afd378be11aa070c 0000000000000000000000000000000000000000 +7d236f8b0fff00b8ec783664433227296be84df3 f21bf1dd57da14d65b22aaadd616eedb7d6bb99f +7d297bed60039c7fb64aaf9b00a49ad3e10dd3ab 0000000000000000000000000000000000000000 +7d36d697524aeb43369477d3b297996381256045 0000000000000000000000000000000000000000 +7d3c68dc672c05e946432642406ba9b99a172802 0000000000000000000000000000000000000000 +7d43b15b29ace29bfe344576d79b4bd4d43f144e 0000000000000000000000000000000000000000 +7d484248ab676985b806f7ead4c3b89683b936b4 0000000000000000000000000000000000000000 +7d4967453ebcccc0a34c2572a46714c0be061627 0000000000000000000000000000000000000000 +7d5bd1ad0214afa1e86f06d8814198c927f7aa5e 1452d33128138e1fac53b5b7e51f7176e6005e06 +7d7856db91d037b5c32906197eda8e4ae2645bac 0000000000000000000000000000000000000000 +7d7e056ee91b0b8169c43cb783c25b59469a4e41 0000000000000000000000000000000000000000 +7d97dd4bee1589508674b63eb51f9bdad392e31c eb1c10b084fba627aa32a81a50f9ad43c15abfd8 +7db3ea70c96a4f163a6e2dd927aaf33fefa3b3a8 0000000000000000000000000000000000000000 +7db64698d7b944aa2d29ceb9354a46423c27c6a9 67b4b63f3d3982431bd03e168cb781fbe8132c67 +7db6f8a1ccf02b89662908943b4ec174edf8f585 fffc30fb1dc6da931dd85176a4d1e0178779e607 +7db9b450ac0147d732cb23f509e0bc71525566f5 0000000000000000000000000000000000000000 +7dc36f194881907c515ae26dacaf17d6ec1dc7ee 7a111f6270d252fb01188c0427b8da2785a8add5 +7dd25c75f3526c5c190e2f1c29e665ea7bdb89d0 0000000000000000000000000000000000000000 +7def73d774d1f0e96118e92b636e52cbea371f2d 0000000000000000000000000000000000000000 +7defeda67fa9bb2a2efb6bfe93fd4b1a8d0897b9 5e5821557b28dc7c4898256655491668baff5f55 +7df61947a39d9164012d634fea22888e5d296924 0000000000000000000000000000000000000000 +7e024c02c23638647d8a6e9f690fd179f9838fe6 4074e67a7d2d4411fde9d870dd4e68df06e0a19d +7e0f1e0245ccdf81b207b98529b02c9bad12e3f1 27a3c7233222d0850570ea38fcde37c8bdb856c4 +7e1f151687792ba9586d2b93ff7f7d926a22c5c1 0000000000000000000000000000000000000000 +7e4355ebf4ad06cd45cb883f40c8a73abe41f87f 0000000000000000000000000000000000000000 +7e512ab29567c65f7a42b6e21cd3b4ac194818d9 0000000000000000000000000000000000000000 +7e51f0377d793246ea3b2b6a2fad31c11a3d6095 0000000000000000000000000000000000000000 +7e60f937e36a75b1a9ce5ed2abaec15febbb77be e94858b942f5dbaae0e651c5e308e21920ae5379 +7e6b8eae88aaf83bf6a3abffe48c358fe23c498d c32385196ed8d6cf08301325939a2a84be9e0d5f +7e6e7f32801cec75708b44b2c6857ca4c0d91832 0000000000000000000000000000000000000000 +7e77070a749e5250ea9aaca804badeefdef035ae 0000000000000000000000000000000000000000 +7e8597f5a2a14cc06086d35773e8fea84344a9e9 c48c24f93d7a07662e9b32237cc28fe4d3ae8a18 +7e9140177563e1d2e68bc173165696ab9e4a35da 0000000000000000000000000000000000000000 +7e963e70e2e5e377b49184d0922babc316870be6 0000000000000000000000000000000000000000 +7e98da45dcc9bf6ada8024c634739c194f77a3f4 0000000000000000000000000000000000000000 +7e99738c2417f8af6957afebd414e57175408d2b 0000000000000000000000000000000000000000 +7e9b952d732ac611d5d947e5aa871259d0ebaba5 0000000000000000000000000000000000000000 +7ea0e9d89726456045fd2b2973484594fe455d79 0000000000000000000000000000000000000000 +7ea161ce63bf0e8cbf086a9ffc347c4830078356 0000000000000000000000000000000000000000 +7ea5048ae75f23d68214917632cab13bcb5aae4d 59d252fa85bddc30274eb56439cbc1516c5c6b7a +7ea74e18c2983906ee53c002810689b7a5bc66d8 0000000000000000000000000000000000000000 +7ebed6d134ef2dca6db54b30007b662b40bca332 0000000000000000000000000000000000000000 +7ec682b656eda14f99a56d499f78e981ce9a218a 0000000000000000000000000000000000000000 +7ecb9f2de04cd700dd995f97c7fc5bb6709a3186 0000000000000000000000000000000000000000 +7ed25ed0dab0b2dc7fcee6e550a78f782d50722b 8191e2e2654612b35dbb372850a60f904043c86a +7ed5737886b6443600261b2445d9c968ec3eca35 0000000000000000000000000000000000000000 +7eefaf18bc9ae6dcc03f34e07d538329002d5c98 0000000000000000000000000000000000000000 +7f0609282a23f63b3425504bee33b1ce2682f096 0000000000000000000000000000000000000000 +7f0e56189faf06483e3406686eddff60b69e390c 0000000000000000000000000000000000000000 +7f14ba17978a990bad0bfb6711b8056496576b77 0000000000000000000000000000000000000000 +7f161c356cd9618590fc032bba37cf608475b5a6 0000000000000000000000000000000000000000 +7f1d90437013ec8aa5e1a5462c6735dbdf595aa2 0000000000000000000000000000000000000000 +7f1f4669583820d42b85f830ab314f35435e7df9 124544934bba7a196795951c1a07c648bdcfa6a5 +7f30fdf7aafbdceca73347c63dd15fbacabffcbb 0000000000000000000000000000000000000000 +7f36f44191d501ee5134396cab92165cdaa212c8 0000000000000000000000000000000000000000 +7f3be25e20354fdf53fa5c35273d2d60c27993d4 0000000000000000000000000000000000000000 +7f4674e59b8da4f526ad23f3afc8afb8d5afb0dd 0000000000000000000000000000000000000000 +7f4bec8304771b498e8b0e33c706869ff79fd155 0000000000000000000000000000000000000000 +7f4f93560664d9483345dae9e8235e7373e9152b 71828afa3bc5a8ea491844a9c0d16ff686572fe1 +7f5d24cb3312bcf184a72475aae8304207abda87 0000000000000000000000000000000000000000 +7f6432f9766e9448a7ebe8be8fb040c0db5f8165 0000000000000000000000000000000000000000 +7f71a4f25e987cda5681bfdd14474d9302cd66c7 0000000000000000000000000000000000000000 +7f754b7c5b2edddd20bc85f1d3879f3219d0a885 2a55c7e810c356e4649c502393bedd69c1b3ff99 +7f7c54ad8128baa1988f26793fbad99bad910bd6 0000000000000000000000000000000000000000 +7f869d06ef89fea20cb14ac4bdb7c8213afb4792 0000000000000000000000000000000000000000 +7f88a35b4db1cf4d75a3cfc7f93c3eec99293d06 734d7b141a218a6961f99dc02e008f34a8e5133f +7fa2f2c89846f958535b5335d2d47bd49d44ca29 0000000000000000000000000000000000000000 +7fbe2342c16ab86a9aa0c667b444588389773b51 dcf8fec7c4dadc3fe566563d4998f6231e55886f +7fbe34248a8e17ad115fc49a857815369a406eab 0000000000000000000000000000000000000000 +7fcd1fbda29f79e8886d6e69ec1e35cc5fb710af 0000000000000000000000000000000000000000 +7fcef5bb7256b3fe52d8a83d22871f3b78da3507 0000000000000000000000000000000000000000 +7fd69b92c2be5f689a3b93460a7e51f3b715c72e 6d8572f6ef45fbeceaae1b9766786509c639b428 +7fd7ca9052568d1d905bb1d301fd2e8882b85f8d 0000000000000000000000000000000000000000 +7fe922db323c32a16e1a97d861b6f4c7bfa6c0fd 87bb2ca529b044863385d32e5dd1a62cf822b2e1 +80011d1c83d421cc4d981a8465b80ba3020437fd 0000000000000000000000000000000000000000 +80099fc890d6a4079a380d6cb511b4c641027370 0000000000000000000000000000000000000000 +80164af7974268a46a5a598f743a582728732249 f322cf303498fd58f484855b7ab831db4345d525 +8018d40aac5fc6ed5e022e6203ee917ecf36472c 0000000000000000000000000000000000000000 +801b968a2b5bcc71a7643a00bb33ccc1f1b7ab3d 0000000000000000000000000000000000000000 +8021a752fb5516ccf749bd3628f860bf3f0848c0 0000000000000000000000000000000000000000 +80375318c68a78f4de42aac9da90221980133254 0000000000000000000000000000000000000000 +80498c984dd316871a53ba1aef38caa6e8c4e70b 0000000000000000000000000000000000000000 +8058d24c82c69af7948b2442b835393d93896a5b 5e9f6897d190f096fe8f1c2e7ce04d1c3b22257a +806c067b55fc0cf3eda900fab9d691e630d1cc4d 0000000000000000000000000000000000000000 +8072badb726312f7b97eb41e575981711aed61f8 0000000000000000000000000000000000000000 +807683bd3d891b0d8463d89317896daf99dd2226 0000000000000000000000000000000000000000 +80785a2aedb4a50759817f1f777be5c7e7dbdf38 e321c9288570a656ff9fd0ca6c702e5691fe3ff5 +807890cb6baae110e2e3d21c9d2ec5ef6ca97729 0000000000000000000000000000000000000000 +807dc2f98c26991234420213aaec462a4a139755 0000000000000000000000000000000000000000 +808397b4683bf918a73974a1acdbfe3276e7085c 0000000000000000000000000000000000000000 +80844a60ae50ba0a4d54d7dd2e45ce8360206bf5 0000000000000000000000000000000000000000 +808c8687fbe6912cb639d099f7ec1c2398574abe 0000000000000000000000000000000000000000 +80a02a2b19ece3e8d8781bc052fe4fde238db5b0 0000000000000000000000000000000000000000 +80c726e68976eb357bc3b81abc8626a68e51ca96 0000000000000000000000000000000000000000 +80e4bbfa4ab31d3af69fe29751714d001c1f9566 0000000000000000000000000000000000000000 +80e7d84a95fd7c02df6dbbb4804cf71375b7ea66 0000000000000000000000000000000000000000 +80f6993ae8d187ae0f0a5b9d7055bc922fee0801 0000000000000000000000000000000000000000 +8103c20f669eb9c127aec3baaaafda3987381d9b c39aaad84eb786e63090866ed70a96bce3363ae9 +81114ec149ea0729bfca710990367b5033d8af49 27e3b1d1fdce819ec4239d6ac6c01c9c6195d7fc +8153e5c2bbb83c7d732c277d2b85f23c02e5377d 0000000000000000000000000000000000000000 +81581aa114f60bfda066d6bc042d632ea6c8401b 0000000000000000000000000000000000000000 +8178037174cb524d3d66e102c3dfa4c119aeccca 32280b444be063321697020b2500a7b707f341e5 +817acacb7556f6bf3babd009beb110c32f761b11 76014919f24c422466cd4ef68aef1ee16dd4c6f8 +818414d73a351447a403e8555c140b180de5d375 0000000000000000000000000000000000000000 +8184eb2fef35eb5c5f7ee67b0b8d7c6855ed4dda 343e69d7e0a1bcc9181f2458b0cd7b1aa67f8680 +8198cbf08baf198fee635defc0eb4f8744201dd1 e27fb7c345d16224da871d1bac727c98aae773ad +819b46872d98723d540dc847b2d9320af5ba147d 0000000000000000000000000000000000000000 +81b41e97b56a0521afd525afafad9feed97e156b 0000000000000000000000000000000000000000 +81bcd3c61f780ed9690f775c893b1ac1fcc7d69a 0000000000000000000000000000000000000000 +81c74740a8203152ddf013a893358f24a03f51de 827dd55d67a699ba42be70a390809faa2f80b457 +81e3b9ba97cd2da11293f98328f199b66b4f3641 0000000000000000000000000000000000000000 +81fea5e918f7ebbfa679c9624d64f118e3a7f348 fe1c6d35c9ec6a73e40c66bb2f6d4a9752ccdbe9 +81ffe812f96b5fc52b34167565bfd7df222cc417 0000000000000000000000000000000000000000 +821053ba02129e92868df2ae0c26551fb3d5276a 0000000000000000000000000000000000000000 +821524974320f27a865e9ad832694b379c27845c 63e40505d7e3b95d70c5564623e78d673f469f87 +82177a457784e9ed9fbd35f34b4d1b013997d269 0000000000000000000000000000000000000000 +821e6b731b13336c040227ad0bf01178461dc8bd 0000000000000000000000000000000000000000 +82224967e68c53dcf3ba855005616e576c8c3d05 0000000000000000000000000000000000000000 +824e3e2ea63b3c1a06a8ed5d5169de8eda5b9e9a 0000000000000000000000000000000000000000 +82552fe2723a70e2e73b342d5778f667256d8989 0000000000000000000000000000000000000000 +8261af6f75f5d9826b5e9c166c9c74c3af63e94b 0000000000000000000000000000000000000000 +8267c4042728f47e0d6096e09e0df1c029d5aa01 0000000000000000000000000000000000000000 +826922a654abd14800628da0d9cbff2809d000f7 0000000000000000000000000000000000000000 +82707adc69152b92a3cf10d795f8605778acb7b5 e9dee602f6fac68ce6abc407e93bce3f540ad549 +827339f36367aeaabb1edef1f78c31932ef6f191 0000000000000000000000000000000000000000 +82767cdc31e5a7d22e21dff4ce4151a4641aff0b 0000000000000000000000000000000000000000 +8299b6ebe010e7ef5452c696dd21b5a115bf9e88 0000000000000000000000000000000000000000 +8299ed093f2631d5fb646571ac87a0e1aed7c0a7 0000000000000000000000000000000000000000 +829f6d44c703579668422153ff73be9df664b94b 0000000000000000000000000000000000000000 +82a1b1714a90a6a495698d0a6bad1ca67cc014e0 ff76395327aa0bd7623cd684c1412862ec2fbfd5 +82a4229712d3234c76ae6e0c29a489ea5b51ac67 0000000000000000000000000000000000000000 +82b4c60cdd8bff36aa50afbd04ee6c7c7d19f699 0000000000000000000000000000000000000000 +82bc473ae6527af32c9449e739e778b3abf3d6c1 5ccc41160077a43676606ade325053e59b051d02 +82c9bec0e563270ac227074b77fbd197f822c352 0000000000000000000000000000000000000000 +82ca7447b6aae719fa96f8379fabfbdca3661f30 fad0bc566d40c31a80b048f969527ca2f492f3c2 +82ea7b736cadc18fa52c84f93dca4048b5f37bed 0000000000000000000000000000000000000000 +82f4f704187f0045935c4e6ef4241a3b4491ba71 0000000000000000000000000000000000000000 +82f84e072d9f6b4b5907e9435212fbfc8f82d9c7 0000000000000000000000000000000000000000 +82fa72c43dd539b86b1e901cb5b00ac4c2df1a44 0000000000000000000000000000000000000000 +830598209a8df9e25b46e015a4167437b773eb3b 0000000000000000000000000000000000000000 +8307d8e2daadd3af4e4913e827df88d7cbb7d48f 0000000000000000000000000000000000000000 +8314c31254cb06ac8d9167e1627b668fcd0d8578 0000000000000000000000000000000000000000 +8315dc966f5b811de763483527712f2ab980b1a2 0000000000000000000000000000000000000000 +8346b56df216cfcc999a57db4bec40311748ed4b accd8fabea9b54e447ede946a967cb5d6bf939d1 +834e41ff2ae9c5f991fc9075d5b549adb8d08fd3 2ffc3030521cf42341e7c6c181b461e3f2e3c8c3 +834e850d65ec9d20b1a5e01799ecd4ee0d649c7a 0000000000000000000000000000000000000000 +83610696a0c026071308d7247fab914f4db72190 0000000000000000000000000000000000000000 +83719d784a1eaf1cc0c559555b011bcbca35a438 0000000000000000000000000000000000000000 +83778c976b142c8912d90da092856e8ce00df2a2 0000000000000000000000000000000000000000 +837c3b213c3b14f54cde8364998edf8057725b05 c7a52daa1f9d40c8515f0bd55d8dec0d4c81c0bc +837f00081a1e52200b90adeac6e2aff32c92d296 0000000000000000000000000000000000000000 +8383a056852afd861964e6917bfd2019c92406a2 f73a7f3038bea07ef69ed3d6dd21f4a3fe97c1ba +8384492c6c44f0bf1ffa37bfe1e6917e3e8c9a39 0000000000000000000000000000000000000000 +83899131c9376eaef5f9cb00735f27b711f2e44b 0000000000000000000000000000000000000000 +838ac24ed6aaf6dc1a5df1f808693284b9e368c3 606bf31f640d29a12390491b1fd1af94da2cc18a +8395a47820727638e99d01596d123c8edd4b78b2 0000000000000000000000000000000000000000 +839e43e04e6b6ba0517d0a53d42dbe0f6ef0405c 0000000000000000000000000000000000000000 +83a15b5a034a0b1ede73d6062e42707bb1b47c7b 0000000000000000000000000000000000000000 +83ac7f055483dcc1fb73ae099a39b8bf85c613ec 0000000000000000000000000000000000000000 +83b5d8700c2e0863fcb94c602b0a154357eec78f 0000000000000000000000000000000000000000 +83c5566f49e0b76b5a4011ebe7728b15170b43cf 0000000000000000000000000000000000000000 +83c571a6a19fededcfbb44cb9bb475761dd54263 0000000000000000000000000000000000000000 +83c927859303219ab5ac47f4aaa9d360dba8444d 0000000000000000000000000000000000000000 +83db7027a2758b3a8a8215a9096e3209fc5d2737 0000000000000000000000000000000000000000 +83ea307f94d73a7b5da228c2f27f472e444e8dce 0000000000000000000000000000000000000000 +83fc148e38dae3803ba05216cb8d5317c8e898bc 0000000000000000000000000000000000000000 +83fd6df86377cf5b3b696d1b9d00185423e3ba94 0000000000000000000000000000000000000000 +840c591d11b242a886dca689198a8cf5b431a615 0000000000000000000000000000000000000000 +841b947943fd6e8e5e5fb296985aa0a5f68d2a78 0000000000000000000000000000000000000000 +842be3b173d98badaa130b5c64e815fa5611543d 7d4e6862a2381c5ce37bf553b4bb61ddaeb4ba4d +8431e6e40cff64eb2b5945f9c858d206f5de03a6 0000000000000000000000000000000000000000 +843c1075eb3d1d476f01e5d0cc6e083b75b6fc80 0000000000000000000000000000000000000000 +843e9b93adae78c80f799246b17d86a56308f337 0000000000000000000000000000000000000000 +8445645f1df6ba47333836c4f9c3729b29a74b5e 0000000000000000000000000000000000000000 +845f3145ced3bcf13f8118898dd3267f71b8badc 0000000000000000000000000000000000000000 +846fb0e3b3c2fd807ec887416c5d84246b285095 0000000000000000000000000000000000000000 +84805428109881cb0de3ba6dc9ff5cbc7853762f 0000000000000000000000000000000000000000 +84839daf2a57d7a968a97d21701c85802661a1a0 0000000000000000000000000000000000000000 +8484623d637569e66eea6bb634d64dd81340fe89 0000000000000000000000000000000000000000 +8485685b36093fcde859e0c9acac7be2754862cc 0000000000000000000000000000000000000000 +84914022ce90af063d38a64f9373263b7c3dcaa9 0000000000000000000000000000000000000000 +849d84182230e4f44db0e78e84c98c56b9e5959f d378ec4cef7b1580cf6b395a6c20d0b215bf52b5 +84a6e2b1534002b961a14ce20ad4831bef1cbab1 0000000000000000000000000000000000000000 +84a7ba23e3fcfa1ed05a8c4827fd808343031e4c 0000000000000000000000000000000000000000 +84af7ad57999ddff5978642431533d5c374f20ea 0000000000000000000000000000000000000000 +84dc3dc4f81108049f64699f57e2464841b71672 0000000000000000000000000000000000000000 +84dfd343606e344dff50be2510847aa7a92b607e 0000000000000000000000000000000000000000 +84e7680c8b87f09787ee3da2986a278a0cd64f6d 0000000000000000000000000000000000000000 +84e83f47ac9717ac3944cb2dd61375095c897ba2 0000000000000000000000000000000000000000 +84ed1bc77165f1bccbb0d9d030316e86e06be270 a04e821acaae8a73c93db0f9bbf9d957adba8d0a +84f657e6a446fde0c18c728bcbb37523cf890f1d 0000000000000000000000000000000000000000 +84f83181f7d565c8261374e7919dcbf97e2151d1 0000000000000000000000000000000000000000 +84fddbae745e9323f53ca48455d7faa68c4f6139 0000000000000000000000000000000000000000 +851946aed868fa87a77b6309af3b03af3ae111b8 aecf8d931c704ef40f0c05445860b442cd63df24 +85210821e1d6a24d04e322597ad5497fbd3673ea 372464f739e99f00d1e20641363affa2c63afd35 +8529c423c9ecf1c3778fda0463b979352f11f772 0000000000000000000000000000000000000000 +852fb4c744c51099a629d90797a2803d3bbdfc2a 0000000000000000000000000000000000000000 +852fcccffe41eab6b770cefd709b4215effd0c72 0000000000000000000000000000000000000000 +85367f539870658015110f8d42f6f52a66a51d40 0000000000000000000000000000000000000000 +8538d192ab23971c99b4c00a8bb85afc5273ece0 0000000000000000000000000000000000000000 +853c2f9f32ce04351d3aa85687ace8458c40af7d 0000000000000000000000000000000000000000 +853e3516835c7e59021f6e1cff5cb55f568e7ecf f74105377c137da21614302176fbfc7f4fa1674a +855df03f546c75fa83318f1baeee921c79d656b5 0000000000000000000000000000000000000000 +8563292be2e027b683916613feab36ba7ed934f2 ac9ce4ac0b8479bc8dd5710b2c627e80568526bc +8564a5b327dfdde0e1e1658d144533432adae287 0000000000000000000000000000000000000000 +85697f12a01a6a35cc91dd8f992fdac9cdfbb2d9 0000000000000000000000000000000000000000 +857433ffeafad4d67c1a6aeba67de686330f4fd7 0000000000000000000000000000000000000000 +858e85df86e5555bb3cb74e026f8b123f46fcb60 0000000000000000000000000000000000000000 +85937c71607c23b9bf07c47009aeb153695bdf9b 0000000000000000000000000000000000000000 +8599f87828f3ea9242e6ff33cc2139c2c81196ec 96e9f910de8fa94feca3ce1283a3501c5b82b937 +859d657d9379299beae2463527b243f74057154e 0000000000000000000000000000000000000000 +85a0a1f1f20abb58043269b8b6599109155983cf 0000000000000000000000000000000000000000 +85a2b548db1b12ea8c3cdf16d70b33d944e98ea3 0000000000000000000000000000000000000000 +85b3c0f7769bbdff68c907b8009b891677080aaa 9e330dd7ed51c93f771895ce17b1dde312a43f82 +85ba08ca8317c20e716e84d404f027349c7dffac 0000000000000000000000000000000000000000 +85c3a4e694e3410dd21e3a7b75b21dd1f7d24ad8 0000000000000000000000000000000000000000 +85cd4b96b5004e39100cc8a202af390740305122 0000000000000000000000000000000000000000 +85dafb55abf6164d06efb24352a6297edcefd52b 45a1c95d8131b35b28c5af222bb08ac1c709bf5b +85e13a47c80e8b9c064ed04d0ffe4724ca597131 09f6ae8b375b5c7311767d32874a31ef05f6fc5e +85f1dfbf1fe5d66edf034e15b2ab62fea124681e 0000000000000000000000000000000000000000 +8608b9a03d50034465806253bf07816741ae258a d2c915fb9363b5edd88cb918b5a7ad817b8f678c +861b55558f6770b05b4e4dff57dd7aebe2b85afa 0214c0f59024880b28975686551588f73f653f8b +8624f352e695867bd47026861c02fbe1d9da3f9c 0000000000000000000000000000000000000000 +862504fb1d9e07f6f2e81c1a5fa41d1bea6d3c29 0000000000000000000000000000000000000000 +86262b6259feaa931b3deca560a9dc70d058780b 748a6e112f41e86f6793dd05d8bddfa729af18e1 +8637a83c460d61d7b15d321a0d52cfd9c371456d 0000000000000000000000000000000000000000 +863faee69f553623ebbfb0c62ad2dc0dce9fba5f 14ad526abde06fcd97cfa93ce93b748503144055 +865090e96ff6e80c36bbdb949357f6592d323b40 0000000000000000000000000000000000000000 +865295ade7bc7a8742981e0377d893fd447a56bf 0000000000000000000000000000000000000000 +8654070f7e75c51011b02c60be6322c3ff327c32 0000000000000000000000000000000000000000 +865872d66a2967974526da03f3bdea20f0bd6b9e 0000000000000000000000000000000000000000 +86594a88186a618f3ea48a5e5ace9b1d1c2349af 0000000000000000000000000000000000000000 +866a271e4b29a4a3c26dea56058e6d9e2fc750f5 0000000000000000000000000000000000000000 +866c02a827db8eb43789de18bf0fa3178d2c841c 0000000000000000000000000000000000000000 +8674fe332aa83d44c25427e3d047bc9d3fd9a2dd 0000000000000000000000000000000000000000 +8683e372ac7ff8402f2b776ed6d13e4491e59423 0000000000000000000000000000000000000000 +8686088d17d62d62bb530b52e0d6846c080cd795 0000000000000000000000000000000000000000 +86892b361c7dcbe445ddfe10fd57fd9ab2d8a5a9 0000000000000000000000000000000000000000 +868e46873fe5983832927db949bd94e18838fddd 0000000000000000000000000000000000000000 +8697a181defbfbca272f05a0ff9b5397863b6c0c 0000000000000000000000000000000000000000 +86b4cee30570ac04aca3f395291567a7d921dc4d 0000000000000000000000000000000000000000 +86b69440ddab8095385f639e000e5a8cbf92886b 0000000000000000000000000000000000000000 +86b6e490d9a4d078d8c7633e27241ed4facfadf5 0000000000000000000000000000000000000000 +86b70c941d764857ca07026d0b46ce70477be3c7 0000000000000000000000000000000000000000 +86c41f805eb99a4e56fe365917a9fcef73a8bd35 0000000000000000000000000000000000000000 +86c585a8e30057b8ecc1391ef410c49da65a6d65 0000000000000000000000000000000000000000 +86c72b561a4b8b06dcb198b9174d9f0c60751e16 0000000000000000000000000000000000000000 +86d38cd2d78fa0680a008287cd1886a1357be0ed da25a59ccac905227ee2772051af73b791d7518e +86e04ff9d7d16b766275c659744b9c4a0b202fdc 0000000000000000000000000000000000000000 +86f4e8396a7196f9b79bac3adc6ef2002e5f5001 0000000000000000000000000000000000000000 +87002a45057576a876157af2b3a7b6fc96dd15f8 0000000000000000000000000000000000000000 +870fce00504c9836c7ec600a0bef5b03cf16804d 0000000000000000000000000000000000000000 +871019cbdbffed7e778bff9666a9d2afdf195afa 0000000000000000000000000000000000000000 +87180dd37e1160dd824beebf61188670d0a180ff 0000000000000000000000000000000000000000 +8721742becfc0561e21147c382650681d1ca6446 0000000000000000000000000000000000000000 +8733ab7fdf3cec23887a0cad2c8b0ac68b92f07c 0000000000000000000000000000000000000000 +873acd45eb6adecdc4219a08b028ddf35a568f01 0000000000000000000000000000000000000000 +8745983076c2713267dda67897e181e41ad88e50 0000000000000000000000000000000000000000 +876611bfa610893fb50b413321cb86b3f2380fe0 0000000000000000000000000000000000000000 +876f292807454dc4e14587a1c601a1b8b4c636d6 0000000000000000000000000000000000000000 +87818841f1739220145dfab79053452456b515f9 8c441783d56e95460afb1b125aa5e593220cec0f +8783e828e82e12ae55ea0dee5f348dd7675f8178 358b29b32b36a008441bea8c9ab9ac0d48e0cc53 +878593b7a7e6ff1f2adc6965608c46e5f8ce8f38 eb832f9b91906327ad10246b7d45f2bd655927f6 +878a72c5cd617e0ec881076a7e6b089af6f4e7b5 0000000000000000000000000000000000000000 +878dd081b129d29a8b6cdca215f38a6d089f6d57 0000000000000000000000000000000000000000 +87afc906c4bed9830b533e383568087de6df59fb 0000000000000000000000000000000000000000 +87be34529640c38a7f58418abbc787747e25c314 0000000000000000000000000000000000000000 +87ce841ec0eb69ed98bf9f798c78142276f7b260 0000000000000000000000000000000000000000 +87fe6c94109589ed5a9b3aa844d0455df6d3e079 0000000000000000000000000000000000000000 +883aba1ab0950360f61c6f0972b616862c3a371e 0000000000000000000000000000000000000000 +8847684fc2081cf8417dcd7884342abcf2a4b4e3 0000000000000000000000000000000000000000 +8851cf3d26c81754b27baa2cd04a688107c93f80 0000000000000000000000000000000000000000 +887748e1248c82dceb805a20eac74de4ac790de6 0000000000000000000000000000000000000000 +887d88b98912daf10e6ce6125dfb08b4793734a7 0000000000000000000000000000000000000000 +889fcdeedb9f40f48435d76805a306abb94fe12e 19b4a89ffc18a20fd0096ec68907e7076f5b6787 +88a0220bf60f77b0f8b66a416278bf3ad7a5b404 0000000000000000000000000000000000000000 +88ad99759d8735824c7a70321ed7efc164633f06 0000000000000000000000000000000000000000 +88adb9f48f27c7bd1fd527cb1452b29ba00034f0 0000000000000000000000000000000000000000 +88badd429a8f1e29949399d5628087e614eb7d07 0000000000000000000000000000000000000000 +88bb6b995cd379cc70c17517338635d510525844 0000000000000000000000000000000000000000 +88c28a4b431efcc09421b9741e9d3bc41028cede 0000000000000000000000000000000000000000 +88cbeaa16633aacad7882f5474bf8c5f9401d538 0000000000000000000000000000000000000000 +88daad5d31fee2f4826be9717ece808495d9b4d8 0000000000000000000000000000000000000000 +88ea12c5ad51b607ac714a0bba194d312994cd08 0000000000000000000000000000000000000000 +8902656681487c22451c08cdc3b4e4aef41db9be 0000000000000000000000000000000000000000 +890c37a83e9bd2cfa42e388fd375ea2fb0f76414 0000000000000000000000000000000000000000 +891e163a130e5fe71c1d918d813a7fff080789e6 0000000000000000000000000000000000000000 +891f257db2ec743b0f32aae8054578915a36e0f8 0000000000000000000000000000000000000000 +893f4e29e9812bb5a2d812f5581cc719078b48ab 0000000000000000000000000000000000000000 +89439eebb1a9136ee468525e636bfd88411807a6 0000000000000000000000000000000000000000 +8943e2ad40babb0204dedb11ad6f9273adf9cd53 0b0c5b053b905e933571478b5dac303aa231df42 +894ff818b1fe57c347280640298402c3180f8bdb 0000000000000000000000000000000000000000 +8957d1ec8ce8b82b494971aea46816aeda791842 0000000000000000000000000000000000000000 +895b48b138f6e5e2938591ba2324d5df16dfd174 0000000000000000000000000000000000000000 +896346865517635e3cb0c50e83f214dad968a881 0000000000000000000000000000000000000000 +8968cdd98163149fdc61b4e7f1070e63a9bd1597 0000000000000000000000000000000000000000 +896e874b209c915f05481351349a569101ef9db2 0000000000000000000000000000000000000000 +8973a581f6a368b686f5da2d0352389fea15e7b8 ab1c3afcccd46aa00347017c142b499aaa748ebf +89881fd5fa28148969eba75fad07ac26d4fb4e3d 0000000000000000000000000000000000000000 +8990afa1b619aaf573a538934e91c626575035c9 0000000000000000000000000000000000000000 +8996c8480d71641fa7afcc10bbfa129c12ba8778 0000000000000000000000000000000000000000 +89973835822377e6c80b0cae2e253ac99e550635 0000000000000000000000000000000000000000 +899933636f15991add45e367befd1c30c93bcf2c 995645b4d82818349d75dcedec863d2d34277502 +899ff1fb3841aac19af1d1e12d33dca36fa9be55 dca82c58b55ecc2948303ddfe61f63fd3c9a1e90 +89a41373fe186a1c0ef57048d066a6de6bba8cb5 194c976d80493b5274ee5222554e36702eee8575 +89c274a18353493d0da7f3d23d6a97f1c9fbca3e 0000000000000000000000000000000000000000 +89c45695938346cc81a276dcb775a360eba40328 0000000000000000000000000000000000000000 +89c4b4eeb42a693217de0960ecf6e786a2c921ef 0000000000000000000000000000000000000000 +89cc609f419df85a48008391e0f1dbc671967fed 0000000000000000000000000000000000000000 +8a0ef11069954de808c9ef8e8d63fe87b0477e79 0000000000000000000000000000000000000000 +8a17bf2bee62a1c1b25d69bade9119182d9ca003 0000000000000000000000000000000000000000 +8a190f195bc0c37d8fb33efe2045f5ce28d94b37 0000000000000000000000000000000000000000 +8a2b07c81d82a7c2dd0d5eb3e5589b103fbc299c 0000000000000000000000000000000000000000 +8a39bbca2f761a67396e1333d7f61ac86883908b b4eed5cb6707a1c90797d58876be38ac6812c338 +8a4080177ed5942581b086adb971504f9a61f520 0000000000000000000000000000000000000000 +8a48a7744117f8b0bfa3d1467a8d85add04c8729 0000000000000000000000000000000000000000 +8a507640d9f748a800f4ccd1942fc78c6dcf8d1b 0000000000000000000000000000000000000000 +8a53bfa5ac265c09ce7aaa41c9441123fad60a02 0000000000000000000000000000000000000000 +8a569bca8b377e82cdd271ed353b70526de64c2d 0000000000000000000000000000000000000000 +8a60acf2958548eebf3bd1f935f6fcdb6f31f40d 1f92f0e75f320f55a78357d7d223998fb7e93ebb +8a611d8ce6245491709bc69fa5933c0c3bed6291 0000000000000000000000000000000000000000 +8a6b06ec8737d404b851808f3522740ed35f9035 0000000000000000000000000000000000000000 +8a7074d5e173f1b4eee8d992c92e552f8abb41fb 0000000000000000000000000000000000000000 +8a73b540e88bd18aeef27e86e41dbec3e7e1d2cd 0000000000000000000000000000000000000000 +8a761847ea4f1e1a8d2df265a5b6bf168696272d 0000000000000000000000000000000000000000 +8a7c612a33644637a76454e52981e7f574ef5839 0000000000000000000000000000000000000000 +8a7e7bb40045cdf8e753cf7b7eb5954331140e5e 0000000000000000000000000000000000000000 +8a83c6ff5fb0aa3d599bfe34fd4fe2a11ff8b0cc 3b0ce24955084da867edafeb5ed3eed7efb60bc2 +8a861c9b7b7cc857e95a5698b577769ef9a2bd0c 0000000000000000000000000000000000000000 +8a91397ceb4a9ebe7d5de38c47d668e13e6cbd2e a08f817b7760f2c3ff91592c9dbc0200727b586b +8a9305b52ec4b6c99904ce3cab7c7336a8f7a765 0561f339ee3b14e4d1f465cb3bfc914010831724 +8a93c141697f83b8e998ae9be78651eac26abe27 0000000000000000000000000000000000000000 +8aaa6b6bc0d6b83962351aa94a448ed71521b3d8 0000000000000000000000000000000000000000 +8acb0d28c4d729112ee984c7c522d13fd24f1774 0000000000000000000000000000000000000000 +8ad6bfaba1c051f3826b1083f59c680b2c1fe2b6 f2f0234efe142edc62db5d1d71456946bc01ed5e +8ad773ef4df4f7b12106e5adb40b1c13cd848b2f 0000000000000000000000000000000000000000 +8ae59af6124ec2a1edc0cbad9534efd7cad804d8 0000000000000000000000000000000000000000 +8af1c193a98abf07ca765258e0146fe8943156d0 0000000000000000000000000000000000000000 +8b0fb29ed8d3a3881a3d132866ccf2035c7e4796 0000000000000000000000000000000000000000 +8b1cfba2a2e8fbb26f49b4ca3b13ae1a4385811c 0000000000000000000000000000000000000000 +8b2d347a451eac98146424a989c38ef0bf66c6d2 0000000000000000000000000000000000000000 +8b319cadb0897454d6535ffaeb41b941f1a6d174 0000000000000000000000000000000000000000 +8b4833cce98cb8d8c782ceed8d5d122357b71065 0000000000000000000000000000000000000000 +8b4cc043ab656c77778a98d9ce43a1a02ca15098 0000000000000000000000000000000000000000 +8b4ce57b61a22c379a8ea6ff63749795ebfbf46b 0000000000000000000000000000000000000000 +8b51738ba8dcde3f7578941ecfbc86182274188b 0000000000000000000000000000000000000000 +8b74a56d90e0053c9f4371f6a5842696ffed73d3 0000000000000000000000000000000000000000 +8b7d1c8e3870234e4e8bf6ba2557260e53005255 0000000000000000000000000000000000000000 +8b8ddd18d2293e1c5627b7950fa80d0dbf866cbb 0000000000000000000000000000000000000000 +8b912788ef18b44a083d3fd2a1d6e25c9e6e17cb 4d8b9a36d1c1c432daf5ad4062b9f5f62c795d33 +8b95987cbf4a1a37861165ce6fa26df7d63b59d9 0000000000000000000000000000000000000000 +8b992694f09fa36147a832c4afbe27f441e4d4e2 0000000000000000000000000000000000000000 +8ba33cdbba85b5ce517168e7554e7a503efe6891 0000000000000000000000000000000000000000 +8ba81921032f35b4d10bb4c879ab2585d3453e92 0000000000000000000000000000000000000000 +8baff287aa9450ad3bd467816de321e30157bcb3 bf0f13639782050e07f33654fcaa5dba84a274e3 +8bb1a19ba2da4b5b43c1e7a32d58bfb4495045ad 0000000000000000000000000000000000000000 +8bbb3dd9abde2fce6b3a14a4f31967e2dacbbf3c 0000000000000000000000000000000000000000 +8bc957dabd624e284673021946a99789d4c00ba7 0000000000000000000000000000000000000000 +8bda200e7835aaa6f0af2248e68ee0a444784f79 c40a8345f24ee6c9315d9c59d4aae66135212aa3 +8bec88013cbb0f86f7f43dfdb039ce83bf83beaf 0000000000000000000000000000000000000000 +8bee807da0cc9251e7a442ebb7dd1729cce16947 0000000000000000000000000000000000000000 +8befb8175d3c8bbe9223768672c1abfa000dbfbc ca7ebd8b628ee9e27a462bb29773419855ba68b1 +8bf012b7d576f5efd6d0953859b98494958c2c4e 0000000000000000000000000000000000000000 +8bf3fbeda34eeec0deb6dc1179d79f7811fabd86 0000000000000000000000000000000000000000 +8bfa0f35e3e12b7272fc56932ef594c9cdc2e631 0000000000000000000000000000000000000000 +8c08c06fc4353e2f28120e8113b171033eec2913 b96f621f1214c885686d8b9c8febf9aeec1dc858 +8c0cf477256971db83e1d55cd620a73e12a45653 27ef9de9c887c5a13708836e4474c8423f7f4cdf +8c1493b409ba2a68dd9aec54b5532fbd9d3b27e6 0000000000000000000000000000000000000000 +8c17b0c166e57111622ebe6a2c597e409598bc54 0000000000000000000000000000000000000000 +8c22ab2b3a885344197bf0f05d6df63ecb771927 d88dbac1de5c0c2754b36907acb7e27a69dddae1 +8c2c1888c64a7421e40d82bf9c58ae71dbdcbf3b 0000000000000000000000000000000000000000 +8c3077bfd55617affd321c253750b3edc8393111 0000000000000000000000000000000000000000 +8c3ecf442464257f40d0a50c8b89b3f54016e3ca 0000000000000000000000000000000000000000 +8c4113427244d7aebc537da54bd2c6d321cae80d 0000000000000000000000000000000000000000 +8c55d1e8b0c73874534ea8daff725f25334fe44c 9213c2d4e053625816f26000d218c191e42bd2c4 +8c64b5084a125cca8ea8d0b0a43d07c896ef2d76 0601b6ae00cd4e178ddc7e197d69c1ce5c5df48b +8c7b7efcff0d0267a709c2b5b4d2081d4dd39653 0000000000000000000000000000000000000000 +8c861063665686bd44476d6a82b0879da67ec4c3 0000000000000000000000000000000000000000 +8c8c22f85406f19e4ee147bda41631662d8871ae 5dec072921a40ceb713d87abc00a99de70a19b88 +8c8eb3076d9d9268c52521433970bcb2d17ea9c7 0000000000000000000000000000000000000000 +8c8f4b6dbb72dd50dfacb5c3d6f96207f026cff1 173b045f01e3493f3ad64eeef958106577315086 +8c9047f2a0addf6d6f554eedaa50ca8dd1341a34 0000000000000000000000000000000000000000 +8c9559e54c805c3f3c206ef68fd24f43f23297ed 0000000000000000000000000000000000000000 +8ca00d1b4d2e1f86fa525e66e5761eed103d1c90 0000000000000000000000000000000000000000 +8cafa7b4892e888f39e8978162151fa5aa99fd1a 0000000000000000000000000000000000000000 +8cbf462c1346f9df858c2eccb646f0b21c31f54a 0000000000000000000000000000000000000000 +8cc4b8a63c1a8e0d65a6594f1f93be894e460cf8 0000000000000000000000000000000000000000 +8cc7d4ed8e49f67a351f2358256455750f8bbb3b 0000000000000000000000000000000000000000 +8ce172a3c791d6bfb6b48270afd00699529326e0 0000000000000000000000000000000000000000 +8ce4ec5603d4e39a3c4204bc1843e905ddd04bbd d9dad6f3ba5fd8fff0926aed6159026f90d2b695 +8cec362ceeb7f59aaaffc0d7ca70f08cc0ed806d 0000000000000000000000000000000000000000 +8cf10161adff3258670d20706483029ce20a15ab 0000000000000000000000000000000000000000 +8d004ffeacef5dbc32bb403cc0978364010a5b5b 0000000000000000000000000000000000000000 +8d20075393b9c46e686580cead3b685c6d7027f2 0000000000000000000000000000000000000000 +8d215f9ea8a780b1e2e8dd6cefb8d470cc35682d 0000000000000000000000000000000000000000 +8d28c5a587b36a0f63b3c8b7013c95b7c7f1cb30 0000000000000000000000000000000000000000 +8d2ba65244b44bc682218def043d89de5b184539 0000000000000000000000000000000000000000 +8d30c080b5b29616c4263da72e385177475a272c a5524cbff07af47af4d09c8cd0b79b3380d90dce +8d41a27b0502e54257e18d389d84e64760e1a2b4 0c6f8263bc71a4b243c3264853c9033eb5d9afba +8d43740cb5828850d07997818ed915014ccf2537 0000000000000000000000000000000000000000 +8d44882fcf2fdda94eb255d1058505ebce6df24f 0000000000000000000000000000000000000000 +8d498573f26707276e66f58cac17f59647077b0f 252e90d31050664a12b46003a8473bd34f025e62 +8d50bf75ad82574250962a620d714a15b57001ee 5b7c0b261c6fdb827e34aeee4ae33befba232b4c +8d57b81d7122c9ffad4f1c348879cc6df971617c 0000000000000000000000000000000000000000 +8d701955f24801b495dfd4b3b7a2351b499355b2 0000000000000000000000000000000000000000 +8d71459b1eb5f0fb8b5cc78f588b3842f1307917 0000000000000000000000000000000000000000 +8d835728baf9457240279109f0a1d8ac2721d29e 0000000000000000000000000000000000000000 +8d85f108fef826c40373c31785986190a2f2b6c4 0000000000000000000000000000000000000000 +8daa326bc66352dcf074f96d288478be7d6e5624 5cf172344b8501194438e18c782b20ba319354d0 +8dcc6edd54167e5be740dadf61ea996dca0ac60b f48bb1ce92059bbc406aa14c3125cc6289e56eb1 +8dce238914a7c4567481ea66675a3fbdc2a0b0a0 0000000000000000000000000000000000000000 +8dd2b130a0c1846a129f294e27d23cc5d299eaa9 0000000000000000000000000000000000000000 +8dd560fe501d999f2525f72509c8d931375edfbf 0000000000000000000000000000000000000000 +8de409e67417174ef2ce8126000330f95b0c62a6 0000000000000000000000000000000000000000 +8e020d8bf4d5fbf2113429e0c6497b63520170a1 0000000000000000000000000000000000000000 +8e04fd13582d9c8a5797516f8639720c9e1841f6 de97fe4c5f0d659d5da7bdc95ee853cc7425c793 +8e2d2be9e375f6233bb229703588f6a13ca24766 0000000000000000000000000000000000000000 +8e2d470b7b544061d0171e820809f4ac6e4b3eeb 6c9b90a7e99f72a86c0d7765f08ab0e8954ccd8e +8e3b621e3a8d33dcba5f8c9d32fd18af123afbda 0000000000000000000000000000000000000000 +8e45f8b531cb03db9695c65d18bd6f40c156d746 0000000000000000000000000000000000000000 +8e718046a15a2f605027a8ce9b9c2e8f01ff812c 0000000000000000000000000000000000000000 +8e8269c4ddd06f12803e3969b081d88bf0bfd07f 0000000000000000000000000000000000000000 +8e9e8cb1254a4e550e45e1c1155dc346dd3cb82d 0000000000000000000000000000000000000000 +8ea0964d6f3e1ab6ea70cb1b7e925b227513288a 0000000000000000000000000000000000000000 +8ea1b586a40ace960050f4e91b69277c48a4a35a 0000000000000000000000000000000000000000 +8ea512cc35ed4f7829cd34e93361e9c0cf033d2d 0000000000000000000000000000000000000000 +8eb57fe8d13f17d6391e707757ea2742d2203128 0000000000000000000000000000000000000000 +8ebab68b308e39c9cf4961b22364ef53f459ba7d 0000000000000000000000000000000000000000 +8ec9b8c6a15081a18d170da93972a086be2d691a 0000000000000000000000000000000000000000 +8ed45124ce9008422618c273aacfa1f971c42232 0000000000000000000000000000000000000000 +8edd198c17da8266a9ab94fd4bc6f6e6b206b027 0000000000000000000000000000000000000000 +8eecae6183f594c5508fc2c74d395c6030ce8727 375a5b0271fa4443464feac8e6b9c3cdd51a38df +8eed8cb2297d95bdff0df163e91ea7c401dcff20 0000000000000000000000000000000000000000 +8f0a70f54862a741cc7b0e5fc5d321b0806fc29b 0000000000000000000000000000000000000000 +8f0de0d9ce83f4060600f9d3ddd2984db81be74d 0000000000000000000000000000000000000000 +8f10a456b4e830329fe4af749ed00de0d67ec5dd 0000000000000000000000000000000000000000 +8f15c33ad4e95fc1a90ce91f2b4478cada7db6f2 0000000000000000000000000000000000000000 +8f272aae724c3ae700ac888851b81bc578da3a25 bea8dd246c0e1572af9393762d4a855fa02c01a2 +8f4a60bd8954964544e89a4a34f1d349e51afcb9 0000000000000000000000000000000000000000 +8f4da1785606ad2cbfccef0fad86ec3c285f67d3 0000000000000000000000000000000000000000 +8f527084b6af5fa44d1b95f346847c7d4a20651a 85a578426dadecb3d3a6130efec29175fc1418d8 +8f62e5497beea460b3c90adea392b611575e0c54 0000000000000000000000000000000000000000 +8f6b612c90a8de450071fdc327fbb2b41a8710c2 0000000000000000000000000000000000000000 +8f874266b97222d89c4fa3128d56d520c73416df 0000000000000000000000000000000000000000 +8f883b14f46c23e6c120c0707e095b607b7bf9dd 0000000000000000000000000000000000000000 +8f892c39ee6e0973018b20c870e0dfa43f741ad1 0000000000000000000000000000000000000000 +8f8cd5e1d0e76a38f848452e922c8dd2ae6417a1 0000000000000000000000000000000000000000 +8f93584a8b448eebb473312bcc29dd680b686b13 0000000000000000000000000000000000000000 +8fb771284897ebd0939b05e96af84af7bcb28211 0000000000000000000000000000000000000000 +8fbb809d4390d97ec32343ebf79abfcaea8108d9 0000000000000000000000000000000000000000 +8fc8afe71fa63f62f81aa1d35a34c37d5e79bc41 0000000000000000000000000000000000000000 +8fc9e2af5d0f7e15796666e7e369a2495d421a7f 0000000000000000000000000000000000000000 +8fd03c90037b842246f29fafe7b9abe3cf51ed29 0000000000000000000000000000000000000000 +8fd882d9b2f316da77bb2a43454c5bd060a99d7f 0000000000000000000000000000000000000000 +8fdb48a742ad377698952371c3b186da0defbe00 0000000000000000000000000000000000000000 +8fe63fe139088d4cb7eeafe4b0b900d5f78fbf85 0000000000000000000000000000000000000000 +8fefc848a5677d526143a30ef15e6eb4187dcb6f 0101cfc6fea8e5aecf8e620a65c2105e4b5e96a7 +8ff367b4f1669820932642d9b469e645a64111ec 0000000000000000000000000000000000000000 +8ff3d23513aa3ce8f2582d0771be43f97b84a14e 0000000000000000000000000000000000000000 +8ff70a18b7f6b3e5568e5501f629c172f301f0d1 a57ba76b13479867e772849d8f39068c9b77c9df +900d04fbe6ccea49c90e8fc8f961baeed0d66ea1 0000000000000000000000000000000000000000 +901346c404b711c6b5b85edff35f63c41ada976b 0000000000000000000000000000000000000000 +9020fa5574c7c75ee45820dc3e1f9d87f3c1cd28 0000000000000000000000000000000000000000 +902936e728b9ce338fef87a8c36bd4dacae2b3d3 0000000000000000000000000000000000000000 +902bd62e214c38db14f4be71eaaf089af34cba2d 0000000000000000000000000000000000000000 +90360644fe2cd2a3d799466dcab1972fb9ed9b43 0000000000000000000000000000000000000000 +9036a21eb1a079b583f0aeeacc906db1c58b5330 0000000000000000000000000000000000000000 +9037ca424281f43cc60f67cc6ddb6ba7957bb319 6ac0c163380ea18af35277c83116e09230256043 +90461163140a953dbca6587f022e9cdd9f80384f 0000000000000000000000000000000000000000 +904c8de95851986121bddbfa0d528bcea82be386 28b69729caafbd487dc65fab2ea7e1000800cec6 +904cd8d509fe739b02d94c0bc6dedb47ba176288 d49c525d120a4f07c3bfa2b6842949dcfdbf895f +905293ed64ff926c77eb2b20c16718a2d7e0c6ca 8984d65c7d6e71052f4ffc3ac634e3bd19beda63 +9063d2acf8529afef030c26e6b00855ea9bd6838 0000000000000000000000000000000000000000 +9068e562f1cdfaff9e5424bd0efe6aca0423903a 0000000000000000000000000000000000000000 +90714de15afd2559b190ff25c6446b39e8acee79 0000000000000000000000000000000000000000 +9074f40d23644ac98b043ee25e0e3531799f22d4 2f561cf726c48f59dbd361da61c42db7608b357a +907e1df00b90bceed4ff920f40d32a5f87314bb7 0000000000000000000000000000000000000000 +9082e03898b65cc1ae95c51cd91ac144573f89fe 1f7f606003e7228edfae80e26e9eae944e898357 +909532162ab41f1606519668bc19875340368658 5d0a489071e42d13cc977b41bd3ae5141fe2384e +909a0d7b1b73fe0459d686de339e2c5253e23de9 0000000000000000000000000000000000000000 +90b3966e5e071e26570050733482660f41f944b0 0000000000000000000000000000000000000000 +90b51e50da529f8dcb99ce02d5cb3069393ff405 3051d0d4fe6b1a6a7688e080db08ff02bcb284db +90d463c6784df591072aca4084147e24bf37cc87 0000000000000000000000000000000000000000 +90d87f46fc0a02640d25dede5621f26b5d833113 0000000000000000000000000000000000000000 +90dc7fc5587cee40f5964919387baa3bafd8b9d8 0000000000000000000000000000000000000000 +90dc80c96e3c0a006bf7e80be9bb2e8297595ca7 0000000000000000000000000000000000000000 +90edf8e7662468fd4ad23e1b884ab76fed5d2a23 0000000000000000000000000000000000000000 +9103bb8d5941f0cc5c5e1ad7416f48127915964b c0451dbcfe4b2f563613caf3cbad15aac6e6968e +91195cbd3e906e9109af28662260fe8ca09457ff 0000000000000000000000000000000000000000 +911b191690ab02c0a330ddf4ab008c411c0ad547 0000000000000000000000000000000000000000 +913fd4cb111898cded4d54868c92c7683a4d82d9 0000000000000000000000000000000000000000 +91462693f765eb71421ea2c9bbb48cbd64563369 0000000000000000000000000000000000000000 +914825cef2c45d95fd54e94f72d4d1c8453fceb4 0000000000000000000000000000000000000000 +9155d11c89b9880959e75a9d1638ed9100cda2e8 5033ee84d7ef66ed8576417008d8797e793f20b2 +9176e3b060d0f921c8356f62bff9e26fc96a1642 0000000000000000000000000000000000000000 +917b319123d17d3cd2055d983fb9f4ba67c75160 0000000000000000000000000000000000000000 +9198a2c06050b001d888e70ca8e46bc93e038b59 0000000000000000000000000000000000000000 +919c8695d23dd7dae2f9ee16118791096ecfc48f 0000000000000000000000000000000000000000 +91a7b8dfb87962b5d7d606b783b07e4687eb6628 0000000000000000000000000000000000000000 +91a88369a117f1c13ce43e814b00a06eddf98f0f 0000000000000000000000000000000000000000 +91a989fdf412a1267debe925d2d586292fdd297d 0000000000000000000000000000000000000000 +91be92545af0cea3d96b65f693806d0ee395e628 0000000000000000000000000000000000000000 +91c5d419b51aabaabc578ded8ecc68e1839ebc14 0000000000000000000000000000000000000000 +91d36268cb557f9f5732b961e5623912ceecf3ff 0000000000000000000000000000000000000000 +91ec5f2888e4ef08678d264d931c743791acfff9 0000000000000000000000000000000000000000 +91f51bb8cfd8b166bf1c26721be2b33ac19bc953 0000000000000000000000000000000000000000 +91f83f80bb63653ae9eff2f840553cd919aea88b 0000000000000000000000000000000000000000 +920a51a9170eb76921fd0e6529461e7681ac4c19 0000000000000000000000000000000000000000 +920b84d4238c737eb13e29235c27a6668985ca0f 0000000000000000000000000000000000000000 +9212cbdd0d6453bc65156af39160a3151d83c74c 0000000000000000000000000000000000000000 +92456858c73d86b9bb8d0e4c2f618f008404773f 0000000000000000000000000000000000000000 +924661ce99b1823d37d8f73adca5563ef74116b0 0000000000000000000000000000000000000000 +9248560d0bac2c3e2d635b653a26d4bfa14e51f4 0000000000000000000000000000000000000000 +924ff0d400c4030e5723ced9b5681eb1af090421 0000000000000000000000000000000000000000 +9258356fd308b54bf66075f98db10053ebf5f44f d6f9ed9e20661946113748aff87909d9dd55a79c +9276848b006bb033b985f357e841fe40050b8156 15c04e445a6289ff5c19615e0266b86f2a608b66 +928483615a1393bb73f47214b8f03b768c235f72 0000000000000000000000000000000000000000 +92877e08d5689b06ead8a79bfdf6442858010dae 0000000000000000000000000000000000000000 +928b14645a5451250d25502e0c98146545953bfb 0000000000000000000000000000000000000000 +929b8e4079cd2f5939b1db99e505072f880d384f 0000000000000000000000000000000000000000 +929fcaa12cd32db24485671b41bc639564a07fd1 0000000000000000000000000000000000000000 +92a9eb1e09fb2549fe42b4a071cd54414dd36004 4b62488286b3b183ce46bd2784867f9bc2ee97ff +92ba7a3f537c16e6b780ddc924333d839541e129 0000000000000000000000000000000000000000 +92bab8ff8a532122bb9b52fa83d0e5da17668fc4 0000000000000000000000000000000000000000 +92bf348d1bea1f38fecb19b10c0a96b149f05394 0000000000000000000000000000000000000000 +92d5c3dfd062a0ab4d876e63d75a11d8bca55019 0000000000000000000000000000000000000000 +92db49b98ade782de3dec229936c100a1339b491 0000000000000000000000000000000000000000 +92dc278b5671bf972e7c9687e2d908c0424ba0ac 0000000000000000000000000000000000000000 +92e5e07e6efbe234ab352567f1d4efafac1085b9 0000000000000000000000000000000000000000 +92e95053e36cfc923f27594a47c018e0d524df66 0000000000000000000000000000000000000000 +92f2fe4eba07bd636ed2210cf0eb2b01c10681aa 0000000000000000000000000000000000000000 +931270fcfe2f930940499138ed045e8d5b976cb7 12c7bd23f5ef7606fb2b6de9c770a165b944df9f +9318c00c31466bf67d2e9701659a4cda3d82d1dd 0000000000000000000000000000000000000000 +931a3929fc14dc15f862b98bc03e52236a1a8e03 0000000000000000000000000000000000000000 +93448a95d2bea5171acf79fb5f4e35c072031b5d ed6430eddd3e664558fcc031ec6afdb284da40d3 +934494e4b438c5f095874021f231e5b4450dee57 591e2ce25be01ba9865fb37f91db6ca7de1dcef6 +93464f44aa1caf384b8a94dcc76a600eae6b2ac3 710e60e8269c512ed25029dc015d7be08807bc1d +93505622683eff1b7293b73ab43a6a6e1c1a3ad5 43eb2cfd4527421a28e256dc8d87a94119c962e7 +936784455d127f2d5ee4bc0ffefb4efc4210a669 0000000000000000000000000000000000000000 +9368efd1e0358f0a29f4cf916f54dd2503b6d11c 0000000000000000000000000000000000000000 +9373ed42ab549a0f907bc4d02c3347bac494a582 2776ea4094d43dd5b541d4b38ea14e1d90a09f13 +9377cfad49ab19140edf9a2ae3d95ac9aeccb19b 0000000000000000000000000000000000000000 +937f47ed6e2c31dae680555fcf67f884f7a8c5e6 a00ebee40b8391751312bbe03d429e5d77a3518f +93814dc86a1f54961d9cb0f6f92d5a8d3515369a 501d03d715f4f0b1dd3313eee52b22218fde40f9 +9385ffea487d59b1155623fb831fd116ebc8375a 0000000000000000000000000000000000000000 +9386faec70655279ec3a031fd2afcd9cab09af40 2f4733ea4f2d7a8a9a4a534dc0ff878e533152bd +9387b01188c4d2297eaaaa08f06c41c83179f688 0000000000000000000000000000000000000000 +938a2e07b40b082e01ed1cdf3244767cbdca4061 c498ce192f8d118f71b8154dc430e572808ac746 +938e3513d34ae2f4a2c376df3f79f412251c6c53 0000000000000000000000000000000000000000 +93bd0b97e0bfd3ec57702099f9fbdc8b6a1b9bb2 0000000000000000000000000000000000000000 +93c468ebd9ee30b0cb32a583821d8abe3d017b18 91a0bd2a31d80ac60900471be5b2979c27f2e27f +93d79155de2de0af4a1cf9d1a1a9b401a99db622 0000000000000000000000000000000000000000 +93d8a4797f379873b6d7d35cbfeea815218a3101 0000000000000000000000000000000000000000 +93d9108d0400d0278a0bae83fbafb14d9ff2577a 0000000000000000000000000000000000000000 +93f6e3c37ee72ebc2b3dfc9382465367c2dad13d 489fee6922f2eb6eb30c8d28bc0c10f359e2c31b +93f6fe85db62cc55e34b2341a81a7610d59cfdb5 8b649cd0379ff68b7668d06d57ea742ef67fa944 +94028aebd58ea08566c7edd2df31d41c6e343658 0000000000000000000000000000000000000000 +9406dad69b85d6025a9b69f8cf11625c35357687 0000000000000000000000000000000000000000 +940945df29bea338a22553a3ddfb7e61853cb4e7 0000000000000000000000000000000000000000 +9424e24ec5f6ccc765378d37e13ef641423b1814 0000000000000000000000000000000000000000 +9429da4f1ff62fca498892d37f993267c916a471 0000000000000000000000000000000000000000 +942b6ca8df65b737af158698163e736160c523fc 0e9ec3ae414fba5a2365263ce7bb48e8914c76db +9436718556b19c4ac2bbe8aa267f2e448a5b4635 0000000000000000000000000000000000000000 +94409b8e166fdf90e5c90c89df67d422ff8fd7e1 0000000000000000000000000000000000000000 +945c75499b8e1f11354d4efab55e408fe7ac6bad 0000000000000000000000000000000000000000 +945f37bbe7a55601ff67ed29c756d3b92d314866 0000000000000000000000000000000000000000 +946cba992a2733a60182453e38722b4ed789b729 0000000000000000000000000000000000000000 +9482cbd912d0c5e630e9a53ad53e2559938e8731 0000000000000000000000000000000000000000 +94922ba8cd005b16f070e955d1cd014627d1bb6f 35ed218fcbeafae34ee2c1c80abb864483905c9c +94b606dae1ab89d291133e986d57cf944f787945 0000000000000000000000000000000000000000 +94c38e0e2e398fbd8ee58e18da029c6150e1ccdf 0000000000000000000000000000000000000000 +94c811e2a754da97a8647a2e40a821f91f2d4c2b 0000000000000000000000000000000000000000 +94d8c8aeff8968132abf756ac95f0b60fa692de9 0000000000000000000000000000000000000000 +94de45a2ad9af8e00b75f231059b7e579b9c3f59 0000000000000000000000000000000000000000 +94f641f1ab1887e6e6594a774a4f2ff9a3af2b41 0000000000000000000000000000000000000000 +951aadb352ea93b3838318418303819a895e642a 0000000000000000000000000000000000000000 +95301f1248eb36d1d2a7efabeab41ff3d9c9e5ca 0000000000000000000000000000000000000000 +9537942e6333b1bc7a1a7159f529f0c3bb397bd8 0000000000000000000000000000000000000000 +953c22aa3b0fba6fecc0e3df21186fb368632ba3 0000000000000000000000000000000000000000 +9544806f4dfde6bf97c5d165b8af92baaeac5bd0 305d29627bba84181a27b1d2690ee2b02fce7cbf +9548412f25e5b0de36355dc2f8db3a08260e1e08 0000000000000000000000000000000000000000 +9548a213aa6361ba38d79a3432dbc4b7a768b626 0000000000000000000000000000000000000000 +9551e334fe05f8e5577ca89f794a892d7d63fd6e 93116a9ad7196f13a34b5572a3f8287bda93ac45 +9552a3245811c283aacc573269d0e87008a2b978 f5894b74e7fccfd05012ee39a467bf9395381073 +955f7fbfac065373b11f676c41785bcac6ffb79f 6892c4f6ae64a54e37b251d68408b69f9b68f260 +956a47e600b65ed36e6511ea561941c51bd07ed0 0000000000000000000000000000000000000000 +9570383315876b6c2f6db3c254e7571f2979a4e8 df14516eef8237d640100309dcb19750ca12e099 +95710e5fcbe913c7290c86d9bad76a4e30bf688d 0000000000000000000000000000000000000000 +957ca8d1b1d39f52a9e03579fb653681af625e28 0000000000000000000000000000000000000000 +95baa73bfa779f6648686cc30e344eb244dfc3b2 0000000000000000000000000000000000000000 +95c4b54d2d3fd615d9b2dbf92295aa23b2a2bf95 0000000000000000000000000000000000000000 +95dafe60a103293acba6c6aa16c4c780e7b576c9 0000000000000000000000000000000000000000 +95e25ba7da329d69ec26f917f22664603358c9d1 0000000000000000000000000000000000000000 +95e598be1598170c2e64fad264bc9ddfc085acb9 a2cf953289176e27cd7cb50234c17ef12ab1ca1b +95f71f6d47ec00ecd484d831f672c3f4ee8f2efb 0000000000000000000000000000000000000000 +962b971403e37c87bb8ef35cf0d8e3cb3a90d11d 0000000000000000000000000000000000000000 +962e0e436f96b1b68613013d75307dc1f92ce15c 0000000000000000000000000000000000000000 +962e929703a6ccbc5836924e8c0d692bac3f3cea 0000000000000000000000000000000000000000 +96306a1e38ecc47fe5b114f80541ea1d4711eef7 0000000000000000000000000000000000000000 +964b75117849243121403a7ca1dbc5069566525d 0000000000000000000000000000000000000000 +964e9bef27335cfd760b588f9c4430154a589d12 e4a2a53b0882c3ce7400f9b44d6735d01ae2e845 +96574ecc46dca647a708b6673c7e5309824eda2f df28d6e6a8fe28013cac036f6419a023b033fd73 +9669a761587eb71b3c559d9aa1d72b4779b9277e 0000000000000000000000000000000000000000 +966b4598f8064bf1d3bba70c005b986bab8a1fe7 0000000000000000000000000000000000000000 +9672f95f2622761f88337c5a8804f92285eff2a9 0000000000000000000000000000000000000000 +9681ebb41772805395c93fa4f48c75f691edb54e 0000000000000000000000000000000000000000 +96bb3f09f55c521aba4be727b4824b03e622ded7 0000000000000000000000000000000000000000 +96cfc45bbb7a7c66afbe6d30b672b636fbec4c09 0000000000000000000000000000000000000000 +96d942d0ac031c47c8283d58793cc24e5d95fa11 0000000000000000000000000000000000000000 +96e071f7ea9df5b7820d4461637cf7f40eabc5c3 0000000000000000000000000000000000000000 +96e3d0f165ff5a2a98aa5bcde8cf2b4a3e14527d 0000000000000000000000000000000000000000 +96e611155ab449e80f8b724f25f7101afd1997b2 0000000000000000000000000000000000000000 +96e914abbe854f0b678ba295dd1c3625d0bd8af5 0000000000000000000000000000000000000000 +96e94951c1fd6cec5aa43c0c0f95d7d7bc1faa74 0000000000000000000000000000000000000000 +96f060bce9cea7867bdc3d8bcd014bdeae49b5dc 419004039bdeda00ee4810c14577eeb6a0020ade +96f613a7bb96eeffa24b43e1a09989ac38302a62 0000000000000000000000000000000000000000 +96fae889d55f4c12ea176c4f8d338d6f89d9fdb5 e0739723ef71a8f4cc15df2c8ac3668dfb856ad8 +970a74c9f3979974b4a6166178d744d79270dc2b 0000000000000000000000000000000000000000 +97115ab6983ec2fed7f534c3e213b50ae6586f8a 0000000000000000000000000000000000000000 +971d827140920311c16544571804c24f9db41da9 963ebbc12722692849ca171f6715ec04f185c137 +972098762d02b8a49707719e472eec8682669241 0000000000000000000000000000000000000000 +973696fb20b3291a26cfa79fdaff3cf1e8337472 0000000000000000000000000000000000000000 +973cc4138cd52babb0e58c86eb4d014f198d214e 9dd668d5f75dbb792e29224c71ef680bbf4c6808 +973cd6da0fac60e9c338bfac7aabe5268f4ed798 92357afff72a3481e6d9ff4fffbb23c276622673 +973f4cde38349a2364889bc8422d5c1173b94ec9 81ba2e16238ed6bb812991da645bebd1fb7ed48a +974a9517636bbf39991e4e788dd200539a0192d4 0000000000000000000000000000000000000000 +974ab34ff6ed9afa4f243d2b89da710773deff92 0000000000000000000000000000000000000000 +974ab44d21c625038fe07e8e271f3c2a94fadd31 0000000000000000000000000000000000000000 +9754cd1837927df9d8322413081e5939f8f7265d 0000000000000000000000000000000000000000 +975ab4f4e31b3a5a885318f82999190034bce0ce 0000000000000000000000000000000000000000 +975b1bfa563bc36ad8031de934af158cb807bca8 e9b4293aedfff3098b8be746b39232492a41c6c8 +9765d0634aa798263f6079b4774aa53c0af934f9 5076c313a30d29510e3bb9e3a48f6eb78470708a +976b5cc25e3b6e8be1bef46e0a48f0f4ac568121 e9e7b2fa492fab4a6b2a46eb6473a8a06085ab21 +976c9f59adb53b846a935bb2c318d2364be1c333 0000000000000000000000000000000000000000 +9772ad07a467e365f925b2fbcf5d921e9b1cb637 0000000000000000000000000000000000000000 +9773f7ef6bfb3eb6f78073110b9f5eae6b55032f 0000000000000000000000000000000000000000 +977e8c69700e98f0d4a231bdc99c95f303eedafa 0000000000000000000000000000000000000000 +97824e5a9dc36b0c2ac56bbceef3439b9e8dfcf3 0000000000000000000000000000000000000000 +978486ee9362ca6a9119ea1fa804ba899b51e766 0000000000000000000000000000000000000000 +9791eb684a0f040feeb8c58701fd4f3577e73e2c 0000000000000000000000000000000000000000 +9792817c391be1b631a57462e0b417aa04c5f3d4 0000000000000000000000000000000000000000 +97a13db503a646bf250206614f844f0c651f8f0c 0000000000000000000000000000000000000000 +97b2b45d56a4bbf80b9e0da7ed3908c7343cfba5 0000000000000000000000000000000000000000 +97c5364c7af2e020a211f8303df1f46309a19a92 9551b493c0ac0c84794ec0618d8e2dbbba4322a5 +97ca31829b4e122390b2f5e248c0f7edfc9ad04b 0000000000000000000000000000000000000000 +97ce7a8d33eac1a7210964ded366a8cdabc065ea c70a4e6b1be0903ea34a2e31380fc9b13157e06b +97d37721fcc7d740691de3e2e8acf496ba58369b 67936fcce5079c8d391f1ef105172dae0ea2883c +97d76b8a4e7def0c83f169f5e44d34acaa2fa00d 0000000000000000000000000000000000000000 +97e1a24647295087fa004b05974942f2058dd9df 0000000000000000000000000000000000000000 +97e43b620ec3418ae210d2c85e7bb7c1437dac61 0000000000000000000000000000000000000000 +97e7327d3f469081104225804112015b32002954 0000000000000000000000000000000000000000 +97f125da4315171d9c19618f214d8222d076755f 0000000000000000000000000000000000000000 +97f347f0136613e4c95cd0449727a5ffea4d96f5 0000000000000000000000000000000000000000 +97f4ac3c06d99264d67714ea8507568d2b610e36 0000000000000000000000000000000000000000 +97f84500cae56911c25ebfa336e82e2a3b7cd092 3fe88d0b56c89b71285843a9357b26987afe066a +9805b8252b235070b3f6357df09694a4a9944409 0000000000000000000000000000000000000000 +983c5766754fb93ac5526ea2f3359339e2d6c804 0000000000000000000000000000000000000000 +984aa097337f4e62260ea08b655dfb6c17c3e082 0000000000000000000000000000000000000000 +98560582da9c16b3d638ea077e84ae28f2fa2e5f 0000000000000000000000000000000000000000 +9858a80bbbb8f7e835ec9cc7eab4a35547d577dd 0000000000000000000000000000000000000000 +9868348be75fae9c3a803c5ab9a2adfd4a508a52 0000000000000000000000000000000000000000 +986917b00c4d8ee4e29b532985a80ed2c2d7feb9 6890526b1b28e1c9b91cbf75bddba2db98c286ab +9871afdd6c119ae5def0cc43596d0c88e13c9371 0000000000000000000000000000000000000000 +9877815facd139e737bbbb95d52c9b5098001ea0 0000000000000000000000000000000000000000 +988496a0ea0266cd400f985ef9aa161168e2e47e 7c570205cccda6d798c0dca1acc95dcfdb710ada +98877ba70e7d78341267c947d0186443daa59b27 0000000000000000000000000000000000000000 +988869f662615db247e55729c6ba332dd75b84a1 0000000000000000000000000000000000000000 +989c6cf0f928d81b92d8ed9ae33d05a2e7da622b 0000000000000000000000000000000000000000 +98aeb3275440644aa2082629742b9e8056c7f2a9 0000000000000000000000000000000000000000 +98b01e04af6e9cf78ae427dbd6f7a88a4382e690 0000000000000000000000000000000000000000 +98b8d57e6207edc3479b5ef68df4e213cd98b410 ca31f9a404be8751d9685238b174d4ea3e107a73 +98c31680a6c40cba918ed5885d15663d6486e760 81f80e5e0e17505b975060ec0db7768192afef16 +990719b4d18e1c156f7242c93d85f6730a7d07ac 0000000000000000000000000000000000000000 +99191f81eb64f49949c08964f5ebac1c2f49df28 0000000000000000000000000000000000000000 +991b309707f8d0a85abccac5c51520f2212b1c12 0000000000000000000000000000000000000000 +9924957f3d3c12bc4d12e778789cf561153a081c 0000000000000000000000000000000000000000 +9928a7bcd964faaa319fd62d84690dad25425000 0000000000000000000000000000000000000000 +9931ddb089d06316427af6a1d46568f3cd71009e 0000000000000000000000000000000000000000 +9934507368db3022e96291b9733410ab6cb534f0 0000000000000000000000000000000000000000 +9937565da57d05bb09016c01636538c508abb153 0000000000000000000000000000000000000000 +994184b41bcd433a078cdeef75ba43d92b6b9762 0000000000000000000000000000000000000000 +994a8c12d0e6588dbe9b8f587eda24ad6a166266 0000000000000000000000000000000000000000 +995528e3a525ca09dcb7207d264ec7f288982f27 0000000000000000000000000000000000000000 +996407c3680a77c7419eeb9822756b8fcf025aa3 0000000000000000000000000000000000000000 +996b042d6485eea6e522152100f4f5852877a43c 0000000000000000000000000000000000000000 +996d85356cd3f284a8e4148aa7bd9a5ad7c190a9 ab4155a0fa0b4259ee47d226a9a1f2ad2fb32d30 +996dff454259178fb0d40e74a8c2741b3b7b9ab4 0000000000000000000000000000000000000000 +998590255ae8c178834ca65eb2516a6cc118ca17 d7bb433a7c2117656384d6402041c19ba86f74de +9989cf187e2af12170aeb0ee8d0d44dd3e5c50cf 0000000000000000000000000000000000000000 +9991c71784935db96c367934f834f7f192d45f03 73bf0467057c24cee70fb6ea195ce6a62717ec45 +99a038cc9f33fa5650eed3d1915ef78c16e34542 fe1a988cf2b2d32b272e17e27ed8c89b2701b6c4 +99a80b986c8e76a41a496f9d4b4f9bac378dd607 4175d384f40fe46de0825d3a9bd0e12110826218 +99b814081751f47f6a9beccdba8b944218511b70 0000000000000000000000000000000000000000 +99c082428ebbd202da6723daeadd556e27596b96 0000000000000000000000000000000000000000 +99c0a63cc875f14942b0a0b89b485d458b67822c 0000000000000000000000000000000000000000 +99c384f56ca54253e3b12101587c705f8e212a1c a8b146d7f2211da7d1a4600202a6c2e1c30b7551 +99da12dc07cd8f8ed568fcd8c4e612e41dcb17f3 0000000000000000000000000000000000000000 +99e4e929e035b2a323e37df8f25f4335602e4a0c 0000000000000000000000000000000000000000 +99f2b86b3af6a2d4d58e6c082249f49eb40df38b 0000000000000000000000000000000000000000 +99fdcf83877a80cddd2ac05efd0fca325338f6b6 0000000000000000000000000000000000000000 +9a01f58674e257cefbff38fdf7b86200a25bdb4d 0000000000000000000000000000000000000000 +9a0a57ebbd85362e5063c7a5254fb61bf5e45cb9 0000000000000000000000000000000000000000 +9a155923028357ea5e99fc4d80c5e317882e8d1e 0000000000000000000000000000000000000000 +9a187162d6a8906b82de1a51658ddc250e4f76ef 0000000000000000000000000000000000000000 +9a33f4751b686ba971c0a9294f7c121bb5fdf3f0 0000000000000000000000000000000000000000 +9a3bf1b10fa292a79bb8cec86e9641b912010744 0000000000000000000000000000000000000000 +9a462d4cf4521bd3fc44adaa32bc66908bc47b7c 0000000000000000000000000000000000000000 +9a47cb2198e2c433f7c4842fa1421c3cb90950c3 0000000000000000000000000000000000000000 +9a5a41521a5650cfecdee799f23266fc5da8cff3 7bb3c900a357fdf2a36d899c88c0a9c788f837a1 +9a73ec6e5486d84b6a30a5fa0ac5961b381fc3d3 0000000000000000000000000000000000000000 +9a7f0789f3abb9969c8c478b40211136e60c62ed 0000000000000000000000000000000000000000 +9a9827a884d876338ac543d16a89d58c6ef5a6c8 0000000000000000000000000000000000000000 +9a9bdeedb15dfad2beec980ab4919bbeee7c2f45 0000000000000000000000000000000000000000 +9aa3e97306267093ad88a9b2005a92fcd3b249ac 0000000000000000000000000000000000000000 +9aa78970d208b2c6c5221ae8dffb56e06c8a835c 0000000000000000000000000000000000000000 +9ab88908548ee7be382a149b1d133be86e59624e 0000000000000000000000000000000000000000 +9ad7599a7c60f62fc91932fc590a77da7aa707d6 32ee68656b30e071edeacb6b9c56d530763ec624 +9ae317a6653076889e1074cdd0db6ed598233942 0000000000000000000000000000000000000000 +9aefe4c63ca6f775b4039be3dcb9eff1cca315b9 0000000000000000000000000000000000000000 +9af3731476c57cbd7cd296e0e46059329f63e168 1c8e1481353de9b3ce7070c82cf364456549cff4 +9af3735b28bba958124e84119f726e9de79b6321 53d852c9793eece04a019085283687aabec70a59 +9af6f30719c7e0718798df98096f1679f74c20e7 0000000000000000000000000000000000000000 +9af76212e48bf7555bb2b586ca5d1497d57edef7 0000000000000000000000000000000000000000 +9af85db99924d5bb712dd026737a2c928a6cafa0 0000000000000000000000000000000000000000 +9afa7497d578b1eaf4e2e0ca15626db1539b22ba 0000000000000000000000000000000000000000 +9b11f2e8cce95d38b27c2e7b0e1721b1bec93583 0000000000000000000000000000000000000000 +9b1aed61041551b06926fc2ee4e12705190e16b3 0000000000000000000000000000000000000000 +9b1c35c6df614fef3b1b39b6dc5d551fc5a8410e 0000000000000000000000000000000000000000 +9b237c664dbf9c10ea45e4b7caaf068b0c8ed1d8 0000000000000000000000000000000000000000 +9b28a5f87bc418e1ecb6c47c676dcc0a65f0d498 9dc3976ca01110d4bedbe4c2323d43f990a60b95 +9b392a6589036910058ffb9a60298defb140e2ac 0000000000000000000000000000000000000000 +9b422bfbe1459588821ab011ba470336c63e4958 0000000000000000000000000000000000000000 +9b4a0ef2cdd444668c3ac84c5d98d41b89274ee3 0000000000000000000000000000000000000000 +9b4f45bee83106e2e5309c9583220f690c66c716 0000000000000000000000000000000000000000 +9b6147abe8db58a3e4aafe157f9f86579cba55d6 0000000000000000000000000000000000000000 +9b62053333cb58e5932b045b86749128cfcbdb04 0000000000000000000000000000000000000000 +9b676906ca549297b989ad1c579e46e18dc9abc1 0000000000000000000000000000000000000000 +9b683133f4459ed3fb0bfd00ee7a28e7aa575fd1 69e3d6297e8f5513d00fce6352e30add89d606aa +9b7065417f45d7680799c19c613707cff8118741 0000000000000000000000000000000000000000 +9b7e488ada1af607a2313f09b93f5ae0408a4825 0000000000000000000000000000000000000000 +9b8a0a28b0116e03e68f1e396de39d308033efc5 6a2a8b7f27f5d2f4a7674015d816aa9c2c161b70 +9b8e16b5d19f8fae7fb7b08b953276a0e6dfba4f 0000000000000000000000000000000000000000 +9b910f3928ebcb24560ff004a58e5d397ed3d836 0000000000000000000000000000000000000000 +9b9113028a378234587cd2d92cd45ff9feef7e34 0000000000000000000000000000000000000000 +9b9be6aa3e99d6924278f97845776a1fdc46f678 d4ba316b871351b7be9b6b5d2ae13f703d03a88f +9bab74bcdd7b84d3443961ec6bc138112654f383 0000000000000000000000000000000000000000 +9bba39fab720585047d1b565a3f680559352cfe1 0000000000000000000000000000000000000000 +9bc30443ab95fd05b0b328c13b7e36e911628dda 0000000000000000000000000000000000000000 +9bcacf578ebabe0646006b1da044337639fc7557 0000000000000000000000000000000000000000 +9bdbac6b8e3f4c455f0ee5b2e86157f4fdc3c566 0000000000000000000000000000000000000000 +9bf3f0869166631840759c906abf5112c8505ae2 0000000000000000000000000000000000000000 +9bf61de9c10092f744ab38fe0a41bd6adb8351d4 0000000000000000000000000000000000000000 +9c00805771131e36ca962c778bff59134bbe1f5f e784d5a433d037435c93eb2144029218f8bff02d +9c036dce53c155b1337ce258e1519590571224d1 0000000000000000000000000000000000000000 +9c0fa212e62299f7e2eed05bba7d6203bb4a4458 0000000000000000000000000000000000000000 +9c10c442a12fa6cd659036b87cbaf6695758c4e0 0000000000000000000000000000000000000000 +9c187626c168c702c7a9fa1f21d97a2573ca541a 98a11936046a22083e668f6dbe65f2314bcb9acd +9c19f930e723a2f1b27b62748ad2548247fd52ee 0000000000000000000000000000000000000000 +9c296e12fb9d4aa75af6fc0afe34cff59cfe78a9 ac1f5d67d0ef03f21b28b3ef42ad827b6ae4eb9f +9c34bf1e09dd5d39886d95b538c7160e0a676811 0000000000000000000000000000000000000000 +9c3668c61476001ff1801c077218f8cd40b14a3d 0000000000000000000000000000000000000000 +9c36ef3b6c07407e16909ece3e8f14545ee7b297 977ceefcdf39cecedfa7dd256c5538ac1fd710b6 +9c49bdc03f4cb5de13a53f93557153ae2c1e20a6 0000000000000000000000000000000000000000 +9c4fd107cf97541789f429803b800412e0ff9a6c e2a5f59879888f70a69ff14bfbd36f547c29fcdb +9c5a46bd72c4c9ba485c6101c9b82a81cb829306 0000000000000000000000000000000000000000 +9c5aa0059adc9a5d14c1488ccb310c3a6e3d6408 0000000000000000000000000000000000000000 +9c64bea5b2b8ddc63a205b9733bd947b65d43910 0000000000000000000000000000000000000000 +9c77314b074e75f6ee12b6bbe742c87d2f3937e6 4e9874ec621f5e1d8640ff6c473e814b4de0c6b2 +9c7f3c43eaa08415354282bc6fddb9ac6ce569e8 0000000000000000000000000000000000000000 +9c83df3c06a1cfcb334f645d434558354b984b78 0000000000000000000000000000000000000000 +9c859a302784a2bbc7dc42f45b8c88d0d5b246d0 0000000000000000000000000000000000000000 +9c86aff7c225e0559ed8c7adf247e8458eb771e4 0000000000000000000000000000000000000000 +9cbac86671e48f46d9ee2e109848f4b47daecb78 0000000000000000000000000000000000000000 +9ccdd805829bc439cd289a7c6fdba9149898f5fe 0000000000000000000000000000000000000000 +9cd1efeed37e6c7b9cd257cec0959e4a72ba34d7 0000000000000000000000000000000000000000 +9cd633cbfc5076bd2cb66ffec6d2c6d80d9e7456 0000000000000000000000000000000000000000 +9cd7aaea76316b3944e8a549db9aad3a3155b51b 0000000000000000000000000000000000000000 +9cda4fb5fc5467c8f5980bba930e27a58b773105 0000000000000000000000000000000000000000 +9ce2b2750324112a4c90ba4178d5957a668dce41 0000000000000000000000000000000000000000 +9ce77639e868a8d6b70bfa4533b54d59115ded6a 51fb7351a4bb4220932b5701b7339f085fcce20c +9cf091670d9805de4cce149c61e03c8f1ce613e8 0000000000000000000000000000000000000000 +9cf530c02b769511a0c2982f2501f424c3f465da 0000000000000000000000000000000000000000 +9d0249e4966c771a6d6affd902737d4fec846451 0000000000000000000000000000000000000000 +9d07ebb4b70bdd641748270a831df031d35b7ec4 0000000000000000000000000000000000000000 +9d15ca3d25204d29141b98405549e2455b4b7bbd 73c4db173c763514fe92baae55c883bd2be0c852 +9d226dfae8d84b03704dbe01e0296bc4b70bd484 0000000000000000000000000000000000000000 +9d228aecdcd36ef3e44ece95b054148736d55ecc 0000000000000000000000000000000000000000 +9d23f18f914ceff80c3aad9aa26593f5469bdccb 0739ebb4c02eda01feec8701424505c255b09ed3 +9d49a8b4397aef44a982d2508ec74f2ec204f615 0000000000000000000000000000000000000000 +9d4e6a4dfad8a5263747e5e2e2f8e83b2d741eee 0000000000000000000000000000000000000000 +9d5787ea8039757c47a5f1cab8964e7dfe6134ef ce5c53b2f150661f61e1af18be6f36e334305fb9 +9d5da501e4bf2ee1ae514c4417204d9a8f5dad62 3c7721bbfca8d14ef2b6e8b6e8a3d7568b1add46 +9d60ab157ac174fe7474ec929966d80c36bfff04 0000000000000000000000000000000000000000 +9d71746b2da752871e7379e82587a897eed17de9 0000000000000000000000000000000000000000 +9d82233182d11d64a12bd5c250b881e6e102f4d0 34835370a00b0ba7cf5b274b6ebcd8aff7354cbe +9d8f02f994fba382e4d91abe8790e51792af6a7b 0000000000000000000000000000000000000000 +9d9fb6a18f387faceb0e6de88e0b649d75bab78a 0000000000000000000000000000000000000000 +9dac8e71635e2d1898b92b9023be5307bfe3d81d 0000000000000000000000000000000000000000 +9db6e2d3ce9043ff6b702060eda75290aa37b401 0000000000000000000000000000000000000000 +9dba5fd0437a8cd53e08920ee5bfd46c1797073e 0000000000000000000000000000000000000000 +9dc6ef1d82cb75ec05cec9608dda8086e48df5a3 a6a44ee32a858e6b93164feeb764b7a72560dd52 +9dcf0338e8ff4f422f90186f302961e5414b0919 0000000000000000000000000000000000000000 +9de2aecdd7f7315c29dc2c9b54fba5211bdfc326 0000000000000000000000000000000000000000 +9df3f3da8931880ecfdf368bac7aa86ce999ea71 0000000000000000000000000000000000000000 +9e0e7a60fe9e0c07f405714005f5b18c8be9f70c 0000000000000000000000000000000000000000 +9e13b2574e68387ecc01c453b571208c40124b46 0000000000000000000000000000000000000000 +9e1cd207b2d9f69808973ee2164c87b0ac8ec659 1f5373b96405af5e7d941ed3171e049322ca0355 +9e2ff5161cb0c8720cf14a98929704240410b11a 0000000000000000000000000000000000000000 +9e38e09633badb97d3726912cda9713a418b6198 aee6a9b1726f267a97edddd66184b7b4aeacfda7 +9e42a5f0589cb2451d19b008fbdaf798f002962d 0000000000000000000000000000000000000000 +9e45713c26e270b877651e37704dd530ca56cd3f 0000000000000000000000000000000000000000 +9e5136595fad22af095f4e76e473cb4dc7df99da 43c15552efd1b3979127129ded271331cb643c70 +9e609bf1b342042406827c75eaabaaa9ddd65fda 0000000000000000000000000000000000000000 +9e692329fb2278934f42135a42c0fa2f58e2a908 0000000000000000000000000000000000000000 +9e7efcca3346b4034867780650a79d98a8519aac 0000000000000000000000000000000000000000 +9e8a5dab1f8da9500ed82f8dd44f6d60be415718 0000000000000000000000000000000000000000 +9e8d8a4f46a6ae79d8bb53e18ff6e9d159388893 0000000000000000000000000000000000000000 +9e9ff78e385e05fcb4d10f3fd80c7c5c6666a802 0000000000000000000000000000000000000000 +9eb2d087c7fbe97f352557261f8e6e0595a844b8 0000000000000000000000000000000000000000 +9ebc02e3fd7646e60ac0ec8f0b82397591d4cac6 f7cefc623f7c96c40440933995c70b76e6cdae04 +9ec47d013376d9fe5d966891481544fb645d3586 0000000000000000000000000000000000000000 +9ed37d2411ef09943c7565c44a55e319ef343e09 0000000000000000000000000000000000000000 +9ed4887b7af391a36cfb2537d599c96d6197534d baefb3f7ac3d5f8f7afb62daf5d029d8b71d0d25 +9eeaab5b35b0d8000f28f45e47a14adaa93e95c0 0000000000000000000000000000000000000000 +9ef0a8ebe1c74a8a58b6c9d4f24ce299c3656c3c 0000000000000000000000000000000000000000 +9efc13020462b8550a9f0515e1463a323837ac70 0000000000000000000000000000000000000000 +9f07c80a0efe9d7111479f2cab1bb06261bc24c1 0000000000000000000000000000000000000000 +9f0b3223e621bbc7bb145b74ed39358332783cb0 0000000000000000000000000000000000000000 +9f0d2c10fffd10902ede9719c23b058c5e18ef89 0000000000000000000000000000000000000000 +9f118b90b06eaca2afc9e7205906256b669d52cb 0000000000000000000000000000000000000000 +9f128dc28159df0f50d9065b911b6ffdcb3d0b45 05eb0bc99b38b55cfd2bf4ee199707d9c88d0751 +9f2bdc255e2de988873201de3fe2b4cf992198c4 0000000000000000000000000000000000000000 +9f46c006fed41ba0f9dc6a6ce1254168af215eed 4188b50bfa5df7fd57a4fef729b05c755d1310b1 +9f4870b0bf19a8281e5c6a84ed188388a7f144f9 0000000000000000000000000000000000000000 +9f4e1b771d1b15752b6b9c0520df2045d6bb7564 4c24e8b566d1a253419321250e927a7d61a3a874 +9f5adb379ec5f57b2ae3fa09f0d1b3943078bc16 0000000000000000000000000000000000000000 +9f6318312f5fbcb60f10202c3ee1c65e5d2a971d 0000000000000000000000000000000000000000 +9f715d4c6ccf6fb7f34296fbb57b722f86ab5937 24dcddfc88125db8fc0ba6f0a3b114e17dedc8d8 +9f769c785591d9056c0b4718f3fc188e8b5d5a95 0000000000000000000000000000000000000000 +9f7c7f66e2c3bff77108fc67fc394e4ae1a277a7 0000000000000000000000000000000000000000 +9f8bd0f27219491d918f4aebf74123c29a507985 0000000000000000000000000000000000000000 +9f9d435351fbd3fcace15c7917be14373a62c130 0000000000000000000000000000000000000000 +9fc169cac76a23e120d1f3ccb13acf8940a94914 0000000000000000000000000000000000000000 +9fc177b79570a6c34d1f9a5223f22673e52f4856 0000000000000000000000000000000000000000 +9fc3ed364acd497492b8f4882d0cd553d5f1a4d5 0000000000000000000000000000000000000000 +9fcded0da46e1844eee196decc5aca56504e62d1 0000000000000000000000000000000000000000 +9fefb47aa74dc2acd8dbd08f7eb2e0e08515e415 0000000000000000000000000000000000000000 +9ff7226ae59eb5d878519697488f6d41c209cfb8 0000000000000000000000000000000000000000 +9ff9789fff842e9e567dbe70a8a7966014ce8e3d 369ce30af30bada88167123f48af6e96afd70dd6 +9ffaf1dbd61b0e41829996ae0f49e2eab513957c 0000000000000000000000000000000000000000 +a0038882400c24d8f0833d378536accc64dc8652 4daed5ba55c687ff342be5e316568f30b88a1673 +a007c039eb2a9190d4adeafd865f6d42df4221aa 0000000000000000000000000000000000000000 +a008173908103740770cb0f16cac4148cdc17766 c081448d476535d742c031244db63ff983f10596 +a01222bcadae75fefc41b7c4711dd6a6da68a19a 67344bae1f2d8861ac1652207f7a660120167928 +a02a39eb0ca39aaf508c146ca8dac6cdb783e23f 0000000000000000000000000000000000000000 +a02d74c2467d591a7c4d8fa89b3b18e2452be0a5 0000000000000000000000000000000000000000 +a03523af6baa2cdee4a55cc0a0fce7f04810be6c 0000000000000000000000000000000000000000 +a04963b20d230c83681f5caa3d3702ba2b53e83a 0000000000000000000000000000000000000000 +a05c16980e675ba3381831c926a17c4fbc3ca672 0000000000000000000000000000000000000000 +a06ab0c19b70450692cd0ee40105d492bc9bc736 ac86c3e667cad249573610aa496c0a8f925c2301 +a08028f5152dd366defc4563471e59964522137c 0000000000000000000000000000000000000000 +a095dbf713c9b67db26794d28a612aab14aa4189 0000000000000000000000000000000000000000 +a09875d4bfe75d7895a4a9b366562ec34872c7b1 0000000000000000000000000000000000000000 +a09c4bdeda567e3f01c13d3d9a68c15cf623097c 0000000000000000000000000000000000000000 +a09cc5ca2d98441ce854be504ccbafe5c8d40a07 0000000000000000000000000000000000000000 +a0b6f9d0be3ca9c70279e0f9e7f952ba7b5bb7c9 0000000000000000000000000000000000000000 +a0bf1fd1c9ddbd9e47751c2fa174c0b585a83fba 1d6e88dce3d7a0dc7e78f2e207f53291e222b1f3 +a0c505a94d85cf99c68241173d6195c24d2b160d ba1f53f3854f55d69f5570eaf80e67675ab8c696 +a0d002af805b38b5a2c31da3fecf9cda9d75af29 0000000000000000000000000000000000000000 +a0d1845cb41e6b92a9fe8ec69b64ab3334b87d2c 0000000000000000000000000000000000000000 +a0d1f23190664e95210c8c3c87624c0c453140b5 0000000000000000000000000000000000000000 +a0d8b91cda3cc5710e3050d78878e198d5127b50 0000000000000000000000000000000000000000 +a10bd0f5b259d98224383252488997fc9c6c54a6 e22c5526b685dde4e5b3361af09d1c965c2cfeb6 +a10eec784c74516e9d5d4490557b782646b9d29b 0000000000000000000000000000000000000000 +a117990a4822bad382a3316df3bcf3c08c6c11ab 0000000000000000000000000000000000000000 +a12492fdd8c4b4ef9bbfac6eacc382fc97dd9421 0000000000000000000000000000000000000000 +a124aa2cc868ed939c5a26e03e44c06354dee6f8 0000000000000000000000000000000000000000 +a137f2d693503e1055b3a7402426488e282dac19 47a2886704d48acf770462bb1463b853b19472ee +a13a18b9e814aeafca19d9b607ba1547e307de87 0000000000000000000000000000000000000000 +a155a0ca209fb202660168bbf0ce7efd03a2010c 2f5d97437ca44217da86671328d85e5368b6e9e3 +a1647d1fcf29d9f86f7bea04aa47e7ce9b8de0c5 0000000000000000000000000000000000000000 +a16ef23e1405547f72679f1bb76ec46d96a22aee 0000000000000000000000000000000000000000 +a17303c382e33baee31bb4fe2cb2093c6cbb822b 0000000000000000000000000000000000000000 +a182f44bfb74ccbbb5b4bbf842693de48d60dac1 0000000000000000000000000000000000000000 +a184a8f978d0785a81c0e40b8f9ba3638e5b018f 0000000000000000000000000000000000000000 +a1aa6eebd8e707852a5a1a56ef59553e5b0ec815 0000000000000000000000000000000000000000 +a1d46e57da451ac5d68ccc2b26f811b4cd607896 0000000000000000000000000000000000000000 +a1dae675b37911fc6121c2ec32c4e24b25f430da 0000000000000000000000000000000000000000 +a1f255c44fa402c240d6c2d2c6f1042ba01e3739 0000000000000000000000000000000000000000 +a201aa237c39ab6748db0bfebd7d8c7be7ce4530 0000000000000000000000000000000000000000 +a2185eac9fca124ba9c9a62c1474936b9861f159 0000000000000000000000000000000000000000 +a2291cdc8ec4718a21f347c36fc8e4b78e07e985 0000000000000000000000000000000000000000 +a2317480250129c7091ef7a90e2eb2a95d9ac48b 0000000000000000000000000000000000000000 +a2337db7bd1dd2883dc79796aadbf58ca425601c 0000000000000000000000000000000000000000 +a25605399ff2a7cd488c7cb432374b601a141fc5 0000000000000000000000000000000000000000 +a26096c8cf9c3e53a547235a446296eaff3f413d ae9df31a1a630920ee42d35bcd7ac2691487d707 +a278267ff3ce175e518ddc40c2824bba70f1b94e 3acd8b3ea9ca6f70210421241649f0ddb1de2165 +a2784a2b17eca1a993d0e7af2478203fb11ce171 0000000000000000000000000000000000000000 +a27e752b125aab75c8ca1180b73e13a832726ab9 02906f464dac882de90e07ff4302994e2d3cac1b +a27f1ef1b2d12213feefbea29cb81f73ca9ca018 eeab50cbaced9b5745f6050b954f028193900739 +a28f5ddae4c695a4a29393f2dab67fe4cba88e96 0000000000000000000000000000000000000000 +a291f3204af28544050ea8420626b7e5110e6d37 0000000000000000000000000000000000000000 +a29d4423543cc7a0ab79a1016e77404b3bc03784 0000000000000000000000000000000000000000 +a2c01d83522fbe4fa0447b75cf6b58842ac4e9e9 0000000000000000000000000000000000000000 +a2cff26ad6564e5323ead0b4c546592d215cc7a0 0000000000000000000000000000000000000000 +a2d7789977dc8d0c99729144aa2987ff12099648 0000000000000000000000000000000000000000 +a2d7c355ce3975e1c0e2fc444c248a3ffbe6a65c 0000000000000000000000000000000000000000 +a2e516fb722f7c5c23adb0c2946c3b03ae23c550 0000000000000000000000000000000000000000 +a2e7ef2125895044ad83487dfdacefe02a968669 0000000000000000000000000000000000000000 +a2ee29d0534631fa3a36e6349e4b1a9dcdf7b73f 8a2caa3657460a9f4a75c35fb301589f3a700277 +a2f6198dd295fbe950e4f98c6edf7370f578432c 6de1081a288ca99632e5800f8e2d5ec38aeee332 +a2f70aea67df13cdb3121bdb30929d06fbab7b81 0000000000000000000000000000000000000000 +a2ff2d96cf065a6ee0dadd8271b6a3d28608fb58 cee39b75e3c8f2c452cc40cd08c0b3aa825e058d +a3104da78da2081ea0e528e60c849a561e19b3ff 0000000000000000000000000000000000000000 +a320630867b7f22f7b4b66f8a0d1548f0cb34bf1 0000000000000000000000000000000000000000 +a32c1dadf55c128637d8e9dc314bb11af1614adb 0000000000000000000000000000000000000000 +a33a3159ff25afc8aaff0d54c187891c3d025899 0000000000000000000000000000000000000000 +a35e8d337811785a078d378ee99d4c8daf009f08 0000000000000000000000000000000000000000 +a372891e9a57de146ee0c44d607de2b4b6237d7f 0000000000000000000000000000000000000000 +a379f1b2f1a80a0a007d5c7321a96b2c6d4af5f5 9a0d0fae3b87b5a9cb4ce191fa413cb803d41e9e +a37a871cd4f5e61647ec329855170e77ccad6bdf 0000000000000000000000000000000000000000 +a389eb6cdae8c250d767eec02b84933209cecc84 0000000000000000000000000000000000000000 +a398fc4d4c86ee42504d73a0c8499954a0d73d8c 01ad41a5c4d5d8690fbda06c82f938f08dce4fd4 +a3adb2a7ff0c0ca1a84bc51a2307a5dfeadf485c 0000000000000000000000000000000000000000 +a3b00114bb747cf620db614535939eb4cc91f878 dd951107707df6d6043332bfcf4d460925f0225f +a3b4b0d425d3a65791812e920df90baa7ddab687 2cd1ef6df657a4a25652d440efe18f2e81fae74d +a3c2d1e62ae18b6d8bdcddf1a99c64a07ee0966a 0000000000000000000000000000000000000000 +a3c6c8330f26db5a181f17024a2b9e20ca8529f2 0000000000000000000000000000000000000000 +a3d05417d17f18462e755a4f5691142cbcf210df 0000000000000000000000000000000000000000 +a409b3164a56ab71a10024e4204d7289571b6775 0000000000000000000000000000000000000000 +a42e62a739d11aaa9a26b2f32a5e71483d656e88 0000000000000000000000000000000000000000 +a435d64d6555fe664fbf082c8b385ba3e809b7aa 0000000000000000000000000000000000000000 +a4436638fe62e4b6ec735024b77bb72fe217f4ee e9b5f727705bd0400ad3941a7546c5856ab72215 +a44e7899968770b25cb9a2710b8fa6de8028e244 0000000000000000000000000000000000000000 +a4519b4627c3d056e7f062740ab57e08437cd192 72d45e15576a04e7877d3bc845d2150f54a47c2d +a45793552aa47edfc41893690771766fca4a1f60 0000000000000000000000000000000000000000 +a45aaa0896ca81a8085834bd7115386db0089193 0000000000000000000000000000000000000000 +a46048966fa8801f3d15aced1ca43f81369dcb69 0000000000000000000000000000000000000000 +a46e8578519c85b9455e41ccbeebeb8740252ae3 0000000000000000000000000000000000000000 +a478bd232d23f8e9a9b414df5726ad9c414f592c 0000000000000000000000000000000000000000 +a48f91a8dd1619a1f5fd47bd36368ebefb8af2d4 0000000000000000000000000000000000000000 +a4933ef3802cc469fdfa1146d3bcfc9e958696bc 0000000000000000000000000000000000000000 +a493e9ca266521c27fb1d8aa8ad05cd622d432d8 0000000000000000000000000000000000000000 +a4aa4210ad070ecbb584144e5dcca6eaa1baa8b4 1870038020a8fc7af112340fcc4de8bce7f093bc +a4ac872c3336fad2f6a4e05a7602ea76f6db9b49 0000000000000000000000000000000000000000 +a4b5af523305afa297e6ca813bc278c5bae209c3 c912672aaf49ce6b28347fabe5817bf5fe2540f4 +a4bbda0a8a9fef9ac087795f7bf371103a9e0b0f 7c3e2a25a65aed2910c6adc95e7f7226b87791ba +a4c86b9775b1fcc610ebce05c3f59511d9646f24 0000000000000000000000000000000000000000 +a4d2e8a0f4015133281854aa7ef378eeb863473c 21012cf93314fee2c531c55bbd823d24338fd062 +a4e3991d4dc3217dfe17d8722d79fbfefce72fba 0000000000000000000000000000000000000000 +a4ea02fc4f579531d927d52d6ddfc9b6593bb27c 0000000000000000000000000000000000000000 +a4efdfe43ee310fba4bb643d9fd28ce92da32338 0000000000000000000000000000000000000000 +a4ffde3f1a7f26b4f4d0b44edda927f6365acd19 fd747dd7306acd364e50736afb562acda814a597 +a5023d659b7adaedbe18853c297e78ac12e22823 0000000000000000000000000000000000000000 +a507c95952f1f29ff15ebda55ac845cf2ba940c8 0000000000000000000000000000000000000000 +a53defa25dac6bd23ba82c51912381948aad03ed 0000000000000000000000000000000000000000 +a54c0fd8fecb26931b5dd67cbd751085ccd4b431 0000000000000000000000000000000000000000 +a54c8f9b38c6378cd8876d6d0faa426573688d18 00188fcf5c844e67f67f6206e16a4ac10a4fb739 +a54ee5b5c13da6a2d25a4e2bbc9e5a51fa32cf6c 0000000000000000000000000000000000000000 +a55d4a608aeb2bfa7661af5e193adfe225cef05b 0000000000000000000000000000000000000000 +a56137d8ebf7557d2087c549e12f54c34d6f4ee2 0000000000000000000000000000000000000000 +a56434a636f7b6a8ff4c540edf3a9348b3c2437d 7eb6421c039756007ceea665af861a999ad37b76 +a5667a0f1260f9af22a08de8489649b139b050a3 0000000000000000000000000000000000000000 +a572a5f6048f638233c92abd8208f8b4d9dba7d2 0000000000000000000000000000000000000000 +a579c4c8fd6db6b4bba678d688fc0e0271649bc4 0000000000000000000000000000000000000000 +a5840145f9304dd441c7f96a9387ba24cc3b0134 0000000000000000000000000000000000000000 +a589416af7d6f295f5c92b46326b7b42946e08b3 0000000000000000000000000000000000000000 +a5906bc4cf7a3dc31d2e81b703348d3b31df7fad 0000000000000000000000000000000000000000 +a59071db5b30206236323830819a236abd1cc76c 0000000000000000000000000000000000000000 +a5923c0de19cbc147ebeb5e1b2a676cbc733765d 2c2324e8441aa8c9fe06babf948644d54423e2be +a59ba31f6b7baaa0a92bff57211962aed7860bd4 0000000000000000000000000000000000000000 +a5a4c03d92bc04c18c4f0644f0c31e697cfe8871 0000000000000000000000000000000000000000 +a5acb896cb46a58702c07bc742b5e114ba90f95a 0000000000000000000000000000000000000000 +a5af833ba0fa0484ad6755f81a25d036d9d84463 0000000000000000000000000000000000000000 +a5b8b8ceb8910d282a835ff82e92bc42f68ec0c6 0000000000000000000000000000000000000000 +a5c4d6109c433b949cdb1665c00ad778b82b28b0 0000000000000000000000000000000000000000 +a5d0ec4c6b5367ce4b0e18c47705c048f659a9e9 3bf84d24ab6af362f9ce7cce42d213511378a65b +a5d86b5390e9481d646821a8170581472fee1fa6 0000000000000000000000000000000000000000 +a5e1057c2036b8d8d31346dd93e193905624c6a2 0000000000000000000000000000000000000000 +a5e86dcd050ec2cb20ea368b2c95578a39a928f6 0000000000000000000000000000000000000000 +a5e9058d90b7845bea5cb2f14eb9c7d962c5a8c9 0000000000000000000000000000000000000000 +a5e91a592930bad320358d06af50924c052126e4 0000000000000000000000000000000000000000 +a5f8721a18e93ee881cfee371ba6d23ce0c55ae4 f646c87ef12b03ed5fab680bfd1fd62db8fda18d +a5ffab1e77c19987fe468b9297e19e8f4c48f47a 0000000000000000000000000000000000000000 +a60b992a341397daedacb5ddbcf9fff35fb06d36 0000000000000000000000000000000000000000 +a60bb84e31c11fedeaa3f62d3ba5f2ab8a833879 0000000000000000000000000000000000000000 +a6144e52280fce58fa611af3ab55512cfd37af95 0000000000000000000000000000000000000000 +a617825e43dc0a9556398c429d3ea1d45ef29517 0000000000000000000000000000000000000000 +a6291d12acc493f4a01729b020910d3af2b2bfce 0000000000000000000000000000000000000000 +a636ec2c97ee62ddd42bcd74ffca1dfc7141a256 0000000000000000000000000000000000000000 +a64342b78f22c8f1fcd93b59d61b73a1bb33741f 0000000000000000000000000000000000000000 +a64718b9ffafef7ef96b9d559d7a6ca6b351fb0d 848187a3c2e5d87d0a9342c344585b14f43b08e3 +a648591c6dc75f111218d8ec46d8e52812bc0017 0000000000000000000000000000000000000000 +a659d3fdca99727f248ade77371360c690893780 0000000000000000000000000000000000000000 +a65d683b510ee5a061ffcae9c1a3e79c4978c354 0000000000000000000000000000000000000000 +a6634071da11585772287638bf7c681c84448ea6 0000000000000000000000000000000000000000 +a66db83a210ecc4915e430cda066bee14fe5159f 0000000000000000000000000000000000000000 +a66e21b511071b7af25f95eeb40ec927f89383a3 0000000000000000000000000000000000000000 +a66f4f1c05f60633cdfec535850e409fbc021c49 0000000000000000000000000000000000000000 +a6743f9d007af0b7e4cde726b7480b93a4c3f53b 0000000000000000000000000000000000000000 +a674f478aa07328818f8831f99cf998c51d88b62 0000000000000000000000000000000000000000 +a676e37ede211ea94fe521cd56373d28e2386c68 0000000000000000000000000000000000000000 +a680a6beff661bf5bad6c107f6e385a31fb8ee2d 0000000000000000000000000000000000000000 +a689c3631c212d2eccf22d6807ba5fbb413ad5cd 0000000000000000000000000000000000000000 +a6a44a7e3d271a2cc88fda02aabec944402a32a9 0000000000000000000000000000000000000000 +a6a68c2459c3c954e6cbac806876b75019caf6cc 0000000000000000000000000000000000000000 +a6b2e71f32b797e2796243aee748cf7a5492685b 0000000000000000000000000000000000000000 +a6ea2822a79c7fdc850781dc4d63a7a290f745bf 0000000000000000000000000000000000000000 +a6f75df02b3963cd8f576c0a673070c66eebd5b8 0000000000000000000000000000000000000000 +a704fad361bf9f49613d33ed9d665ff3980d36c8 0000000000000000000000000000000000000000 +a70ac02952f0d0e3456194873c9aeca075c3da9e 0000000000000000000000000000000000000000 +a70f2be2486bafd2f27c7ecb11a0a08b791cc7b4 0000000000000000000000000000000000000000 +a7283b0da5d8e1d5c306f2a85cb23c4288d833ae c6736d67d0f1d2ffd82a04edad1349afaaf8d0df +a72aa29048b4b28a736af032f4fd0849ff31a50f 0000000000000000000000000000000000000000 +a72c5c216ff86a41298aa65c0325e39674c08df6 0000000000000000000000000000000000000000 +a750fcda552d60ec290a1641c9ee351b30302277 1a767c375d8faf6bfe13924c27c0ecb748b4ba0b +a765acf380135694bbd4d1336bd4beddef6ef808 0000000000000000000000000000000000000000 +a768b9db542f21a155356d6e101082a970a56279 0000000000000000000000000000000000000000 +a768c72eb451b512969026a15a974fb4c8fc3e9f 0000000000000000000000000000000000000000 +a76d1c964c2949b3b3e0dc3bf0bd08950fb116f8 0000000000000000000000000000000000000000 +a76f17d3287a0d546e76bc829153c795ca2531d6 3868aad924c82dac82c963e220f59e5335e676f3 +a77cee08492ae0d9a7825a6790714035e48a760b 0000000000000000000000000000000000000000 +a788f98b83b0ad9630351833c7795e0351c8746d 0000000000000000000000000000000000000000 +a78bb41e155beb0eaa710d26fac1fd61d5c96f3d 0000000000000000000000000000000000000000 +a79aae84d053aed5f3cc525a4a13507709734ba3 0000000000000000000000000000000000000000 +a79b34714da5a387f3f41e33adb6494e8b72072e 0000000000000000000000000000000000000000 +a7ae46e7e9432986d656bcb747071787a0e87c47 0000000000000000000000000000000000000000 +a7b1e1e37175a7702ee3d772b72c6398f25ceea7 0000000000000000000000000000000000000000 +a7b3b63bfefdb7bb4b31078b256e43928e89f102 0000000000000000000000000000000000000000 +a7c4983e38ab16f4e7bd02f6edb28097354a6130 4e110fbbb8ddf4b7a09b5dae180511612d0cc795 +a7da3a313f742a5750894e47d7851749b9ba690e 0000000000000000000000000000000000000000 +a7f0182dc62208bc6b99e6381bc447ab5d9dea1e 0000000000000000000000000000000000000000 +a805070bb213e42b8e50da056e82e2d919132dcf 0000000000000000000000000000000000000000 +a810004a8c6e6810147c5f4c26a80ae00bb2c3c0 76844850f61af0f9eea3fa2d7d0fe42c9c3d6c3a +a8153e9117a3516436c795320ee29ccaafb160a8 0000000000000000000000000000000000000000 +a82a451bb5227138e951f88338115f718fc92edc 0000000000000000000000000000000000000000 +a82b00ff77fd37c62054e6a84cfb5cc8ec168a2b 2293fec20366923aed6b175ac1cf5431483208f1 +a83f01a3a412c375a9aff4546dcf3e1e7db2fe2d 0000000000000000000000000000000000000000 +a847203af809fa13c34b35bae830dc93248b0f8c 52c7d519a25d8819b54391175cdb57620588ee41 +a861e4795d771904c8de70d8efc062b954cce347 0000000000000000000000000000000000000000 +a87ba48a206fcb84921b03bbba0f8e8fb0bf148c 93c1bf8f57b82b6c46a26e46d6f4226c9c5bed5e +a89ab95ddd11d7aa7ac887f2103c24f56b2cdb99 4169d9cf147d8f5e6f2508040ac6262b7a0784b8 +a8a40ab9dc94db782c04d4d47ce639c2cb96bf0f 0000000000000000000000000000000000000000 +a8a693d5d34193a86299946bb6fdf8cee8aa3d64 aaa98c377fd85c991c4bdce03d94c3444c653341 +a8c34dacb0908c8e2a648f70b5bbbac2354d5199 6cbe7452f090c0041bd3c79550f5dca21af9ffe3 +a8c7e16bde1794263394f41c4bb9b12ae6233815 e49f2df474757517f5d4919c5171d0769268c96d +a8d3a3a81cd07d547918c232d73daf17562468fb 0000000000000000000000000000000000000000 +a8fb81cf9524a3f2f721aa808db244434e1cd177 0000000000000000000000000000000000000000 +a8fd91728bc57102d36bfdb6442e3c273b2818e6 0000000000000000000000000000000000000000 +a9048c15cad4c994d17873917e20f331b92e34d1 0000000000000000000000000000000000000000 +a9075aa07fd4e286fbf47cdf3e26c0ab1d35b6ef 9835e5c15e7acc91cba7613ed2a2e38ad80f3576 +a915e5be0fce4cbe65ffb8bc3343d37b7b376d98 0000000000000000000000000000000000000000 +a917c11a1999d9e458a5d8edc3c74f9a95e6d52a 0000000000000000000000000000000000000000 +a923502ac10a2d478ff199d45b575a25758265dd 0000000000000000000000000000000000000000 +a926c4b474e0b9c65bbc8082e3824a583a9d9da4 31d9e48aba7f9c7792677c38243fdaf202c2f98a +a92dfe78fbef6365b1358cc03c5b99705f8f104e 719aee40fa4f401cc987b116df7d6fe5c326ce64 +a9469522ac9413ab14bd1161342204efe892b97a 0000000000000000000000000000000000000000 +a94c29ea338cc4ae43a78489c8ca955a017d4949 0000000000000000000000000000000000000000 +a9515118142ca51e8c885a3a51206b9617e76611 0000000000000000000000000000000000000000 +a955bb134b0edd67a8c83c63b41db6bfbf2ecaa7 0000000000000000000000000000000000000000 +a956d8304120b557d22a9386483ed4ed43e71455 0000000000000000000000000000000000000000 +a95718bbf0a6b2d887ee12e70d8a385508bae658 0000000000000000000000000000000000000000 +a95e7dfead9d302edc27d71e04bcc9bcc1aa5168 0000000000000000000000000000000000000000 +a97138f2b792c9523aa391b63649ab1445a5daf7 0000000000000000000000000000000000000000 +a9803f71ebd7ffa6829e82ec230e97d20da6a25b 0000000000000000000000000000000000000000 +a99baf29695128d72874d8c4ccad3e90c90e53be 0000000000000000000000000000000000000000 +a99db00fac6e413a059ae037749ec3a528211dcf 0000000000000000000000000000000000000000 +a9a95723621c88a17d0a23d082913bc2fccf3628 0000000000000000000000000000000000000000 +a9bc177dd14dd19ce742ed39366917c3d8860ab4 0000000000000000000000000000000000000000 +a9ca6e90f6d58d9e28018d84cfad3a13ca603206 0000000000000000000000000000000000000000 +a9da403f18e250399969c24b872ed453e543dc83 0000000000000000000000000000000000000000 +a9e91fe6acd7795fce3e6f8bba53ca7974cd0bb9 0000000000000000000000000000000000000000 +aa009b1af03169e028c2a350c90098169f9a431f 0000000000000000000000000000000000000000 +aa1070150191bde52a5a91968e2c1e26a453869d 0000000000000000000000000000000000000000 +aa1fa5a1c4f5b26db8bad1d89f4c0281eaab96f8 0000000000000000000000000000000000000000 +aa25751e21e751ad20eb8c7b4133d1655797c314 0000000000000000000000000000000000000000 +aa3781b27be787ce36c47ef46caccab667687602 0000000000000000000000000000000000000000 +aa3895f9de73c0da4f04babf501f21ae198ec54a 0000000000000000000000000000000000000000 +aa40a859d193f5733a50f685553e81fbb2ada80b 0000000000000000000000000000000000000000 +aa44c4649c42f4342db64d16155a8a157ea410e2 0000000000000000000000000000000000000000 +aa467e4c64889387130de4dde86e55740d4e7377 0000000000000000000000000000000000000000 +aa503ff00e8a75f12ecc8628162744887424245a 0000000000000000000000000000000000000000 +aa5e01e8e1613422c91d53bb35c5d9bba06c107f 0000000000000000000000000000000000000000 +aa62dc0cd1f5b7233b26c95f9bdc37646fb95858 d318a2a88c27bccddf2c667d12f874d0387c87fd +aa80139f16a435291e118b4ae827e3ad90ede762 0000000000000000000000000000000000000000 +aa80b1968d9ec6ad26f8b45578040026883d5890 0000000000000000000000000000000000000000 +aa87e77c140c382c844a99417bc7c1e0af7e157b 0000000000000000000000000000000000000000 +aa90edf1b624e1bd2381700f2d8b659507bf0119 0000000000000000000000000000000000000000 +aa97082ec94bc65f7de2a3793876f4d4c454af75 0000000000000000000000000000000000000000 +aa993b10ff72fb18f7dc3f49d87586662188a381 0000000000000000000000000000000000000000 +aab3d82d21fed81fd314ee6ecccbade906e834d5 3a4b6611264ba3d394d8dcdcb2b9f6cfd4061e47 +aac4877f025ad370b75b672730c1a1500470ecac 0000000000000000000000000000000000000000 +aac99fe98d49d8e8c4ac5c2d381c38e51ab40b45 0000000000000000000000000000000000000000 +aad26b4d45da3baa162ca63456b2e637f0fb5eeb 0000000000000000000000000000000000000000 +aad81eff4611d9e4b01ac4db3a071e5b84a93ca5 0000000000000000000000000000000000000000 +aadccafd9e58cde584bd857abd7b8f864034d1a8 a52033fde2c951e0ad14c8fdc1ed75e0ec2144d7 +aadf808ed4177264d51bae9341b3198046ba5ffb 0000000000000000000000000000000000000000 +aae0c007f61e6ecdc74d78e6f80c1d6e4c16ff0a 0000000000000000000000000000000000000000 +aae2333a82580892541fbe109cb030d6bd7703ce df65b10eff3610231ef185b4a8498aca634b9808 +aae50eb9b8e52296938926189cad9734e928a69c 0000000000000000000000000000000000000000 +aae81ade1d6e99581366a47ed37bfad39c16434e 0000000000000000000000000000000000000000 +aaebd42a71279cbc80be1cf8d12a8ec9e3bbc367 0000000000000000000000000000000000000000 +aaef78a4bc7242e8579a193f42a9937aaf8cebbc 0000000000000000000000000000000000000000 +aaf416130f0c609e9bb2d5b81c85c9b116cf8d59 0000000000000000000000000000000000000000 +aaf4c36c9c1120e8ed3d4585c3926f79ce73535b 0000000000000000000000000000000000000000 +aaf62a9e270a4fbb803af2072b75c4e194e50ab3 de25426462569f2890067cc8a7d9b4655c3b824e +aafba2695fc63e853c9b407b42dcade0869dd9b0 0000000000000000000000000000000000000000 +ab0ecf91032e08b398d5df15d07f7b04d3bc6971 6917760d7f15814d9d7c90955e3171b8b21d309c +ab2ddf0f264ccaf6efbf127c23be00adec51be1f 0000000000000000000000000000000000000000 +ab3270ada9e0085c596561aa3465d7d901cb6916 0000000000000000000000000000000000000000 +ab3c5a23915ee12ab75973da80f776e8633fb930 0000000000000000000000000000000000000000 +ab3d84f840ea0b417a3d46810cefae2701bfd5dd 032e0d46be61190c772ac6f6fed89dcb28f696fb +ab5f73bc18e6f929f8554346870308ea89eac184 0000000000000000000000000000000000000000 +ab63449a098de93be1144553fe8052c3874f7caa 0000000000000000000000000000000000000000 +ab78dee66fd7659dd65d1ce441444f593b21cda0 87d81edbf9c12d43ea06f41a98de71ccacb8adf4 +ab8286edc0d0863c6928c69a6dbb2c6b171cbe81 0000000000000000000000000000000000000000 +ab886ef812744b0e2247346ef27292c05f647654 d321da2f805c69fee6d8c5c5c8adbeedf8d32c00 +ab906e339ba8c5df80336f0342284fcc429cfc7b 0000000000000000000000000000000000000000 +ab91774980bea5accb073d3437b4adca72bd5ccc 0000000000000000000000000000000000000000 +ab9648cb69dea337d35516762261cfb793db59d6 0000000000000000000000000000000000000000 +ab98c2cd2d060747b0172245f2c4be2b4194d1a2 0000000000000000000000000000000000000000 +ab9bafb60735bc33f8098cddd14296ba78226da6 c8fe3aa63444980247dbd63b1f457d5643fbfd63 +aba7694d96acb84e65c9f15fc5446584ec50e8ec 0000000000000000000000000000000000000000 +aba7b38c5a01ab3ce59411f634196c33774c1d7d 0000000000000000000000000000000000000000 +ababfa3704d9adc7786346d00f7914cb805d75a7 0000000000000000000000000000000000000000 +abb047356a51e00ff72aedcf225236d17fb0b9eb 0000000000000000000000000000000000000000 +abcf28560d7138acefbf689578d9e14c78218631 0000000000000000000000000000000000000000 +abd4f7f96d537d77b611ce061b2f13022f9eebf5 0000000000000000000000000000000000000000 +abd6f508866c9250b292f3e51c681e5d39fdb996 77b47d46779d9b4cdd9342b3781f58e00fe45e12 +abdf6d178804ed1520f40725b68812de1c6a7f8d b8c60dc5e822bdbeff1d64150f59cbc456a158f6 +abf67fdeee4db4de39eb157ad16e7572881b4f2f 0000000000000000000000000000000000000000 +abfbdd2977317a62187ba2f20eabdb8609a121db 0000000000000000000000000000000000000000 +abfc519dfa4ad32b55eadf295d35d2eb6b7a1d11 0000000000000000000000000000000000000000 +abfebb19139b308167f5485d969c1b644dc8d2f0 0000000000000000000000000000000000000000 +ac02124fac4611447811aa164835e1f095eeb466 30a2830b1c985585fe3ba1c474cd56d7b232e935 +ac05342befbe51944cf3a1c966d564077e8e28ea 0000000000000000000000000000000000000000 +ac15d22d2cdd8acec60cd60f2813256fb323ccd2 0000000000000000000000000000000000000000 +ac2a8d1aa7a700e02424084d62d067b940f1b702 0000000000000000000000000000000000000000 +ac427095be3ec52d5538c0fe77c71d0343aaa286 0000000000000000000000000000000000000000 +ac47553f5280845c651697649f68553a1d0da875 0000000000000000000000000000000000000000 +ac553904f586eef93353ac2cfc3dcee3b621b6db 0000000000000000000000000000000000000000 +ac667560a951bef2824851c208c55ba070e96163 0000000000000000000000000000000000000000 +ac6d8b608e5aad042f796be6686b5b294f1123e7 0000000000000000000000000000000000000000 +ac77fc32075eedf57002add072e88d73b259d276 0000000000000000000000000000000000000000 +ac797e800badb22a9dc79c7a585d2d7a10053a65 0000000000000000000000000000000000000000 +ac944895b7ec45c8e9ff5a2aca666ead9083420d 0000000000000000000000000000000000000000 +acaecb89702e97a58907148993a7b57333dfe9e3 0000000000000000000000000000000000000000 +acb80cac59c9ea9683665c22ad9c92c9b58f00fd af1cc0cf8126e51f1feaa5f826b445d7e4703429 +accf19ccd7480ff344b11e9537aee697d30b52d3 0000000000000000000000000000000000000000 +acd12855802a98a4d136e30860a7a9c30aa1552f 892186d52c0c5b851b220eabad9535fdc2150b40 +acd1a454dad960a67d367772a91783575f92a26b 0000000000000000000000000000000000000000 +acd7652fd2100eb9a73dff21a3b6dcb703a63381 79850d1d3a906bc0c6cfc6819236340cfc805058 +ace9388a8e2cd739efb70403179c294a5545b837 0000000000000000000000000000000000000000 +acf5c548d6e3131cd81a99b4db19bc90ef88a067 1d3fc34eeb630c0628f6dcc84899f050cb15533a +acf67415b8d5faeec5b0d9934c22d0de9e773dd1 0000000000000000000000000000000000000000 +ad0417eb30ead5bfdb4667b29502bf98c1b4f28d 0000000000000000000000000000000000000000 +ad0bc0d5188787bf1747820c7b6a88506b1edfed a05e1ed0a36e455a67fbef132feccb71b29ca004 +ad0bda07c819f112c4141d7122429db81aeaaf98 0000000000000000000000000000000000000000 +ad1460b529557b71ac2efbca369eb2d76c9ce3ad 0000000000000000000000000000000000000000 +ad1d5d75e6c3060a2d5c12a6395af9c1b778fd21 0000000000000000000000000000000000000000 +ad208942c798e493e98493c34f401c03d23ecdd8 0000000000000000000000000000000000000000 +ad2b0661a265af2d85e5228687f7973aa4a431d4 0000000000000000000000000000000000000000 +ad32cc4bab68db6a3890e2ee77329fc9843ad9a8 0000000000000000000000000000000000000000 +ad36f92557e55155a024b87f315316daa5ed9dc0 0000000000000000000000000000000000000000 +ad376087d7be9f128942f72cb9ac8395beee7096 0000000000000000000000000000000000000000 +ad396b3f0200e1b3eda3bc213c967a725a87e4fd 0000000000000000000000000000000000000000 +ad3b65d2b74bb4f1dae2ee326c00cf02d28bf4c9 0000000000000000000000000000000000000000 +ad401dea43992459e642625c9bbe4abbd4c38ebe 0000000000000000000000000000000000000000 +ad4400ed5f26ec84b46062eeec66b11dab80bdec 0000000000000000000000000000000000000000 +ad44ab8c7a47172e4f42fcc0dcb93bb690240550 0000000000000000000000000000000000000000 +ad53c3cff612f7915f8f53dc9f2b35fd22e48bf5 0000000000000000000000000000000000000000 +ad57d5c620c0dd208c62c0ed0ea5777e2133d325 0000000000000000000000000000000000000000 +ad5b91b3ab4f9287c3104486f3c824f2fe7e52cb 0000000000000000000000000000000000000000 +ad5c872e11febbecacb7adc01f34d9ad030b0eed e87438f480c58c431a319e7836d3415877c17300 +ad62a4a9fadb2fd3b62caf20ae0d0056f416a547 0000000000000000000000000000000000000000 +ad6a5aa1e993a4237f11ba29a14197ee844ea0e8 0000000000000000000000000000000000000000 +ad775b248d29ed2b1e702c15932751a03c54d6da 0000000000000000000000000000000000000000 +ad78a6beb9918f97415e82f64e061fe57d7be592 0000000000000000000000000000000000000000 +ad859ea0230ad7a7c71bae506c0b630c86ed1b2c 0000000000000000000000000000000000000000 +ad95d0e435fd4aa5868546676f36b18b9dc02151 0000000000000000000000000000000000000000 +ada5f3299e3da88f5325b85c0601b4cf40c26f14 0000000000000000000000000000000000000000 +adb30a10cc650e3969cccfd2d6b41ef9339e6dd0 0000000000000000000000000000000000000000 +adbbe34f46da91ea7ed9aae150a6d3cbe84a56d0 0000000000000000000000000000000000000000 +adc4b67879d77acab0fdcc6694514835268a5f91 0000000000000000000000000000000000000000 +add1b5abf8541c113628137e21e00f9a8444bd50 0000000000000000000000000000000000000000 +addd6e1658b4d45b7090a058f7ce38a72e44bede 0000000000000000000000000000000000000000 +ae03eaba3fe7aa20bf0d03f895bbd4ae85d9d344 0000000000000000000000000000000000000000 +ae0c151e2de71b6bdc56688779df334fecd822ee 95dec81f06b71a9609f72c9c3cb26017ec83a288 +ae0c5a061899cff25b5bffb1ba3fcc38f5f29953 0000000000000000000000000000000000000000 +ae0c64658a12e2c2eeaedcbfdfc2e95733917441 0000000000000000000000000000000000000000 +ae16e5ba546bd3bc51618b247cc7707b8959836a 0000000000000000000000000000000000000000 +ae5203516f46142fcf98a6dd8f122218ecf60abd cdf6c012720bc5b2e0904bc6ad4956afc5520270 +ae54ea6c164df7629114ab5d372204ba1bebfd40 0000000000000000000000000000000000000000 +ae5d32ce40d65f53959d5e500e7f96f757bdf7a3 728fe1fbf114c3ff1a92a8848f5d633d643bf82a +ae778b7c3ef3f0025ba373c81e5179c69a83261e 0000000000000000000000000000000000000000 +ae790401fb2409334d533fc28c133dc548d79d82 0000000000000000000000000000000000000000 +aea2bdc75f7292405e7b9661780f9f983474e089 e675773f3d12e3cc89ec3f3e687e3f354499a2f5 +aeb45ba3482d4d40db58034a5404da2d6370a854 0000000000000000000000000000000000000000 +aebb9dbf540cc168f3cc9a31b183bc813d30902b 0000000000000000000000000000000000000000 +aebee6fa58e05330dad7aca2ef11898c4933a40f 0000000000000000000000000000000000000000 +aebefb76094e71718b1d60691e9ac12a95a25283 23a5bda36dc934a565a020de3b5b60880aa0a8cc +aee44bead1dcd19e5c80b9b47cf2adcc28d96318 328411bae7a8399dcf76363f201cc3972c70ab0a +aef319c3093837b8ebb03c77f08f18ac9ad1a85d 0000000000000000000000000000000000000000 +aef9139a8af88da6d523d40915b1959ce6b585f6 0000000000000000000000000000000000000000 +aeffc9832f2aac1f1e65c0b6ae0a73fb10560900 0000000000000000000000000000000000000000 +af0b5fcbc2719d50269f37a905276c49b18dab71 0000000000000000000000000000000000000000 +af22a8d9db355c7dd5f5e6e4bf435fd4a558c7fd 0000000000000000000000000000000000000000 +af252a8673cd942adeb612282f7ad065b115845f 0000000000000000000000000000000000000000 +af25fe44d1bcffc8a6e544d8d9c30017a0de3cc5 106c75b75419d2cc2b69850b9d5e2275431a6539 +af2d5ace2086e6e70920c3713ad59026151cea56 5e7238e9bf19bc22b3b255b146b559bdc8016195 +af3038a0fcee46c4806382fe061e4f2e7059fdbe 0000000000000000000000000000000000000000 +af3ab66c503e366f31f45b390786da211890de3d 0000000000000000000000000000000000000000 +af3abd52ab910414226f435199807f901aaa59c2 0000000000000000000000000000000000000000 +af42279c48dbbdcac0edab0873f81730eecb3092 0000000000000000000000000000000000000000 +af42af25abd294683ea5aa0fbb7fbb0dee5e537c 0000000000000000000000000000000000000000 +af47d58f20abb2db6527d8dc8fe1fff367404c22 0000000000000000000000000000000000000000 +af5045c7f175e505c0f59ef4ce23a05346544b70 0000000000000000000000000000000000000000 +af5568ca15b84b60bdc87a1b055279eba7908a45 0000000000000000000000000000000000000000 +af55d615abf9719a114c8262421ab4946e47fe5c 0000000000000000000000000000000000000000 +af596dd4635216c03ae9ed3d2fb66db383ad3693 0000000000000000000000000000000000000000 +af61c14ff792cb3bcdda8b115caa23a7a4c6b774 ff2bc9c2a2ef4043b3956ad82d4f0c8a218be0f1 +af7811e34893ed64bca36ffdfe8eba8a4b032fd3 0000000000000000000000000000000000000000 +af85cc96e629d53615e98995d54e46b352116f85 0000000000000000000000000000000000000000 +af877cc0d4d5765f2e835e9621751d6870e76038 769b5af93d8f050d628ce306c919ea4b65cfb8a4 +af8caf41c438aabde6508d97309bb7761641cef9 0000000000000000000000000000000000000000 +afa6b3cf50f319e38521682045374a37569bfbd2 0000000000000000000000000000000000000000 +afa73a4468a4a8f97a7dc4084f54d2bf4b71a80b ce661912ece3530569d4acf0d360168ef5a2dbc7 +afaf414e51f2a2ef3f9208efce2233e52f1d11bb 0000000000000000000000000000000000000000 +afba9d87050ffd67722f755a0ce2d7b23362a747 306beacfe0da9c1b204bd275a6da08eeeb293292 +afbc27d0e9b88ff48706cd4b198dbfdacf23766a 0000000000000000000000000000000000000000 +afc40be30cc566cbe9b2daae5d9fcd2f0c1ac6f4 66ea3a525a865d9d6fdeb92aa9a48889401bee57 +afcbce94e7d9de2c42da5147fd5cf4dacd10dbb8 0000000000000000000000000000000000000000 +afd088c257bfdf70371fc4a73c0ba6d0061872f2 0000000000000000000000000000000000000000 +afd19c927a1b5b2a3ab49e5d9138ac248c69f1f0 0000000000000000000000000000000000000000 +afd4967a9e6db390175e2df9e6f34ff77168d19d 0000000000000000000000000000000000000000 +afdc0a430011c2ce3f9ae157aadc34b60610eaa6 0000000000000000000000000000000000000000 +afe0675581b53d22e9d67183082ceb07a65b5314 0000000000000000000000000000000000000000 +b002225263079049b83178e5ae3365815e68c0af 0000000000000000000000000000000000000000 +b004ba6a6dfaeaf35df819d513911ca2182cb1fd 0000000000000000000000000000000000000000 +b00b557f54acfa926b9ead54fff3d7e654440ad5 0000000000000000000000000000000000000000 +b0141b04dbb2b9e94010b8c0a8afeda468f9cf58 0000000000000000000000000000000000000000 +b033b767a8dc5782fc0bb0b82737c3bb442b6658 0000000000000000000000000000000000000000 +b04166d3dbbd2a8fad6d53c67479dfb9b3aad2c0 0000000000000000000000000000000000000000 +b04aecd4a4955f71bc8f1a21ac74b8ac0976cb2a f48c470c56c8991a4c8c4bb8e070deff0018616f +b05384872e9364aedf8d8fc24b36bab9824594c5 0000000000000000000000000000000000000000 +b0557a13ef24cc7f5f3d9e3a02432f9e84688158 0000000000000000000000000000000000000000 +b0598a03e734b588e476effa5d61c324bf4c204f 0000000000000000000000000000000000000000 +b05d54a75207f60e93592b9dc053db3ade5cbf75 f6ace05b3682f442c14e668b704b182df923243d +b09eb624cabc334a7e648bfc1bfe69a994fa62b2 0000000000000000000000000000000000000000 +b0a0e8ef2da22056bde57067e1d325c73b251df3 0000000000000000000000000000000000000000 +b0a68fbe53593139ba51e758bcc01fcd188d7cb8 0772a2636c883f00541f94ecca2b6df4923d20a8 +b0af5268256ec57ced75adb98163a85e15dbcf20 d642c07447bbecff5b1b0d46a9de973467ea1fa1 +b0bf2ae84d9a846bf94e9780e253aa42139feae7 0000000000000000000000000000000000000000 +b0c4b92808d2d6953c01a6b664c7c99219099b33 0000000000000000000000000000000000000000 +b0dbb301261a50a0ebe8e47b7680739cd6d024f4 0000000000000000000000000000000000000000 +b0ebad0a9ce72327d90f4d80f90f229136df37a2 0000000000000000000000000000000000000000 +b0ed82315e3037e0c20fbdfdacf894d17b60852b 680a1c19560b274baa31406446215a20ab3b14aa +b10f79f861c39b4fd3328b5c7046e446fed7ccab 0000000000000000000000000000000000000000 +b1104e2de8124fa0133d8b49c773f11e1a1af33b d91066673b48f7dee6165bed2a96879314805ead +b1265fca6c231475624489cf08023f7df5af12c9 0000000000000000000000000000000000000000 +b128172b6cb8db6e9413fd971aa425f3615e61a3 0000000000000000000000000000000000000000 +b12a2f3542ab28e7b5f6c507530c701ba8718178 0000000000000000000000000000000000000000 +b13c3adbc6b4907cbc79313b1d7d3d329ce6c9fd f7c56ee0e9a5017fdca08f26f9eb8a7a8d01bab3 +b13f08cc720b35c8ee3daea321943f1387b44794 0000000000000000000000000000000000000000 +b1428ca50f86a1377b403ed5d578c4d552f58833 eb0834d183ba6797f4b3f6e932136e02f3be3c47 +b1578f3fdc8bdbdeab3063ae3d3e6a554800f6d6 0000000000000000000000000000000000000000 +b15de7aee7a7c8925be60180d278ae6e4494cde5 0000000000000000000000000000000000000000 +b167d6df8d8caca1fc8bcaaa2b5c9e19ef1a8df9 0000000000000000000000000000000000000000 +b173f3213f2b7e577d4a308c9094920546510593 0000000000000000000000000000000000000000 +b17a552e3d4ac3bef4fcb0d68aa5ded3604324cc 0000000000000000000000000000000000000000 +b17b7d8d25fdf9a767411481287aacee31434aaa 0000000000000000000000000000000000000000 +b17d30c01a6ae1fde7140d749fbe1ad873122c5e 0000000000000000000000000000000000000000 +b18d8fe02126f067318c94852a3fc9a00fb17046 7a6070ed21d2532223d7c988063f07d50605a5ec +b195c6a64e99bf675fab5afb98ea7fd0811fa041 0000000000000000000000000000000000000000 +b1a695ef710108618ee3eff5d021b6505e0dbc95 0000000000000000000000000000000000000000 +b1b68f56a77c24ab9068eac2aad19c1815781669 0000000000000000000000000000000000000000 +b1c1a8b43c401456e6250a192056c6dd0b596656 0000000000000000000000000000000000000000 +b1c42fe30198be7fa836ddb8f164a57966a23cee 0000000000000000000000000000000000000000 +b1cf08d3805c8b4b08bcba0766ab97c6fcbd64b9 0000000000000000000000000000000000000000 +b1d174a82576c92859c6bdf183d47b27cc377896 0000000000000000000000000000000000000000 +b1d24f0d9f67ec7616aa38b9824d0c30f9f55e6c d7e382190fd5352eda7d53fe35acca476c5a7018 +b1e0ab2b4e6cf7e2027f8f2a8cc0a2477911c304 f2f134ab1939f62468bdbdac591cc62ef93dc544 +b1e745ce9b41c95294a6552e5d64222f898ca065 0000000000000000000000000000000000000000 +b1ee58cf618e26edae3c8c28d0de302561184f4d 38a415abd8cb9c15ba888480ff5966d379f1a4ce +b1f06d75c239e7113fcdcc9136734603bb125ee7 0000000000000000000000000000000000000000 +b1f4cb73afc50af409f2e899c0389f8cdc72705b 0000000000000000000000000000000000000000 +b1fca5671fd8aa5cd1ae12316b86c81f4bf60e2e 0000000000000000000000000000000000000000 +b1fd77baac2ac33b341b1f66faf23daf47b0a99c 0000000000000000000000000000000000000000 +b20677a597c4a5c6b93f11d779af0517abb9e7b4 0000000000000000000000000000000000000000 +b211decd583ad82d5b4831895e19c3f2f9074b25 0000000000000000000000000000000000000000 +b23a53a66f77dceba3e8b251639847c5d080947d ebaadacf439f08b3fdb606f6fba5a88fd303088b +b2469d4a43e09a9193c0719d9a4c3c03265c5516 7dedcf7e5956fa92080911894146b930b08a10e0 +b246cd0bafde78892aa22e6ffe046cf5a438eb7d 0000000000000000000000000000000000000000 +b2474f3538e13e428b2765b032f0985ad5031d07 5185daae45e5bbe22bb01ab12c469baee763c1bd +b2544025fe63cf1e5c9bad7ced2d1aa86b75e2f2 0000000000000000000000000000000000000000 +b26bd6ebe94a3cd39da7dfb3a33ecddad0863fbf 0000000000000000000000000000000000000000 +b27416226b94ea3a44c589e4ec81234ae43cfa91 0000000000000000000000000000000000000000 +b277208b65e84d47031866c8ccaa2d62cbcd3fd9 eff18a0ed017e6f7b105231054cae2165878954e +b29d53227156834a2ff5fa80c14383c7d3ab8843 0000000000000000000000000000000000000000 +b29f5dab6e7b242fb0f1137f49181c57f1b263b0 0000000000000000000000000000000000000000 +b2b5ec3bd1c8afd835cb1b452fd4786443288a2e 1cd8ccb209a45b5b4e72434a2b27a150d4aaae21 +b2b77c4c66a021c426cfdac54ae922887b5c89b8 0000000000000000000000000000000000000000 +b2bd4cd7ab27aafe65dfce96b76c3878aad29222 0000000000000000000000000000000000000000 +b2c70b03ee48cf30c8ad8256ff7b145663cd1f30 0000000000000000000000000000000000000000 +b2e1026ba2608d0cc5a7f0d3eb6c74600d7a593a 0000000000000000000000000000000000000000 +b2ee215098635c0dc313a4894000f3a47adf8f8d 0000000000000000000000000000000000000000 +b2f27836fee4e5eda6b8e62003d414c2bad794e6 0000000000000000000000000000000000000000 +b2f53ee6aa7a34266b03b1d152ba72a740454177 f36fbb78a03ca8c3c4f4cdfa55b03c2a4b7a68ba +b3002652805ff2a36e55531178d4fe579b196c56 18356d3099e38bc427c6935ba1d9e7f0d48fa171 +b307c4990a24cae04b6bd1164e5387e3023b4afc 0000000000000000000000000000000000000000 +b310c6cb22bfc66e2e90facf16a984fd7501efc5 0000000000000000000000000000000000000000 +b32426e341375ad56941e0eafe96742050d1a3d4 0000000000000000000000000000000000000000 +b328774c0ff23e1d737e2e4d5e0d3c43c5646cb2 0000000000000000000000000000000000000000 +b32f84db029f4284661afe72abb3638246db9ef8 0000000000000000000000000000000000000000 +b332d86ba79e101056eb43d201a48f605adc6265 0000000000000000000000000000000000000000 +b347672928e7fb602a88c4748e8e55bf541005db 0000000000000000000000000000000000000000 +b35c799cc11f72257362bde5d220cc55457692f9 0000000000000000000000000000000000000000 +b36d6946374cfcc46cf1ce9aa8d9d0f3cc2698c0 bd76b4afcabeb0d4b4e92a9badb07ccba54ebef5 +b3807c81067a302f625eaff1aa40b8c9a3dc3ce6 0000000000000000000000000000000000000000 +b382cec3fd1154805f68828019004e5ff30c1090 0000000000000000000000000000000000000000 +b38fc7958cc3b1d7e32449e324576056a552ffea 0000000000000000000000000000000000000000 +b39303e235fdd42bb9c54859e8c1409304585e44 0000000000000000000000000000000000000000 +b394a47034142e5e50229fd418afeff32e1ff600 0000000000000000000000000000000000000000 +b3967d37c7b0371dd1e6235a33af12ffc0915a0f 0000000000000000000000000000000000000000 +b398542e3f7e39fde90355a2fba2a05df0950d2f 0000000000000000000000000000000000000000 +b39d037b3cf0c49853f04a24bb1bf0894def4d3f 0000000000000000000000000000000000000000 +b3a54cbc1ebde54ab818730ffd81bad6a4a57b25 2a978939c9d410832684ee428e30c9545736207f +b3b458b7e2eb5ed928875565d650b2bbfccd1716 0000000000000000000000000000000000000000 +b3c4b54b0648a9f7cb8d9da2acf3c61bd7475e26 0000000000000000000000000000000000000000 +b3c69955ec0ea1849c9a262a1a48d984b779acae 0000000000000000000000000000000000000000 +b3c79eb037df7027f9dc8456d92b17add26e1414 0000000000000000000000000000000000000000 +b3c877f527affc71fdc55c356ac56fadd117e051 0000000000000000000000000000000000000000 +b3cd42b7c2405b800e633ce63b044bb2409034a0 0000000000000000000000000000000000000000 +b3d040e3424ffa8f803b6e7dec46eba958eb8e8b 0000000000000000000000000000000000000000 +b3d2b32d51041c692e2b6a556d866f3e2ecf32d4 50776846690c795195e49978b97965cc21b37ab5 +b3ddc2a68fac7aaa4f7af3a9273c23e48baa203e 0000000000000000000000000000000000000000 +b3e493769ee00b6f13a30b4aea8bdabf9cdeb01f ac9c84979a6b47e6a3ea888b66c563c36243d136 +b3ea1b46222f2f6087a7c2c82c5d804ca4b69212 7ec70273faa0c9b4187277d65ff62786bd755af3 +b40ab66b811af1a803ba312537e77f8d81de65eb 0000000000000000000000000000000000000000 +b42af09cd1f02ab1e6d0134eac1406e281788764 0000000000000000000000000000000000000000 +b43561bd2d1e72fdc54ce2995f994d7772d56ca5 0000000000000000000000000000000000000000 +b43bccdb46a2cdcd73f75abb6742717b70a4fec5 0000000000000000000000000000000000000000 +b440e32e7cca1bf52d9be29c5de1d2cb36c7971e 0000000000000000000000000000000000000000 +b4483843a3ec361bd7a250dd5fc93c6d067a4490 0000000000000000000000000000000000000000 +b453c7f33a1acbf5482fe61ae8986fa564be7906 0000000000000000000000000000000000000000 +b454f2787ed9de4fcf53a32d0b3b9087b536e0cb 0000000000000000000000000000000000000000 +b46242975cc300a6e075bbd7209127a9685c85d6 0000000000000000000000000000000000000000 +b462fc550b324af223bc70184b6b46afdc78a9a2 0000000000000000000000000000000000000000 +b466c37dfb5ff9093628230e8bcefcca26f343d2 0000000000000000000000000000000000000000 +b47d3a1fe383e41ee7432d939a6af4fe8782278e 0000000000000000000000000000000000000000 +b47ea3a861757594282e772e11a02dfb9c8604c0 6892482f2cadffc454ab55ca3af1d6c1eeebc087 +b48025e2cd7cbdf2caa92b5a15844f2b5c77fc04 0000000000000000000000000000000000000000 +b4877f674ad1a240a367390d40d122eebccc0b20 0000000000000000000000000000000000000000 +b4883eedc07e599f8b6cfd7aeb131b039e9a8f03 f5128d29527174aad8b9cdaadbe4129432df8ad9 +b48da170930ddf12a48b7aff550990afe7c9d4c8 0000000000000000000000000000000000000000 +b490348700cb0ce71dc141817586ec75c82fa463 0000000000000000000000000000000000000000 +b497ceef27bba01e4d44ee4de682f545662709da 0000000000000000000000000000000000000000 +b4a290c4d903d5a1b81ed066a9df863f6f5c57ef 0000000000000000000000000000000000000000 +b4ab94ce3fe7bf02e246e9c749409fdb6af79954 0000000000000000000000000000000000000000 +b4c38cf555fab7584a882556a391833d1296c5cc 0000000000000000000000000000000000000000 +b4d3ca130a2bafcb00c8a6644c6585de6b32b35b 0000000000000000000000000000000000000000 +b4d87b50f30f0a71486a7b49ee6382caccc9fe04 0000000000000000000000000000000000000000 +b4dd25c5195406b6271f15f9ae52482a90d97af7 e1087ef67b1e4b6b016155cf0be457a0f6e9f7f1 +b4eec894799a1c6a4558cf01600a227ec7e32123 0000000000000000000000000000000000000000 +b4f9c3edc62e67b588e0acc04ea843f1a3bf0a76 0000000000000000000000000000000000000000 +b5046351ccaee708ee6c93a35910508ed8241110 0000000000000000000000000000000000000000 +b509007f67c3130ebe0f13ea1e29cab03d59c7bb 0000000000000000000000000000000000000000 +b50a07d348dc20c63727b4400149a18400b76ab8 0000000000000000000000000000000000000000 +b5111670b5d536f6df895bf940c89f744a5b83aa 0000000000000000000000000000000000000000 +b522f9f7ec7911b21077ec8306421527a41191ce eb9b3e7249b780101489a14afae3b018e07fb5c4 +b523c54db1cf71930c66efbb5e5d19e38f588838 0000000000000000000000000000000000000000 +b530580998ddcaf9a2c856c82dc304f485dd5e54 0000000000000000000000000000000000000000 +b532b1a10883bf94b383dd1dcc5037e46cc37c2a 0000000000000000000000000000000000000000 +b54a163e84e1044f48028f3026da43a01e1a92c5 0000000000000000000000000000000000000000 +b57ebbc4663bd3ae9f64d9566717aeb7b6ecc669 0000000000000000000000000000000000000000 +b5805a0b904418f3669491045f6b292287c5d0e7 0000000000000000000000000000000000000000 +b59864c2387c9410e71b0caa8d439e7f122ddc24 0000000000000000000000000000000000000000 +b5b11f59a0546537dc95be32059041c37b0c7c1f 16d3b452376a9b0abe0b13153f8f4b3699d72fc1 +b5c03a2cb55961bfb847e48f77af6b72067feca3 0000000000000000000000000000000000000000 +b5cfd7ecb7b8e6c8ecda60982a59c1fc29960f13 0000000000000000000000000000000000000000 +b5d811062a37a37f97ca489aded8df52c944763c 0000000000000000000000000000000000000000 +b5ebf59e8cf6fa114d992fbeb9034f3dc5df4e3e c3d6696eb88cc2e5e298f3ee71e2fab3a56c2bd1 +b5f164d377abb5aad5b4b32861345342cb94c961 0000000000000000000000000000000000000000 +b5f68c94b861d6f98ad128c626dd727502652517 0000000000000000000000000000000000000000 +b60ca9291aacd5ad77bd42eaf3dc6ac01e7b62ec 0000000000000000000000000000000000000000 +b6116764be48d49b3851a99ef120d2fdd44d3bb0 0000000000000000000000000000000000000000 +b61edcf71279d11728c8a8359bf640bd44e9e5c9 0000000000000000000000000000000000000000 +b635242a402c3c468eb86dcf2b6d94a05717d92e 0000000000000000000000000000000000000000 +b63ab3bb63aeaaed5fb2efe014ac0b388cfb5208 0000000000000000000000000000000000000000 +b63d7607e273aaffb953514bcd6995c4f70daac2 0000000000000000000000000000000000000000 +b645cb5884fbe075fc5e09ed405ceeb2c830e10b 0000000000000000000000000000000000000000 +b64cd83136cb9ef9ea5adc71675dad4aa7c76aa2 6a42c1febb595be3819cdbec52d86fa1348d5196 +b651e6325c4ebae1ce42257b19916019de4706db 0000000000000000000000000000000000000000 +b653b9048c04bfe74b6eec4f98bb35601b50ec04 0000000000000000000000000000000000000000 +b65bbe573b4971525f953255775f72806ba036a5 ad2b6a563319b0eab67a8677b9a9e5b32b8c5534 +b67be2ac76fc05707c98049e10cae4a65a296495 0000000000000000000000000000000000000000 +b67e0d7dc478db6b1e632d785fb57eaeae4b72ac 64c167a571f289db8627ad8f7929d0b59910eb55 +b6812d20a7cd945b9ddc7366988400a3cac8dcfd 0000000000000000000000000000000000000000 +b68297ccbe6204f57c9ce8ec51a3b58b4258e04d 3b1f01351b1da1b3f36cb3d18472b636af488e5e +b68a0a1e46c0a9df17cc808b78b8c8fd44675b7d 0000000000000000000000000000000000000000 +b68b226c5a7cdfe3ccbd2fc81fb766343cccff2e 0000000000000000000000000000000000000000 +b6910f7ddc0bb7331b0cb7a5946f6f9d5f7fc22d 9838021348c35b671ddc0c8841587e9053c9a242 +b69922ee8962b1f9fb40453d726940f7e7ff2053 42260939f343c09fbe8b849a4bc05a9913d304e1 +b69da0d692d677936dd67327990e8fa7f37b43c4 0000000000000000000000000000000000000000 +b6a22d52381f6a775c7ae1ddfe53f1ce151d6c4b 0000000000000000000000000000000000000000 +b6b71b750cda88e29dcdb2629d30f17259a97ba2 0000000000000000000000000000000000000000 +b6c1fe83d8e707ebce71cd74f999b491af1f7e02 0000000000000000000000000000000000000000 +b6cf6198fef5a5d0a298694eb07bc6242eac639b c6b1e5a3a4584e5faef975eed400ab9539b10ca9 +b6d786be9419e867087b937c264764a9d1bb0ac8 0000000000000000000000000000000000000000 +b6eb46ebb46ccd7314e00b5698fa7f6b9b6ae0da 0000000000000000000000000000000000000000 +b6ed9eb718723a827d281920b5a3b6d8cca369ad 41b55ba0faf7a0f9820b404abead2075b04cc837 +b6f3fdc0e388fad5e8b885bdb9258042021eb466 f7fc34dcd167089068cedac87cba68bbee4055de +b70469557900db775e952702f499ea5e68f0316e 0000000000000000000000000000000000000000 +b7117944640d7ce540616748e48536bf81a43216 21b540f17ab7c55bb755ed14492f0ca7317fee0a +b727581d6fd1d814b5c1887400cb48f06dd96362 0000000000000000000000000000000000000000 +b735b3d5a7acd1eb8334c4be12ffd5ddcf93d925 0000000000000000000000000000000000000000 +b7378fe69af80c12734f6f20dd4113a70447c70d 0000000000000000000000000000000000000000 +b744048a1144a019d0a6a2a6545ffcb0debe3911 0000000000000000000000000000000000000000 +b75709adc868fa11e869583ab469537ec2dc4f67 0000000000000000000000000000000000000000 +b76499a1fa36bebf12649661d833dc8ace7d67d2 0000000000000000000000000000000000000000 +b76cc0e35c5e3eed143b07aa538eabd09d3461c3 0000000000000000000000000000000000000000 +b77778f150adb0a6d2043a88062476e5a436cb8b 0000000000000000000000000000000000000000 +b785cb9932c0e1cc27e3d8cd996ca83b36e263e9 51db815ec87f91c10e2cba226bfb1d5a35c5dda0 +b786bc075f08b8d80700c68ed2b1884e80c56f80 0000000000000000000000000000000000000000 +b790ce11f78d622e0551b7adce626afb765225be 827f84f873f501b44fa7d7b34ab35d1345454176 +b792ec30e264bf4dd77555822bd5fb69cde25f6b 0000000000000000000000000000000000000000 +b797dbbc10471a0cbf560e17ea0a5ed0ddf82d75 0000000000000000000000000000000000000000 +b79e37463a49f5741991f013f5aa9bfd97745d41 0000000000000000000000000000000000000000 +b7a014fb9b301f1eb78ac90b2abb0e91e9210573 0000000000000000000000000000000000000000 +b7a070b2b915c97bf12cef6157454c742d9717cd 0000000000000000000000000000000000000000 +b7a7308503476991204264fc7e9cf5201c63999e 0000000000000000000000000000000000000000 +b7ae3f5968bbbbb4ff176daa02ec81eeb70e42fd 0000000000000000000000000000000000000000 +b7bc6be4a05f1001130efb9af0b677dbec3055bc 0000000000000000000000000000000000000000 +b7c37fc376f8cbaa3e24d16b39d4c98caf726a20 0000000000000000000000000000000000000000 +b7c589a8402de16f5972fd920fbdddf47df25375 0000000000000000000000000000000000000000 +b7d1006ceefc47983fd91b391a95777e8145e54e 0000000000000000000000000000000000000000 +b7e3e48bcc11138735754a74230e3b84af14b866 0000000000000000000000000000000000000000 +b7e91fe2652fb203c9b9ef7d9ec2ecef9c87924f 0000000000000000000000000000000000000000 +b7eeadd9583acbc983b356c969217e02ce04ab3c 0000000000000000000000000000000000000000 +b800ae0fd00901a48d61b8eeed8b30d40d1073ba 0000000000000000000000000000000000000000 +b8063234a3a8fdca1d5b84de58455290b4934d24 0000000000000000000000000000000000000000 +b80e9342018cf136cc54b900bb95832a6867e982 0000000000000000000000000000000000000000 +b813e518985cddf7faadde60aea81aa1a68194fe 0000000000000000000000000000000000000000 +b81947c958dfcf212da16ddde3bc1696b6c237c1 0000000000000000000000000000000000000000 +b8378125b5c153362b5d2be2fe8bcc8c10e1fc30 0000000000000000000000000000000000000000 +b83b2cca62a9273c5c40d4e24fad28d7918c2bcb 0000000000000000000000000000000000000000 +b84ea194a16e03a1f2b6f56af892eb6288d5627a 0000000000000000000000000000000000000000 +b851c145018fc0904a2469276aaad12c8d46ab04 0000000000000000000000000000000000000000 +b851e24b283c9e463128ce75d1d077f105e451fc 0000000000000000000000000000000000000000 +b854063aa977dae9a8d671ebde220a609d1f88c0 6e91bd4414635bf1cfb3b3cc41f5508ae0eceeed +b865a54d7636e0f6cbabc8008bc0d9bddc5b35de 0000000000000000000000000000000000000000 +b868ffcf9422ab5ed2ffbf0a769aabbb8c030bec 5de93a6390e97642076e3bc1284c83f714f305a8 +b873da7a5483a283e472fcfb3bcd6e7916f5a581 afe2a1bda26465288099471f8a3b003ebba433b6 +b87f551830d7c6d02985a19bf69a93e57fdd4d4d 0000000000000000000000000000000000000000 +b8880353c1861a1f3009a647c533a3a346fd4d8c 0000000000000000000000000000000000000000 +b897a1dd5a420db96f30f0c41a8db02f0f32f648 0000000000000000000000000000000000000000 +b89ebc28b4613e4724c87acafd3209212c878ae7 73414ae4da93fbddece80fc3953c75835834ceef +b89f503da59ecf837cf63c1f90397185208a26f9 0000000000000000000000000000000000000000 +b8ad0226bc71028792d0b66ac78647d28870ce59 0000000000000000000000000000000000000000 +b8d0d2b42fc69b3e615c1166ea04eaf5191db0ab 6c045358c6933a0f92f2ffe1871c45f25d00e07f +b8df4c2302631e5a5b94311cef32b5033745141d 0000000000000000000000000000000000000000 +b906de1e4753f67707ba89174cf1bd219340fca2 0000000000000000000000000000000000000000 +b90aa0322fa33f8af97ca7109ae9bc4a2d337264 0000000000000000000000000000000000000000 +b91a229ba501eee56e3dd8edd3dee08cb5adea95 0000000000000000000000000000000000000000 +b91c13ed1caf7b5d58d4b3439d966bb430992c8f 0000000000000000000000000000000000000000 +b91e86cfe885b134bd1ee30269c62712e6d2221e 0000000000000000000000000000000000000000 +b92b6952f31218179ba7678b1d1b10f6aa76e037 0000000000000000000000000000000000000000 +b94c307c76fa3ee5af8615622e2440f519907840 0000000000000000000000000000000000000000 +b9521cd4a4654a890bc8834708abfc67b5b1c75d 0000000000000000000000000000000000000000 +b95cda39f2a80f50889ded12fc85b3eb23805866 a488a87134fbefbc37b15e569426e71c915863d3 +b95f137222e3e220f7a6595760d02320b04f9ef2 0000000000000000000000000000000000000000 +b97760734e3b09f0aaf85569b1743261a65c6ca0 0000000000000000000000000000000000000000 +b97ef997e608a31af406f0f3819b088b4c4dc45b 0000000000000000000000000000000000000000 +b98a4cb2e2a7f293d3ef53eee1af54c5763d0b0b 0000000000000000000000000000000000000000 +b98b6d0bf39f575b70f59d7563f4c09a8a0663bb 0000000000000000000000000000000000000000 +b98cbfefcf262ed0d395782fac9a1dd56b7c6afa 0000000000000000000000000000000000000000 +b98e4cc72a076081d225cd1e5860582b083cea25 0000000000000000000000000000000000000000 +b9976d489b69de1de40766f15834b7828cc4959a 0000000000000000000000000000000000000000 +b998b7db52d5388a05b214da0ba043614966b4f5 0000000000000000000000000000000000000000 +b9b9b7584a2dba829935c27f24df0b7fe5acd96b 0000000000000000000000000000000000000000 +b9ba6bb45189deea1ff7d6d9fd32d63d673494df 0000000000000000000000000000000000000000 +b9bff3382b6dfd1df1563228914070954191bca1 0000000000000000000000000000000000000000 +b9d206824547a858dd48846b8bb0b557946bf80e 0000000000000000000000000000000000000000 +b9d53606a31c28fea11924209ba8e2369497d146 0000000000000000000000000000000000000000 +b9d6fdb17eabd5c21eabe83fa68547850b79ade7 0000000000000000000000000000000000000000 +b9df4ac1ae42f849dd528d8f6987922a1b3bc3d1 0000000000000000000000000000000000000000 +b9ef21d553bb94b98ff1ea384dca42eecadb0ed3 0000000000000000000000000000000000000000 +b9f7d95fcd9dc12d45c6dd9a5adf09a32e63d35b 0000000000000000000000000000000000000000 +ba12d8619ad342851fb1a259eb4d391f6e71df2e 0000000000000000000000000000000000000000 +ba1486bf50432fed4a63a28f490e6f336c51fec7 0000000000000000000000000000000000000000 +ba2b71ff791fe7e68797cde9ca6160431d6e0e5f b3f739588bb32a2d2e08df20bc24640bda9c0241 +ba2d2a5b7ceb90d181e4f14c26a66079cc734f31 b9cf23ea24fcc34085796f446eb91a109d1a4944 +ba3101524827229bb1986a8b0dd8e0ccd8a81d61 0000000000000000000000000000000000000000 +ba3ae46485dfa17216fb5a1c12550bb4c8e37ef8 0000000000000000000000000000000000000000 +ba3e76715e1c663ca57690fc638270cdb722c127 0000000000000000000000000000000000000000 +ba426af3c5d45ba0d5a5c9c99600c65c1ba6d015 0000000000000000000000000000000000000000 +ba538585860774ca808bf2d73c55ec133b27edcb 0000000000000000000000000000000000000000 +ba575c4d45bb4d9f206315fbe721ff308f26862d 0000000000000000000000000000000000000000 +ba7377748d9560b6fd8160ebfbb0bd66ed6d3db2 0000000000000000000000000000000000000000 +ba81e371277f3eb5428ab6b63c86621a0e0238d8 73306e6af467aaad77669328b33229440bcf4be2 +ba83f944c0f1ba8459621ed4a234032e19ca8577 0000000000000000000000000000000000000000 +ba848287fcbf1247dbc6b27d57edf48057007b72 dc2ec89564f720f5d3944e303703a773b9a7ae53 +ba9ac7acd9b09e35ebe66ead30a25ff05dfbe9a4 0000000000000000000000000000000000000000 +baa2a0c3b70ee6ebf3eeba8d7b42683d735ab557 0000000000000000000000000000000000000000 +bab6dc1f964aafab7214fc152c8ffd49ab5073d1 0000000000000000000000000000000000000000 +bab8a960abcf9a505b07b8d2ab952eebd8e6a467 08307a0337f96229c307aecc638d84a719d4fdab +babc887a1794f66febf9f835157048395bbce77f 0000000000000000000000000000000000000000 +bac54ed620f3bc5ade7ac225249ab2bfe9c606d8 0000000000000000000000000000000000000000 +bac87f24e861de868ee0916ee64ddf91a350da46 0000000000000000000000000000000000000000 +baf0e740fc9246a424a73c89a7a1bf7490684217 0000000000000000000000000000000000000000 +bb0f507f839990154dc33ad7551d37385053887c 0000000000000000000000000000000000000000 +bb156b8dc9311e07beba502d926e561a5fb3a4ce 0000000000000000000000000000000000000000 +bb1fe50d6807b2aae61aefb9fd785d171a05a7fa 0000000000000000000000000000000000000000 +bb2580db46189e180c9f2c074d5fef3110d0d9fd 2df52f75669eb43e7cb5e0959551a24a164b42e1 +bb2726c61fd95f256d1789fe5666f58d3a7c7e6f 0000000000000000000000000000000000000000 +bb294d75b24223bc986f5e49add4c580203b3eb3 0000000000000000000000000000000000000000 +bb3fcfece492e50aff68270abf6c642f8fdb4aee 0000000000000000000000000000000000000000 +bb52f57a02ad7543a423fb4cca84674fc1353a47 0000000000000000000000000000000000000000 +bb59c5f30ffdb4bc11a00239486345f3fef63537 0000000000000000000000000000000000000000 +bb600b4843b58213ea3a16a8ea65353668873a02 0000000000000000000000000000000000000000 +bb672c43a620c999582eef39121fc8001e6c79ef 0000000000000000000000000000000000000000 +bb72685c71f0151e33c6de41948feb615825275a 0000000000000000000000000000000000000000 +bb8b087ee28af446a67c3d502654272dc7628cd2 0000000000000000000000000000000000000000 +bb960b3ff99e1f9c0eb182f927210c66a8aec55a 0000000000000000000000000000000000000000 +bb9e5b51a8860575a1de1a2ca923c12973ea30ae 0000000000000000000000000000000000000000 +bb9f706cc957ff8160991a500790e55b0ae88ef9 0000000000000000000000000000000000000000 +bbb6ae068240922755cce73fccef744ef244453d 0000000000000000000000000000000000000000 +bbc31f5d9850c02dcb277225f992552675b89b31 ce7ff459b4408ec42fcb7439dca13b1f873bcbea +bbd081d7b021a3da7c623e1a0cbc4d66c57a1c04 0000000000000000000000000000000000000000 +bbf1c73eee4da4bc274018d947c4ed8dd6261fda 0000000000000000000000000000000000000000 +bbf77eda85b3a770b1f584d34146aa564d75ab17 99d41518c50f9740fc71a742c1d15cf6e4746da1 +bc05994497fa16969ede804e30feafed28069381 0000000000000000000000000000000000000000 +bc05c20268e783e1e69525a741c1363d65b037d0 0000000000000000000000000000000000000000 +bc0b8974c97ba9a65665bb461f559a46cef7409c 0000000000000000000000000000000000000000 +bc0c528a239b81e3f0c7384ddbd24f24fdce279b 5a9d284eb0a3dd307e0e98adb841c6cdeb48eb55 +bc0cebb104b0c90708232d87378e3e6e7c33ab86 0000000000000000000000000000000000000000 +bc0ffc908aca73ed6a9afa00e9ef82b7733984cd 0000000000000000000000000000000000000000 +bc1f6a0f463d8434d6f00aade5552fc9488a5b56 fc10d89ab3c3e1b2d8e6f04fb61c48082edcfd1f +bc530c3325a147e66cb6f7ed514de5298e490390 0000000000000000000000000000000000000000 +bc87a8532842d79d8e2f0b87f091014b239d2482 0000000000000000000000000000000000000000 +bc87d1ef003040168fb104c1344886df6aa5ebbc 3ee71fddd8b237a8ace4f4c3bf844352b4293b39 +bc93efe9d4694e89da1ea30fbc2d031e7f1318ae 0000000000000000000000000000000000000000 +bc9758efba2ebcc64eb4b9ee1056a192172aec0b 0000000000000000000000000000000000000000 +bc98cc0ab34cf5af6565dcd3ec369f8d2c673afa 0000000000000000000000000000000000000000 +bc9bed964878ea97f8e58b086aa17d5bba138499 0000000000000000000000000000000000000000 +bc9c3d5cf6258c67064688a50f91d7096d8451bd 0000000000000000000000000000000000000000 +bca8e180e314aa6386d3fb38a893c038b6c1c22d 0000000000000000000000000000000000000000 +bcafdec811b3860b4a7f75f8d67a60cf126a4de4 0000000000000000000000000000000000000000 +bcb7fc7c43b4da686ec0fccdb83e27825e1fe2e2 0000000000000000000000000000000000000000 +bcc34a10f2c1a467a06dff5892d5aeed96ce0b04 5acae21cfa38206251e178654ea059a4dfcb0da1 +bcd09056e46f7b3f8169ab525693381d5294f034 0000000000000000000000000000000000000000 +bcd1ac2c464865b603b4540bca5b8c113b84ecf4 0000000000000000000000000000000000000000 +bced7d5f93d323883c910bc9b788b19855dbcec5 0000000000000000000000000000000000000000 +bd10f4a46a4ecf1d61bffea9d6466cd1ec655e94 0000000000000000000000000000000000000000 +bd12c69a42aa5569d21efbbdfc208ee1cd35e7de 0000000000000000000000000000000000000000 +bd19a685d2493f1cd928442ed0c8f5bf7a969c37 0000000000000000000000000000000000000000 +bd29345f54be3dbf9f60c76fdb408f96d40a8eba 0000000000000000000000000000000000000000 +bd39460f63368d68e8a567a4bd5792f14812d8ae 0000000000000000000000000000000000000000 +bd3a51e6c2b4036655ddb0cc2d5703fb7626a169 4cb07c20f3ee393873ece7d91b10f6f5b702e899 +bd5287e4b6e66529d32eacd8c9230f044d48e9a0 0000000000000000000000000000000000000000 +bd61abdfee72445d52312d70f04db087e6d30cf9 0000000000000000000000000000000000000000 +bd6461253543ede124040f02994ec01c4cace41b 0000000000000000000000000000000000000000 +bd7dcc8115bd7213940370f45ab10906baddb03a 0000000000000000000000000000000000000000 +bd82cc2b6a38057965f807c93bfb86b8670d2c27 0000000000000000000000000000000000000000 +bd88bd49fcd5465b7b0132c58575e60a9eb61691 0000000000000000000000000000000000000000 +bd88e4008a3f71fa1df39e4b020790719078ada6 4ae205c3004b35c93a5ef186f2cc5f4b41cf3680 +bd93e8024c6708070a08fe18abd0121ce3334c9a 0000000000000000000000000000000000000000 +bd9622e239d5a5b2b4629d2f371f674775193af5 0000000000000000000000000000000000000000 +bd98ad7ec7a3006a89dfa8816ba06cd1ff7a359c 0000000000000000000000000000000000000000 +bd9f1b447eef4ec40de2560dd53cf77e89e4ec57 0000000000000000000000000000000000000000 +bd9f810834d71be9d1abd640d4bb56277fdf2584 0000000000000000000000000000000000000000 +bdaa23cb0bac3d33f61658547affa9f4efdc02ef 0000000000000000000000000000000000000000 +bdb5264bc41b345f9ea95924ca5ab679178b82b6 0000000000000000000000000000000000000000 +bdb6c0d2b6b0eae4c0af59a27e3e964d0f84ca02 0000000000000000000000000000000000000000 +bdba12d76f6ec63ac61fbb64fc8079f19207e3a5 0000000000000000000000000000000000000000 +bdbcd0385250973d50de41aee8bd6581f10b187a f34dd700deeddce463c90be772bd454c780d8874 +bdc025f822330b892a34592057ae47b3e8a42228 0000000000000000000000000000000000000000 +bdc8e1797f5e21bf0a564778074f54d0b21afc41 0000000000000000000000000000000000000000 +bdced92aee7d9d6fc7953fd2c7622fdd06e7dcaa 564ac1b1ff1e13fa846a3157bad39ae0c2bd53e8 +bdeba82c0d5be86e3a40f0a4b08608124d538bf5 0000000000000000000000000000000000000000 +bdf10c48ae690f0ae14588501b8eb9775ce74b0f 0000000000000000000000000000000000000000 +bdf23f74ea7e74d72a5a3ed1ecf34b67e2a38ba6 0000000000000000000000000000000000000000 +bdfe5a130d283a00463274976281e9894e7056ab 57c46b05272ea8c8a0674006c6fa0e2e751cb698 +be1046d8362e5a7f12d19445881190b8a639a8f1 0000000000000000000000000000000000000000 +be22996ccce7144812a8518b1f9b7ba1f7920560 67dfb6737a43d5d78df37ce295f4501961912254 +be3bbf51c56a6994e383ffa067eabce4e14ad101 0000000000000000000000000000000000000000 +be3c552ce1f4c529ac06833b4fe817ed0fdfa5ca 0000000000000000000000000000000000000000 +be414df6af30555b2fa357fb35da730681509231 0000000000000000000000000000000000000000 +be59a4f6fc5943babefb8322173dfd97957a8d37 0000000000000000000000000000000000000000 +be6a700805710a86fcb73bbcbffaec6f571ba4b9 0000000000000000000000000000000000000000 +be6de4a7a6992777511a4621ea01f2219f8f4e56 0000000000000000000000000000000000000000 +be7861dd02a1b2d50ae3cbfed2148fa04b898791 0000000000000000000000000000000000000000 +be80647b5185559e11457872b36cc4a99aed7cb6 b85acea6403c55775bb1a93252b9bdc138f60de2 +be880ca480ed4d7a34d27b6eb697f1b4900efef4 0000000000000000000000000000000000000000 +be964247425e09a4f7fb7a4afca0bd8c1d3a8276 d809e7b099b48808e4f2a17d668e133a436eb11f +be998b06d4f7a79fd30bacce587e9a0db1920a8e 0000000000000000000000000000000000000000 +be9e5a2429fd9200ad5a1a34b00305bacadf5da6 0000000000000000000000000000000000000000 +bea3b4f4ad3d0465c0ff065371065bb0bf96c538 0000000000000000000000000000000000000000 +beb5805a1b57e95fcf92fcfd785ba25ffa6c139e 0000000000000000000000000000000000000000 +beb68f52b86c1437e50f7561d9be1ebdbe146963 0000000000000000000000000000000000000000 +bed9896fd43f2414a6b6d5802cd42587ba410061 0000000000000000000000000000000000000000 +bed9b5721909c4e4a8a50ee88caefe7c81b6cd07 0000000000000000000000000000000000000000 +bf00f921a7eb490d506ab6bb4243ecf0c770762f 0000000000000000000000000000000000000000 +bf2d0fe36a1c1eb65c63d2a2b703e4bf2300f5bd 0000000000000000000000000000000000000000 +bf2d1222057325d3a19664385a46a7b3c8a2568c 0000000000000000000000000000000000000000 +bf4249b55ad607efdd3343ad74c371b4cfca63ec 0000000000000000000000000000000000000000 +bf4a9eaada12c69d24288b08e5ab4bca88850acd d19b1fb8a8d53ad5ca1d255c32047c347a127312 +bf51aa8cacc9810e1e79937f8b4ca4c409834366 0000000000000000000000000000000000000000 +bf7b8cfd9bd97876d058e4b68cf6788ddd05a432 0000000000000000000000000000000000000000 +bf8446e8181b974a5e813b6bb6f7a499cd02b265 0000000000000000000000000000000000000000 +bf8d0b63adc16013fdb22f38715f167ce6e21c98 0000000000000000000000000000000000000000 +bf9954a257691231fac6f56667bde208a98a5b42 3db290241ec3db3e9cd333daf5f926296f6f7389 +bf9a4810b79512678b4c81737bec1909cad8fe7e 0000000000000000000000000000000000000000 +bfa5d4b3470080831a1fdbd7693aedbbf3fbb6cd 0000000000000000000000000000000000000000 +bfac4a72b9dd6075f8790e3263ccc85140538151 0000000000000000000000000000000000000000 +bfacb4e3cab16c08a74d47ca759c0f6d58be354a d14fda279b73eceb51452fbabc92c86d3afe2649 +bfb0530d640f9b47ba7e8276e566bb00fb4ae347 0000000000000000000000000000000000000000 +bfbd0650e96c88400dad66cbc7099435b3af741f 0000000000000000000000000000000000000000 +bfc934c10add37e058b6bfcf0fd3ab71e09dc342 0000000000000000000000000000000000000000 +bfcb6ae0c2bbf0ea30af8e976710ef7f95eb05d8 0000000000000000000000000000000000000000 +bfcee8d37132a35ab0e14b6d97b08e7f75b5c372 0000000000000000000000000000000000000000 +bfe6f43a2aee1f4ae76158e1fc8ca267eb018758 0000000000000000000000000000000000000000 +bff184b86a0fc4da722b94a8aa906e46107a1b17 0000000000000000000000000000000000000000 +bffc173788125651f20967388f3e7c169f22d554 0000000000000000000000000000000000000000 +c022557faf237b067ef0f4eff4cd5cba8fd0c5f3 b6dd811871b44184e2817ade53c6652362701cb1 +c0237b998badd58c7ae1ed6baae75a8c42559da0 1fe99fac7851adf7ce3f07b34fb059f5696b5c4a +c0332af7f4ad5a9e997d2b2092ef739632580148 0000000000000000000000000000000000000000 +c04934698790a95ebcc2fda11b7e0efaa75d3849 0000000000000000000000000000000000000000 +c04dff5100089b86a2e07fa940583ccb28c32da2 0000000000000000000000000000000000000000 +c06a9f1858a435851c87418a1cc78da91490e0eb f985948b9ce945e4dfd38e99d492057853c13ed0 +c07433976db656622299865bc0f419b9890b34ef 0000000000000000000000000000000000000000 +c07809fcd1845d048bf156b3859a46aeb9e7cbf1 0000000000000000000000000000000000000000 +c080552a1b6e6b9e2500edd51abc709cb2907e64 0000000000000000000000000000000000000000 +c08c3b6dae0f39d27043d2c61ca2ae9038c23927 0000000000000000000000000000000000000000 +c08eb18391e42555c00297de5530503f3be318a7 0000000000000000000000000000000000000000 +c09218991c9805deeaa6a316069cb9d3d56b00cf 0000000000000000000000000000000000000000 +c099ebe6fe6014d794858d82d00e3d2eb21a03d7 cf3c60dd18e80dae5d30c589ac6d24185894a089 +c0aca71b2ecc2dbdb35503301733cffd82b77eec 775899840045472e6f9cf5f45fc7835354cd3947 +c0b7adc461d4ee094cd0a195830266c280fe5a3c 0000000000000000000000000000000000000000 +c0c4621e8723ac27e7aba4ffe8468d1e8f381474 0000000000000000000000000000000000000000 +c0e09c783c04dd2ff5d10848f59949a2a1977888 5c03668bd102074280a4fbd972d3384636f6b618 +c0ee4055d675e834898b695cc4d2d63c8b77f625 0000000000000000000000000000000000000000 +c0f218a92a79a44b56d118f62181f9e4607fa3a8 0000000000000000000000000000000000000000 +c0f2f25ee6bcdd245a941d5d8a593bdbea9bd4a8 0000000000000000000000000000000000000000 +c0f878fa4f72b5622e14e30044be375e2b786a66 0000000000000000000000000000000000000000 +c117bc56f17317853763b065aac943a1eedee9f7 0000000000000000000000000000000000000000 +c11bf825eb21b943da62c1d1a5aee385f934bdf1 0000000000000000000000000000000000000000 +c13f150f237786e29bf2bf7fd460e1b9a030a054 0000000000000000000000000000000000000000 +c13fb121d6856343e47824032f5ca69a4aa140c6 0000000000000000000000000000000000000000 +c1475471a13eeb8cf41f2c71c44c44d0a6266eb2 0000000000000000000000000000000000000000 +c17a87e8d90eb5b4ad71f45615fc5df1ddd314cd 0000000000000000000000000000000000000000 +c1833235c23ccc198221f7ced797499b5945ee08 0000000000000000000000000000000000000000 +c18611eb3edc5e50c82f687ef2785869a3a20e72 0000000000000000000000000000000000000000 +c195b73fccfcb0b5aab24422c3ac62d10998ca36 0000000000000000000000000000000000000000 +c19a8839cd1587ed76530247239e9c1ead19e64a 0000000000000000000000000000000000000000 +c1a0bfdea4a0b58308a754716b9e6aabb099eea4 4619ebeac8974dd48c47b1e59cbe7fa882b29c48 +c1a3afb7a9f1600d1e6adbd57feaee5b9273975c 0000000000000000000000000000000000000000 +c1a6ebaf5a768cb97877b4d0a63218f2d264366f 0000000000000000000000000000000000000000 +c1a7106c9e0afb014a77fa5e6f3da27f6b090914 0000000000000000000000000000000000000000 +c1a76e5888acdab7d7038869487398f18c03fe06 0000000000000000000000000000000000000000 +c1b1616e0f146aac4fdcdd53dff2e8a73f863a9a f7b3c74ca9010ffd0e0264ca4b7654f9de4b637d +c1b173e39440339b2b32f2b02363debc5b0847b3 0000000000000000000000000000000000000000 +c1b774f6286ff6eb4dedc635cdd495bd9baddd80 0e15bb59406c4d6aee0f719c25ccdec6d1bdb10d +c1d831fcd3836413395bf0f4dcb89ba24a0584fc 0000000000000000000000000000000000000000 +c1f071311accb9cb129304af786e09e55b99fce9 0000000000000000000000000000000000000000 +c1f28f0611478a85fced5e595056d97fed446003 0000000000000000000000000000000000000000 +c1f37eee66574c69827aaef24626ea417f719c68 67c26ce8092b72d1142aea7cd54cc01cfabeff82 +c1f6733d66050e35536b88a77944bccd75b5e72b 0000000000000000000000000000000000000000 +c21375197f97b6dc5536bca84e7569ac38c98d85 0000000000000000000000000000000000000000 +c23694cfe43478d77dc2128452e46e21f61fdb03 482fd5d830272040dbdf027aa0c0a6242d076a23 +c24d670e6cb6ef1d3854aa8fc69792eb5461b580 0000000000000000000000000000000000000000 +c24dfbd916d539344f4f1644cc73883fa76f338c 0000000000000000000000000000000000000000 +c27d51877de8446c3847f181d14a9b14916bb76b 0000000000000000000000000000000000000000 +c27dd934b588daa84a8169d574d0b00bacee68a2 0000000000000000000000000000000000000000 +c28e858998e6c0a32103de702121e6bf79299295 0000000000000000000000000000000000000000 +c290369247d9498af307d275b48a813a8642ddb9 0000000000000000000000000000000000000000 +c29907d53f5159263ee126009d168bb552dfe7a6 e9fcf52d4a82cb15c8cc84c1ce4eaae039c41511 +c2a23a0561b873272230eaf4faaa0d1f050920fa 0000000000000000000000000000000000000000 +c2ae2dd0ab7b3f858ec9b8e11413027b61937f00 3ba626200d4ebb9bf926fdd332f0f8ed15f153c9 +c2b83d89661978e6271cab8aa21bfb7a58c1a095 0000000000000000000000000000000000000000 +c2ca8838ee0333b392748d74b4cb5114d0514af8 0000000000000000000000000000000000000000 +c2d3f997e649a12b7dd185f48680dc1468dc7d73 0000000000000000000000000000000000000000 +c2deb3f81283de0f6a57a32afe973a24e350ca4a 0000000000000000000000000000000000000000 +c2ec5e15ca78c46ed839e6b8b6ff34c600c090e9 0000000000000000000000000000000000000000 +c309dd9b647af7797520fd965536ef80734c245e 0000000000000000000000000000000000000000 +c329b37bc7e87a403f5f32db296f879326dea655 0000000000000000000000000000000000000000 +c3373af45b6c27c2b982b36ba3b4d0eb465039b5 0000000000000000000000000000000000000000 +c33914e321ba047e8adac0365f5a3c516d3d804e 0000000000000000000000000000000000000000 +c340f61552a319bfd2ee146ab8f61e26cc3d2f9b 0000000000000000000000000000000000000000 +c345fc7496ee5d63fd754d4aa379cf094d14eee3 0000000000000000000000000000000000000000 +c377232f18ff3a7fba6e6e27e26d7085869e626e 0000000000000000000000000000000000000000 +c382c220a2d4b4bd75f689d1bd74c7b706da5bb5 a9d4cfb0fbc3c8b49c4d2659c632b9fa6414f34b +c39da76f5c669855066db22eea68c2253743f44e 0000000000000000000000000000000000000000 +c39fa84b4d43f9a7ce053ad5cb351407be5d7fc6 0000000000000000000000000000000000000000 +c3a1fabff35f468ec16606f038666130a6d0412c 0000000000000000000000000000000000000000 +c3aa16d9eb783562a86d09af1991269af4ca5f0f 545430df521cc9a4086182a7bf9af08433e6f4a5 +c3afe4e8af2526e957940503a31079ed5f027c0a 0000000000000000000000000000000000000000 +c3b0c87870f82d368a59c5b1c0e766cbdca5a4aa 0000000000000000000000000000000000000000 +c3c0abcd97d68aa4cae19776c4a02dab9377b413 32f93ebe78461cc91572e772bc510d5653bd1327 +c3d0c15e925667e5ee518fcf5a7b98cca7e19d91 f23faea50a8d3c2804732063368a50ccadffe442 +c3d6161898c96aecf1944294b0fedebde7614d77 0000000000000000000000000000000000000000 +c3ddbfd2b49885c8c19a14271d923f07b90e6e24 0000000000000000000000000000000000000000 +c3e898038367b6f1662d7f94249a0faa37ebc322 0000000000000000000000000000000000000000 +c3e9fad2fb3191ca0cb96aa4265c65df38ebad67 0000000000000000000000000000000000000000 +c3f682ead6bd65fabf951d4126d1284465539fa2 ba464e7dad6fa9e9ee85cdb9d47823e9071f6c51 +c3fac4edce6a29a77e3fdcebcfb6be7bff8cee09 0000000000000000000000000000000000000000 +c3fca3656bda52a969b895adb26563f2074b96fb 0000000000000000000000000000000000000000 +c40f39c8876a69a157c910f08d231a890b45ec19 0000000000000000000000000000000000000000 +c4238b6632b04733cf903ac4e33f58ecc62da42f 0000000000000000000000000000000000000000 +c43f024faaeba6f9abbf4cfbfafda0285097627b 0000000000000000000000000000000000000000 +c4510b99e81e52906f46e946da417dd07a16559c 3b7392ede4d1303fdc891b6b74d2e8d061769bd3 +c46f965f8e9a292ddd5fb9ec7b8787f0daae790f 0000000000000000000000000000000000000000 +c470ec8f9a6d1fe2543103636a29a05112ab9c9f 4ae0270f10add36424cf692f7a519db418ff9c76 +c48f6d4434d45bb488ef56feebe21d901b6a25af 0000000000000000000000000000000000000000 +c49a85351371ae4fe19d67613279559e2ef8ff77 0000000000000000000000000000000000000000 +c4a446c70eda6cadcf1f21ec5f7342ec90b94fe0 0000000000000000000000000000000000000000 +c4aed08331877db063c0d44009684b096c088b61 0000000000000000000000000000000000000000 +c4bb17579bade73ae227af4e2f1422f004da52e0 a8723384b2a415d9b6b95022982fd17715d3c0c2 +c4bdccc9faafbbb8b4008854d3ecbf35b8d401b8 1b4b62ee8e03a650efae2bfa8acf84f3d4892ada +c4c8169c4ad203faeec8fa301b88607c344f125b 0000000000000000000000000000000000000000 +c4cd7c938264945e5d1a6c59067070124bf8b64e 0000000000000000000000000000000000000000 +c4e9f3c5415b7fa110bbd57fdc32c06597326c4c c8f21c2c47543c3230b163ee744245a2ee767103 +c4f02dae769e315e8e22b19cc2710a4299a455b0 0000000000000000000000000000000000000000 +c4f798ac4f4f40afd2dcc57981b23312cec23b78 0000000000000000000000000000000000000000 +c515a76d40df62af6f6bfc3d8c8c4f31f103d511 0000000000000000000000000000000000000000 +c53165c72fae25ba0864a9f3c52d42e4ee05184d 0000000000000000000000000000000000000000 +c53bbe9ea830f86410b45c0eebca3ea6b91036e0 cb212734d003be94b614d306eb10af74c3d630f8 +c54c3b9756ca588c22448fd26197149d4038bdf9 0000000000000000000000000000000000000000 +c5533ff70ea32ce552f0656c32bfc2dae26b3c91 0000000000000000000000000000000000000000 +c564a98d4ef824fc071c3bd821ad9678a8a24d67 0000000000000000000000000000000000000000 +c574203f34bdc042ee8669921beb23a6e0498087 0000000000000000000000000000000000000000 +c578c4d5f1f3904848dc438fd88dff06f6e8e022 0000000000000000000000000000000000000000 +c5889760b9ef8a46e3a54f98e22f4ca55babb709 0000000000000000000000000000000000000000 +c58f5eb4966f4748de27da12ae4b99efdc65c6e2 0000000000000000000000000000000000000000 +c59fd1ba86676bc3182767bc9db285aec586f42f 0000000000000000000000000000000000000000 +c5b69fed9c413a6399c36e0f543e1019faac77e6 a538ac021b1a5f970009e368f44d25006cc948c6 +c5bc8d921fe9a7ef10fdd1960e71e0483f0da5b3 0000000000000000000000000000000000000000 +c5d9330768a5bace9d56285cdef5dd736f1da17d 0000000000000000000000000000000000000000 +c5e0da2f70428f6c31282e652504cf0f10d41cba 9d31c822540dc11e80feff26e476b1e80dbbe030 +c60b007dda169d1a5ad32c255c15c2a9208d4eb5 0000000000000000000000000000000000000000 +c60e954602223c01c1febf9b55246d3517361b7b 0000000000000000000000000000000000000000 +c6168afbc3ef01d6bfaee4f0d0ffc20566793199 0000000000000000000000000000000000000000 +c61e1cbf8cb8315c3901d56eb2bf090b87a12209 0000000000000000000000000000000000000000 +c62769a6fac6ae354bf5554d6d2e4648e917b99a 0000000000000000000000000000000000000000 +c632305bf2fdedcd42ee90ce400a9574bee8fec8 0000000000000000000000000000000000000000 +c637cc46e2b45e1d77a857b4ebc3cc6b2ce99a97 0000000000000000000000000000000000000000 +c6417ba42411fd30e2864243db4ce194a5fd2743 659d4d7de3b576028303a107f5ab9c9823d14d0a +c664ea5471e187282cf69a8f5fcf74b557055bb8 0000000000000000000000000000000000000000 +c666c4ae4b1034b73ef602152bbcb87263bd2099 0000000000000000000000000000000000000000 +c66dffeef42ddcf370623c1a789ea5cb8be44760 0000000000000000000000000000000000000000 +c66ea77125dad751a24c3347f50a49796b4e6523 0000000000000000000000000000000000000000 +c66f24a7f11013c43accabe29e4b6cefee605f62 0000000000000000000000000000000000000000 +c6a3a107288363bc3b921d3b65945948ed5f3ab0 0000000000000000000000000000000000000000 +c6b1b0e196e3c2ffa5a4a808ef1d4e097cc28b97 0000000000000000000000000000000000000000 +c6b79aa87440ab7749f3cdfa52ca708110629d44 0000000000000000000000000000000000000000 +c6c8b06c83f95e8cb6eddc6ebda2f9511bb5f31a 0000000000000000000000000000000000000000 +c6d24024baa1e9ca5264575f117852372cfed3b7 0000000000000000000000000000000000000000 +c6db2e05097ea49333d3a89089ac480bfcedb98e 0000000000000000000000000000000000000000 +c6e6be27f01136a3dae023c1740c20da22763f62 0000000000000000000000000000000000000000 +c6e940a86eed707d703e5b357d3463112630cb85 0000000000000000000000000000000000000000 +c6f9ff2f6fac0bf769ad5f3e3a0628e4ae08489b 0000000000000000000000000000000000000000 +c6fa8894538696fdd21c6823f967ec452bffbbb5 0000000000000000000000000000000000000000 +c70b9a2653e2ff901a70bcaf1382aa1db3684469 0000000000000000000000000000000000000000 +c71b5de31da65a3298117d397b33a8785e461f9c 0000000000000000000000000000000000000000 +c7252677814eec7a9a8ff6f0f3a51f5e113f5f19 1579bac10ee9522e4fe7bb1cc0af524174d98453 +c73cf9bae9ab3958ebe7e9665e65a56486c3a263 0000000000000000000000000000000000000000 +c752fcb9fbbc2e8965dc7b3d54341a34453b5d36 0000000000000000000000000000000000000000 +c753a9b5a252e4937a582e87deb59bd196f8d58c fc697eb3f6a90c64b3a50d71a5ee3adaa9e43237 +c76101d6e46ea330a14c96113857b1643eb5e328 0000000000000000000000000000000000000000 +c762968cb7a84e5faaae1d22722da4c79874441d 0000000000000000000000000000000000000000 +c7658165835178357f37844f3c7ecb953c1ebfb5 0000000000000000000000000000000000000000 +c771cd62ede4e14b05ff6dfe94440633eaf3e6a1 0000000000000000000000000000000000000000 +c78b917f4195653cf0a11165f9ce6f7e3ed8359a 0000000000000000000000000000000000000000 +c78cbf0eda388ce9f4962a5ec4d970dda0e836a5 0000000000000000000000000000000000000000 +c795a240557ceea91a5a06fabddb4fdd6d01a469 0000000000000000000000000000000000000000 +c79a4f9bb7efefda4f446118e34730cc5f2e2565 0000000000000000000000000000000000000000 +c79bd11bb594c1610b2b4d76746b23dcd4c7ab3d 0000000000000000000000000000000000000000 +c7aa71a3e86b6bc3e957a5488024e1397a34a050 0000000000000000000000000000000000000000 +c7ac039e4ac0db4bbc76da41923ad87bbe306159 0000000000000000000000000000000000000000 +c7bc131281d5cfdd22dd8fe98a33d30bf026a57b 0000000000000000000000000000000000000000 +c7ce19721ad3f1c4b600d64b47677695b46176c1 0000000000000000000000000000000000000000 +c7d7753c71cccb60c4b7cd946b9a06366bcbaebe 0000000000000000000000000000000000000000 +c7e3ed81e1bce61a19b2ca7fa236f162adeaf5b9 0000000000000000000000000000000000000000 +c7f735ba3eb173106ce12b3feae6f3b514eaafd4 0000000000000000000000000000000000000000 +c7f91209465dad77b7829c1273f4cc262c3e1bd3 0000000000000000000000000000000000000000 +c7f98857fc97ff2eee74ad78da5fe5889cd4cc87 e6fad7e15e8e2c8cd5333164da593bf76a9e2f7a +c805f2e952c986e28f831cc58abc848525b3dd88 0000000000000000000000000000000000000000 +c80b407d4b06f7a3f07c0c1f52292f850c755f49 a7e02068f5e84ce5768136170830d89464ad977d +c8292765c6d5f2e3efa65e06b13924cac97f36ed 0000000000000000000000000000000000000000 +c82c3cff35a76b2241041d820a3b70c9105816d5 0000000000000000000000000000000000000000 +c83ae2983affd9c0b30d9dca889feb4cd50c79ec 0000000000000000000000000000000000000000 +c8430ce5a6d66ef1ff99b58e715a9ba19830c413 0000000000000000000000000000000000000000 +c84871b235f3b2365a8d3b8ebfd2ecc744d07a14 0000000000000000000000000000000000000000 +c85683d17664935bc28635edb3a537192132e06a 0000000000000000000000000000000000000000 +c8631460cceb40b5baf2d69ce4a478533662956d 0000000000000000000000000000000000000000 +c865b2d06299bcb188311e3e3a83f9f83a6f3117 0000000000000000000000000000000000000000 +c86d29bc9f55457692111a29532d2604ff7b34a8 0000000000000000000000000000000000000000 +c86fd89af8ef645d704a5c34a1c3c7aec6ea3a56 0000000000000000000000000000000000000000 +c87204a3a9857e1d23812a3fbe55972438517c47 0000000000000000000000000000000000000000 +c8773ba75eec17465c2ebfbf3b5da45bae14df35 0000000000000000000000000000000000000000 +c87a3c2aa97c520f20e62356c1b74b0180a8b8fb 0000000000000000000000000000000000000000 +c87ef1f6749a06f1ba7e48b11dbd94bf2124b9d5 0000000000000000000000000000000000000000 +c8a4a00a7150347483c6e52068a81e3e5f9dcff7 0000000000000000000000000000000000000000 +c8acd5994ef3b8a48208e215391b30b03ba65515 0000000000000000000000000000000000000000 +c8b5c3d5da85b840de7cd1e753699327541aae8e cb8433b4207e70882c17b792a9b204170b917f4c +c8b6a8e949dbda93e5903ee6200bace94789ca4d 0000000000000000000000000000000000000000 +c8c3fe5ad062102f3e42255c6edb56bc64ac22ca 0000000000000000000000000000000000000000 +c8cfe5943226aea0f4c3188e5d78ebd2dbebd888 0000000000000000000000000000000000000000 +c8d87d73470e74026cbe28ab2c828731282a4cd2 0000000000000000000000000000000000000000 +c8d9853a6792290d055ff4d5ada51a3f07359c99 0000000000000000000000000000000000000000 +c8da4bd2393cbed6273c579583b83e0c1393f6ae 0000000000000000000000000000000000000000 +c8e107d4c7169c65e4711fb71243916a00c20a68 d08a9716fb75428e5766e421940c538b98caea53 +c8e75e74c04f81a5611542f480da2a25e2930061 0000000000000000000000000000000000000000 +c90020813dba37870c17fb5eaa6e29f3a850fd93 ec38f9328a26338abf150e1419f76e4a8db84f18 +c902bfca0f3f1aaaced4d8afa1cac3b04fedef54 0000000000000000000000000000000000000000 +c9285d3900b2e54f48f845ef400e2e235adb48cf 58f86460a81a74c46c9fb81a6ee7e4b669113714 +c932f6f2b4cf313e72e10474ed43e259c21f093a 0000000000000000000000000000000000000000 +c93619755bee327d272af9b5d41107f7057164ed 0000000000000000000000000000000000000000 +c9387274be6a6955952174d677bea0a35bda2624 0000000000000000000000000000000000000000 +c93a9d742d448c61543c4c5d7db2bd3dc25fa412 0000000000000000000000000000000000000000 +c944a316794651fb705d0f110756dfef5ef684ed 0000000000000000000000000000000000000000 +c946aba6bd38fcf57200709aff0fe5c3aa604ee6 0000000000000000000000000000000000000000 +c94ef0f860bea7ab08e854b503222ce908822d52 0000000000000000000000000000000000000000 +c957e3c6f091af428bc8f400e669ebd5487339a5 0000000000000000000000000000000000000000 +c968e1d321e7578cb9a6d424ac2dd4ccdc784400 0000000000000000000000000000000000000000 +c96bc16e91f957e497d6eba161530efde9770c6e 0000000000000000000000000000000000000000 +c97bb13d873491b337ba94a63e700e4beaaea349 0000000000000000000000000000000000000000 +c97bee7cc5e6f83bc3456a721b381aad18c46143 0000000000000000000000000000000000000000 +c981f105ec257659b3f656d1b96eab0b2946b678 dcae88641c971de9ae0ae791e45a831d61e929f1 +c9835c243a07703e2e4b3e47332da0781975cab4 7b245096d927ca64cc33246509773b6ace219396 +c98ca2826ea1c2211d17f90308d555e60ec92934 77093f7d7fce717142f0f6451e5691cce4583b2f +c98e089fffac7ab416822a41a127efb13c4f7af5 95966fc47f27912518703a5226412af9d057d130 +c99a51ab63785f5cce7aa659ea873b08b157226d 0000000000000000000000000000000000000000 +c9ad3b43104257224f191bba72d38a8564798648 0000000000000000000000000000000000000000 +c9b01cbec2ecb367c4f64dc7c49cc782ec463d09 0000000000000000000000000000000000000000 +c9bfe1da97aedeb3ea07651d7052aef58534451a 0000000000000000000000000000000000000000 +c9d1baeb43eb9674e76aa3451f5a33663d49204a 0000000000000000000000000000000000000000 +c9dfc86527b0949fe8471f55033684a9fd8292b3 7233db2046ecf9b1d97ceda9228de0cde621f2ad +c9ef228c6955536f3b171f1b9df4294f30ec3390 534787b416dbe66b281abafb7b24d32c6a237263 +c9fe4973b145907b838be6d334be4ad9404d4e72 0000000000000000000000000000000000000000 +ca19f45d4ecad56b8050ba5d1fe3e5f0d9926995 0000000000000000000000000000000000000000 +ca1b351d9a065c69efac1b609cd3924c6fe860ea 21eb474f8f58d931010ade173a3be3cd4ac9dc06 +ca241c02c088ed4c3b3de4a27e399f18dd6265f5 96a2c3750cbe301620ca997bfd42e9ed0f0f36ae +ca33d2bcc23b2fb5ba0183a5327918ce50e3d7c4 0000000000000000000000000000000000000000 +ca37cbd4c1d17ec234552e4fa91905bdf4ddf53e 0000000000000000000000000000000000000000 +ca388ff4d4dcb5f4d31b908e2c5e6498423943e0 0000000000000000000000000000000000000000 +ca39123af465542a5f15f0f8ebb4fcf64e11a71d 7916f3ac8070cd60be5841171138efd96935604d +ca4128b65bfffc444ee5f1be09944c5c7d7ca01a 0000000000000000000000000000000000000000 +ca4bfc7f86a013ed4e2acc841884719ca1c189bc 834eafa2b6d8cb43e35d1ec5377dafbd555bdfb7 +ca6875587c1002bed7dfe778c7691485e3e637b5 0000000000000000000000000000000000000000 +ca777514f728fd8cceae9aca2a93bf14c58b187b 12f1756b705340a7658afe90dcbdc76d93ba3838 +ca7ccdd933b57c2775d0295e22e541c2904b5fb7 0000000000000000000000000000000000000000 +ca81fa90a4c6cc0385f05f7464478224518fcaf2 bc44275b5d20a666264a8f991106b0f4d1644e14 +ca8af7251e59ab755f01bf952e81ffb279c5d6a7 0000000000000000000000000000000000000000 +ca924a949578d7d48918eecbf053014d9ab76e8a 0000000000000000000000000000000000000000 +ca9df42fd3a817d5ca4853f47bded1d2ec63b5da 0000000000000000000000000000000000000000 +caa87da7a117071f0038d9b7bff780ee2e8d8ebd 0000000000000000000000000000000000000000 +cab8c672d95182a75b474cbe14d883f7f509bbf7 42e9d1f04bb2e7d2f0d4ec448fbd8bff150b0b8c +cac62203a346e47d6512454fa19cd8201dbd81d1 813f067ed971254ab81cca293d3568daf5588e97 +cad45af99b20dfa79d656331875a130b479a7849 0000000000000000000000000000000000000000 +cadfa0e067998bad832aa04e8e38c33092394ed6 035007c404f0da91f5cd4d1934bd0c16fb8e2310 +cae8356bfc0c9510ca6f51848e9f586567e0b341 0000000000000000000000000000000000000000 +caea292b39d2c754bd2e2d214280add53a0a47ea 0000000000000000000000000000000000000000 +caf14fb07541672a575c102bef1f210985fe471c 0000000000000000000000000000000000000000 +caf28d8253dbad7cf61587d81a0e22375ec35e82 0000000000000000000000000000000000000000 +caf647a5a7f7a7fcf925e663b7b36475a8a8d730 0000000000000000000000000000000000000000 +cb0b68cf49d52d94e5d3e2ddfccff453d6b6863a 0000000000000000000000000000000000000000 +cb1b084db33c536e8db2248a5d3840feb4abbe85 ca7557cc249d4cdba73ee89791fc76f60e4e3e11 +cb1c4967f37f11dad6ad42784e6c3cf8570081f9 0000000000000000000000000000000000000000 +cb254da1f72dfb29199ff45cc38fe05489e6d468 0000000000000000000000000000000000000000 +cb2a2486429f163321bc5ff2208ea2137188a8e1 0000000000000000000000000000000000000000 +cb394dc729c3f648982d9310c9d62521eb18fbc9 0000000000000000000000000000000000000000 +cb3c26b6f46e3ca17247e18aa6590606ba0a410a 0000000000000000000000000000000000000000 +cb5048181b0221c5a48779f4c8b530f41ecf6ac9 0000000000000000000000000000000000000000 +cb5bb2797a4a4aa61c96d4fd453ac5257474848d 0e344b6e1a5026255ecfbc7938477a5d1ca0e506 +cb6835983d06b72e67266e1c31fbfcc50faf2c61 0000000000000000000000000000000000000000 +cb8288b54653917c75e3a12577125a670c48dc70 0000000000000000000000000000000000000000 +cb8ef3a530dd1516f2fd15e3c6ca4251dd3b8fe2 a6e2bd42ed6b0da18da651e445947d89eb2966b7 +cb9772fd4eb2a6fa36b65f0388f471eb66653aa2 0000000000000000000000000000000000000000 +cba0d4f17dd93ac9d6f44ead1c10ccdcf518edf1 b86f5be95a800dd3bbdb51e26a24d8ff776333de +cba3dda0e518500deb966803c54be51725289423 0000000000000000000000000000000000000000 +cbafb8c5411be3171972c861d560d89e2a90f5c0 417ecdf6be2c53115a13d77b22f1d39d1d2e28c5 +cbbcfbd9d4fb11161343fa3e680d50f22c4f1639 0000000000000000000000000000000000000000 +cbbf608d7bacdc3a4a16948b833a3ea60db6bea1 8322705fc272a577e18f9431762e5cc97ccd1adf +cbc2934f9385bd687e7548838436a060e61bb045 0000000000000000000000000000000000000000 +cbc99c16aaa978013b5545223d2b7aa69f598f8f 0000000000000000000000000000000000000000 +cbda1f46683ed56df1d0694b92f8fba47f958205 0000000000000000000000000000000000000000 +cbe719dccfdd973c824129055930181f2bd0ee69 0000000000000000000000000000000000000000 +cc0357a36b3a2f537285b09e9aaf2bc177b924d6 0000000000000000000000000000000000000000 +cc1439e53ccb9156b26a1e7008bbac1369897217 0000000000000000000000000000000000000000 +cc28ff27446dae0fc0e9f9f44dafd6df6e8fc243 c24a08605b2f19950ccae3acb5bd251160320433 +cc5fae03bce9b64b8428f80e28314764c4bfce20 0000000000000000000000000000000000000000 +cc951a8c65ba999af2f29dcd241424cd9e1517cd 0000000000000000000000000000000000000000 +cc986570774f25f3c3328b8eed01841275b18157 0000000000000000000000000000000000000000 +cca0dd9554a8c406ea990e447ab482369445ddbd 0000000000000000000000000000000000000000 +cca1bb917ebf01373045832676f168cb9620354c c006ea04eb10c64204f567aa721fea5e6edaa28e +cca306e35521196e2c9a7a6433c98a432a378b1e 0000000000000000000000000000000000000000 +ccb08438993d918223e520ce4490c4d936b310bd 0000000000000000000000000000000000000000 +ccbef092e33ae18f12286e44567fcf85c71af9f4 0000000000000000000000000000000000000000 +ccbf9eba3431e4c28e1f3de6989f7ea983e2baa8 1bcf9e10883a380d450849d8f3ed4861b5b6f12e +ccc3733a2700d087aac289bb31a6107e9e6d743f 0000000000000000000000000000000000000000 +ccd4a43fc951448ebc2ea1be8072724e53598239 0000000000000000000000000000000000000000 +cce2495ee73bcab3acc3348c22aa400b08dc6830 cce72a161d3ebb11638f9e2d668194e2123163bc +ccef12b735acfc107167beafd3115f6992a4e0cc 0000000000000000000000000000000000000000 +ccf8855f241f1ee6ac61f8baebecada3c078b69d 0000000000000000000000000000000000000000 +ccfebc828c2793b00faf3d5b12bd95bc68901104 0000000000000000000000000000000000000000 +cd04b83b0c754f2de2c54882153147b487f6b0b2 0000000000000000000000000000000000000000 +cd100d5392b3af1c84e9920a34174e1e351b59f9 b14247b6c3579e11b4cce80c7f39a26f7a7b395a +cd13481f4e3a883186d10b3af63cbd928a17c8ba 0000000000000000000000000000000000000000 +cd36b3e09508138034b31ab695579571454e429f e9ea7ea29ede79b0558c64894eed7e31b2327fea +cd392b7d5dcbc400c47375a278be9b316109eec6 0000000000000000000000000000000000000000 +cd45ea1348ca272cd5974b5d3451e0903159b57f e32045f1fa6d6f6f527a1eacb4f265fbcf2eaac7 +cd4baf605c715bfc93c95161044b3ddbb5b21398 0000000000000000000000000000000000000000 +cd5f3faff6dd1e962cdaf103513f5e520950af34 0000000000000000000000000000000000000000 +cd6b6ffd7023023afabaf7bc410742d46410d72d 0000000000000000000000000000000000000000 +cd722e00cc732365e0c2304ca77c52977a8b81e5 0000000000000000000000000000000000000000 +cd77440dfb16f7471243ef1617938aeb12e622ea 0000000000000000000000000000000000000000 +cd77cefeca56e8500fd13d9d99bd92fa09c0112d 0000000000000000000000000000000000000000 +cdbb6e70c184c5d7397be16020711377136a5294 fa97bef11131d6c26e1510df0a440f5df9463229 +cdc68de2267e8689db5f9baba8627ba6b2a34871 0000000000000000000000000000000000000000 +cdd5fdaf457651398546932e5af467ab60e5891f 0000000000000000000000000000000000000000 +cdd60295c256c1c0b40147a4238db615806a6fdd 0000000000000000000000000000000000000000 +cdd956f4f59ddc3580857aa2afb4b64abc7948ed a2ddbf759c65fb51a32b265329a60a2f81fd321a +cde8923c853393ed48a6bca24dcea69635fe1b2f a4d3b286ce450038d85054491193810f611894c4 +cdeed740e5e5d46c31b6f9d157a711029994c28a 0000000000000000000000000000000000000000 +cdf68a5511481b7ab67100ee7a0a9409de1b356c 579ce9ea7d50e36e200ee8a743c341ce204ea286 +cdf9f84d65412e801bebc7d7b8c65f773689edb9 0000000000000000000000000000000000000000 +ce04d4249c42651b2229bb0afea071eaaa1ad761 0000000000000000000000000000000000000000 +ce09f41a9bcc69c8959855e4f92e8d7e3e16d13b 0000000000000000000000000000000000000000 +ce1864956f00b3ff7ed12d7f7563c9f5dad3fa48 0000000000000000000000000000000000000000 +ce1c28dfc405525a48f9d5fc419f02147fec0e8a 0000000000000000000000000000000000000000 +ce24a81acea54f3ce167d76ad47793e74e239dc6 d6025e3dc831801d37806a3c56f3df8b50d9e6ee +ce2ca466864272a309e423a3f5c05dea10624edf 0000000000000000000000000000000000000000 +ce2fa8fa2f6f21f0e1db26dd0ff0ebdc9fe00adf 0000000000000000000000000000000000000000 +ce5c7245e38b2e38e5f9a7a4eb825e7683fbb1b5 0000000000000000000000000000000000000000 +ce628d29c9eca1fadf3cd208cfd11b6c30325a5a 0000000000000000000000000000000000000000 +ce6423039765edf10c7a60546fcd992144f0ecf5 c387ae55206a5b3e025e331d077e83adadfe38e4 +ce7a7f8fe0ed2dbe53fb42d7ff5a186c38f7eb76 0000000000000000000000000000000000000000 +ce93aa7a23280b1fb60b9bc4e5ca4a070414fb0c 0000000000000000000000000000000000000000 +cea2aeef07f0704333a95869152b34776711f43c 0000000000000000000000000000000000000000 +cea892957d79a5f1bc314abd51452e92e233da11 0000000000000000000000000000000000000000 +ceb3ff4b2ac9d1cbdcde70a27c4a5e0a384bb7aa 29c8a27af2cd5a54cf643e042ded009834ad6434 +cec201b5eed99ac9fecad79dc1e4b0621031085f 0000000000000000000000000000000000000000 +cecd9e73b0c4f5898efda461d95c0c71c958f15d 0000000000000000000000000000000000000000 +cecde5dd2c3c30c7997c5c3dc538d612e0bc98e7 0000000000000000000000000000000000000000 +cecf011bf3b0e1f69d8b808eeda8e3a6e0e7bd54 0000000000000000000000000000000000000000 +ced60c92073a8fe3dd467238a79606b21fb2f84c 0000000000000000000000000000000000000000 +ced6b71b33fe82c79ef14e0aed5710fb520e9bda ec52148db81ed9cfc0bd1eb152e04b21c7a89b78 +cee58fd7a0a2cc3536762c7a85515f51c04d8e02 0000000000000000000000000000000000000000 +cefc069f9656950e3992b3529e8774d3c3489970 0000000000000000000000000000000000000000 +cefe10d380ef5b1afafa1b44a82d6950fb996cca 5598cc4e51ab1f4085c04fd1b2d1c45a234c7dc3 +cefec96cd0af3378e4108a96c6a075e3ef96ec8f 0000000000000000000000000000000000000000 +cf2106a52f01d6ff278f99a7c72b935f0dd79b73 0000000000000000000000000000000000000000 +cf27ffa00cbf9698b6231ee99ad67e3d46e7e6c1 0000000000000000000000000000000000000000 +cf284251eb28d580790e5b519b880b51a64cb51e 0000000000000000000000000000000000000000 +cf2aa7182dc55eb9cb4b1dd2f0be5f76581b8eba 0000000000000000000000000000000000000000 +cf2df41102d25bce9924fb00e3433200857221d7 a92553b7ef51c3d2024e7772ce2da4a238df1fd2 +cf2f60e8cba38df7341e4344dc5e33106b064c56 0000000000000000000000000000000000000000 +cf41355aac3326c1cb9337078de989179f1b3b67 a3e41248ef74eca61af55ccc4c99108a987e2f51 +cf4201cad806e49b89f3f7c5d7a74f4b2c29748b b6f545d1df5555997f4d7b3a21baa2d46b8c0788 +cf4b08f71f4c32aba372bdfda8c3999620955172 0000000000000000000000000000000000000000 +cf54bb3e2746c0f6c7a60fde5bcc7fa1139dd8b6 0000000000000000000000000000000000000000 +cf59c23129946bfff3cd761a3644afc30554b2f6 0000000000000000000000000000000000000000 +cf64843d0ebabb427fc456d9dba3f737bbacd437 0000000000000000000000000000000000000000 +cf65ddb96c76e1169bd50c7b96872f0650f80e2e 795d373d2628d434d3e1cb4f4d74ce7b9abbbb0a +cf7002a86ac70a33abb8dfb10d15672c84a8d093 0000000000000000000000000000000000000000 +cf745f364d93db54b0d17ffcfe0f579f959aa54a 0000000000000000000000000000000000000000 +cf77bb730c064596afdeb02e6980caa7e5a9c5fa 0000000000000000000000000000000000000000 +cf89b4f756bcfb7775d4b8987a553fbf11ac29ab afa1798ee3d3335a1a388c2a8fa1721061e89557 +cfa49e9a24bce679b722a7ef22566d449b393778 0000000000000000000000000000000000000000 +cfaad589473e409e086f0f0bcbed59224eeb0e07 cce34fe2753cba575aa0be06ddb93de999725596 +cfc69cae3fb9eae97bfd90b51d916eb02ea1fdf8 0000000000000000000000000000000000000000 +cfd35a8e7dbdefd7ed427d1e6a7296785b3d2d39 0000000000000000000000000000000000000000 +cfe7295396f7c70ae9f2f87b86ea9f7d3220d7bd 0000000000000000000000000000000000000000 +cfff3a4610290ee9bdb0e6022b462fdce740c52e 0000000000000000000000000000000000000000 +d0103847dd570ee6c65e23ee9a887269599bf05f 0000000000000000000000000000000000000000 +d022fa4bdd25dee8a246497ff11b636076ae9c69 0000000000000000000000000000000000000000 +d0312accd1ea6e1c2c921771bb8c92c1705ab1ef a4577fa84dd4a229941fd99da6c0842ddb795e31 +d0322530a397ad4d8991eecce7a81d0349f95345 0000000000000000000000000000000000000000 +d034f51017ee24e9c50d31806c3e8ad1c1918f77 0000000000000000000000000000000000000000 +d0380cee75daf489f1069f795b35a4af1234d4bd 0000000000000000000000000000000000000000 +d03cdcbd0e1f4351819f9b9f3c936c7a62a03b6c 23fdaebf36d44f40ca157747e5d1e7c9b0913155 +d04b22b8ec84869a5a9f5cea99c87bd933ca6b39 0000000000000000000000000000000000000000 +d050b624cc3fa60e28ef1d6c30f854168bc6a064 0000000000000000000000000000000000000000 +d05491aed6673bd62749597e56387ef8a08c65fa 0000000000000000000000000000000000000000 +d062eb730737173e37856fcf392bdb86d8d90042 0000000000000000000000000000000000000000 +d06a89d872f06318e443a4b5838dc77e224ac9c9 0000000000000000000000000000000000000000 +d0829ab32be5d488b8e2404f87912e74a9cc7c65 0000000000000000000000000000000000000000 +d087d2487c94095ed42608ced3289184076f9359 0000000000000000000000000000000000000000 +d0909890d3706152e3ea221660d80ddc69fb8ce5 0000000000000000000000000000000000000000 +d0967a5fa34c6ced535e6f5b1a1ec4d479f9ab62 0000000000000000000000000000000000000000 +d0a20f3d14eb391a55ade804c4d9b501580d692b 0000000000000000000000000000000000000000 +d0a57d82932db782f1381ebe12b7b9bc746dc71b 7fba9fb6ec104a82f4eae38b1bd249e8f3b86268 +d0acd7491415f931b3e0dff7f9acc92f033bc1da 0000000000000000000000000000000000000000 +d0bacd20409f65ebb230cb96ad3af852f73ffd37 0000000000000000000000000000000000000000 +d0c20ab2209b3e7ed57cb89dbd4107d915975302 0000000000000000000000000000000000000000 +d0cae6626ae17cd64db584885de12cec6c80ce1f 0000000000000000000000000000000000000000 +d0cc1b6c82f4968081bdb289892888afc2f7990e 0000000000000000000000000000000000000000 +d0d83cade6bcd6e442dc8a9397463d00068bdb48 0000000000000000000000000000000000000000 +d0dc9b34ef8417d091b725006d5f4db1dfdc1208 0000000000000000000000000000000000000000 +d0ece383ceb871daca57ca4932ff4a7e18b2ba3f 0000000000000000000000000000000000000000 +d0f41afa89031a0093b8ea1ab4c40e330574eb8c 0000000000000000000000000000000000000000 +d0fb2c7b758e12c4203350a447617daf36ce06b4 0000000000000000000000000000000000000000 +d101fc30cfc701f2d6c52a51b9e39fa7eae96194 0000000000000000000000000000000000000000 +d11533e8b710e722b1160700c285ff9470e6ce92 0000000000000000000000000000000000000000 +d13dcf41f987fba5585cfe8186bde9a47a689b20 0000000000000000000000000000000000000000 +d14936c954c5aff7c0fe94e0611b926a398613bb 0000000000000000000000000000000000000000 +d1580a3260c78d3e05925acd642350a375f29a2b 0000000000000000000000000000000000000000 +d1695277839502a0f2ce1908957b6c3349a658c5 0000000000000000000000000000000000000000 +d16d3bc76ce2354689fa3e948716b464db8be2fb 228ffcfbccfdca80aae9bf5f2a5f24a4306c43dd +d180b0db3a58a60bb66f2cc509aa3e33ff665b3c 0000000000000000000000000000000000000000 +d183ad5f4a97b5378e6987c63d571272730319b1 0000000000000000000000000000000000000000 +d186b429bcce576da2be3b34fdf4f010879dae7e 0000000000000000000000000000000000000000 +d19066934c7a1a28409248cc9bb8367fd8cfff89 0000000000000000000000000000000000000000 +d1a05faca0face3e1e1fddad9ebb7bc6a77a9f53 0000000000000000000000000000000000000000 +d1a13a56e10c48a3f95c389ff655a81057eeaacd 0000000000000000000000000000000000000000 +d1aedb4425583304b61767b62b016a0d7789a464 0000000000000000000000000000000000000000 +d1b5fcaadb27a82f3bb439deb82bbb920c19f7ed 0000000000000000000000000000000000000000 +d1b8b4d4eeda113c2de8565b9dddcd8f27fb8ae5 0000000000000000000000000000000000000000 +d1b93bf87e41e9b4f861c05673ede89296b6a908 0000000000000000000000000000000000000000 +d1c6fcab6926002a053b3482974b5cf1eed0e28a 907c679913f7ca55beb8a1462cac434e84d68e6c +d1cb00205c6fd9ba1b5da73c5902430d3acfb439 ebd1a23b9541aa7360da016ac14b5fc0086ce6ec +d1ce642da602166c815753239860b0405cadae28 0000000000000000000000000000000000000000 +d1cf89f9293196080268ae49ed3c01f65c642816 a1b77cb4464fe78bef150c2a5911f41dc0e8f790 +d1d0fcb0f7cc5a2cea0e1e47e1ca764e3bd6bb5d 0000000000000000000000000000000000000000 +d1ff59924702cb7eb7b23dd8391bfbd55228aeec 0000000000000000000000000000000000000000 +d212f85ccca2c79368ced813b10f47cf1742c2d0 0000000000000000000000000000000000000000 +d21f229ad08ac1051a57bc5f4651f0d81d56dfe4 0000000000000000000000000000000000000000 +d229688eb710c8f9b45f19dcb09059f6d7f21a6a 0000000000000000000000000000000000000000 +d239dab52c31a29cf411b689e6f1323f75d50d9d aa85d28401393b023cdbe5c72f4c2575889f239c +d23ad2291462bffda2d5727f751bebbb3ee3bb80 07b40cb21fe426e2296fdf9e66d3771a103f256c +d24442d45833859d9c73ccb8840c7f918cd3ac93 503a03de37f5cf4bf96b667a0edb939b45850085 +d259cc1c40ccdaf91f3608851200d52dca6707a0 0000000000000000000000000000000000000000 +d26a6d143a75d0c9105cd4bb9de025953a0bef6c 41110d59921c2924e6e9f1465cb7486709b04e0c +d275b5796f4aa09653f451ab4efdec8fb681beab 0000000000000000000000000000000000000000 +d289ad68c3c135413ea3050999d82ea12ece65b6 73a71659592930eee4020bb6c0a90152382fd24d +d298917ecb7828702dbc1f37a2291f279cb24920 827524e48d31f0d379fa8473f0b68a9a69877690 +d29b786226a65768238adc438ee4f1fc9a0f9098 0000000000000000000000000000000000000000 +d2a6719fedf7e9f0ea6ea4484b723a7d39d41424 0000000000000000000000000000000000000000 +d2ad750a6d90c0fce08454b06eaf19ace6a13a15 0000000000000000000000000000000000000000 +d2b27740b899407bf4008a5994a989fd883a51ef 0000000000000000000000000000000000000000 +d2c7aa79dcff8325fe90127b6749acb8af2e81a8 0000000000000000000000000000000000000000 +d2c7cbf21279ff4446b8e53066c5822ca5a1eeec e0afdb669c85ad958ff7bf488ef4275afbc38c19 +d2cf6c81831011d330034ba8c6e79f40446e6a46 0000000000000000000000000000000000000000 +d2dc8ecd44dcc4a59e902fd83f6b4b447855264c d09965612e7c0dfe142b7abc5247a71e18222cd3 +d2e4111198a435547bacfe62a5626e4d78114f8d 0000000000000000000000000000000000000000 +d2fb8ba6033b431c96499af68ec3de87ac47249d 0000000000000000000000000000000000000000 +d2fe762a4a47cfba7c56dedeffa9bda71a396c2a 0000000000000000000000000000000000000000 +d302b5d60c40f598565c48cb8b80cc2f6b64c6d2 0e0dae3dbbce4614059bfa8e55f3092cd167724b +d31b040c42989a29f59a987fd309eaa86e475cf4 8c820073f72f0eb7497cc3fdcac9912053db39d4 +d31ed4c9e0a095eb247de450b3122f0b1dd675d6 0000000000000000000000000000000000000000 +d3547b2c1cee40f852faaf5d5c8817ba2a83cc00 3905733942b3830c6acd5a11851d1604001d8f18 +d3685c3c9821c656bb651411edc633355ec560ca 0000000000000000000000000000000000000000 +d36abb6beeb0043c0b3ec8094bdc1d98f4bd262c 0000000000000000000000000000000000000000 +d3833c4872c8182f3c921e1ed03723e05b18ea48 0000000000000000000000000000000000000000 +d38594a61d3836daaaa16784c00d554ce80bed5f 9490bad74e9917276b19f04bbffbb029944a9aa2 +d3a1f2b26c195d5d39691a3abf648b98460045f5 0000000000000000000000000000000000000000 +d3bf3223f8d7d93d1deaea1225d53f398d4a1918 0000000000000000000000000000000000000000 +d3c4dc296507ac99ea5fada7b3394fe2b25b5bde 0000000000000000000000000000000000000000 +d3c758b0d4421d1da9979587dfaee91bbdee0c7c 0000000000000000000000000000000000000000 +d3d571e7194663fb6c7167b022f1d91de6f5e806 4e02af020112fbe47c712795b6a70a9a33b07338 +d3df64d8595629fefe669c4eae7e65d8412e19f8 0000000000000000000000000000000000000000 +d3e5b108667a210d98f692f1bce647bd09d02939 0000000000000000000000000000000000000000 +d3eb93599bde114dfffc76fee339489b9ca85950 0000000000000000000000000000000000000000 +d3f9c1ce7644edff613ff07f49f6ecd3a1b86f11 0000000000000000000000000000000000000000 +d3fa9ef207293a24003a42031eebe85bc5ae2677 0000000000000000000000000000000000000000 +d405592979bd18d95cdbadf99fd75df680eea499 0000000000000000000000000000000000000000 +d4057f23b08ec9832a9f9b75e7fa1d962f60481f 0000000000000000000000000000000000000000 +d40952a877464c1563ac35d9f9ec15389ddf74c4 0000000000000000000000000000000000000000 +d41cf71d7c65c3adae3486003a73e43c79644a84 c7a1f16a974ecdc838eeae7a947ee07823338cfc +d41d2af6527ef7a37e4bbaa0f50fd1e79b962e70 0000000000000000000000000000000000000000 +d426c06a8c797911f97e355f1f3363d88f19efff 0000000000000000000000000000000000000000 +d42bd94fb872d226d830936a17f1a1ca7d6a5226 0000000000000000000000000000000000000000 +d43256745f1ba8446346e824b5bcd366eb70cad3 ab85d1d650db0faadc29d9dbba6789882f8b7f7b +d4451e9f74b9d766185d20a3e3104654a27fbc32 f5bf4cd89f88e490720088f1cfb26bb9407df972 +d455059f7977314929b2a46b9877ed53cd570c0d 0000000000000000000000000000000000000000 +d4572d5824c9a9449bc91c52ea746798912b7993 0000000000000000000000000000000000000000 +d4597fc82e1b0854905a94d2757f73e3d3ae8535 0000000000000000000000000000000000000000 +d4660b3bed247fa7ba736e2b90aa98296b7c4ca3 0000000000000000000000000000000000000000 +d479ec3533df40a5b52671d474785627fe022b01 0000000000000000000000000000000000000000 +d48bf093e1ed4c304d9f48826e57155ab9824d80 0000000000000000000000000000000000000000 +d48c2c148afaafaa6940482d55c3670cffa7d548 0000000000000000000000000000000000000000 +d49167e9d078ff81726a7e3c8dc7cb5088ee1f6c 0000000000000000000000000000000000000000 +d4958a803ced013260be89ba6b19ef3641a75082 0000000000000000000000000000000000000000 +d49c38dd8d9dbfe2d16023ed1a05632c801a48da a9d49a5f9240847b15c4d63e8948d84edb1cde13 +d49d0aebf95ba6d97af7f7d9f3ce22c868ddb4d4 b5c754fa8779118c9400ec833c443f1376ed3671 +d4a0b8ea59b8794c1939aad0918c0ac5206bb0e7 0000000000000000000000000000000000000000 +d4b2c7bd3701c67f3f58048fd13d920850598f9c 0000000000000000000000000000000000000000 +d4b6c00962462f808fdf7fcd997da80ae9af5782 0000000000000000000000000000000000000000 +d4b6e8d1e9f3c28e5b02d3f6b27bf7f74de6ffd8 0000000000000000000000000000000000000000 +d4bc21e459274b3c701f46e64c113bc8561bfcff 0000000000000000000000000000000000000000 +d4c1795efb8731e5a0cfc778557cc62a15c52d7a 0000000000000000000000000000000000000000 +d4c836383fbc8599afa3fe221714fa29f98afbc7 881f3d94be14c45b0d5badb8a5b4c3b8975dad6b +d4c9630e5b406c727908e9c4a7d6f0b13daa31d3 0000000000000000000000000000000000000000 +d4d59494bdc7ce4a9d1636bf34c800849f2544a6 0000000000000000000000000000000000000000 +d4d70959c9f33da2f0cc0cd9b27bf431bd0adb51 2ce6b87bfed47b4b00df993c4761600d6624f12e +d4e155b6d66887f28cbb13fb22ba0d70eabc4139 0000000000000000000000000000000000000000 +d4eef1bd93a609f6df391e2609666e5d8fdd8c4a 0000000000000000000000000000000000000000 +d4f9a4fad09c13ee604a05303d0dcf2d505cade7 0000000000000000000000000000000000000000 +d4fa9c706b29513357def17dba645befba8742d0 0000000000000000000000000000000000000000 +d50b393b625024e849de8499d5b277425c38bdc2 0000000000000000000000000000000000000000 +d50f8577ccb2f2b54683a9c6026f73037f5905b1 0000000000000000000000000000000000000000 +d52190c88ebf9854e3b1e9be4e1c73d68994d850 0000000000000000000000000000000000000000 +d5257a5e80c9903154ec833b4631dd365072cf60 0000000000000000000000000000000000000000 +d532b9d2b1b282f9307f45267380ade3571187ba 0000000000000000000000000000000000000000 +d5517ad05baf60e5f22f29fa3f7d743d2dfcba88 0000000000000000000000000000000000000000 +d551f874ca3643d8b7e56702ab4d8c4fbb5f874a 0000000000000000000000000000000000000000 +d554cbfe5d427bf9f2637d41ece0a57da6dc50a2 0000000000000000000000000000000000000000 +d56a025c830bed1ecf610531e770736edbb2e034 0000000000000000000000000000000000000000 +d57aad8dbd62d45d43aa59aec80797543fcbfd71 0000000000000000000000000000000000000000 +d587137b4e1456b7a6bb45162ae76898dba0e65f 0000000000000000000000000000000000000000 +d5a5f8a8890825824f31187355850945416aa7ea 0000000000000000000000000000000000000000 +d5b11ea2c8a8b68e5060392df765b34f155bbe0b 0000000000000000000000000000000000000000 +d5b1b5e3c61547259f1aa6704c1533ca0c337c6d 0000000000000000000000000000000000000000 +d5becc539edf648b9b29a3bd83f1eeeab72d6669 e6a5acb06e427dcc6b9f7b75f703c568c1ad17d1 +d5c0b0ba375d532f803494ddcb1d5a9670f2e5d3 0000000000000000000000000000000000000000 +d5c9ac8888ea6f5052e9ada504dea7fcb227d062 0000000000000000000000000000000000000000 +d5f3912dbc2e394c0351ec6ca3b08b77d9605805 0000000000000000000000000000000000000000 +d6008259abf6a9e95cff9bf18d46fa096bb8b53f 0000000000000000000000000000000000000000 +d608cdc89d3005297c4a68a726f8385e2f40a1b5 0000000000000000000000000000000000000000 +d613e4e70b23358bb093d85737e311068aa0c644 0000000000000000000000000000000000000000 +d61f18484c17aedf557c2d43cc22ddd3de2f86e4 0000000000000000000000000000000000000000 +d61f62902a9e3f972b7cd9fd74b067d563f37839 9778702f5f5a38e8bd985c1c0e065d0a86bdc1ba +d623586487dc38dd3190b018f51dcebee4e7ce25 0000000000000000000000000000000000000000 +d628df8d450d630aa070f971d03de4cc07e78c75 0000000000000000000000000000000000000000 +d639dd551fe72371998db19b22d0eccaab575d3e 0000000000000000000000000000000000000000 +d63dcdef5d51ee8f8ff10d9f07b3a59d6c15aac6 0000000000000000000000000000000000000000 +d6593ab06af1293ff2d7563f10b32f1df779b2cf 0000000000000000000000000000000000000000 +d66a59afdd6ca6017e6a72245e55ace158653355 0000000000000000000000000000000000000000 +d6823773056da29c7ad4c4507bc62c71461cbe7a 0000000000000000000000000000000000000000 +d6962c357d490086ba5bdc43bb6518416c5c107e 2ff0190e24354c6cfd9dd94b10c667ca9cd03317 +d69ed7df0005aead185124bb72a95f84e26e5239 2003512e0ee5d4334597fb911d3997d4dccc382e +d6a5fe419496b79c96b4e24d0fb58ff68c1a369b 0000000000000000000000000000000000000000 +d6a6b534cf5357a025a8487fd2aa2a45faa652e6 0000000000000000000000000000000000000000 +d6d54e5d6c433214b934993a96cfb147d8be17dd 0000000000000000000000000000000000000000 +d6dba1067d705e05b8cad7193605469f089acba6 0000000000000000000000000000000000000000 +d6f54f372178f5c60b3ffe60ca00de4348a4572e 0000000000000000000000000000000000000000 +d6fbdacdef9425074a10e2fdb7b79a0d8556b367 0000000000000000000000000000000000000000 +d703a5b63ed8176a983c699feefd273a22df601c 78a2f33fc084470c673391ccb9e40d9793c7d12c +d7064c42a2a85d36cee8212d36b8f078006fa091 0000000000000000000000000000000000000000 +d71e3716942587f6ff43cce6e8d121af18cb93c2 0000000000000000000000000000000000000000 +d71e9b086130a2fa445d39b1253b74815c2018a7 0000000000000000000000000000000000000000 +d74469405864fe36b7f7228a693dd7fac278176f 0000000000000000000000000000000000000000 +d744e64122ed69c74ab9bfb0202bd1c60cfe082b 0000000000000000000000000000000000000000 +d75666ded017bfa175662a7753a31b0edc047dc8 0000000000000000000000000000000000000000 +d7588036d4cc02e47e1d0b94f110e9aafb32b830 0000000000000000000000000000000000000000 +d7616ee3f5dc44f1dc5957748a96d52ebd6de836 0000000000000000000000000000000000000000 +d76388fbdd1497109017498b529955c28252ffaf 0000000000000000000000000000000000000000 +d763e535092e21656f827d591c7d5ec6c826326c 0000000000000000000000000000000000000000 +d766cd27eb2901bf5ed51190f257da26ae4f2fd2 7dac0515f82af912150aecdac0d2adb4a95f3cc6 +d77d40aa0bd1cb56087227e7f20a1820103dc158 b3205cc5f55f4ad4087aacd629d1d0725991365b +d7866c9250644dd1703904cd2c6bb0392239cfd5 0000000000000000000000000000000000000000 +d79395555eaf5ff8815d6477d681e43015c427d1 0000000000000000000000000000000000000000 +d79beeff76d4d7e83c300db7b88d06e336d9688e 0000000000000000000000000000000000000000 +d7b19ce806b2b0bf49d8e0d7c16f3199a2879c18 e1618040d0efddf25434aadccbc6095c09bf4280 +d7c462163272a26705f9b30f2a6c407c74acfc0f 0000000000000000000000000000000000000000 +d7c6bbfa2aebbcafbea0dd5db4d9a69b1bf35021 0000000000000000000000000000000000000000 +d7e1f919ee61e7cd4596f216890e16c7719e99c9 0000000000000000000000000000000000000000 +d7eaf4707c26351cff4e4ec798b64967d9dd932f 073425570df91b4a6b61552b2fa177efc979b274 +d800e21e26c974f2ff29f35b8ba88ae83655023f 0000000000000000000000000000000000000000 +d8041509205aa595c904551a8aeda8ecba540687 0000000000000000000000000000000000000000 +d8059a228a9788b3e8302a15c8b7d57d61034ac3 0000000000000000000000000000000000000000 +d80c99f4bb48254d5d0708be6cc5c2684a6bf75f 0000000000000000000000000000000000000000 +d812ec5d97bbe9f24a8363c28e9dd42b43eccfa9 182d9462d1d93cd95ace4b8dee6608b9ae09d0de +d81f53c40ecaf8d2828af5d9a80fe31b5db3cbfb 9d6cc4b55bb32dd38b0849add03ec7c89494d062 +d841a2ae249761037639068a3e021bdc1f746606 0000000000000000000000000000000000000000 +d8553d6e007c1fa38bb982c9eb757678e789111b 0000000000000000000000000000000000000000 +d85a810cd56b324306a426202ed007718f394f47 0000000000000000000000000000000000000000 +d86f230343fa55dd4ae55f18ca914e527f4a2637 0000000000000000000000000000000000000000 +d87255162ed3dc4db7ea8c24824eb310ad6a3fb1 0000000000000000000000000000000000000000 +d87375dc8d463fb348938acb1ed048b5a5dde166 0000000000000000000000000000000000000000 +d87393d2df2f863981d43effd4d86b989c33b9cd 0000000000000000000000000000000000000000 +d88a0606e4101ddf8b318d1671d71398140dae28 3e0d2a2f03f557479fb52d57e925aaf37d3223b5 +d88c36facc220610cdbb00e7d49b195b1cd9ea2f b62a586fde48611be236eb69feb0bb440ee5c932 +d88e18ca46d2252d025efd5fae80ddec80d5ae6b 0000000000000000000000000000000000000000 +d8a9e28bc8a3c3f5135d9dcdcb2791a7eb9a4f7f 0000000000000000000000000000000000000000 +d8ad5f238afb9b8740ccc6093a232136f4d111f1 0000000000000000000000000000000000000000 +d8b7545946c7e6f2923a7a9244930b1c370291d6 0000000000000000000000000000000000000000 +d8b89d9da501bcc7e0af2186bcb4445785ba1e5f 0000000000000000000000000000000000000000 +d8c159331c230154236faafc315d008c61f3eb7b 0000000000000000000000000000000000000000 +d8c39ee422aad5e22048af8be7a28286e11e3c62 0000000000000000000000000000000000000000 +d8df45b1bed286db9b89049ace9762ba4ce15251 0000000000000000000000000000000000000000 +d8e2fdf9fd638c79d0600d3b97b5cb10a4ca9491 181873a290f79396fb1144c2bcd4e5d9c1cb96c1 +d8eda7aca828415f253aa6f0ac3780f303719f51 0000000000000000000000000000000000000000 +d8fdc5ac9637cfd05428fe0feca9313356969e70 03b2f63de72726c0273af52303216808be24261f +d92509f99cb7153f837f2f83b48d9fe0dd3ea3ab 0000000000000000000000000000000000000000 +d93689c87ababdf64a82dc492a19b963f65b3fd1 0000000000000000000000000000000000000000 +d93c6c30aad36799536e9960bc8a782c0ff84ed1 0000000000000000000000000000000000000000 +d940bf627bf368733b558dab088f32e3c7c82306 0000000000000000000000000000000000000000 +d9644040da5cf4265a6fe2ae9e8988ee6e2e075f 0000000000000000000000000000000000000000 +d96749fdf130a2fbedf904e573e8641bb613d227 0000000000000000000000000000000000000000 +d969fdc12632ad0879b9fe07d3ab736b21ae68cf 0000000000000000000000000000000000000000 +d96bba72c383cd5db2b7032530aee3b4d944ebc6 0000000000000000000000000000000000000000 +d96fdd8a3526372c28aa096a2a3d856b81d7a029 0000000000000000000000000000000000000000 +d983c804c2c47416ddece05524ed7563bd8304f3 0000000000000000000000000000000000000000 +d98b895eeedc8baec3e313991ee599fd73e351fb 9dc12dae2b5725d81a2b0e6deb07df684e2563e8 +d98e6458b708e4877b66c415226af2c53d0b10fa 0000000000000000000000000000000000000000 +d99ffd6d95b6fba2b6a90b775e507455d97434b1 0000000000000000000000000000000000000000 +d9a2481483ec601f26dc0052bb488a75fb68a89d 0000000000000000000000000000000000000000 +d9a78dc5e5433d0f1b628569f4124d4de575cba1 0000000000000000000000000000000000000000 +d9b0c906f7173b81fea15001d588edcbc3eed8f1 0000000000000000000000000000000000000000 +d9b885b4f79db51617551ec1a4fa4a52140cc152 0000000000000000000000000000000000000000 +d9e7a9ee18f823caeed006178b67db1874800f2d 8631d54de1159c8af556855bc9834df543a95c8c +d9fc82bfc034954b5ed7fd317528bafbd38f12a9 0000000000000000000000000000000000000000 +d9fccee5e0254a5c44c59b894aec48b484cb50bf 0000000000000000000000000000000000000000 +da035fad3bd418628bab2969cb01fec280342cf8 0000000000000000000000000000000000000000 +da040f43428d85c0825b43e861aa81f390bfa863 0000000000000000000000000000000000000000 +da0612cbe395021cb99adb8080b401c88252528c 0000000000000000000000000000000000000000 +da0da708e8abc7a616dfb60e762970ac1ccba7b2 0000000000000000000000000000000000000000 +da0fd1c46ed1d3fe6eeee1839fbfa7481de8b684 0000000000000000000000000000000000000000 +da118bf71cfe8899f22b9a771dcec15e26206a92 7b7fec6e7cb0aa5545bf4f8d53abed5b1fb98586 +da3671efc2cd488eaa48af1445a5a216f893d545 0000000000000000000000000000000000000000 +da3dfd9dc2d67359576606c6ba45783434c207c2 194543751520763b8d0e309dd16667bd728d1ac2 +da43c98cfd7938a2354bfe57f431aa4bd0407b66 0000000000000000000000000000000000000000 +da5439c1b5af043adb6a48e94d6786de3904fd60 0000000000000000000000000000000000000000 +da5e52526f0d68841ae0e361ec0011da74a3a92c ef461fabe61da5440bee3ba7d2b8f210aa0e1d84 +da5f90a05a0c3c931cb8ad214c2dda9b0191aee3 0000000000000000000000000000000000000000 +da6396c725516a8375110a70f74507d4a5b7698e 0000000000000000000000000000000000000000 +da64594dfc73bdd2aae86670861e5863f1ab2510 1f3588b8c706f87ea2975fa7a8af9b64887268d0 +da6a4d16bdc368b7e6400ece0f153391b91acbf7 0000000000000000000000000000000000000000 +da713612292776d0f900e1bf8a012267ab2fde9d 0000000000000000000000000000000000000000 +da91427a0dc62b298960d95bec4263b2667ceedd a4997d01520ee45cee75dad8a44ca4d26dd021b9 +da9cd6af867f4f9f69e2bc70fad46b8b1e5b7c04 0000000000000000000000000000000000000000 +daaa47c9ffb34caef897f604c3771d6ec7e422fd 5da0ec5be50a1afbc65173638b38b18b7fd6aa31 +dab4ddb6742b49289103d43638617eec4b82f3da 0000000000000000000000000000000000000000 +daca2b2b7bdaccdd9677a2c4353e9fefee5c5602 0000000000000000000000000000000000000000 +daf718644a5eaa177bb31f73214140516a55a509 e19907e2a5c5cdfc40b0e944215ac852742ff2a6 +db02b957533b0fe9e0d880d580ad4c99f2bb0671 52f3d5bbed399474e2281f68688415f27a51cfdd +db081574abf10ade7f3de3d3a3f61d0d4c66fa9e 0000000000000000000000000000000000000000 +db10afaa308b3dd58cd2f4ba3e4358c3f8cb7557 0000000000000000000000000000000000000000 +db1996f8c828997b37c7efdb92c506842caf1c24 0000000000000000000000000000000000000000 +db1f10b49052536016a05b7772515f7b9f9ce8e8 0000000000000000000000000000000000000000 +db284a2df52d96ab1a45ead5e0ef279deb55bf61 d796ab2223889cacd3df2d213baf0e7ca970761f +db2e5c22879fef3dd4577ccfe57496617a34b9ff 0000000000000000000000000000000000000000 +db49258c28d2179c10f2f0ec9983ac11e760192a 0000000000000000000000000000000000000000 +db4c009e4329e71f2de2663a2f8dcd9e38daa4ea 0000000000000000000000000000000000000000 +db4c88480cbd71c7fa7ec898c8a14f5ca1bab314 9e6852d4504f176ce28a130b7ba72381689a020b +db6ba5de89500d970851ef56423213ce1add9e2c eccd440f106ba50d1534a90456aa640b84796401 +db6d3b63f327749189b5ddcbd1e89d6775abe01c 0000000000000000000000000000000000000000 +db75eed70b4c9a70782536840668b07f93c5bc74 0000000000000000000000000000000000000000 +db7891dae24eea696a536ecff7e53ad565fed1b5 0000000000000000000000000000000000000000 +dbbbf1330934bc35fb35610a6a5db65514596c48 0000000000000000000000000000000000000000 +dbd8d925f6ed24a3e20fb5e7008f2ff46b7e352b e86f64555dbd76f753b0fc598cffee2025067466 +dbe10d28bc6f139309dd6e62e61d32cf776692d0 0000000000000000000000000000000000000000 +dbf1f9e2479b15d9477664d30fb5ab0ed8996c7e 0000000000000000000000000000000000000000 +dbf4d3907dca01e5a47920dba33516da580d764d 0000000000000000000000000000000000000000 +dbf55403fdc412aed5571825129d529d9cb30931 0000000000000000000000000000000000000000 +dbf9beb8fc4e4ae58a4c03589abd1b9946bf1a40 ae588f7e368cb5f304f4710c5bd4a686c14a9a73 +dbfcf0ab20cfc5bd82974cd6db1659314941b14a 0000000000000000000000000000000000000000 +dc0bb484cffed77c2da5981b1c642485430c42e6 f02fe67cabdccb01886d426d96a101e0bd7aafe9 +dc16fedca346307ad2a9e4a1014a0d8368d322fc 2ef9f069ee96874a6b43e517d6c4f34ed77d2324 +dc179d382fd8aa54fac8268786500ee23ea2505a 0000000000000000000000000000000000000000 +dc22353553cc8b5ab393145995a1eff75a29fdcf e222d11a6596b24e0080383d8aa7789d0068dc05 +dc23acd80cd4d6f252ab2bedb5096abcb43a282c 0000000000000000000000000000000000000000 +dc25f9ec7658a8c6aaaf76afa03094bed813ea22 0000000000000000000000000000000000000000 +dc2ce696167e7eb4caf0a8f1c94ccc66870c9604 0000000000000000000000000000000000000000 +dc300ab567f94c0c92142d18266d2e380db2e085 0000000000000000000000000000000000000000 +dc319ec435d05ccfe09c4c6cec0d9219c22732ec 0000000000000000000000000000000000000000 +dc4e16fb3c27fa6bf18633b9570098ff9e005a67 0000000000000000000000000000000000000000 +dc5de444f19ed9202bf84185853ea102339b1623 0000000000000000000000000000000000000000 +dc6b0fc9e38c7a766275cc286e18f903e154087d 960e4347c92a5dd088336cd2f1bff245d848459f +dc6fee72c37e3915ea6e353d3773ff9494aa7fda 0000000000000000000000000000000000000000 +dc7a40a753867c63557a07734666909c4c0cd331 2b1cf18bfe586f105e0ab961abfe034725efd4cb +dc7cef8a3f529a920f7bbc54517f2222fa5036d2 0000000000000000000000000000000000000000 +dc8a7572ec436c1ed35f5a6208c6aa868702dc0f 0000000000000000000000000000000000000000 +dca31513f5dafa879c2a0b36fe85dc174faa2b1e 0000000000000000000000000000000000000000 +dca8aef5669e0fd3a98c7872011dfde499026cc1 0000000000000000000000000000000000000000 +dcc1e834a6a16e9216929a58b6c1b4c28dc63f8b 0000000000000000000000000000000000000000 +dcc381687c99c55323809c1bb12ae90982d18222 0000000000000000000000000000000000000000 +dcc7b7f00ae5dae05372bcdc9c9721b5bad976dd 0000000000000000000000000000000000000000 +dcdbe189c05ebf430e83fa76fba4630608824f16 0000000000000000000000000000000000000000 +dcf79565b418665824cbef9217f4c5facc41a281 c4b6b02b1158600f527e2c4814f47ffc0fb8d0e6 +dd0737f4b6134ac29131f18c74f4dce53102be2b 0000000000000000000000000000000000000000 +dd08d867ca48435836a6f7db73833bf20b48b5da 0000000000000000000000000000000000000000 +dd1fab68b2723331fb4e08a081d05e452e1264c8 0000000000000000000000000000000000000000 +dd23ac466405af1a6c2c5a99567a488dadd8ca59 0000000000000000000000000000000000000000 +dd3f13ca6cb4da4199a8e300e72bf8dc8e2b6b8b 0000000000000000000000000000000000000000 +dd5a9d6f33269413cce29b1eb6cda779b243804f 0000000000000000000000000000000000000000 +dd603711fb99e9af193c3ca266ca353b8fcb32cd 0000000000000000000000000000000000000000 +dd62076278054ee1fb23e3230e2e6c78ab7a5f81 0000000000000000000000000000000000000000 +dd71aecf4245f18e6673de4e0c1555362a785375 532f5e653eb3fb3ba313427b05eaeb632b89b586 +dd7f72bcf5d9510029ca986a198c97eaed509d02 0000000000000000000000000000000000000000 +dd80ab7464495af86c1bc0b92ac38aecedb8368d 0000000000000000000000000000000000000000 +dd8b848ea167d36d50ed0c4cf86ff91ad450cae4 0000000000000000000000000000000000000000 +dd97ff35c9565f7596929cb89f459e9b3f90cca7 0000000000000000000000000000000000000000 +dda0fe4de39befe357b3a70fbee9d58085cd0d6d 0000000000000000000000000000000000000000 +ddcdf25fa089bf7ddfa03e8f2b95043736a49338 0000000000000000000000000000000000000000 +ddee0b22fa6ba9b35db78d7a41910a227b2ef622 0000000000000000000000000000000000000000 +ddf17fec76f8fe27390d92476330d0b695133274 0000000000000000000000000000000000000000 +de1c5faa15683d8825e0ead2e3c4f84ed983f635 0000000000000000000000000000000000000000 +de1f7968891a89f9a95e4065eccd838b57281bd7 0000000000000000000000000000000000000000 +de33d934658acc767aae79bb9bb2b3e0ee9d1c12 0000000000000000000000000000000000000000 +de3531bc944bcb2bbc55e278e28f1a05d6d0a29f 0000000000000000000000000000000000000000 +de388c92d0b17518dd9f64df1bfb852781a836e4 0000000000000000000000000000000000000000 +de3ebe35a55d068a3dc4adab2dd99fe0e780ddbc 0000000000000000000000000000000000000000 +de464a5ca75af6053b3eff9b4ec17df90392163e 0000000000000000000000000000000000000000 +de49dcde12801caf635f92cd6a858cb8644dc4f1 0000000000000000000000000000000000000000 +de4ea2232bec7710cc94820743844827542e2bf0 07d7efaced054c6ff8ba98f580cc596cbc7885b8 +de5f430cb550cf5d0b2bc362b5d33e8642e6f75d 0000000000000000000000000000000000000000 +de67e959db2b9a01ca4f24a8bdfa88be557ea1b6 3502eb4e8512a3ca343725ea1e93e8af4ea65021 +de72343b31fb5cd9f4e959ef7f745d5c6bb1710f 19523229408e862a75f31a667f7d85eac7ae7266 +de72b1dd2ad152152bd36d6713fffd8b8670c1fd 0000000000000000000000000000000000000000 +de74419ed9679c0c6ecc4c70a0b0ff140931881b 0000000000000000000000000000000000000000 +de79734c697bab1d521962a6f6042d674180b40f b74e297f9fcac14d70cc2324cacaec1a54383b8e +de7e3553c238bde75914b30fad6b205470c2f5c9 0000000000000000000000000000000000000000 +de83a99502ef62da68d77fad2f749beb81ff8b7c 0000000000000000000000000000000000000000 +de9d979ec3f53fb7a86c43309f7e87d20d89d22a 0000000000000000000000000000000000000000 +de9e457a537efe7849bf59c2ffd1d65b99b165c4 0000000000000000000000000000000000000000 +deaa2fed7de2b21464307018ba5af574c5fd7128 b74d1cf5ac6a524a569808a9d8ecefe51c0c6c0f +deae2830c30bf32ae0cb93303e20fa67f19824c4 0000000000000000000000000000000000000000 +deb0268aa6d1beecece8bf8ce22fe041c29282ee 0000000000000000000000000000000000000000 +deb0c8805dcf9f5e7ffa2f1e4b17370edcc55040 50d60bd7e326b5ed3a8d2994a1b17ba2507524eb +deb647ecfd46e7c740d072c335b299da169f353e 0000000000000000000000000000000000000000 +dec44117689ed07a234cde0b226e385e3ed3297e 6c7eb8484916fffcca9191ce1babd9b852a55dc5 +decde9db830ecd5ddc5d0d7c49cd2d626c324fd0 0000000000000000000000000000000000000000 +dedf3a25fb72c7e7d8c2060179fd816715bda67e 0000000000000000000000000000000000000000 +dee116c49fadb35d2d9d2e22ffdcaa211ba8cc38 0000000000000000000000000000000000000000 +deea642a5c9a1dd96b88243cdc353f3e3fb66f57 0000000000000000000000000000000000000000 +def1b87901457884e78930ed9d48510ec42e0fea b071bfb61f38785a2f5ba3d1329646ff34240a4e +def8b924dc5579cf656a5f06ddae90ad93e5c178 0000000000000000000000000000000000000000 +deffca8fc245d5c1af5e4b5180d8e0867a4c87ac 0000000000000000000000000000000000000000 +df06a39cdc734de60e47a23e85eb34c07ef6ecee 0000000000000000000000000000000000000000 +df0aafb33079e240cc1ad249f29512e1efd6333c 0000000000000000000000000000000000000000 +df0fb111c82e8cd97f5f725888178ae5fbe33f37 3fddacd52bb42910a264d9286c339f0d73b5cfe6 +df17114ecbdffc41381d1b2520eb89675bf3054e 0000000000000000000000000000000000000000 +df1b405e537d0f3c2a829b6a80fef82959d0eab5 0000000000000000000000000000000000000000 +df254a5e668c54051f1b0c7b506cffa2785fb6a7 0000000000000000000000000000000000000000 +df3744d165750369435fc93c8a2ac1a4d5b3280c bdd7e247a2c865263d86e6e604ae1b1721f75e6a +df4078156c2259a7ad70392d2d230d22426ef0c8 0000000000000000000000000000000000000000 +df5d0c75cfde4ee5ae222d216eb30c9413cd9b90 2b432b43e3f378b8b6fc1df76de5d597cc3d23df +df5fc1e56c6588b3136d54ed461978b6945b1f84 f5c373bd8098f9759af6899ba51a400d6f7054aa +df6006dda9b02589b13fb693bc9f75327c71f5d5 0000000000000000000000000000000000000000 +df65299b34981e45798160cb0fcbca413c243898 0000000000000000000000000000000000000000 +df86936a55e2788a68f940184df166dd4284051a 0000000000000000000000000000000000000000 +df8cdc03adb80c68e02032b02d84409a9398ad1c 0000000000000000000000000000000000000000 +df91f8d7a32f561c08af2eccf85b434de91f0700 0000000000000000000000000000000000000000 +df99a00010001b35b34f9b74bbf12437f90b6b18 0000000000000000000000000000000000000000 +dfa158b17618869b15e4bd4a5cb2e0b8a8ae5d0b 0000000000000000000000000000000000000000 +dfbce813d72abb03eed1602d04e8e01270df2ca8 0000000000000000000000000000000000000000 +dfbf2deb1e1df0990140dc365114dcff1d7acc3e 0000000000000000000000000000000000000000 +dfd6aeb83efa16c90a052262c7a9693fc9863569 0000000000000000000000000000000000000000 +dff09e333e58d96478ce333e11d801c061d07f78 0000000000000000000000000000000000000000 +dff6ff7aa0e66a1aba4355bdbab601eb38c80b06 0000000000000000000000000000000000000000 +dffad37a7967893df9959fd2036a93ef2a3168ed 0000000000000000000000000000000000000000 +e00d302b70d8071c5f44c3701f14f2c3f882743e 0000000000000000000000000000000000000000 +e01b885edaabdfaabb632802829765e670f3e7e1 0000000000000000000000000000000000000000 +e026c5819bb3a96a1cb5d57cb412d1cf4165f2a1 0000000000000000000000000000000000000000 +e034d0ca08dfe3be0c71c0a3d806961bf56ef0fa 0000000000000000000000000000000000000000 +e035981792b709f524b464f87d1d9932bced42a4 9e0ac856116e662b3daad54cbfcea1020aaddd46 +e036750dc7dadc77019e3e5c59583d727f91a20a 0000000000000000000000000000000000000000 +e0395320915ae549b0679ff7a0f2e869f8706d97 0000000000000000000000000000000000000000 +e03f1d23293326f7a4a688bdf8c3692f86ac09a2 eab43ec1bdae84f3227a34d6857312a9c6b13eb6 +e0472916ee3154dd4180d82194b442d97f0352e5 599fb623b87808fe85652e5a94b1d04020ae58e2 +e04ae7c08b32d09b8c171774dad6fb4fb66596c5 0000000000000000000000000000000000000000 +e055a60576016fa546d0cb6c1bf5dccbe5c15e77 0000000000000000000000000000000000000000 +e055dde74ada6ffc54aa7d8e70d040a26de35b82 1cbf6d4d4368647b92b8a93d4ad00eb40f75973d +e058e01b21e618f2c398e50fd47fdcd437bcfc48 0000000000000000000000000000000000000000 +e0658b64f797823d74cf2f9f8ccced0d7649543e 0000000000000000000000000000000000000000 +e07a980b14543a07dbdaa912262cf1ef53845ac1 0000000000000000000000000000000000000000 +e09fb3865663b1f3b6295db357837006208760aa 0000000000000000000000000000000000000000 +e09fe0043443c8e8354b7b260e6f1263c7306acb 0000000000000000000000000000000000000000 +e0a3bb27a5f9b17b710ea8d1d80d0308414e23d2 0000000000000000000000000000000000000000 +e0aba68aaa9ce27ad8f3fb5078792a4571d68a4e 0000000000000000000000000000000000000000 +e0b30619c15a02d6d009a9a095df891dcc3e961e 0000000000000000000000000000000000000000 +e0b36a7b4382775587f7efbd0d0876dac1b4574a 7387e81ce5664d135f4604a9d1257e76c2f7aa75 +e0bceaaa39e8e475652b390324254149e867f39f 0000000000000000000000000000000000000000 +e0d08f80c3f289bcb199180d2c0053150beb9af9 3d1d7302bc5e6a913c484d8cb9eb6ad7d16c197f +e0d5e9d105ad1a7b29ff6c628793614f5610f048 0000000000000000000000000000000000000000 +e0e0448dac1286e23764cd82a1218733625337a0 0000000000000000000000000000000000000000 +e0e5ca3e811d24ab1dc36358f33f7352b31f1698 bbdec7702332f27d930fa8c2ac8c2ee8c3c71312 +e0e70ff5681f4926340c180544f3bdb736b4e4a6 57eb646cb5bf9a4f21ee56f85b370483eaf37ef1 +e0f0ed66f9299abfee8e1f7269b4af4c517ff7b4 62c72f2fc8d656f048fd1da79c2b7eca39da29b0 +e0f20d00b2c554282b26aaf03c9739806a8bd516 0000000000000000000000000000000000000000 +e0f976318de738e287f404a4ad04324492900923 3947eb0902d3f56c362e42f8c3aaf7a12587e104 +e10290fdaae66010790e87d71b995ff12a5b22cc 0000000000000000000000000000000000000000 +e10cbd32c63e58a3b0851ea8551bc51bda04c43a 205b5966e04b833cacc56198277a1c4c8e3343e6 +e113266f5d9e5c990a6fb1ee9c00b4b222d99bbf 85a27aed30525d253c56f01b2911a24cb0a56ba5 +e12301cb69dcd05f063c8fc75dd07081befd5c73 0000000000000000000000000000000000000000 +e125a56b096ae4e69a9a2713469c3b3832f32d29 0000000000000000000000000000000000000000 +e133de07ec8b91d4ddc551ba7649a284ad37b2ca 0000000000000000000000000000000000000000 +e13fb0144e7bae2d22f01e6e9bcef685200185a5 0000000000000000000000000000000000000000 +e14258dd2a8639702c8e0bc81a643874d207facb 0000000000000000000000000000000000000000 +e147e72b119a28c2afacb8bb98c6c9f34cb4f893 0000000000000000000000000000000000000000 +e14fb34fdbaf5b88434961cbed368a520e6ee51d 0000000000000000000000000000000000000000 +e17dc69e8f10aec6a8b09ad7e20831f14478798e 0000000000000000000000000000000000000000 +e18748fa264cfd01dd817468ad3b8b374c7d3bc3 0000000000000000000000000000000000000000 +e1a379545f5c641904b60472df0b37709a700a87 0000000000000000000000000000000000000000 +e1b234cfe357e869b4900f8162ce93cb67424b16 0000000000000000000000000000000000000000 +e1d5f4e9e0916b4d66d19554773819ac09b6f314 0000000000000000000000000000000000000000 +e1eafeadfee8b7830a26ba773ef72bb2bbd5b80c 0000000000000000000000000000000000000000 +e1ecbceea56bcf79326179b2d969a153666c8a85 0000000000000000000000000000000000000000 +e1f0cbff03fd8fd8945c5f8cf778bdab0e8a8fa3 0000000000000000000000000000000000000000 +e1feafe276a9228f060a665f11608ab3b3145810 0000000000000000000000000000000000000000 +e20fffb70d5e3b7a9dbe30c10ac3928b29cdd5ca 0000000000000000000000000000000000000000 +e210137335bc20027df5ac7b111c396fef2c1fd6 07ca313e0fb1483a92cbfcc4f8e7321ffa708b1a +e222e36f2c9a1e3fcb14250801038963b41c1371 a72f57d43a79bdaa8affb44b36d71740b1c7cf6c +e23a86a2a482af7028ecc4f6df9ed1a6ccb83490 0000000000000000000000000000000000000000 +e243f4efcb74d489a616962956ae885134d2e3c0 0000000000000000000000000000000000000000 +e25dc2b44ac5e63776c4a6253764a14ac7abd2fb 0000000000000000000000000000000000000000 +e26140ba4e5a7c9debea5b863fe7b2d2e29fc194 0000000000000000000000000000000000000000 +e27a4e884c8b2f647e27f24d1391a7def1cd8254 0000000000000000000000000000000000000000 +e27c0e7c7fe645bb93aa96373097b310bc80c453 0000000000000000000000000000000000000000 +e2830e603ff22d4d5bc28c462e9a21e6b0e350df 0000000000000000000000000000000000000000 +e28c438a0046c4da4eb6a22e7b450f1546376dba 0000000000000000000000000000000000000000 +e29b387fd840be3207674ac316255cbe8da798bc 0000000000000000000000000000000000000000 +e29c01d3553c3cf6cde34c9ed63f66bbc9ccb8b1 0000000000000000000000000000000000000000 +e29e24c58f51af4f6a39aeb65041dbd7f7ab888f 0000000000000000000000000000000000000000 +e2b1602e67aff18dc889605faff508a256be07e6 0000000000000000000000000000000000000000 +e2b84563120e947a9b2d2e8bb5c16e7ca2a59991 0000000000000000000000000000000000000000 +e2c97ec517b2f6700e85fd1e277a8e29195718f4 0000000000000000000000000000000000000000 +e2cd11172f4d9bab67c5831d7391e8aeab77f24f 0000000000000000000000000000000000000000 +e2cec26770cfb458924ae0cb21b8d5b8bd164c0d 0000000000000000000000000000000000000000 +e2d08592925bca467b37c76f8de26d7d6e2291fa 0000000000000000000000000000000000000000 +e2d189c30b57396f7f605331f039a8a2eb8dcbcf 8be6ae869bf34de19d6e5b2dba5f97841dae8a46 +e2e3f642ac584f032103f494dc6a9307f592267f 0000000000000000000000000000000000000000 +e2e75566e38d06fc1f87f71bbc6e8c081883abc1 0000000000000000000000000000000000000000 +e2f3766469ac51c34f3abefa6eb91e368cbae7e5 0000000000000000000000000000000000000000 +e2f8da04d321ec821bda5b6ea3bb4f3975cc31c7 0000000000000000000000000000000000000000 +e2ff5028a0dc806f2894b03cb10ece3a0b3a24dc 0000000000000000000000000000000000000000 +e3049a60cbe95f153544eed476d2b680da32046d 0000000000000000000000000000000000000000 +e3084309f4fac88e1c4f7ec8db4528864e4c19ab 0000000000000000000000000000000000000000 +e30c718fee6c8d346a300ddbe463466851df957a 0000000000000000000000000000000000000000 +e312af9fd98d75d8ea6f914f58955804305010de 0000000000000000000000000000000000000000 +e31c9dea75e61d82dc097f8647eba62513884a5b 2681b1c10b2a19e7cf8a4fda0e5ffcf76b0680cd +e323149bbae5cd146a7601db4cb588cd006ec7b5 0000000000000000000000000000000000000000 +e3310f5d29e667171a17f305aa29d6fa8ba13b41 0000000000000000000000000000000000000000 +e3312eabf418caeff9a143ab95911b75efe6c9fb 4608931d21495cb56dc521f4bdd3fc8e33e878bd +e3325b9d4cedee6a9734899906e938888f023506 0000000000000000000000000000000000000000 +e339757bfe02bbf817ca1afe05813c07260b3080 68645b2306fdcdefcd21fcd4b82271536d67c0e1 +e3498c2c632aa7771b0a91b6917ea0cdaadccfef 0000000000000000000000000000000000000000 +e34a4f9851b0fdc6bd049d600a20ff5a15ebe30b 37a57c6a7510691af578f78673513d15116e9d85 +e3558086600cb8a700841f3d980ea6ab92ecd840 0000000000000000000000000000000000000000 +e366566865ade9e6ada41033459ee9de9709ab29 0000000000000000000000000000000000000000 +e36fc9565bce42916eb7bf64d1f74d491dd1f407 0000000000000000000000000000000000000000 +e37929d37e79e0d362eeb4f7b9e2aa763d7899a5 0000000000000000000000000000000000000000 +e38c0d4721641e90e8461ec16bce0ec397e10ced 0000000000000000000000000000000000000000 +e38e511de5c90a4e73868cb292a2fff7cd7071a4 0000000000000000000000000000000000000000 +e397649e109b81cf86e417e05aa4a7829e22f866 d7db8bd43a63343786cc79a43fd712d8424ab28f +e3a5c9379a2af789fa4bea52f75f5f95d7975039 0000000000000000000000000000000000000000 +e3ae554d1263d9d089174c7de59b0c3e64884c6c 0000000000000000000000000000000000000000 +e3c1f3698832983fe39a9974c468032f9f6f1180 b93552532a5fcccd7ef26f6ada12c9d26fca534e +e3c387ce32eb125adc1c24e5598d77a291d0082a 0000000000000000000000000000000000000000 +e3c4070b261f3f83574941eb1de4b47033a7e162 0000000000000000000000000000000000000000 +e3c80a3ca660bc955f787c80cb40c1a29833e725 0000000000000000000000000000000000000000 +e3ca80ee842fd0b4d12b67fb36e98337a6bc6fdd 0000000000000000000000000000000000000000 +e3d9cdf1aaf1d7600278c71cac1d077a55d51d4f 0000000000000000000000000000000000000000 +e3dbf99357b33824b691804b83270a74c83e80be 0000000000000000000000000000000000000000 +e3e8fc73e1d99e979b6fac7af60ef4d36a708436 0000000000000000000000000000000000000000 +e3eaf4a63cb4213e3d70ee4f3a8c9e4c22f23eee 7484e768d983f96bc6eeabc4eac304e2d10f4dcd +e3fa780db7c4b59811bee2f73f7c3e05b799ef1f 722dfcb9fa99a3a3614238978cd9ea567b553038 +e3fbee82a1c7689f8a08898e828d74977fbd854c 0000000000000000000000000000000000000000 +e3ff2694849df84a48a17b004c90f437cdadf24a 0000000000000000000000000000000000000000 +e40ce7660656f1e36832161da82e2fae712a97aa 0000000000000000000000000000000000000000 +e417084f21ea8338fff0e7659d59433a6ca588fa 0000000000000000000000000000000000000000 +e41844848e30e5ddf7a75b915dc3a4d7cadbf76c 0000000000000000000000000000000000000000 +e41b927377a51062808f1610c97a0d2036c3c510 0000000000000000000000000000000000000000 +e43c8c7ea111b1db786a7caf57ceb99efb03f0b4 0000000000000000000000000000000000000000 +e4442679aa891cedca3e12ff5ddf8aab9b7544ec 0000000000000000000000000000000000000000 +e44eff5d010b39c00ca0ed16407ef717ad893150 47067ec10669251c1d46c9972e10025ff903fd8b +e4514afcc9baf74df60736bbd59215b611f1c488 0000000000000000000000000000000000000000 +e455f52f30fdb4937c27132b9596f89f17997663 0000000000000000000000000000000000000000 +e468649482600e1d659df86715c74f85baa3ff0f c4f4cf2d1126d4b46af8e34052e618705b7d1e19 +e46b82a0452bd3c32c4a58331154183d9ef2b82d 0000000000000000000000000000000000000000 +e478b75918e92fbf8124ed7cc16b674888ce2081 0000000000000000000000000000000000000000 +e47949e8bdc8ae1e7a881d3d0a00137eed38e85c 0000000000000000000000000000000000000000 +e48338d0a435c4321e994803fec6dd24487760e5 0000000000000000000000000000000000000000 +e4938be70ba703ec3d2f8ab2eca5fca253c7004f c6177b4e3990e8e946fabfe1b3c13c53574eae60 +e49e0a9d20da84907a1531bdd7ff4113eaef2099 0000000000000000000000000000000000000000 +e4a819a919fcdea1c5aac95d7b631f35d71c9e39 0000000000000000000000000000000000000000 +e4acf0951784c566695539ffc15f41950092632f 0000000000000000000000000000000000000000 +e4b0adf9eac8d0dde1d4e6e0c3fc9719b713477d 0000000000000000000000000000000000000000 +e4bc14a1598375c3280558f185d5382f2d05bcbf 0000000000000000000000000000000000000000 +e4c14a451d9d50bcae0cf9b74162033cb2954a72 0000000000000000000000000000000000000000 +e4c7a0ee7747510fee831d84804120fe4a0196c9 0000000000000000000000000000000000000000 +e4ec461f1839e17f951ce5ea84509ee60ba525e5 0000000000000000000000000000000000000000 +e4f504540b89aa5f4d7a4b27f276ed7147ee8077 0000000000000000000000000000000000000000 +e50649cbe5fe7af0054f35d3c0d13dbd13c98ab2 0000000000000000000000000000000000000000 +e5170530affd8494756f4e5f90ef7004c8b79135 f28bc4f1dada1c45a57516166e0c62dbfc4cd819 +e518515584fd3713fc00efcea2c907ed1745c0be 0000000000000000000000000000000000000000 +e521230389db3224d3ebeedf3bbac2fd3b8a52b0 0000000000000000000000000000000000000000 +e529a86fa75ec612c0c9ab03e876ba9acf083ced 0000000000000000000000000000000000000000 +e538742f51556c76de02baa73bf19a9b4f5777a6 7adbf3f63853c2a66d08795f161813b73ff3688f +e54e0c35ab967122891da0303466dc3c7903c454 494c0983efaa059c642407269876d6cc1f96f684 +e555680bbcf21dd61ac009dbbd8255213080cfdd 0000000000000000000000000000000000000000 +e55637688d2b33e34c936ea8ffc77d8ef7b387ee 0000000000000000000000000000000000000000 +e557a3921d44b037d117ae5aed8a157b66609c2d 274705d026c934c9fc078a31c01e373c35b755a0 +e55905241ae52f0f447818cb6c9223fa4b68ce5d 0000000000000000000000000000000000000000 +e57d04972c360f1367583eb9e60f750f8882f0b7 029c52f20d151b69b234002bce5e0000ac420095 +e585f4c5377fa08b20df6fed4365c91ad23e317c 0000000000000000000000000000000000000000 +e5883775c5898005b82a057a19dae2e71c359d18 0000000000000000000000000000000000000000 +e5893b69e346954fefef6b6dbb2cdca34f98910e 0000000000000000000000000000000000000000 +e59b5689c5def1d8a36e69475f082c64acb29c0c 0000000000000000000000000000000000000000 +e5a108004a6c4637d4dd7dc27a417a2d3e29d70b 0000000000000000000000000000000000000000 +e5abfb3cc2a405982b89716ccf7103cb52fac7d5 0034b9f6484a811a91df8456454d3067b8b70844 +e5babbd20b13b9e8da77337e380a92df8c44689c 0000000000000000000000000000000000000000 +e5c20624b173850265ec4476472075d06f3db291 0000000000000000000000000000000000000000 +e5c3117a854a5043c9d46617ffcf016d80333a82 0000000000000000000000000000000000000000 +e5e6430337cb4d9cae8aaa2130db478ea04a6092 0000000000000000000000000000000000000000 +e5e84e433b180504a954d15650e8c6eeb5b972ab 0000000000000000000000000000000000000000 +e5f64cb93701a6b04dd8ce2d3d31900e24dc351b 0000000000000000000000000000000000000000 +e5fe8d9069076d62c3b57ae45a723a9329de65f3 0000000000000000000000000000000000000000 +e615c3489e1f4f77d20ae8ecf6e538ba29549409 0000000000000000000000000000000000000000 +e6161124fa2510755bf5f5d3819844f9af09d660 0000000000000000000000000000000000000000 +e62c71fe9a649841f5e8cf57df1f7244cb5aaebd 0000000000000000000000000000000000000000 +e6308a80bd01d37c9cf20330ccaa400a812b8729 529bf057dafe211d3c49493ab23bd4a399540260 +e6535f7380e424668163f812da80d8e8c270b649 0000000000000000000000000000000000000000 +e65859a5b90ee2d58ad986eef708367c60716880 0000000000000000000000000000000000000000 +e65b484b512a84351054979bf2901b2462984582 b8354b5c3c6a02042e544923e659c68e7ab9a1a3 +e6655cce649e72f866cc7c99edd59a46b3d3309c 0000000000000000000000000000000000000000 +e666d3dc1fdee42fded39687d06d78ec949cae8d 0000000000000000000000000000000000000000 +e69035b95489f5c10391c3186a22be619f456ccf 0000000000000000000000000000000000000000 +e6989b5c775a6f6ec9838a50b4f338ceb8bc6dce 0000000000000000000000000000000000000000 +e6ab1cd53df8e208a44e035703c7cc9476d06988 0000000000000000000000000000000000000000 +e6bec55304c7c3043c9e81ff737e7ff157f0c5c6 0000000000000000000000000000000000000000 +e6c084c02a6990425cbca173bc100a1263e318a9 0000000000000000000000000000000000000000 +e6c08c2a238c9a58f1c0e13daa4850c6f3aee6a2 0000000000000000000000000000000000000000 +e6c56749e88e1484b6ba3b388c0904645ff80d01 0000000000000000000000000000000000000000 +e6cb02f908b6b29727e6234b8818ed025037d9fa 0000000000000000000000000000000000000000 +e6d02cb20553a893b90337366d580295cfb982f0 0000000000000000000000000000000000000000 +e6d73f6fc8784c2473b01cb5dec83cd68fd23b81 0000000000000000000000000000000000000000 +e6da67f79749a1da20424e6eb1e236e68f612fc9 0000000000000000000000000000000000000000 +e6de4a86ccee8805f17cd1c159b549bbce2377f5 0000000000000000000000000000000000000000 +e6ef751be6b6238899ca625a85b37c3f12052d45 0000000000000000000000000000000000000000 +e6f1e2f5c87bd25c40cb48880398d8e5756a6914 0000000000000000000000000000000000000000 +e6f8c79541a9a42d639a838017b93c78218162fe 0000000000000000000000000000000000000000 +e6fdb0263b9e91a65465e5c5da0d8e980e5d833f 0000000000000000000000000000000000000000 +e7062d674173197a68dbc5cf7e86350475be1599 99f4f45e876c9c99bc08d9080ccf1b0256a3034d +e708a67a0836c67f0b3c7da704e51a3e7a016a31 5f8b7ef16e21cb050d05fbd463034637d2c56dbb +e738176da233320cf0d6ff32c56504ff5c200dfa 0000000000000000000000000000000000000000 +e739083b7f975ef603eab17f7b36f2262d310803 0000000000000000000000000000000000000000 +e73aa967b50ca23ec7d901ba574a11e922caf566 ec717d3a69f7f37eea29afac55810a0a0b5a00d0 +e73ffb9d423e0854e6380e14b3c276490025d803 0000000000000000000000000000000000000000 +e7400041871fdb87c2f3a76f8683f8bba7bc57c7 0000000000000000000000000000000000000000 +e74cae9411e10f36d5877e95c0bff108b8655af2 0000000000000000000000000000000000000000 +e74d93c99fd2c3f718a4ba9dbb0431f6c5bae94e 0000000000000000000000000000000000000000 +e750191b4770d7329c3ba7ab62c7d24210e7ce97 0000000000000000000000000000000000000000 +e76101a582b59d94a98f6103fe05c3d908ef79ef 0000000000000000000000000000000000000000 +e761861ca8feb8bfcb2bf51de7533d365877a77b 0000000000000000000000000000000000000000 +e7691b8e0d8520e99904f74d09eac9c4d72d54fd 0000000000000000000000000000000000000000 +e791bf64da3d6fbb3bf2acc3a51ae8989c576236 0000000000000000000000000000000000000000 +e79e4ca20a72bf7d58f9ec952abafefdc94a2741 0000000000000000000000000000000000000000 +e7c74b8b66ce6a43935fc5c6aca8a88ba6c75da2 0000000000000000000000000000000000000000 +e7c9e1bbdbdb29bc1b7680f86994138bfac42cbd 0000000000000000000000000000000000000000 +e7d874f7042918538de05b131637ec544ec72caa 0000000000000000000000000000000000000000 +e7dfa1a2c0b79c5aa2030e2265fea19dca2b329e 0000000000000000000000000000000000000000 +e7f76f753649d5747a720b55babe2c59bbedfd49 0000000000000000000000000000000000000000 +e7ff3608f9a69a0fbcdd709c23ddf55a787dc550 0000000000000000000000000000000000000000 +e8061ac95c051c05c25681d96d92d2b13db5f3ae 0000000000000000000000000000000000000000 +e8099450b80e4f9120c1c8ebea38daa077b184f5 0000000000000000000000000000000000000000 +e80e2860a7c462f10815df883a0dadba5e837f13 0000000000000000000000000000000000000000 +e81a1c6d22dca89fae002ebe7fd7e6bf3945a8d1 0000000000000000000000000000000000000000 +e82576acdbb0eb2aa82d5f2e71dc1b4b732e9f35 d75d4c2f1dca98dab94e9d415ebf0baac267ceb5 +e8275986af7ac97f0ba4b5b33ea18eb9a5cc6a7d 0000000000000000000000000000000000000000 +e82d43f82b8939769f294d0987972758703f8111 f571992dc8339ae46395aff719871f5244e037bf +e833d1bac94e1d3393ccce5f46f18e9b2c71301f 0000000000000000000000000000000000000000 +e83ff4a45679a86da08c96d7674db1782557c880 93b2ff3bfaa633f61b6dc113513ec12ac8cd917c +e85698a4172a874c33eba6c902d60f975e51e887 0000000000000000000000000000000000000000 +e85a4f16187def48a77804a9503a521e1901d5f2 0000000000000000000000000000000000000000 +e85dfd0d8a12183a81e353c9b19b55cb8d5c9ea0 0000000000000000000000000000000000000000 +e85e4780824002c3932435b5e32d4fe62ffe15f2 0000000000000000000000000000000000000000 +e861c08442fe7b2f1b0e4079d4a007e525a75ca9 0000000000000000000000000000000000000000 +e86df13fd677ccb018ab592da1c3d41a062aa0a5 0000000000000000000000000000000000000000 +e88f0d340f618c976b61579c3dc7ca85081abe02 0000000000000000000000000000000000000000 +e897df5b4423a82c5bf0d9cbe7e5a95b8ab7fd38 0000000000000000000000000000000000000000 +e89af5bcf5acea8339fe3a97f505dd598b702cad 0000000000000000000000000000000000000000 +e8b46b3516c63f32f61cb06d24ce561c42b7614c 0000000000000000000000000000000000000000 +e8c76dbdada2c224568c051acb95d83c063ec508 0000000000000000000000000000000000000000 +e8cd960837cc75d882cea8dbbc53d97d6ecaccd0 bfc02afe7ea009d3410e2bff352084bba6b8d604 +e8d3e804edfe359c6f8b07a74e6441dbf40dfa99 f64c122a89ceacf6c8f7b1b101e8c6b8fd5c2412 +e8d504f849620610edfa5dc8aa08db490f7f7807 0000000000000000000000000000000000000000 +e8d55b55b75fb5ae8957dc36525eb1c59e751f6f 0000000000000000000000000000000000000000 +e8d741001305205ff5cd42bf315b9ce0d10b88fa 049802da273c3093b704590be19106b97ccb9b38 +e8dded76c43106059d206190a1e294d4bdc40f6c 0000000000000000000000000000000000000000 +e8ecc1a4de027f60311ea1ae162af04372bc0582 0000000000000000000000000000000000000000 +e8f55b1b2244d32cd3a18799ba6fb22ce3e2146d 0000000000000000000000000000000000000000 +e8feab037455010a1f8d8b470c5bd16071e55aab 0000000000000000000000000000000000000000 +e917e4cb89243e9345899a1118f42dd5b8845ee2 7c1ac853e52f1efbf06fc364a28bb33a878780ac +e919b33e9d09159217066248483ef4c767865c82 0000000000000000000000000000000000000000 +e924d19b5536f7ed3aed0d4b07cb9b330d05c991 e6ebc3d5e87a3d871b9e6e350527be32a40773dc +e93c6ca6dfa179a7f57d69793824a9a17d3f2d0d 0000000000000000000000000000000000000000 +e93cd4c61a32380d50af9584fbf4cfcb536a3770 0000000000000000000000000000000000000000 +e9430686aeaaee8c4bb77455a401ba981330091b 0000000000000000000000000000000000000000 +e94ea23b7f50e42c90bc1d0ead56ba527d6f1505 8c92d60ed3e265f4fdaa24fbc2d20e1eb32ddb9c +e95833a8c6a8cd15acb7ed889906212bd89f3658 0000000000000000000000000000000000000000 +e9588963bcb8acf6075d674f6a237d34b2089114 0000000000000000000000000000000000000000 +e964e9a93492c0d3c9134e60826bb9e88290c52c 0000000000000000000000000000000000000000 +e969ed67c2ed150e946cf2bb258ae60de6fc42f2 0000000000000000000000000000000000000000 +e971a7a3dac3de006a26a0afe4c2d6f79253b8fe 5b36bd55e204dcc91f486993f3aa28f4b3fab215 +e990ca537b0da1547841b407a09fb369a54dc75f 0000000000000000000000000000000000000000 +e992717df036ac502e3876cfad470109b9adb9b4 0000000000000000000000000000000000000000 +e9992f2f5b7f4d95127a68f930a602d21023002f 0000000000000000000000000000000000000000 +e9a146b20e7ccbd1b4ab2be71fa4ba3fce23fcec 0000000000000000000000000000000000000000 +e9a198544e9e65f245cd4663dc5156f42d1b0019 0000000000000000000000000000000000000000 +e9a49461f3fd4f9cc490021fff7ca3767adec71c 0000000000000000000000000000000000000000 +e9ab4412e74d4bb5d6bbae1686b894e08c800a64 33bab312c5985d822d9eb4ef37553c0279b10fa9 +e9b1c57ea6eed9de0065394e6a3652ac8d59a7e4 0000000000000000000000000000000000000000 +e9b7a59678d77d2804290256e07108870aa54570 0000000000000000000000000000000000000000 +e9c5c05f78155963f455923a2fd7660a406c0549 0000000000000000000000000000000000000000 +e9ccd674ed88015822ae466215b3e1061974f7b1 0000000000000000000000000000000000000000 +e9d2569e09874438fc2afae19122a8f211164575 0000000000000000000000000000000000000000 +e9d3660d6b6b62ea90eb745b732cd63c745ec540 0000000000000000000000000000000000000000 +e9deeeace2ed89fabccca897c7fe260d38d0e5ef 0000000000000000000000000000000000000000 +e9e214fbc0d1ea1c0130932332261f642c12f334 b506b6e4f53d9d8ecbebe3b37c7bcf109099768f +e9e5af8b50719e76186e60cc7fc14c37cc963777 0000000000000000000000000000000000000000 +e9f4ba5bd7ab65fa44577c7babe287a11c70f2a1 0000000000000000000000000000000000000000 +e9f5257057fa77adcc29e875d15cace73cf10738 0000000000000000000000000000000000000000 +e9fdbfb87d8f190407c6e4cbe38df55c56bd9a56 0000000000000000000000000000000000000000 +ea0a4154b5b18ff7a036c16384c2e865c19f84b5 86922fff1d5c772350abb89981878a5cce3efc4f +ea0dee1cdd3fb380c7c9ff00e7a7cf8d8000c6e8 0000000000000000000000000000000000000000 +ea186d874ea55e2bb8324e78bcbf22fe577cef69 0000000000000000000000000000000000000000 +ea2d73f5bb04775e377a54233f3ff8f6ae33853d ad443c1ce14dfd513580e84c2b772c26b444f62c +ea3b6197b14c01fdde1271ba362006627a2b8d8d 0000000000000000000000000000000000000000 +ea63b8b775751c48189d04a6cf0943d2236d8782 0000000000000000000000000000000000000000 +ea68427110e5f789019b46885ea45f8f6b975c53 0000000000000000000000000000000000000000 +ea6e99b2dd3d3e5af950ad265b41ffea48b7d65b 0000000000000000000000000000000000000000 +ea6f93e8c9f14c7e082b5aa5fbcf03557ee40f90 0000000000000000000000000000000000000000 +ea7dcd0baf00eb75eb49549ab7728a07c0902418 cb0e4a6fb1dc0960992e3afa27ecf8bc9dd69c67 +ea83688677d3c54e2ff3fcc9389187e2e10593db 0000000000000000000000000000000000000000 +ea8ef07ccd211b82cf6b628d2232009db9a7365c 0000000000000000000000000000000000000000 +ea95d8800cbf70cfdd824f3ebb07d9fbd01a63e7 0000000000000000000000000000000000000000 +ea99575ec7a7a0c7dd9ebb5125ac92903cc8399a 711762795ffdaef969d38c466789ff1720d43ad8 +eab9e49b16a891aaa1ed04622d5c4b1089d4fd8e 0000000000000000000000000000000000000000 +eac3d669fd49909bf3736aad600c90e60dd4059e 0000000000000000000000000000000000000000 +eac512259a3ba5d0783eef60d0399bed5b9d062f 0000000000000000000000000000000000000000 +eac5e7a074c6526123e9a001125338154f6b1697 0000000000000000000000000000000000000000 +eacc2fc06537fbb11fe95765e4fb6df09861c9af 0000000000000000000000000000000000000000 +eacfd8ade5395a1c1eed3a0def048ef2cf6fbe8b 7429e6bf960fa2aad63b6e797de8ede9c8dc2528 +ead99b1f4e3c421ae2f1b0160edf92f3a00067d5 0000000000000000000000000000000000000000 +eae3641a6b3ad6ec0ad3f524e9eb23ad7464d3ad 0000000000000000000000000000000000000000 +eae65ee0c5cbe7105aa84832231408ccdd521ef5 b31273c6ed3e602b01acb2dae0e8cddccfa2cbdc +eb07dc202cb6c4a2478f3251ee8c149808997b9f 0000000000000000000000000000000000000000 +eb0cc246b421cb1f9992fc4058e5b6a6b0106add 0000000000000000000000000000000000000000 +eb1258a60ff2584e2be01851d20179cd06875e2a 0000000000000000000000000000000000000000 +eb157d99787e0b1583946385a89357bd248908f8 0000000000000000000000000000000000000000 +eb1891a8d77915add1cdd88949b40aa43cd525b8 0000000000000000000000000000000000000000 +eb2189d08502574741dd997be06a09c8033a63fa 0000000000000000000000000000000000000000 +eb2b8082999bdb9eee9199bf790a0a36e9866aeb 0000000000000000000000000000000000000000 +eb2ce73b91baeb82746734a5faa424d578dec90e 295c5a5502f2d9cc65e3c00eec2605fcac5f0796 +eb332998133b25aab6431fc27942d3ff9872a89b 0000000000000000000000000000000000000000 +eb3a9915816f3aa9170d2d7518b599778d58e8d3 90d1a655a2dd9a397d36e36d003b16aede5d6f2b +eb4778d1caf753eab32ce71517b3a02b89a7d46f 0000000000000000000000000000000000000000 +eb4f9c564081dd37350a8605611e56582b2e1821 0cb1925d737bb7200fe5e19f4e1c3e6a9f38a7a6 +eb539deb592cb7dcb65decc3b5a09ad726d55cd0 0e8abf03a9b178c8c48d40af4be0adcf161d6856 +eb633a1075e90c7ddfbc7c77474fc79ac1ddceec 0000000000000000000000000000000000000000 +eb6bcb1a9d5ed204d6720656b3568c4f8c4c8066 0000000000000000000000000000000000000000 +eb75b6baeb312fe2cbd437f6c4d0fa16f6c73474 0000000000000000000000000000000000000000 +eb882ed0170524851ebdc8cdb51cba622e8f4278 0000000000000000000000000000000000000000 +eb8a215d1e055fabf81ae4238907ebaadb449077 0000000000000000000000000000000000000000 +eb97519743de7ed1ac39e1fb8bf998a1d617a6d4 0000000000000000000000000000000000000000 +eb9ba944c12dcce1752cc59ddead9d5a09510d33 0000000000000000000000000000000000000000 +ebaf27ac46f8820e7b817cc33e693632c2fc908a 0000000000000000000000000000000000000000 +ebb79038c5bbff7234cd92d4fbf4d6546d67fdd8 0000000000000000000000000000000000000000 +ebbe5c1fb1e1bdddfed65e1740c668522ef1b2fe 0000000000000000000000000000000000000000 +ebd8d9a20e75232a53a5406f8c1253a2f0c05b7a 445cdb4e3417b1312406b9c6479380c7837fe011 +ebdbcd8baf05ddf88eba2428dc63e31504ab0743 0000000000000000000000000000000000000000 +ebece81a4b2841c7f486a368fbbf9bd1dd7474a5 0000000000000000000000000000000000000000 +ebfb6e4de3816718491faf97a2d4ce039b4381b7 a0ce6b00dbb9e2137b493c93066536c7e302f8b8 +ebfc2baae3fd08d73214b40430497cf327a08f32 84dad5f101a5710e128a317c9ed5945337b76dbf +ec05eca67e7096e30f5e1330c04b3e2b1bad592a 544b3f475a6acb693b344226f8c873b40dcd7f49 +ec241cc2c7617b5e441153cfda83e1404fd68dfc 0000000000000000000000000000000000000000 +ec2a48fd4553a71f801c1d3da8e93326f1411562 0000000000000000000000000000000000000000 +ec3026292768908fe3cf40dc0a2d4dc9626cd83d 0000000000000000000000000000000000000000 +ec420d78af4e5f57c730d17c2d508a926a6697ba 0000000000000000000000000000000000000000 +ec467743ff2d36be5b10962e452b2cdaec253b3d 7439692ba547199e39c7874b87aa2e723a74f0ca +ec52ba65956c79f8cfe200b67dc555843015ed32 0000000000000000000000000000000000000000 +ec5a4b1d7ce36c60c3595579ebd8de3e44152605 0000000000000000000000000000000000000000 +ec5ca477ff86a9fa02bc7b9cc9dda0bdbe6185e3 61b69a2c314f6bb259fb754070d6d029789c35c5 +ec602885c50da7ba9574ce6ae1ac6d4fd80c5972 0000000000000000000000000000000000000000 +ec635692beaf660517091e9ad6941f45721119e0 0000000000000000000000000000000000000000 +ec6a1d47550199f0cc05fa25a49ce8ce135f783d 0000000000000000000000000000000000000000 +ec6cc5c9ce0e884a4a55ac8b72c49b3651fc8272 0000000000000000000000000000000000000000 +ec9a3f5afd80cacab1b01117b8fd90371f237987 0000000000000000000000000000000000000000 +ec9b962c97c5538d11a3acab23d0d8583e8eaf95 0000000000000000000000000000000000000000 +ec9c01b9b873d02ab2682ceb5fb9ac509a931781 0000000000000000000000000000000000000000 +eca913737b6e9e4a02946c16ae01f69356de2353 0000000000000000000000000000000000000000 +ecb973f631962deafac9f48c0b59b1ad0ff63405 f7c89f4dff9472ce778afd80d47754cd61127f55 +ecbdd5f410b07136600b7ed877842fe87a18c6f6 0000000000000000000000000000000000000000 +ecc9ea08e9761bdca7594c782b2a6c1a28d388fd 0000000000000000000000000000000000000000 +ece311110dfe865822d2ed8740391d9c477bdef6 4e7c07851dc6c86b14041940e8c0e31f74cd9f53 +ecec3dc99d872bc0288aa59634afbe383ef9a8a4 0000000000000000000000000000000000000000 +ecfa0c78c14cddbce5bba69353f8d0111b850d1d 0000000000000000000000000000000000000000 +ed00216444f2d9735201400c7b7f94e8fbf427b1 8ab8fedad708fb2d3717ea574ba436d21dd04fca +ed1e02fa90f853842c05bffe7276e57002f618a1 0000000000000000000000000000000000000000 +ed36696bc8e4ce343cc915e4591d677a147d92c1 0000000000000000000000000000000000000000 +ed3817464d79217d884ad0cbbb14d4e4bf7a9645 0000000000000000000000000000000000000000 +ed51df562f5d349a73ed5da673d27c59a6dba990 7df9d56c73881f704d0cf3aa738b4eb9e3d5683a +ed5c771a2f2f66307d1a30fa2196c9df18afd9f3 0000000000000000000000000000000000000000 +ed6df9f4b2ed382ee75b5fbb9a579740a785caf1 0000000000000000000000000000000000000000 +ed6ffa1d4a59857cc57f6286d383ff3a9661a00e c997186fbddd22b8a4f3eb317b6bc53bea17f138 +ed740c894292db202ff18be240a2cbacfe5aabc1 70f48e9ee7caa3d29b23c6e8e25cf01b080e5b9b +ed83b2815077717ecf214d1f757dff2460576b54 0000000000000000000000000000000000000000 +ed9a75c309b769a027ec19af7a72d46122d78386 0000000000000000000000000000000000000000 +eda44a9bd927b8da2de485d2d70b4088fb2dcae1 505dce38d549cf0f8e7cdb452d4850db4e819b13 +eda97ad2a4bfcbe5b89b5219c67902c5f57e221f 0000000000000000000000000000000000000000 +edc95ed5c3699a4237dddf06ada5fecbde3c2223 0000000000000000000000000000000000000000 +edd878b0469dd0d4e1c2e141423e544b195cc97a 0000000000000000000000000000000000000000 +ede11f10fd7abcc74be2fe66bddb05604da5fd30 0000000000000000000000000000000000000000 +ede77de06fdcf1e16fa2a50d42d13eaef04d4689 46780b39f40ceb9078a0b644987c2b962d4921db +edf3c6789aafcc6156e193ee6f3bc23d886e8052 0000000000000000000000000000000000000000 +ee063b7e1f95b56c0ca1f005629f6f11e44e738e 0000000000000000000000000000000000000000 +ee0725f36c627fa1903a75aff0690ac99c600060 0000000000000000000000000000000000000000 +ee11f67142823f163dbb35804e6b8517ececc8fc 0000000000000000000000000000000000000000 +ee1c4c6bd8a5d3b95a7b2c61384b06f7b3b70d9b 0000000000000000000000000000000000000000 +ee2495f989582c0a09ca3c07d2972fac8b4f5cba 0000000000000000000000000000000000000000 +ee26c50c157bd052909ac4d54e3bc502897cafaa 0000000000000000000000000000000000000000 +ee3bf936acd4dc4369dc391dc945c75adf3d8192 0000000000000000000000000000000000000000 +ee4cead942a3b7ad933e20272a1660ec1b80187b 0000000000000000000000000000000000000000 +ee4d4c31c064868de8a9e84bed4780b2480a4285 0000000000000000000000000000000000000000 +ee526e7528c0a945ab616dc1e639ea71adba1155 d8c7aadf314c1037c721bbea60e336659db3f91d +ee581f7678ac22ec0f41faceaf337eead8f613ca 16439a568082d3f8351a55735205dc46fc14ce20 +ee637588a4344dee1d03f0b6006bc1f00330adad 0000000000000000000000000000000000000000 +ee6fae221b3f76045353ba8c33ff44e14318d3b9 0000000000000000000000000000000000000000 +ee8027ae0b4f497e09b132e0f19204e80c25419e 0000000000000000000000000000000000000000 +ee83e1a109afa5d81b251ed4fd567843d45490d6 0000000000000000000000000000000000000000 +ee880e2ba9f05ed6b1ad8bed65bcc259c536792c 0000000000000000000000000000000000000000 +ee99c4d82e37b6b437b5cef63285f9e11e382364 0000000000000000000000000000000000000000 +eeb3013bb758ed3b8a23b032d48e1d4ed7c8119f ab56911078998a1fe84e9b8eb30d54b489a16a77 +eeb79a4a7700d6fb56fbcbbe6913d224fa126167 a6fc477ab1166eaecb230023de027a940e496253 +eec7792d54f8e65996f86ae640b141e5bfdde232 0000000000000000000000000000000000000000 +eecda3493b6d6e3132c43ae46438c9196645ac16 402d68998eac88be5866064199eed1b656d3849d +eee2f608f91825d137f903ffa661bd3aded969f2 0000000000000000000000000000000000000000 +eeffba9d50a53a3be1630d01edd8d0b57a966dee 0000000000000000000000000000000000000000 +ef2b99dfcdc2f76acabb138494dbebaf027dae56 0000000000000000000000000000000000000000 +ef4de8b359718c2e711782c5603d271af08c63ce c45931ed7a58d3df2054104971ae81c3301234b3 +ef540cd971d222ff3c8f527ad224817cee431d31 0000000000000000000000000000000000000000 +ef55b2ce664014a854dbd4275e3fed783bc53385 0000000000000000000000000000000000000000 +ef58bf69ea95e5589c39318fbe653e6bbb845b69 1c59bb0965bc9b7028bedd406e714662e4d06e0e +ef5bcf6b5f6643ba8698718c923f2e2107962d4b 0000000000000000000000000000000000000000 +ef633cf8114319bed28415c8f26e66f7dd395474 0000000000000000000000000000000000000000 +ef694098baeec979cc01e37a68bc70c3614fe927 0000000000000000000000000000000000000000 +ef6c76e5e8077bde707d4911b5e9bbc3760cde7c 0000000000000000000000000000000000000000 +ef6eba9248ff48f1f643da184bf6692bcd663f8b 0000000000000000000000000000000000000000 +ef7640ffc351fca80ddde7a77421412fec590ae7 0000000000000000000000000000000000000000 +ef765f109bd42506d8485ec228291aafbf63b404 0000000000000000000000000000000000000000 +ef7ae338dc6122a9ffc58c7661b161b319d307d9 0000000000000000000000000000000000000000 +ef7dc35b5e4407fcae44a11ef44feaae2614dc8a 33a0d8a4ba3181d7553ac199a029842052d03e39 +ef92cc12488c8759b94eeef29d4eca4ed58454b5 0000000000000000000000000000000000000000 +ef9ec34e080f88c94e12c12538c507c97c619c89 0000000000000000000000000000000000000000 +efa812a123d1d367dc36901de469f01c381669a6 0000000000000000000000000000000000000000 +efb6831c064eac4aea6df3fd88a9618a61adc116 0000000000000000000000000000000000000000 +efc739488d1c9c7d0f53c7be5a6ebffb646ae618 0000000000000000000000000000000000000000 +efd2ac871cae2f87a19b33118a7f1c708b5acc0f 0000000000000000000000000000000000000000 +efd2bfba4368a68bb09741ac9983efc09172d1e2 0000000000000000000000000000000000000000 +efe0fe5102dda8b99032e659cf9d4af2578a07c2 130f4b5f455c7310c3401c488bfac4e7c0575d61 +efe807164bfb4df884c4a39950aec6f548949bcb 0000000000000000000000000000000000000000 +efeeca7c5a76ec48eb99916ce161306576cf2189 0000000000000000000000000000000000000000 +f00c27cc0e104dd67ae26f85323950a7ae44e5d4 0000000000000000000000000000000000000000 +f00f73f930fada86728bfb22db37c604d7bba7ac 0000000000000000000000000000000000000000 +f0146c396ec2bb1e4b3a44a815de0578376e8cdc 0000000000000000000000000000000000000000 +f01c695fad77ef01bd4b2396db10bfcf6a32ffa0 2711383ead8e946bac88a1c28eb1ef11d22354cb +f0233f8e83271a5ab3bc027f2ff4e4088a869a47 0000000000000000000000000000000000000000 +f02dc2f2e65f75a14be9d4c66dfc83b866af6eb5 ca091e977f4173684f364ae026b531c95562af62 +f03c551e42e5f9ccd69be3f7e6d8973f3ae1bd8e 42124b98dcb0d7245b6e0be2a2e2e09d6c740ab2 +f04097020bfc7ac7f0c664d176abe0e90f4f84a7 0000000000000000000000000000000000000000 +f0469c576290b13d1ed9b5d17ba1aad635ac42cc 0000000000000000000000000000000000000000 +f047dfe482d5b2fff2e7bf43edc8e7be04c457af 0000000000000000000000000000000000000000 +f04d45e11930cf1779a45ee1f54b72a749e8f016 0000000000000000000000000000000000000000 +f069dc154ab2c6c0c7e89cc6587f2f61b356d846 0000000000000000000000000000000000000000 +f06e82857f086ec9d192494cb52978da30353149 a88a78e22f21548b846635b149b44c7085b426fb +f07f345acefb73f1f2c9ae69a213fe86f0a6541d 0000000000000000000000000000000000000000 +f07f4bd34b18acda5eafd6b6a12ff19280cb7875 57b36847bc4a80fe070cfbd2ba403f63e6bfefbf +f0802e5cb1974b6b2d4dc7100b2e3f808ab3538b 0000000000000000000000000000000000000000 +f0815d30fa2748fbb6e6375f9d6b1d66b06d0b90 0000000000000000000000000000000000000000 +f09ce7915b3a43d18b68a9d155d2a838a71833fc 0000000000000000000000000000000000000000 +f0a0eb84a445b2760eab119cd668468a5d0be5cd 19d25ef3ad385a953df917c887bb64c37d2d8466 +f0a2eb0f7fe831c871a06351fb61f4b70d2a8d71 0000000000000000000000000000000000000000 +f0a3fde93ebe7c3e23c6aba41fabb7c1ef3665f7 211f5157fec4aad7f5c076c74a5d1f03b7429ee1 +f0a5fcb2bd7bd02ec98321bfeb81a487105b5daa 0000000000000000000000000000000000000000 +f0ac82de6adf73be8dca3a9a7ce5995f2fac4461 db4f91647a3df3b2ff8e353a10ac35cb143a73b1 +f0b8c191e85062eceb9e2e9f7c18b9034d6efafa feaa23af1a099ad70c85a5321089c38e5c55ec76 +f0bfe017fc14e6cc08a1fd536782b52132e09af7 0000000000000000000000000000000000000000 +f0c9c44d07d5107ceec3ab245937bd0f306c290d 0000000000000000000000000000000000000000 +f0cd02c61a4f74730b44b1401c17502bb5ca004e 0000000000000000000000000000000000000000 +f0ce99f8aefacea605ddffdb653aafd3eef5080f 0000000000000000000000000000000000000000 +f0e39010fa3416d06c9a41328342e3bf446a0f7f 0000000000000000000000000000000000000000 +f0f0a05b3f6c469cc5f06fd1ff0c96b0360c2688 0000000000000000000000000000000000000000 +f0f0efe7921117be830da819d3859ab7dfc94cf9 0000000000000000000000000000000000000000 +f0ff148af1b0b6ec38a1cda111270f05b3a0b822 0000000000000000000000000000000000000000 +f10700ec571c56ef0959ae58de8e607171a67aff 708fcd06594143e00fd4f12466662e683b60511b +f11170b0207fc2d2512d27088a9cc6d41dde54a1 0000000000000000000000000000000000000000 +f128e2561de94ee0bb70e686a118fa4f4112cedb 0000000000000000000000000000000000000000 +f12d22189eae3a3dfa175b21e95949c8755fee48 0000000000000000000000000000000000000000 +f1364449a24843112d979e46565259b44fa2f8f6 0000000000000000000000000000000000000000 +f13906d26fc47518135011073452dadd699e500d 0000000000000000000000000000000000000000 +f1864c6348fa9bc6911b4e8c80eb41614212ec25 0000000000000000000000000000000000000000 +f187c94d7a7f5b9fc3c5b922159f72e56d874bb9 0000000000000000000000000000000000000000 +f1af89180328807a918e276c52831e531a4bc5bc 0000000000000000000000000000000000000000 +f1b1be1e739091bee88b9619df3c84b621adc155 0000000000000000000000000000000000000000 +f1b3f3b8d40d8d697611ab6033a1c433d0c411db e5f524c23bf668dc5f926291bcedb0d9c1399787 +f1b659fa65c17657421356d97db87473ad1e749c 0000000000000000000000000000000000000000 +f1c498752027366760c31c8d5cfc30ebfc873537 0000000000000000000000000000000000000000 +f1c89d88d70beb92227f44c36ec23eab40117cee afd0495c81831cdd5c1cacbcce3d5c0f3b03a631 +f1c92975e72b063d26f3170a2b4a380ee1b7fced 0000000000000000000000000000000000000000 +f1cf3cd574a831da3c68be808ed82e1c0ab60d35 0000000000000000000000000000000000000000 +f1eacbd42b91204afcdd5a0959194c3fe5dc37e4 0000000000000000000000000000000000000000 +f1ec8130b84d756230d33866abe9b0455d162450 bd107ae919a6412ea2ce3c54dbd0459889a669df +f1ed2662bd35a6822e6987f78a9c64a2d1406622 0000000000000000000000000000000000000000 +f1fcecfc3e90272a2d016e13e9c2ee94c0dc778b 0000000000000000000000000000000000000000 +f205c36a0a15b7aadc96b2a238a2ba6c6c79e0db 0000000000000000000000000000000000000000 +f2102cc38e31eb3fb2cfd86b200d650ba39ad48b 0000000000000000000000000000000000000000 +f23b0a9876661c4d5f4aa830366df02fb7784f8d 13f253738c785851410072a34e1bf41dccf54b60 +f243300d2916e1b7a496057a2fb39d6c8bdf8b9a 0000000000000000000000000000000000000000 +f257ad5da23762b156efe0fa905ca9d4f7448714 69e21927c895305c1d266bcdee3fd54156e48632 +f257f1a42f53bd8d93a0cda47b11d0c9908df587 8343dc5871815ff666e38e58386a4278d4a9653e +f25e04dd4d8447e570e03cbe2e1c6668d25ef7ba 0000000000000000000000000000000000000000 +f260e587381dec0b7afb4b1ecf83093e6dae5d95 0000000000000000000000000000000000000000 +f266f19ce5f1044dedf16b1d65b9c801aae23723 0000000000000000000000000000000000000000 +f268d9ae3915e0b9686f0e9bba0d8f9ab15a8324 0000000000000000000000000000000000000000 +f270b908247e0bf9d5478d2b0f24e05233fa9ceb 8b1b8fa5106c90bc5be0ddd03c643c0fa3014520 +f27415de58d8dd4864e302211567374148ebf252 0000000000000000000000000000000000000000 +f278faf25d238b3dd9f169c5becb2608c082bb22 0000000000000000000000000000000000000000 +f296505b7123f35b2e45eedc9118c59b8f925cbd 0000000000000000000000000000000000000000 +f299eec21c10c886b50d7594d853b39bf723332a 0000000000000000000000000000000000000000 +f29d6bad0d586325166366b86c602af4d37cfd5b 0000000000000000000000000000000000000000 +f2b302a518179bb0ea5d80160ba194d97c721701 0000000000000000000000000000000000000000 +f2b37219effa0484b2b0de13d0ed5323524589b8 0000000000000000000000000000000000000000 +f2b51329a474dae8935f9b524275ad6e94395329 0000000000000000000000000000000000000000 +f2b651e4e82dab6f698fea160bb0228099b5426e 0000000000000000000000000000000000000000 +f2b9aa5107489bf31611cb75c04fef80939fc60a 0000000000000000000000000000000000000000 +f2bf42ea03dd194bd46cd3862bb89b756cbbc25e 1f3310fe013b31ea62f3113b29c960244ddcc886 +f2bfe35ebddc1b1ee1297817e861a21f238865d6 0000000000000000000000000000000000000000 +f2c6ab9a0c7c4c2df3e058b61c237bd9b250d847 0000000000000000000000000000000000000000 +f2ccf5bfa4c4366175721bcbc78be2239dc6eb82 0000000000000000000000000000000000000000 +f2ee8d58ef5d35ec3b9b4573beb1a00c8c3ebf97 8d5fcfefcc30c256c515818cea6f65dcc5d087f0 +f2f866aa064262cefb25bf82008e68e4eae3be8d 0000000000000000000000000000000000000000 +f2faaaaeba0dde9d33414ba96396e96c8917d41d bed543704a44255f0b16d235940551b261e1d989 +f2fb6cce8338155d5cf042e42e796252aded3b6b 0000000000000000000000000000000000000000 +f30d451dc2b3fe3e290ae4a6a539b6c062e6579c 0000000000000000000000000000000000000000 +f315e25bc6f6092a89554f91f26ccc27ab53ba1d 0000000000000000000000000000000000000000 +f3165fa874a8bb76788684742492f48b20aab892 0000000000000000000000000000000000000000 +f31b192e9d59d39671fdfd03b4fa4d309b03021b 0000000000000000000000000000000000000000 +f31d6bcbb7054b4999dedd51fb0d47821b01b59e 0000000000000000000000000000000000000000 +f324f3a8f48f3a403672bcd55a490968f03cdc4c 0000000000000000000000000000000000000000 +f3267bcf9ac0bb78a04062192072aea309bdf4f7 0000000000000000000000000000000000000000 +f32c7b0c841f69afee647585dfa0454873fedbd5 0000000000000000000000000000000000000000 +f33d1f6b969e4c2d91009ab92e5f76468ac89553 36d371ebb1a8dbf820fcf141cd6de2902a0abc7a +f354ec08899a2814a4f9c61c7f6cafff72ed1a66 77c4dd11c9ecd0ad78266cc18c7289d6c9dbb923 +f359565dfcba4ddbe97901b3939bdce4a8cf255c 0000000000000000000000000000000000000000 +f3690b713d66537b6dad4c29092e7acaff353c0c 0000000000000000000000000000000000000000 +f376870021b25360dfa153c26df29e8fa8fd8bea 0000000000000000000000000000000000000000 +f3772ee6be8c81981b3ae475a6d2ebc3bbcce64b 0000000000000000000000000000000000000000 +f37d3e78d73387da5c46ce3a07726dfdf4a2594f 0000000000000000000000000000000000000000 +f381fb727542d78bf10fa9d7622cc2faa582da91 0000000000000000000000000000000000000000 +f3995395334a0d599bdcd7cebf2887e13c36d34a 0000000000000000000000000000000000000000 +f3a601b77a614a62fd3e5e50f3dcd60e00ab4de6 0000000000000000000000000000000000000000 +f3a74e3d5aac0bcad161bb413917a3154f0b9b77 0000000000000000000000000000000000000000 +f3be73538a760ac6ff4fdff3f8f59d1487a9c7a8 0000000000000000000000000000000000000000 +f3c693a363d15c3ad9544e452ce4709cd9cd158e 0000000000000000000000000000000000000000 +f3c9141c73c5ca5ec884ed7ab18e09a3d06da05c 0000000000000000000000000000000000000000 +f3dbb1a3315f90986be04ef9c256739f3fa6c309 0000000000000000000000000000000000000000 +f3e19dd234235fab9955bf144989c102b2926ec8 0000000000000000000000000000000000000000 +f3e778ad394ded20c630ef72886e1fab727d8f34 0000000000000000000000000000000000000000 +f3efe853aaba601fd7c0d71774370aff344d9dbe 0000000000000000000000000000000000000000 +f3f286c98b3c581c6815fab2744dc642af7a6c9f 0000000000000000000000000000000000000000 +f3f7adb87f2c9f916a49a0959ba56053065ce6d0 0000000000000000000000000000000000000000 +f3fa05410ab8a4464c54f8dc06af235124c7f32a 0000000000000000000000000000000000000000 +f407815a2b89599329facf3e525f7c2014e96560 0000000000000000000000000000000000000000 +f40afd423d85c6a24f5bb15a0d57fd9139f7bc04 0000000000000000000000000000000000000000 +f40b0f1a27147f36d28207e4bbc8820d048ea285 0000000000000000000000000000000000000000 +f4246d1fee909d18fafbd5801ad1a292959e12a8 0000000000000000000000000000000000000000 +f425b8ed48ce5e488f85ad3060e6c43734274250 0000000000000000000000000000000000000000 +f43723789f6fbccc08dfd7eac31a4c70766a95ea 0000000000000000000000000000000000000000 +f449e17dfc6cdc93404f1cfb85a6a4acf98d3aa8 0000000000000000000000000000000000000000 +f45de4c41fe7da68de1b2f425f9f397ae62716ce 0000000000000000000000000000000000000000 +f47721e8015384f0bba8953aca9011146e0393b2 0000000000000000000000000000000000000000 +f4948f3831a7c5ae9403450378cda02eee96917a 0000000000000000000000000000000000000000 +f49a05fe3ecbab86b4acdc93f41342b785ba0133 0000000000000000000000000000000000000000 +f4bab188d5a87ebdb264949a65e4ac4d7a94ab6c b45cb182b8cdedd4c0479ea3820567f39a2de58f +f4cefc6b22cda3130d26aea0d4dae7b96533e0dc 0000000000000000000000000000000000000000 +f4dee067824b3b8a18c526bf1e09f20fdd2bb548 8d12a670861d00e407e2fddf82a70f57615e2c62 +f5037576035db8296c1e1b46fe3e414990d3df45 0000000000000000000000000000000000000000 +f5039251aa097190a66861eaf240644db6c2e9e8 0000000000000000000000000000000000000000 +f513e139a918a60f2313a85c78a54ef1df8137d6 0000000000000000000000000000000000000000 +f517deb6c7f68947a4a25da5b76ed1ee94d307e2 0000000000000000000000000000000000000000 +f52cf963a6d47a47b012df23c131ed136e9cb167 0000000000000000000000000000000000000000 +f5309cec59f4a2fb7f8ab624508df1f97dcb0e33 0000000000000000000000000000000000000000 +f550dc8587c2272f6e8a63cf1540df7f5e348680 0000000000000000000000000000000000000000 +f5626b2777c23c834eb7137683a13344c94dde28 0000000000000000000000000000000000000000 +f56884e3b65e1cdffc9747a6ce016804a118e2bd 0000000000000000000000000000000000000000 +f571acb8b49f4855537447943612557b89fccb22 0000000000000000000000000000000000000000 +f571bf5170ebfa120340b854c9ad2f1c280a0d3f e23ce2089f6239b0f9d97b698afbbf566c6af85f +f57ac37fc42d6e3383d7dbdfecc79a92a45976f1 0000000000000000000000000000000000000000 +f5811e95f9a76ef41043461bc5af327a238a5584 0000000000000000000000000000000000000000 +f58aad235f904f94704aa14700aaca4ac16205af 0000000000000000000000000000000000000000 +f59683abdcddad6d4be36d3fb54fc9d19201ddc4 0000000000000000000000000000000000000000 +f59d1d24da8f9d1930c897f9113cd7eba6bf113b 0000000000000000000000000000000000000000 +f5a56c7c41d0ff3a07a2e0e6556fc05cedb80635 0000000000000000000000000000000000000000 +f5d6e81c21fd18b6de0fb19b535ad6dbc187790d 0000000000000000000000000000000000000000 +f5e3b2e1d443909bcecd0673384e7173bc876bc5 0000000000000000000000000000000000000000 +f5fb254d8edbde952344825fff6a90e2ec4425f1 0000000000000000000000000000000000000000 +f6001479381ffd69a855eff75e4a1c05e30e3097 0000000000000000000000000000000000000000 +f6185b65329202575b4fc0b9b57c573d53c440f6 3bc4e28daf183d01dee02c88ee482f490cb887f5 +f61cbe173efdf5439c72738ee229d08f9599ba90 0000000000000000000000000000000000000000 +f62176888b8aedf6bc0a8f4184921fdc335b43e1 0000000000000000000000000000000000000000 +f62e039a2efde04d0c3988b359ca09ab3349a40b 0000000000000000000000000000000000000000 +f63443f98f5b4e77de632c85c7cd367395b30ba2 0000000000000000000000000000000000000000 +f640726635f0c3681c10298d6746eede663a74c0 0000000000000000000000000000000000000000 +f64202ba0e6732af9924a56c3f334dfeb06ffbf4 0000000000000000000000000000000000000000 +f64aff7cd54bf815865d267764cd4b04f7802466 0000000000000000000000000000000000000000 +f64e08ec6534b0bacf452fb9ac23cdc6a8048e16 0d810e05805ae1bdcb3ad0824ec99ffcd5f45f07 +f64e23e89ea7b1796f099d3585ce7487841b8bc8 0000000000000000000000000000000000000000 +f6777e4b51ebbf89539859e5c2bfc9af58d4a3bd 0000000000000000000000000000000000000000 +f67eab8561a640f93e4762eeeffbad0233ee174f 0000000000000000000000000000000000000000 +f67fe64e669a3f8518d89b007150c3e1bdb69fd1 b2c29321b9cf3f9eba5401f20afc5204fd82707f +f683b7212d9a3a0fa6228c61b263eec1b9258ae9 f6ab5a40b6b5732735e8449507cf2b227048eb69 +f6906811e616f8e6875b8d839137c846fc7bbd9e 0000000000000000000000000000000000000000 +f6912abf79814abb7ea96d309edfd3471f2c0117 0000000000000000000000000000000000000000 +f692e4500e55325858436d6b87a36d449070132c 0000000000000000000000000000000000000000 +f69c003e45f8f2af59c676cf610cef02bdd6861b 0000000000000000000000000000000000000000 +f6a38361fbaa6a288cc2b960a1bc8e89920d55b1 0000000000000000000000000000000000000000 +f6a7b9e82c49edcd8b437133b8d3ad635d9bcf81 0000000000000000000000000000000000000000 +f6a9654253ff8fe66b1fb2d038d9d5283586e53b 71bb7e739f963fd1030e0b5af858695802415f95 +f6cc9d8b5d598ec6f3b70ad779053c9cd4a8f907 0000000000000000000000000000000000000000 +f6d3aca035b5364b8436cc8633d2045e1d5587c0 604c77eab5b09a8935fee2625c1b821328be6c92 +f6d73b32d506ed1b10406ac5c39d173590de2776 0000000000000000000000000000000000000000 +f6e5f1d638e573c97f16a1f3f05bbb8d10d85aa3 0000000000000000000000000000000000000000 +f6eb89c66adb5cd6d5cd6d59a976254137efb810 0000000000000000000000000000000000000000 +f700fdb7f678445a8d9b56dcaa7fda7c21bbec97 0000000000000000000000000000000000000000 +f702dbcccd40b721c786d358ff64919d09a10700 0000000000000000000000000000000000000000 +f71787dd16a40d079aa5013ac5c937c81f92b563 0000000000000000000000000000000000000000 +f72cfb22e85157c0b83675e054ec29cd597b86fc 0000000000000000000000000000000000000000 +f72d3a7c3318e010829bec21e58b5436a8259e00 0000000000000000000000000000000000000000 +f72ef895099387a84bb0ff344bc8f8f24cd9d867 0000000000000000000000000000000000000000 +f738c20f07d178ace78a804acd5a85e471458178 1bf89bffd2930ec5c7d60ff2b2eeff516bf4ed49 +f73e673ac00b5a1d1e3e9c51bd27c57631f6bbe9 0000000000000000000000000000000000000000 +f749231f78307de6f3b22c73c2dc76de1175e838 0000000000000000000000000000000000000000 +f749646bf2cf4a2d21363dcd233e1093c3fe85bb 908b2e8a5b8983054b6c1ae3786d09fbcdfabc3e +f74afbc0f4704b693a31946e633096f46400b067 0000000000000000000000000000000000000000 +f75273c90192b2ec94d16d7e07dbaf8b6e7fa38d 0000000000000000000000000000000000000000 +f7529ad312b3364f82b06e1c4d9fa2eee22febc8 0000000000000000000000000000000000000000 +f7680ae3d005ad754f718d354debd6d7914aa3a3 0000000000000000000000000000000000000000 +f76fddf2a1b50c100bfdc54d0a6b6f60ab2d575d 0000000000000000000000000000000000000000 +f770dd64ad393467642c296a1117bf1508c2e2d7 0000000000000000000000000000000000000000 +f77169260b2cbd8a23f2f5466b05f956404424f4 0000000000000000000000000000000000000000 +f777f7526cfd72999ffe11fc2611054a017b25e6 0000000000000000000000000000000000000000 +f77a3db8bdd0d1dc29646cf0ae20fa27df6b29ce 0000000000000000000000000000000000000000 +f7843230e589789104125e9e1bc221b05e96852b 0000000000000000000000000000000000000000 +f78f33ad644f3a13ff2456d157803ec72e158d5b 0000000000000000000000000000000000000000 +f79135481bbac3202ec488f04c1019479b59fb35 0000000000000000000000000000000000000000 +f7968be3569ad258d3451d79dabe19dff5f48529 8ddbc2af9b20294fbd78ec99b7494b0531315172 +f7dbe74c676b5981969b48caf8e6565d8935ce7b 0000000000000000000000000000000000000000 +f7dc7ee852a69fae52b7984d25a518d938f6008d 0000000000000000000000000000000000000000 +f7e34be28566a4f714d43667f8c43be7159d27a2 0000000000000000000000000000000000000000 +f7f184dc40689fd803515f8b39aaef5ad73d4a88 7be58f850bc8b049c18c634132155493b0a384e6 +f7f49e47d1fa40fcd08e0a1a6fb781a9e3822f0a 0000000000000000000000000000000000000000 +f80d52e599d3e713a6f08b23ba53d85560abc8b6 0000000000000000000000000000000000000000 +f80f958859fa60039131979d1bb7ae907e388c63 0000000000000000000000000000000000000000 +f81167e5c2fd31feb9269f2b69412bc2e1f04372 f1d0e72c559d1faad5f187c01975b3aa0cc69933 +f818b95b7331fd4d48958e6806e0db9def3a6c59 0000000000000000000000000000000000000000 +f84e5def6f3ed00ffb92d85cbd564231bb5bb264 0000000000000000000000000000000000000000 +f8678d3053564c2df1b6fe2aaa311a7da2eb08cc 0000000000000000000000000000000000000000 +f879452ca0e7a836eca8950054d12c70d89dc450 0000000000000000000000000000000000000000 +f8822ff17e9348b2d88e08b17778d5b4ea807ed7 1dbf1631515a4c93a3819d79109bad29ad6a3426 +f884968f9963369e691c21926b84e5d36843d12c 0000000000000000000000000000000000000000 +f8899379d34054e919c670ab2f8dca876bc418d5 0000000000000000000000000000000000000000 +f8a616bc90811b717f8fb5afa80bf765b07a9948 0000000000000000000000000000000000000000 +f8a775bfd14df15b20c6354d34aecccd9f09f3d3 0000000000000000000000000000000000000000 +f8ba5760d77f072e3378852fec0ad521f8dacf25 0000000000000000000000000000000000000000 +f8e4201f95d109481a5b6a294e98b9ce3ae5a064 0000000000000000000000000000000000000000 +f904f32b5ea421289e64aadf03b290390084c008 0000000000000000000000000000000000000000 +f918abadc065c7bf1e226aab1eebbbe8b9a1c038 d34ef9beeea11d127ba0fbe14e7251037e892cc0 +f91e710c5ef3dd46fa14b646cc80338aae2b0cbc 0000000000000000000000000000000000000000 +f94328c3822dc5e3ac0a69be98cc067a6fc57b8f 71c1f094f47a736294f9b4e45800fe380b5c3d8c +f947dc06924e39f950a7a84b2798e55de3fff8d7 0000000000000000000000000000000000000000 +f96918a47caec8437a98ceed914addb3856964ed 0000000000000000000000000000000000000000 +f9781e3f3f1880edd28f9e7eae8368b409073f17 0000000000000000000000000000000000000000 +f97df7e8e9f1e0c7e98ee365e06b4805e5624368 0000000000000000000000000000000000000000 +f97f91a9f785b88039968024d5d1f4af51332631 0000000000000000000000000000000000000000 +f98a5de18b31e6fb3589cd175f8972ba30ee77de 0000000000000000000000000000000000000000 +f98eb7edd0e7e7eaccfaa191f1b738731f7e946e 0000000000000000000000000000000000000000 +f9997e017d556e010b1e3ab1ae73881b54d31a42 0000000000000000000000000000000000000000 +f9a0fb1e4859969777c2bbea7a93459e9c976e33 0000000000000000000000000000000000000000 +f9a32fa9233a982d690520d6cf2a4d5319fded9e 0000000000000000000000000000000000000000 +f9a6796e3873bdebc8e2d84675d78f25272482a0 0000000000000000000000000000000000000000 +f9aea515237f721e07b81f6d1919985954426087 0b1952dbdd73bef1dd5d7e3941d2af9c1657ae8b +f9b52cdd1dec04bbe0d557811d419745bcf66078 0000000000000000000000000000000000000000 +f9b8375bd32ab7fadb2aa59281edb3dff58c9224 630d0c720925004356ebb8e21e022c453e5328f6 +f9bb190d8cb9d1b85dbc0051f12f4daa1ce598e1 b10e01230aa343e9eb1d758825f36a0190b165f6 +f9bdc15aa477a3b7c4ca69feeb30d68ccbc98db1 0000000000000000000000000000000000000000 +f9cf5b807d71c49e5bd7e2bec97f12d3b50ca180 0000000000000000000000000000000000000000 +f9e03d892c9487d40c53664397701c6f44c6207b 3e5614ab2c4b988fbe28b0fb1abc971f94193a86 +f9e524859722476b3111cb6006f77208c2d1f526 0000000000000000000000000000000000000000 +f9f01b75f1d7970391f9567caf951d8e15bd3e42 0000000000000000000000000000000000000000 +f9f77668ec594f2d52381ab40193fcb3a15f5571 3381c718b2454592a57eab6a62d5df7349532957 +f9fc28f1a3bc783bb1cbe3c46a3a3ddbc3be92d3 0000000000000000000000000000000000000000 +f9fc4dbf0227724c4a069769ace15048c8c36d17 0000000000000000000000000000000000000000 +fa032dd7e74211417b23e47176d59b069e7314d2 0099600031367a5f1e4a8fbc56469cbc4a54b277 +fa20804f187074a56b293a9f4a6ec6b66c288193 12092c7b399b67840ac9ec2b28bd7071602566d5 +fa2343aafe290e9822a0b403cf79668746ccd070 0000000000000000000000000000000000000000 +fa354ba1b5617f9d1a9fcecb7c76ddea357fce7d 0000000000000000000000000000000000000000 +fa367aba74eb1c25b399cfb46bca4492a02ccf3a 0000000000000000000000000000000000000000 +fa4403e4f35fe4f4a30707ec8f8b5a1665ffeff5 41d68ca047b207a65a0b8527276b58fcaeb579a2 +fa45d12b938cf77841ab9d1e97d026eafd8d9fc5 0000000000000000000000000000000000000000 +fa534fc556ecd9fb4ad1b7ce919a4cc14bff3cbf 0000000000000000000000000000000000000000 +fa716cf1e5b1b0f430b649d54bb387194b339e28 0000000000000000000000000000000000000000 +fa86d4ffce6e7605d7899dc98916ef4313749ebb 0000000000000000000000000000000000000000 +fa8761a6712dcf80b9f5febbb05f06cfc6835343 429744bf95825cb708dac5dd4c4f753c88d7cab0 +fa9306ff720d04d214ba0e3bb194fabeb1fdee39 0000000000000000000000000000000000000000 +fa9c408c2ea8178423b2a67ebb3b4e26c23677fc 0000000000000000000000000000000000000000 +faa13eb272af00e7a7dffac1d33f3387f411b806 24c51f956eab9f8614c01020798191414e9610c7 +fab2dd7f3300d5c58ac01e2c5e166153be603df6 0000000000000000000000000000000000000000 +faca076cbcbf8119ad426f3827f32aacb1f9e0c1 0000000000000000000000000000000000000000 +faf29de50d861f33c297e1f78229d454b3554bca 0000000000000000000000000000000000000000 +faf76e47c7428d5088d6668580f3ddf69a0165b3 0000000000000000000000000000000000000000 +fb297a105c1f20a93feb05990959b1ce6f865f0e 0000000000000000000000000000000000000000 +fb2bf585d539cc0c6e928e3b55c88e766bcdda32 2db44006f70dae55e6d4db0856ccd6f8e89c4224 +fb31544d2267896e212ea58b7f169efbb02d5292 0000000000000000000000000000000000000000 +fb36e550dc39831d4662ad97c0a4cff36c9ed484 0000000000000000000000000000000000000000 +fb3cea97a3c5311ac7b1f5cbd26ea3ce89ae3a05 0000000000000000000000000000000000000000 +fb404428c42aa064322f945d7c0c9a95444c91b6 0000000000000000000000000000000000000000 +fb41289ec4e34b6908f0547cf6c10a022625dd17 283be02aac25638b0b6b8dffc174052eb592729c +fb4338aabf62528b1a9856a84ee13c6071b89718 0000000000000000000000000000000000000000 +fb496b43169622e21be1ccba79216b5422b846b6 0000000000000000000000000000000000000000 +fb5512ce6cfba4e0d1a0891d607ffe8958051c0a 0000000000000000000000000000000000000000 +fb564d1e5d88442070d19583910d135d09141b41 0000000000000000000000000000000000000000 +fb5c92f8705cb607c9186af6e4b58177d7ec3d58 0000000000000000000000000000000000000000 +fb6cecccafd5713bc1eb22e0cf07619cf495ebb5 0000000000000000000000000000000000000000 +fb6ea09a0d25e10c2017e06dfe8402da5c206b32 cb195ba38814c845466569301c97e65973bafa2d +fb7431203822feb651130e51339d593731ce22e5 0000000000000000000000000000000000000000 +fb7e2608d80bdb925f286de1e84162f1c798c4a9 0000000000000000000000000000000000000000 +fb89abc76ff75bc57527eea7bf49df167b7ad7cf 0000000000000000000000000000000000000000 +fb89e932301eaccbad46d280e9516032cc8fe97a 0000000000000000000000000000000000000000 +fb9633dcdaeec8c483778a497f0f356e05fbb4cd 0000000000000000000000000000000000000000 +fb9abaf3666a162f3f7aba846371396b2be411ee 4134bb6b75f6c7524d5c12c1c5db80dad389a684 +fbd2b4bd70874bc61cd487643c71b9bc2b962a89 f794ff6df4b1f0071cf25fc483d8516ab24f7a2d +fbe390b145ca27b2c1a13d09a15b1ab70c092cb4 0000000000000000000000000000000000000000 +fc399ed778f548393a145a1cd8225756a33b4696 0000000000000000000000000000000000000000 +fc3ba5e36d2b8d7779e9cd7837b218c5b16c8429 c02d2728f26406352a792a536d802d5650973e6b +fc431205206514a95415fef4410c99f4cfa86561 89156b9b559e49bcba7ea85ff6a5285047340c35 +fc43d0c322e2a2d82963c0e662c37c05b4621b28 0000000000000000000000000000000000000000 +fc493878b1e48d35b09a9b3978263cebbd8e7140 50d3131a682fde6d7205c617d265297aee8c27f8 +fc4c3341a931b1dc27039fd7829ea4ec8af2bc6c 0000000000000000000000000000000000000000 +fc6f4617b20bbf074eb877ed834d4d8808924b7b 0000000000000000000000000000000000000000 +fc751d03c74cf7f5dcf74c1f63dd786360c15e18 5bb47df6861abcaad89bdf5c9320970942ca69ba +fc83996369ef611827514c28e91b6739485d7fa3 0000000000000000000000000000000000000000 +fc8b79c0205f6282cfea9a3d1133a1f32f89104d 0000000000000000000000000000000000000000 +fc91ab0b3aa9dcd4de64a3525a127a7b87c72d2b 0000000000000000000000000000000000000000 +fcb316e471b9a3e1ea8893f0c8c8a7633b3523b2 c9b2ff9b842d920efc9410cdf9b6a9b59470c4a1 +fcb4e345de5dadd1d139e3261106cea95fd0dcae 0000000000000000000000000000000000000000 +fcb7fd19ce58456aa4871340d869a63c3e9f1c86 0000000000000000000000000000000000000000 +fcbabd48e5e68f83c0d45ae6eed5649fd6b65fdc 0000000000000000000000000000000000000000 +fcc7b02978a6ac3932bde76f37cb8c3a20b271d8 0000000000000000000000000000000000000000 +fccda23ae6d946ea525483960672407cd8e621c4 0000000000000000000000000000000000000000 +fcd74c49dfc2e11f3bfccc4f28419d691c637ea6 0000000000000000000000000000000000000000 +fcd9d76e79dceb5c879c6c218aaa94d2f0b4f869 0000000000000000000000000000000000000000 +fce10efa2efa1917aeeeb7425c7588ef0c36fef4 0000000000000000000000000000000000000000 +fce5388a27a57c77f5b46dbce1eb902e1fb00750 d3d97f8c3a47b3d39e79b972d9a1327ecf0aa59a +fceb79d64a0e8256ca218a029abfe41c19906df1 0000000000000000000000000000000000000000 +fcfd82f10fed20da9d7bc46a79800082d516bf91 e2a76e55a91d24d444ad0343c19e21507f09778e +fd0c76aaa3975a92dd36a9f0070bffc86ede7996 0000000000000000000000000000000000000000 +fd202c76f1d1183146d386fd4ffc2ce3a80079ec 97debc3d7274bc929e1e9b763f1ac8c7f0958762 +fd25660595082b32d4414d8f10e450d4275974ae 0000000000000000000000000000000000000000 +fd2b6eb726d28385df7ace0972fb9b00686cec42 318ba9b71c25835afb15e23a5894cbb1acaac019 +fd3dc2697733d926fb7b9b952060540201e4e926 0000000000000000000000000000000000000000 +fd44771a6c9a88a90300f659d4813885f09c86a4 0000000000000000000000000000000000000000 +fd4c3681a8746d400706ea6688b48852bf2143ae 0000000000000000000000000000000000000000 +fd4c768e45131cb3ae47b336ea852225db935ec5 ce9922e0aad141be52053b80df5da58175fd3c20 +fd4f7521ae519a69ac3409714ebe4387e00f278a 0000000000000000000000000000000000000000 +fd5005021d98a4715458eddaa88932a4b1bf48b8 0000000000000000000000000000000000000000 +fd6d8b0144e1bf062b3a85873042326fa67ba362 0000000000000000000000000000000000000000 +fd7341fb5a2d03534623618959f3884ed6db6651 0000000000000000000000000000000000000000 +fd8e5d3cc9d281bc818817206d2ecd47f367113c 0000000000000000000000000000000000000000 +fda05d465ef84f2c4c755aca2252e2672ad40107 0000000000000000000000000000000000000000 +fda52f91d62fa0a1c81a2f79a00185fdade20ad9 0000000000000000000000000000000000000000 +fda53b1b3a2790f0417bcc16f76300e487bcb651 0000000000000000000000000000000000000000 +fda6621b6a22ea8b358b9df3ca97edf51339f05e 0000000000000000000000000000000000000000 +fdb1fbf7626925f4f1a27d9cb64dbd3830b7283f 0000000000000000000000000000000000000000 +fdb95484d357e5064cc13bd66e45b00bfb66c394 0000000000000000000000000000000000000000 +fdbee8ffda661bec742bac157aac6dc4e0eb4384 6032302a5cc14cea08526f4b5c7a7357281aee5d +fde82b81db58b778b3eda60e54d2dea404aa3070 0000000000000000000000000000000000000000 +fdf8d12c1fa3b7fc407a26505d346e61b14a6285 0000000000000000000000000000000000000000 +fdfe002d551fc3feaaeb5af24042826f13bdf412 0000000000000000000000000000000000000000 +fe0265d922275d0c2943d71b6fab4c9b5a5a75b8 0000000000000000000000000000000000000000 +fe0b50aae372e5b08625f888ae424f22da759cdf 0000000000000000000000000000000000000000 +fe133f2604e9b65cc1c7011aab7c62f44e649d19 0000000000000000000000000000000000000000 +fe13c562a864efe93feb7c5055da1cb2999a750b 0000000000000000000000000000000000000000 +fe229aa59ecf0b62b7e6553f7a47c9166e8af6ee 0000000000000000000000000000000000000000 +fe2b6b9ca32d49df6a468c3e147106f02078a000 f4198e8135d8ac82a72051c29dc64b56d3b65b3a +fe4a25f1f25c853404540d30f11812f1208f93c9 0000000000000000000000000000000000000000 +fe5300765f5ca19ea70eae8fbfa84fc0cf7934d3 0000000000000000000000000000000000000000 +fe5ecbb3a88ded2fd24461f0f323f63a6fb3623a 0000000000000000000000000000000000000000 +fe74c3d5f722985d2d6ad740db37743ad0e948a1 0000000000000000000000000000000000000000 +fe77796702e82a0339f778d8959cd094c1eeddb7 0000000000000000000000000000000000000000 +fe7a2fd654e93ce99dd0ebd628042f816c787104 4d2340c45a0705b4dc024507c186800a81201afa +fe7d5739ddbfa87c0acee7c0a14581f4b9bdb5f0 0000000000000000000000000000000000000000 +fe8d4fa44bd7a6a6aa7f875b76489d3e01059fac 5c1456c16900ea43d9d62b288e818dd63ab39c70 +feaccf7252bedc347b48455e978e6fa80cc2bea7 0000000000000000000000000000000000000000 +feb674f13ee575aa864fc99c3640ad1e326bea78 0000000000000000000000000000000000000000 +fecac2aec59945d55432e303c3be1539493bd893 0000000000000000000000000000000000000000 +fecd0fe70d9fd6cf4228aaa534c915b722a1925b 43747a7b01394e6c1c7a4b5f682cf25495fb48b8 +fed72e4d03c2ad5063a353d43301bb86fa9904e9 0000000000000000000000000000000000000000 +fed868c59cf27be25cc252d0c98dd5c8c6c4851e 0000000000000000000000000000000000000000 +fed88ebb3bd2fb41b250cc83940af251c58ad6d9 0000000000000000000000000000000000000000 +fee1a6c99285652b57947ea6f60d7fe93d7c64f2 66db61e9f71d6500a890716afd7d32d579fe8309 +feebffc73295355c80588e4d805a20fb4d1ce5ff 0000000000000000000000000000000000000000 +fefec092c6b01e0b90357bde41dfb3a16a7a7cb8 0000000000000000000000000000000000000000 +ff0d4f8c3883960e81f6afa63d091acdce6e429f 44c5e26f7236bb84c733b53296d4852ee61eb6a4 +ff1406c60082727851d22003211faaa4e876d2e8 0000000000000000000000000000000000000000 +ff1dbc98dbfc6d7cfb87153c2b61ec3351157f72 0000000000000000000000000000000000000000 +ff22ab9a6d74684a9b49a8a356bd62d13846a7c2 0000000000000000000000000000000000000000 +ff25c636883bfb51ba8f61c07c1bd5feec2061fe 0000000000000000000000000000000000000000 +ff287bce5844b0dbdb2a6ad5c062d747a8ab77e8 0000000000000000000000000000000000000000 +ff38301dd77143d346bff82acf85602bd29b3e46 0000000000000000000000000000000000000000 +ff4b8fb541f09856c231818bc76dbcb6e212864b 0000000000000000000000000000000000000000 +ff52d8345e3936b8fdeb6923875a4612b614d4d3 0000000000000000000000000000000000000000 +ff554399112e25665162c01e5dea5c90b8d78a9a 0000000000000000000000000000000000000000 +ff584c73fce31509f02eaba37b867b0b7c3b4333 0000000000000000000000000000000000000000 +ff5899bbfde634bdf2dd4d2100b690108bafac27 0000000000000000000000000000000000000000 +ff6e4115dcab8c893bbc6b97639fd620b50f105e 0000000000000000000000000000000000000000 +ff787e827817373d4f16438a4c1d6bf2188a00cb 2653d0249cfea98b2c725a815987d00ac2eeab07 +ff7b4a99351661b7dd26e24bd4daa9e61d39ff27 0000000000000000000000000000000000000000 +ff85802b2bacbae99456b6376384cc78c046a17e 0000000000000000000000000000000000000000 +ffa629b78a630bba23c1e97f19e963f7ba266b4f 0000000000000000000000000000000000000000 +ffac64e7ab9b7f8f1baa6f2ff4c673c5cbecd0d3 0000000000000000000000000000000000000000 +ffae5d223977e7f1c16fc77e19f3315b5d9f0f50 0000000000000000000000000000000000000000 +ffb083c81967958f4a1689f25fef863c446d9c4b 0000000000000000000000000000000000000000 +ffb9bd0aab7a38cf3d6986639039914484a0d9ea 64ed662529315944cb174651b9fda3f390b4f3c1 +ffc7c1b823c846c15fb04d417d870968200c777e 0000000000000000000000000000000000000000 +ffc87ca2fd24fa8d4ab8fa247d1578d530db7c18 0000000000000000000000000000000000000000 +ffd84eda447859ec121e65d47fba5aedbe97893f d5d3c9d2bd14451aea349f0d7a8d40f35c07236d +ffecf7c96efaedb87f31a0955348a1c3e5ee397d 0000000000000000000000000000000000000000 +fff29e49ba4c67479d8f00dff7685ec6d69a5328 0000000000000000000000000000000000000000 +fff308c91a7380df70e8419050ab77873a9688ba 0000000000000000000000000000000000000000 +fff87597988af9368c70fcd56fe8f613919f3b8b 0000000000000000000000000000000000000000 diff --git a/install-tool.ps1 b/install-tool.ps1 new file mode 100644 index 00000000..8d64af7c --- /dev/null +++ b/install-tool.ps1 @@ -0,0 +1,15 @@ +$latest = Get-ChildItem .\artifacts\Microsoft.OpenApi.Hidi*.nupkg | + Sort-Object LastWriteTime | + Select-Object -Last 1 + +if ($null -eq $latest) { + throw "No Microsoft.OpenApi.Hidi package was found in .\artifacts." +} + +$version = $latest.BaseName -replace '^Microsoft\.OpenApi\.Hidi\.', '' + +if (Test-Path -Path .\artifacts\hidi.exe) { + dotnet tool uninstall --tool-path artifacts Microsoft.OpenApi.Hidi +} + +dotnet tool install --tool-path artifacts --add-source .\artifacts\ --version $version Microsoft.OpenApi.Hidi diff --git a/release-please-config.json b/release-please-config.json index 0e431d4d..bf6f5376 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -17,6 +17,15 @@ ".": { "package-name": "Microsoft.OpenApi.OData", "changelog-path": "CHANGELOG.md", + "exclude-paths": [ + ".azure-pipelines", + ".github", + ".idea", + ".vs", + ".vscode", + "src/Microsoft.OpenApi.Hidi", + "test/Microsoft.OpenApi.Hidi.Tests" + ], "extra-files": [ { "type": "xml", @@ -24,6 +33,20 @@ "xpath": "//Project/PropertyGroup/Version" } ] + }, + "src/Microsoft.OpenApi.Hidi": { + "package-name": "Microsoft.OpenApi.Hidi", + "component": "hidi", + "changelog-path": "CHANGELOG.md", + "include-component-in-tag": true, + "include-v-in-tag": true, + "extra-files": [ + { + "type": "xml", + "path": "Microsoft.OpenApi.Hidi.csproj", + "xpath": "//Project/PropertyGroup/Version" + } + ] } }, "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json" diff --git a/scripts/import-hidi-history.ps1 b/scripts/import-hidi-history.ps1 new file mode 100644 index 00000000..fe5920a9 --- /dev/null +++ b/scripts/import-hidi-history.ps1 @@ -0,0 +1,61 @@ +param( + [Parameter(Mandatory)] + [string] $SourceRepository, + + [Parameter(Mandatory)] + [string] $OutputRepository +) + +$ErrorActionPreference = 'Stop' +$sourceCommit = 'afd4967a9e6db390175e2df9e6f34ff77168d19d' + +if (Test-Path $OutputRepository) { + throw "Output path already exists: $OutputRepository" +} + +git filter-repo --version | Out-Null +if ($LASTEXITCODE -ne 0) { + throw 'git-filter-repo is required.' +} + +git clone --no-local $SourceRepository $OutputRepository +git -C $OutputRepository checkout --detach $sourceCommit +$sourceBranches = git -C $OutputRepository for-each-ref --format='%(refname:short)' refs/heads +foreach ($branch in $sourceBranches) { + git -C $OutputRepository branch -D $branch +} +git -C $OutputRepository switch -c hidi-history +git -C $OutputRepository filter-repo --force --refs hidi-history ` + --path src/Microsoft.OpenApi.Tool ` + --path src/Microsoft.Hidi ` + --path src/Microsoft.OpenApi.Hidi ` + --path Microsoft.OpenApi.Hidi.Tests ` + --path test/Microsoft.OpenApi.Hidi.Tests ` + --path-rename src/Microsoft.OpenApi.Tool/:src/Microsoft.OpenApi.Hidi/ ` + --path-rename src/Microsoft.Hidi/:src/Microsoft.OpenApi.Hidi/ ` + --path-rename Microsoft.OpenApi.Hidi.Tests/:test/Microsoft.OpenApi.Hidi.Tests/ + +$retainedRef = 'refs/heads/hidi-history' +$otherRefs = git -C $OutputRepository for-each-ref --format='%(refname)' | + Where-Object { $_ -ne $retainedRef } + +foreach ($ref in $otherRefs) { + git -C $OutputRepository update-ref -d $ref +} + +$files = @(git -C $OutputRepository ls-tree -r --name-only hidi-history) +if ($files.Count -ne 39) { + throw "Expected 39 files at the filtered tip, found $($files.Count)." +} + +$unexpectedFiles = $files | Where-Object { + $_ -notlike 'src/Microsoft.OpenApi.Hidi/*' -and + $_ -notlike 'test/Microsoft.OpenApi.Hidi.Tests/*' +} +if ($unexpectedFiles) { + throw "Unexpected files remain:`n$($unexpectedFiles -join "`n")" +} + +Write-Host "Filtered Hidi history created at $OutputRepository" +Write-Host "Filtered tip: $(git -C $OutputRepository rev-parse hidi-history)" +Write-Host "Commit map: $OutputRepository\.git\filter-repo\commit-map" diff --git a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj index 5e2fd04e..ed9c9b2b 100644 --- a/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj +++ b/src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj @@ -16,7 +16,11 @@ $(NoWarn);NU5048;NU5104;CA1848; readme.md All - ..\Microsoft.OpenApi.snk + ..\..\tool\Microsoft.OpenApi.Hidi.snk + 3.10.2 + https://github.com/Microsoft/OpenAPI.NET.OData + https://github.com/Microsoft/OpenAPI.NET.OData + https://github.com/microsoft/OpenAPI.NET.OData/releases @@ -39,14 +43,14 @@ - + + - - + diff --git a/src/Microsoft.OpenApi.Hidi/readme.md b/src/Microsoft.OpenApi.Hidi/readme.md index 95aba5f1..91e73078 100644 --- a/src/Microsoft.OpenApi.Hidi/readme.md +++ b/src/Microsoft.OpenApi.Hidi/readme.md @@ -2,6 +2,10 @@ Hidi is a command line tool that makes it easy to work with and transform OpenAPI documents. The tool enables you validate and apply transformations to and from different file formats using various commands to do different actions on the files. +Hidi moved from `microsoft/OpenAPI.NET` to this repository at source commit +`afd4967a9e6db390175e2df9e6f34ff77168d19d`. See the +[history migration provenance](../../docs/hidi-migration/README.md) for details. + ## Capabilities Hidi has these key capabilities that enable you to build different scenarios off the tool diff --git a/src/OoasUtil/README.md b/src/OoasUtil/README.md index 95435d41..c1aa0899 100644 --- a/src/OoasUtil/README.md +++ b/src/OoasUtil/README.md @@ -74,5 +74,6 @@ The content of `trip.json` is similar at https://github.com/xuzhg/OData.OpenAPI/ # Alternative Tool - Hidi -This OoasUtil Command tool is currently not actively maintained, and an alternative command line tool, Hidi, is available for use in converting CSDL to OpenAPI. You can find the link to its README [here](https://github.com/microsoft/OpenAPI.NET/blob/vnext/src/Microsoft.OpenApi.Hidi/readme.md) which includes setup instructions. - +This OoasUtil Command tool is currently not actively maintained, and an alternative +command-line tool, Hidi, is available for converting CSDL to OpenAPI. See the +[Hidi README](../Microsoft.OpenApi.Hidi/readme.md) for setup and usage instructions. diff --git a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj index 2271cbb8..b5832817 100644 --- a/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj +++ b/test/Microsoft.OpenApi.Hidi.Tests/Microsoft.OpenApi.Hidi.Tests.csproj @@ -9,7 +9,7 @@ All CA2007 true - ..\..\src\Microsoft.OpenApi.snk + ..\..\tool\Microsoft.OpenApi.Hidi.snk true @@ -18,14 +18,14 @@ + + - - diff --git a/test/Microsoft.OpenApi.Hidi.Tests/global.json b/test/Microsoft.OpenApi.Hidi.Tests/global.json new file mode 100644 index 00000000..c929b2ff --- /dev/null +++ b/test/Microsoft.OpenApi.Hidi.Tests/global.json @@ -0,0 +1,9 @@ +{ + "sdk": { + "version": "10.0.400", + "rollForward": "latestPatch" + }, + "test": { + "runner": "Microsoft.Testing.Platform" + } +} diff --git a/tool/Microsoft.OpenApi.Hidi.snk b/tool/Microsoft.OpenApi.Hidi.snk new file mode 100644 index 0000000000000000000000000000000000000000..c5e0df33645944250c50c1f3e11889755a9ae24d GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097%e6)jyvZeJ;T;q~e@sB3cDmj@AvV8Q1 zH?PLLVs)FTmbjw7wsq9wpFIZbwOSX88$dDKvZrU_nRnQX&W1`27Qex>zPk?JpW=n_ z5C6cZUz65k`US5C`lG7S(<@f2sa^4-#OGb?7D_)FOl3Wn8v*~rp0mV5 zGe*TL7s#LM_6%l**Q$O`Wi63$d3|Q;hsnM+A@@TO92Msq^01`9h+v`{lQ)k=bQ@~7 z=zSKTzeS}iJ16Hy*QFYk=9U7(^QImaw;o(KCOKXvG>ppB^;fB{P?iDs*7o|AF&GDg zODd#x&?4v7k%;D!j8CueQ(2alUD(+V;$FiQgGx^6mma!{F}8}?4p7I5QRRn3Ic}~_ zw82y$OluJ2j69>8+MHvb>5Hp(7SAhkyv8R=;+OvV9ThfcHv{i2 zYeKuV^g*>Dg9e_UrHonn^ Date: Mon, 14 Sep 2026 15:29:55 -0700 Subject: [PATCH 720/720] ci: restore per project approach --- .github/workflows/ci-cd.yml | 133 ++++++++++++++++++++++++++++++++---- 1 file changed, 118 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index cdf1482c..b6eb00a5 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -3,12 +3,15 @@ name: CI/CD Pipeline on: [push, pull_request, workflow_dispatch] permissions: - contents: read + contents: write jobs: ci: name: Continuous Integration runs-on: ubuntu-latest + outputs: + latest_version: ${{ steps.tag_generator.outputs.new_version }} + is_default_branch: ${{ steps.conditionals_handler.outputs.is_default_branch }} env: ARTIFACTS_FOLDER: ${{ github.workspace }}/Artifacts GITHUB_RUN_NUMBER: ${{ github.run_number }} @@ -23,6 +26,27 @@ jobs: with: dotnet-version: 10.0.x + - name: Data gatherer + id: data_gatherer + shell: pwsh + run: | + # Get default branch + $repo = 'microsoft/OpenAPI.NET.OData' + $defaultBranch = Invoke-RestMethod -Method GET -Uri https://api.github.com/repos/$repo | Select-Object -ExpandProperty default_branch + Write-Output "default_branch=$(echo $defaultBranch) >> $GITHUB_OUTPUT" + + - name: Conditionals handler + id: conditionals_handler + shell: pwsh + run: | + $defaultBranch = "${{ steps.data_gatherer.outputs.default_branch }}" + $githubRef = "${{ github.ref }}" + $isDefaultBranch = 'false' + if ( $githubRef -like "*$defaultBranch*" ) { + $isDefaultBranch = 'true' + } + Write-Output "is_default_branch=$(echo $isDefaultBranch) >> $GITHUB_OUTPUT" + - name: Checkout repository id: checkout_repo uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -30,36 +54,115 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 + - if: steps.conditionals_handler.outputs.is_default_branch == 'true' + name: Bump GH tag + id: tag_generator + uses: mathieudutour/github-tag-action@a22cf08638b34d5badda920f9daf6e72c477b07b # v6.2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + default_bump: false + release_branches: ${{ steps.data_gatherer.outputs.default_branch }} + - name: Build projects id: build_projects shell: pwsh run: | - dotnet build .\Microsoft.OpenApi.OData.sln -c Release + $projectsArray = @( + './src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj', + './src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj' + ) + $gitNewVersion = if ("${{ steps.tag_generator.outputs.new_version }}") {"${{ steps.tag_generator.outputs.new_version }}"} else {$null} + $projectCurrentVersion = ([xml](Get-Content ./src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj)).Project.PropertyGroup.Version + $projectNewVersion = $gitNewVersion ?? $projectCurrentVersion + + $projectsArray | ForEach-Object { + dotnet build $PSItem ` + -c Release # ` + # -o $env:ARTIFACTS_FOLDER ` + # /p:Version=$projectNewVersion + } - - name: Run OData unit tests - id: run_odata_unit_tests + # Move NuGet packages to separate folder for pipeline convenience + # New-Item Artifacts/NuGet -ItemType Directory + # Get-ChildItem Artifacts/*.nupkg | Move-Item -Destination "Artifacts/NuGet" + + - name: Run unit tests + id: run_unit_tests shell: pwsh run: | - dotnet test .\test\Microsoft.OpenAPI.OData.Reader.Tests\Microsoft.OpenAPI.OData.Reader.Tests.csproj -c Release --no-build + $testProjectsArray = @( + './test/Microsoft.OpenAPI.OData.Reader.Tests/Microsoft.OpenAPI.OData.Reader.Tests.csproj' + ) + + $testProjectsArray | ForEach-Object { + dotnet test $PSItem ` + -c Release + } - name: Run Hidi unit tests id: run_hidi_unit_tests working-directory: test/Microsoft.OpenApi.Hidi.Tests shell: pwsh run: | - dotnet test -c Release --no-build + dotnet test -c Release - name: Smoke test Hidi package shell: pwsh run: | - $hidiVersion = ([xml](Get-Content .\src\Microsoft.OpenApi.Hidi\Microsoft.OpenApi.Hidi.csproj)).Project.PropertyGroup.Version - $inputDocument = '.\test\Microsoft.OpenApi.Hidi.Tests\UtilityFiles\SampleOpenApi.yml' - dotnet pack .\src\Microsoft.OpenApi.Hidi\Microsoft.OpenApi.Hidi.csproj -c Release --no-build -o .\Artifacts - dotnet tool install --tool-path .\.hidi-smoke --source .\Artifacts --version $hidiVersion Microsoft.OpenApi.Hidi - .\.hidi-smoke\hidi --help - .\.hidi-smoke\hidi validate --openapi $inputDocument - .\.hidi-smoke\hidi transform --openapi $inputDocument --output .\Artifacts\transformed.json --format json --version 3.0 --clean-output - .\.hidi-smoke\hidi show --openapi $inputDocument --output .\Artifacts\paths.txt --clean-output - .\.hidi-smoke\hidi plugin --help + $hidiVersion = ([xml](Get-Content ./src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj)).Project.PropertyGroup.Version + $inputDocument = './test/Microsoft.OpenApi.Hidi.Tests/UtilityFiles/SampleOpenApi.yml' + dotnet pack ./src/Microsoft.OpenApi.Hidi/Microsoft.OpenApi.Hidi.csproj -c Release --no-build -o ./Artifacts + dotnet tool install --tool-path ./.hidi-smoke --source ./Artifacts --version $hidiVersion Microsoft.OpenApi.Hidi + ./.hidi-smoke/hidi --help + ./.hidi-smoke/hidi validate --openapi $inputDocument + ./.hidi-smoke/hidi transform --openapi $inputDocument --output ./Artifacts/transformed.json --format json --version 3.0 --clean-output + ./.hidi-smoke/hidi show --openapi $inputDocument --output ./Artifacts/paths.txt --clean-output + ./.hidi-smoke/hidi plugin --help + + # - if: steps.tag_generator.outputs.new_version != '' + # name: Upload NuGet packages as artifacts + # id: ul_packages_artifact + # uses: actions/upload-artifact@v1 + # with: + # name: NuGet packages + # path: Artifacts/NuGet/ + + cd: + if: needs.ci.outputs.is_default_branch == 'true' && needs.ci.outputs.latest_version != '' + name: Continuous Deployment + needs: ci + runs-on: ubuntu-latest + steps: + # - name: Download and extract NuGet packages + # id: dl_packages_artifact + # uses: actions/download-artifact@v2 + # with: + # name: NuGet packages + # path: NuGet/ + + # - name: Push NuGet packages to NuGet.org + # id: push_nuget_packages + # continue-on-error: true + # shell: pwsh + # run: | + # Get-ChildItem NuGet/*.nupkg | ForEach-Object { + # nuget push $PSItem ` + # -ApiKey $env:NUGET_API_KEY ` + # -Source https://api.nuget.org/v3/index.json + # } + # env: + # NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + + - name: Create and publish release + id: create_release + uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3.0.3 + with: + name: OpenAPI.Net.OData v${{ needs.ci.outputs.latest_version }} + tag_name: v${{ needs.ci.outputs.latest_version }} + # files: | + # NuGet/Microsoft.OpenApi.${{ needs.ci.outputs.latest_version }}.nupkg + # NuGet/Microsoft.OpenApi.Readers.${{ needs.ci.outputs.latest_version }}.nupkg + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Built with ❤ by [Pipeline Foundation](https://pipeline.foundation) \ No newline at end of file