From 6b07f1ff477f13f98205ddb3c79f1f3feb861388 Mon Sep 17 00:00:00 2001 From: Ruben Vandeginste Date: Mon, 4 May 2026 15:15:31 +0200 Subject: [PATCH 1/7] Add NHibernate support (library + tests) --- PPWCode.Util.Validation.sln | 12 + src/Directory.Packages.props | 4 + src/IV.NHibernate.Tests/BaseQueryTests.cs | 27 + .../BaseRepositoryTests.cs | 37 + .../BelgianIdentificationsTests.cs | 65 + .../Mapping/ConventionMappingTests.cs | 30 + .../Models/BelgianIdentifications.cs | 110 + ...Util.Validation.IV.NHibernate.Tests.csproj | 28 + .../BelgianIdentificationsRepository.cs | 25 + .../Repositories/IBelgianIdentifications.cs | 19 + src/IV.NHibernate.Tests/TestIntAuditLog.cs | 18 + .../TestsMappingAssemblies.cs | 25 + .../TestsSimpleModelMapper.cs | 45 + src/IV.NHibernate.Tests/appsettings.json | 10 + src/IV.NHibernate.Tests/hibernate.cfg.xml | 5 + src/IV.NHibernate.Tests/log4net.config | 20 + src/IV.NHibernate.Tests/packages.lock.json | 2700 +++++++++++++++++ .../European/Belgium/ValidBBAN.cs | 20 + .../Belgium/ValidCompanyLocalUnitNumber.cs | 20 + .../European/Belgium/ValidDMFA.cs | 20 + .../European/Belgium/ValidINSS.cs | 20 + .../European/Belgium/ValidKBO.cs | 20 + .../European/Belgium/ValidOGM.cs | 21 + .../European/Belgium/ValidRSZ.cs | 20 + .../European/Belgium/ValidTemporaryRSZ.cs | 20 + .../European/Belgium/ValidVAT.cs | 20 + src/IV.NHibernate/European/France/ValidNIR.cs | 20 + .../European/Netherlands/ValidBSN.cs | 20 + .../ImmutableIdentificationBase.cs | 60 + ...WCode.Util.Validation.IV.NHibernate.csproj | 13 + src/IV.NHibernate/ValidBIC.cs | 18 + src/IV.NHibernate/ValidIBAN.cs | 18 + src/IV.NHibernate/packages.lock.json | 536 ++++ 33 files changed, 4046 insertions(+) create mode 100644 src/IV.NHibernate.Tests/BaseQueryTests.cs create mode 100644 src/IV.NHibernate.Tests/BaseRepositoryTests.cs create mode 100644 src/IV.NHibernate.Tests/IntegrationTests/BelgianIdentificationsTests.cs create mode 100644 src/IV.NHibernate.Tests/IntegrationTests/Mapping/ConventionMappingTests.cs create mode 100644 src/IV.NHibernate.Tests/Models/BelgianIdentifications.cs create mode 100644 src/IV.NHibernate.Tests/PPWCode.Util.Validation.IV.NHibernate.Tests.csproj create mode 100644 src/IV.NHibernate.Tests/Repositories/BelgianIdentificationsRepository.cs create mode 100644 src/IV.NHibernate.Tests/Repositories/IBelgianIdentifications.cs create mode 100644 src/IV.NHibernate.Tests/TestIntAuditLog.cs create mode 100644 src/IV.NHibernate.Tests/TestsMappingAssemblies.cs create mode 100644 src/IV.NHibernate.Tests/TestsSimpleModelMapper.cs create mode 100644 src/IV.NHibernate.Tests/appsettings.json create mode 100644 src/IV.NHibernate.Tests/hibernate.cfg.xml create mode 100644 src/IV.NHibernate.Tests/log4net.config create mode 100644 src/IV.NHibernate.Tests/packages.lock.json create mode 100644 src/IV.NHibernate/European/Belgium/ValidBBAN.cs create mode 100644 src/IV.NHibernate/European/Belgium/ValidCompanyLocalUnitNumber.cs create mode 100644 src/IV.NHibernate/European/Belgium/ValidDMFA.cs create mode 100644 src/IV.NHibernate/European/Belgium/ValidINSS.cs create mode 100644 src/IV.NHibernate/European/Belgium/ValidKBO.cs create mode 100644 src/IV.NHibernate/European/Belgium/ValidOGM.cs create mode 100644 src/IV.NHibernate/European/Belgium/ValidRSZ.cs create mode 100644 src/IV.NHibernate/European/Belgium/ValidTemporaryRSZ.cs create mode 100644 src/IV.NHibernate/European/Belgium/ValidVAT.cs create mode 100644 src/IV.NHibernate/European/France/ValidNIR.cs create mode 100644 src/IV.NHibernate/European/Netherlands/ValidBSN.cs create mode 100644 src/IV.NHibernate/ImmutableIdentificationBase.cs create mode 100644 src/IV.NHibernate/PPWCode.Util.Validation.IV.NHibernate.csproj create mode 100644 src/IV.NHibernate/ValidBIC.cs create mode 100644 src/IV.NHibernate/ValidIBAN.cs create mode 100644 src/IV.NHibernate/packages.lock.json diff --git a/PPWCode.Util.Validation.sln b/PPWCode.Util.Validation.sln index d0c7f0c..5c57bed 100644 --- a/PPWCode.Util.Validation.sln +++ b/PPWCode.Util.Validation.sln @@ -39,6 +39,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PPWCode.Util.Validation.IV. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PPWCode.Util.Validation.IV.Tests", "src\IV.Tests\PPWCode.Util.Validation.IV.Tests.csproj", "{3BEF64F5-D4A7-4EE1-8693-9F1439598642}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PPWCode.Util.Validation.IV.NHibernate", "src\IV.NHibernate\PPWCode.Util.Validation.IV.NHibernate.csproj", "{38AD71C7-8C44-4CD7-8EA5-5793C76D4EA2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PPWCode.Util.Validation.IV.NHibernate.Tests", "src\IV.NHibernate.Tests\PPWCode.Util.Validation.IV.NHibernate.Tests.csproj", "{578BA57F-99E0-4865-A11E-1F0747997CA7}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -57,6 +61,14 @@ Global {3BEF64F5-D4A7-4EE1-8693-9F1439598642}.Debug|Any CPU.Build.0 = Debug|Any CPU {3BEF64F5-D4A7-4EE1-8693-9F1439598642}.Release|Any CPU.ActiveCfg = Release|Any CPU {3BEF64F5-D4A7-4EE1-8693-9F1439598642}.Release|Any CPU.Build.0 = Release|Any CPU + {38AD71C7-8C44-4CD7-8EA5-5793C76D4EA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38AD71C7-8C44-4CD7-8EA5-5793C76D4EA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38AD71C7-8C44-4CD7-8EA5-5793C76D4EA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38AD71C7-8C44-4CD7-8EA5-5793C76D4EA2}.Release|Any CPU.Build.0 = Release|Any CPU + {578BA57F-99E0-4865-A11E-1F0747997CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {578BA57F-99E0-4865-A11E-1F0747997CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {578BA57F-99E0-4865-A11E-1F0747997CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {578BA57F-99E0-4865-A11E-1F0747997CA7}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index c72d050..7162b1c 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -40,6 +40,10 @@ + + + + diff --git a/src/IV.NHibernate.Tests/BaseQueryTests.cs b/src/IV.NHibernate.Tests/BaseQueryTests.cs new file mode 100644 index 0000000..a2baf45 --- /dev/null +++ b/src/IV.NHibernate.Tests/BaseQueryTests.cs @@ -0,0 +1,27 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Vernacular.NHibernate.IV; +using PPWCode.Vernacular.NHibernate.IV.Test; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests; + +public abstract class BaseQueryTests : BaseRepositoryFixture +{ + protected override string CatalogName + => $"Test.{GetType().Assembly.GetName().Name}"; + + protected override IPpwHbmMapping PpwHbmMapping + => new TestsSimpleModelMapper(new TestsMappingAssemblies()); + + protected override string IdentityName + => "Test - IdentityName"; +} diff --git a/src/IV.NHibernate.Tests/BaseRepositoryTests.cs b/src/IV.NHibernate.Tests/BaseRepositoryTests.cs new file mode 100644 index 0000000..89db4b2 --- /dev/null +++ b/src/IV.NHibernate.Tests/BaseRepositoryTests.cs @@ -0,0 +1,37 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Vernacular.Persistence.V; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests; + +public abstract class BaseRepositoryTests : BaseQueryTests + where T : class, IIdentity +{ + protected abstract Func> RepositoryFactory { get; } + + protected Vernacular.NHibernate.IV.IRepository? Repository { get; private set; } + + protected override void OnSetup() + { + base.OnSetup(); + + Repository = RepositoryFactory(); + SessionFactory.Statistics.Clear(); + } + + protected override void OnTeardown() + { + Repository = null; + + base.OnTeardown(); + } +} diff --git a/src/IV.NHibernate.Tests/IntegrationTests/BelgianIdentificationsTests.cs b/src/IV.NHibernate.Tests/IntegrationTests/BelgianIdentificationsTests.cs new file mode 100644 index 0000000..b58b5da --- /dev/null +++ b/src/IV.NHibernate.Tests/IntegrationTests/BelgianIdentificationsTests.cs @@ -0,0 +1,65 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.Diagnostics.CodeAnalysis; + +using NUnit.Framework; + +using PPWCode.Util.Validation.IV.European.Belgium; +using PPWCode.Util.Validation.IV.NHibernate.Tests.Models; +using PPWCode.Util.Validation.IV.NHibernate.Tests.Repositories; +using PPWCode.Vernacular.Contracts.I; +using PPWCode.Vernacular.NHibernate.IV; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests.IntegrationTests; + +[SuppressMessage("ReSharper", "InconsistentNaming", Justification = "Tests")] +public class BelgianIdentificationsTests : BaseRepositoryTests +{ + protected override Func> RepositoryFactory + => () => new BelgianIdentificationsRepository(SessionProvider); + + [Test] + public void can_handle_belgian_identifications() + { + Contract.Requires(Repository != null); + + // Arrange + BelgianIdentifications subject = + new BelgianIdentifications + { + BBAN = new BBAN("850-895676-978"), + DMFA = new DMFA("DMFAP123456789A"), + INSS = new INSS("55.25.02.008-01"), + KBO = new KBO("0453.834.195"), + RSZ = new RSZ("0133-296 720"), + IBAN = new IBAN("AL472 1211 0090 0000 0023 5698 741"), + BIC = new BIC("KREDBEBB"), + TemporaryRSZ = new TemporaryRSZ("5 105009119"), + VAT = new VAT("0453.834.195"), + CompanyLocalUnitNumber = new CompanyLocalUnitNumber("2.069.315153") + }; + + // Act + RunInsideTransaction( + () => + { + Repository.SaveOrUpdate(subject); + Assert.That(subject.IdIsTransient, Is.False); + }, + true); + + BelgianIdentifications? actual = Repository.GetById(subject.Id); + + // Assert + Assert.That(BelgianIdentifications.Comparer.Equals(subject, actual), Is.True); + } +} diff --git a/src/IV.NHibernate.Tests/IntegrationTests/Mapping/ConventionMappingTests.cs b/src/IV.NHibernate.Tests/IntegrationTests/Mapping/ConventionMappingTests.cs new file mode 100644 index 0000000..0eddcbc --- /dev/null +++ b/src/IV.NHibernate.Tests/IntegrationTests/Mapping/ConventionMappingTests.cs @@ -0,0 +1,30 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using NHibernate.Mapping.ByCode; + +using NUnit.Framework; + +using PPWCode.Vernacular.NHibernate.IV; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests.IntegrationTests.Mapping; + +[TestFixture] +public class ConventionMappingTests +{ + [Test] + [Explicit] + public void XmlMapping() + { + IPpwHbmMapping mapper = new TestsSimpleModelMapper(new TestsMappingAssemblies()); + Console.WriteLine(mapper.HbmMapping.AsString()); + } +} diff --git a/src/IV.NHibernate.Tests/Models/BelgianIdentifications.cs b/src/IV.NHibernate.Tests/Models/BelgianIdentifications.cs new file mode 100644 index 0000000..5820d4c --- /dev/null +++ b/src/IV.NHibernate.Tests/Models/BelgianIdentifications.cs @@ -0,0 +1,110 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; +using PPWCode.Util.Validation.IV.NHibernate.European.Belgium; +using PPWCode.Vernacular.NHibernate.IV.MappingByCode; +using PPWCode.Vernacular.Persistence.V; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests.Models; + +public class BelgianIdentifications : PersistentObject +{ + public static IEqualityComparer Comparer { get; } + = new BelgianIdentificationsEqualityComparer(); + + public virtual BBAN? BBAN { get; set; } + public virtual DMFA? DMFA { get; set; } + public virtual IBAN? IBAN { get; set; } + public virtual BIC? BIC { get; set; } + public virtual INSS? INSS { get; set; } + public virtual KBO? KBO { get; set; } + public virtual RSZ? RSZ { get; set; } + public virtual TemporaryRSZ? TemporaryRSZ { get; set; } + public virtual VAT? VAT { get; set; } + public virtual CompanyLocalUnitNumber? CompanyLocalUnitNumber { get; set; } + public virtual OGM? OGM { get; set; } + + private sealed class BelgianIdentificationsEqualityComparer : IEqualityComparer + { + public bool Equals(BelgianIdentifications? x, BelgianIdentifications? y) + { + if (ReferenceEquals(x, y)) + { + return true; + } + + if (ReferenceEquals(x, null)) + { + return false; + } + + if (ReferenceEquals(y, null)) + { + return false; + } + + if (x.GetType() != y.GetType()) + { + return false; + } + + return Equals(x.BBAN, y.BBAN) + && Equals(x.DMFA, y.DMFA) + && Equals(x.IBAN, y.IBAN) + && Equals(x.BIC, y.BIC) + && Equals(x.INSS, y.INSS) + && Equals(x.KBO, y.KBO) + && Equals(x.RSZ, y.RSZ) + && Equals(x.TemporaryRSZ, y.TemporaryRSZ) + && Equals(x.VAT, y.VAT) + && Equals(x.CompanyLocalUnitNumber, y.CompanyLocalUnitNumber) + && Equals(x.OGM, y.OGM); + } + + public int GetHashCode(BelgianIdentifications obj) + { + unchecked + { + int hashCode = obj.BBAN != null ? obj.BBAN.GetHashCode() : 0; + hashCode = (hashCode * 397) ^ (obj.DMFA != null ? obj.DMFA.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.IBAN != null ? obj.IBAN.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.BIC != null ? obj.BIC.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.INSS != null ? obj.INSS.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.KBO != null ? obj.KBO.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.RSZ != null ? obj.RSZ.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.TemporaryRSZ != null ? obj.TemporaryRSZ.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.VAT != null ? obj.VAT.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.CompanyLocalUnitNumber != null ? obj.CompanyLocalUnitNumber.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ (obj.OGM != null ? obj.OGM.GetHashCode() : 0); + return hashCode; + } + } + } +} + +public class BelgianIdentificationsMapper : PersistentObjectMapper +{ + public BelgianIdentificationsMapper() + { + Property(c => c.BBAN, m => m.Type()); + Property(c => c.DMFA, m => m.Type()); + Property(c => c.IBAN, m => m.Type()); + Property(c => c.BIC, m => m.Type()); + Property(c => c.INSS, m => m.Type()); + Property(c => c.KBO, m => m.Type()); + Property(c => c.RSZ, m => m.Type()); + Property(c => c.TemporaryRSZ, m => m.Type()); + Property(c => c.VAT, m => m.Type()); + Property(c => c.CompanyLocalUnitNumber, m => m.Type()); + Property(c => c.OGM, m => m.Type()); + } +} diff --git a/src/IV.NHibernate.Tests/PPWCode.Util.Validation.IV.NHibernate.Tests.csproj b/src/IV.NHibernate.Tests/PPWCode.Util.Validation.IV.NHibernate.Tests.csproj new file mode 100644 index 0000000..36b415c --- /dev/null +++ b/src/IV.NHibernate.Tests/PPWCode.Util.Validation.IV.NHibernate.Tests.csproj @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + PreserveNewest + + + + PreserveNewest + + + + PreserveNewest + + + + diff --git a/src/IV.NHibernate.Tests/Repositories/BelgianIdentificationsRepository.cs b/src/IV.NHibernate.Tests/Repositories/BelgianIdentificationsRepository.cs new file mode 100644 index 0000000..31d8c08 --- /dev/null +++ b/src/IV.NHibernate.Tests/Repositories/BelgianIdentificationsRepository.cs @@ -0,0 +1,25 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.NHibernate.Tests.Models; +using PPWCode.Vernacular.NHibernate.IV; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests.Repositories; + +public class BelgianIdentificationsRepository + : LinqRepository, + IBelgianIdentifications +{ + public BelgianIdentificationsRepository(ISessionProvider sessionProvider) + : base(sessionProvider) + { + } +} diff --git a/src/IV.NHibernate.Tests/Repositories/IBelgianIdentifications.cs b/src/IV.NHibernate.Tests/Repositories/IBelgianIdentifications.cs new file mode 100644 index 0000000..bdb3068 --- /dev/null +++ b/src/IV.NHibernate.Tests/Repositories/IBelgianIdentifications.cs @@ -0,0 +1,19 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.NHibernate.Tests.Models; +using PPWCode.Vernacular.NHibernate.IV; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests.Repositories; + +public interface IBelgianIdentifications : IRepository +{ +} diff --git a/src/IV.NHibernate.Tests/TestIntAuditLog.cs b/src/IV.NHibernate.Tests/TestIntAuditLog.cs new file mode 100644 index 0000000..c181a88 --- /dev/null +++ b/src/IV.NHibernate.Tests/TestIntAuditLog.cs @@ -0,0 +1,18 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Vernacular.Persistence.V; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests; + +public class TestIntAuditLog : AuditLog +{ +} diff --git a/src/IV.NHibernate.Tests/TestsMappingAssemblies.cs b/src/IV.NHibernate.Tests/TestsMappingAssemblies.cs new file mode 100644 index 0000000..13fd4ba --- /dev/null +++ b/src/IV.NHibernate.Tests/TestsMappingAssemblies.cs @@ -0,0 +1,25 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.Reflection; + +using PPWCode.Util.Validation.IV.NHibernate.Tests.Models; +using PPWCode.Vernacular.NHibernate.IV; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests; + +public class TestsMappingAssemblies : IMappingAssemblies +{ + public IEnumerable GetAssemblies() + { + yield return typeof(BelgianIdentifications).Assembly; + } +} diff --git a/src/IV.NHibernate.Tests/TestsSimpleModelMapper.cs b/src/IV.NHibernate.Tests/TestsSimpleModelMapper.cs new file mode 100644 index 0000000..937ee69 --- /dev/null +++ b/src/IV.NHibernate.Tests/TestsSimpleModelMapper.cs @@ -0,0 +1,45 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using NHibernate.Mapping.ByCode; + +using PPWCode.Vernacular.Contracts.I; +using PPWCode.Vernacular.NHibernate.IV; +using PPWCode.Vernacular.NHibernate.IV.MappingByCode; + +namespace PPWCode.Util.Validation.IV.NHibernate.Tests; + +public class TestsSimpleModelMapper : SimpleModelMapper +{ + public TestsSimpleModelMapper(IMappingAssemblies mappingAssemblies) + : base(mappingAssemblies) + { + } + + protected override string DefaultSchemaName + => @"dbo"; + + public override bool QuoteIdentifiers + => true; + + protected override void OnBeforeMapProperty(IModelInspector modelInspector, PropertyPath member, IPropertyMapper propertyCustomizer) + { + base.OnBeforeMapProperty(modelInspector, member, propertyCustomizer); + + Type memberType = member.MemberType(); + if (typeof(AbstractIdentification).IsAssignableFrom(memberType)) + { + AbstractIdentification? identification = (AbstractIdentification?)Activator.CreateInstance(memberType, string.Empty); + Contract.Assert(identification != null); + propertyCustomizer.Length(identification.StandardMaxLength); + } + } +} diff --git a/src/IV.NHibernate.Tests/appsettings.json b/src/IV.NHibernate.Tests/appsettings.json new file mode 100644 index 0000000..80bdd25 --- /dev/null +++ b/src/IV.NHibernate.Tests/appsettings.json @@ -0,0 +1,10 @@ +{ + "appSettings": { + "UseProfiler": "false", + "SuppressProfilingWhileCreatingSchema": "true", + "ShowSql": "false", + "FormatSql": "false", + "GenerateStatistics": "true", + "FixedConnectionString": null + } +} diff --git a/src/IV.NHibernate.Tests/hibernate.cfg.xml b/src/IV.NHibernate.Tests/hibernate.cfg.xml new file mode 100644 index 0000000..45de677 --- /dev/null +++ b/src/IV.NHibernate.Tests/hibernate.cfg.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/IV.NHibernate.Tests/log4net.config b/src/IV.NHibernate.Tests/log4net.config new file mode 100644 index 0000000..9d964d3 --- /dev/null +++ b/src/IV.NHibernate.Tests/log4net.config @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/IV.NHibernate.Tests/packages.lock.json b/src/IV.NHibernate.Tests/packages.lock.json new file mode 100644 index 0000000..ef9ffd6 --- /dev/null +++ b/src/IV.NHibernate.Tests/packages.lock.json @@ -0,0 +1,2700 @@ +{ + "version": 2, + "dependencies": { + "net10.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.0", + "contentHash": "WFejCcOUR6k8UYyDnnR6Gk+obFYMsWrZuNqPJnsVFGVhpPSN0y20D4qbdKJnXinYGx9PQ397Hf9TnU1NBST8vA==" + }, + "JunitXml.TestLogger": { + "type": "Direct", + "requested": "[7.*, )", + "resolved": "7.1.0", + "contentHash": "Iu3dSnhJ+gzjlOtpIPZgHvJbmvmPbIGjxT7h5pNxxMiNTXKfxgi0O0eehnZ29qlC5bElAM0o9dSrjzjydCaGiA==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[18.*, )", + "resolved": "18.5.1", + "contentHash": "SfqVaLiIqAbRWuPg5BP4QFwBIirQj/YIL8Dhxl6zntBKbXp0cQykoV480SmwG+yRMiWptxEI6NbHQuGSZ8b97w==", + "dependencies": { + "Microsoft.CodeCoverage": "18.5.1", + "Microsoft.TestPlatform.TestHost": "18.5.1" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.203", + "contentHash": "R4Tvr1oACImMS+Y5M7NM07ll9QyJSKnki3Dvz8QwG1W6FEmd+9fmZXAF6BE6UPswHF6n0v41wgMQGlaudOspqA==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "10.0.203", + "Microsoft.SourceLink.Common": "10.0.203", + "System.IO.Hashing": "10.0.7" + } + }, + "NUnit": { + "type": "Direct", + "requested": "[4.*, )", + "resolved": "4.6.0", + "contentHash": "RsafbuYR+HzdDhgfdLYrDOSuFdv8IgGpbe5NIqXWAhZ7t6lXNj9yNcLcAk34lKVio6OusBQolKlboyl/9hObNA==" + }, + "NUnit.Analyzers": { + "type": "Direct", + "requested": "[4.11.2, )", + "resolved": "4.11.2", + "contentHash": "D9w1tsxMyBAsINY2yyIaS59V9W4iGtuPyHs+9enuhmDAaCsSOitJKha4TUPENCAd2LrylCawur0YhCJoLMHBJA==" + }, + "NUnit3TestAdapter": { + "type": "Direct", + "requested": "[6.*, )", + "resolved": "6.2.0", + "contentHash": "8PMJB8za2u8S0ey/nEtvh9BHjLhv5yzUEMCmA0+VIPLKSeOAZ3TEHWDyAp0+iPQb3jnBH1o8k0PoU2FgzXLRnQ==", + "dependencies": { + "Microsoft.Extensions.DependencyModel": "8.0.2", + "Microsoft.Testing.Extensions.VSTestBridge": "2.1.0", + "Microsoft.Testing.Platform.MSBuild": "2.1.0" + } + }, + "PPWCode.Vernacular.NHibernate.IV.Test": { + "type": "Direct", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "69r1iMnzFonMb4R14o7z950VtCwQNadpsC2KFRSb6Ynsk1eg+j6bLHA7nwLQf5nVL/NwFwD/ucivSUDjTJHLqg==", + "dependencies": { + "Microsoft.Data.SqlClient": "7.0.1", + "Microsoft.Extensions.Configuration": "10.0.7", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "10.0.7", + "Microsoft.Extensions.Configuration.Json": "10.0.7", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7", + "Microsoft.Extensions.DependencyModel": "10.0.7", + "Microsoft.Extensions.Logging": "10.0.7", + "Microsoft.Extensions.Logging.Abstractions": "10.0.7", + "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.7", + "Moq": "4.20.72", + "NHibernate": "5.6.0", + "NHibernate.Extensions.Logging": "4.0.0", + "NHibernateProfiler.Appender": "6.0.6053", + "NUnit": "4.5.1", + "PPWCode.Util.Authorization.I": "1.0.0", + "PPWCode.Util.Time.I": "2.0.0-alpha.1", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.NHibernate.IV.SqlServer": "1.0.0-alpha.4", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "Serilog": "4.3.1", + "Serilog.Extensions.Logging": "10.0.0", + "Serilog.Settings.Configuration": "10.0.0", + "Serilog.Sinks.NUnit": "1.0.3", + "System.Configuration.ConfigurationManager": "10.0.7" + } + }, + "StyleCop.Analyzers": { + "type": "Direct", + "requested": "[1.2.0-beta.556, )", + "resolved": "1.2.0-beta.556", + "contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==", + "dependencies": { + "StyleCop.Analyzers.Unstable": "1.2.0.556" + } + }, + "Antlr3.Runtime": { + "type": "Transitive", + "resolved": "3.5.1", + "contentHash": "ZwCEpLCLZXkjzf1lYEixp9hgVlYYk33ACHn6xjFyVhGRi2BpoYQez0qtatbetdylASWYTG+cGz0CGR4z66JM4w==", + "dependencies": { + "NETStandard.Library": "1.6.0" + } + }, + "Azure.Core": { + "type": "Transitive", + "resolved": "1.35.0", + "contentHash": "hENcx03Jyuqv05F4RBEPbxz29UrM3Nbhnr6Wl6NQpoU9BCIbL3XLentrxDCTrH54NLS11Exxi/o8MYgT/cnKFA==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.Memory.Data": "1.0.2" + } + }, + "Azure.Storage.Blobs": { + "type": "Transitive", + "resolved": "12.18.0", + "contentHash": "IUqHRXnabXCzmmvkzqPK4FuGzLxmKSugDEt5Hm5B/JlJFR+aHDsPW4nCLbG0txThqBSKPqcBBU/oA6c5TaFJgA==", + "dependencies": { + "Azure.Storage.Common": "12.17.0" + } + }, + "Azure.Storage.Common": { + "type": "Transitive", + "resolved": "12.17.0", + "contentHash": "/h8SpUkxMuQy/MbNFeJQGmhYt3JnYfEiGeDojtNgLNzzhyDnRYgjF3ZKYgjORYQpn0Spr+4+v2MZy+0GNJBLrg==", + "dependencies": { + "Azure.Core": "1.35.0", + "System.IO.Hashing": "6.0.0" + } + }, + "Castle.Core": { + "type": "Transitive", + "resolved": "5.1.1", + "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", + "dependencies": { + "System.Diagnostics.EventLog": "6.0.0" + } + }, + "Google.Protobuf": { + "type": "Transitive", + "resolved": "3.24.4", + "contentHash": "TmUI4ndd3x5HePyLmqAmGT6oVvoRCu+bMmrJmOpAFtCPEB+oUMWF8dyVY1zxXry/8cqsTHWszYRIAwpuUNpUyA==" + }, + "Humanizer.Core": { + "type": "Transitive", + "resolved": "2.14.1", + "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==" + }, + "Iesi.Collections": { + "type": "Transitive", + "resolved": "4.1.1", + "contentHash": "VBrZi6gKjArcyOqrKoZODtd4V9rGqyxkUTwO9Hg/8+idhe/A391X9nRXuESewb7kfCNo5jRwFKLSjrY0j+0PkA==" + }, + "Microsoft.ApplicationInsights": { + "type": "Transitive", + "resolved": "2.23.0", + "contentHash": "nWArUZTdU7iqZLycLKWe0TDms48KKGE6pONH2terYNa8REXiqixrMOkf1sk5DHGMaUTqONU2YkS4SAXBhLStgw==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==" + }, + "Microsoft.Bcl.Cryptography": { + "type": "Transitive", + "resolved": "9.0.13", + "contentHash": "5T+bH3Lb1nEe8Hf/ixMxLmhlrx5wRi53wv7OhVwG2F1ZviW1ejFRS1NHur3uqPpJRGtkQwUchtY6zhVK2R+v+w==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "m56WtzvIcL6t7JR3c7ogYitHizNM2QnRSo8yqxrQi+m5E/GGyDEmqymP+2p6YsFXn0j/Tzz67s4FQnrTLC7GKQ==", + "dependencies": { + "System.IO.Hashing": "10.0.7" + } + }, + "Microsoft.CodeAnalysis.Analyzers": { + "type": "Transitive", + "resolved": "3.3.4", + "contentHash": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==" + }, + "Microsoft.CodeAnalysis.Common": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.4" + } + }, + "Microsoft.CodeAnalysis.CSharp": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==", + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[4.8.0]" + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "[4.8.0]", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]" + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "System.Composition": "7.0.0" + } + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "vMFDR1ZjqzzgKmM0zrPie7Gv9Y+ZppjODB5Quzu9Eq0TlIusUfUCYFPEawO91zQuqwzvdFbJSU7WHNtjStffJQ==" + }, + "Microsoft.Data.SqlClient": { + "type": "Transitive", + "resolved": "7.0.1", + "contentHash": "9jZFXAJ2ThNYK7lhj2RhH7klXVNaWSvZpQncq3bPIOjmHBrdjwgeO4c8wucUVxQwFT8rAA13Z2F2jzoYR7ICDw==", + "dependencies": { + "Microsoft.Bcl.Cryptography": "9.0.13", + "Microsoft.Data.SqlClient.Extensions.Abstractions": "1.0.0", + "Microsoft.Data.SqlClient.Internal.Logging": "1.0.0", + "Microsoft.Data.SqlClient.SNI.runtime": "6.0.2", + "Microsoft.Extensions.Caching.Memory": "9.0.13", + "Microsoft.IdentityModel.JsonWebTokens": "8.16.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.16.0", + "Microsoft.SqlServer.Server": "1.0.0", + "System.Configuration.ConfigurationManager": "9.0.13", + "System.Security.Cryptography.Pkcs": "9.0.13" + } + }, + "Microsoft.Data.SqlClient.Extensions.Abstractions": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "rlnxc0KfwDSbE8ZHntFnl8SCgOa9QtJZblMv2zXLhRwl1Je7fsdsVzxSjzzC4JMsfAK+jXJWyezRB8SxUY4BdA==", + "dependencies": { + "Microsoft.Data.SqlClient.Internal.Logging": "1.0.0" + } + }, + "Microsoft.Data.SqlClient.Internal.Logging": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "Kue/7CF8KNT9zozfr30C94dMZVZml3atqWZvQemSXvTau76tRdypzeKiBKXadqgbOME0UiQIyVTNo5WxCRNVNg==" + }, + "Microsoft.Data.SqlClient.SNI.runtime": { + "type": "Transitive", + "resolved": "6.0.2", + "contentHash": "f+pRODTWX7Y67jXO3T5S2dIPZ9qMJNySjlZT/TKmWVNWe19N8jcWmHaqHnnchaq3gxEKv1SWVY5EFzOD06l41w==" + }, + "Microsoft.Extensions.Caching.Abstractions": { + "type": "Transitive", + "resolved": "9.0.13", + "contentHash": "nTT90JYIpcXEy6fcU8LPVycONkO6wipROgP9pyC4uxBif4fazu2rDzlWSntqtzr5p8GbQL2EopsYuTZR3yoeag==", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.13" + } + }, + "Microsoft.Extensions.Caching.Memory": { + "type": "Transitive", + "resolved": "9.0.13", + "contentHash": "OdQmN8LYcUEu20Fxii9mk68nHJGL+JPXF3w0+hxenf0oDDdDBA+ZV/S92FmIgAWAElowIiFA/g0x+8YB1g80Hg==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "9.0.13", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.13", + "Microsoft.Extensions.Logging.Abstractions": "9.0.13", + "Microsoft.Extensions.Options": "9.0.13", + "Microsoft.Extensions.Primitives": "9.0.13" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "wZbGh7J8R1vXN525O6d8dlcDTxhRTnd5MyW4LdfP5S0tSnTwTCseYSrq6g0Mxh7W9xn8P/2xPuf0D/m6k2dy2w==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.7", + "Microsoft.Extensions.Primitives": "10.0.7" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "t56nEgvECcyLPojZIUFWJknQQDAbgfTf9J+QMYJE1YYvVgz69vN6B/AKL8Grvj3Lcnp8kTpNqwmwFhb3YLJmtQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.7" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "8bS1qIaRivny+WX+49pmeJ6iAylbtX8C0DLEcCQWZjdxQvLqaMssXiGD9P/6pYElrHbK5/nAHmjbQ8STqdMYeg==", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.7", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.7" + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "TWto3imA+mJMLZI+5sbgLiFFoOFNFkizQYNaC5jTuiHKn3diwm1RN7mWDOEZN9kG2bixw7IvgpvtUG5/teSRzA==", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.7", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.7" + } + }, + "Microsoft.Extensions.Configuration.FileExtensions": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "qbZLvLsoTdArSloEnSxs21P781YUmwVmHc5NJPQD/ezAreQ7884z+6QfAZVKi86WAZtzx83jK2uC4itxOM44gQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.7", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.7", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.7", + "Microsoft.Extensions.FileProviders.Physical": "10.0.7", + "Microsoft.Extensions.Primitives": "10.0.7" + } + }, + "Microsoft.Extensions.Configuration.Json": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "64dimvyyKk0dbUbrLg/YCv4ugJ4sVz2aXLwfvZwR1EC4tJqW9ru/oVRcXwoJRa2lQGXtYtlpk4maWOeIb48tQw==", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.7", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.7", + "Microsoft.Extensions.Configuration.FileExtensions": "10.0.7", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.7" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "91F/o3emPV/+xY/ip3s2LqDNF14kjttlVtq0BXgg6p4MnCzeSZxnUJm+t6WRrtD3JdGo88/oX+z7OwK4y8PZuw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "Z6mfFEaFcwCfSboxJwOLfu7/31npCY9q70WUamHW/vRQhDvBKOT4Vf9YkZj5J6hLvJpb0oDEYfHunQZj0xxvKw==" + }, + "Microsoft.Extensions.DependencyModel": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "gCglFg/9Chu3lyJNytRuQAYM3mXQKNs1i01Cz2bc545QaHQ+LbBb4O5UCfu968Gro3ZVSOZ/ktilmPcaUSGSZA==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "teioDgVpi8L186wUfrXQV1YuBt6lCSPmFZiMZo53+FZxHFjOV+f4GXo4LXgJ273Mku9//AdXWVjk9J7eJP6inw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "10.0.7" + } + }, + "Microsoft.Extensions.FileProviders.Physical": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "zhgWg/i0ECj5v0jLFBSZHplvc5ygCI91DR4nne+BP4XAKF5ycz0pEKnFiTw8C1jCABJEZsnBZh6pXAvn71kFmw==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.7", + "Microsoft.Extensions.FileSystemGlobbing": "10.0.7", + "Microsoft.Extensions.Primitives": "10.0.7" + } + }, + "Microsoft.Extensions.FileSystemGlobbing": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "NTUspqB+vH9g4wAD6KPOBx01xqYuKXR/cHXm449zpbq1GqfjdAxBmg7eJXrNsPw7SKwIdT2cJ05GxYVvc+lvsA==" + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "hOeRIQ63GkgiYCB/MIFp+LQs8aXpJXpB55t6Aj37ab7t2/6WeFcPXxYM9hdy/o5tffzwf8mhqzLJP6mjGYCxjw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "10.0.7", + "Microsoft.Extensions.Logging.Abstractions": "10.0.7", + "Microsoft.Extensions.Options": "10.0.7" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "tIEcQ2gvERrH2KiCjdsVcHGhXt9lIsuDStfOIeZWr7/fP8IXhGiYfx0/80PNI7WPO2IYuFtlZLSlnTS8+/Mchw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "00SHUGTh2jSMvIr6x9Xwd2nE+B5/qFCO/9hDwUDhJsjYRDlADmaBZ7tqehXzBDsfjHSXJzuRHJzPYPPjphBQ7Q==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7", + "Microsoft.Extensions.Primitives": "10.0.7" + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "IT7f+EMXZtkjatEcF+o6aOw/7OE4etRrMiDGEWH/iiTu2R3uhC4NEQJCfHiibtX45U3sIQ5Fh6tbb1qaOz3YAg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "10.0.7", + "Microsoft.Extensions.Configuration.Binder": "10.0.7", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7", + "Microsoft.Extensions.Options": "10.0.7", + "Microsoft.Extensions.Primitives": "10.0.7" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "D5M0Jr551iTgwkZMN9rm0pSkgNLj5quUWQUmQPMZh7k/bnvZTnXRGfE2KuvXf1EEjt/ofD9yw9IumpgdP9QCnw==" + }, + "Microsoft.IdentityModel.Abstractions": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "gSxKLWRZzBpIsEoeUPkxfywNCCvRvl7hkq146XHPk5vOQc9izSf1I+uL1vh4y2U19QPxd9Z8K/8AdWyxYz2lSg==" + }, + "Microsoft.IdentityModel.JsonWebTokens": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "prBU72cIP4V8E9fhN+o/YdskTsLeIcnKPbhZf0X6mD7fdxoZqnS/NdEkSr+9Zp+2q7OZBOMfNBKGbTbhXODO4w==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "Microsoft.IdentityModel.Logging": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "MTzXmETkNQPACR7/XCXM1OGM6oU9RkyibqeJRtO9Ndew2LnGjMf9Atqj2VSf4XC27X0FQycUAlzxxEgQMWn2xQ==", + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "8.16.0" + } + }, + "Microsoft.IdentityModel.Protocols": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "UFrU7d46UTsPQTa2HIEIpB9H1uJe1BW9FLw5uhEJ2ZuKdur8bcUA/bO5caq5dlBt5gNJeRIB3QQXYNs5fCQCZA==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "h4yVXyJsEBBX5lg2G5ftMsi5JzcNEGAzrNphA6DQ6eOd8P0s+cDCOyPwVTYLePZvJL5unbPvYIvzrbTXzFjXnQ==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "8.16.0", + "System.IdentityModel.Tokens.Jwt": "8.16.0" + } + }, + "Microsoft.IdentityModel.Tokens": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "rtViGJcGsN7WcfUNErwNeQgjuU5cJNl6FDQsfi9TncwO+Epzn0FTfBsg3YuFW1Q0Ch/KPxaVdjLw3/+5Z5ceFQ==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "10.0.0", + "Microsoft.IdentityModel.Logging": "8.16.0" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "QYAnhBCOkT3ZUT/fHag11+bamwlbZ3U9Vi/WfKrD9emdUf1t3aqjWv0V2KtEGHSRSC81aBc8Oy/mvyGpEYd9Pg==" + }, + "Microsoft.SqlServer.Server": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "N4KeF3cpcm1PUHym1RmakkzfkEv3GRMyofVv40uXsQhCQeglr2OHNcUk2WOG51AKpGO8ynGpo9M/kFXSzghwug==" + }, + "Microsoft.Testing.Extensions.Telemetry": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "5TwgTx2u7k9Al/xbZ18QXq4Hdy2xewkVTI6K3sk+jY2ykqUkIKNuj7rFu3GOV5KnEUkevhw6eZcyZs77STHJIA==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.23.0", + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Extensions.TrxReport.Abstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "D8xmIJYQFJ6D49Rx5/vPrkZZxb338Jkew+eSqZLBfBiWKw4QZKy3i1BOXiLfz0lOmaNErwDz/YWRojCdNl+B9Q==", + "dependencies": { + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Extensions.VSTestBridge": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "bNRIEA2YoGr+Y+7LHdA7i1U80+7BAdf4K4Qh4Kx6eKkoBK/NV7QpoMg+GWPP0/eqAFzuUmUOIPVZ87Oo0Vyxmw==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "18.0.1", + "Microsoft.Testing.Extensions.Telemetry": "2.1.0", + "Microsoft.Testing.Extensions.TrxReport.Abstractions": "2.1.0", + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Platform": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "aHkjNTGIA+Zbdw6RJgSFrbDrCjO0CgqpElqYcvkRSeUhBv2bKarnvU3ep786U7UqrPlArT/B7VmImRibJD0Zrg==" + }, + "Microsoft.Testing.Platform.MSBuild": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "UpfPebXQtHGrWz21+YLHmJSm+5zsuPE9U9pfdCtoB+67g75fDmWlNgpkH2ZmdVhSwkjNIed9Icg8Iu63z2ei5Q==", + "dependencies": { + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "KNZd+M0S0rz5eNAln0pbZX+A/RbokYZCbGKx4fN4CkhtWhkz6nSJDO+9LGYjRE4d0WPVriJ2JnVubkjt3+PpMg==" + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "RM+3JNHEoHOCFXzVntUcIiYxzPjzBN0N8wto6HYXi76YyBTZ/3CeRL8U+Pk5zx3AUrOmHxDvKJwGUCdElU9bJg==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "18.5.1", + "Newtonsoft.Json": "13.0.3" + } + }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "9opKRyOKMCi2xJ7Bj7kxtZ1r9vbzosMvRrdEhVhDz8j8MoBGgB+WmC94yH839NPH+BclAjtQ/pyagvi/8gDLkw==" + }, + "Moq": { + "type": "Transitive", + "resolved": "4.20.72", + "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==", + "dependencies": { + "Castle.Core": "5.1.1" + } + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.1", + "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.3", + "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" + }, + "NHibernate": { + "type": "Transitive", + "resolved": "5.6.0", + "contentHash": "uDUFQQYSuLa2gdWrdHKJzvOqFkeVYMd3yWqGxtgyIG3cp+MxxQXNGe3iNYcy3f/U/yHjQpQUryMyvlBZVzz0FA==", + "dependencies": { + "Antlr3.Runtime": "[3.5.1, 4.0.0)", + "Iesi.Collections": "4.1.1", + "Remotion.Linq": "[2.2.0, 3.0.0)", + "Remotion.Linq.EagerFetching": "[2.2.0, 3.0.0)", + "System.Configuration.ConfigurationManager": "8.0.0" + } + }, + "NHibernate.Extensions.Logging": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "ztoDkVfu5nKj1YhxnLSP4fdnYR5FttkNyS9mqH0Hg5g1G/fZ90z7FwRjXHMdiFZl8T1wi569IvoCXm3oqzl5lA==", + "dependencies": { + "NHibernate": "5.4.9", + "System.Drawing.Common": "8.0.12" + } + }, + "NHibernateProfiler.Appender": { + "type": "Transitive", + "resolved": "6.0.6053", + "contentHash": "WN0Cm9s8k+K4aPTEwAhVykzG8l37iPRJgdAJNbHfAycIo+y+D/J8PnDcqCfLdrzDKtu/6zgKEkIAjBUGbMDpXw==", + "dependencies": { + "Azure.Storage.Blobs": "12.18.0", + "Google.Protobuf": "3.24.4", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0", + "Microsoft.CodeAnalysis.Common": "4.8.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.DependencyModel": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0", + "Newtonsoft.Json": "13.0.3", + "System.Data.SqlClient": "4.8.6", + "System.Security.Permissions": "6.0.1" + } + }, + "PPWCode.Util.Authorization.I": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "JDc3Ul3/gmpLKfBgW6emQSPyeikgP3S+A0GzbOendxWOT7YNsdyzs5wAthzgkF88o2BG+R7EXBZcppg4qR9v+w==" + }, + "PPWCode.Util.Time.I": { + "type": "Transitive", + "resolved": "2.0.0-alpha.1", + "contentHash": "Jve7ymPsfTegA4cGfYt6Vx9duJh+0exANdKe/6lpuEwUESAZAEXShQyHrWW2Krfx414B3vVxr1f6F1P3DVD2Gg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Exceptions.V": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "G/XH86vmbBIIuVRcoNLFRD0AHtEJ7aLw8w+Ia3BUHgZw2TGALDQ/eNOfrOrTFy5+4HPO2PLwRfrr69/Cp/zTRw==" + }, + "PPWCode.Vernacular.NHibernate.IV.SqlServer": { + "type": "Transitive", + "resolved": "1.0.0-alpha.4", + "contentHash": "g6s0KZlboHXnT4WtBJqK3mlQN/OIH2oOgi/FGvhUswMxrDkBev1yxA9omYB/S+1BmdSAVmwdF6jxjFHNf3kYFA==", + "dependencies": { + "Microsoft.Data.SqlClient": "7.0.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7", + "Microsoft.Extensions.Logging.Abstractions": "10.0.7", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.NHibernate.IV": "1.0.0-alpha.4", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "10.0.7" + } + }, + "PPWCode.Vernacular.Persistence.V": { + "type": "Transitive", + "resolved": "1.2.0-alpha.5", + "contentHash": "vz0SYQUZGLaKiSiV0Y1yHm0FByb5+jISNmWXWyUMQlAwEAMSrC7Na5K7kkpGDoVMo8OSxMnzbCSeMCbP4isJOw==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Semantics.V": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "B4jer3TyGME3xLFLY7BUN71OmvJiquPN4JH0ifQ7Gvh9CIrIL2orX/SHBtWNF7foUN1O22VpytcpmzWoT11Heg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0" + } + }, + "Remotion.Linq": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "fK/76UmpC0FXBlGDFVPLJHQlDLYnGC+XY3eoDgCgbtrhi0vzbXDQ3n/IYHhqSKqXQfGw/u04A1drWs7rFVkRjw==" + }, + "Remotion.Linq.EagerFetching": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "d6bkH5kROJPFsdvDy4yQved9I4ickamytPByPyuQcH9dk1ef4jciajo50vTQhheyOHeWOgLh97UvkiHV8QSgeQ==", + "dependencies": { + "Remotion.Linq": "2.2.0" + } + }, + "runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==", + "dependencies": { + "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0", + "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0", + "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0" + } + }, + "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==" + }, + "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==" + }, + "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==" + }, + "Serilog": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "savYe7h5yRlkqBVOwP8cIRDOdqKiPmYCU4W87JH38sBmcKD5EBoXvQIw6bNEvZ/pTe1gsiye3VFCzBsoppGkXQ==" + }, + "Serilog.Extensions.Logging": { + "type": "Transitive", + "resolved": "10.0.0", + "contentHash": "vx0kABKl2dWbBhhqAfTOk53/i8aV/5VaT3a6il9gn72Wqs2pM7EK2OB6No6xdqK2IaY6Zf9gdjLuK9BVa2rT+Q==", + "dependencies": { + "Microsoft.Extensions.Logging": "10.0.0", + "Serilog": "4.2.0" + } + }, + "Serilog.Settings.Configuration": { + "type": "Transitive", + "resolved": "10.0.0", + "contentHash": "LNq+ibS1sbhTqPV1FIE69/9AJJbfaOhnaqkzcjFy95o+4U+STsta9mi97f1smgXsWYKICDeGUf8xUGzd/52/uA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "10.0.0", + "Microsoft.Extensions.DependencyModel": "10.0.0", + "Serilog": "4.3.0" + } + }, + "Serilog.Sinks.NUnit": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "NufJ17KzvXKaDubTEJ8zSGbhQ0+uRJ05q8B9sjORqCRVt+692u8svNMP7Miu1v7+SIPjPZybmkRoSpppgjaTfA==", + "dependencies": { + "NETStandard.Library": "1.6.1", + "NUnit": "3.6.0", + "Serilog": "2.0.0" + } + }, + "StyleCop.Analyzers.Unstable": { + "type": "Transitive", + "resolved": "1.2.0.556", + "contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ==" + }, + "System.Composition": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + } + }, + "System.Composition.AttributedModel": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==" + }, + "System.Composition.Convention": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + } + }, + "System.Composition.Hosting": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + } + }, + "System.Composition.Runtime": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==" + }, + "System.Composition.TypedParts": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + } + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "NUV7+8ZpwAdtylEypliCwxTyMtt5oARCdEN9hOflL2dq5sGXHKAtBoVs1rb8qEj85ThC/5vJKDQmdiqKxZRgag==", + "dependencies": { + "System.Diagnostics.EventLog": "10.0.7", + "System.Security.Cryptography.ProtectedData": "10.0.7" + } + }, + "System.Data.SqlClient": { + "type": "Transitive", + "resolved": "4.8.6", + "contentHash": "2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==", + "dependencies": { + "runtime.native.System.Data.SqlClient.sni": "4.7.0" + } + }, + "System.Diagnostics.EventLog": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "WbmDLeTPYhEzXhvYVioTVn/D1XX6bovyny9n5p8Zxtf03+eY385RB818teZm6n+fA63iZNvng0/Np4tLuhkMhQ==" + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "8.0.12", + "contentHash": "mZrI0KKFAZO8gWaARhdaJblMUNEeHMlPsFa/nRS4j4EenYP/+f8F2bzu4yb0Co7WYuJ/w/D8d/zW4KGCdYJCyQ==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "8.0.0" + } + }, + "System.IdentityModel.Tokens.Jwt": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "rrs2u7DRMXQG2yh0oVyF/vLwosfRv20Ld2iEpYcKwQWXHjfV+gFXNQsQ9p008kR9Ou4pxBs68Q6/9zC8Gi1wjg==", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "8.16.0", + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "6hsjdSr4VOXSOnhALkYplHpAxnTG1J33YN42IB6nH2fEg4QnJqrZ4Ft+qn7mkrKAOYC8pCSFYwVWw6rQbmwgLQ==" + }, + "System.Memory.Data": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==" + }, + "System.Security.Cryptography.Pkcs": { + "type": "Transitive", + "resolved": "9.0.13", + "contentHash": "dxJhkuoaelvWy588wPXjShNks+ZMiSgXnN75/u+DPbER5PqKrLPDftE0BvGM7nDK/scQAVlD+gRXlCAAjWi58Q==" + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "eqKW9wyPUhZi6pxy9Y0fQO/bdHROcwj0tYdmoGEPCPCtCJLFdVVAlzuuYYEnJI64HxhoXPYGhtx891g/jwN4rg==" + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "QufGNXopGXxdXbkDn87hta4ajdNKNI3a1+HoJbKkmBbMtYPhEgEJKSiPZHGjI0zQpgZ7gi5L0gSV3PeewKRtew==", + "dependencies": { + "System.Windows.Extensions": "6.0.0" + } + }, + "System.Windows.Extensions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", + "dependencies": { + "System.Drawing.Common": "6.0.0" + } + }, + "ppwcode.util.validation.iv": { + "type": "Project" + }, + "ppwcode.util.validation.iv.nhibernate": { + "type": "Project", + "dependencies": { + "PPWCode.Util.Validation.IV": "[0.0.0-devbuild, )", + "PPWCode.Vernacular.NHibernate.IV": "[1.0.0-*, )" + } + }, + "PPWCode.Vernacular.Contracts.I": { + "type": "CentralTransitive", + "requested": "[1.*, )", + "resolved": "1.5.0", + "contentHash": "Hv7hjZ+RXEnVkAZEdwlAW5QbT0Hvh+pCusaiQT5bRD93Z58OuMHH6Q48TizzufF6+DRm9rJdnufIcOWWvKLKaw==" + }, + "PPWCode.Vernacular.NHibernate.IV": { + "type": "CentralTransitive", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "jBMDTA+eeHUmK9vo9j0xlpcAS5Wa+irxuY+leT1ZxekrYC9oYlcvPImaS7HjQARJwm1K0INNLF6SHRiOXO5JBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7", + "Microsoft.Extensions.Logging.Abstractions": "10.0.7", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "10.0.7" + } + } + }, + "net8.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.0", + "contentHash": "WFejCcOUR6k8UYyDnnR6Gk+obFYMsWrZuNqPJnsVFGVhpPSN0y20D4qbdKJnXinYGx9PQ397Hf9TnU1NBST8vA==" + }, + "JunitXml.TestLogger": { + "type": "Direct", + "requested": "[7.*, )", + "resolved": "7.1.0", + "contentHash": "Iu3dSnhJ+gzjlOtpIPZgHvJbmvmPbIGjxT7h5pNxxMiNTXKfxgi0O0eehnZ29qlC5bElAM0o9dSrjzjydCaGiA==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[18.*, )", + "resolved": "18.5.1", + "contentHash": "SfqVaLiIqAbRWuPg5BP4QFwBIirQj/YIL8Dhxl6zntBKbXp0cQykoV480SmwG+yRMiWptxEI6NbHQuGSZ8b97w==", + "dependencies": { + "Microsoft.CodeCoverage": "18.5.1", + "Microsoft.TestPlatform.TestHost": "18.5.1" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.203", + "contentHash": "R4Tvr1oACImMS+Y5M7NM07ll9QyJSKnki3Dvz8QwG1W6FEmd+9fmZXAF6BE6UPswHF6n0v41wgMQGlaudOspqA==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "10.0.203", + "Microsoft.SourceLink.Common": "10.0.203", + "System.IO.Hashing": "10.0.7" + } + }, + "NUnit": { + "type": "Direct", + "requested": "[4.*, )", + "resolved": "4.6.0", + "contentHash": "RsafbuYR+HzdDhgfdLYrDOSuFdv8IgGpbe5NIqXWAhZ7t6lXNj9yNcLcAk34lKVio6OusBQolKlboyl/9hObNA==" + }, + "NUnit.Analyzers": { + "type": "Direct", + "requested": "[4.11.2, )", + "resolved": "4.11.2", + "contentHash": "D9w1tsxMyBAsINY2yyIaS59V9W4iGtuPyHs+9enuhmDAaCsSOitJKha4TUPENCAd2LrylCawur0YhCJoLMHBJA==" + }, + "NUnit3TestAdapter": { + "type": "Direct", + "requested": "[6.*, )", + "resolved": "6.2.0", + "contentHash": "8PMJB8za2u8S0ey/nEtvh9BHjLhv5yzUEMCmA0+VIPLKSeOAZ3TEHWDyAp0+iPQb3jnBH1o8k0PoU2FgzXLRnQ==", + "dependencies": { + "Microsoft.Extensions.DependencyModel": "8.0.2", + "Microsoft.Testing.Extensions.VSTestBridge": "2.1.0", + "Microsoft.Testing.Platform.MSBuild": "2.1.0" + } + }, + "PPWCode.Vernacular.NHibernate.IV.Test": { + "type": "Direct", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "69r1iMnzFonMb4R14o7z950VtCwQNadpsC2KFRSb6Ynsk1eg+j6bLHA7nwLQf5nVL/NwFwD/ucivSUDjTJHLqg==", + "dependencies": { + "Microsoft.Data.SqlClient": "7.0.1", + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", + "Microsoft.Extensions.Configuration.Json": "8.0.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.DependencyModel": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", + "Moq": "4.20.72", + "NHibernate": "5.6.0", + "NHibernate.Extensions.Logging": "4.0.0", + "NHibernateProfiler.Appender": "6.0.6053", + "NUnit": "4.5.1", + "PPWCode.Util.Authorization.I": "1.0.0", + "PPWCode.Util.Time.I": "2.0.0-alpha.1", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.NHibernate.IV.SqlServer": "1.0.0-alpha.4", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "Serilog": "4.3.1", + "Serilog.Extensions.Logging": "8.0.0", + "Serilog.Settings.Configuration": "8.0.4", + "Serilog.Sinks.NUnit": "1.0.3", + "System.Configuration.ConfigurationManager": "8.0.1" + } + }, + "StyleCop.Analyzers": { + "type": "Direct", + "requested": "[1.2.0-beta.556, )", + "resolved": "1.2.0-beta.556", + "contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==", + "dependencies": { + "StyleCop.Analyzers.Unstable": "1.2.0.556" + } + }, + "Antlr3.Runtime": { + "type": "Transitive", + "resolved": "3.5.1", + "contentHash": "ZwCEpLCLZXkjzf1lYEixp9hgVlYYk33ACHn6xjFyVhGRi2BpoYQez0qtatbetdylASWYTG+cGz0CGR4z66JM4w==", + "dependencies": { + "NETStandard.Library": "1.6.0" + } + }, + "Azure.Core": { + "type": "Transitive", + "resolved": "1.35.0", + "contentHash": "hENcx03Jyuqv05F4RBEPbxz29UrM3Nbhnr6Wl6NQpoU9BCIbL3XLentrxDCTrH54NLS11Exxi/o8MYgT/cnKFA==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.Memory.Data": "1.0.2" + } + }, + "Azure.Storage.Blobs": { + "type": "Transitive", + "resolved": "12.18.0", + "contentHash": "IUqHRXnabXCzmmvkzqPK4FuGzLxmKSugDEt5Hm5B/JlJFR+aHDsPW4nCLbG0txThqBSKPqcBBU/oA6c5TaFJgA==", + "dependencies": { + "Azure.Storage.Common": "12.17.0" + } + }, + "Azure.Storage.Common": { + "type": "Transitive", + "resolved": "12.17.0", + "contentHash": "/h8SpUkxMuQy/MbNFeJQGmhYt3JnYfEiGeDojtNgLNzzhyDnRYgjF3ZKYgjORYQpn0Spr+4+v2MZy+0GNJBLrg==", + "dependencies": { + "Azure.Core": "1.35.0", + "System.IO.Hashing": "6.0.0" + } + }, + "Castle.Core": { + "type": "Transitive", + "resolved": "5.1.1", + "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", + "dependencies": { + "System.Diagnostics.EventLog": "6.0.0" + } + }, + "Google.Protobuf": { + "type": "Transitive", + "resolved": "3.24.4", + "contentHash": "TmUI4ndd3x5HePyLmqAmGT6oVvoRCu+bMmrJmOpAFtCPEB+oUMWF8dyVY1zxXry/8cqsTHWszYRIAwpuUNpUyA==" + }, + "Humanizer.Core": { + "type": "Transitive", + "resolved": "2.14.1", + "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==" + }, + "Iesi.Collections": { + "type": "Transitive", + "resolved": "4.1.1", + "contentHash": "VBrZi6gKjArcyOqrKoZODtd4V9rGqyxkUTwO9Hg/8+idhe/A391X9nRXuESewb7kfCNo5jRwFKLSjrY0j+0PkA==" + }, + "Microsoft.ApplicationInsights": { + "type": "Transitive", + "resolved": "2.23.0", + "contentHash": "nWArUZTdU7iqZLycLKWe0TDms48KKGE6pONH2terYNa8REXiqixrMOkf1sk5DHGMaUTqONU2YkS4SAXBhLStgw==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==" + }, + "Microsoft.Bcl.Cryptography": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "Y3t/c7C5XHJGFDnohjf1/9SYF3ZOfEU1fkNQuKg/dGf9hN18yrQj2owHITGfNS3+lKJdW6J4vY98jYu57jCO8A==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "m56WtzvIcL6t7JR3c7ogYitHizNM2QnRSo8yqxrQi+m5E/GGyDEmqymP+2p6YsFXn0j/Tzz67s4FQnrTLC7GKQ==", + "dependencies": { + "System.IO.Hashing": "10.0.7" + } + }, + "Microsoft.CodeAnalysis.Analyzers": { + "type": "Transitive", + "resolved": "3.3.4", + "contentHash": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==" + }, + "Microsoft.CodeAnalysis.Common": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.4" + } + }, + "Microsoft.CodeAnalysis.CSharp": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==", + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[4.8.0]" + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "[4.8.0]", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]" + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "System.Composition": "7.0.0", + "System.IO.Pipelines": "7.0.0" + } + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "vMFDR1ZjqzzgKmM0zrPie7Gv9Y+ZppjODB5Quzu9Eq0TlIusUfUCYFPEawO91zQuqwzvdFbJSU7WHNtjStffJQ==" + }, + "Microsoft.Data.SqlClient": { + "type": "Transitive", + "resolved": "7.0.1", + "contentHash": "9jZFXAJ2ThNYK7lhj2RhH7klXVNaWSvZpQncq3bPIOjmHBrdjwgeO4c8wucUVxQwFT8rAA13Z2F2jzoYR7ICDw==", + "dependencies": { + "Microsoft.Bcl.Cryptography": "8.0.0", + "Microsoft.Data.SqlClient.Extensions.Abstractions": "1.0.0", + "Microsoft.Data.SqlClient.Internal.Logging": "1.0.0", + "Microsoft.Data.SqlClient.SNI.runtime": "6.0.2", + "Microsoft.Extensions.Caching.Memory": "8.0.1", + "Microsoft.IdentityModel.JsonWebTokens": "8.16.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.16.0", + "Microsoft.SqlServer.Server": "1.0.0", + "System.Configuration.ConfigurationManager": "8.0.1", + "System.Security.Cryptography.Pkcs": "8.0.1" + } + }, + "Microsoft.Data.SqlClient.Extensions.Abstractions": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "rlnxc0KfwDSbE8ZHntFnl8SCgOa9QtJZblMv2zXLhRwl1Je7fsdsVzxSjzzC4JMsfAK+jXJWyezRB8SxUY4BdA==", + "dependencies": { + "Microsoft.Data.SqlClient.Internal.Logging": "1.0.0" + } + }, + "Microsoft.Data.SqlClient.Internal.Logging": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "Kue/7CF8KNT9zozfr30C94dMZVZml3atqWZvQemSXvTau76tRdypzeKiBKXadqgbOME0UiQIyVTNo5WxCRNVNg==" + }, + "Microsoft.Data.SqlClient.SNI.runtime": { + "type": "Transitive", + "resolved": "6.0.2", + "contentHash": "f+pRODTWX7Y67jXO3T5S2dIPZ9qMJNySjlZT/TKmWVNWe19N8jcWmHaqHnnchaq3gxEKv1SWVY5EFzOD06l41w==" + }, + "Microsoft.Extensions.Caching.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Caching.Memory": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "HFDnhYLccngrzyGgHkjEDU5FMLn4MpOsr5ElgsBMC4yx6lJh4jeWO7fHS8+TXPq+dgxCmUa/Trl8svObmwW4QA==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "mBMoXLsr5s1y2zOHWmKsE9veDcx8h1x/c3rz4baEdQKTeDcmQAPNbB54Pi/lhFO3K431eEq6PFbMgLaa6PHFfA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.FileExtensions": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "EJzSNO9oaAXnTdtdNO6npPRsIIeZCBSNmdQ091VDO7fBiOtJAAeEq6dtrVXIi3ZyjC5XRSAtVvF8SzcneRHqKQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Json": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "L89DLNuimOghjV3tLx0ArFDwVEJD6+uGB3BMCMX01kaLzXkaXHb2021xOMl2QOxUxbdePKUZsUY7n2UUkycjRg==", + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" + }, + "Microsoft.Extensions.DependencyModel": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "mUBDZZRgZrSyFOsJ2qJJ9fXfqd/kXJwf3AiDoqLD9m6TjY5OO/vLNOb9fb4juC0487eq4hcGN/M2Rh/CKS7QYw==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.FileProviders.Physical": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.FileSystemGlobbing": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==" + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "8.0.3", + "contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "0f4DMRqEd50zQh+UyJc+/HiBsZ3vhAQALgdkcQEalSH1L2isdC7Yj54M3cyo5e+BeO5fcBQ7Dxly8XiBBcvRgw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==" + }, + "Microsoft.IdentityModel.Abstractions": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "gSxKLWRZzBpIsEoeUPkxfywNCCvRvl7hkq146XHPk5vOQc9izSf1I+uL1vh4y2U19QPxd9Z8K/8AdWyxYz2lSg==" + }, + "Microsoft.IdentityModel.JsonWebTokens": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "prBU72cIP4V8E9fhN+o/YdskTsLeIcnKPbhZf0X6mD7fdxoZqnS/NdEkSr+9Zp+2q7OZBOMfNBKGbTbhXODO4w==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "Microsoft.IdentityModel.Logging": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "MTzXmETkNQPACR7/XCXM1OGM6oU9RkyibqeJRtO9Ndew2LnGjMf9Atqj2VSf4XC27X0FQycUAlzxxEgQMWn2xQ==", + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "8.16.0" + } + }, + "Microsoft.IdentityModel.Protocols": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "UFrU7d46UTsPQTa2HIEIpB9H1uJe1BW9FLw5uhEJ2ZuKdur8bcUA/bO5caq5dlBt5gNJeRIB3QQXYNs5fCQCZA==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "h4yVXyJsEBBX5lg2G5ftMsi5JzcNEGAzrNphA6DQ6eOd8P0s+cDCOyPwVTYLePZvJL5unbPvYIvzrbTXzFjXnQ==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "8.16.0", + "System.IdentityModel.Tokens.Jwt": "8.16.0" + } + }, + "Microsoft.IdentityModel.Tokens": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "rtViGJcGsN7WcfUNErwNeQgjuU5cJNl6FDQsfi9TncwO+Epzn0FTfBsg3YuFW1Q0Ch/KPxaVdjLw3/+5Z5ceFQ==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.IdentityModel.Logging": "8.16.0" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "QYAnhBCOkT3ZUT/fHag11+bamwlbZ3U9Vi/WfKrD9emdUf1t3aqjWv0V2KtEGHSRSC81aBc8Oy/mvyGpEYd9Pg==" + }, + "Microsoft.SqlServer.Server": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "N4KeF3cpcm1PUHym1RmakkzfkEv3GRMyofVv40uXsQhCQeglr2OHNcUk2WOG51AKpGO8ynGpo9M/kFXSzghwug==" + }, + "Microsoft.Testing.Extensions.Telemetry": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "5TwgTx2u7k9Al/xbZ18QXq4Hdy2xewkVTI6K3sk+jY2ykqUkIKNuj7rFu3GOV5KnEUkevhw6eZcyZs77STHJIA==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.23.0", + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Extensions.TrxReport.Abstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "D8xmIJYQFJ6D49Rx5/vPrkZZxb338Jkew+eSqZLBfBiWKw4QZKy3i1BOXiLfz0lOmaNErwDz/YWRojCdNl+B9Q==", + "dependencies": { + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Extensions.VSTestBridge": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "bNRIEA2YoGr+Y+7LHdA7i1U80+7BAdf4K4Qh4Kx6eKkoBK/NV7QpoMg+GWPP0/eqAFzuUmUOIPVZ87Oo0Vyxmw==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "18.0.1", + "Microsoft.Testing.Extensions.Telemetry": "2.1.0", + "Microsoft.Testing.Extensions.TrxReport.Abstractions": "2.1.0", + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Platform": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "aHkjNTGIA+Zbdw6RJgSFrbDrCjO0CgqpElqYcvkRSeUhBv2bKarnvU3ep786U7UqrPlArT/B7VmImRibJD0Zrg==" + }, + "Microsoft.Testing.Platform.MSBuild": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "UpfPebXQtHGrWz21+YLHmJSm+5zsuPE9U9pfdCtoB+67g75fDmWlNgpkH2ZmdVhSwkjNIed9Icg8Iu63z2ei5Q==", + "dependencies": { + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "KNZd+M0S0rz5eNAln0pbZX+A/RbokYZCbGKx4fN4CkhtWhkz6nSJDO+9LGYjRE4d0WPVriJ2JnVubkjt3+PpMg==" + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "RM+3JNHEoHOCFXzVntUcIiYxzPjzBN0N8wto6HYXi76YyBTZ/3CeRL8U+Pk5zx3AUrOmHxDvKJwGUCdElU9bJg==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "18.5.1", + "Newtonsoft.Json": "13.0.3" + } + }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "9opKRyOKMCi2xJ7Bj7kxtZ1r9vbzosMvRrdEhVhDz8j8MoBGgB+WmC94yH839NPH+BclAjtQ/pyagvi/8gDLkw==" + }, + "Moq": { + "type": "Transitive", + "resolved": "4.20.72", + "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==", + "dependencies": { + "Castle.Core": "5.1.1" + } + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.1", + "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.3", + "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" + }, + "NHibernate": { + "type": "Transitive", + "resolved": "5.6.0", + "contentHash": "uDUFQQYSuLa2gdWrdHKJzvOqFkeVYMd3yWqGxtgyIG3cp+MxxQXNGe3iNYcy3f/U/yHjQpQUryMyvlBZVzz0FA==", + "dependencies": { + "Antlr3.Runtime": "[3.5.1, 4.0.0)", + "Iesi.Collections": "4.1.1", + "Remotion.Linq": "[2.2.0, 3.0.0)", + "Remotion.Linq.EagerFetching": "[2.2.0, 3.0.0)", + "System.Configuration.ConfigurationManager": "8.0.0" + } + }, + "NHibernate.Extensions.Logging": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "ztoDkVfu5nKj1YhxnLSP4fdnYR5FttkNyS9mqH0Hg5g1G/fZ90z7FwRjXHMdiFZl8T1wi569IvoCXm3oqzl5lA==", + "dependencies": { + "NHibernate": "5.4.9", + "System.Drawing.Common": "8.0.12" + } + }, + "NHibernateProfiler.Appender": { + "type": "Transitive", + "resolved": "6.0.6053", + "contentHash": "WN0Cm9s8k+K4aPTEwAhVykzG8l37iPRJgdAJNbHfAycIo+y+D/J8PnDcqCfLdrzDKtu/6zgKEkIAjBUGbMDpXw==", + "dependencies": { + "Azure.Storage.Blobs": "12.18.0", + "Google.Protobuf": "3.24.4", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0", + "Microsoft.CodeAnalysis.Common": "4.8.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.DependencyModel": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0", + "Newtonsoft.Json": "13.0.3", + "System.Data.SqlClient": "4.8.6", + "System.Security.Permissions": "6.0.1" + } + }, + "PPWCode.Util.Authorization.I": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "JDc3Ul3/gmpLKfBgW6emQSPyeikgP3S+A0GzbOendxWOT7YNsdyzs5wAthzgkF88o2BG+R7EXBZcppg4qR9v+w==" + }, + "PPWCode.Util.Time.I": { + "type": "Transitive", + "resolved": "2.0.0-alpha.1", + "contentHash": "Jve7ymPsfTegA4cGfYt6Vx9duJh+0exANdKe/6lpuEwUESAZAEXShQyHrWW2Krfx414B3vVxr1f6F1P3DVD2Gg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Exceptions.V": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "G/XH86vmbBIIuVRcoNLFRD0AHtEJ7aLw8w+Ia3BUHgZw2TGALDQ/eNOfrOrTFy5+4HPO2PLwRfrr69/Cp/zTRw==" + }, + "PPWCode.Vernacular.NHibernate.IV.SqlServer": { + "type": "Transitive", + "resolved": "1.0.0-alpha.4", + "contentHash": "g6s0KZlboHXnT4WtBJqK3mlQN/OIH2oOgi/FGvhUswMxrDkBev1yxA9omYB/S+1BmdSAVmwdF6jxjFHNf3kYFA==", + "dependencies": { + "Microsoft.Data.SqlClient": "7.0.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.NHibernate.IV": "1.0.0-alpha.4", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "8.0.1" + } + }, + "PPWCode.Vernacular.Persistence.V": { + "type": "Transitive", + "resolved": "1.2.0-alpha.5", + "contentHash": "vz0SYQUZGLaKiSiV0Y1yHm0FByb5+jISNmWXWyUMQlAwEAMSrC7Na5K7kkpGDoVMo8OSxMnzbCSeMCbP4isJOw==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Semantics.V": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "B4jer3TyGME3xLFLY7BUN71OmvJiquPN4JH0ifQ7Gvh9CIrIL2orX/SHBtWNF7foUN1O22VpytcpmzWoT11Heg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0" + } + }, + "Remotion.Linq": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "fK/76UmpC0FXBlGDFVPLJHQlDLYnGC+XY3eoDgCgbtrhi0vzbXDQ3n/IYHhqSKqXQfGw/u04A1drWs7rFVkRjw==" + }, + "Remotion.Linq.EagerFetching": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "d6bkH5kROJPFsdvDy4yQved9I4ickamytPByPyuQcH9dk1ef4jciajo50vTQhheyOHeWOgLh97UvkiHV8QSgeQ==", + "dependencies": { + "Remotion.Linq": "2.2.0" + } + }, + "runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==", + "dependencies": { + "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0", + "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0", + "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0" + } + }, + "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==" + }, + "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==" + }, + "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==" + }, + "Serilog": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "savYe7h5yRlkqBVOwP8cIRDOdqKiPmYCU4W87JH38sBmcKD5EBoXvQIw6bNEvZ/pTe1gsiye3VFCzBsoppGkXQ==" + }, + "Serilog.Extensions.Logging": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "YEAMWu1UnWgf1c1KP85l1SgXGfiVo0Rz6x08pCiPOIBt2Qe18tcZLvdBUuV5o1QHvrs8FAry9wTIhgBRtjIlEg==", + "dependencies": { + "Microsoft.Extensions.Logging": "8.0.0", + "Serilog": "3.1.1" + } + }, + "Serilog.Settings.Configuration": { + "type": "Transitive", + "resolved": "8.0.4", + "contentHash": "pkxvq0umBKK8IKFJc1aV5S/HGRG/NIxJ6FV42KaTPLfDmBOAbBUB1m5gqqlGxzEa1MgDDWtQlWJdHTSxVWNx+Q==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "8.0.0", + "Microsoft.Extensions.DependencyModel": "8.0.2", + "Serilog": "3.1.1" + } + }, + "Serilog.Sinks.NUnit": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "NufJ17KzvXKaDubTEJ8zSGbhQ0+uRJ05q8B9sjORqCRVt+692u8svNMP7Miu1v7+SIPjPZybmkRoSpppgjaTfA==", + "dependencies": { + "NETStandard.Library": "1.6.1", + "NUnit": "3.6.0", + "Serilog": "2.0.0" + } + }, + "StyleCop.Analyzers.Unstable": { + "type": "Transitive", + "resolved": "1.2.0.556", + "contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ==" + }, + "System.Composition": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + } + }, + "System.Composition.AttributedModel": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==" + }, + "System.Composition.Convention": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + } + }, + "System.Composition.Hosting": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + } + }, + "System.Composition.Runtime": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==" + }, + "System.Composition.TypedParts": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + } + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "gPYFPDyohW2gXNhdQRSjtmeS6FymL2crg4Sral1wtvEJ7DUqFCDWDVbbLobASbzxfic8U1hQEdC7hmg9LHncMw==", + "dependencies": { + "System.Diagnostics.EventLog": "8.0.1", + "System.Security.Cryptography.ProtectedData": "8.0.0" + } + }, + "System.Data.SqlClient": { + "type": "Transitive", + "resolved": "4.8.6", + "contentHash": "2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==", + "dependencies": { + "runtime.native.System.Data.SqlClient.sni": "4.7.0" + } + }, + "System.Diagnostics.EventLog": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "n1ZP7NM2Gkn/MgD8+eOT5MulMj6wfeQMNS2Pizvq5GHCZfjlFMXV2irQlQmJhwA2VABC57M0auudO89Iu2uRLg==" + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "8.0.12", + "contentHash": "mZrI0KKFAZO8gWaARhdaJblMUNEeHMlPsFa/nRS4j4EenYP/+f8F2bzu4yb0Co7WYuJ/w/D8d/zW4KGCdYJCyQ==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "8.0.0" + } + }, + "System.IdentityModel.Tokens.Jwt": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "rrs2u7DRMXQG2yh0oVyF/vLwosfRv20Ld2iEpYcKwQWXHjfV+gFXNQsQ9p008kR9Ou4pxBs68Q6/9zC8Gi1wjg==", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "8.16.0", + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "6hsjdSr4VOXSOnhALkYplHpAxnTG1J33YN42IB6nH2fEg4QnJqrZ4Ft+qn7mkrKAOYC8pCSFYwVWw6rQbmwgLQ==" + }, + "System.IO.Pipelines": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "jRn6JYnNPW6xgQazROBLSfpdoczRw694vO5kKvMcNnpXuolEixUyw6IBuBs2Y2mlSX/LdLvyyWmfXhaI3ND1Yg==" + }, + "System.Memory.Data": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==" + }, + "System.Security.Cryptography.Pkcs": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "CoCRHFym33aUSf/NtWSVSZa99dkd0Hm7OCZUxORBjRB16LNhIEOf8THPqzIYlvKM0nNDAPTRBa1FxEECrgaxxA==" + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "QufGNXopGXxdXbkDn87hta4ajdNKNI3a1+HoJbKkmBbMtYPhEgEJKSiPZHGjI0zQpgZ7gi5L0gSV3PeewKRtew==", + "dependencies": { + "System.Windows.Extensions": "6.0.0" + } + }, + "System.Windows.Extensions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", + "dependencies": { + "System.Drawing.Common": "6.0.0" + } + }, + "ppwcode.util.validation.iv": { + "type": "Project" + }, + "ppwcode.util.validation.iv.nhibernate": { + "type": "Project", + "dependencies": { + "PPWCode.Util.Validation.IV": "[0.0.0-devbuild, )", + "PPWCode.Vernacular.NHibernate.IV": "[1.0.0-*, )" + } + }, + "PPWCode.Vernacular.Contracts.I": { + "type": "CentralTransitive", + "requested": "[1.*, )", + "resolved": "1.5.0", + "contentHash": "Hv7hjZ+RXEnVkAZEdwlAW5QbT0Hvh+pCusaiQT5bRD93Z58OuMHH6Q48TizzufF6+DRm9rJdnufIcOWWvKLKaw==" + }, + "PPWCode.Vernacular.NHibernate.IV": { + "type": "CentralTransitive", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "jBMDTA+eeHUmK9vo9j0xlpcAS5Wa+irxuY+leT1ZxekrYC9oYlcvPImaS7HjQARJwm1K0INNLF6SHRiOXO5JBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "8.0.1" + } + } + }, + "net9.0": { + "coverlet.collector": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.0", + "contentHash": "WFejCcOUR6k8UYyDnnR6Gk+obFYMsWrZuNqPJnsVFGVhpPSN0y20D4qbdKJnXinYGx9PQ397Hf9TnU1NBST8vA==" + }, + "JunitXml.TestLogger": { + "type": "Direct", + "requested": "[7.*, )", + "resolved": "7.1.0", + "contentHash": "Iu3dSnhJ+gzjlOtpIPZgHvJbmvmPbIGjxT7h5pNxxMiNTXKfxgi0O0eehnZ29qlC5bElAM0o9dSrjzjydCaGiA==" + }, + "Microsoft.NET.Test.Sdk": { + "type": "Direct", + "requested": "[18.*, )", + "resolved": "18.5.1", + "contentHash": "SfqVaLiIqAbRWuPg5BP4QFwBIirQj/YIL8Dhxl6zntBKbXp0cQykoV480SmwG+yRMiWptxEI6NbHQuGSZ8b97w==", + "dependencies": { + "Microsoft.CodeCoverage": "18.5.1", + "Microsoft.TestPlatform.TestHost": "18.5.1" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.203", + "contentHash": "R4Tvr1oACImMS+Y5M7NM07ll9QyJSKnki3Dvz8QwG1W6FEmd+9fmZXAF6BE6UPswHF6n0v41wgMQGlaudOspqA==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "10.0.203", + "Microsoft.SourceLink.Common": "10.0.203", + "System.IO.Hashing": "10.0.7" + } + }, + "NUnit": { + "type": "Direct", + "requested": "[4.*, )", + "resolved": "4.6.0", + "contentHash": "RsafbuYR+HzdDhgfdLYrDOSuFdv8IgGpbe5NIqXWAhZ7t6lXNj9yNcLcAk34lKVio6OusBQolKlboyl/9hObNA==" + }, + "NUnit.Analyzers": { + "type": "Direct", + "requested": "[4.11.2, )", + "resolved": "4.11.2", + "contentHash": "D9w1tsxMyBAsINY2yyIaS59V9W4iGtuPyHs+9enuhmDAaCsSOitJKha4TUPENCAd2LrylCawur0YhCJoLMHBJA==" + }, + "NUnit3TestAdapter": { + "type": "Direct", + "requested": "[6.*, )", + "resolved": "6.2.0", + "contentHash": "8PMJB8za2u8S0ey/nEtvh9BHjLhv5yzUEMCmA0+VIPLKSeOAZ3TEHWDyAp0+iPQb3jnBH1o8k0PoU2FgzXLRnQ==", + "dependencies": { + "Microsoft.Extensions.DependencyModel": "8.0.2", + "Microsoft.Testing.Extensions.VSTestBridge": "2.1.0", + "Microsoft.Testing.Platform.MSBuild": "2.1.0" + } + }, + "PPWCode.Vernacular.NHibernate.IV.Test": { + "type": "Direct", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "69r1iMnzFonMb4R14o7z950VtCwQNadpsC2KFRSb6Ynsk1eg+j6bLHA7nwLQf5nVL/NwFwD/ucivSUDjTJHLqg==", + "dependencies": { + "Microsoft.Data.SqlClient": "7.0.1", + "Microsoft.Extensions.Configuration": "9.0.15", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.15", + "Microsoft.Extensions.Configuration.Json": "9.0.15", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15", + "Microsoft.Extensions.DependencyModel": "9.0.15", + "Microsoft.Extensions.Logging": "9.0.15", + "Microsoft.Extensions.Logging.Abstractions": "9.0.15", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.15", + "Moq": "4.20.72", + "NHibernate": "5.6.0", + "NHibernate.Extensions.Logging": "4.0.0", + "NHibernateProfiler.Appender": "6.0.6053", + "NUnit": "4.5.1", + "PPWCode.Util.Authorization.I": "1.0.0", + "PPWCode.Util.Time.I": "2.0.0-alpha.1", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.NHibernate.IV.SqlServer": "1.0.0-alpha.4", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "Serilog": "4.3.1", + "Serilog.Extensions.Logging": "9.0.2", + "Serilog.Settings.Configuration": "9.0.0", + "Serilog.Sinks.NUnit": "1.0.3", + "System.Configuration.ConfigurationManager": "9.0.15" + } + }, + "StyleCop.Analyzers": { + "type": "Direct", + "requested": "[1.2.0-beta.556, )", + "resolved": "1.2.0-beta.556", + "contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==", + "dependencies": { + "StyleCop.Analyzers.Unstable": "1.2.0.556" + } + }, + "Antlr3.Runtime": { + "type": "Transitive", + "resolved": "3.5.1", + "contentHash": "ZwCEpLCLZXkjzf1lYEixp9hgVlYYk33ACHn6xjFyVhGRi2BpoYQez0qtatbetdylASWYTG+cGz0CGR4z66JM4w==", + "dependencies": { + "NETStandard.Library": "1.6.0" + } + }, + "Azure.Core": { + "type": "Transitive", + "resolved": "1.35.0", + "contentHash": "hENcx03Jyuqv05F4RBEPbxz29UrM3Nbhnr6Wl6NQpoU9BCIbL3XLentrxDCTrH54NLS11Exxi/o8MYgT/cnKFA==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.Memory.Data": "1.0.2" + } + }, + "Azure.Storage.Blobs": { + "type": "Transitive", + "resolved": "12.18.0", + "contentHash": "IUqHRXnabXCzmmvkzqPK4FuGzLxmKSugDEt5Hm5B/JlJFR+aHDsPW4nCLbG0txThqBSKPqcBBU/oA6c5TaFJgA==", + "dependencies": { + "Azure.Storage.Common": "12.17.0" + } + }, + "Azure.Storage.Common": { + "type": "Transitive", + "resolved": "12.17.0", + "contentHash": "/h8SpUkxMuQy/MbNFeJQGmhYt3JnYfEiGeDojtNgLNzzhyDnRYgjF3ZKYgjORYQpn0Spr+4+v2MZy+0GNJBLrg==", + "dependencies": { + "Azure.Core": "1.35.0", + "System.IO.Hashing": "6.0.0" + } + }, + "Castle.Core": { + "type": "Transitive", + "resolved": "5.1.1", + "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", + "dependencies": { + "System.Diagnostics.EventLog": "6.0.0" + } + }, + "Google.Protobuf": { + "type": "Transitive", + "resolved": "3.24.4", + "contentHash": "TmUI4ndd3x5HePyLmqAmGT6oVvoRCu+bMmrJmOpAFtCPEB+oUMWF8dyVY1zxXry/8cqsTHWszYRIAwpuUNpUyA==" + }, + "Humanizer.Core": { + "type": "Transitive", + "resolved": "2.14.1", + "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==" + }, + "Iesi.Collections": { + "type": "Transitive", + "resolved": "4.1.1", + "contentHash": "VBrZi6gKjArcyOqrKoZODtd4V9rGqyxkUTwO9Hg/8+idhe/A391X9nRXuESewb7kfCNo5jRwFKLSjrY0j+0PkA==" + }, + "Microsoft.ApplicationInsights": { + "type": "Transitive", + "resolved": "2.23.0", + "contentHash": "nWArUZTdU7iqZLycLKWe0TDms48KKGE6pONH2terYNa8REXiqixrMOkf1sk5DHGMaUTqONU2YkS4SAXBhLStgw==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==" + }, + "Microsoft.Bcl.Cryptography": { + "type": "Transitive", + "resolved": "9.0.13", + "contentHash": "5T+bH3Lb1nEe8Hf/ixMxLmhlrx5wRi53wv7OhVwG2F1ZviW1ejFRS1NHur3uqPpJRGtkQwUchtY6zhVK2R+v+w==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "m56WtzvIcL6t7JR3c7ogYitHizNM2QnRSo8yqxrQi+m5E/GGyDEmqymP+2p6YsFXn0j/Tzz67s4FQnrTLC7GKQ==", + "dependencies": { + "System.IO.Hashing": "10.0.7" + } + }, + "Microsoft.CodeAnalysis.Analyzers": { + "type": "Transitive", + "resolved": "3.3.4", + "contentHash": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==" + }, + "Microsoft.CodeAnalysis.Common": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.4" + } + }, + "Microsoft.CodeAnalysis.CSharp": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==", + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[4.8.0]" + } + }, + "Microsoft.CodeAnalysis.CSharp.Workspaces": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.CodeAnalysis.CSharp": "[4.8.0]", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "Microsoft.CodeAnalysis.Workspaces.Common": "[4.8.0]" + } + }, + "Microsoft.CodeAnalysis.Workspaces.Common": { + "type": "Transitive", + "resolved": "4.8.0", + "contentHash": "LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==", + "dependencies": { + "Humanizer.Core": "2.14.1", + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.CodeAnalysis.Common": "[4.8.0]", + "System.Composition": "7.0.0" + } + }, + "Microsoft.CodeCoverage": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "vMFDR1ZjqzzgKmM0zrPie7Gv9Y+ZppjODB5Quzu9Eq0TlIusUfUCYFPEawO91zQuqwzvdFbJSU7WHNtjStffJQ==" + }, + "Microsoft.Data.SqlClient": { + "type": "Transitive", + "resolved": "7.0.1", + "contentHash": "9jZFXAJ2ThNYK7lhj2RhH7klXVNaWSvZpQncq3bPIOjmHBrdjwgeO4c8wucUVxQwFT8rAA13Z2F2jzoYR7ICDw==", + "dependencies": { + "Microsoft.Bcl.Cryptography": "9.0.13", + "Microsoft.Data.SqlClient.Extensions.Abstractions": "1.0.0", + "Microsoft.Data.SqlClient.Internal.Logging": "1.0.0", + "Microsoft.Data.SqlClient.SNI.runtime": "6.0.2", + "Microsoft.Extensions.Caching.Memory": "9.0.13", + "Microsoft.IdentityModel.JsonWebTokens": "8.16.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.16.0", + "Microsoft.SqlServer.Server": "1.0.0", + "System.Configuration.ConfigurationManager": "9.0.13", + "System.Security.Cryptography.Pkcs": "9.0.13" + } + }, + "Microsoft.Data.SqlClient.Extensions.Abstractions": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "rlnxc0KfwDSbE8ZHntFnl8SCgOa9QtJZblMv2zXLhRwl1Je7fsdsVzxSjzzC4JMsfAK+jXJWyezRB8SxUY4BdA==", + "dependencies": { + "Microsoft.Data.SqlClient.Internal.Logging": "1.0.0" + } + }, + "Microsoft.Data.SqlClient.Internal.Logging": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "Kue/7CF8KNT9zozfr30C94dMZVZml3atqWZvQemSXvTau76tRdypzeKiBKXadqgbOME0UiQIyVTNo5WxCRNVNg==" + }, + "Microsoft.Data.SqlClient.SNI.runtime": { + "type": "Transitive", + "resolved": "6.0.2", + "contentHash": "f+pRODTWX7Y67jXO3T5S2dIPZ9qMJNySjlZT/TKmWVNWe19N8jcWmHaqHnnchaq3gxEKv1SWVY5EFzOD06l41w==" + }, + "Microsoft.Extensions.Caching.Abstractions": { + "type": "Transitive", + "resolved": "9.0.13", + "contentHash": "nTT90JYIpcXEy6fcU8LPVycONkO6wipROgP9pyC4uxBif4fazu2rDzlWSntqtzr5p8GbQL2EopsYuTZR3yoeag==", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.13" + } + }, + "Microsoft.Extensions.Caching.Memory": { + "type": "Transitive", + "resolved": "9.0.13", + "contentHash": "OdQmN8LYcUEu20Fxii9mk68nHJGL+JPXF3w0+hxenf0oDDdDBA+ZV/S92FmIgAWAElowIiFA/g0x+8YB1g80Hg==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "9.0.13", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.13", + "Microsoft.Extensions.Logging.Abstractions": "9.0.13", + "Microsoft.Extensions.Options": "9.0.13", + "Microsoft.Extensions.Primitives": "9.0.13" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "qxlTxFw69SHEljR49rJ1PPZn2Z/uqEixCb2vFE77BaX1CSyt+6aHvCOfj1LD7kXtKwxxrBaJBgLdu19c8jipLg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "9.0.15", + "Microsoft.Extensions.Primitives": "9.0.15" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "M9s2mDxtfNdS6SbemODzDxHgm+eIhZPSuTc0s0QazQoSceTXTv+OjthKqf8r/FehXtABXD01ijQNdtODDFtnxg==", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.15" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "6hOTcdyGlJBBHl1DqbnvqSbHsJp814r5HMXGkTH1Jg6IosqwqZhh00/UCUJ0oXrACO096wWuCMfKMIPbnMGWIQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "9.0.15" + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "5laaPT77pVbLlj2vZklHhvapPcG2hXmRAM04OtDdhZv9dDfibm5NLYq81M7/W3JgVqdRl7TL4CxM1+0qduQi4Q==", + "dependencies": { + "Microsoft.Extensions.Configuration": "9.0.15", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.15" + } + }, + "Microsoft.Extensions.Configuration.FileExtensions": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "HtxlK3nOdSt/AInMnTFbvg6tToOMXmsl+jZ6g6pYjzDhlfeQZksE/yKS8YG14yzvtgIFTUkh95qZ+UCqqguxSQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "9.0.15", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.15", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.15", + "Microsoft.Extensions.FileProviders.Physical": "9.0.15", + "Microsoft.Extensions.Primitives": "9.0.15" + } + }, + "Microsoft.Extensions.Configuration.Json": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "rZidIJ2FOyOUPlXwgsdVP2BeAr0CTxzHA21wZoCVhMZx08bMkGvuJGIjDswNh1LmEwPLmEf/E9LOigT3EpKMGA==", + "dependencies": { + "Microsoft.Extensions.Configuration": "9.0.15", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.15", + "Microsoft.Extensions.Configuration.FileExtensions": "9.0.15", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.15" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "IC2QYj9ctbepvv2etwVXFVSfVLyFuYMuHhclQeuFYyWOGOY8yHfv6GzND3Dr4u7AOhWC1p/HwbJQNCZvGdiQ0g==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "4ulUZtcGCPQ/LadApR1QftrRZ0AvxGW6SsVhS3QoTAwZtzhbN6x0VCVPoXsoPkznUrgzy8bi4KZ+kFt5jsP40Q==" + }, + "Microsoft.Extensions.DependencyModel": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "zt6n0QA6ufiSYJFURYCnQcOP48fRvmlLtbKwgAoPoBjuBGZ+2g+yhu3MRxOjfiA3iHpjlMoDJcNMOhRMVG64oQ==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "yzWilnNU/MvHINapPhY6iFAeApZnhToXbEBplORucn01hFc1F6ZaKt0V9dHYpUMun8WR9cSnq1ky35FWREVZbA==", + "dependencies": { + "Microsoft.Extensions.Primitives": "9.0.15" + } + }, + "Microsoft.Extensions.FileProviders.Physical": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "iFT4OZXDitw6IHkQTE7G//UZAKIPS14wuM6aVZTlfzVvR6PdICnL3f2OKayu2nEamE5XBzpvUKcOT0xOX93eBA==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.15", + "Microsoft.Extensions.FileSystemGlobbing": "9.0.15", + "Microsoft.Extensions.Primitives": "9.0.15" + } + }, + "Microsoft.Extensions.FileSystemGlobbing": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "zr0KtzBYm8f8pD3jLNlg9jy/8K9p9z9rCZebRJmQ0nWAikNwHVx2zc5MbDt88bctC8gc8jtqGhy/e7TFNW3gOg==" + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "+rAMD3QMdqEhUHmD79DZGyAivBSnLvYC5P6iBbvO6so0qYRe4rtJ0v9ABsbXkUOzYFVrN0w8+abNoNEOmbangw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "9.0.15", + "Microsoft.Extensions.Logging.Abstractions": "9.0.15", + "Microsoft.Extensions.Options": "9.0.15" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "kI9Sc2l8oC3bEptPIPp3+aoCBCfrefJHn5lgfKbw526JJbUuNNQPtB/bcUyqFpzr6KKgHxALfNrP6rX1x+19yA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "MbKKtaKGlvil2KWaA3x81l15mUorZGhqe4v8h3eLl7YU6gpOlfARnXYxHxx3GEakHl0De0zeu1kFm3u/NiPdKg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15", + "Microsoft.Extensions.Primitives": "9.0.15" + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "g7IlZ1Qp1c5J0UPx9aesAvxTbIDkSM2EqBFeH1VBLCoYQYZjMoVQlVB+jYmsNs0lgrAa91p0yRoYu5HGYaGxCg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "9.0.15", + "Microsoft.Extensions.Configuration.Binder": "9.0.15", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15", + "Microsoft.Extensions.Options": "9.0.15", + "Microsoft.Extensions.Primitives": "9.0.15" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "WRPJ9kpIwsOcghRT0tduIqiz7CDv7WsnL4kTJavtHS4j5AW++4LlR63oOSTL2o/zLR4T1z0/FQMgrnsPJ5bpQQ==" + }, + "Microsoft.IdentityModel.Abstractions": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "gSxKLWRZzBpIsEoeUPkxfywNCCvRvl7hkq146XHPk5vOQc9izSf1I+uL1vh4y2U19QPxd9Z8K/8AdWyxYz2lSg==" + }, + "Microsoft.IdentityModel.JsonWebTokens": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "prBU72cIP4V8E9fhN+o/YdskTsLeIcnKPbhZf0X6mD7fdxoZqnS/NdEkSr+9Zp+2q7OZBOMfNBKGbTbhXODO4w==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "Microsoft.IdentityModel.Logging": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "MTzXmETkNQPACR7/XCXM1OGM6oU9RkyibqeJRtO9Ndew2LnGjMf9Atqj2VSf4XC27X0FQycUAlzxxEgQMWn2xQ==", + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "8.16.0" + } + }, + "Microsoft.IdentityModel.Protocols": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "UFrU7d46UTsPQTa2HIEIpB9H1uJe1BW9FLw5uhEJ2ZuKdur8bcUA/bO5caq5dlBt5gNJeRIB3QQXYNs5fCQCZA==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "h4yVXyJsEBBX5lg2G5ftMsi5JzcNEGAzrNphA6DQ6eOd8P0s+cDCOyPwVTYLePZvJL5unbPvYIvzrbTXzFjXnQ==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "8.16.0", + "System.IdentityModel.Tokens.Jwt": "8.16.0" + } + }, + "Microsoft.IdentityModel.Tokens": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "rtViGJcGsN7WcfUNErwNeQgjuU5cJNl6FDQsfi9TncwO+Epzn0FTfBsg3YuFW1Q0Ch/KPxaVdjLw3/+5Z5ceFQ==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.IdentityModel.Logging": "8.16.0" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "QYAnhBCOkT3ZUT/fHag11+bamwlbZ3U9Vi/WfKrD9emdUf1t3aqjWv0V2KtEGHSRSC81aBc8Oy/mvyGpEYd9Pg==" + }, + "Microsoft.SqlServer.Server": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "N4KeF3cpcm1PUHym1RmakkzfkEv3GRMyofVv40uXsQhCQeglr2OHNcUk2WOG51AKpGO8ynGpo9M/kFXSzghwug==" + }, + "Microsoft.Testing.Extensions.Telemetry": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "5TwgTx2u7k9Al/xbZ18QXq4Hdy2xewkVTI6K3sk+jY2ykqUkIKNuj7rFu3GOV5KnEUkevhw6eZcyZs77STHJIA==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.23.0", + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Extensions.TrxReport.Abstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "D8xmIJYQFJ6D49Rx5/vPrkZZxb338Jkew+eSqZLBfBiWKw4QZKy3i1BOXiLfz0lOmaNErwDz/YWRojCdNl+B9Q==", + "dependencies": { + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Extensions.VSTestBridge": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "bNRIEA2YoGr+Y+7LHdA7i1U80+7BAdf4K4Qh4Kx6eKkoBK/NV7QpoMg+GWPP0/eqAFzuUmUOIPVZ87Oo0Vyxmw==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "18.0.1", + "Microsoft.Testing.Extensions.Telemetry": "2.1.0", + "Microsoft.Testing.Extensions.TrxReport.Abstractions": "2.1.0", + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.Testing.Platform": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "aHkjNTGIA+Zbdw6RJgSFrbDrCjO0CgqpElqYcvkRSeUhBv2bKarnvU3ep786U7UqrPlArT/B7VmImRibJD0Zrg==" + }, + "Microsoft.Testing.Platform.MSBuild": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "UpfPebXQtHGrWz21+YLHmJSm+5zsuPE9U9pfdCtoB+67g75fDmWlNgpkH2ZmdVhSwkjNIed9Icg8Iu63z2ei5Q==", + "dependencies": { + "Microsoft.Testing.Platform": "2.1.0" + } + }, + "Microsoft.TestPlatform.ObjectModel": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "KNZd+M0S0rz5eNAln0pbZX+A/RbokYZCbGKx4fN4CkhtWhkz6nSJDO+9LGYjRE4d0WPVriJ2JnVubkjt3+PpMg==" + }, + "Microsoft.TestPlatform.TestHost": { + "type": "Transitive", + "resolved": "18.5.1", + "contentHash": "RM+3JNHEoHOCFXzVntUcIiYxzPjzBN0N8wto6HYXi76YyBTZ/3CeRL8U+Pk5zx3AUrOmHxDvKJwGUCdElU9bJg==", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "18.5.1", + "Newtonsoft.Json": "13.0.3" + } + }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "9opKRyOKMCi2xJ7Bj7kxtZ1r9vbzosMvRrdEhVhDz8j8MoBGgB+WmC94yH839NPH+BclAjtQ/pyagvi/8gDLkw==" + }, + "Moq": { + "type": "Transitive", + "resolved": "4.20.72", + "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==", + "dependencies": { + "Castle.Core": "5.1.1" + } + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.1", + "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.3", + "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" + }, + "NHibernate": { + "type": "Transitive", + "resolved": "5.6.0", + "contentHash": "uDUFQQYSuLa2gdWrdHKJzvOqFkeVYMd3yWqGxtgyIG3cp+MxxQXNGe3iNYcy3f/U/yHjQpQUryMyvlBZVzz0FA==", + "dependencies": { + "Antlr3.Runtime": "[3.5.1, 4.0.0)", + "Iesi.Collections": "4.1.1", + "Remotion.Linq": "[2.2.0, 3.0.0)", + "Remotion.Linq.EagerFetching": "[2.2.0, 3.0.0)", + "System.Configuration.ConfigurationManager": "8.0.0" + } + }, + "NHibernate.Extensions.Logging": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "ztoDkVfu5nKj1YhxnLSP4fdnYR5FttkNyS9mqH0Hg5g1G/fZ90z7FwRjXHMdiFZl8T1wi569IvoCXm3oqzl5lA==", + "dependencies": { + "NHibernate": "5.4.9", + "System.Drawing.Common": "8.0.12" + } + }, + "NHibernateProfiler.Appender": { + "type": "Transitive", + "resolved": "6.0.6053", + "contentHash": "WN0Cm9s8k+K4aPTEwAhVykzG8l37iPRJgdAJNbHfAycIo+y+D/J8PnDcqCfLdrzDKtu/6zgKEkIAjBUGbMDpXw==", + "dependencies": { + "Azure.Storage.Blobs": "12.18.0", + "Google.Protobuf": "3.24.4", + "Microsoft.CodeAnalysis.CSharp": "4.8.0", + "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0", + "Microsoft.CodeAnalysis.Common": "4.8.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.DependencyModel": "7.0.0", + "Microsoft.Extensions.Logging": "7.0.0", + "Newtonsoft.Json": "13.0.3", + "System.Data.SqlClient": "4.8.6", + "System.Security.Permissions": "6.0.1" + } + }, + "PPWCode.Util.Authorization.I": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "JDc3Ul3/gmpLKfBgW6emQSPyeikgP3S+A0GzbOendxWOT7YNsdyzs5wAthzgkF88o2BG+R7EXBZcppg4qR9v+w==" + }, + "PPWCode.Util.Time.I": { + "type": "Transitive", + "resolved": "2.0.0-alpha.1", + "contentHash": "Jve7ymPsfTegA4cGfYt6Vx9duJh+0exANdKe/6lpuEwUESAZAEXShQyHrWW2Krfx414B3vVxr1f6F1P3DVD2Gg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Exceptions.V": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "G/XH86vmbBIIuVRcoNLFRD0AHtEJ7aLw8w+Ia3BUHgZw2TGALDQ/eNOfrOrTFy5+4HPO2PLwRfrr69/Cp/zTRw==" + }, + "PPWCode.Vernacular.NHibernate.IV.SqlServer": { + "type": "Transitive", + "resolved": "1.0.0-alpha.4", + "contentHash": "g6s0KZlboHXnT4WtBJqK3mlQN/OIH2oOgi/FGvhUswMxrDkBev1yxA9omYB/S+1BmdSAVmwdF6jxjFHNf3kYFA==", + "dependencies": { + "Microsoft.Data.SqlClient": "7.0.1", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15", + "Microsoft.Extensions.Logging.Abstractions": "9.0.15", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.NHibernate.IV": "1.0.0-alpha.4", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "9.0.15" + } + }, + "PPWCode.Vernacular.Persistence.V": { + "type": "Transitive", + "resolved": "1.2.0-alpha.5", + "contentHash": "vz0SYQUZGLaKiSiV0Y1yHm0FByb5+jISNmWXWyUMQlAwEAMSrC7Na5K7kkpGDoVMo8OSxMnzbCSeMCbP4isJOw==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Semantics.V": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "B4jer3TyGME3xLFLY7BUN71OmvJiquPN4JH0ifQ7Gvh9CIrIL2orX/SHBtWNF7foUN1O22VpytcpmzWoT11Heg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0" + } + }, + "Remotion.Linq": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "fK/76UmpC0FXBlGDFVPLJHQlDLYnGC+XY3eoDgCgbtrhi0vzbXDQ3n/IYHhqSKqXQfGw/u04A1drWs7rFVkRjw==" + }, + "Remotion.Linq.EagerFetching": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "d6bkH5kROJPFsdvDy4yQved9I4ickamytPByPyuQcH9dk1ef4jciajo50vTQhheyOHeWOgLh97UvkiHV8QSgeQ==", + "dependencies": { + "Remotion.Linq": "2.2.0" + } + }, + "runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==", + "dependencies": { + "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0", + "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0", + "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0" + } + }, + "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==" + }, + "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==" + }, + "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==" + }, + "Serilog": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "savYe7h5yRlkqBVOwP8cIRDOdqKiPmYCU4W87JH38sBmcKD5EBoXvQIw6bNEvZ/pTe1gsiye3VFCzBsoppGkXQ==" + }, + "Serilog.Extensions.Logging": { + "type": "Transitive", + "resolved": "9.0.2", + "contentHash": "p8kk2McN6LxuQfLyCoOkL7+nJIhVKnV1WFUxAaGTQTQk0wySbgmCHe98j+xSQvIbYHtzKXROOE2G2R0TLwBfig==", + "dependencies": { + "Microsoft.Extensions.Logging": "9.0.0", + "Serilog": "4.2.0" + } + }, + "Serilog.Settings.Configuration": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "4/Et4Cqwa+F88l5SeFeNZ4c4Z6dEAIKbu3MaQb2Zz9F/g27T5a3wvfMcmCOaAiACjfUb4A6wrlTVfyYUZk3RRQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "9.0.0", + "Microsoft.Extensions.DependencyModel": "9.0.0", + "Serilog": "4.2.0" + } + }, + "Serilog.Sinks.NUnit": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "NufJ17KzvXKaDubTEJ8zSGbhQ0+uRJ05q8B9sjORqCRVt+692u8svNMP7Miu1v7+SIPjPZybmkRoSpppgjaTfA==", + "dependencies": { + "NETStandard.Library": "1.6.1", + "NUnit": "3.6.0", + "Serilog": "2.0.0" + } + }, + "StyleCop.Analyzers.Unstable": { + "type": "Transitive", + "resolved": "1.2.0.556", + "contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ==" + }, + "System.Composition": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Convention": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0", + "System.Composition.TypedParts": "7.0.0" + } + }, + "System.Composition.AttributedModel": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==" + }, + "System.Composition.Convention": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0" + } + }, + "System.Composition.Hosting": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==", + "dependencies": { + "System.Composition.Runtime": "7.0.0" + } + }, + "System.Composition.Runtime": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==" + }, + "System.Composition.TypedParts": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==", + "dependencies": { + "System.Composition.AttributedModel": "7.0.0", + "System.Composition.Hosting": "7.0.0", + "System.Composition.Runtime": "7.0.0" + } + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "KaQ/0Hoi8bfStyzpITKW9jHY8qkVwii/m26foTTeXMx9UGwhtQMWIwBmLDUFHTFmP39x0mqnAuvZi+yyem/N1w==", + "dependencies": { + "System.Diagnostics.EventLog": "9.0.15", + "System.Security.Cryptography.ProtectedData": "9.0.15" + } + }, + "System.Data.SqlClient": { + "type": "Transitive", + "resolved": "4.8.6", + "contentHash": "2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==", + "dependencies": { + "runtime.native.System.Data.SqlClient.sni": "4.7.0" + } + }, + "System.Diagnostics.EventLog": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "IDnzlv94Tj0vQfkZ9sB0r45BjAfHvrZ9sSnxvHKhpRETvmKZJwSJO+XCMfl5VYyeKliLYaFSMflVp3q+ktTRBw==" + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "8.0.12", + "contentHash": "mZrI0KKFAZO8gWaARhdaJblMUNEeHMlPsFa/nRS4j4EenYP/+f8F2bzu4yb0Co7WYuJ/w/D8d/zW4KGCdYJCyQ==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "8.0.0" + } + }, + "System.IdentityModel.Tokens.Jwt": { + "type": "Transitive", + "resolved": "8.16.0", + "contentHash": "rrs2u7DRMXQG2yh0oVyF/vLwosfRv20Ld2iEpYcKwQWXHjfV+gFXNQsQ9p008kR9Ou4pxBs68Q6/9zC8Gi1wjg==", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "8.16.0", + "Microsoft.IdentityModel.Tokens": "8.16.0" + } + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "6hsjdSr4VOXSOnhALkYplHpAxnTG1J33YN42IB6nH2fEg4QnJqrZ4Ft+qn7mkrKAOYC8pCSFYwVWw6rQbmwgLQ==" + }, + "System.Memory.Data": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==" + }, + "System.Security.Cryptography.Pkcs": { + "type": "Transitive", + "resolved": "9.0.13", + "contentHash": "dxJhkuoaelvWy588wPXjShNks+ZMiSgXnN75/u+DPbER5PqKrLPDftE0BvGM7nDK/scQAVlD+gRXlCAAjWi58Q==" + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "sObjWXydF/osVWObYPmqN1PGxx+XYlPbEqPDjUzYGQbanrdd4x9pIPnUwi7d7RuKEsZ5i814oVli9s3bMqlRog==" + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "QufGNXopGXxdXbkDn87hta4ajdNKNI3a1+HoJbKkmBbMtYPhEgEJKSiPZHGjI0zQpgZ7gi5L0gSV3PeewKRtew==", + "dependencies": { + "System.Windows.Extensions": "6.0.0" + } + }, + "System.Windows.Extensions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", + "dependencies": { + "System.Drawing.Common": "6.0.0" + } + }, + "ppwcode.util.validation.iv": { + "type": "Project" + }, + "ppwcode.util.validation.iv.nhibernate": { + "type": "Project", + "dependencies": { + "PPWCode.Util.Validation.IV": "[0.0.0-devbuild, )", + "PPWCode.Vernacular.NHibernate.IV": "[1.0.0-*, )" + } + }, + "PPWCode.Vernacular.Contracts.I": { + "type": "CentralTransitive", + "requested": "[1.*, )", + "resolved": "1.5.0", + "contentHash": "Hv7hjZ+RXEnVkAZEdwlAW5QbT0Hvh+pCusaiQT5bRD93Z58OuMHH6Q48TizzufF6+DRm9rJdnufIcOWWvKLKaw==" + }, + "PPWCode.Vernacular.NHibernate.IV": { + "type": "CentralTransitive", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "jBMDTA+eeHUmK9vo9j0xlpcAS5Wa+irxuY+leT1ZxekrYC9oYlcvPImaS7HjQARJwm1K0INNLF6SHRiOXO5JBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15", + "Microsoft.Extensions.Logging.Abstractions": "9.0.15", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "9.0.15" + } + } + } + } +} \ No newline at end of file diff --git a/src/IV.NHibernate/European/Belgium/ValidBBAN.cs b/src/IV.NHibernate/European/Belgium/ValidBBAN.cs new file mode 100644 index 0000000..a0d830b --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidBBAN.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidBBAN : ImmutableIdentificationBase +{ + protected override BBAN Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Belgium/ValidCompanyLocalUnitNumber.cs b/src/IV.NHibernate/European/Belgium/ValidCompanyLocalUnitNumber.cs new file mode 100644 index 0000000..1797d21 --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidCompanyLocalUnitNumber.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidCompanyLocalUnitNumber : ImmutableIdentificationBase +{ + protected override CompanyLocalUnitNumber Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Belgium/ValidDMFA.cs b/src/IV.NHibernate/European/Belgium/ValidDMFA.cs new file mode 100644 index 0000000..e2604ac --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidDMFA.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidDMFA : ImmutableIdentificationBase +{ + protected override DMFA Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Belgium/ValidINSS.cs b/src/IV.NHibernate/European/Belgium/ValidINSS.cs new file mode 100644 index 0000000..9c324db --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidINSS.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidINSS : ImmutableIdentificationBase +{ + protected override INSS Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Belgium/ValidKBO.cs b/src/IV.NHibernate/European/Belgium/ValidKBO.cs new file mode 100644 index 0000000..1448bc8 --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidKBO.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidKBO : ImmutableIdentificationBase +{ + protected override KBO Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Belgium/ValidOGM.cs b/src/IV.NHibernate/European/Belgium/ValidOGM.cs new file mode 100644 index 0000000..084923c --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidOGM.cs @@ -0,0 +1,21 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidOGM : ImmutableIdentificationBase +{ + /// + protected override OGM Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Belgium/ValidRSZ.cs b/src/IV.NHibernate/European/Belgium/ValidRSZ.cs new file mode 100644 index 0000000..bab61d9 --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidRSZ.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidRSZ : ImmutableIdentificationBase +{ + protected override RSZ Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Belgium/ValidTemporaryRSZ.cs b/src/IV.NHibernate/European/Belgium/ValidTemporaryRSZ.cs new file mode 100644 index 0000000..5049918 --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidTemporaryRSZ.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidTemporaryRSZ : ImmutableIdentificationBase +{ + protected override TemporaryRSZ Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Belgium/ValidVAT.cs b/src/IV.NHibernate/European/Belgium/ValidVAT.cs new file mode 100644 index 0000000..0f8f475 --- /dev/null +++ b/src/IV.NHibernate/European/Belgium/ValidVAT.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Belgium; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Belgium; + +public class ValidVAT : ImmutableIdentificationBase +{ + protected override VAT Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/France/ValidNIR.cs b/src/IV.NHibernate/European/France/ValidNIR.cs new file mode 100644 index 0000000..0b45b0b --- /dev/null +++ b/src/IV.NHibernate/European/France/ValidNIR.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.France; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.France; + +public class ValidNIR : ImmutableIdentificationBase +{ + protected override NIR Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/European/Netherlands/ValidBSN.cs b/src/IV.NHibernate/European/Netherlands/ValidBSN.cs new file mode 100644 index 0000000..d130ca8 --- /dev/null +++ b/src/IV.NHibernate/European/Netherlands/ValidBSN.cs @@ -0,0 +1,20 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using PPWCode.Util.Validation.IV.European.Netherlands; + +namespace PPWCode.Util.Validation.IV.NHibernate.European.Netherlands; + +public class ValidBSN : ImmutableIdentificationBase +{ + protected override BSN Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/ImmutableIdentificationBase.cs b/src/IV.NHibernate/ImmutableIdentificationBase.cs new file mode 100644 index 0000000..1c5eaa9 --- /dev/null +++ b/src/IV.NHibernate/ImmutableIdentificationBase.cs @@ -0,0 +1,60 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.Data; +using System.Data.Common; + +using NHibernate; +using NHibernate.Engine; +using NHibernate.SqlTypes; + +using PPWCode.Vernacular.Exceptions.V; +using PPWCode.Vernacular.NHibernate.IV; + +namespace PPWCode.Util.Validation.IV.NHibernate; + +public abstract class ImmutableIdentificationBase : ImmutableUserTypeBase + where T : AbstractIdentification +{ + public override Type ReturnedType + => typeof(T); + + public override SqlType[] SqlTypes + => + [ + new(DbType.String) + ]; + + protected abstract T Create(string identification); + + public override object? NullSafeGet(DbDataReader rs, string[] names, ISessionImplementor sessionImplementor, object owner) + { + string identification = (string)NHibernateUtil.String.NullSafeGet(rs, names[0], sessionImplementor, owner); + return identification == null ? null : Create(identification); + } + + public override void NullSafeSet(DbCommand cmd, object? value, int index, ISessionImplementor sessionImplementor) + { + if (value == null) + { + NHibernateUtil.String.NullSafeSet(cmd, null, index, sessionImplementor); + return; + } + + T identification = (T)value; + if (!identification.IsValid) + { + throw new ProgrammingError($"Trying to save TYPE: {typeof(T).Name} with INVALID VALUE: {identification.RawVersion}, only VALID identification is allowed."); + } + + NHibernateUtil.String.NullSafeSet(cmd, identification.CleanedVersion, index, sessionImplementor); + } +} diff --git a/src/IV.NHibernate/PPWCode.Util.Validation.IV.NHibernate.csproj b/src/IV.NHibernate/PPWCode.Util.Validation.IV.NHibernate.csproj new file mode 100644 index 0000000..1806ce3 --- /dev/null +++ b/src/IV.NHibernate/PPWCode.Util.Validation.IV.NHibernate.csproj @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/IV.NHibernate/ValidBIC.cs b/src/IV.NHibernate/ValidBIC.cs new file mode 100644 index 0000000..1d7531c --- /dev/null +++ b/src/IV.NHibernate/ValidBIC.cs @@ -0,0 +1,18 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace PPWCode.Util.Validation.IV.NHibernate; + +public class ValidBIC : ImmutableIdentificationBase +{ + protected override BIC Create(string? identification) + => new(identification); +} diff --git a/src/IV.NHibernate/ValidIBAN.cs b/src/IV.NHibernate/ValidIBAN.cs new file mode 100644 index 0000000..bb89ea7 --- /dev/null +++ b/src/IV.NHibernate/ValidIBAN.cs @@ -0,0 +1,18 @@ +// 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 +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace PPWCode.Util.Validation.IV.NHibernate; + +public class ValidIBAN : ImmutableIdentificationBase +{ + protected override IBAN Create(string identification) + => new IBAN(identification); +} diff --git a/src/IV.NHibernate/packages.lock.json b/src/IV.NHibernate/packages.lock.json new file mode 100644 index 0000000..de2771f --- /dev/null +++ b/src/IV.NHibernate/packages.lock.json @@ -0,0 +1,536 @@ +{ + "version": 2, + "dependencies": { + "net10.0": { + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.203", + "contentHash": "R4Tvr1oACImMS+Y5M7NM07ll9QyJSKnki3Dvz8QwG1W6FEmd+9fmZXAF6BE6UPswHF6n0v41wgMQGlaudOspqA==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "10.0.203", + "Microsoft.SourceLink.Common": "10.0.203", + "System.IO.Hashing": "10.0.7" + } + }, + "PPWCode.Vernacular.NHibernate.IV": { + "type": "Direct", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "jBMDTA+eeHUmK9vo9j0xlpcAS5Wa+irxuY+leT1ZxekrYC9oYlcvPImaS7HjQARJwm1K0INNLF6SHRiOXO5JBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7", + "Microsoft.Extensions.Logging.Abstractions": "10.0.7", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "10.0.7" + } + }, + "StyleCop.Analyzers": { + "type": "Direct", + "requested": "[1.2.0-beta.556, )", + "resolved": "1.2.0-beta.556", + "contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==", + "dependencies": { + "StyleCop.Analyzers.Unstable": "1.2.0.556" + } + }, + "Antlr3.Runtime": { + "type": "Transitive", + "resolved": "3.5.1", + "contentHash": "ZwCEpLCLZXkjzf1lYEixp9hgVlYYk33ACHn6xjFyVhGRi2BpoYQez0qtatbetdylASWYTG+cGz0CGR4z66JM4w==", + "dependencies": { + "NETStandard.Library": "1.6.0" + } + }, + "Iesi.Collections": { + "type": "Transitive", + "resolved": "4.1.1", + "contentHash": "VBrZi6gKjArcyOqrKoZODtd4V9rGqyxkUTwO9Hg/8+idhe/A391X9nRXuESewb7kfCNo5jRwFKLSjrY0j+0PkA==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "m56WtzvIcL6t7JR3c7ogYitHizNM2QnRSo8yqxrQi+m5E/GGyDEmqymP+2p6YsFXn0j/Tzz67s4FQnrTLC7GKQ==", + "dependencies": { + "System.IO.Hashing": "10.0.7" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "Z6mfFEaFcwCfSboxJwOLfu7/31npCY9q70WUamHW/vRQhDvBKOT4Vf9YkZj5J6hLvJpb0oDEYfHunQZj0xxvKw==" + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "tIEcQ2gvERrH2KiCjdsVcHGhXt9lIsuDStfOIeZWr7/fP8IXhGiYfx0/80PNI7WPO2IYuFtlZLSlnTS8+/Mchw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.7" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.0.1", + "contentHash": "2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "QYAnhBCOkT3ZUT/fHag11+bamwlbZ3U9Vi/WfKrD9emdUf1t3aqjWv0V2KtEGHSRSC81aBc8Oy/mvyGpEYd9Pg==" + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "ypsCvIdCZ4IoYASJHt6tF2fMo7N30NLgV1EbmC+snO490OMl9FvVxmumw14rhReWU3j3g7BYudG6YCrchwHJlA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1" + } + }, + "NHibernate": { + "type": "Transitive", + "resolved": "5.6.0", + "contentHash": "uDUFQQYSuLa2gdWrdHKJzvOqFkeVYMd3yWqGxtgyIG3cp+MxxQXNGe3iNYcy3f/U/yHjQpQUryMyvlBZVzz0FA==", + "dependencies": { + "Antlr3.Runtime": "[3.5.1, 4.0.0)", + "Iesi.Collections": "4.1.1", + "Remotion.Linq": "[2.2.0, 3.0.0)", + "Remotion.Linq.EagerFetching": "[2.2.0, 3.0.0)", + "System.Configuration.ConfigurationManager": "8.0.0" + } + }, + "PPWCode.Vernacular.Exceptions.V": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "G/XH86vmbBIIuVRcoNLFRD0AHtEJ7aLw8w+Ia3BUHgZw2TGALDQ/eNOfrOrTFy5+4HPO2PLwRfrr69/Cp/zTRw==" + }, + "PPWCode.Vernacular.Persistence.V": { + "type": "Transitive", + "resolved": "1.2.0-alpha.5", + "contentHash": "vz0SYQUZGLaKiSiV0Y1yHm0FByb5+jISNmWXWyUMQlAwEAMSrC7Na5K7kkpGDoVMo8OSxMnzbCSeMCbP4isJOw==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Semantics.V": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "B4jer3TyGME3xLFLY7BUN71OmvJiquPN4JH0ifQ7Gvh9CIrIL2orX/SHBtWNF7foUN1O22VpytcpmzWoT11Heg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0" + } + }, + "Remotion.Linq": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "fK/76UmpC0FXBlGDFVPLJHQlDLYnGC+XY3eoDgCgbtrhi0vzbXDQ3n/IYHhqSKqXQfGw/u04A1drWs7rFVkRjw==" + }, + "Remotion.Linq.EagerFetching": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "d6bkH5kROJPFsdvDy4yQved9I4ickamytPByPyuQcH9dk1ef4jciajo50vTQhheyOHeWOgLh97UvkiHV8QSgeQ==", + "dependencies": { + "Remotion.Linq": "2.2.0" + } + }, + "StyleCop.Analyzers.Unstable": { + "type": "Transitive", + "resolved": "1.2.0.556", + "contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ==" + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "NUV7+8ZpwAdtylEypliCwxTyMtt5oARCdEN9hOflL2dq5sGXHKAtBoVs1rb8qEj85ThC/5vJKDQmdiqKxZRgag==", + "dependencies": { + "System.Diagnostics.EventLog": "10.0.7", + "System.Security.Cryptography.ProtectedData": "10.0.7" + } + }, + "System.Diagnostics.EventLog": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "WbmDLeTPYhEzXhvYVioTVn/D1XX6bovyny9n5p8Zxtf03+eY385RB818teZm6n+fA63iZNvng0/Np4tLuhkMhQ==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "6hsjdSr4VOXSOnhALkYplHpAxnTG1J33YN42IB6nH2fEg4QnJqrZ4Ft+qn7mkrKAOYC8pCSFYwVWw6rQbmwgLQ==" + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "eqKW9wyPUhZi6pxy9Y0fQO/bdHROcwj0tYdmoGEPCPCtCJLFdVVAlzuuYYEnJI64HxhoXPYGhtx891g/jwN4rg==" + }, + "ppwcode.util.validation.iv": { + "type": "Project" + }, + "PPWCode.Vernacular.Contracts.I": { + "type": "CentralTransitive", + "requested": "[1.*, )", + "resolved": "1.5.0", + "contentHash": "Hv7hjZ+RXEnVkAZEdwlAW5QbT0Hvh+pCusaiQT5bRD93Z58OuMHH6Q48TizzufF6+DRm9rJdnufIcOWWvKLKaw==" + } + }, + "net8.0": { + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.203", + "contentHash": "R4Tvr1oACImMS+Y5M7NM07ll9QyJSKnki3Dvz8QwG1W6FEmd+9fmZXAF6BE6UPswHF6n0v41wgMQGlaudOspqA==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "10.0.203", + "Microsoft.SourceLink.Common": "10.0.203", + "System.IO.Hashing": "10.0.7" + } + }, + "PPWCode.Vernacular.NHibernate.IV": { + "type": "Direct", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "jBMDTA+eeHUmK9vo9j0xlpcAS5Wa+irxuY+leT1ZxekrYC9oYlcvPImaS7HjQARJwm1K0INNLF6SHRiOXO5JBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging.Abstractions": "8.0.3", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "8.0.1" + } + }, + "StyleCop.Analyzers": { + "type": "Direct", + "requested": "[1.2.0-beta.556, )", + "resolved": "1.2.0-beta.556", + "contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==", + "dependencies": { + "StyleCop.Analyzers.Unstable": "1.2.0.556" + } + }, + "Antlr3.Runtime": { + "type": "Transitive", + "resolved": "3.5.1", + "contentHash": "ZwCEpLCLZXkjzf1lYEixp9hgVlYYk33ACHn6xjFyVhGRi2BpoYQez0qtatbetdylASWYTG+cGz0CGR4z66JM4w==", + "dependencies": { + "NETStandard.Library": "1.6.0" + } + }, + "Iesi.Collections": { + "type": "Transitive", + "resolved": "4.1.1", + "contentHash": "VBrZi6gKjArcyOqrKoZODtd4V9rGqyxkUTwO9Hg/8+idhe/A391X9nRXuESewb7kfCNo5jRwFKLSjrY0j+0PkA==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "m56WtzvIcL6t7JR3c7ogYitHizNM2QnRSo8yqxrQi+m5E/GGyDEmqymP+2p6YsFXn0j/Tzz67s4FQnrTLC7GKQ==", + "dependencies": { + "System.IO.Hashing": "10.0.7" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "8.0.2", + "contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==" + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "8.0.3", + "contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.0.1", + "contentHash": "2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "QYAnhBCOkT3ZUT/fHag11+bamwlbZ3U9Vi/WfKrD9emdUf1t3aqjWv0V2KtEGHSRSC81aBc8Oy/mvyGpEYd9Pg==" + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "ypsCvIdCZ4IoYASJHt6tF2fMo7N30NLgV1EbmC+snO490OMl9FvVxmumw14rhReWU3j3g7BYudG6YCrchwHJlA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1" + } + }, + "NHibernate": { + "type": "Transitive", + "resolved": "5.6.0", + "contentHash": "uDUFQQYSuLa2gdWrdHKJzvOqFkeVYMd3yWqGxtgyIG3cp+MxxQXNGe3iNYcy3f/U/yHjQpQUryMyvlBZVzz0FA==", + "dependencies": { + "Antlr3.Runtime": "[3.5.1, 4.0.0)", + "Iesi.Collections": "4.1.1", + "Remotion.Linq": "[2.2.0, 3.0.0)", + "Remotion.Linq.EagerFetching": "[2.2.0, 3.0.0)", + "System.Configuration.ConfigurationManager": "8.0.0" + } + }, + "PPWCode.Vernacular.Exceptions.V": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "G/XH86vmbBIIuVRcoNLFRD0AHtEJ7aLw8w+Ia3BUHgZw2TGALDQ/eNOfrOrTFy5+4HPO2PLwRfrr69/Cp/zTRw==" + }, + "PPWCode.Vernacular.Persistence.V": { + "type": "Transitive", + "resolved": "1.2.0-alpha.5", + "contentHash": "vz0SYQUZGLaKiSiV0Y1yHm0FByb5+jISNmWXWyUMQlAwEAMSrC7Na5K7kkpGDoVMo8OSxMnzbCSeMCbP4isJOw==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Semantics.V": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "B4jer3TyGME3xLFLY7BUN71OmvJiquPN4JH0ifQ7Gvh9CIrIL2orX/SHBtWNF7foUN1O22VpytcpmzWoT11Heg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0" + } + }, + "Remotion.Linq": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "fK/76UmpC0FXBlGDFVPLJHQlDLYnGC+XY3eoDgCgbtrhi0vzbXDQ3n/IYHhqSKqXQfGw/u04A1drWs7rFVkRjw==" + }, + "Remotion.Linq.EagerFetching": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "d6bkH5kROJPFsdvDy4yQved9I4ickamytPByPyuQcH9dk1ef4jciajo50vTQhheyOHeWOgLh97UvkiHV8QSgeQ==", + "dependencies": { + "Remotion.Linq": "2.2.0" + } + }, + "StyleCop.Analyzers.Unstable": { + "type": "Transitive", + "resolved": "1.2.0.556", + "contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ==" + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "gPYFPDyohW2gXNhdQRSjtmeS6FymL2crg4Sral1wtvEJ7DUqFCDWDVbbLobASbzxfic8U1hQEdC7hmg9LHncMw==", + "dependencies": { + "System.Diagnostics.EventLog": "8.0.1", + "System.Security.Cryptography.ProtectedData": "8.0.0" + } + }, + "System.Diagnostics.EventLog": { + "type": "Transitive", + "resolved": "8.0.1", + "contentHash": "n1ZP7NM2Gkn/MgD8+eOT5MulMj6wfeQMNS2Pizvq5GHCZfjlFMXV2irQlQmJhwA2VABC57M0auudO89Iu2uRLg==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "6hsjdSr4VOXSOnhALkYplHpAxnTG1J33YN42IB6nH2fEg4QnJqrZ4Ft+qn7mkrKAOYC8pCSFYwVWw6rQbmwgLQ==" + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "+TUFINV2q2ifyXauQXRwy4CiBhqvDEDZeVJU7qfxya4aRYOKzVBpN+4acx25VcPB9ywUN6C0n8drWl110PhZEg==" + }, + "ppwcode.util.validation.iv": { + "type": "Project" + }, + "PPWCode.Vernacular.Contracts.I": { + "type": "CentralTransitive", + "requested": "[1.*, )", + "resolved": "1.5.0", + "contentHash": "Hv7hjZ+RXEnVkAZEdwlAW5QbT0Hvh+pCusaiQT5bRD93Z58OuMHH6Q48TizzufF6+DRm9rJdnufIcOWWvKLKaw==" + } + }, + "net9.0": { + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[10.*, )", + "resolved": "10.0.203", + "contentHash": "R4Tvr1oACImMS+Y5M7NM07ll9QyJSKnki3Dvz8QwG1W6FEmd+9fmZXAF6BE6UPswHF6n0v41wgMQGlaudOspqA==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "10.0.203", + "Microsoft.SourceLink.Common": "10.0.203", + "System.IO.Hashing": "10.0.7" + } + }, + "PPWCode.Vernacular.NHibernate.IV": { + "type": "Direct", + "requested": "[1.0.0-*, )", + "resolved": "1.0.0-alpha.4", + "contentHash": "jBMDTA+eeHUmK9vo9j0xlpcAS5Wa+irxuY+leT1ZxekrYC9oYlcvPImaS7HjQARJwm1K0INNLF6SHRiOXO5JBA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15", + "Microsoft.Extensions.Logging.Abstractions": "9.0.15", + "NHibernate": "5.6.0", + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Persistence.V": "1.2.0-alpha.5", + "PPWCode.Vernacular.Semantics.V": "1.0.0", + "System.Configuration.ConfigurationManager": "9.0.15" + } + }, + "StyleCop.Analyzers": { + "type": "Direct", + "requested": "[1.2.0-beta.556, )", + "resolved": "1.2.0-beta.556", + "contentHash": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==", + "dependencies": { + "StyleCop.Analyzers.Unstable": "1.2.0.556" + } + }, + "Antlr3.Runtime": { + "type": "Transitive", + "resolved": "3.5.1", + "contentHash": "ZwCEpLCLZXkjzf1lYEixp9hgVlYYk33ACHn6xjFyVhGRi2BpoYQez0qtatbetdylASWYTG+cGz0CGR4z66JM4w==", + "dependencies": { + "NETStandard.Library": "1.6.0" + } + }, + "Iesi.Collections": { + "type": "Transitive", + "resolved": "4.1.1", + "contentHash": "VBrZi6gKjArcyOqrKoZODtd4V9rGqyxkUTwO9Hg/8+idhe/A391X9nRXuESewb7kfCNo5jRwFKLSjrY0j+0PkA==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "m56WtzvIcL6t7JR3c7ogYitHizNM2QnRSo8yqxrQi+m5E/GGyDEmqymP+2p6YsFXn0j/Tzz67s4FQnrTLC7GKQ==", + "dependencies": { + "System.IO.Hashing": "10.0.7" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "4ulUZtcGCPQ/LadApR1QftrRZ0AvxGW6SsVhS3QoTAwZtzhbN6x0VCVPoXsoPkznUrgzy8bi4KZ+kFt5jsP40Q==" + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "kI9Sc2l8oC3bEptPIPp3+aoCBCfrefJHn5lgfKbw526JJbUuNNQPtB/bcUyqFpzr6KKgHxALfNrP6rX1x+19yA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.15" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "1.0.1", + "contentHash": "2G6OjjJzwBfNOO8myRV/nFrbTw5iA+DEm0N+qUqhrOmaVtn4pC77h38I1jsXGw5VH55+dPfQsqHD0We9sCl9FQ==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "10.0.203", + "contentHash": "QYAnhBCOkT3ZUT/fHag11+bamwlbZ3U9Vi/WfKrD9emdUf1t3aqjWv0V2KtEGHSRSC81aBc8Oy/mvyGpEYd9Pg==" + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "ypsCvIdCZ4IoYASJHt6tF2fMo7N30NLgV1EbmC+snO490OMl9FvVxmumw14rhReWU3j3g7BYudG6YCrchwHJlA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1" + } + }, + "NHibernate": { + "type": "Transitive", + "resolved": "5.6.0", + "contentHash": "uDUFQQYSuLa2gdWrdHKJzvOqFkeVYMd3yWqGxtgyIG3cp+MxxQXNGe3iNYcy3f/U/yHjQpQUryMyvlBZVzz0FA==", + "dependencies": { + "Antlr3.Runtime": "[3.5.1, 4.0.0)", + "Iesi.Collections": "4.1.1", + "Remotion.Linq": "[2.2.0, 3.0.0)", + "Remotion.Linq.EagerFetching": "[2.2.0, 3.0.0)", + "System.Configuration.ConfigurationManager": "8.0.0" + } + }, + "PPWCode.Vernacular.Exceptions.V": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "G/XH86vmbBIIuVRcoNLFRD0AHtEJ7aLw8w+Ia3BUHgZw2TGALDQ/eNOfrOrTFy5+4HPO2PLwRfrr69/Cp/zTRw==" + }, + "PPWCode.Vernacular.Persistence.V": { + "type": "Transitive", + "resolved": "1.2.0-alpha.5", + "contentHash": "vz0SYQUZGLaKiSiV0Y1yHm0FByb5+jISNmWXWyUMQlAwEAMSrC7Na5K7kkpGDoVMo8OSxMnzbCSeMCbP4isJOw==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0", + "PPWCode.Vernacular.Semantics.V": "1.0.0" + } + }, + "PPWCode.Vernacular.Semantics.V": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "B4jer3TyGME3xLFLY7BUN71OmvJiquPN4JH0ifQ7Gvh9CIrIL2orX/SHBtWNF7foUN1O22VpytcpmzWoT11Heg==", + "dependencies": { + "PPWCode.Vernacular.Contracts.I": "1.5.0", + "PPWCode.Vernacular.Exceptions.V": "1.1.0" + } + }, + "Remotion.Linq": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "fK/76UmpC0FXBlGDFVPLJHQlDLYnGC+XY3eoDgCgbtrhi0vzbXDQ3n/IYHhqSKqXQfGw/u04A1drWs7rFVkRjw==" + }, + "Remotion.Linq.EagerFetching": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "d6bkH5kROJPFsdvDy4yQved9I4ickamytPByPyuQcH9dk1ef4jciajo50vTQhheyOHeWOgLh97UvkiHV8QSgeQ==", + "dependencies": { + "Remotion.Linq": "2.2.0" + } + }, + "StyleCop.Analyzers.Unstable": { + "type": "Transitive", + "resolved": "1.2.0.556", + "contentHash": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ==" + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "KaQ/0Hoi8bfStyzpITKW9jHY8qkVwii/m26foTTeXMx9UGwhtQMWIwBmLDUFHTFmP39x0mqnAuvZi+yyem/N1w==", + "dependencies": { + "System.Diagnostics.EventLog": "9.0.15", + "System.Security.Cryptography.ProtectedData": "9.0.15" + } + }, + "System.Diagnostics.EventLog": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "IDnzlv94Tj0vQfkZ9sB0r45BjAfHvrZ9sSnxvHKhpRETvmKZJwSJO+XCMfl5VYyeKliLYaFSMflVp3q+ktTRBw==" + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "10.0.7", + "contentHash": "6hsjdSr4VOXSOnhALkYplHpAxnTG1J33YN42IB6nH2fEg4QnJqrZ4Ft+qn7mkrKAOYC8pCSFYwVWw6rQbmwgLQ==" + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "9.0.15", + "contentHash": "sObjWXydF/osVWObYPmqN1PGxx+XYlPbEqPDjUzYGQbanrdd4x9pIPnUwi7d7RuKEsZ5i814oVli9s3bMqlRog==" + }, + "ppwcode.util.validation.iv": { + "type": "Project" + }, + "PPWCode.Vernacular.Contracts.I": { + "type": "CentralTransitive", + "requested": "[1.*, )", + "resolved": "1.5.0", + "contentHash": "Hv7hjZ+RXEnVkAZEdwlAW5QbT0Hvh+pCusaiQT5bRD93Z58OuMHH6Q48TizzufF6+DRm9rJdnufIcOWWvKLKaw==" + } + } + } +} \ No newline at end of file From 7c3f843385febc3f208dfdf3d59606533eeddd65 Mon Sep 17 00:00:00 2001 From: Ruben Vandeginste Date: Mon, 4 May 2026 15:30:55 +0200 Subject: [PATCH 2/7] Update docs to include NHibernate support --- README.md | 4 +--- .../{project.csproj => project-efc.csproj} | 0 .../ROOT/examples/project-nhibernate.csproj | 11 +++++++++++ docs/modules/ROOT/pages/getting-started.adoc | 16 +++++++++++++++- 4 files changed, 27 insertions(+), 4 deletions(-) rename docs/modules/ROOT/examples/{project.csproj => project-efc.csproj} (100%) create mode 100644 docs/modules/ROOT/examples/project-nhibernate.csproj diff --git a/README.md b/README.md index f66abfe..01989f6 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,14 @@ # PPWCode.Util.Validation -This library is part of the .NET PPWCode project and (currently) contains specific types for the validation of country-specific identifiers. A separate library is included that adds support for these types in Entity Framework Core. +This library is part of the .NET PPWCode project and (currently) contains specific types for the validation of country-specific identifiers. Separate libraries are included that add support for these types in both Entity Framework Core and NHibernate. For more information, see [PPWCode .NET Docs]. - ## PPWCode .NET Development of the PPWCode .NET libraries is done in [GitHub] repositories, and all releases (both stable and pre-release) are published on [NuGet]. - ## License and Copyright Copyright 2014–2026 by [PeopleWare]. diff --git a/docs/modules/ROOT/examples/project.csproj b/docs/modules/ROOT/examples/project-efc.csproj similarity index 100% rename from docs/modules/ROOT/examples/project.csproj rename to docs/modules/ROOT/examples/project-efc.csproj diff --git a/docs/modules/ROOT/examples/project-nhibernate.csproj b/docs/modules/ROOT/examples/project-nhibernate.csproj new file mode 100644 index 0000000..1fa1d5b --- /dev/null +++ b/docs/modules/ROOT/examples/project-nhibernate.csproj @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/modules/ROOT/pages/getting-started.adoc b/docs/modules/ROOT/pages/getting-started.adoc index 5e7c078..8383359 100644 --- a/docs/modules/ROOT/pages/getting-started.adoc +++ b/docs/modules/ROOT/pages/getting-started.adoc @@ -3,8 +3,10 @@ // helper attributes for package links :nuget-main: https://www.nuget.org/packages/PPWCode.Util.Validation.IV/ :nuget-efc: https://www.nuget.org/packages/PPWCode.Util.Validation.IV.EntityFrameworkCore/ +:nuget-nhibernate: https://www.nuget.org/packages/PPWCode.Util.Validation.IV.NHibernate/ :main: PPWCode.Util.Validation.IV :efc: PPWCode.Util.Validation.IV.EntityFrameworkCore +:nhibernate: PPWCode.Util.Validation.IV.NHibernate == Add NuGet package @@ -14,11 +16,23 @@ The following packages are available: - {nuget-main}[{main}], base library - {nuget-efc}[{efc}], Entity Framework Core support +- {nuget-nhibernate}[{nhibernate}], NHibernate support You can use your IDE to add the required libraries as dependencies to your project, or manually add them in the `.csproj` file. This would look similar to the following: + +=== Entity Framework Core + +[source,xml] +---- +include::example$project-efc.csproj[] +---- + + +=== NHibernate + [source,xml] ---- -include::example$project.csproj[] +include::example$project-nhibernate.csproj[] ---- From d6fec33a122065218330dab778209de8fdc574d3 Mon Sep 17 00:00:00 2001 From: Ruben Vandeginste Date: Mon, 4 May 2026 15:31:13 +0200 Subject: [PATCH 3/7] Changelog for release 1.2.0 --- docs/modules/ROOT/pages/changelog.adoc | 12 ++++++++++-- docs/modules/ROOT/partials/changelog-1.2.0.adoc | 12 ++++++++++++ .../partials/changelog-old-release-section.adoc | 13 +++++++++++++ .../ROOT/partials/changelog-release-section.adoc | 1 + 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 docs/modules/ROOT/partials/changelog-1.2.0.adoc create mode 100644 docs/modules/ROOT/partials/changelog-old-release-section.adoc diff --git a/docs/modules/ROOT/pages/changelog.adoc b/docs/modules/ROOT/pages/changelog.adoc index 2c61fb1..703ab48 100644 --- a/docs/modules/ROOT/pages/changelog.adoc +++ b/docs/modules/ROOT/pages/changelog.adoc @@ -11,18 +11,26 @@ the link to the GitHub tag is only added once we are ready to release. :github: https://github.com/peopleware/net-ppwcode-util-validation/releases/tag/IV%2F :nuget-main: https://www.nuget.org/packages/PPWCode.Util.Validation.IV/ :nuget-efc: https://www.nuget.org/packages/PPWCode.Util.Validation.IV.EntityFrameworkCore/ +:nuget-nhibernate: https://www.nuget.org/packages/PPWCode.Util.Validation.IV.NHibernate/ :ppwcode-docs: https://peopleware.github.io/net-ppwcode-docs/ppwcode-util-validation-iv/ :main: PPWCode.Util.Validation.IV :efc: PPWCode.Util.Validation.IV.EntityFrameworkCore +:nhibernate: PPWCode.Util.Validation.IV.NHibernate -:release: 1.1.0 +:release: 1.2.0 == `{release}` include::partial$changelog-release-section.adoc[] include::partial$changelog-{release}.adoc[] +:release: 1.1.0 +== `{release}` +include::partial$changelog-old-release-section.adoc[] +include::partial$changelog-{release}.adoc[] + + :release: 1.0.0 == `{release}` -include::partial$changelog-release-section.adoc[] +include::partial$changelog-old-release-section.adoc[] include::partial$changelog-{release}.adoc[] diff --git a/docs/modules/ROOT/partials/changelog-1.2.0.adoc b/docs/modules/ROOT/partials/changelog-1.2.0.adoc new file mode 100644 index 0000000..0ada46d --- /dev/null +++ b/docs/modules/ROOT/partials/changelog-1.2.0.adoc @@ -0,0 +1,12 @@ +//// +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! +//// + +=== New +* Support for NHibernate added +** See package `PPWCode.Util.Validation.IV.NHibernate` diff --git a/docs/modules/ROOT/partials/changelog-old-release-section.adoc b/docs/modules/ROOT/partials/changelog-old-release-section.adoc new file mode 100644 index 0000000..440133a --- /dev/null +++ b/docs/modules/ROOT/partials/changelog-old-release-section.adoc @@ -0,0 +1,13 @@ +//// +Note: double empty lines at the end of the file is done on purpose! +//// + +=== Release + +* link:{github}{release}[GitHub] +* NuGet +** link:{nuget-main}{release}[{main}] +** link:{nuget-efc}{release}[{efc}] + + +// do not remove the preceding empty lines! diff --git a/docs/modules/ROOT/partials/changelog-release-section.adoc b/docs/modules/ROOT/partials/changelog-release-section.adoc index 440133a..afbd329 100644 --- a/docs/modules/ROOT/partials/changelog-release-section.adoc +++ b/docs/modules/ROOT/partials/changelog-release-section.adoc @@ -8,6 +8,7 @@ Note: double empty lines at the end of the file is done on purpose! * NuGet ** link:{nuget-main}{release}[{main}] ** link:{nuget-efc}{release}[{efc}] +** link:{nuget-nhibernate}{release}[{nhibernate}] // do not remove the preceding empty lines! From 93224f2f7863043931a963573c5f9cd3e701f497 Mon Sep 17 00:00:00 2001 From: Ruben Vandeginste Date: Mon, 4 May 2026 15:51:35 +0200 Subject: [PATCH 4/7] NHibernate tests: add serilog configuration --- src/IV.NHibernate.Tests/appsettings.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/IV.NHibernate.Tests/appsettings.json b/src/IV.NHibernate.Tests/appsettings.json index 80bdd25..0c684dd 100644 --- a/src/IV.NHibernate.Tests/appsettings.json +++ b/src/IV.NHibernate.Tests/appsettings.json @@ -1,4 +1,21 @@ { + "Serilog": { + "MinimumLevel": { + "Default": "Warning", + "Override": { + "PPWCode.Vernacular.NHibernate.IV": "Information", + "NHibernate.SQL": "Debug" + } + }, + "WriteTo": [ + { + "Name": "NUnitOutput", + "Args": { + "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}" + } + } + ] + }, "appSettings": { "UseProfiler": "false", "SuppressProfilingWhileCreatingSchema": "true", From 5c1f9aa4c6a0ae501e07e41a3502396593eb52d2 Mon Sep 17 00:00:00 2001 From: Ruben Vandeginste Date: Mon, 4 May 2026 15:55:30 +0200 Subject: [PATCH 5/7] github workflows: enable sql server --- .github/workflows/ci.yml | 7 ++----- .github/workflows/publish.yml | 7 ++----- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b12b1a..e22ecf4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,15 +19,12 @@ jobs: - os: ubuntu-latest name-suffix: 'Linux' test-filter: 'Category=SqlServer|Category!=SqlServer' - sqlserver: false - os: macos-latest name-suffix: 'macOS' test-filter: 'Category=SqlServer|Category!=SqlServer' - sqlserver: false - os: windows-2022 name-suffix: 'Windows' test-filter: 'Category=SqlServer|Category!=SqlServer' - sqlserver: false steps: - uses: actions/checkout@v4 @@ -50,7 +47,7 @@ jobs: echo "Generated SA password" - name: Start SQL Server container - if: matrix.os == 'ubuntu-latest' && matrix.sqlserver == true + if: matrix.os == 'ubuntu-latest' run: | docker run -d \ --name sql-server \ @@ -73,7 +70,7 @@ jobs: echo "SQL Server is ready!" - name: Install SQL Server - if: matrix.os == 'windows-2022' && matrix.sqlserver == true + if: matrix.os == 'windows-2022' uses: potatoqualitee/mssqlsuite@v1.11 with: install: sqlengine, sqlclient diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c5e9902..b8e2c6a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -19,15 +19,12 @@ jobs: - os: ubuntu-latest name-suffix: 'Linux' test-filter: 'Category=SqlServer|Category!=SqlServer' - sqlserver: false - os: macos-latest name-suffix: 'macOS' test-filter: 'Category=SqlServer|Category!=SqlServer' - sqlserver: false - os: windows-2022 name-suffix: 'Windows' test-filter: 'Category=SqlServer|Category!=SqlServer' - sqlserver: false steps: - uses: actions/checkout@v4 @@ -50,7 +47,7 @@ jobs: echo "Generated SA password" - name: Start SQL Server container - if: matrix.os == 'ubuntu-latest' && matrix.sqlserver == true + if: matrix.os == 'ubuntu-latest' run: | docker run -d \ --name sql-server \ @@ -73,7 +70,7 @@ jobs: echo "SQL Server is ready!" - name: Install SQL Server - if: matrix.os == 'windows-2022' && matrix.sqlserver == true + if: matrix.os == 'windows-2022' uses: potatoqualitee/mssqlsuite@v1.11 with: install: sqlengine, sqlclient From 1a61ac42be0394ad37f80cf34da89fe04cf93a8d Mon Sep 17 00:00:00 2001 From: Ruben Vandeginste Date: Mon, 4 May 2026 16:04:05 +0200 Subject: [PATCH 6/7] github workflows: disable sql server tests for macOS --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e22ecf4..ad95ec5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: test-filter: 'Category=SqlServer|Category!=SqlServer' - os: macos-latest name-suffix: 'macOS' - test-filter: 'Category=SqlServer|Category!=SqlServer' + test-filter: 'Category!=SqlServer' - os: windows-2022 name-suffix: 'Windows' test-filter: 'Category=SqlServer|Category!=SqlServer' From 4624d1b9d1a764117898dbe151214592499e5b15 Mon Sep 17 00:00:00 2001 From: Ruben Vandeginste Date: Mon, 4 May 2026 16:42:18 +0200 Subject: [PATCH 7/7] github workflows: disable sql server tests for macOS --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b8e2c6a..f3b424d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -21,7 +21,7 @@ jobs: test-filter: 'Category=SqlServer|Category!=SqlServer' - os: macos-latest name-suffix: 'macOS' - test-filter: 'Category=SqlServer|Category!=SqlServer' + test-filter: 'Category!=SqlServer' - os: windows-2022 name-suffix: 'Windows' test-filter: 'Category=SqlServer|Category!=SqlServer'