From 02d484a78a8f78dc5e1847aeb3e6af1a4c98675c Mon Sep 17 00:00:00 2001 From: HavenDV Date: Sat, 7 Sep 2024 15:17:59 +0400 Subject: [PATCH] cli: Added init command. --- .../Commands/InitializeCommand.cs | 132 ++++++++++++++++++ .../OpenApiGenerator.Cli.csproj | 5 + src/libs/OpenApiGenerator.Cli/Program.cs | 1 + .../Resources/$SolutionName$.sln | 84 +++++++++++ .../OpenApiGenerator.Cli/Resources/LICENSE | 21 +++ .../OpenApiGenerator.Cli/Resources/README.md | 36 +++++ .../Resources/assets_nuget-icon.png | Bin 0 -> 132733 bytes .../Resources/docs_css_extra.css | 102 ++++++++++++++ .../Resources/docs_media_icon128.png | Bin 0 -> 13498 bytes .../Resources/github_dependabot.yml | 15 ++ .../Resources/github_workflows_auto-merge.yml | 36 +++++ .../github_workflows_auto-update.yml | 63 +++++++++ .../Resources/github_workflows_dotnet.yml | 38 +++++ .../Resources/github_workflows_mkdocs.yml | 56 ++++++++ .../github_workflows_pull-request.yml | 15 ++ .../Resources/global.json | 6 + .../OpenApiGenerator.Cli/Resources/mkdocs.yml | 108 ++++++++++++++ .../Resources/src_Directory.Build.props | 9 ++ ...lpers_FixOpenApiSpec_FixOpenApiSpec.csproj | 15 ++ .../src_helpers_FixOpenApiSpec_Program.cs | 32 +++++ ...OpenApiSpec_Properties_launchSettings.json | 8 ++ ...c_helpers_GenerateDocs_GenerateDocs.csproj | 9 ++ .../src_helpers_GenerateDocs_Program.cs | 46 ++++++ .../src_helpers_TrimmingHelper_Program.cs | 1 + ...lpers_TrimmingHelper_TrimmingHelper.csproj | 30 ++++ .../Resources/src_key.snk | Bin 0 -> 596 bytes ..._libs_$SolutionName$_$SolutionName$.csproj | 24 ++++ .../src_libs_$SolutionName$_generate.sh | 14 ++ .../Resources/src_libs_Directory.Build.props | 63 +++++++++ ...sts_$SolutionName$.IntegrationTests.csproj | 27 ++++ .../src_tests_IntegrationTests_Tests.Test.cs | 10 ++ .../src_tests_IntegrationTests_Tests.cs | 17 +++ .../CliTests.cs | 34 +++++ 33 files changed, 1057 insertions(+) create mode 100644 src/libs/OpenApiGenerator.Cli/Commands/InitializeCommand.cs create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/$SolutionName$.sln create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/LICENSE create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/README.md create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/assets_nuget-icon.png create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/docs_css_extra.css create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/docs_media_icon128.png create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/github_dependabot.yml create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/github_workflows_auto-merge.yml create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/github_workflows_auto-update.yml create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/github_workflows_dotnet.yml create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/github_workflows_mkdocs.yml create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/github_workflows_pull-request.yml create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/global.json create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/mkdocs.yml create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_Directory.Build.props create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_FixOpenApiSpec.csproj create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_Program.cs create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_Properties_launchSettings.json create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_helpers_GenerateDocs_GenerateDocs.csproj create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_helpers_GenerateDocs_Program.cs create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_helpers_TrimmingHelper_Program.cs create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_helpers_TrimmingHelper_TrimmingHelper.csproj create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_key.snk create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_libs_$SolutionName$_$SolutionName$.csproj create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_libs_$SolutionName$_generate.sh create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_libs_Directory.Build.props create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_$SolutionName$.IntegrationTests.csproj create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_Tests.Test.cs create mode 100644 src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_Tests.cs diff --git a/src/libs/OpenApiGenerator.Cli/Commands/InitializeCommand.cs b/src/libs/OpenApiGenerator.Cli/Commands/InitializeCommand.cs new file mode 100644 index 0000000000..edc529bda7 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Commands/InitializeCommand.cs @@ -0,0 +1,132 @@ +using System.CommandLine; +using System.Globalization; + +namespace OpenApiGenerator.Cli.Commands; + +public class InitializeCommand : Command +{ + public InitializeCommand() : base(name: "init", description: "Creates a new solution with GitHub Actions.") + { + var solutionName = new Argument( + name: "solution-name", + getDefaultValue: () => string.Empty, + description: "Solution name"); + var apiName = new Argument( + name: "api-name", + getDefaultValue: () => string.Empty, + description: "API client name"); + var openApiSpec = new Argument( + name: "open-api-spec", + getDefaultValue: () => string.Empty, + description: "OpenAPI spec url"); + var company = new Argument( + name: "company", + getDefaultValue: () => string.Empty, + description: "Company name"); + var output = new Option( + aliases: ["--output", "-o"], + getDefaultValue: () => string.Empty, + description: "Output directory"); + var addMkDocs = new Option( + aliases: ["--add-mkdocs", "-m"], + getDefaultValue: () => true, + description: "Adds MkDocs to the solution"); + AddArgument(solutionName); + AddArgument(apiName); + AddArgument(openApiSpec); + AddArgument(company); + AddOption(output); + AddOption(addMkDocs); + + this.SetHandler( + HandleAsync, + solutionName, + apiName, + openApiSpec, + company, + output, + addMkDocs); + } + + private static async Task HandleAsync( + string solutionName, + string apiName, + string openApiSpec, + string company, + string outputPath, + bool addMkDocs) + { + Console.WriteLine("Initializing..."); + + if (string.IsNullOrWhiteSpace(outputPath)) + { + outputPath = Path.Combine(Directory.GetCurrentDirectory(), solutionName); + } + else + { + Directory.CreateDirectory(outputPath); + } + + var resources = new List + { + H.Resources.__SolutionName__sln, + H.Resources.assets_nuget_icon_png, + H.Resources.github_dependabot_yml, + H.Resources.github_workflows_auto_merge_yml, + H.Resources.github_workflows_auto_update_yml, + H.Resources.github_workflows_dotnet_yml, + H.Resources.github_workflows_pull_request_yml, + H.Resources.global_json, + H.Resources.LICENSE, + H.Resources.README_md, + H.Resources.src_Directory_Build_props, + H.Resources.src_helpers_FixOpenApiSpec_FixOpenApiSpec_csproj, + H.Resources.src_helpers_FixOpenApiSpec_Program_cs, + H.Resources.src_helpers_FixOpenApiSpec_Properties_launchSettings_json, + H.Resources.src_helpers_TrimmingHelper_Program_cs, + H.Resources.src_helpers_TrimmingHelper_TrimmingHelper_csproj, + H.Resources.src_key_snk, + H.Resources.src_libs__SolutionName___SolutionName__csproj, + H.Resources.src_libs__SolutionName__generate_sh, + H.Resources.src_libs_Directory_Build_props, + H.Resources.src_tests_IntegrationTests__SolutionName__IntegrationTests_csproj, + H.Resources.src_tests_IntegrationTests_Tests_cs, + H.Resources.src_tests_IntegrationTests_Tests_Test_cs, + }; + if (addMkDocs) + { + resources.AddRange(new [] + { + H.Resources.docs_css_extra_css, + H.Resources.docs_media_icon128_png, + H.Resources.github_workflows_mkdocs_yml, + H.Resources.mkdocs_yml, + H.Resources.src_helpers_GenerateDocs_GenerateDocs_csproj, + H.Resources.src_helpers_GenerateDocs_Program_cs, + }); + } + + foreach (var resource in resources) + { + await File.WriteAllTextAsync( + Path.Combine(outputPath, Replace(resource.FileName) + .Replace("_", Path.PathSeparator.ToString(), StringComparison.OrdinalIgnoreCase)), + Replace(resource.AsString())).ConfigureAwait(false); + } + + Console.WriteLine("Done."); + return; + + string Replace(string content) + { + return content + .Replace("$SolutionName$", solutionName, StringComparison.OrdinalIgnoreCase) + .Replace("$ApiName$", apiName, StringComparison.OrdinalIgnoreCase) + .Replace("$OpenApiSpec$", openApiSpec, StringComparison.OrdinalIgnoreCase) + .Replace("$CurrentYear$", DateTime.Now.Year.ToString(CultureInfo.InvariantCulture), StringComparison.OrdinalIgnoreCase) + .Replace("$CompanyName$", company, StringComparison.OrdinalIgnoreCase) + .Replace("$SolutionNameUppercase$", solutionName.ToUpperInvariant(), StringComparison.OrdinalIgnoreCase) + ; + } + } +} \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/OpenApiGenerator.Cli.csproj b/src/libs/OpenApiGenerator.Cli/OpenApiGenerator.Cli.csproj index 00796f1848..b1b0cf1266 100644 --- a/src/libs/OpenApiGenerator.Cli/OpenApiGenerator.Cli.csproj +++ b/src/libs/OpenApiGenerator.Cli/OpenApiGenerator.Cli.csproj @@ -16,6 +16,11 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/src/libs/OpenApiGenerator.Cli/Program.cs b/src/libs/OpenApiGenerator.Cli/Program.cs index 4c1e04782e..525ffac268 100644 --- a/src/libs/OpenApiGenerator.Cli/Program.cs +++ b/src/libs/OpenApiGenerator.Cli/Program.cs @@ -5,5 +5,6 @@ description: "CLI tool to use OpenApiGenerator"); rootCommand.AddCommand(new GenerateCommand()); rootCommand.AddCommand(new SimplifyCommand()); +rootCommand.AddCommand(new InitializeCommand()); return await rootCommand.InvokeAsync(args).ConfigureAwait(false); \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/$SolutionName$.sln b/src/libs/OpenApiGenerator.Cli/Resources/$SolutionName$.sln new file mode 100644 index 0000000000..09ee2b8c73 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/$SolutionName$.sln @@ -0,0 +1,84 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30204.135 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E793AF18-4371-4EBD-96FC-195EB1798855}" + ProjectSection(SolutionItems) = preProject + .gitignore = .gitignore + src\Directory.Build.props = src\Directory.Build.props + LICENSE = LICENSE + README.md = README.md + .github\dependabot.yml = .github\dependabot.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libs", "libs", "{61E7E11E-4558-434C-ACE8-06316A3097B3}" + ProjectSection(SolutionItems) = preProject + src\libs\Directory.Build.props = src\libs\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{AAA11B78-2764-4520-A97E-46AA7089A588}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$SolutionName$", "src\libs\$SolutionName$\$SolutionName$.csproj", "{0028BC85-0064-4CE8-A21A-C1F5E922BD59}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "$SolutionName$.IntegrationTests", "src\tests\$SolutionName$.IntegrationTests\$SolutionName$.IntegrationTests.csproj", "{592ADBC9-C951-4AF7-A163-B6C63B970B19}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "helpers", "helpers", "{B761B212-7CAB-46A7-BB98-B76EDE56530D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FixOpenApiSpec", "src\helpers\FixOpenApiSpec\FixOpenApiSpec.csproj", "{67BDEAD9-10A3-4D84-8D71-ED3FCF8C30B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerateDocs", "src\helpers\GenerateDocs\GenerateDocs.csproj", "{2E33DFAF-4E36-4549-832E-202AAB6D1B52}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TrimmingHelper", "src\helpers\TrimmingHelper\TrimmingHelper.csproj", "{4BB0367D-803F-430B-AE3B-853811C48A94}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{02762835-D98C-4E26-B6AC-992CC318DCEC}" + ProjectSection(SolutionItems) = preProject + .github\workflows\auto-merge.yml = .github\workflows\auto-merge.yml + .github\workflows\auto-update.yml = .github\workflows\auto-update.yml + .github\workflows\mkdocs.yml = .github\workflows\mkdocs.yml + .github\workflows\dotnet.yml = .github\workflows\dotnet.yml + .github\workflows\pull-request.yml = .github\workflows\pull-request.yml + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0028BC85-0064-4CE8-A21A-C1F5E922BD59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0028BC85-0064-4CE8-A21A-C1F5E922BD59}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0028BC85-0064-4CE8-A21A-C1F5E922BD59}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0028BC85-0064-4CE8-A21A-C1F5E922BD59}.Release|Any CPU.Build.0 = Release|Any CPU + {592ADBC9-C951-4AF7-A163-B6C63B970B19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {592ADBC9-C951-4AF7-A163-B6C63B970B19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {592ADBC9-C951-4AF7-A163-B6C63B970B19}.Release|Any CPU.ActiveCfg = Release|Any CPU + {592ADBC9-C951-4AF7-A163-B6C63B970B19}.Release|Any CPU.Build.0 = Release|Any CPU + {67BDEAD9-10A3-4D84-8D71-ED3FCF8C30B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67BDEAD9-10A3-4D84-8D71-ED3FCF8C30B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67BDEAD9-10A3-4D84-8D71-ED3FCF8C30B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67BDEAD9-10A3-4D84-8D71-ED3FCF8C30B8}.Release|Any CPU.Build.0 = Release|Any CPU + {2E33DFAF-4E36-4549-832E-202AAB6D1B52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E33DFAF-4E36-4549-832E-202AAB6D1B52}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E33DFAF-4E36-4549-832E-202AAB6D1B52}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E33DFAF-4E36-4549-832E-202AAB6D1B52}.Release|Any CPU.Build.0 = Release|Any CPU + {4BB0367D-803F-430B-AE3B-853811C48A94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4BB0367D-803F-430B-AE3B-853811C48A94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4BB0367D-803F-430B-AE3B-853811C48A94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4BB0367D-803F-430B-AE3B-853811C48A94}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0028BC85-0064-4CE8-A21A-C1F5E922BD59} = {61E7E11E-4558-434C-ACE8-06316A3097B3} + {592ADBC9-C951-4AF7-A163-B6C63B970B19} = {AAA11B78-2764-4520-A97E-46AA7089A588} + {67BDEAD9-10A3-4D84-8D71-ED3FCF8C30B8} = {B761B212-7CAB-46A7-BB98-B76EDE56530D} + {2E33DFAF-4E36-4549-832E-202AAB6D1B52} = {B761B212-7CAB-46A7-BB98-B76EDE56530D} + {4BB0367D-803F-430B-AE3B-853811C48A94} = {B761B212-7CAB-46A7-BB98-B76EDE56530D} + {02762835-D98C-4E26-B6AC-992CC318DCEC} = {E793AF18-4371-4EBD-96FC-195EB1798855} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CED9A020-DBA5-4BE6-8096-75E528648EC1} + EndGlobalSection +EndGlobal diff --git a/src/libs/OpenApiGenerator.Cli/Resources/LICENSE b/src/libs/OpenApiGenerator.Cli/Resources/LICENSE new file mode 100644 index 0000000000..5dea29b28c --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) $CurrentYear$ $CompanyName$ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/libs/OpenApiGenerator.Cli/Resources/README.md b/src/libs/OpenApiGenerator.Cli/Resources/README.md new file mode 100644 index 0000000000..62c3b616c3 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/README.md @@ -0,0 +1,36 @@ +# $SolutionName$ + +[![Nuget package](https://img.shields.io/nuget/vpre/$SolutionName$)](https://www.nuget.org/packages/$SolutionName$/) +[![dotnet](https://github.com/$CompanyName$/$SolutionName$/actions/workflows/dotnet.yml/badge.svg?branch=main)](https://github.com/$CompanyName$/$SolutionName$/actions/workflows/dotnet.yml) +[![License: MIT](https://img.shields.io/github/license/$CompanyName$/$SolutionName$)](https://github.com/$CompanyName$/$SolutionName$/blob/main/LICENSE.txt) +[![Discord](https://img.shields.io/discord/1115206893015662663?label=Discord&logo=discord&logoColor=white&color=d82679)](https://discord.gg/Ca2xhfBf3v) + +## Features 🔥 +- Fully generated C# SDK based on [official $SolutionName$ OpenAPI specification](https://raw.githubusercontent.com/$SolutionName$/assemblyai-api-spec/main/openapi.yml) using [OpenApiGenerator](https://github.com/HavenDV/OpenApiGenerator) +- Same day update to support new features +- Updated and supported automatically if there are no breaking changes +- All modern .NET features - nullability, trimming, NativeAOT, etc. +- Support .Net Framework/.Net Standard 2.0 + +### Usage +```csharp +using $SolutionName$; + +using var api = new $ApiName$(apiKey); +``` + +## Support + +Priority place for bugs: https://github.com/$CompanyName$/$SolutionName$/issues +Priority place for ideas and general questions: https://github.com/$CompanyName$/$SolutionName$/discussions +Discord: https://discord.gg/Ca2xhfBf3v + +## Acknowledgments + +![JetBrains logo](https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.png) + +This project is supported by JetBrains through the [Open Source Support Program](https://jb.gg/OpenSourceSupport). + +![CodeRabbit logo](https://opengraph.githubassets.com/1c51002d7d0bbe0c4fd72ff8f2e58192702f73a7037102f77e4dbb98ac00ea8f/marketplace/coderabbitai) + +This project is supported by CodeRabbit through the [Open Source Support Program](https://github.com/marketplace/coderabbitai). \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/assets_nuget-icon.png b/src/libs/OpenApiGenerator.Cli/Resources/assets_nuget-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..25574ba0b8e293eda32503fac49201e44eba80ba GIT binary patch literal 132733 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%0DhhV9&|WlCSwq) zVLoL+Y!wP$*XOI~zVp${ugyF%?_J3a08f{r{uY)!hYP?{GY2C{Bv-^jogTI*5h^U@ zX(m}vZYdy^%`=7JNWai5)HfvnP8ONg)CYZ_@JZE?ye!rX;ou7&mfADoN}w2`UEfAS z9=@=ss@6PO0j~dzVXv&gQxXXDa5pSR%|ZzxSRjb*_iqzUI#~9R3m$N@%20Zq?BKS? zYAg6X_kP;Y3(6;8lg-HtayW=8#(@FmZq7@fFz?J1mDzm7Jnb3hn!BATH68So8I6!~LgD8;asA~0fm)ArZ#RAz zz9J)3Qb=y{22Kn00Zu#myg!yW!I|7D)eJ&Z4)ZW6TT zm3baQ$5l3cB1528@B`67m1y5;zi*cCfa*46f>>fW6GWp$4?!{>B!LR(tVWNof?1&H zx=#l#)M<}ubv(iK_!4Xp;U*=yb!(D2Z%4I@TE4B3n=2MsP6Hy&I_+k=&$yH7CYKf| z*qtbYBjuY$eGwlF8X{Xg&upi=*OBDRb1O3+uculrs0M38&C6tUR@r#!g0XG+s>_g2 zsj9KzvjTY#T0Nq0G)kcqdIlwV5}eQT4OxwmPg&r7bW=doDa^Qf8SsC z<d`ppP>_-lHedH$gwv7zP`9&aal&q;{9u#ua1mq zs229{w}7#(J>15e`Z=~T)yclxx&i@+-eRf#YFx5#rO1>~0lio}2=%asDts2UHpltq z9k~bzkoq0adI2O-OLLS$KbVwOA&?((UInleUJxa-fR0xKM`8t{-Yb+Iyt*Tx=DV2D z2x0+kmIgKcU$r4=fgry+TbC<=`kIuo@Y$^0&9UzK8k*;$fwnr8u+INNO{ZGV`}DJq zLWX|P!a*RU1e(8G*=E<-R)+MRa}WDltHAPh5q z3DNcq&{J2#M?eOY)JsspZ*L|tQe&H@g*f+=FY%R4)0!VeKdA|U>FzJ#86YUclG<2e z*>?BuO~;PQ_b+TeXI(Ph@8uam6!mjQp`mjFZ0rYV-zNZf&ih=`$t z1fYb6`Aeb2&lO-ANCe})?I(dV zLBv`&)rNt5!`q(L0ow?ZekRE*tX2%$;XwLUlj z8#rR9ruZb7tp~WAkxGRet5W#QI_z54za9%l_b+Lg7f^)@VCa!YfrATM4;Wqslos5% z?e$dsFXTV*SFnwb&!hGN3TNc8I# zD7(^->{3X*-nCn(FalbND-p9?1PGs`vt{}{!fN(vxr3HJ14Mu6xoR-NywV;Dv=T#9 zwfO4P2~5t3FpWfy!TjMtPsxQ| zT<>}i8^=VySH&uMCg>%jJN&(;p?-)G%JPXRSOp+1ZR==<#dbVUcr>?_oZB{_vIQ7Q zDNc9ZLdOj`0`MhD&^%4%zSjrJ-*|3#g6iYP&xO9GrVaqu>tSE63Lfy0x;NR-&G!1# z;htV%U1qdg>|?C3RnZU87^L8x)E{DDE%!vC2yO_OP(JT50tDyczPbF^+80A*-^_Y; zu2>S@K#bY|nX9klnKttjwH{a70o5!xDCpfl1U`ldRCA#lltxohblegMIzdONEytVF z?0egvB9(Gr(fRDMy^=s8d0}3JW|=~+n}GoT^*&<6^tbOiEG(1-ZPV-1Xlx>oDN1yx&yFhNr$ zntuNy~4f`2r*|1^Eo#+;6k|*SuV!pet*_cEgt8H+6ENxt&*|=(^v0woLULGH zXc192_^f0WJP)??Wk0CaK;MsbT&mpx+_}TtbOygYR}mQf0<$G1h1x&|G^};8FFy~; zG5@v)YCbiMkiTlKg!&{WgurZa79NFGl_XU4R@1bdn-Ravoz>Fn_!GdRb{ik7vCj$s zjEm#94QyWqM9X>emLIh z2HQ+k#mI9LTd(!e8$b`V<1sL6R#sqpKE>CE`CP4M2g58DVs{@ez8vpWsCO7_g2Ubv zz-DQPWXKX?FA^Up8Eg>>;V?oD{wWq%_5MX%Ge{KqJUW^M{PYw#5GTv=!isRt(agGu z7E3cibHzuE7euV#R_B&1r~Rgi#|88@ePcZa0w6vDhAYWKktiWKfUas6OR4Ltnhm`d zH+wgN>^Jj5^M2X%_se)*AYLj_;vm~1TZr*H)&SET8n(wxg0{a?4fstd7V{s*HOAh( z^kB{2ZT^Nt@$XO4NeDqZ*@k;p52)UU;u$bzekF>4G$5}O@S{uVNMsvZhUqVnMSs|2 zS4rzjdmq`Y*uT6?t@5TbT8%>q#&ReL$6R*=4hRMrayfknn5LIKdTO?(;R_8K5o6eF zBDFBwzseQ>zXQqx;9<|`9Ef=FYB|+T0(yJtb2c_kSCHRev;*L^!QtS=Cwo_|TYA*z zm?LF`?&0iN2q+eC-%ftxxSt}0eh0{hYvR%ElGb{j&AVU;0TqsS!(ffmZQqZzk-fH* zq)Hw0>D4&3f$G(V_=BGmqHlo@ZDSZOG-6ICfZ5_(KwZ$3jZ1kg&IwZNs^wY2jrGAI z(@o|cA)qWGAMmwn?S{f*U5;`_19=xTR`skQ>ePbL^sY?1>{Aa%ihw@!ntumk$Kpz1 z{st;^N{hCrS-9rCR0!R`T;_g1Gg;zQ??*o0+eyA zsAcR0TC-!}wBv^z9Z{_4fXClNNz0-14wpi#YugjcSRr@?<(2j?)ysqBKHU=ggIpBP zwFyed^sI-dmYtOG*y3G&2-ElFiOx`JY)_!hT7dJh(l6{&E70th1hRnYUdRWBoG!DK z*bjDk&w4#>pQ11yd3<%iH#2(ZyRBdQT55sv5jsdMLqI`yjFRjl-PG0%UG`cAN0Vm} zf~Xzn6DSr)f_ujL8i5O1?1L37>&fZe3$CtFhVRN^jtjr7u~lHd0*wxUMgUJ24SX<* z*jlo)ciQIhRlx2sG8b{^2hRynV4mvax3s*MaLxqu|^WrjzflM;I(LW(E%mU~l-gH=3Y zL1!}bAcnksCDRV7a35RuUYz6!1(joWhHg7Ybrd3z=S<;OLH@j`#hgxxe&HX6J2XsR z#jg8~CweTbDi9cjIrQtDE*2lm6YFmVaUvxH^t<4DVk}ZMw%nEjRVO=NOSvr2id^~; zu~4>3u7p1Tjrh>_OvvcWeWg%HCd?YAFFYb<9t~pVUBzx?G_48^tV51Fz)}R-FAoah zaDaC|hlI4Zf{$^+^gN|{?l_CBh5N!pl~vdPcenf|=CrfJA~CUd%;e;0e!p)?$J5b{ zD|TXRS6p<{yiRs$n<3O2Rsyvhq^A=IM79m!OL46Oh^kA2bIOgsy$1)j1TWHh?d;3p z!RcdBcXCP*l@gA%>ra(J8TJl>XX=#W01<&D$=F@B3@y1BfC-6TSTo}K8>-C-sF61? ziU6-m)*Ou3@}zJ{aQu5%|GUV+EPMyO70dBkFc~K6*pBk;)Sh4nn2ai?3`)9P9>4*CI&a5vo|bA~amH2OCHtnr0ftg}Q2)WVJ!0}=0Dw+< zjK;2vhGUMV8bc_gpFeoM{$9DYgJ2g!>U5<;h6?jL22?Sp#OQnqg$ zC?>>ap31PVV>=uUXGmy4n~;g$%+lZ&kDT3U#Ezo$rX!9qeai&M`T0QOz4 zIlz=K0Ns|S=?&zv&}0`xaM{Jyi=>A>JskjutOhK9(~%zl)ElP?CSLszHxKF%e=*)i zQm2g%tox!IpdJqM=WbTZyQVjlRy`c9^VF<6I{C_99vAvp(bEeJ^}BU?3xArIGyp2e z+}Ti*&a4n0_yK%Lpo^6X z%2Aut{E^=t5Mlr6q?Tvvc8@+#zg1IX8L~gEZFU&EfBg7>+$}L-R*hlgzA;sCy}heP zKn^T7Q_dk;DrhP;MX*U%T+w5=d5czJn_1RhuHU zfL;;yb3apKaAcvm`;1=jyD6nON!ru6L5auqQ!F;_zH_aWX@W>(_3S0F3!Eqt z=nF#-5emq*o8hho4+=x@C~^s9Eq^0{;@WmPnyTk9fvD`MAWW{z8&*o-TNoMmm4kD)b1*?161=>0y(G%ATg%0%^%18~ ze)|Rztbn7($@3MvDmycfL@*|jIGO6htm(tNELxLA>!?GZ0-hzfPhK&1p;Y0o+DrD< zt0wfe8`@QYZ86cM49o=x4II-_iZ_@dOjPcwgtL4C69#vXQx97@Oo`a`E~aONufWh| zv`cQSXAAU77~CxabD|NbT&A0%yS$;Ifd;b`4)_9 z{G))DG^kjKSZox7qsK4jbkCh6JT*l;F{SC!{oH`1!C*%OPTgtUP|F30y&<{^H?%yf z-~K#s6HKYdwhAn>v?{AN%yjcBL8rr;up>8^^=dVfhV&n9Q4OBlv>njeI-Pg~qzJ-_ zkFQ2k#KJZ9TW8~_HVWGl}zjOkwV@4dhVEK@5S3%*ypp?h-qtc!*^Z7TjUB+yVr0{+U#u`my)=T#x#rF7-t zRK5p=-jOUF&b{dg@^6Zu5Dq{P34m0N_d&Vo1<}(iA+2?mo2$FAWc2+{K zG0BPD!1EniX_i{a1siN@HH9+!roi+LK~Kht*0RM%AU_xk~j`U-@5 z5O*yj!2PH~C~Xgot`q}AsSJnq?>W$0gI;r(oSF1;?}(K5oTX_vk9L832vDBhCjLN9 zd`1O_6GCu70(@^6ejyRMxOM(?6iFU6#rH1pkpZ>mr-j;J9`6pw%uuK|Ty4$3co?g!i!YL2 z^y-?hcdRpbT{+3mP?xd!;Vv)>+@aKL{tO5Z#6JHJRChIeL0)O+G;$pPKk!d{?Oso` z=Xf5d+SPA!@Z=tR_$s?l&4qmqA9i#`kuvqd(dUiMS6r99D)q(%+Ifk7m<3if6v7hd z)<8pUCo=TCf4rs->Ss5I3+b(Wn+nvdM!-&lECuzG=m0w}k|dl-P`B*!p|QVEN_Z~0 zxZNyK*U-)%XoGbO2Jlmus*@2XA-wlQQ#Wc1mGG!T1gOw}6@Nr)vGaS=!n=i&3s26^ zjk_3U_z03Kk^-#rH>mC*v7rtqp4LgtOBz&d9=argJ~60;$!%AI2~kks#JrW(Z1XRR z895I<9;h@xC3uCL2UcMkfs(3f0@M~K!r{WuhshXrAu%VeVg^!?XVVr0lrEC+S>cUc zrRn`f1?R%F3wnWZj6yIAgxbCB9O#f){#KCQvuv{#HEMKxn}omKJ;vzRJq?X@%!Owu zjdt<#U#wu-qY;CbWI%~v9w+Q7QHxeDvlmMPTn~%F`Zx0TRG(y_fR6SVg-GM#tRhV4BLX+@X+zX2HDx=wf z4dyPpw$5g_^maaxxqiI?>M zTp*|}c*c@uQ^q&CW$Gr%rK->Mjz8^Obi0Gq<8`W+3M-*lWM!IF_o)cG6!_8<=uk8H zvkx$ErMQu*&d~O{3G5DuX|nE6LaMPErUjU-TF3g!cRi=cRp#Ct|tXm|vJFhlGK*n%7!y!Zyx z%S*yw2v|`y* z8<8>7xMK=zSxUdz3Kc;6a!FODd&lZhd(AAd=CO*A#l};6`xT*ECBJpyI^AUSgKS@? zF(;&RRDqcpWf(gNpiUMbVEQx~t;f7({uiZ{geVIHvbX{eOM``k&jPz`9ku^`O^!Rw zFnqY`&UgI>mrQP=zhllcy?e(xCK)m^8!>o6FR;I2u;Yrxa^2=RO1@=^(_K(8s{xpT zh^lRS$>5X{a1f2Osp}qs4+T>pS6wOG%dud?Rg0;*gpKCQ{7u7>45Jhi`^l&sy_Si+R zG6D)}tNzMoZ6G{&dnXncA7^Dc%R0*@jf=+KR4R9UJSQ0^Em^$+^s>1Dr$iAA_Z{ua zGdM&IM~wRnmZFe{PoIxnTv_}6!HbZ^#f38V6$anJ%q+2QWJXU^p9cpH4d_9PlUU*j z6lZWRJA4kE(*fN$2V|b$5`G+l>{V<+TU^Nv;&>%Zlq4UZ7Zj3~S3-n?% zNd5#s8(GfHH-&o$Xbee%0_p^+H_z*7y5V$CR;9Kq)1Xbfv!K`5%);#BxQ2ECt*~Nm zMj;;uU4SLi0RE{k%Tc=p&%s$j2Zjr7bi{ROCMi zgIn90)`&%|t~EaWb@?K-voXP8TYRis9t3~*w`*Gr!6y-pQ9r)!L07ncg~6d3z51dT zgJ%40kWUe*mPCGm9=~2AE~&4lZl%)qE{|%5-F7T;7A3g#5-}2kkoio zfnaQh$Vv2Y|6FoGR;OUW-^`y=++dF>q=;8nv9a&fLx9YV303$dChCxP2?cbGsBycT zx>l0dhMN9PZhSFww(bOt3bSYV!&SEnA@`+g%$*h(A|MD^U8 zne`o~<3GAAd|e*d<b1NFV?FG!+c-!UC7*oV^A zFgYHfY2}^OdZ+ru-GfZ^m$RJST}cUxFiK`|kDAca%t-J3IxlRk5NuYPs=OL{uf)rm-te?)>7Ro;tMJj6n!wRm9BF#@-JPeK~D7JUcLLVZmk0Y7H%f6?7JM#+#ScY&$#u>V-SsaH?(E4~-B#teZ}rt5vBR z8vqH@l_qx;mQ+(|`3BXBx90=iC@xEE(!VxzyG7}OLGqKKTgJQ2R<4)n9=Ln|IfJn; z>fVjI4`;k1xNr3Qs-_3i#WbYqRE4K!VQz5ThBYklQ z2rwJ3)R{yj&b%s1)yWs;3On{I6Nbloc8FBjXAdPmR`hA9S)f{hnHVT(fK@Jpfvo_m zE(=Dluq`F(E7xZ;E|(>;@m>SI-qH27qjgC#yNs_ZZhE&cAJALBw~@tIs9=LFA*2aE zw7PT>ftf5F041tmrUHZ!{!$J=TaX>Ri7*qP_zTJ%(cHrG)cCO^SH)cUD)Yo%B$QY6 z;yNG&>UXE3GKBs6ePrgH?p1A4%o>$Hq~z{prF=U}!pK>8UvKti*@^Hf*b%t_IDU{v zd0IDp7dhWt@&d)X3U8tg^wxmLFX%l!SCH&@sS#`GJ0m*T2FB?b$!FX$D><2U^c?p*@2Cf(`ren?hS@!o@3rd!G^=p-v(?JS%PQKXA+BQKlH+K~K4H%E$XVHdG5&MbfqBs;v)@H()a%MyaB$C z6+myDYTL0XO_Rt?jNAz93u=as+-03|Fe6ItzjpoVOFzrYJuL94gfJMi_yS?3TTYj@Uo`@cyxyxFlvKGt*$b>^`wptF7>=g}bjS za$BPf4k^fLZIl!P_7@4iP9;NMlBwV(!>a`*(Uzdw3E#ZU9MvB* z69*1+j{V}wj;MZIOO!a*H6fjOtes~zVz&R+mws4@y>yya;HQ^n*JuBbQi>M_?FYFa z$=g`coWwe3Q?iUpylR>@o3?Z2zD3y?!B#y{LG5LBoofPi>U>(sS)VrZ>jTok@F%d2I+gr6+`ik+e-iSioh5TNR^b0&;AHU|q%>_P2O`_F@_!UiRtt~iVhDo%NA`Dlot z$Se*~*F51tP{m46rKYHA%@pR@4IvpgjiOgT*a0I zYqvf;lnQG^r?tL&?A;n2;^+r3h#zD=OO1=&bh>~o5aqYxk9DwCV3`#pO;DR*MEF$pKJQ@vJF%yZ0DHgmWbt#62b3$BHX+a zyg!zsN_Nv8N5{<18KTYxXs;LkM*r@AZ`v#&b_8rZC>?@*){U~%kas_VVf0%ZZzp)= zy_Fb_4jFAtMk5kGaKo5`RF7BsAZ3?uQQ?ecq>t&O`)i*tiBhnK)$ewi+o4Q%dPFF^CkBo7%B)X2Prs0X+W19PuI1`8^gB=R01=MA~zbxvS{63vO`^!Z7GyVx2& z>-Z2`!>bJI3tsA&41L?PC&>_f05D%SeM$I+0&_b=D=pPoxOD9095FQI=t=bG0YnGeRs<6b;j2=1YG-%@^*RE>p zm0S|wHP^TsJ&GRv?GX8NO=Ktvuut(1S=BbttOS@q-=X+9-NQeUc9W|I0}PEtP~Wi2N8E^IfKF7~8_h%Q@e z*Vdz%HdKPKUd;F%E`n|_aOtE9(>|biDG>*do(mOxfwcI16m4Nak-&*UkFmPRS?`{$U+N(z=cli_}hGhrSoM32WXI@lvRQzFR z6S?Bm*q1yiR#iaSgJ-q{hmzR6=1^js8eytE1Is_gY9>oz=7Gftc+AxR)9db^O;V#6HhF4?(nr zT8exhKfJ{!7X4QG8dv9NaBWEK=lv9Z9(!E9m%^vVwbv_Zm~K4Ice=OXTWD>ts$F#HO(RpUVGyR?Bb+S1lO^|J?<1s^5pr9gZ`ZyAtbB1*LA$aef<4$*gj z>iwW~?(z4`3TDOU^TX~1_8|z`Z?F$xt&E+iO_N&|eE?#7qtI#(sG9;XBsn-W#vPwN z1>lr2C#MP)=Ls!dvD}Aw+vFxG-W&cEiv%ZO@BGMX!>4y{wOZusJTLvH*jexb#C4Cd zT8Ipg)(}EbvxDHl?{X2bP@(}p`k5>vkxQS9P=MG-1U|!o3`A~NKrNDCw}oTQ?Y%;CBYO7qS$4!!_T!jH2kncW zzeRRTA@-WmL~Snint0`|Q+#`=0N_ojp>DQowX&es_qM!}DvE_>kztBv-zYRTy1K(f z+NZ8Km0OG#-r2psbKBwIzL37(K5jbpqEEf_KfNfs{<~dc+u)MAt=0_h=piY*ha3HX z13)b>7zJ)v1(fvVy2#hKKjV>CZHf{z=Su#4omSdn_a66Q7IvN5cGRENP**+eJSh)R zrVq2%S`>`AOd!cn5dkX{JMg~ZI17ivXofsjOHq+~Y!uN7dG!l&M|^*$_Mu=wh~T#o z-o!@O>}8FOkd_~#8Q!ZZB4~jKZ8|>)>Q%Z;V8El>KnCWC8`fz+?S*JIoncF7(91Wo z$MPTld&QMtJKs8QcMYtV;F}U1=SZ0W!@yU}DFZjew{O9f9dPAN1jb4NuSaC8gB}eQ zNv#P-E@)fo9~X9gC%pam>rNfp;DwNd-v)OV8ywr~n@@wg9b?gRd}Y~T8(@iKp>p9F z?V)C4;IKmuZpObcE6nIiMj3K-c1YKENSD3R(wUmy&z=i5dm|6;f117a`d1$GFTwAE z2g}UXhh_Sjx_6%)4t(2!nYtbWAMcH3-XXqwL~MVZJ*uRYF4hwB+b+PamIM>+ci8fP zQ=Ffdk`e#_HJ&;6Bh1)O6+T$%i}5`J-(lR^S;FAeRD&p*L6mvOhOB<41h-#rKKN}D zY`Wa@9)FsyA0;mGMcQJ)u|l(-Xvst$z*AKjAkU%ipw;MrNqBrva&XJJ1HD3v9u|8p zq;<|K@G$N1cif%GhR@629t&j}Z4)T)5AgmWO9f|0e&|`(W8M@g9=%m?%bE<*Oz4+F z8|Etk{&RnUGUK&i;|G~?fV>t389^MVu7$oViC7abY( zyX`shDQKoCe#CbCa%IfAw6R&b|4RZ-?v2qkWhgDKdTLKFwqk*ID07t_=vtS|OvLvW zl1DF)+stOhgg_E>KKS{3+MD`B%94U%Eb-A)Rsm zoM&Ol;HSXNOnVYra;ppj*v#UMz&-8k8KYW(DNjA8J&<9^1VWd76&b6s^Tt3 znXiA#6I!i)`gAhdC7i=Xc2f3T&8v#Ro8Q&xz9WNDeE8@-uXs~v<^n$cP?cw`TdZRH zWY`!u(99gZo!Qw@w_EzF-`1=ZwqzgViPynyFt8HifJ#PI>q2a8xGy21NPO^q=n1z4 zGe(f=!&xfZGk%@>-fU*^a$4=f4>{VuuF_v~TTw?et_ClS%)ba8vs7*=;yV2HK|aF< zaAVzocm(HMNd0x+VfpLlG!~m`ad@Gk`hOU_W+qtJlO}(UIDCG>8Ev@!#CetWn|}9u z|9T4Kmdn^%^_ExOd+A6jF>p=S{r4OG_J9j;@+=AN-2w^j?*NU@KfN6dKV6e{VGoD= z!gC~<{)gfH`p*>Pe0l@Yv%mQD%MxE^;h_i2CTmiO<7nYEu8r`EKaDeq4M$CMq3NmL zcILl^kIlsz_-W0OE9^_Ax-$oQU;M==vr1r=l(I%`um8p9{xyfZ!XrMtFIywLYX3CO zECu-7((I7D1AqEF@OQJ8z)v0ARw@UgyEE^YhX2JVA71-E%;D1Bm)-?cj_JBBsec-$ z!A>|o@RfqA|6a_$n}mN_i9y$-13NVZ)w~@cd+q)_%9xJU|HB++RXG-fIM@K-_2Ykj z>zF-o-T>l6!w{!`EzaL&3V;tl%woPi^N6N&E?2<&i&3&2|1WbG>~OC{;O$jw;QFUo zWH0-_Eaaqe;Z0V%n)zRh($VJsFo)*_-X$H*+AXPEn?Jqg=dJkvU&uEUNG_AtD{pE2 zX&L{DEB@^qvYiV$D(~e?w?_PF7Ogb@FAMp9hr$02gZ~`{*sb=z!{C3B!T%zI|3wDX zLkVMDp1U=lx+a6`ur7?eELdx+Mk$|Q_{c4e=(d*a`*H`BM)!%@mE>O1Kx?d!3;;v@t zZsK6#@R$Ew5*w#B+5dMBVp~Ujqm@6TbpYLu?*CIhQY z5~gyAWxRxtMw7_K;KJa--(tT%A!sxe*XQQi2D}y=RZT){~5rV6ymeX$IOrY?HtL@l>gm>On6Pfe?Lbe|3{LeJH9yj z7jY`~Ifj&@V{6A8{&uo)GcGEB_wlPe3P=%eZ~fgQ)ti3okAm5(Gk)C!tFqv~tV(^^ zwOP01=GV~fC)4z3S~RV{dIQK7)=N&FQ~bL}mB%i)!njP`P3%nU{>%D~#?L7AJs2}g z`WSF7_p7ac-b~oO3_c(x!8^0k*hMSf16KLh=+}R>hGCVDD^K3|yC;#qpLMB%bKu>D zVY6Yg|8@>Y@G>b3`l#XmZ??u4d#b8d{K7Pm9T+26YZZU>kL5caR)SJmvA7S5H47Oj4Bb!D0o`3%DpMCnj`Y^FnsqpG6v#XY< zXrv{ceDuek>&at3HkPe5NRhmMFkqcqG+tuuzyGt=f8en7Sax5{fB)r~@DU(?{?}i2 zwaH*CHL}oK_sgX}JlV}nT|#Hgq)OYwD0c!^x?Ja9uk?9zhJeLaRNY9&wSVr@$|LV2ZOqMIn#QuMNTT50@IEz0k@A&&y#$Nu3N_l=3scoR< z|MSZqYy}f0lhPrUm-sP%`q$5hrLLJANeEM$Id&sS?x4kc_dm|-?VkGk=NFFl%AcSN zZ2#To#NJ)6yZ&2obNcIr|N5(!&-aaX&aW?({L`e}l0E({TR!JXe4LSq!SvJkKTdg; zpO^y-OC_+X#I=3is#H?a&@aHsz`CvI-#F*n3(W=?bD=i_&( zsHY!))A+~53g6sWI{dhGRJlO1*gX1Ai`CDq^SrtPdu(O*IQz{;r9Xbvm`d4qj%?FA zqK^OekHfP+SibfWc#0dF5h|X>{m10liVaE4D2+zw^_)-r)>2jcTH24M)tk6&Fsy8L)@(8)he`P$QNXRV7OvodDvWM@zH z$A15x?-ed{;3!*iar1cilGIzO|1seg*QMRgD#~f`Xo`F#$~y7KN4sUIi>+ES`SHfN z2?LSR1s6MB&{fSpF1PxhBsOXD0xc&OlnUogxr#mh+`igCaWdpRn!H&m57jC^T(&-#QtAh*BRDSwzYx4@ghXLfFMQDv4oKzRgh+a z4x@AssUpM?Y0`Tc2nR-*gF%90Fq8-i*dPK@q{Ts`kD;g_RX_$%ssW@VxyO0#b3G@1 zAHR4w=j^@KyWX|-yVj3Qxg4dMW{=w~#2!4EXAmOOo{n^H%mfvEWI9K)db1t2>oA6TwqRwLU#od zD;Gata7d8AYe3=AX{DL|=hdm4+G}#lD(848Dr)9Wn1u-bi?b28Y_UkpHLUCsk|@=l zgu?iSTrL0F>iyi4yc}S#0QV!)gZAA-cfMXR{C8g$i*`CQ^}H5!D1`68*FtGXvu;*I zR#1Ub*%v+u={)d(WoYQ*s=TRK;BMLetj2W>LVb#gQ+K9Dj&Zwu-td+h^MXL|->e1yMh>#R&SVbGUnpe5VRXJ}y1&k5DPBM_qaiq#FXYHN_l^~z98p_9O(^idH<=Tw%TVh~vliC!*PBgyhE zfJ(#ZxFcejSyUawbJZNMW*6(JW`sv3O9apuCVb}r78R`Yl@^Ws=NxIBgLOREi*`Px zh4)Ntin>30-fHfLgx(RDa$-JAYoRt9@Y^~TfA@9093|S2^l%!LFtAB*JFJ0(4%%7e z>&|(=L#)G;?+9XT#)v5PE<~CIHc(#myw%hN@f7a}NS$R?mE?=X^4U99f46ZP8vBUW z64Q+%sFKBgwktz2x?P=4k9RS!(q75qe}pA`x3wD}<;1Kn*mOGu+FKy^jr{uP;kIB` z)^fU|LuWQ3n7jQ6?}cKNb58iFPHa1HKn7WbF3UJX7>+iia+I0v@$Ms2U5Fz6yB7U! z{7AHA-NhlHCK&^HUdf@@!Z^EqW7U>b8fUjdvs~*60!u;#cyHH#GnA-G>qcdepbMK| zTm;ocv5#r~7mO72`J7~!odem(ICleoI5GXrT1v0+v)j{u7Bl7*TFct>J_xgjI>(_F z!w!YpGE_Ar(cUq7M4~=1IJeE^y|u1PQ24Jgy^M>JKF@V79! z!N=?o7LIwN(v+v4T-qGJKW{1f?)52hiWxG5TcVmZH2YE`V)T$4d)MM}f=8iyJAy>c zezb0Aj~c((n0L&h3b*wqpCg`6deD}H48j74&c;O9hONb{`&mdaP%7tn%CK}kE!I?Y zjs&c2jJfR>L0Gv@1@#yTqs2>G*5+7;NM7V^%r_V{ZaoU(!>>4bgM_=ekl^;*DkfqdflZtPK{@sU8;kJGO~d1H+Kju(wWHTtdYepB#Q zm|-YKsD&ZC=^0D#RY+x5@tQBw3SqlVvdSfT=hU()wI&OGG~uaeH%I0KZS}Mi@g&8|#qztF4Y%1@W!sa27P1 zJm4037Jz5BN6i+dp{#ov-@e>G;Bid^4zOx^Blyeqs8Cu`Pg@hX5lR1? z{EgT<=1pa#QpkR5AEf6YC>aGbA~64JAocM8JZJG#QOOI;hY6&jXSlvXaKK(f6zN70 zI4%+;xR|IoL*j@2n=?<@@w~<_#C|I17kNp4m~D1G(H*C(3TFue9}7sb<^=6}o+McJ zqh?P(5PVQn8*Lu7cUswHsukgjCM{-RKRBm-{qy{M zTiehJ^1z8en78;^^rt(y8{J31St%cIB&O#k3wM6&UHzA=y!CI2L9;9Fje(KCa7Ca^ z-C_1XA-b32KtOV9RhE*UyK(afs5s-F0{OC?vpTM=R}L4q;9(hNrNMA!MdzbKD;nECu|NGdNZ@iQYKgH8w^2 zY%G00JQWdF!N^B@cA1_TJEI$UYAA7T$w+K)!jUJ|Q?d>x4OY?zg+GxpI5cuW4JK)T zf<^$-6IWR`DfqRVt1XTm4VvED@k0}wm!g`l7#Sb$CzXmP7uAi*V_Hbr`?~ZDJ6|AV z2EiK8oJ>4O|9Z5H=+ECULXS*1xWS=|1Knjj&lo(Fla`pi%Q1j@@_LDTj+oR)$~L$? zor8>Km+4X95YxD5|}@{ zR&oJKKE*fq1qdtwL3u17NGc&x8K~@#f*Ia%j5((3{WkFsJ@gfevzBwb!ys@{1<_G{ zojLB9j!v^AOx%t@)ocnhDSQMjMoY;cd?P@56QNGbGBy0Qo&wyJaol<$vsR)ft10uQn0mX_{Hcs{|T*L^@7 zh@mpOZ8oovP{?Qg z3W5(2L0wU^p0zDAQ;B5l8+yBp*gku#e465seCm9QH+@(%oU0E$r;d9qti7bR)_-!l zz0h{hbsc_0F|felg~-^l*TV9~39lo3HwwxLOSMu+fli2pS zu|~2ff)Y$%`jP7p>v;5@L^`WgB@toYhW0H4q|db2#9VZtR8Zb7C)S zM!92?54e*V_s!to6I6i0M`5wbP&w(D>W-*dD}7-y!F zf{+$5unq0qIRE0n0rX_Q${rhY z;gFuGeYvZg-z9ukCCriIFfb7Ceh{QZ4i>oLwFt(s5&|h(&^3H8jzXjDdN4cs-lc~+ zpv7!GE_Z`dA>p?nVS$|LfWxAF&hLFneuK`c2I$s9qsvuB&1(a&z7QIX9AX)_94`{g zFK$$EDd3>1JgD=N<(|kf1vDJ92`wMU5Kn$v+^Au)aUjr^J!Ij0qN*QW$M{fWImP>@ zb>HY<0yJ}6QpgLS;>X4?af?{-b`v`|pjI-J;LGLf;t~$fY@{|fN+B(uBO#J@6`9hM zPJ9ZxTMeqPPb(syQ2|#H38(WTM(@WD2QjcrYuBVR9!%Xau^=4FIWBJBhf`2!tmx0I z>8Bv3DXQ=AZ8_afR1Se@S9I?aPfM<7Kwj8lrl%#&A(~y9Jj(RG=iYMywgO6CpFJ_? z6VjL29#T0$QhShXccL6q@(}Yk!PUn_U4!|>L><4^t9qD^i)33w_xMle>#=Gma7*05 zxMj!B){RQ38`{J61`EwC3eulp{2mKJ-AcV-d5~ElXa~(2k6*+|U1it0l*X>7T-i^C zSJ!nJPbW+{PJH)myteO<WN(5?+0%$~gT-a?BCXA!v%#3)BaqZP-@qMieStYug?yWE5uY%k^Zice3$Y3c}mUy24U~6(2RyVN=yj;!p?bs z|473#P5}1oE63t@wN_a<1K$)+CV}9e)?#T&YZiV~B#{Hn)B>Cxxxf6Ht^8gv{C7_J zw>MRpdr`_I=ff@tltZUWebq~w_Yb2>aPnLZ(`J0IJYfC6B^cdwWGRo|fAJM|%Ve17 zh6Nb-jz}4?ZLIqnrK&}AN-v+8G@5sTSTiL31Ail0VPh}_yP z5in*g3BJb%xz;)p9erW!QSd>veO2T&?fhB|m(f`N%r7cNfy5uS*KL*;eNYMGj8XXi zm-qNyG`6HZ;-Ii(HWYPv2lJxQH^x*;7?No*iuNs`@Dp z=M4*Q=PUg4n{9VYX_1ip9a$N!Shu(C=N`^INjzQ0VJ{RgxTiALHzz(4uak&rrCepH zW^Qr@chatAfvedNd!m6e`lViaV)WMdrb^2iN96=gAuqbCPU#DAH7O*Pc;>Rw`Tu5R caR-BoifXRU?$!bA`Jf+TBa5F(P7>n(13+-|<^TWy literal 0 HcmV?d00001 diff --git a/src/libs/OpenApiGenerator.Cli/Resources/docs_css_extra.css b/src/libs/OpenApiGenerator.Cli/Resources/docs_css_extra.css new file mode 100644 index 0000000000..f2174837d6 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/docs_css_extra.css @@ -0,0 +1,102 @@ +/* Logo title */ +.md-header__topic:first-child { + font-weight: initial !important; +} + +/* Code font size in
*/ +details .linenos, details code { + font-size: inherit !important; +} + +/* Code block / tab in details */ +details > summary + .highlight:last-child, details > summary + .tabbed-set:last-child { margin: 0 -0.6rem !important; } +details > summary + .highlight:last-child > .highlighttable { margin: 0 !important; } + +/* Table full width */ +.md-typeset__table { display: block !important; } +.md-typeset table:not(.highlighttable) { display: table !important; } + +.md-typeset table:not([class]) th { + min-width: 0rem; +} + +.headerlink { transform: translateY(-2.5px); } + +.md-nav__link[for=__toc] .md-icon { margin-left: auto !important; } + +blockquote.page-time { + margin: 20px 0 !important; + border-left-color: #64b5f6 !important; /* Just change the color value and that's it*/ +} +blockquote.page-copyright { + margin: 20px 0 !important; + border-left-color: #ff1700 !important; /* Just change the color value and that's it*/ +} +blockquote.page-copyright i.md-icon { + display: inline-block; + margin-right: 5px; + transform: translateY(3.5px); + width: 18px; +} + +#myBtn { + display: none; + position: fixed; + bottom: 100px; + right: 16px; + z-index: 99; + border: none; + outline: none; + color: #8590a6; + cursor: pointer; + padding: .7rem; + border-radius: .4rem; +} + +#myBtn:hover { + background-color: #d3d3d3; +} + +#color-button > button { + cursor: pointer; + transition: opacity .25s; + display: inline-block; + width: 6.5rem; + margin-bottom: 0.2rem; + padding: 1.2rem 0.4rem 0.2rem; + font-size: 0.64rem; + text-align: left; +} + +#color-button > button[data-md-color-primary] { + background-color: var(--md-primary-fg-color); + color: var(--md-primary-bg-color); +} +#color-button > button[data-md-color-primary=white] { + box-shadow: inset 0 0 0.05rem rgb(0 0 0 / 54%); +} + +#color-button > button[data-md-color-accent] { + background-color: var(--md-accent-fg-color); + color: var(--md-code-bg-color); +} + +mjx-container > img { + width: 0; + height: 0; +} + +[data-md-color-scheme="slate"] { + --md-primary-fg-color: #2e303e; + --md-accent-fg-color: #00bda4; + --md-typeset-a-color: #526cfe; +} + +[data-md-color-scheme="slate"] .md-typeset img { + background: white; + filter: brightness(0.9); +} + +[data-md-color-scheme="slate"] .md-typeset img[src$=".svg"] { + border: 4px solid white; +} \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/docs_media_icon128.png b/src/libs/OpenApiGenerator.Cli/Resources/docs_media_icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..05d2b17ae9551641c26b916e6e211d9e6e6ff466 GIT binary patch literal 13498 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 literal 0 HcmV?d00001 diff --git a/src/libs/OpenApiGenerator.Cli/Resources/github_dependabot.yml b/src/libs/OpenApiGenerator.Cli/Resources/github_dependabot.yml new file mode 100644 index 0000000000..b05db381f1 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/github_dependabot.yml @@ -0,0 +1,15 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "nuget" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + groups: + all: + patterns: + - "*" diff --git a/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_auto-merge.yml b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_auto-merge.yml new file mode 100644 index 0000000000..6667db6f29 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_auto-merge.yml @@ -0,0 +1,36 @@ +name: Auto-approve and auto-merge bot pull requests +on: + pull_request: + branches: + - main + +permissions: + contents: write + pull-requests: write + +jobs: + auto-merge: + runs-on: ubuntu-latest + if: ${{ github.actor == 'dependabot[bot]' }} + steps: + - name: Dependabot metadata + id: metadata + uses: dependabot/fetch-metadata@v2.1.0 + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Approve a PR + # Only if version bump is not a major version change + if: ${{ steps.metadata.outputs.update-type != 'version-update:semver-major' }} + run: gh pr review --approve "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable auto-merge + # Only if version bump is not a major version change + if: ${{ steps.metadata.outputs.update-type != 'version-update:semver-major' }} + run: gh pr merge --auto --merge "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_auto-update.yml b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_auto-update.yml new file mode 100644 index 0000000000..97d7f9fccf --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_auto-update.yml @@ -0,0 +1,63 @@ +name: Opens a new PR if there are OpenAPI updates +on: + schedule: + - cron: '0 */3 * * *' + +permissions: + contents: write + pull-requests: write + actions: write + +jobs: + check-openapi-updates: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Git user + run: | + git config --local user.email "dependabot@bot.com" + git config --local user.name "github-actions[bot]" + + - name: Generate branch name + id: branch + run: echo "branch_name=bot/update-openapi_$(date +'%Y%m%d%H%M')" >> $GITHUB_OUTPUT + + - name: Create branch + run: | + git checkout -b ${{ steps.branch.outputs.branch_name }} origin/main + git rebase main + + - name: Generate code + run: | + cd src/libs/$SolutionName$ + chmod +x ./generate.sh + ./generate.sh + + - name: Check for changes + id: changes + run: | + CHANGED=$(git diff --name-only) + if [ -z "$CHANGED" ]; then + echo "has_changes=false" >> $GITHUB_OUTPUT + else + echo "has_changes=true" >> $GITHUB_OUTPUT + fi + + - name: Push changes + if: steps.changes.outputs.has_changes == 'true' + run: | + git add . + git commit -m "feat: Updated OpenAPI spec" + git push --force-with-lease -u origin ${{ steps.branch.outputs.branch_name }} + + - name: Wait for 15 seconds + if: steps.changes.outputs.has_changes == 'true' + run: sleep 15 + + - name: Create pull request + if: steps.changes.outputs.has_changes == 'true' + run: gh pr create -B main -H ${{ steps.branch.outputs.branch_name }} --title 'feat:@coderabbitai' --body '@coderabbitai summary' + env: + GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }} diff --git a/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_dotnet.yml b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_dotnet.yml new file mode 100644 index 0000000000..22dc061f8a --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_dotnet.yml @@ -0,0 +1,38 @@ +name: Publish +on: + push: + branches: + - main + tags: + - v** + +permissions: + contents: write + +jobs: + publish: + name: Publish + uses: HavenDV/workflows/.github/workflows/dotnet_build-test-publish.yml@main + with: + generate-build-number: false + conventional-commits-publish-conditions: false + enable-caching: false + additional-test-arguments: '--logger GitHubActions' + secrets: + nuget-key: ${{ secrets.NUGET_KEY }} + + release: + name: Release + runs-on: ubuntu-latest + needs: [publish] + if: startsWith(github.ref, 'refs/tags/v') + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Create release + run: gh release create ${{ github.ref_name }} + --title "${{ github.ref_name }}" + --generate-notes + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_mkdocs.yml b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_mkdocs.yml new file mode 100644 index 0000000000..44b610baa2 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_mkdocs.yml @@ -0,0 +1,56 @@ +name: MKDocs Deploy +on: + push: + branches: + - main + paths: + - 'docs/**' + - 'mkdocs.yml' + - 'examples/**' + - 'src/helpers/GenerateDocs/**' + - '.github/workflows/mkdocs.yml' + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Install dependencies + run: pip install mkdocs-material + + - name: Generate docs + run: dotnet run --project src/helpers/GenerateDocs/GenerateDocs.csproj . + + - name: Build with MkDocs + run: mkdocs build -d ./_site + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_pull-request.yml b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_pull-request.yml new file mode 100644 index 0000000000..ae5a1e4137 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/github_workflows_pull-request.yml @@ -0,0 +1,15 @@ +name: Test +on: + pull_request: + branches: + - main + +jobs: + test: + name: Test + uses: HavenDV/workflows/.github/workflows/dotnet_build-test-publish.yml@main + with: + generate-build-number: false + conventional-commits-publish-conditions: false + enable-caching: false + additional-test-arguments: '--logger GitHubActions' \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/global.json b/src/libs/OpenApiGenerator.Cli/Resources/global.json new file mode 100644 index 0000000000..eafb435aeb --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/global.json @@ -0,0 +1,6 @@ +{ + "sdk": { + "rollForward": "latestMajor", + "allowPrerelease": false + } +} \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/mkdocs.yml b/src/libs/OpenApiGenerator.Cli/Resources/mkdocs.yml new file mode 100644 index 0000000000..09569f8b8c --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/mkdocs.yml @@ -0,0 +1,108 @@ +site_name: HuggingFace .NET Documentation +nav: +- Overview: index.md +# EXAMPLES # + +# - Quick Start: QuickStart.md +# - Architecture: Architecture.md +# - FAQ: FAQ.md +# - Contributing Guide: ContributingGuide.md +# - Tutorials: +# - Configure the native library loading: Tutorials/NativeLibraryConfig.md +# - Use executors: Tutorials/Executors.md +# - Use ChatSession: Tutorials/ChatSession.md +# - Understand LLamaContext: Tutorials/UnderstandLLamaContext.md +# - Get embeddings: Tutorials/GetEmbeddings.md +# - Quantize the model: Tutorials/Quantization.md +# +# - Advanced Tutorials: +# - Customize the native library loading: AdvancedTutorials/CustomizeNativeLibraryLoading.md +# +# - Integrations: +# - semantic-kernel integration: Integrations/semantic-kernel.md +# - kernel-memory integration: Integrations/kernel-memory.md +# - BotSharp integration: Integrations/BotSharp.md +# - Langchain integration: Integrations/Langchain.md +# +# - Examples: +# - Bacthed executor - multi-output to one input: Examples/BatchedExecutorFork.md +# - Batched executor - basic guidance: Examples/BatchedExecutorGuidance.md +# - Batched executor - rewinding to an earlier state: Examples/BatchedExecutorRewind.md + +theme: + name: material + static_templates: + - 404.html + language: 'en' + palette: + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: default + primary: white + accent: red + toggle: + icon: material/weather-sunny + name: Switch to dark mode + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: blue + accent: blue + toggle: + icon: material/weather-night + name: Switch to light mode + include_search_page: false + search_index_only: true + favicon: 'media/icon128.png' + icon: + logo: 'material/file-document' + features: + - content.action.edit + - navigation.instant + font: + text: 'Fira Sans' + code: 'Fira Mono' + +extra: + version: + provider: mike + +extra_css: + - 'css/extra.css?v=14' + +markdown_extensions: + - admonition + - def_list + - footnotes + - meta + - toc: + permalink: "" + slugify: !!python/name:pymdownx.slugs.uslugify + - pymdownx.arithmatex: + generic: true + - pymdownx.caret + - pymdownx.critic + - pymdownx.details + - pymdownx.emoji: + emoji_generator: !!python/name:pymdownx.emoji.to_svg + - pymdownx.highlight: + linenums: true + - pymdownx.inlinehilite + - pymdownx.keys + - pymdownx.magiclink + - pymdownx.mark + - pymdownx.snippets: + check_paths: true + - pymdownx.progressbar + - pymdownx.smartsymbols + - pymdownx.superfences: + custom_fences: + - name: math + class: arithmatex + format: !!python/name:pymdownx.arithmatex.fence_mathjax_format + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.tilde + - pymdownx.tabbed: + alternate_style: true \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_Directory.Build.props b/src/libs/OpenApiGenerator.Cli/Resources/src_Directory.Build.props new file mode 100644 index 0000000000..86f2c1f3dd --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_Directory.Build.props @@ -0,0 +1,9 @@ + + + + preview + enable + enable + + + diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_FixOpenApiSpec.csproj b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_FixOpenApiSpec.csproj new file mode 100644 index 0000000000..deaad9290c --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_FixOpenApiSpec.csproj @@ -0,0 +1,15 @@ + + + + net8.0 + Exe + preview + enable + enable + + + + + + + diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_Program.cs b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_Program.cs new file mode 100644 index 0000000000..ec604dc2db --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_Program.cs @@ -0,0 +1,32 @@ +using Microsoft.OpenApi; +using Microsoft.OpenApi.Any; +using Microsoft.OpenApi.Extensions; +using Microsoft.OpenApi.Models; +using Microsoft.OpenApi.Readers; + +var path = args[0]; +var text = await File.ReadAllTextAsync(path); + +text = text + .Replace("openapi: 3.1.0", "openapi: 3.0.1") + ; + +var openApiDocument = new OpenApiStringReader().Read(text, out var diagnostics); + +//openApiDocument.Components.Schemas["GenerateCompletionRequest"]!.Properties["stream"]!.Default = new OpenApiBoolean(true); + +text = openApiDocument.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0); +_ = new OpenApiStringReader().Read(text, out diagnostics); + +if (diagnostics.Errors.Count > 0) +{ + foreach (var error in diagnostics.Errors) + { + Console.WriteLine(error.Message); + } + // Return Exit code 1 + Environment.Exit(1); +} + +await File.WriteAllTextAsync(path, text); +return; \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_Properties_launchSettings.json b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_Properties_launchSettings.json new file mode 100644 index 0000000000..615319b446 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_FixOpenApiSpec_Properties_launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "FixOpenApiSpec": { + "commandName": "Project", + "commandLineArgs": "../../../../../../src/libs/$SolutionName$/openapi.yaml" + } + } +} \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_GenerateDocs_GenerateDocs.csproj b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_GenerateDocs_GenerateDocs.csproj new file mode 100644 index 0000000000..f67f521030 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_GenerateDocs_GenerateDocs.csproj @@ -0,0 +1,9 @@ + + + + Exe + net8.0 + enable + + + diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_GenerateDocs_Program.cs b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_GenerateDocs_Program.cs new file mode 100644 index 0000000000..cf242123db --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_GenerateDocs_Program.cs @@ -0,0 +1,46 @@ +var solutionDirectory = args.ElementAtOrDefault(0) ?? Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), "../../../../../..")); +var sampleDirectory = Path.Combine(solutionDirectory, "src", "tests", "$SolutionName$.IntegrationTests"); +var mkDocsPath = Path.Combine(solutionDirectory, "mkdocs.yml"); + +var newDir = Path.Combine(solutionDirectory, "docs", "samples"); +Directory.CreateDirectory(newDir); + +File.Copy( + Path.Combine(solutionDirectory, "README.md"), + Path.Combine(solutionDirectory, "docs", "index.md"), + overwrite: true); + +Console.WriteLine($"Generating samples from {sampleDirectory}..."); +foreach (var path in Directory.EnumerateFiles(sampleDirectory, "Tests.*.cs", SearchOption.AllDirectories)) +{ + var code = await File.ReadAllTextAsync(path); + + var start = code.IndexOf("\n {", StringComparison.Ordinal); + var end = code.IndexOf("\n }", StringComparison.Ordinal); + code = code.Substring(start + 4, end - start + 4); + + var lines = code.Split('\n')[1..^2]; + code = string.Join('\n', lines + .Where(x => !x.Contains(".Should()")) + .Select(x => x.Length > 8 ? x[8..] : string.Empty)); + + code = code + .Replace( + "using var api = GetAuthenticatedApi();", + "using var api = new $ApiName$(apiKey);") + ; + + var newPath = Path.Combine(newDir, $"{Path.GetExtension(Path.GetFileNameWithoutExtension(path)).TrimStart('.')}.md"); + await File.WriteAllTextAsync(newPath, $@"```csharp +{code} +```"); +} + +var mkDocs = await File.ReadAllTextAsync(mkDocsPath); +var newMkDocs = mkDocs.Replace( + "# EXAMPLES #", + $"- Examples:{string.Concat(Directory.EnumerateFiles(Path.Combine(solutionDirectory, "docs", "samples"), "*.md") + .Select(x => $@" + - {Path.GetFileNameWithoutExtension(x)}: samples/{Path.GetFileNameWithoutExtension(x)}.md"))}"); +await File.WriteAllTextAsync(mkDocsPath, newMkDocs); + diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_TrimmingHelper_Program.cs b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_TrimmingHelper_Program.cs new file mode 100644 index 0000000000..3b94c99506 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_TrimmingHelper_Program.cs @@ -0,0 +1 @@ +Console.WriteLine("Build, rebuild or publish this app to see trimming warnings."); \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_TrimmingHelper_TrimmingHelper.csproj b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_TrimmingHelper_TrimmingHelper.csproj new file mode 100644 index 0000000000..07233b7b04 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_helpers_TrimmingHelper_TrimmingHelper.csproj @@ -0,0 +1,30 @@ + + + + Exe + net8.0 + enable + + true + + + + + + + + + + + + win-x64 + osx-arm64 + + true + + + + + + + diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_key.snk b/src/libs/OpenApiGenerator.Cli/Resources/src_key.snk new file mode 100644 index 0000000000000000000000000000000000000000..4205bc65b619af46faf1ce8c9e194dc2c30a785d GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097@Tmm`f2s?isF}AiFtX>D=N)fc=1kgf9 z*}k79&uahHkXGdO!esyrm#y!_=ao(Ker(?<0)EICMZK4xq|X_R!@P~p6ujvVRKf&-99a_p zc*Ub`qEtkZ9ejt*x!2k@!vqt$=zFYe=3E$d4GVq-hV$uRGl-Sdenr{I-|A0=Yi$ov zgysIlm|HH)0^P&fO$Ka_Y(iFvOs!p0{GNh&mOo>iVg)y@a(U!j%u75}#;n?P(n!j3 zmz$0jix2n8b+prAYIQknXWbHU)Rxy5To`D6RF@TV9$e*xz$0t818Nqdv{kYIA&-Fm zdxFxJT-cNa%2R%(I@=30w6Sr`e(H)J{0)J-!TUE6)X?)uZZL&WTeE$0R}0?}rL4=0 zGo1_jHceUqL6U789~;ksvtl*hAY+Fg=E>%Xu0Ea9$Ey);$sFKrR+8zT?FHm~-LNy` iXp_BkQUP9!N(yB0g4~glSoUuq0wr88#9^~%;rA(|rz33u literal 0 HcmV?d00001 diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_libs_$SolutionName$_$SolutionName$.csproj b/src/libs/OpenApiGenerator.Cli/Resources/src_libs_$SolutionName$_$SolutionName$.csproj new file mode 100644 index 0000000000..b67410a6e1 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_libs_$SolutionName$_$SolutionName$.csproj @@ -0,0 +1,24 @@ + + + + netstandard2.0;net4.6.2;net6.0;net8.0 + + + + Generated C# SDK based on $SolutionName$ OpenAPI specification. + api;client;sdk;dotnet;swagger;openapi;specification;generated;nswag + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_libs_$SolutionName$_generate.sh b/src/libs/OpenApiGenerator.Cli/Resources/src_libs_$SolutionName$_generate.sh new file mode 100644 index 0000000000..2bd5749e38 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_libs_$SolutionName$_generate.sh @@ -0,0 +1,14 @@ +dotnet tool install --global openapigenerator.cli --prerelease +rm -rf Generated +curl -o openapi.yaml $OpenApiSpec$ +dotnet run --project ../../helpers/FixOpenApiSpec openapi.yaml +if [ $? -ne 0 ]; then + echo "Failed, exiting..." + exit 1 +fi +oag generate openapi.yaml \ + --namespace $SolutionName$ \ + --clientClassName $ApiName$ \ + --targetFramework net8.0 \ + --output Generated \ + --exclude-deprecated-operations \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_libs_Directory.Build.props b/src/libs/OpenApiGenerator.Cli/Resources/src_libs_Directory.Build.props new file mode 100644 index 0000000000..cca858d7d0 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_libs_Directory.Build.props @@ -0,0 +1,63 @@ + + + + + + true + $(MSBuildThisFileDirectory)../key.snk + + + + + <_Parameter1>true + + + + + true + true + $CompanyName$ and contributors + MIT + nuget-icon.png + README.md + + + + + + + + + v + dev + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + true + latest + All + + + + true + true + true + false + false + + + diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_$SolutionName$.IntegrationTests.csproj b/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_$SolutionName$.IntegrationTests.csproj new file mode 100644 index 0000000000..9c97c3baaa --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_$SolutionName$.IntegrationTests.csproj @@ -0,0 +1,27 @@ + + + + net8.0 + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_Tests.Test.cs b/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_Tests.Test.cs new file mode 100644 index 0000000000..62e3095c84 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_Tests.Test.cs @@ -0,0 +1,10 @@ +namespace $SolutionName$.IntegrationTests; + +public partial class Tests +{ + [TestMethod] + public async Task Generate() + { + using var api = GetAuthenticatedApi(); + } +} diff --git a/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_Tests.cs b/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_Tests.cs new file mode 100644 index 0000000000..be2f0dfa60 --- /dev/null +++ b/src/libs/OpenApiGenerator.Cli/Resources/src_tests_IntegrationTests_Tests.cs @@ -0,0 +1,17 @@ +namespace $SolutionName$.IntegrationTests; + +[TestClass] +public partial class Tests +{ + [TestMethod] + public $ApiName$ GetAuthenticatedApi() + { + var apiKey = + Environment.GetEnvironmentVariable("$SolutionNameUppercase$_API_KEY") ?? + throw new AssertInconclusiveException("$SolutionNameUppercase$_API_KEY environment variable is not found."); + + var api = new $ApiName$(apiKey); + + return api; + } +} diff --git a/src/tests/OpenApiGenerator.IntegrationTests.Cli/CliTests.cs b/src/tests/OpenApiGenerator.IntegrationTests.Cli/CliTests.cs index b9a4a4bddb..2c4df1e7c3 100644 --- a/src/tests/OpenApiGenerator.IntegrationTests.Cli/CliTests.cs +++ b/src/tests/OpenApiGenerator.IntegrationTests.Cli/CliTests.cs @@ -73,4 +73,38 @@ await File.WriteAllTextAsync(Path.Combine(tempDirectory, "Oag.csproj"), @"