diff --git a/docs/modules/ROOT/pages/changelog.adoc b/docs/modules/ROOT/pages/changelog.adoc index a814bef..7415add 100644 --- a/docs/modules/ROOT/pages/changelog.adoc +++ b/docs/modules/ROOT/pages/changelog.adoc @@ -20,6 +20,11 @@ the link to the GitHub tag is only added once we are ready to release. :github-issue: https://github.com/peopleware/net-ppwcode-aspnetcore-host/issues/ +:release: 2.0.0 +== `{release}` +include::partial$changelog-release-section.adoc[] +include::partial$changelog-{release}.adoc[] + :release: 1.0.0 == `{release}` include::partial$changelog-release-section.adoc[] diff --git a/docs/modules/ROOT/partials/changelog-2.0.0.adoc b/docs/modules/ROOT/partials/changelog-2.0.0.adoc new file mode 100644 index 0000000..18cf01c --- /dev/null +++ b/docs/modules/ROOT/partials/changelog-2.0.0.adoc @@ -0,0 +1,18 @@ +//// +The changelog for a specific release. +Note that it is best to update the changelog as new code is developed. + +All attributes used, must be included in this file to keep it self-contained. + +This file is translated into markdown and used for the release notes in the GitHub release! +//// + +=== Changes +* Switch to .NET SDK `10.0.201` +* Upgrade `Swashbuckle.AspNetCore` from `7.3.2` to `10.1.7` +** Fixes link:{github-issue}1[#1] in link:{github-pr}2[#2] by link:{github-user}rvdginste[@rvdginste] + + +=== Note: breaking change +* Rename `INSSSchemaFilter` to `ForceTypeToStringSchemaFilter` +* Changes to the provided `IOperationFilter` implementations after upgrade to new major version of `Swashbuckle.AspNetCore` diff --git a/global.json b/global.json index 3c540fe..c565347 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { "rollForward": "disable", - "version": "10.0.102" + "version": "10.0.201" } } diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 615f997..3153056 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -50,8 +50,8 @@ - - + + diff --git a/src/I.EntityFrameworkCore/packages.lock.json b/src/I.EntityFrameworkCore/packages.lock.json index 03f89a7..02187ad 100644 --- a/src/I.EntityFrameworkCore/packages.lock.json +++ b/src/I.EntityFrameworkCore/packages.lock.json @@ -5,30 +5,31 @@ "Microsoft.EntityFrameworkCore": { "type": "Direct", "requested": "[10.*, )", - "resolved": "10.0.3", - "contentHash": "CDEImwD4A7BseABJMCpLZnhfFjmPY/bHwhhS70elc6gLI/bYUEOhxWt7PmaNGYGhIEzOnStlCy5QcVb+8dod5Q==", + "resolved": "10.0.5", + "contentHash": "9tNBmK3EpYVGRQLiqP+bqK2m+TD0Gv//4vCzR7ZOgl4FWzCFyOpYdIVka13M4kcBdPdSJcs3wbHr3rmzOqbIMA==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "10.0.3", - "Microsoft.EntityFrameworkCore.Analyzers": "10.0.3" + "Microsoft.EntityFrameworkCore.Abstractions": "10.0.5", + "Microsoft.EntityFrameworkCore.Analyzers": "10.0.5" } }, "Microsoft.EntityFrameworkCore.Relational": { "type": "Direct", "requested": "[10.*, )", - "resolved": "10.0.3", - "contentHash": "Pmh60OK9neVr/M0FJwm9hlzm2bD4Kd65SID8E6SP5c90tExNgXwORrlEWl0oGU/ig9ifpNN4PSpIrnHNozlT5w==", + "resolved": "10.0.5", + "contentHash": "uxmFjZEAB/KbsgWFSS4lLqkEHCfXxB2x0UcbiO4e5fCRpFFeTMSx/me6009nYJLu5IKlDwO1POh++P6RilFTDw==", "dependencies": { - "Microsoft.EntityFrameworkCore": "10.0.3" + "Microsoft.EntityFrameworkCore": "10.0.5" } }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[10.*, )", - "resolved": "10.0.103", - "contentHash": "qZk7r40ftpZY+/sO019sgWAWfNqC2CLSspDdAxNYCJU/bCi/8jVwvOMjzb/d5gjCRNzQ4OCYgBfhdpQyVwLTyw==", + "resolved": "10.0.201", + "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.103", - "Microsoft.SourceLink.Common": "10.0.103" + "Microsoft.Build.Tasks.Git": "10.0.201", + "Microsoft.SourceLink.Common": "10.0.201", + "System.IO.Hashing": "10.0.5" } }, "PPWCode.AspNetCore.Server.I": { @@ -81,33 +82,36 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "QoiCMcPuxC6eqRQmrmF9zBY96ejIznXtve/lJJbonGD9I5Aygf2AUCOWslGiCEtBbfWRSuUnepBjuuVOdAl5ag==" + "resolved": "10.0.201", + "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "dependencies": { + "System.IO.Hashing": "10.0.5" + } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "10.0.3", - "contentHash": "c7Uoz381xnMHNBRB8eHRhGgzUtXbgddlbODhwZRrTSzZWDharp3RkJsFwhxyESbeXhCqmML7VdvjMQ7uu+HreA==" + "resolved": "10.0.5", + "contentHash": "32c58Rnm47Qvhimawf67KO9PytgPz3QoWye7Abapt0Yocw/JnzMiSNj/pRoIKyn8Jxypkv86zxKD4Q/zNTc0Ag==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "10.0.3", - "contentHash": "lVABgJTyTUNE7Bi0bSu4dWHiCHIXEGzTh/kLh0N07IgU/tIKwTeBPp8tgV4x2iKj4h7iPLo8oXzyHmLDGtAE1g==" + "resolved": "10.0.5", + "contentHash": "ipC4u1VojgEfoIZhtbS2Sx5IluJTP/Jf1hz3yGsxGBgSukYY/CquI6rAjxn5H58CZgVn36qcuPPtNMwZ0AUzMg==" }, "Microsoft.Extensions.ApiDescription.Server": { "type": "Transitive", - "resolved": "6.0.5", - "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==" + "resolved": "10.0.0", + "contentHash": "NCWCGiwRwje8773yzPQhvucYnnfeR+ZoB1VRIrIMp4uaeUNw7jvEPHij3HIbwCDuNCrNcphA00KSAR9yD9qmbg==" }, "Microsoft.OpenApi": { "type": "Transitive", - "resolved": "1.6.22", - "contentHash": "aBvunmrdu/x+4CaA/UP1Jx4xWGwk4kymhoIRnn2Vp+zi5/KOPQJ9EkSXHRUr01WcGKtYl3Au7XfkPJbU1G2sjQ==" + "resolved": "2.4.1", + "contentHash": "u7QhXCISMQuab3flasb1hoaiERmUqyWsW7tmQODyILoQ7mJV5IRGM+2KKZYo0QUfC13evEOcHAb6TPWgqEQtrw==" }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "cMtGW5/r0ck72Jg2QwZcNTX59z+iB/B1kW84VMa/eX8L19DhHIuIcQjfK0pgLLBxd60Jl0Bj9GUolcM0MnJnZA==" + "resolved": "10.0.201", + "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" }, "PPWCode.Util.Time.I": { "type": "Transitive", @@ -135,24 +139,29 @@ }, "Swashbuckle.AspNetCore.Swagger": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "39Z2N3cLHDcDinu2IW5IaQO9wGPKTbc+vKbjIT/6gN3jFYypWY5U3O8i7Y9rmYDgxkm6niICnkcFZ3hEvikIHA==", + "resolved": "10.1.7", + "contentHash": "EjLibt/d/QuRv170GoihTbcPUpgzSFm2WKHhnGJFZQ03JYzfuitsM79azaAR8NBwRunU7yScSX6HRE5JUlrEMQ==", "dependencies": { - "Microsoft.OpenApi": "1.6.22" + "Microsoft.OpenApi": "2.4.1" } }, "Swashbuckle.AspNetCore.SwaggerGen": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "x5famjpcgazpT/8eEIlpSYSTZDq6ojMARhuJgj6O67Uk+Yb1DdDM5yikdL7GK1pMk5rYBETUCRWYP6rp+vHnlA==", + "resolved": "10.1.7", + "contentHash": "PuubO9BjvNn6U3D9kLpuWKY1JtziWw7SsGBq0age1E50uQjQ8Fzl8s0EwzrLfANqYJNgDnJi9l7N1QxcGVB2Zw==", "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "7.3.2" + "Swashbuckle.AspNetCore.Swagger": "10.1.7" } }, "Swashbuckle.AspNetCore.SwaggerUI": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "SNQuFjYin9KhkoCSVOD5/Y4VEyAjKBDeZkIqqY6x+oI21HMKzzVkeJA9V7tWFXf5df4m/+pTIlbKO7g5W9UroQ==" + "resolved": "10.1.7", + "contentHash": "iJo3ODyUb/M8Vm8AH1r9y9iAba0w95xsCn3zFVl96ISRHbTDWxi+l7oFVCZqUEdjd97B8VMDPnMliWAdomR8uw==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.5", + "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" }, "ppwcode.aspnetcore.host.i": { "type": "Project", @@ -162,8 +171,8 @@ "PPWCode.Util.Authorization.I": "[1.*, )", "PPWCode.Vernacular.Persistence.V": "[1.*, )", "PPWCode.Vernacular.RequestContext.I": "[1.*, )", - "Swashbuckle.AspNetCore": "[7.*, )", - "Swashbuckle.AspNetCore.Annotations": "[7.*, )" + "Swashbuckle.AspNetCore": "[10.*, )", + "Swashbuckle.AspNetCore.Annotations": "[10.*, )" } }, "Asp.Versioning.Mvc.ApiExplorer": { @@ -190,8 +199,8 @@ "PPWCode.Vernacular.Persistence.V": { "type": "CentralTransitive", "requested": "[1.*, )", - "resolved": "1.0.0", - "contentHash": "YsfYBPHs+7UWS1gI4UbezhUS8xno1OfdYq0TaDCU7QSVQlDOiYTgCdOSN/xFy9hmZNz7u3BpcrEexUBUpWGAgQ==", + "resolved": "1.1.0", + "contentHash": "iXoTU962vqg7k4Xivj5yZKRBwes95XY2pEAQ1nAATv8i1+Krc9rXQsWvrLNCs5gD6Wf7racSjcr3ozoo3MHuWA==", "dependencies": { "PPWCode.Vernacular.Contracts.I": "1.5.0", "PPWCode.Vernacular.Exceptions.V": "1.1.0", @@ -211,23 +220,23 @@ }, "Swashbuckle.AspNetCore": { "type": "CentralTransitive", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "WEkW7Cl8bexT75eURuqrqM/TQx+ftWKOWlCHzmw3Fl3oAmxiBO/lDVOuuqZsaBCHQIBcZxA6BbyiG5dv2mD2tw==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "vgef8DPT411JU5JjHiDbr0WOxsIVuAvegPGtqmm4Na4JRl/264dfBJcGkiPHsAr5P+Vda+qN1rZKRtBl1rF9aA==", "dependencies": { - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerUI": "7.3.2" + "Microsoft.Extensions.ApiDescription.Server": "10.0.0", + "Swashbuckle.AspNetCore.Swagger": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7" } }, "Swashbuckle.AspNetCore.Annotations": { "type": "CentralTransitive", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "JaGYVVuiHzv3WWanFh/Fzx8ZYOtayNAhso5rwmHdxVYxn3AYJLYdijIBvQaEt4MIcsN0I1zXZfC/YKh47y3ocQ==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "qHNQghKAzrjDEECIlyKEanmWxXDzrh6PyjGWVdql2qZfap0Ionuxam5OrUozibjbgQbVjRmgSXxWC8giIuCbGA==", "dependencies": { - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2" + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7" } } }, @@ -235,30 +244,31 @@ "Microsoft.EntityFrameworkCore": { "type": "Direct", "requested": "[8.*, )", - "resolved": "8.0.24", - "contentHash": "Jf82MqfFU3Nte4Cpmtq5HXhQfXHYhJawFawWuy281uiibg/Ch9z9D/gMnORFhjmGSxzSA4CmRaHwDm2lU9H/ZA==", + "resolved": "8.0.25", + "contentHash": "1seNis+YnJwiQpwzBCQVWTlyfnlfwotQUkCC0MINwS6yt5Gco4XZ/xOz1fB5uwAWjO/TrDzL/sIMk2hXPxeHbg==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "8.0.24", - "Microsoft.EntityFrameworkCore.Analyzers": "8.0.24" + "Microsoft.EntityFrameworkCore.Abstractions": "8.0.25", + "Microsoft.EntityFrameworkCore.Analyzers": "8.0.25" } }, "Microsoft.EntityFrameworkCore.Relational": { "type": "Direct", "requested": "[8.*, )", - "resolved": "8.0.24", - "contentHash": "QMGORS3ltx2RWHBCUcBjadS0eNYGkTGXsOdZf3oSM6pZuNBBl16z6gThA3a+BF8T5HY3jThxVDFKaPHxmpueXA==", + "resolved": "8.0.25", + "contentHash": "/6S+I5PvmlzDeLMCXZGCXmnUNiJdLyucUrnwkItNhNRZB8ftVYXdyM0omNwm3UDvRSQVMnb3e5s7+YusLvvYeg==", "dependencies": { - "Microsoft.EntityFrameworkCore": "8.0.24" + "Microsoft.EntityFrameworkCore": "8.0.25" } }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[10.*, )", - "resolved": "10.0.103", - "contentHash": "qZk7r40ftpZY+/sO019sgWAWfNqC2CLSspDdAxNYCJU/bCi/8jVwvOMjzb/d5gjCRNzQ4OCYgBfhdpQyVwLTyw==", + "resolved": "10.0.201", + "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.103", - "Microsoft.SourceLink.Common": "10.0.103" + "Microsoft.Build.Tasks.Git": "10.0.201", + "Microsoft.SourceLink.Common": "10.0.201", + "System.IO.Hashing": "10.0.5" } }, "PPWCode.AspNetCore.Server.I": { @@ -311,33 +321,36 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "QoiCMcPuxC6eqRQmrmF9zBY96ejIznXtve/lJJbonGD9I5Aygf2AUCOWslGiCEtBbfWRSuUnepBjuuVOdAl5ag==" + "resolved": "10.0.201", + "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "dependencies": { + "System.IO.Hashing": "10.0.5" + } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "8.0.24", - "contentHash": "epzWc4RnG6aQS+MfIK1gg1XbL8ZTYgKtW8L1lDVHG4C3nilLd6tX8moX6Sv8sXQkH/tMhWhT2e4Nm811kYeoxg==" + "resolved": "8.0.25", + "contentHash": "YGJD4/P34LsQetSH5R0J58nAWSFGn7BE11zThfCkILTW8wy+9/kwqM2P0ciHhuzlPzwApputDfQ5u35+fH6BGQ==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "8.0.24", - "contentHash": "nuMx9iCGkZgHvPKlnrYBjlxRgy8VDe443H0PbiDUvxQ8+4nC5JYhqQ9u5lg+FssnTh+QyvwVVVHvkCyAnrpajA==" + "resolved": "8.0.25", + "contentHash": "jHtsaYPDBoNsIA085ZbqrZGidG+rnoZGJ/0JTL6QHR0XV4JLnLoJgPao7zVsqhEVJUnS7JOfVClr0UThAxoiuQ==" }, "Microsoft.Extensions.ApiDescription.Server": { "type": "Transitive", - "resolved": "6.0.5", - "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==" + "resolved": "8.0.0", + "contentHash": "jDM3a95WerM8g6IcMiBXq1qRS9dqmEUpgnCk2DeMWpPkYtp1ia+CkXabOnK93JmhVlUmv8l9WMPsCSUm+WqkIA==" }, "Microsoft.OpenApi": { "type": "Transitive", - "resolved": "1.6.22", - "contentHash": "aBvunmrdu/x+4CaA/UP1Jx4xWGwk4kymhoIRnn2Vp+zi5/KOPQJ9EkSXHRUr01WcGKtYl3Au7XfkPJbU1G2sjQ==" + "resolved": "2.4.1", + "contentHash": "u7QhXCISMQuab3flasb1hoaiERmUqyWsW7tmQODyILoQ7mJV5IRGM+2KKZYo0QUfC13evEOcHAb6TPWgqEQtrw==" }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "cMtGW5/r0ck72Jg2QwZcNTX59z+iB/B1kW84VMa/eX8L19DhHIuIcQjfK0pgLLBxd60Jl0Bj9GUolcM0MnJnZA==" + "resolved": "10.0.201", + "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" }, "PPWCode.Util.Time.I": { "type": "Transitive", @@ -365,24 +378,29 @@ }, "Swashbuckle.AspNetCore.Swagger": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "39Z2N3cLHDcDinu2IW5IaQO9wGPKTbc+vKbjIT/6gN3jFYypWY5U3O8i7Y9rmYDgxkm6niICnkcFZ3hEvikIHA==", + "resolved": "10.1.7", + "contentHash": "EjLibt/d/QuRv170GoihTbcPUpgzSFm2WKHhnGJFZQ03JYzfuitsM79azaAR8NBwRunU7yScSX6HRE5JUlrEMQ==", "dependencies": { - "Microsoft.OpenApi": "1.6.22" + "Microsoft.OpenApi": "2.4.1" } }, "Swashbuckle.AspNetCore.SwaggerGen": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "x5famjpcgazpT/8eEIlpSYSTZDq6ojMARhuJgj6O67Uk+Yb1DdDM5yikdL7GK1pMk5rYBETUCRWYP6rp+vHnlA==", + "resolved": "10.1.7", + "contentHash": "PuubO9BjvNn6U3D9kLpuWKY1JtziWw7SsGBq0age1E50uQjQ8Fzl8s0EwzrLfANqYJNgDnJi9l7N1QxcGVB2Zw==", "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "7.3.2" + "Swashbuckle.AspNetCore.Swagger": "10.1.7" } }, "Swashbuckle.AspNetCore.SwaggerUI": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "SNQuFjYin9KhkoCSVOD5/Y4VEyAjKBDeZkIqqY6x+oI21HMKzzVkeJA9V7tWFXf5df4m/+pTIlbKO7g5W9UroQ==" + "resolved": "10.1.7", + "contentHash": "iJo3ODyUb/M8Vm8AH1r9y9iAba0w95xsCn3zFVl96ISRHbTDWxi+l7oFVCZqUEdjd97B8VMDPnMliWAdomR8uw==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.5", + "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" }, "ppwcode.aspnetcore.host.i": { "type": "Project", @@ -392,8 +410,8 @@ "PPWCode.Util.Authorization.I": "[1.*, )", "PPWCode.Vernacular.Persistence.V": "[1.*, )", "PPWCode.Vernacular.RequestContext.I": "[1.*, )", - "Swashbuckle.AspNetCore": "[7.*, )", - "Swashbuckle.AspNetCore.Annotations": "[7.*, )" + "Swashbuckle.AspNetCore": "[10.*, )", + "Swashbuckle.AspNetCore.Annotations": "[10.*, )" } }, "Asp.Versioning.Mvc.ApiExplorer": { @@ -420,8 +438,8 @@ "PPWCode.Vernacular.Persistence.V": { "type": "CentralTransitive", "requested": "[1.*, )", - "resolved": "1.0.0", - "contentHash": "YsfYBPHs+7UWS1gI4UbezhUS8xno1OfdYq0TaDCU7QSVQlDOiYTgCdOSN/xFy9hmZNz7u3BpcrEexUBUpWGAgQ==", + "resolved": "1.1.0", + "contentHash": "iXoTU962vqg7k4Xivj5yZKRBwes95XY2pEAQ1nAATv8i1+Krc9rXQsWvrLNCs5gD6Wf7racSjcr3ozoo3MHuWA==", "dependencies": { "PPWCode.Vernacular.Contracts.I": "1.5.0", "PPWCode.Vernacular.Exceptions.V": "1.1.0", @@ -441,23 +459,23 @@ }, "Swashbuckle.AspNetCore": { "type": "CentralTransitive", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "WEkW7Cl8bexT75eURuqrqM/TQx+ftWKOWlCHzmw3Fl3oAmxiBO/lDVOuuqZsaBCHQIBcZxA6BbyiG5dv2mD2tw==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "vgef8DPT411JU5JjHiDbr0WOxsIVuAvegPGtqmm4Na4JRl/264dfBJcGkiPHsAr5P+Vda+qN1rZKRtBl1rF9aA==", "dependencies": { - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerUI": "7.3.2" + "Microsoft.Extensions.ApiDescription.Server": "8.0.0", + "Swashbuckle.AspNetCore.Swagger": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7" } }, "Swashbuckle.AspNetCore.Annotations": { "type": "CentralTransitive", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "JaGYVVuiHzv3WWanFh/Fzx8ZYOtayNAhso5rwmHdxVYxn3AYJLYdijIBvQaEt4MIcsN0I1zXZfC/YKh47y3ocQ==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "qHNQghKAzrjDEECIlyKEanmWxXDzrh6PyjGWVdql2qZfap0Ionuxam5OrUozibjbgQbVjRmgSXxWC8giIuCbGA==", "dependencies": { - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2" + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7" } } }, @@ -465,30 +483,31 @@ "Microsoft.EntityFrameworkCore": { "type": "Direct", "requested": "[9.*, )", - "resolved": "9.0.13", - "contentHash": "irtGBQFEnjb17HRgxxbj3HgC14js48aYus9YhTpBEihqrdH50M7YqBtWippwpIJWwdMF7TFyQXpSTt4lFekPZw==", + "resolved": "9.0.14", + "contentHash": "Bxw540n++gVwFbrh3NyxwV4ZwPonhbBmhiq7JdDyBUibLAPGvqvsu73Us3LGfRoLbQrhPEgu6cKSvQq+5ABAJA==", "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "9.0.13", - "Microsoft.EntityFrameworkCore.Analyzers": "9.0.13" + "Microsoft.EntityFrameworkCore.Abstractions": "9.0.14", + "Microsoft.EntityFrameworkCore.Analyzers": "9.0.14" } }, "Microsoft.EntityFrameworkCore.Relational": { "type": "Direct", "requested": "[9.*, )", - "resolved": "9.0.13", - "contentHash": "eQgG7yfe3ULgRk7YS8oIeljbmtV8AJ+lmzd5ezbA1ceEa1gRo9Y/d8+AvHq9NATp7QWZoe+qhyDFvCX8+ByI/A==", + "resolved": "9.0.14", + "contentHash": "R73NifQ3oiAEmvQokCrUtDaVMRO9UQXp52cpwosTZkAmpK2XtmJbHIrZRUjvLWkCzTlwjTDP27bH04PlyNeJoA==", "dependencies": { - "Microsoft.EntityFrameworkCore": "9.0.13" + "Microsoft.EntityFrameworkCore": "9.0.14" } }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[10.*, )", - "resolved": "10.0.103", - "contentHash": "qZk7r40ftpZY+/sO019sgWAWfNqC2CLSspDdAxNYCJU/bCi/8jVwvOMjzb/d5gjCRNzQ4OCYgBfhdpQyVwLTyw==", + "resolved": "10.0.201", + "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.103", - "Microsoft.SourceLink.Common": "10.0.103" + "Microsoft.Build.Tasks.Git": "10.0.201", + "Microsoft.SourceLink.Common": "10.0.201", + "System.IO.Hashing": "10.0.5" } }, "PPWCode.AspNetCore.Server.I": { @@ -541,33 +560,36 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "QoiCMcPuxC6eqRQmrmF9zBY96ejIznXtve/lJJbonGD9I5Aygf2AUCOWslGiCEtBbfWRSuUnepBjuuVOdAl5ag==" + "resolved": "10.0.201", + "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "dependencies": { + "System.IO.Hashing": "10.0.5" + } }, "Microsoft.EntityFrameworkCore.Abstractions": { "type": "Transitive", - "resolved": "9.0.13", - "contentHash": "baCHd+W1QEl2HmWodnFhJ50eElH/Z+ku+aKod4GN9AGhkItqBCcVkETMz/b9QtqxOgyM+Pu0Srv7atLTBdXSFg==" + "resolved": "9.0.14", + "contentHash": "lU0DBe/uZ5hNW1G6tQcikcJhjmDE4eRjRQzaiFi41zxXUMndtZQaGGVNVWXeW6M9K6T212WnBA5cwydzBYmKNA==" }, "Microsoft.EntityFrameworkCore.Analyzers": { "type": "Transitive", - "resolved": "9.0.13", - "contentHash": "GQE2qm6U45Zgouw7PSojGmkDnNq+IMjO/+BOm8OHqzK0h+uNjL6MQeuansNQZ6gIM2e3w9KZTLXQTHA0FcuknQ==" + "resolved": "9.0.14", + "contentHash": "u7j9NgArLjf3OzeXX1jx9K59Ytki0CfhMloXxons/cIhq/35QilP6R+NfPlQy/nMax+edeGRRfEg9hWFsjqsXA==" }, "Microsoft.Extensions.ApiDescription.Server": { "type": "Transitive", - "resolved": "6.0.5", - "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==" + "resolved": "9.0.0", + "contentHash": "1Kzzf7pRey40VaUkHN9/uWxrKVkLu2AQjt+GVeeKLLpiEHAJ1xZRsLSh4ZZYEnyS7Kt2OBOPmsXNdU+wbcOl5w==" }, "Microsoft.OpenApi": { "type": "Transitive", - "resolved": "1.6.22", - "contentHash": "aBvunmrdu/x+4CaA/UP1Jx4xWGwk4kymhoIRnn2Vp+zi5/KOPQJ9EkSXHRUr01WcGKtYl3Au7XfkPJbU1G2sjQ==" + "resolved": "2.4.1", + "contentHash": "u7QhXCISMQuab3flasb1hoaiERmUqyWsW7tmQODyILoQ7mJV5IRGM+2KKZYo0QUfC13evEOcHAb6TPWgqEQtrw==" }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "cMtGW5/r0ck72Jg2QwZcNTX59z+iB/B1kW84VMa/eX8L19DhHIuIcQjfK0pgLLBxd60Jl0Bj9GUolcM0MnJnZA==" + "resolved": "10.0.201", + "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" }, "PPWCode.Util.Time.I": { "type": "Transitive", @@ -595,24 +617,29 @@ }, "Swashbuckle.AspNetCore.Swagger": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "39Z2N3cLHDcDinu2IW5IaQO9wGPKTbc+vKbjIT/6gN3jFYypWY5U3O8i7Y9rmYDgxkm6niICnkcFZ3hEvikIHA==", + "resolved": "10.1.7", + "contentHash": "EjLibt/d/QuRv170GoihTbcPUpgzSFm2WKHhnGJFZQ03JYzfuitsM79azaAR8NBwRunU7yScSX6HRE5JUlrEMQ==", "dependencies": { - "Microsoft.OpenApi": "1.6.22" + "Microsoft.OpenApi": "2.4.1" } }, "Swashbuckle.AspNetCore.SwaggerGen": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "x5famjpcgazpT/8eEIlpSYSTZDq6ojMARhuJgj6O67Uk+Yb1DdDM5yikdL7GK1pMk5rYBETUCRWYP6rp+vHnlA==", + "resolved": "10.1.7", + "contentHash": "PuubO9BjvNn6U3D9kLpuWKY1JtziWw7SsGBq0age1E50uQjQ8Fzl8s0EwzrLfANqYJNgDnJi9l7N1QxcGVB2Zw==", "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "7.3.2" + "Swashbuckle.AspNetCore.Swagger": "10.1.7" } }, "Swashbuckle.AspNetCore.SwaggerUI": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "SNQuFjYin9KhkoCSVOD5/Y4VEyAjKBDeZkIqqY6x+oI21HMKzzVkeJA9V7tWFXf5df4m/+pTIlbKO7g5W9UroQ==" + "resolved": "10.1.7", + "contentHash": "iJo3ODyUb/M8Vm8AH1r9y9iAba0w95xsCn3zFVl96ISRHbTDWxi+l7oFVCZqUEdjd97B8VMDPnMliWAdomR8uw==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.5", + "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" }, "ppwcode.aspnetcore.host.i": { "type": "Project", @@ -622,8 +649,8 @@ "PPWCode.Util.Authorization.I": "[1.*, )", "PPWCode.Vernacular.Persistence.V": "[1.*, )", "PPWCode.Vernacular.RequestContext.I": "[1.*, )", - "Swashbuckle.AspNetCore": "[7.*, )", - "Swashbuckle.AspNetCore.Annotations": "[7.*, )" + "Swashbuckle.AspNetCore": "[10.*, )", + "Swashbuckle.AspNetCore.Annotations": "[10.*, )" } }, "Asp.Versioning.Mvc.ApiExplorer": { @@ -650,8 +677,8 @@ "PPWCode.Vernacular.Persistence.V": { "type": "CentralTransitive", "requested": "[1.*, )", - "resolved": "1.0.0", - "contentHash": "YsfYBPHs+7UWS1gI4UbezhUS8xno1OfdYq0TaDCU7QSVQlDOiYTgCdOSN/xFy9hmZNz7u3BpcrEexUBUpWGAgQ==", + "resolved": "1.1.0", + "contentHash": "iXoTU962vqg7k4Xivj5yZKRBwes95XY2pEAQ1nAATv8i1+Krc9rXQsWvrLNCs5gD6Wf7racSjcr3ozoo3MHuWA==", "dependencies": { "PPWCode.Vernacular.Contracts.I": "1.5.0", "PPWCode.Vernacular.Exceptions.V": "1.1.0", @@ -671,23 +698,23 @@ }, "Swashbuckle.AspNetCore": { "type": "CentralTransitive", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "WEkW7Cl8bexT75eURuqrqM/TQx+ftWKOWlCHzmw3Fl3oAmxiBO/lDVOuuqZsaBCHQIBcZxA6BbyiG5dv2mD2tw==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "vgef8DPT411JU5JjHiDbr0WOxsIVuAvegPGtqmm4Na4JRl/264dfBJcGkiPHsAr5P+Vda+qN1rZKRtBl1rF9aA==", "dependencies": { - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerUI": "7.3.2" + "Microsoft.Extensions.ApiDescription.Server": "9.0.0", + "Swashbuckle.AspNetCore.Swagger": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7" } }, "Swashbuckle.AspNetCore.Annotations": { "type": "CentralTransitive", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "JaGYVVuiHzv3WWanFh/Fzx8ZYOtayNAhso5rwmHdxVYxn3AYJLYdijIBvQaEt4MIcsN0I1zXZfC/YKh47y3ocQ==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "qHNQghKAzrjDEECIlyKEanmWxXDzrh6PyjGWVdql2qZfap0Ionuxam5OrUozibjbgQbVjRmgSXxWC8giIuCbGA==", "dependencies": { - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2" + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7" } } } diff --git a/src/I/Swagger/AddDefaultRequiredFields.cs b/src/I/Swagger/AddDefaultRequiredFields.cs index b9d715e..5e4f4ec 100644 --- a/src/I/Swagger/AddDefaultRequiredFields.cs +++ b/src/I/Swagger/AddDefaultRequiredFields.cs @@ -1,4 +1,4 @@ -// Copyright 2025 by PeopleWare n.v.. +// Copyright 2026 by PeopleWare n.v.. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -11,14 +11,16 @@ using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; +using System.Text.Json.Nodes; using Asp.Versioning; using Microsoft.AspNetCore.Mvc.ApiExplorer; -using Microsoft.OpenApi.Any; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using PPWCode.AspNetCore.Host.I.Bootstrap; +using PPWCode.Vernacular.Contracts.I; +using PPWCode.Vernacular.Exceptions.V; using Swashbuckle.AspNetCore.SwaggerGen; @@ -36,7 +38,7 @@ static AddDefaultRequiredFields() new( typeof(ApiVersion), [ - (pd => $"{pd.ParameterDescriptor.Name}", new OpenApiString($"{Startup.DefaultApiVersion.ToString(Startup.ApiVersionFormat)}")) + (pd => $"{pd.ParameterDescriptor.Name}", JsonValue.Create($"{Startup.DefaultApiVersion.ToString(Startup.ApiVersionFormat)}")) ]); _requiredFieldsWithDefaultValues.Add(defaultRequiredField); } @@ -63,28 +65,41 @@ public override void Apply(OpenApiOperation operation, OperationFilterContext co continue; } - foreach ((Func, IOpenApiAny) tuple in defaultRequiredField.ParamLambdas) + foreach ((Func, JsonNode) tuple in defaultRequiredField.ParamLambdas) { SetParamValue(operation, tuple.Item1.Invoke(parameter), tuple.Item2); } } } - protected void SetParamValue(OpenApiOperation operation, string name, IOpenApiAny defaultValue) + protected void SetParamValue(OpenApiOperation operation, string name, JsonNode defaultValue) { - OpenApiParameter? param = + Contract.Requires(operation.Parameters is not null); + IOpenApiParameter? parameter = operation .Parameters .SingleOrDefault(p => string.Equals(p.Name, name, StringComparison.OrdinalIgnoreCase)); - if (param is { Required: true }) + + if (parameter is not null) { - param.Example = defaultValue; + OpenApiParameter? openApiParameter = + parameter switch + { + OpenApiParameter openApiParameterTemp => openApiParameterTemp, + OpenApiParameterReference openApiParameterReference => openApiParameterReference.RecursiveTarget, + _ => throw new ProgrammingError("Unsupported configuration") + }; + + if (openApiParameter is not null && openApiParameter.Required) + { + openApiParameter.Example = defaultValue; + } } } public class DefaultRequiredField { - public DefaultRequiredField(Type type, (Func, IOpenApiAny)[] paramLambdas) + public DefaultRequiredField(Type type, (Func, JsonNode)[] paramLambdas) { Type = type; ParamLambdas = paramLambdas; @@ -92,7 +107,7 @@ public DefaultRequiredField(Type type, (Func, I public Type Type { get; } - public (Func, IOpenApiAny)[] ParamLambdas { get; } + public (Func, JsonNode)[] ParamLambdas { get; } } } } diff --git a/src/I/Swagger/AddNoContentCodes.cs b/src/I/Swagger/AddNoContentCodes.cs index d0eda48..9d10d51 100644 --- a/src/I/Swagger/AddNoContentCodes.cs +++ b/src/I/Swagger/AddNoContentCodes.cs @@ -1,4 +1,4 @@ -// Copyright 2025 by PeopleWare n.v.. +// Copyright 2026 by PeopleWare n.v.. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -12,7 +12,7 @@ using System.Diagnostics.CodeAnalysis; using System.Net; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; diff --git a/src/I/Swagger/AddNotFoundResponseCodes.cs b/src/I/Swagger/AddNotFoundResponseCodes.cs index d378ebe..6ada7ff 100644 --- a/src/I/Swagger/AddNotFoundResponseCodes.cs +++ b/src/I/Swagger/AddNotFoundResponseCodes.cs @@ -1,4 +1,4 @@ -// Copyright 2025 by PeopleWare n.v.. +// Copyright 2026 by PeopleWare n.v.. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -16,7 +16,7 @@ using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.AspNetCore.Mvc.ModelBinding; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; diff --git a/src/I/Swagger/AddRequestSimulationHeader.cs b/src/I/Swagger/AddRequestSimulationHeader.cs index e4e81f5..bce8021 100644 --- a/src/I/Swagger/AddRequestSimulationHeader.cs +++ b/src/I/Swagger/AddRequestSimulationHeader.cs @@ -1,4 +1,4 @@ -// Copyright 2025 by PeopleWare n.v.. +// Copyright 2026 by PeopleWare n.v.. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -11,7 +11,7 @@ using System.Diagnostics.CodeAnalysis; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using PPWCode.AspNetCore.Host.I.Transactional; @@ -32,7 +32,7 @@ public override void Apply(OpenApiOperation operation, OperationFilterContext co { if (IsPost(context) || IsPut(context) || IsDelete(context)) { - operation.Parameters ??= new List(); + operation.Parameters ??= new List(); operation.Parameters.Add( new OpenApiParameter { @@ -42,7 +42,7 @@ public override void Apply(OpenApiOperation operation, OperationFilterContext co Schema = new OpenApiSchema { - Type = "string" + Type = JsonSchemaType.String }, Required = false, }); diff --git a/src/I/Swagger/AddSemanticFaultResponseCodes.cs b/src/I/Swagger/AddSemanticFaultResponseCodes.cs index 5e8bcfe..99f0366 100644 --- a/src/I/Swagger/AddSemanticFaultResponseCodes.cs +++ b/src/I/Swagger/AddSemanticFaultResponseCodes.cs @@ -1,4 +1,4 @@ -// Copyright 2025 by PeopleWare n.v.. +// Copyright 2026 by PeopleWare n.v.. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -12,7 +12,7 @@ using System.Diagnostics.CodeAnalysis; using System.Net; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; @@ -25,7 +25,7 @@ public class AddSemanticFaultResponseCodes : PpwOperationFilter /// public override void Apply(OpenApiOperation operation, OperationFilterContext context) { - OpenApiResponse response = new OpenApiResponse { Description = "Parameter validation failed or some business rules were not fulfilled." }; + OpenApiResponse response = new() { Description = "Parameter validation failed or some business rules were not fulfilled." }; ConditionalAddResponse(operation, $"{HttpStatusCode.BadRequest:D}", response); } } diff --git a/src/I/Swagger/AddTransactionalInformation.cs b/src/I/Swagger/AddTransactionalInformation.cs index f9d5b96..b760956 100644 --- a/src/I/Swagger/AddTransactionalInformation.cs +++ b/src/I/Swagger/AddTransactionalInformation.cs @@ -1,4 +1,4 @@ -// Copyright 2025 by PeopleWare n.v.. +// Copyright 2026 by PeopleWare n.v.. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -14,7 +14,7 @@ using System.Text; using Microsoft.AspNetCore.Mvc.Controllers; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using PPWCode.AspNetCore.Server.I.Transactional; diff --git a/src/I/Swagger/ForceTypeToStringSchemaFilter.cs b/src/I/Swagger/ForceTypeToStringSchemaFilter.cs new file mode 100644 index 0000000..44d2102 --- /dev/null +++ b/src/I/Swagger/ForceTypeToStringSchemaFilter.cs @@ -0,0 +1,34 @@ +using Microsoft.OpenApi; + +using PPWCode.Vernacular.Contracts.I; +using PPWCode.Vernacular.Exceptions.V; + +using Swashbuckle.AspNetCore.SwaggerGen; + +namespace PPWCode.AspNetCore.Host.I.Swagger; + +public class ForceTypeToStringSchemaFilter : ISchemaFilter + where T : class +{ + /// + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + OpenApiSchema? openApiSchema = + schema switch + { + OpenApiSchema openApiSchemaTemp => openApiSchemaTemp, + OpenApiSchemaReference openApiSchemaReference => openApiSchemaReference.RecursiveTarget, + _ => throw new ProgrammingError("Unsupported configuration") + }; + + if (openApiSchema is not null && (context.Type == typeof(T))) + { + // Override schema to be a string + openApiSchema.Type = JsonSchemaType.String; + + // Remove properties (e.g., "value") + Contract.Assert(openApiSchema.Properties != null); + openApiSchema.Properties.Clear(); + } + } +} diff --git a/src/I/Swagger/INSSSchemaFilter.cs b/src/I/Swagger/INSSSchemaFilter.cs deleted file mode 100644 index a3eb20e..0000000 --- a/src/I/Swagger/INSSSchemaFilter.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.OpenApi.Models; - -using Swashbuckle.AspNetCore.SwaggerGen; - -namespace PPWCode.AspNetCore.Host.I.Swagger; - -public class INSSSchemaFilter : ISchemaFilter - where T : class -{ - /// - public void Apply(OpenApiSchema schema, SchemaFilterContext context) - { - if (context.Type == typeof(T)) - { - // Override schema to be a string - schema.Type = "string"; - - // Remove properties (e.g., "value") - schema.Properties.Clear(); - } - } -} diff --git a/src/I/Swagger/PpwOperationFilter.cs b/src/I/Swagger/PpwOperationFilter.cs index 4e3514c..766002b 100644 --- a/src/I/Swagger/PpwOperationFilter.cs +++ b/src/I/Swagger/PpwOperationFilter.cs @@ -1,4 +1,4 @@ -// Copyright 2025 by PeopleWare n.v.. +// Copyright 2026 by PeopleWare n.v.. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -13,8 +13,9 @@ using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.AspNetCore.Mvc.Controllers; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; +using PPWCode.Vernacular.Contracts.I; using PPWCode.Vernacular.Persistence.V; using Swashbuckle.AspNetCore.SwaggerGen; @@ -69,15 +70,20 @@ protected virtual string GetIdentifications(ApiDescription apiDescription, Func< .Select(GetIdentification)); protected virtual bool ResponseExists(OpenApiOperation operation, string key) - => operation.Responses.ContainsKey(key); + { + Contract.Requires(operation.Responses is not null); + return operation.Responses.ContainsKey(key); + } protected virtual void AddResponse(OpenApiOperation operation, string key, OpenApiResponse response) { + Contract.Requires(operation.Responses is not null); operation.Responses.Add(key, response); } protected virtual void RemoveResponse(OpenApiOperation operation, string key) { + Contract.Requires(operation.Responses is not null); if (ResponseExists(operation, key)) { operation.Responses.Remove(key); diff --git a/src/I/packages.lock.json b/src/I/packages.lock.json index 8ea2c8b..7b31f48 100644 --- a/src/I/packages.lock.json +++ b/src/I/packages.lock.json @@ -14,11 +14,12 @@ "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[10.*, )", - "resolved": "10.0.103", - "contentHash": "qZk7r40ftpZY+/sO019sgWAWfNqC2CLSspDdAxNYCJU/bCi/8jVwvOMjzb/d5gjCRNzQ4OCYgBfhdpQyVwLTyw==", + "resolved": "10.0.201", + "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.103", - "Microsoft.SourceLink.Common": "10.0.103" + "Microsoft.Build.Tasks.Git": "10.0.201", + "Microsoft.SourceLink.Common": "10.0.201", + "System.IO.Hashing": "10.0.5" } }, "PPWCode.AspNetCore.Server.I": { @@ -42,8 +43,8 @@ "PPWCode.Vernacular.Persistence.V": { "type": "Direct", "requested": "[1.*, )", - "resolved": "1.0.0", - "contentHash": "YsfYBPHs+7UWS1gI4UbezhUS8xno1OfdYq0TaDCU7QSVQlDOiYTgCdOSN/xFy9hmZNz7u3BpcrEexUBUpWGAgQ==", + "resolved": "1.1.0", + "contentHash": "iXoTU962vqg7k4Xivj5yZKRBwes95XY2pEAQ1nAATv8i1+Krc9rXQsWvrLNCs5gD6Wf7racSjcr3ozoo3MHuWA==", "dependencies": { "PPWCode.Vernacular.Contracts.I": "1.5.0", "PPWCode.Vernacular.Exceptions.V": "1.1.0", @@ -72,23 +73,23 @@ }, "Swashbuckle.AspNetCore": { "type": "Direct", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "WEkW7Cl8bexT75eURuqrqM/TQx+ftWKOWlCHzmw3Fl3oAmxiBO/lDVOuuqZsaBCHQIBcZxA6BbyiG5dv2mD2tw==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "vgef8DPT411JU5JjHiDbr0WOxsIVuAvegPGtqmm4Na4JRl/264dfBJcGkiPHsAr5P+Vda+qN1rZKRtBl1rF9aA==", "dependencies": { - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerUI": "7.3.2" + "Microsoft.Extensions.ApiDescription.Server": "10.0.0", + "Swashbuckle.AspNetCore.Swagger": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7" } }, "Swashbuckle.AspNetCore.Annotations": { "type": "Direct", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "JaGYVVuiHzv3WWanFh/Fzx8ZYOtayNAhso5rwmHdxVYxn3AYJLYdijIBvQaEt4MIcsN0I1zXZfC/YKh47y3ocQ==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "qHNQghKAzrjDEECIlyKEanmWxXDzrh6PyjGWVdql2qZfap0Ionuxam5OrUozibjbgQbVjRmgSXxWC8giIuCbGA==", "dependencies": { - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2" + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7" } }, "Asp.Versioning.Abstractions": { @@ -114,23 +115,26 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "QoiCMcPuxC6eqRQmrmF9zBY96ejIznXtve/lJJbonGD9I5Aygf2AUCOWslGiCEtBbfWRSuUnepBjuuVOdAl5ag==" + "resolved": "10.0.201", + "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "dependencies": { + "System.IO.Hashing": "10.0.5" + } }, "Microsoft.Extensions.ApiDescription.Server": { "type": "Transitive", - "resolved": "6.0.5", - "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==" + "resolved": "10.0.0", + "contentHash": "NCWCGiwRwje8773yzPQhvucYnnfeR+ZoB1VRIrIMp4uaeUNw7jvEPHij3HIbwCDuNCrNcphA00KSAR9yD9qmbg==" }, "Microsoft.OpenApi": { "type": "Transitive", - "resolved": "1.6.22", - "contentHash": "aBvunmrdu/x+4CaA/UP1Jx4xWGwk4kymhoIRnn2Vp+zi5/KOPQJ9EkSXHRUr01WcGKtYl3Au7XfkPJbU1G2sjQ==" + "resolved": "2.4.1", + "contentHash": "u7QhXCISMQuab3flasb1hoaiERmUqyWsW7tmQODyILoQ7mJV5IRGM+2KKZYo0QUfC13evEOcHAb6TPWgqEQtrw==" }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "cMtGW5/r0ck72Jg2QwZcNTX59z+iB/B1kW84VMa/eX8L19DhHIuIcQjfK0pgLLBxd60Jl0Bj9GUolcM0MnJnZA==" + "resolved": "10.0.201", + "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" }, "PPWCode.Util.Time.I": { "type": "Transitive", @@ -158,24 +162,29 @@ }, "Swashbuckle.AspNetCore.Swagger": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "39Z2N3cLHDcDinu2IW5IaQO9wGPKTbc+vKbjIT/6gN3jFYypWY5U3O8i7Y9rmYDgxkm6niICnkcFZ3hEvikIHA==", + "resolved": "10.1.7", + "contentHash": "EjLibt/d/QuRv170GoihTbcPUpgzSFm2WKHhnGJFZQ03JYzfuitsM79azaAR8NBwRunU7yScSX6HRE5JUlrEMQ==", "dependencies": { - "Microsoft.OpenApi": "1.6.22" + "Microsoft.OpenApi": "2.4.1" } }, "Swashbuckle.AspNetCore.SwaggerGen": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "x5famjpcgazpT/8eEIlpSYSTZDq6ojMARhuJgj6O67Uk+Yb1DdDM5yikdL7GK1pMk5rYBETUCRWYP6rp+vHnlA==", + "resolved": "10.1.7", + "contentHash": "PuubO9BjvNn6U3D9kLpuWKY1JtziWw7SsGBq0age1E50uQjQ8Fzl8s0EwzrLfANqYJNgDnJi9l7N1QxcGVB2Zw==", "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "7.3.2" + "Swashbuckle.AspNetCore.Swagger": "10.1.7" } }, "Swashbuckle.AspNetCore.SwaggerUI": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "SNQuFjYin9KhkoCSVOD5/Y4VEyAjKBDeZkIqqY6x+oI21HMKzzVkeJA9V7tWFXf5df4m/+pTIlbKO7g5W9UroQ==" + "resolved": "10.1.7", + "contentHash": "iJo3ODyUb/M8Vm8AH1r9y9iAba0w95xsCn3zFVl96ISRHbTDWxi+l7oFVCZqUEdjd97B8VMDPnMliWAdomR8uw==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.5", + "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" }, "PPWCode.Vernacular.Contracts.I": { "type": "CentralTransitive", @@ -203,11 +212,12 @@ "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[10.*, )", - "resolved": "10.0.103", - "contentHash": "qZk7r40ftpZY+/sO019sgWAWfNqC2CLSspDdAxNYCJU/bCi/8jVwvOMjzb/d5gjCRNzQ4OCYgBfhdpQyVwLTyw==", + "resolved": "10.0.201", + "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.103", - "Microsoft.SourceLink.Common": "10.0.103" + "Microsoft.Build.Tasks.Git": "10.0.201", + "Microsoft.SourceLink.Common": "10.0.201", + "System.IO.Hashing": "10.0.5" } }, "PPWCode.AspNetCore.Server.I": { @@ -231,8 +241,8 @@ "PPWCode.Vernacular.Persistence.V": { "type": "Direct", "requested": "[1.*, )", - "resolved": "1.0.0", - "contentHash": "YsfYBPHs+7UWS1gI4UbezhUS8xno1OfdYq0TaDCU7QSVQlDOiYTgCdOSN/xFy9hmZNz7u3BpcrEexUBUpWGAgQ==", + "resolved": "1.1.0", + "contentHash": "iXoTU962vqg7k4Xivj5yZKRBwes95XY2pEAQ1nAATv8i1+Krc9rXQsWvrLNCs5gD6Wf7racSjcr3ozoo3MHuWA==", "dependencies": { "PPWCode.Vernacular.Contracts.I": "1.5.0", "PPWCode.Vernacular.Exceptions.V": "1.1.0", @@ -261,23 +271,23 @@ }, "Swashbuckle.AspNetCore": { "type": "Direct", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "WEkW7Cl8bexT75eURuqrqM/TQx+ftWKOWlCHzmw3Fl3oAmxiBO/lDVOuuqZsaBCHQIBcZxA6BbyiG5dv2mD2tw==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "vgef8DPT411JU5JjHiDbr0WOxsIVuAvegPGtqmm4Na4JRl/264dfBJcGkiPHsAr5P+Vda+qN1rZKRtBl1rF9aA==", "dependencies": { - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerUI": "7.3.2" + "Microsoft.Extensions.ApiDescription.Server": "8.0.0", + "Swashbuckle.AspNetCore.Swagger": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7" } }, "Swashbuckle.AspNetCore.Annotations": { "type": "Direct", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "JaGYVVuiHzv3WWanFh/Fzx8ZYOtayNAhso5rwmHdxVYxn3AYJLYdijIBvQaEt4MIcsN0I1zXZfC/YKh47y3ocQ==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "qHNQghKAzrjDEECIlyKEanmWxXDzrh6PyjGWVdql2qZfap0Ionuxam5OrUozibjbgQbVjRmgSXxWC8giIuCbGA==", "dependencies": { - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2" + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7" } }, "Asp.Versioning.Abstractions": { @@ -303,23 +313,26 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "QoiCMcPuxC6eqRQmrmF9zBY96ejIznXtve/lJJbonGD9I5Aygf2AUCOWslGiCEtBbfWRSuUnepBjuuVOdAl5ag==" + "resolved": "10.0.201", + "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "dependencies": { + "System.IO.Hashing": "10.0.5" + } }, "Microsoft.Extensions.ApiDescription.Server": { "type": "Transitive", - "resolved": "6.0.5", - "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==" + "resolved": "8.0.0", + "contentHash": "jDM3a95WerM8g6IcMiBXq1qRS9dqmEUpgnCk2DeMWpPkYtp1ia+CkXabOnK93JmhVlUmv8l9WMPsCSUm+WqkIA==" }, "Microsoft.OpenApi": { "type": "Transitive", - "resolved": "1.6.22", - "contentHash": "aBvunmrdu/x+4CaA/UP1Jx4xWGwk4kymhoIRnn2Vp+zi5/KOPQJ9EkSXHRUr01WcGKtYl3Au7XfkPJbU1G2sjQ==" + "resolved": "2.4.1", + "contentHash": "u7QhXCISMQuab3flasb1hoaiERmUqyWsW7tmQODyILoQ7mJV5IRGM+2KKZYo0QUfC13evEOcHAb6TPWgqEQtrw==" }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "cMtGW5/r0ck72Jg2QwZcNTX59z+iB/B1kW84VMa/eX8L19DhHIuIcQjfK0pgLLBxd60Jl0Bj9GUolcM0MnJnZA==" + "resolved": "10.0.201", + "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" }, "PPWCode.Util.Time.I": { "type": "Transitive", @@ -347,24 +360,29 @@ }, "Swashbuckle.AspNetCore.Swagger": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "39Z2N3cLHDcDinu2IW5IaQO9wGPKTbc+vKbjIT/6gN3jFYypWY5U3O8i7Y9rmYDgxkm6niICnkcFZ3hEvikIHA==", + "resolved": "10.1.7", + "contentHash": "EjLibt/d/QuRv170GoihTbcPUpgzSFm2WKHhnGJFZQ03JYzfuitsM79azaAR8NBwRunU7yScSX6HRE5JUlrEMQ==", "dependencies": { - "Microsoft.OpenApi": "1.6.22" + "Microsoft.OpenApi": "2.4.1" } }, "Swashbuckle.AspNetCore.SwaggerGen": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "x5famjpcgazpT/8eEIlpSYSTZDq6ojMARhuJgj6O67Uk+Yb1DdDM5yikdL7GK1pMk5rYBETUCRWYP6rp+vHnlA==", + "resolved": "10.1.7", + "contentHash": "PuubO9BjvNn6U3D9kLpuWKY1JtziWw7SsGBq0age1E50uQjQ8Fzl8s0EwzrLfANqYJNgDnJi9l7N1QxcGVB2Zw==", "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "7.3.2" + "Swashbuckle.AspNetCore.Swagger": "10.1.7" } }, "Swashbuckle.AspNetCore.SwaggerUI": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "SNQuFjYin9KhkoCSVOD5/Y4VEyAjKBDeZkIqqY6x+oI21HMKzzVkeJA9V7tWFXf5df4m/+pTIlbKO7g5W9UroQ==" + "resolved": "10.1.7", + "contentHash": "iJo3ODyUb/M8Vm8AH1r9y9iAba0w95xsCn3zFVl96ISRHbTDWxi+l7oFVCZqUEdjd97B8VMDPnMliWAdomR8uw==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.5", + "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" }, "PPWCode.Vernacular.Contracts.I": { "type": "CentralTransitive", @@ -392,11 +410,12 @@ "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[10.*, )", - "resolved": "10.0.103", - "contentHash": "qZk7r40ftpZY+/sO019sgWAWfNqC2CLSspDdAxNYCJU/bCi/8jVwvOMjzb/d5gjCRNzQ4OCYgBfhdpQyVwLTyw==", + "resolved": "10.0.201", + "contentHash": "qxYAmO4ktzd9L+HMdnqWucxpu7bI9undPyACXOMqPyhaiMtbpbYL/n0ACyWIJlbyEJrXFwxiOaBOSasLtDvsCg==", "dependencies": { - "Microsoft.Build.Tasks.Git": "10.0.103", - "Microsoft.SourceLink.Common": "10.0.103" + "Microsoft.Build.Tasks.Git": "10.0.201", + "Microsoft.SourceLink.Common": "10.0.201", + "System.IO.Hashing": "10.0.5" } }, "PPWCode.AspNetCore.Server.I": { @@ -420,8 +439,8 @@ "PPWCode.Vernacular.Persistence.V": { "type": "Direct", "requested": "[1.*, )", - "resolved": "1.0.0", - "contentHash": "YsfYBPHs+7UWS1gI4UbezhUS8xno1OfdYq0TaDCU7QSVQlDOiYTgCdOSN/xFy9hmZNz7u3BpcrEexUBUpWGAgQ==", + "resolved": "1.1.0", + "contentHash": "iXoTU962vqg7k4Xivj5yZKRBwes95XY2pEAQ1nAATv8i1+Krc9rXQsWvrLNCs5gD6Wf7racSjcr3ozoo3MHuWA==", "dependencies": { "PPWCode.Vernacular.Contracts.I": "1.5.0", "PPWCode.Vernacular.Exceptions.V": "1.1.0", @@ -450,23 +469,23 @@ }, "Swashbuckle.AspNetCore": { "type": "Direct", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "WEkW7Cl8bexT75eURuqrqM/TQx+ftWKOWlCHzmw3Fl3oAmxiBO/lDVOuuqZsaBCHQIBcZxA6BbyiG5dv2mD2tw==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "vgef8DPT411JU5JjHiDbr0WOxsIVuAvegPGtqmm4Na4JRl/264dfBJcGkiPHsAr5P+Vda+qN1rZKRtBl1rF9aA==", "dependencies": { - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", - "Swashbuckle.AspNetCore.Swagger": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2", - "Swashbuckle.AspNetCore.SwaggerUI": "7.3.2" + "Microsoft.Extensions.ApiDescription.Server": "9.0.0", + "Swashbuckle.AspNetCore.Swagger": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7", + "Swashbuckle.AspNetCore.SwaggerUI": "10.1.7" } }, "Swashbuckle.AspNetCore.Annotations": { "type": "Direct", - "requested": "[7.*, )", - "resolved": "7.3.2", - "contentHash": "JaGYVVuiHzv3WWanFh/Fzx8ZYOtayNAhso5rwmHdxVYxn3AYJLYdijIBvQaEt4MIcsN0I1zXZfC/YKh47y3ocQ==", + "requested": "[10.*, )", + "resolved": "10.1.7", + "contentHash": "qHNQghKAzrjDEECIlyKEanmWxXDzrh6PyjGWVdql2qZfap0Ionuxam5OrUozibjbgQbVjRmgSXxWC8giIuCbGA==", "dependencies": { - "Swashbuckle.AspNetCore.SwaggerGen": "7.3.2" + "Swashbuckle.AspNetCore.SwaggerGen": "10.1.7" } }, "Asp.Versioning.Abstractions": { @@ -492,23 +511,26 @@ }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "QoiCMcPuxC6eqRQmrmF9zBY96ejIznXtve/lJJbonGD9I5Aygf2AUCOWslGiCEtBbfWRSuUnepBjuuVOdAl5ag==" + "resolved": "10.0.201", + "contentHash": "DMYBnrFZvLnBKn14VavEuuIr31CY6YY2i2L9P8DorS/Qp6ifRR8ZPLdJCFLFfjikNq8DykbYyLd/RP6lSqHcWw==", + "dependencies": { + "System.IO.Hashing": "10.0.5" + } }, "Microsoft.Extensions.ApiDescription.Server": { "type": "Transitive", - "resolved": "6.0.5", - "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==" + "resolved": "9.0.0", + "contentHash": "1Kzzf7pRey40VaUkHN9/uWxrKVkLu2AQjt+GVeeKLLpiEHAJ1xZRsLSh4ZZYEnyS7Kt2OBOPmsXNdU+wbcOl5w==" }, "Microsoft.OpenApi": { "type": "Transitive", - "resolved": "1.6.22", - "contentHash": "aBvunmrdu/x+4CaA/UP1Jx4xWGwk4kymhoIRnn2Vp+zi5/KOPQJ9EkSXHRUr01WcGKtYl3Au7XfkPJbU1G2sjQ==" + "resolved": "2.4.1", + "contentHash": "u7QhXCISMQuab3flasb1hoaiERmUqyWsW7tmQODyILoQ7mJV5IRGM+2KKZYo0QUfC13evEOcHAb6TPWgqEQtrw==" }, "Microsoft.SourceLink.Common": { "type": "Transitive", - "resolved": "10.0.103", - "contentHash": "cMtGW5/r0ck72Jg2QwZcNTX59z+iB/B1kW84VMa/eX8L19DhHIuIcQjfK0pgLLBxd60Jl0Bj9GUolcM0MnJnZA==" + "resolved": "10.0.201", + "contentHash": "QbBYhkjgL6rCnBfDbzsAJLlsad13TlBHqYCFDIw56OO2g6ix+9RsmY8uxiQGdWwFKbZXaXyAA6jDCzFYVGCZDw==" }, "PPWCode.Util.Time.I": { "type": "Transitive", @@ -536,24 +558,29 @@ }, "Swashbuckle.AspNetCore.Swagger": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "39Z2N3cLHDcDinu2IW5IaQO9wGPKTbc+vKbjIT/6gN3jFYypWY5U3O8i7Y9rmYDgxkm6niICnkcFZ3hEvikIHA==", + "resolved": "10.1.7", + "contentHash": "EjLibt/d/QuRv170GoihTbcPUpgzSFm2WKHhnGJFZQ03JYzfuitsM79azaAR8NBwRunU7yScSX6HRE5JUlrEMQ==", "dependencies": { - "Microsoft.OpenApi": "1.6.22" + "Microsoft.OpenApi": "2.4.1" } }, "Swashbuckle.AspNetCore.SwaggerGen": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "x5famjpcgazpT/8eEIlpSYSTZDq6ojMARhuJgj6O67Uk+Yb1DdDM5yikdL7GK1pMk5rYBETUCRWYP6rp+vHnlA==", + "resolved": "10.1.7", + "contentHash": "PuubO9BjvNn6U3D9kLpuWKY1JtziWw7SsGBq0age1E50uQjQ8Fzl8s0EwzrLfANqYJNgDnJi9l7N1QxcGVB2Zw==", "dependencies": { - "Swashbuckle.AspNetCore.Swagger": "7.3.2" + "Swashbuckle.AspNetCore.Swagger": "10.1.7" } }, "Swashbuckle.AspNetCore.SwaggerUI": { "type": "Transitive", - "resolved": "7.3.2", - "contentHash": "SNQuFjYin9KhkoCSVOD5/Y4VEyAjKBDeZkIqqY6x+oI21HMKzzVkeJA9V7tWFXf5df4m/+pTIlbKO7g5W9UroQ==" + "resolved": "10.1.7", + "contentHash": "iJo3ODyUb/M8Vm8AH1r9y9iAba0w95xsCn3zFVl96ISRHbTDWxi+l7oFVCZqUEdjd97B8VMDPnMliWAdomR8uw==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.5", + "contentHash": "8IBJWcCT9+e4Bmevm4T7+fQEiAh133KGiz4oiVTgJckd3Q76OFdR1falgn9lpz7+C4HJvogCDJeAa2QmvbeVtg==" }, "PPWCode.Vernacular.Contracts.I": { "type": "CentralTransitive",