From 3b0ee07d0f8dac85a07ac2d606c8dc382357a582 Mon Sep 17 00:00:00 2001 From: Alan Brault Date: Fri, 27 Feb 2026 07:09:50 -0500 Subject: [PATCH 1/5] chore: initial cleanup Signed-off-by: Alan Brault --- .config/dotnet-tools.json | 13 - .editorconfig | 115 +- .gitignore | 98 +- AddressValidation.sln | 150 --- AddressValidation.sln.DotSettings | 30 +- AddressValidation.slnx | 44 + Directory.Build.props | 7 +- Directory.Packages.props | 20 +- build.cmd | 7 - build.ps1 | 74 -- build/.editorconfig | 15 - build/AwsS3Tasks.cs | 54 - build/Build.cs | 208 ---- build/Configuration.cs | 21 - build/Directory.Build.props | 8 - build/Directory.Build.targets | 8 - build/_build.csproj | 31 - build/_build.csproj.DotSettings | 324 ------ .../AddressValidation.Demo/packages.lock.json | 1020 ----------------- global.json | 13 +- renovate.json | 15 +- .../packages.lock.json | 353 ------ .../packages.lock.json | 394 ------- .../packages.lock.json | 353 ------ .../packages.lock.json | 353 ------ .../packages.lock.json | 245 ---- .../packages.lock.json | 56 - tests/.editorconfig | 9 - tests/Directory.Build.props | 19 - .../packages.lock.json | 566 --------- .../packages.lock.json | 609 ---------- .../packages.lock.json | 566 --------- .../packages.lock.json | 566 --------- .../packages.lock.json | 850 -------------- .../packages.lock.json | 260 ----- 35 files changed, 247 insertions(+), 7227 deletions(-) delete mode 100644 .config/dotnet-tools.json delete mode 100644 AddressValidation.sln create mode 100644 AddressValidation.slnx delete mode 100755 build.cmd delete mode 100644 build.ps1 delete mode 100644 build/.editorconfig delete mode 100644 build/AwsS3Tasks.cs delete mode 100644 build/Build.cs delete mode 100644 build/Configuration.cs delete mode 100644 build/Directory.Build.props delete mode 100644 build/Directory.Build.targets delete mode 100644 build/_build.csproj delete mode 100644 build/_build.csproj.DotSettings delete mode 100644 demo/src/AddressValidation.Demo/packages.lock.json delete mode 100644 src/Visus.AddressValidation.Integration.FedEx/packages.lock.json delete mode 100644 src/Visus.AddressValidation.Integration.Google/packages.lock.json delete mode 100644 src/Visus.AddressValidation.Integration.PitneyBowes/packages.lock.json delete mode 100644 src/Visus.AddressValidation.Integration.Ups/packages.lock.json delete mode 100644 src/Visus.AddressValidation.SourceGeneration/packages.lock.json delete mode 100644 src/Visus.AddressValidation/packages.lock.json delete mode 100644 tests/.editorconfig delete mode 100644 tests/Directory.Build.props delete mode 100644 tests/Visus.AddressValidation.Integration.FedEx.Tests/packages.lock.json delete mode 100644 tests/Visus.AddressValidation.Integration.Google.Tests/packages.lock.json delete mode 100644 tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/packages.lock.json delete mode 100644 tests/Visus.AddressValidation.Integration.Ups.Tests/packages.lock.json delete mode 100644 tests/Visus.AddressValidation.SourceGeneration.Tests/packages.lock.json delete mode 100644 tests/Visus.AddressValidation.Tests/packages.lock.json diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json deleted file mode 100644 index a857ad3..0000000 --- a/.config/dotnet-tools.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": 1, - "isRoot": true, - "tools": { - "docfx": { - "version": "2.78.4", - "commands": [ - "docfx" - ], - "rollForward": false - } - } -} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig index 543a92b..b9e168b 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,25 +1,34 @@ # Remove the line below if you want to inherit .editorconfig settings from higher directories root = true -[*] -#### Core EditorConfig Options #### +#### Global Settings #### +[*] # Indentation and spacing indent_size = 4 indent_style = space -tab_width = 4 # New line preferences end_of_line = lf insert_final_newline = true -# Razor files -[*.{cs,razor}] -dotnet_diagnostic.CA2007.severity = none +#### JSON Files #### + +[*.json] +indent_size = 2 +tab_width = 2 + +#### MSBuild Files #### + +[*.{csproj,props,targets}] +indent_size = 2 +tab_width = 2 + +#### C# Files #### -# C# files [*.cs] -#### .NET Coding Conventions #### + +# .NET Coding Conventions # this. and Me. preferences dotnet_style_qualification_for_event = false @@ -40,10 +49,13 @@ dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity # Modifier preferences dotnet_style_require_accessibility_modifiers = for_non_interface_members +# Field preferences +dotnet_style_readonly_field = true:suggestion + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:suggestion + # Expression-level preferences -csharp_style_deconstructed_variable_declaration = true:suggestion -csharp_style_inlined_variable_declaration = true:suggestion -csharp_style_throw_expression = true:suggestion dotnet_style_coalesce_expression = true:suggestion dotnet_style_collection_initializer = true:suggestion dotnet_style_explicit_tuple_names = true:suggestion @@ -57,13 +69,7 @@ dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion dotnet_style_prefer_inferred_tuple_names = true:suggestion dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion -# Field preferences -dotnet_style_readonly_field = true:suggestion - -# Parameter preferences -dotnet_code_quality_unused_parameters = all:suggestion - -#### C# Coding Conventions #### +# C# Coding Conventions # var preferences csharp_style_var_elsewhere = false:warning @@ -94,6 +100,9 @@ csharp_preferred_modifier_order = public, private, protected, internal, static, csharp_prefer_braces = true # Expression-level preferences +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_throw_expression = true:suggestion csharp_prefer_simple_default_expression = true:suggestion csharp_style_pattern_local_over_anonymous_function = true:suggestion csharp_style_prefer_index_operator = true:suggestion @@ -104,15 +113,13 @@ csharp_style_unused_value_expression_statement_preference = discard_variable # 'using' directive preferences csharp_using_directive_placement = inside_namespace -# Constructor Preferences +# Constructor preferences csharp_style_prefer_primary_constructors = false -dotnet_diagnostic.IDE0290.severity = none -resharper_convert_to_primary_constructor_highlighting = none -#### C# Formatting Rules #### +# C# Formatting Rules # New line preferences -csharp_new_line_before_open_brace = methods, properties, control_blocks, types +csharp_new_line_before_open_brace = all csharp_new_line_before_catch = true csharp_new_line_before_else = true csharp_new_line_before_finally = true @@ -129,7 +136,7 @@ csharp_indent_labels = one_less_than_current csharp_indent_switch_labels = true # Space preferences -csharp_space_after_cast = true +csharp_space_after_cast = false csharp_space_after_colon_in_inheritance_clause = true csharp_space_after_comma = true csharp_space_after_dot = false @@ -156,13 +163,12 @@ csharp_space_between_square_brackets = false csharp_preserve_single_line_blocks = true csharp_preserve_single_line_statements = true -#### Resharper Formatting Rules #### +# ReSharper Formatting Rules -resharper_csharp_accessor_declaration_braces = next_line -resharper_csharp_accessor_owner_declaration_braces = next_line -resharper_csharp_align_first_arg_by_paren = true +# Alignment +resharper_csharp_align_first_arg_by_paren = false resharper_csharp_align_linq_query = true -resharper_csharp_align_multiline_argument = true +resharper_csharp_align_multiline_argument = false resharper_csharp_align_multiline_array_and_object_initializer = false resharper_csharp_align_multiline_binary_expressions_chain = true resharper_csharp_align_multiline_binary_patterns = true @@ -179,10 +185,20 @@ resharper_csharp_align_multline_type_parameter_list = true resharper_csharp_align_tuple_components = true resharper_csharp_alignment_tab_fill_style = optimal_fill resharper_csharp_allow_far_alignment = true + +# Braces +resharper_csharp_accessor_declaration_braces = next_line +resharper_csharp_accessor_owner_declaration_braces = next_line resharper_csharp_brace_style = next_line resharper_csharp_case_block_braces = next_line +resharper_csharp_initializer_braces = next_line +resharper_csharp_invocable_declaration_braces = next_line +resharper_csharp_other_braces = next_line +resharper_csharp_type_declaration_braces = next_line + +# Indentation resharper_csharp_continuous_indent_multiplier = 1 -resharper_csharp_indent_anonymous_method_block = true +resharper_csharp_indent_anonymous_method_block = false resharper_csharp_indent_braces_inside_statement_conditions = true resharper_csharp_indent_inside_namespace = true resharper_csharp_indent_nested_fixed_stmt = false @@ -195,24 +211,49 @@ resharper_csharp_indent_preprocessor_if = no_indent resharper_csharp_indent_preprocessor_other = usual_indent resharper_csharp_indent_preprocessor_region = no_indent resharper_csharp_indent_type_constraints = true -resharper_csharp_initializer_braces = next_line -resharper_csharp_invocable_declaration_braces = next_line + +# Wrapping and layout resharper_csharp_keep_existing_attribute_arrangement = false resharper_csharp_keep_existing_initializer_arrangement = false resharper_csharp_max_attribute_length_for_same_line = 120 resharper_csharp_max_initializer_elements_on_line = 1 -resharper_csharp_naming_rule.enum_member = AaBb -resharper_csharp_other_braces = next_line resharper_csharp_outdent_binary_ops = true resharper_csharp_outdent_binary_pattern_ops = true resharper_csharp_outdent_dots = true resharper_csharp_place_attribute_on_same_line = false resharper_csharp_place_record_field_attribute_on_same_line = true resharper_csharp_place_simple_initializer_on_single_line = true -resharper_csharp_type_declaration_braces = next_line resharper_csharp_wrap_object_and_collection_initializer_style = chop_always +resharper_csharp_wrap_array_initializer_style = chop_always + +# Naming conventions +resharper_csharp_naming_rule.enum_member = PascalCase +# Diagnostic Severity Overrides dotnet_diagnostic.CA2007.severity = error +dotnet_diagnostic.IDE0290.severity = none +resharper_convert_to_primary_constructor_highlighting = none + +# Meziantou Rules +dotnet_diagnostic.MA0003.severity = none + +#### Razor Files #### + +[*.{razor,razor.cs}] +# Diagnostic severity overrides +dotnet_diagnostic.CA2007.severity = none +dotnet_diagnostic.CA1515.severity = none +dotnet_diagnostic.CA1822.severity = suggestion +dotnet_diagnostic.CA1823.severity = suggestion +dotnet_diagnostic.IDE0044.severity = suggestion +dotnet_diagnostic.IDE0051.severity = none +dotnet_diagnostic.IDE0052.severity = none +dotnet_diagnostic.IDE0060.severity = none +dotnet_diagnostic.S1144.severity = suggestion -# warning suppressions -dotnet_diagnostic.CA2255.severity = none +# Disable CA1707 for test sources only +[tests/**.cs] +dotnet_diagnostic.CA1031.severity = none +dotnet_diagnostic.CA1308.severity = none +dotnet_diagnostic.CA1707.severity = none +dotnet_diagnostic.MA0038.severity = none diff --git a/.gitignore b/.gitignore index 9c0288a..43e2541 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore +## Get latest from `dotnet new gitignore` + +# dotenv files +.env # User-specific files *.rsuser @@ -35,7 +38,7 @@ bld/ # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ +wwwroot/ # Visual Studio 2017 auto generated files Generated\ Files/ @@ -57,11 +60,14 @@ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ -# .NET Core +# .NET project.lock.json project.fragment.lock.json artifacts/ +# Tye +.tye/ + # ASP.NET Scaffolding ScaffoldingReadMe.txt @@ -328,8 +334,8 @@ __pycache__/ *.pyc # Cake - Uncomment if you are using it -tools/** -!tools/packages.config +#tools/** +#!tools/packages.config # Tabs Studio *.tss @@ -384,9 +390,6 @@ FodyWeavers.xsd !.vscode/extensions.json *.code-workspace -# Rider -.idea/* - # Local History for Visual Studio Code .history/ @@ -399,8 +402,83 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml +.idea/ + +## +## Visual studio for Mac +## + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/main/Global/macOS.gitignore +# General .DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/main/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk -# SonarQube -.sonarqube +# Vim temporary swap files +*.swp diff --git a/AddressValidation.sln b/AddressValidation.sln deleted file mode 100644 index 4e0c800..0000000 --- a/AddressValidation.sln +++ /dev/null @@ -1,150 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5EC7A540-5858-4C0A-A0CE-ABCB3D48AFEB}" - ProjectSection(SolutionItems) = preProject - global.json = global.json - nuget.config = nuget.config - Directory.Build.props = Directory.Build.props - Directory.Packages.props = Directory.Packages.props - README.md = README.md - .gitignore = .gitignore - .editorconfig = .editorconfig - renovate.json = renovate.json - Directory.Build.targets = Directory.Build.targets - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation", "src\Visus.AddressValidation\Visus.AddressValidation.csproj", "{64B9D329-F983-49D5-A73F-C5EA8B1F16A9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01. Foundation", "01. Foundation", "{7EF92B20-2457-4E9A-AF09-610675F68F62}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "02. Integrations", "02. Integrations", "{458D4B81-3659-4CDC-82E6-F0AC7DA1383D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Integration.Google", "src\Visus.AddressValidation.Integration.Google\Visus.AddressValidation.Integration.Google.csproj", "{5BECB362-2B3C-454E-BA26-F3287B237223}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "03. Unit Tests", "03. Unit Tests", "{6D41E71C-E6E0-4BE8-934C-6E6E88C3F8C7}" - ProjectSection(SolutionItems) = preProject - tests\Directory.Build.props = tests\Directory.Build.props - tests\.editorconfig = tests\.editorconfig - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Tests", "tests\Visus.AddressValidation.Tests\Visus.AddressValidation.Tests.csproj", "{45F5AE68-6E31-478A-80D3-8A1E3881DDBB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Integration.Google.Tests", "tests\Visus.AddressValidation.Integration.Google.Tests\Visus.AddressValidation.Integration.Google.Tests.csproj", "{7B3EBF81-F228-4F8B-AC17-5C83DAA8406A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Integration.Ups", "src\Visus.AddressValidation.Integration.Ups\Visus.AddressValidation.Integration.Ups.csproj", "{B843071E-F639-4E7C-BA8F-93D9469483D9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Integration.Ups.Tests", "tests\Visus.AddressValidation.Integration.Ups.Tests\Visus.AddressValidation.Integration.Ups.Tests.csproj", "{9A898866-579D-4395-A893-FBD1B359036E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04. Demo", "04. Demo", "{425D5463-85C9-469D-AA3E-33927EE2FF70}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddressValidation.Demo", "demo\src\AddressValidation.Demo\AddressValidation.Demo.csproj", "{20A59A0F-DFD5-4355-BB00-821D382A42FC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Integration.PitneyBowes", "src\Visus.AddressValidation.Integration.PitneyBowes\Visus.AddressValidation.Integration.PitneyBowes.csproj", "{6CB8C731-D125-475E-B798-AC81481960D4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Integration.PitneyBowes.Tests", "tests\Visus.AddressValidation.Integration.PitneyBowes.Tests\Visus.AddressValidation.Integration.PitneyBowes.Tests.csproj", "{03B65269-1328-4B48-8213-21F69557B707}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.SourceGeneration", "src\Visus.AddressValidation.SourceGeneration\Visus.AddressValidation.SourceGeneration.csproj", "{F57B9E9C-7183-44E4-8EB4-2A39C32E7016}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.SourceGeneration.Tests", "tests\Visus.AddressValidation.SourceGeneration.Tests\Visus.AddressValidation.SourceGeneration.Tests.csproj", "{370B8EEE-BE35-430E-A01F-3CF779DA8B40}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{EF31F8F1-4EE0-446B-A017-555AE37362CB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{E49A8B03-9020-4B86-9029-9B0901F864A8}" - ProjectSection(SolutionItems) = preProject - .github\workflows\ci.yml = .github\workflows\ci.yml - .github\workflows\docs.yml = .github\workflows\docs.yml - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00. Build", "00. Build", "{32B364CE-8825-4295-8F73-479C3F13543B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "build\_build.csproj", "{B104A7C9-1E92-4D16-A823-6FB67366B0FA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "05. Documentation", "05. Documentation", "{0F4402B0-2710-4688-A20A-48F255E0A5A0}" - ProjectSection(SolutionItems) = preProject - docs\docfx.json = docs\docfx.json - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Integration.FedEx", "src\Visus.AddressValidation.Integration.FedEx\Visus.AddressValidation.Integration.FedEx.csproj", "{088A30F2-4105-4AD1-8D0E-5B0A92AAE59F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Visus.AddressValidation.Integration.FedEx.Tests", "tests\Visus.AddressValidation.Integration.FedEx.Tests\Visus.AddressValidation.Integration.FedEx.Tests.csproj", "{F2C51F6E-9C90-4BBC-8EC5-0CC52DAC28ED}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B104A7C9-1E92-4D16-A823-6FB67366B0FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B104A7C9-1E92-4D16-A823-6FB67366B0FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {64B9D329-F983-49D5-A73F-C5EA8B1F16A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {64B9D329-F983-49D5-A73F-C5EA8B1F16A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {64B9D329-F983-49D5-A73F-C5EA8B1F16A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {64B9D329-F983-49D5-A73F-C5EA8B1F16A9}.Release|Any CPU.Build.0 = Release|Any CPU - {5BECB362-2B3C-454E-BA26-F3287B237223}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BECB362-2B3C-454E-BA26-F3287B237223}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BECB362-2B3C-454E-BA26-F3287B237223}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BECB362-2B3C-454E-BA26-F3287B237223}.Release|Any CPU.Build.0 = Release|Any CPU - {45F5AE68-6E31-478A-80D3-8A1E3881DDBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {45F5AE68-6E31-478A-80D3-8A1E3881DDBB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {45F5AE68-6E31-478A-80D3-8A1E3881DDBB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {45F5AE68-6E31-478A-80D3-8A1E3881DDBB}.Release|Any CPU.Build.0 = Release|Any CPU - {7B3EBF81-F228-4F8B-AC17-5C83DAA8406A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B3EBF81-F228-4F8B-AC17-5C83DAA8406A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B3EBF81-F228-4F8B-AC17-5C83DAA8406A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B3EBF81-F228-4F8B-AC17-5C83DAA8406A}.Release|Any CPU.Build.0 = Release|Any CPU - {B843071E-F639-4E7C-BA8F-93D9469483D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B843071E-F639-4E7C-BA8F-93D9469483D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B843071E-F639-4E7C-BA8F-93D9469483D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B843071E-F639-4E7C-BA8F-93D9469483D9}.Release|Any CPU.Build.0 = Release|Any CPU - {9A898866-579D-4395-A893-FBD1B359036E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A898866-579D-4395-A893-FBD1B359036E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A898866-579D-4395-A893-FBD1B359036E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A898866-579D-4395-A893-FBD1B359036E}.Release|Any CPU.Build.0 = Release|Any CPU - {20A59A0F-DFD5-4355-BB00-821D382A42FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20A59A0F-DFD5-4355-BB00-821D382A42FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20A59A0F-DFD5-4355-BB00-821D382A42FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20A59A0F-DFD5-4355-BB00-821D382A42FC}.Release|Any CPU.Build.0 = Release|Any CPU - {6CB8C731-D125-475E-B798-AC81481960D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6CB8C731-D125-475E-B798-AC81481960D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6CB8C731-D125-475E-B798-AC81481960D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6CB8C731-D125-475E-B798-AC81481960D4}.Release|Any CPU.Build.0 = Release|Any CPU - {03B65269-1328-4B48-8213-21F69557B707}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03B65269-1328-4B48-8213-21F69557B707}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03B65269-1328-4B48-8213-21F69557B707}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03B65269-1328-4B48-8213-21F69557B707}.Release|Any CPU.Build.0 = Release|Any CPU - {F57B9E9C-7183-44E4-8EB4-2A39C32E7016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F57B9E9C-7183-44E4-8EB4-2A39C32E7016}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F57B9E9C-7183-44E4-8EB4-2A39C32E7016}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F57B9E9C-7183-44E4-8EB4-2A39C32E7016}.Release|Any CPU.Build.0 = Release|Any CPU - {370B8EEE-BE35-430E-A01F-3CF779DA8B40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {370B8EEE-BE35-430E-A01F-3CF779DA8B40}.Debug|Any CPU.Build.0 = Debug|Any CPU - {370B8EEE-BE35-430E-A01F-3CF779DA8B40}.Release|Any CPU.ActiveCfg = Release|Any CPU - {370B8EEE-BE35-430E-A01F-3CF779DA8B40}.Release|Any CPU.Build.0 = Release|Any CPU - {088A30F2-4105-4AD1-8D0E-5B0A92AAE59F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {088A30F2-4105-4AD1-8D0E-5B0A92AAE59F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {088A30F2-4105-4AD1-8D0E-5B0A92AAE59F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {088A30F2-4105-4AD1-8D0E-5B0A92AAE59F}.Release|Any CPU.Build.0 = Release|Any CPU - {F2C51F6E-9C90-4BBC-8EC5-0CC52DAC28ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2C51F6E-9C90-4BBC-8EC5-0CC52DAC28ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2C51F6E-9C90-4BBC-8EC5-0CC52DAC28ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2C51F6E-9C90-4BBC-8EC5-0CC52DAC28ED}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {64B9D329-F983-49D5-A73F-C5EA8B1F16A9} = {7EF92B20-2457-4E9A-AF09-610675F68F62} - {5BECB362-2B3C-454E-BA26-F3287B237223} = {458D4B81-3659-4CDC-82E6-F0AC7DA1383D} - {45F5AE68-6E31-478A-80D3-8A1E3881DDBB} = {6D41E71C-E6E0-4BE8-934C-6E6E88C3F8C7} - {7B3EBF81-F228-4F8B-AC17-5C83DAA8406A} = {6D41E71C-E6E0-4BE8-934C-6E6E88C3F8C7} - {B843071E-F639-4E7C-BA8F-93D9469483D9} = {458D4B81-3659-4CDC-82E6-F0AC7DA1383D} - {9A898866-579D-4395-A893-FBD1B359036E} = {6D41E71C-E6E0-4BE8-934C-6E6E88C3F8C7} - {20A59A0F-DFD5-4355-BB00-821D382A42FC} = {425D5463-85C9-469D-AA3E-33927EE2FF70} - {6CB8C731-D125-475E-B798-AC81481960D4} = {458D4B81-3659-4CDC-82E6-F0AC7DA1383D} - {03B65269-1328-4B48-8213-21F69557B707} = {6D41E71C-E6E0-4BE8-934C-6E6E88C3F8C7} - {F57B9E9C-7183-44E4-8EB4-2A39C32E7016} = {7EF92B20-2457-4E9A-AF09-610675F68F62} - {370B8EEE-BE35-430E-A01F-3CF779DA8B40} = {6D41E71C-E6E0-4BE8-934C-6E6E88C3F8C7} - {EF31F8F1-4EE0-446B-A017-555AE37362CB} = {5EC7A540-5858-4C0A-A0CE-ABCB3D48AFEB} - {E49A8B03-9020-4B86-9029-9B0901F864A8} = {EF31F8F1-4EE0-446B-A017-555AE37362CB} - {B104A7C9-1E92-4D16-A823-6FB67366B0FA} = {32B364CE-8825-4295-8F73-479C3F13543B} - {088A30F2-4105-4AD1-8D0E-5B0A92AAE59F} = {458D4B81-3659-4CDC-82E6-F0AC7DA1383D} - {F2C51F6E-9C90-4BBC-8EC5-0CC52DAC28ED} = {6D41E71C-E6E0-4BE8-934C-6E6E88C3F8C7} - EndGlobalSection -EndGlobal diff --git a/AddressValidation.sln.DotSettings b/AddressValidation.sln.DotSettings index 741c5ed..dd3923f 100644 --- a/AddressValidation.sln.DotSettings +++ b/AddressValidation.sln.DotSettings @@ -1,7 +1,9 @@  - True Built-in: Full Cleanup Built-in: Full Cleanup + True + True + False False <?xml version="1.0" encoding="utf-16"?> <Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> @@ -294,23 +296,13 @@ </Group> </TypePattern> </Patterns> -True -True -True -True -True -True + True + True + True True -True -True - True - True - True - True - True - True - True - True - True - True + True + True + + + True diff --git a/AddressValidation.slnx b/AddressValidation.slnx new file mode 100644 index 0000000..8873990 --- /dev/null +++ b/AddressValidation.slnx @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Directory.Build.props b/Directory.Build.props index 46a3d13..912b7ea 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -2,14 +2,11 @@ Visus Development Team - Copyright (c) 2024 Visus Development Team + Copyright (c) 2024-2026 Visus Development Team enable - false - 12 + 14 en-US enable - true - 0.0.1 diff --git a/Directory.Packages.props b/Directory.Packages.props index 0bd40d4..e19215d 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -7,25 +7,25 @@ - - - + + + - + - + - + - - + + @@ -43,8 +43,8 @@ - + - + \ No newline at end of file diff --git a/build.cmd b/build.cmd deleted file mode 100755 index b08cc59..0000000 --- a/build.cmd +++ /dev/null @@ -1,7 +0,0 @@ -:; set -eo pipefail -:; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) -:; ${SCRIPT_DIR}/build.sh "$@" -:; exit $? - -@ECHO OFF -powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %* diff --git a/build.ps1 b/build.ps1 deleted file mode 100644 index 381a7be..0000000 --- a/build.ps1 +++ /dev/null @@ -1,74 +0,0 @@ -[CmdletBinding()] -Param( - [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)] - [string[]]$BuildArguments -) - -Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)" - -Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 } -$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent - -########################################################################### -# CONFIGURATION -########################################################################### - -$BuildProjectFile = "$PSScriptRoot\build\_build.csproj" -$TempDirectory = "$PSScriptRoot\\.nuke\temp" - -$DotNetGlobalFile = "$PSScriptRoot\\global.json" -$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1" -$DotNetChannel = "STS" - -$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1 -$env:DOTNET_NOLOGO = 1 - -########################################################################### -# EXECUTION -########################################################################### - -function ExecSafe([scriptblock] $cmd) { - & $cmd - if ($LASTEXITCODE) { exit $LASTEXITCODE } -} - -# If dotnet CLI is installed globally and it matches requested version, use for execution -if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and ` - $(dotnet --version) -and $LASTEXITCODE -eq 0) { - $env:DOTNET_EXE = (Get-Command "dotnet").Path -} -else { - # Download install script - $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1" - New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile) - - # If global.json exists, load expected version - if (Test-Path $DotNetGlobalFile) { - $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json) - if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) { - $DotNetVersion = $DotNetGlobal.sdk.version - } - } - - # Install by channel or version - $DotNetDirectory = "$TempDirectory\dotnet-win" - if (!(Test-Path variable:DotNetVersion)) { - ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath } - } else { - ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath } - } - $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe" - $env:PATH = "$DotNetDirectory;$env:PATH" -} - -Write-Output "Microsoft (R) .NET SDK version $(& $env:DOTNET_EXE --version)" - -if (Test-Path env:NUKE_ENTERPRISE_TOKEN) { - & $env:DOTNET_EXE nuget remove source "nuke-enterprise" > $null - & $env:DOTNET_EXE nuget add source "https://f.feedz.io/nuke/enterprise/nuget" --name "nuke-enterprise" --username "PAT" --password $env:NUKE_ENTERPRISE_TOKEN > $null -} - -ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet } -ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments } diff --git a/build/.editorconfig b/build/.editorconfig deleted file mode 100644 index a67d8b1..0000000 --- a/build/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -[*.cs] -dotnet_style_qualification_for_field = false:warning -dotnet_style_qualification_for_property = false:warning -dotnet_style_qualification_for_method = false:warning -dotnet_style_qualification_for_event = false:warning -dotnet_style_require_accessibility_modifiers = never:warning - -csharp_style_expression_bodied_methods = true:silent -csharp_style_expression_bodied_properties = true:warning -csharp_style_expression_bodied_indexers = true:warning -csharp_style_expression_bodied_accessors = true:warning - -resharper_place_record_field_attribute_on_same_line = false -resharper_place_field_attribute_on_same_line = false -resharper_place_property_attribute_on_same_line = false \ No newline at end of file diff --git a/build/AwsS3Tasks.cs b/build/AwsS3Tasks.cs deleted file mode 100644 index 677b8f9..0000000 --- a/build/AwsS3Tasks.cs +++ /dev/null @@ -1,54 +0,0 @@ -// ReSharper disable InconsistentNaming - -using System; -using System.IO; -using System.Threading.Tasks; -using Amazon.S3; -using Amazon.S3.Model; -using Amazon.S3.Transfer; - -internal sealed class AwsS3Tasks(AmazonS3Client client) -{ - private readonly AmazonS3Client _client = client ?? throw new ArgumentNullException(nameof(client)); - - public ValueTask EmptyAsync(string bucketName) - { - ArgumentException.ThrowIfNullOrWhiteSpace(bucketName); - return EmptyInternalAsync(bucketName); - } - - public ValueTask UploadAsync(string directory, string bucketName) - { - ArgumentException.ThrowIfNullOrEmpty(directory); - ArgumentException.ThrowIfNullOrEmpty(bucketName); - - return UploadInternalAsync(directory, bucketName); - } - - private async ValueTask EmptyInternalAsync(string bucketName) - { - ListObjectsResponse items = await _client.ListObjectsAsync(bucketName) - .ConfigureAwait(false); - - do - { - if ( items.S3Objects is null ) - { - break; - } - - foreach ( S3Object obj in items.S3Objects ) - { - await client.DeleteObjectAsync(obj.BucketName, obj.Key).ConfigureAwait(false); - } - } while ( items.IsTruncated ?? false ); - } - - private async ValueTask UploadInternalAsync(string directory, string bucketName) - { - TransferUtility transfer = new(_client); - - await transfer.UploadDirectoryAsync(directory, bucketName, "*.*", SearchOption.AllDirectories) - .ConfigureAwait(false); - } -} diff --git a/build/Build.cs b/build/Build.cs deleted file mode 100644 index e525133..0000000 --- a/build/Build.cs +++ /dev/null @@ -1,208 +0,0 @@ -// ReSharper disable AllUnderscoreLocalParameterName - -using System.IO; -using Amazon.S3; -using Nuke.Common; -using Nuke.Common.Execution; -using Nuke.Common.IO; -using Nuke.Common.ProjectModel; -using Nuke.Common.Tooling; -using Nuke.Common.Tools.Coverlet; -using Nuke.Common.Tools.DotNet; -using Nuke.Common.Tools.GitVersion; -using Nuke.Common.Tools.SonarScanner; -using Serilog; -using Spectre.Console; -using static Nuke.Common.Tools.DotNet.DotNetTasks; -using static Nuke.Common.Tools.SonarScanner.SonarScannerTasks; - -[UnsetVisualStudioEnvironmentVariables] -[DotNetVerbosityMapping] -class Build : NukeBuild -{ - [Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")] - readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release; - - [Required] - [GitVersion(Framework = "net8.0", NoCache = true, NoFetch = true)] - readonly GitVersion GitVersion; - - readonly string MergedCoverletOutputFormat = $"\\\"{CoverletOutputFormat.opencover},{CoverletOutputFormat.json}\\\""; - - [Solution(GenerateProjects = true)] - readonly Solution Solution; - - Target Clean => _ => _ - .Before(Restore) - .Executes(() => - { - DotNetClean(c => c.SetProject(Solution)); - - if ( Directory.Exists(CoverageResultsDirectory) ) - { - Directory.Delete(CoverageResultsDirectory, true); - } - - if ( Directory.Exists(TestResultsDirectory) ) - { - Directory.Delete(TestResultsDirectory, true); - } - - if ( Directory.Exists(DocsArtifactsDirectory) ) - { - Directory.Delete(DocsArtifactsDirectory, true); - } - - if ( Directory.Exists(DemoArtifactsDirectory) ) - { - Directory.Delete(DemoArtifactsDirectory, true); - } - }); - - Target Compile => _ => _ - .DependsOn(Restore) - .Executes(() => - { - DotNetBuild(_ => _ - .SetProjectFile(Solution) - .SetConfiguration(Configuration) - .EnableNoLogo() - .EnableNoRestore()); - }); - - Target CompileDocs => _ => _ - .DependsOn(Compile) - .Executes(() => - { - AbsolutePath docFxConfig = DocsDirectory / "docfx.json"; - DotNet($"docfx {docFxConfig} -o {DocsArtifactsDirectory}"); - }); - - AbsolutePath CoverageResultsDirectory => TemporaryDirectory / "CoverageResults"; - - AbsolutePath DemoArtifactsDirectory => TemporaryDirectory / "AddressValidation.Demo"; - - AbsolutePath DemoProjectDirectory => RootDirectory / "demo" / "src" / "AddressValidation.Demo"; - - Target DeployDocs => _ => _ - .DependsOn(CompileDocs) - .Executes(async () => - { - AwsS3Tasks awsS3Tasks = new(new AmazonS3Client()); - string bucketName = EnvironmentInfo.GetVariable("AWS_S3_BUCKET_NAME"); - - await AnsiConsole.Status() - .StartAsync("Starting...", - async ctx => - { - ctx.Status("Emptying bucket..."); - await awsS3Tasks.EmptyAsync(bucketName) - .ConfigureAwait(false); - - ctx.Status("Uploading documentation..."); - await awsS3Tasks.UploadAsync(DocsArtifactsDirectory, - bucketName) - .ConfigureAwait(false); - }) - .ConfigureAwait(false); - }); - - AbsolutePath DocsArtifactsDirectory => TemporaryDirectory / "docs"; - - AbsolutePath DocsDirectory => RootDirectory / "docs"; - - Target PublishDemo => _ => _ - .DependsOn(Clean) - .Executes(() => - { - DotNetPublish(_ => _ - .SetProject(DemoProjectDirectory / "AddressValidation.Demo.csproj") - .SetConfiguration(Configuration) - .SetOutput(DemoArtifactsDirectory) - .SetSelfContained(false) - .EnableNoLogo() - ); - }); - - Target Restore => _ => _ - .DependsOn(Clean) - .Executes(() => - { - DotNetToolRestore(); - DotNetRestore(_ => _ - .SetProjectFile(Solution) - .EnableNoCache() - .SetConfigFile(RootDirectory / "nuget.config")); - }); - - string SonarOrganization => EnvironmentInfo.GetVariable("SONAR_ORGANIZATION"); - - string SonarProjectKey => EnvironmentInfo.GetVariable("SONAR_PROJECT_KEY"); - - Target SonarScanBegin => _ => _ - .After(Restore) - .OnlyWhenDynamic(() => IsServerBuild) - .Executes(() => - { - AbsolutePath openCoverReportPath = CoverageResultsDirectory / "coverage.opencover.xml"; - AbsolutePath vsTestReportPath = TestResultsDirectory / "*.trx"; - - SonarScannerBegin(_ => _ - .SetOrganization(SonarOrganization) - .SetOpenCoverPaths(openCoverReportPath) - .SetVSTestReports(vsTestReportPath) - .SetProjectKey(SonarProjectKey) - .SetToken(SonarToken)); - }); - - Target SonarScanEnd => _ => _ - .After(Test) - .OnlyWhenDynamic(() => IsServerBuild) - .Executes(() => - { - SonarScannerEnd(_ => _.SetToken(SonarToken)); - }); - - string SonarToken => EnvironmentInfo.GetVariable("SONAR_TOKEN"); - - Target Test => _ => _ - .DependsOn(Restore, SonarScanBegin) - .Executes(() => - { - string[] arguments = - [ - $"-p:MergeWith={CoverageResultsDirectory}/coverage.json", - "-m:1" - ]; - - DotNetTest(_ => _ - .EnableCollectCoverage() - .EnableNoRestore() - .SetConfiguration(Configuration) - .SetCoverletOutput($"{CoverageResultsDirectory}/") - .SetCoverletOutputFormat(MergedCoverletOutputFormat) - .SetLoggers("trx") - .SetProcessAdditionalArguments(arguments) - .SetProjectFile(Solution) - .SetResultsDirectory(TestResultsDirectory)); - }) - .Triggers(SonarScanEnd); - - AbsolutePath TestResultsDirectory => TemporaryDirectory / "TestResults"; - - public static int Main() => Execute(e => e.Compile); - - protected override void OnBuildInitialized() - { - base.OnBuildInitialized(); - - if ( IsServerBuild ) - { - Log.Logger = new LoggerConfiguration() - .Enrich.FromLogContext() - .MinimumLevel.Information() - .WriteTo.Logger(Log.Logger) - .CreateLogger(); - } - } -} diff --git a/build/Configuration.cs b/build/Configuration.cs deleted file mode 100644 index 8d57b51..0000000 --- a/build/Configuration.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.ComponentModel; -using Nuke.Common.Tooling; - -[TypeConverter(typeof(TypeConverter))] -public class Configuration : Enumeration -{ - public static Configuration Debug = new() - { - Value = nameof(Debug) - }; - - public static Configuration Release = new() - { - Value = nameof(Release) - }; - - public static implicit operator string(Configuration configuration) - { - return configuration.Value; - } -} diff --git a/build/Directory.Build.props b/build/Directory.Build.props deleted file mode 100644 index cda8c36..0000000 --- a/build/Directory.Build.props +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/build/Directory.Build.targets b/build/Directory.Build.targets deleted file mode 100644 index fcaf591..0000000 --- a/build/Directory.Build.targets +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/build/_build.csproj b/build/_build.csproj deleted file mode 100644 index 42ef43d..0000000 --- a/build/_build.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - Exe - net8.0 - - CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006 - .. - .. - 1 - false - - - - - - - - - - - - - - - - - - - - diff --git a/build/_build.csproj.DotSettings b/build/_build.csproj.DotSettings deleted file mode 100644 index e174ed0..0000000 --- a/build/_build.csproj.DotSettings +++ /dev/null @@ -1,324 +0,0 @@ - - DO_NOT_SHOW - DO_NOT_SHOW - DO_NOT_SHOW - DO_NOT_SHOW - DO_NOT_SHOW - Implicit - Implicit - ExpressionBody - 0 - NEXT_LINE - True - False - 120 - IF_OWNER_IS_SINGLE_LINE - WRAP_IF_LONG - False - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy><Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /></Policy> - <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /></Policy> - True - True - True - True - True - True - True - True - True - True - True - <?xml version="1.0" encoding="utf-16"?> -<Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> - <TypePattern DisplayName="Non-reorderable types"> - <TypePattern.Match> - <Or> - <And> - <Kind Is="Interface" /> - <Or> - <HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /> - <HasAttribute Name="System.Runtime.InteropServices.ComImport" /> - </Or> - </And> - <Kind Is="Struct" /> - <HasAttribute Name="JetBrains.Annotations.NoReorderAttribute" /> - <HasAttribute Name="JetBrains.Annotations.NoReorder" /> - </Or> - </TypePattern.Match> - </TypePattern> - <TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All"> - <TypePattern.Match> - <And> - <Kind Is="Class" /> - <HasMember> - <And> - <Kind Is="Method" /> - <HasAttribute Name="Xunit.FactAttribute" Inherited="True" /> - </And> - </HasMember> - </And> - </TypePattern.Match> - <Entry DisplayName="Setup/Teardown Methods"> - <Entry.Match> - <Or> - <Kind Is="Constructor" /> - <And> - <Kind Is="Method" /> - <ImplementsInterface Name="System.IDisposable" /> - </And> - </Or> - </Entry.Match> - <Entry.SortBy> - <Kind Order="Constructor" /> - </Entry.SortBy> - </Entry> - <Entry DisplayName="All other members" /> - <Entry DisplayName="Test Methods" Priority="100"> - <Entry.Match> - <And> - <Kind Is="Method" /> - <HasAttribute Name="Xunit.FactAttribute" /> - </And> - </Entry.Match> - <Entry.SortBy> - <Name /> - </Entry.SortBy> - </Entry> - </TypePattern> - <TypePattern DisplayName="NUnit Test Fixtures" RemoveRegions="All"> - <TypePattern.Match> - <And> - <Kind Is="Class" /> - <HasAttribute Name="NUnit.Framework.TestFixtureAttribute" Inherited="True" /> - </And> - </TypePattern.Match> - <Entry DisplayName="Setup/Teardown Methods"> - <Entry.Match> - <And> - <Kind Is="Method" /> - <Or> - <HasAttribute Name="NUnit.Framework.SetUpAttribute" Inherited="True" /> - <HasAttribute Name="NUnit.Framework.TearDownAttribute" Inherited="True" /> - <HasAttribute Name="NUnit.Framework.FixtureSetUpAttribute" Inherited="True" /> - <HasAttribute Name="NUnit.Framework.FixtureTearDownAttribute" Inherited="True" /> - </Or> - </And> - </Entry.Match> - </Entry> - <Entry DisplayName="All other members" /> - <Entry DisplayName="Test Methods" Priority="100"> - <Entry.Match> - <And> - <Kind Is="Method" /> - <HasAttribute Name="NUnit.Framework.TestAttribute" /> - </And> - </Entry.Match> - <Entry.SortBy> - <Name /> - </Entry.SortBy> - </Entry> - </TypePattern> - <TypePattern DisplayName="Default Pattern" RemoveRegions="All" Priority="150"> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Constant or Field Constant"> - <Entry.Match> - <Or> - <Kind Is="Constant" /> - <And> - <Static /> - <Kind Is="Field" /> - </And> - </Or> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Readonly /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Field"> - <Entry.Match> - <Kind Is="Field" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Readonly /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Constructor"> - <Entry.Match> - <Kind Is="Constructor" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Destructor"> - <Entry.Match> - <Kind Is="Destructor" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Delegate"> - <Entry.Match> - <Kind Is="Delegate" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Event"> - <Entry.Match> - <Kind Is="Event" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Enum"> - <Entry.Match> - <Kind Is="Enum" /> - </Entry.Match> - <Entry.SortBy> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Interface"> - <Entry.Match> - <Kind Is="Interface" /> - </Entry.Match> - <Entry.SortBy> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Property"> - <Entry.Match> - <Kind Is="Property" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Readonly /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Indexer"> - <Entry.Match> - <Kind Is="Indexer" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Method"> - <Entry.Match> - <Kind Is="Method" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Struct"> - <Entry.Match> - <Kind Is="Struct" /> - </Entry.Match> - <Entry.SortBy> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - <Group DisplayName="Group by Access"> - <Group.GroupBy> - <Access /> - </Group.GroupBy> - <Entry DisplayName="Class"> - <Entry.Match> - <Kind Is="Class" /> - </Entry.Match> - <Entry.SortBy> - <Static /> - <Sealed /> - <Name /> - </Entry.SortBy> - </Entry> - <Entry DisplayName="Record"> - <Entry.Match> - <Kind Is="Record" /> - </Entry.Match> - <Entry.SortBy> - <Readonly /> - <Name /> - </Entry.SortBy> - </Entry> - </Group> - </TypePattern> -</Patterns> - diff --git a/demo/src/AddressValidation.Demo/packages.lock.json b/demo/src/AddressValidation.Demo/packages.lock.json deleted file mode 100644 index 01aa426..0000000 --- a/demo/src/AddressValidation.Demo/packages.lock.json +++ /dev/null @@ -1,1020 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "Microsoft.ApplicationInsights.AspNetCore": { - "type": "Direct", - "requested": "[2.23.0, )", - "resolved": "2.23.0", - "contentHash": "we/RsIn0Mwf/4ZNGXZixJ0lVD3pqjx2yVeKfqJybgYY/Lib8nnf+8YGJp+ULN3kOk39I0pI/7ZnF9LFy6hS3lw==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.23.0", - "Microsoft.ApplicationInsights.DependencyCollector": "2.23.0", - "Microsoft.ApplicationInsights.EventCounterCollector": "2.23.0", - "Microsoft.ApplicationInsights.PerfCounterCollector": "2.23.0", - "Microsoft.ApplicationInsights.WindowsServer": "2.23.0", - "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.23.0", - "Microsoft.AspNetCore.Hosting": "2.1.1", - "Microsoft.AspNetCore.Http": "2.1.22", - "Microsoft.Extensions.Configuration.Json": "3.1.0", - "Microsoft.Extensions.Logging.ApplicationInsights": "2.23.0", - "System.Text.Encodings.Web": "4.7.2" - } - }, - "Microsoft.EntityFrameworkCore": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "lqqV6JEmVv8s0Y/25RnKtYZ6qL+Vz14wEsrBV1ubVUyzDGrOp+10XJ54HNuRLUzdvzVPR2uQ5li/CPrBj0kQHg==", - "dependencies": { - "Microsoft.EntityFrameworkCore.Abstractions": "9.0.11", - "Microsoft.EntityFrameworkCore.Analyzers": "9.0.11", - "Microsoft.Extensions.Caching.Memory": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11" - } - }, - "Microsoft.EntityFrameworkCore.Sqlite": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "mEmJMkMGpIB1J5gBTkbs4ximer2G+G/I8mO2unMjtimFo1XvV7+vTqUJ9ReEMMI/BGUFtIGifFUSy7QsqKUnRA==", - "dependencies": { - "Microsoft.EntityFrameworkCore.Sqlite.Core": "9.0.11", - "Microsoft.Extensions.Caching.Memory": "9.0.11", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyModel": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "SQLitePCLRaw.bundle_e_sqlite3": "2.1.10", - "SQLitePCLRaw.core": "2.1.10", - "System.Text.Json": "9.0.11" - } - }, - "Radzen.Blazor": { - "type": "Direct", - "requested": "[8.3.8, )", - "resolved": "8.3.8", - "contentHash": "gk9YaAjvOPk7OEEzNLQFylRhaj0syQjRSDQMDE47grv7Fub4q8CV88iAqMIJAm3K6oNrYNjSgSUmBasQvvt9WA==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.0", - "Microsoft.AspNetCore.Components.Web": "8.0.0" - } - }, - "Serilog": { - "type": "Direct", - "requested": "[4.3.0, )", - "resolved": "4.3.0", - "contentHash": "+cDryFR0GRhsGOnZSKwaDzRRl4MupvJ42FhCE4zhQRVanX0Jpg6WuCBk59OVhVDPmab1bB+nRykAnykYELA9qQ==" - }, - "Serilog.AspNetCore": { - "type": "Direct", - "requested": "[9.0.0, )", - "resolved": "9.0.0", - "contentHash": "JslDajPlBsn3Pww1554flJFTqROvK9zz9jONNQgn0D8Lx2Trw8L0A8/n6zEQK1DAZWXrJwiVLw8cnTR3YFuYsg==", - "dependencies": { - "Serilog": "4.2.0", - "Serilog.Extensions.Hosting": "9.0.0", - "Serilog.Formatting.Compact": "3.0.0", - "Serilog.Settings.Configuration": "9.0.0", - "Serilog.Sinks.Console": "6.0.0", - "Serilog.Sinks.Debug": "3.0.0", - "Serilog.Sinks.File": "6.0.0" - } - }, - "Serilog.Enrichers.Environment": { - "type": "Direct", - "requested": "[3.0.1, )", - "resolved": "3.0.1", - "contentHash": "9BqCE4C9FF+/rJb/CsQwe7oVf44xqkOvMwX//CUxvUR25lFL4tSS6iuxE5eW07quby1BAyAEP+vM6TWsnT3iqw==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "Serilog.Enrichers.Thread": { - "type": "Direct", - "requested": "[4.0.0, )", - "resolved": "4.0.0", - "contentHash": "C7BK25a1rhUyr+Tp+1BYcVlBJq7M2VCHlIgnwoIUVJcicM9jYcvQK18+OeHiXw7uLPSjqWxJIp1EfaZ/RGmEwA==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "Serilog.Sinks.ApplicationInsights": { - "type": "Direct", - "requested": "[4.1.0, )", - "resolved": "4.1.0", - "contentHash": "IC7su1J9FFkceWESs1A+AfM/NnBEKRpLpNYzEl+SYPe+RQWgs9PhPSgrIzsj3Un8oGgC/F9OrxibNNZwe+RDTg==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.23.0", - "Serilog": "4.2.0" - } - }, - "Serilog.Sinks.Console": { - "type": "Direct", - "requested": "[6.1.1, )", - "resolved": "6.1.1", - "contentHash": "8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "Microsoft.ApplicationInsights": { - "type": "Transitive", - "resolved": "2.23.0", - "contentHash": "nWArUZTdU7iqZLycLKWe0TDms48KKGE6pONH2terYNa8REXiqixrMOkf1sk5DHGMaUTqONU2YkS4SAXBhLStgw==", - "dependencies": { - "System.Diagnostics.DiagnosticSource": "5.0.0" - } - }, - "Microsoft.ApplicationInsights.DependencyCollector": { - "type": "Transitive", - "resolved": "2.23.0", - "contentHash": "9YRdl9SNbTxd4AafJckyoJLr5gJdnvqFivjo+PY0lQTPEncPB+z3ZABG4iDfxN9HI1aLqyRINr1/7de9Wg8ZuQ==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.23.0", - "System.Diagnostics.DiagnosticSource": "5.0.0" - } - }, - "Microsoft.ApplicationInsights.EventCounterCollector": { - "type": "Transitive", - "resolved": "2.23.0", - "contentHash": "gGt0JPw2dcSeIAIefyORJBdeMz8KgAFIktu8HV/NwkiGmLyw+YtifLm6B5gvGxO15AeMsGPbmvWEIvLfq88XPw==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.23.0" - } - }, - "Microsoft.ApplicationInsights.PerfCounterCollector": { - "type": "Transitive", - "resolved": "2.23.0", - "contentHash": "q9ApjZfBS9O8m3aQM2oVjsGBmlE8BCFywT7UR+8aqdNuz7HpoIxw4jHy0XOBergiFX/olrJF4OyPkGxc3H5JHg==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.23.0", - "Microsoft.Extensions.Caching.Memory": "1.0.0", - "System.Diagnostics.PerformanceCounter": "6.0.0" - } - }, - "Microsoft.ApplicationInsights.WindowsServer": { - "type": "Transitive", - "resolved": "2.23.0", - "contentHash": "2B8CGfnB/tribkQAqRBhMvJYJK5TkEPMG/BB0QrlxdwVGEufayNLMveXjkQCqld9arXd6wKR1ve2XmkA0+xXKQ==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.23.0", - "Microsoft.ApplicationInsights.DependencyCollector": "2.23.0", - "Microsoft.ApplicationInsights.PerfCounterCollector": "2.23.0", - "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.23.0", - "System.Diagnostics.DiagnosticSource": "5.0.0" - } - }, - "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": { - "type": "Transitive", - "resolved": "2.23.0", - "contentHash": "798Dudr4tkujslk1w+XcXOcCErmVsk+nhp+QCHLa3lcgi25vkAxBmzPUeQlRJVCNL/1f4x/YF+vQZ8RSuTXWCw==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.23.0", - "System.IO.FileSystem.AccessControl": "4.7.0" - } - }, - "Microsoft.AspNetCore.Authorization": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "OGIGJMnlWvQgcweHcv1Mq/P24Zx/brUHeEdD05NzqkSXmQSnFomTvVyCuBtCXT4JPfv2m70y1RSocmd9bIbJRg==", - "dependencies": { - "Microsoft.AspNetCore.Metadata": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0" - } - }, - "Microsoft.AspNetCore.Components": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "kqspqWo3lT+rrSd39kvrV7SZYl0znYZQbQ8SJaHjDA8ffMPV6BkfVe0i6LvxRPwq/agwSWdIDq2j4x+78Frypg==", - "dependencies": { - "Microsoft.AspNetCore.Authorization": "8.0.0", - "Microsoft.AspNetCore.Components.Analyzers": "8.0.0" - } - }, - "Microsoft.AspNetCore.Components.Analyzers": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "lJMa9kQDw3vkqcMMbuicIpyax7QH6imQFbLRzVqJzrGs5LN954IPaJVkDzRCEXFVAN24Cml6g4mEF3b0D7Oa+Q==" - }, - "Microsoft.AspNetCore.Components.Forms": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "iiYB/7Sl/vTURO4EiTUCmfIXujlJOl+Gh7nknCFhvFQ+kKMFFXYcrszYwLN9aQSolpswc/A9a78KL59/UIezig==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.0" - } - }, - "Microsoft.AspNetCore.Components.Web": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "aokUKvFoNqxR6bf0+iKrDfQ79OLHWYn5UGYp5MU65/il1vuRK7MAF18oGj7QgiZJUu3cMAZjCFkHbsWLhQxCsA==", - "dependencies": { - "Microsoft.AspNetCore.Components": "8.0.0", - "Microsoft.AspNetCore.Components.Forms": "8.0.0", - "Microsoft.Extensions.DependencyInjection": "8.0.0", - "Microsoft.Extensions.Primitives": "8.0.0", - "Microsoft.JSInterop": "8.0.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.AspNetCore.Hosting": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "MqYc0DUxrhAPnb5b4HFspxsoJT+gJlLsliSxIgovf4BsbmpaXQId0/pDiVzLuEbmks2w1/lRfY8w0lQOuK1jQQ==", - "dependencies": { - "Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1", - "Microsoft.AspNetCore.Http": "2.1.1", - "Microsoft.AspNetCore.Http.Extensions": "2.1.1", - "Microsoft.Extensions.Configuration": "2.1.1", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "2.1.1", - "Microsoft.Extensions.Configuration.FileExtensions": "2.1.1", - "Microsoft.Extensions.DependencyInjection": "2.1.1", - "Microsoft.Extensions.FileProviders.Physical": "2.1.1", - "Microsoft.Extensions.Hosting.Abstractions": "2.1.1", - "Microsoft.Extensions.Logging": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1", - "System.Diagnostics.DiagnosticSource": "4.5.0", - "System.Reflection.Metadata": "1.6.0" - } - }, - "Microsoft.AspNetCore.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "76cKcp2pWhvdV2TXTqMg/DyW7N6cDzTEhtL8vVWFShQN+Ylwv3eO/vUQr2BS3Hz4IZHEpL+FOo2T+MtymHDqDQ==", - "dependencies": { - "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.1.1", - "Microsoft.AspNetCore.Http.Abstractions": "2.1.1", - "Microsoft.Extensions.Hosting.Abstractions": "2.1.1" - } - }, - "Microsoft.AspNetCore.Hosting.Server.Abstractions": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "+vD7HJYzAXNq17t+NgRkpS38cxuAyOBu8ixruOiA3nWsybozolUdALWiZ5QFtGRzajSLPFA2YsbO3NPcqoUwcw==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.1.1", - "Microsoft.Extensions.Configuration.Abstractions": "2.1.1" - } - }, - "Microsoft.AspNetCore.Http": { - "type": "Transitive", - "resolved": "2.1.22", - "contentHash": "+Blk++1JWqghbl8+3azQmKhiNZA5wAepL9dY2I6KVmu2Ri07MAcvAVC888qUvO7yd7xgRgZOMfihezKg14O/2A==", - "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "2.1.1", - "Microsoft.AspNetCore.WebUtilities": "2.1.1", - "Microsoft.Extensions.ObjectPool": "2.1.1", - "Microsoft.Extensions.Options": "2.1.1", - "Microsoft.Net.Http.Headers": "2.1.1" - } - }, - "Microsoft.AspNetCore.Http.Abstractions": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "kQUEVOU4loc8CPSb2WoHFTESqwIa8Ik7ysCBfTwzHAd0moWovc9JQLmhDIHlYLjHbyexqZAlkq/FPRUZqokebw==", - "dependencies": { - "Microsoft.AspNetCore.Http.Features": "2.1.1", - "System.Text.Encodings.Web": "4.5.0" - } - }, - "Microsoft.AspNetCore.Http.Extensions": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "ncAgV+cqsWSqjLXFUTyObGh4Tr7ShYYs3uW8Q/YpRwZn7eLV7dux5Z6GLY+rsdzmIHiia3Q2NWbLULQi7aziHw==", - "dependencies": { - "Microsoft.AspNetCore.Http.Abstractions": "2.1.1", - "Microsoft.Extensions.FileProviders.Abstractions": "2.1.1", - "Microsoft.Net.Http.Headers": "2.1.1", - "System.Buffers": "4.5.0" - } - }, - "Microsoft.AspNetCore.Http.Features": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "VklZ7hWgSvHBcDtwYYkdMdI/adlf7ebxTZ9kdzAhX+gUs5jSHE9mZlTamdgf9miSsxc1QjNazHXTDJdVPZKKTw==", - "dependencies": { - "Microsoft.Extensions.Primitives": "2.1.1" - } - }, - "Microsoft.AspNetCore.Metadata": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "OmuSztiZMitRTYlbMNDkBk3BinSsVcOApSNBAsrw+KYNJh6ALarPhWLlKdtvMgrKzpyCY06xtLAjTmQLURHSlQ==" - }, - "Microsoft.AspNetCore.WebUtilities": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "PGKIZt4+412Z/XPoSjvYu/QIbTxcAQuEFNoA1Pw8a9mgmO0ZhNBmfaNyhgXFf7Rq62kP0tT/2WXpxdcQhkFUPA==", - "dependencies": { - "Microsoft.Net.Http.Headers": "2.1.1", - "System.Text.Encodings.Web": "4.5.0" - } - }, - "Microsoft.Data.Sqlite.Core": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "l0IFYa6sxJdlDDfMaw/fMNIoXyWnBx6w5fu7BsNaqU8sXLuotFzUjsutXosu/IPUyBOpO2GG3hLuPMLz/CwWTQ==", - "dependencies": { - "SQLitePCLRaw.core": "2.1.10" - } - }, - "Microsoft.EntityFrameworkCore.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "MHcdHm7vF71MfqYC68Jx9YfDAjxcuClGBZJk5zcJDRhVO4HgX+QFsOqcAisKWb20aBeF0IN1YkSktnEUf/tmLQ==" - }, - "Microsoft.EntityFrameworkCore.Analyzers": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "ccEk88YkXXWV+s5ZS+27UoY5YUVzgx8mq7kl+e05+AgJPGLhtmpQL26LxqBV1StJZEl2KaL8BxzABvXTXBAkoQ==" - }, - "Microsoft.EntityFrameworkCore.Relational": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "b6A19xFuU2F92C7N70+HSjRcxwDHTYTdZ/1PyLpHmzXt35G6ugCVKTPS+YJVK1u5ArrDFGQNu+EI+UrSRgUwGA==", - "dependencies": { - "Microsoft.EntityFrameworkCore": "9.0.11", - "Microsoft.Extensions.Caching.Memory": "9.0.11", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11" - } - }, - "Microsoft.EntityFrameworkCore.Sqlite.Core": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "NNfHGXUZ+Ie3Wrzja9ar3hU3octv/fi4ELS6poG2Ncp4p1Kj2rgIhXRMK8zL2BjcNAnGQojhJkBKjEOmhJaIxA==", - "dependencies": { - "Microsoft.Data.Sqlite.Core": "9.0.11", - "Microsoft.EntityFrameworkCore.Relational": "9.0.11", - "Microsoft.Extensions.Caching.Memory": "9.0.11", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyModel": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "SQLitePCLRaw.core": "2.1.10", - "System.Text.Json": "9.0.11" - } - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.EnvironmentVariables": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "6xMxFIfKL+7J/jwlk8zV8I61sF3+DRG19iKQxnSfYQU+iMMjGbcWNCHFF/3MHf3o4sTZPZ8D6Io+GwKFc3TIZA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "2.1.1" - } - }, - "Microsoft.Extensions.Configuration.FileExtensions": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "OjRJIkVxUFiVkr9a39AqVThft9QHoef4But5pDCydJOXJ4D/SkmzuW1tm6J2IXynxj6qfeAz9QTnzQAvOcGvzg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "3.1.0", - "Microsoft.Extensions.FileProviders.Physical": "3.1.0" - } - }, - "Microsoft.Extensions.Configuration.Json": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "gBpBE1GoaCf1PKYC7u0Bd4mVZ/eR2bnOvn7u8GBXEy3JGar6sC3UVpVfTB9w+biLPtzcukZynBG9uchSBbLTNQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "3.1.0", - "Microsoft.Extensions.Configuration.FileExtensions": "3.1.0" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.DependencyModel": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "DaBLlKcD5AYFLEeX7M07Q0vWOEBd86KYXOb+5ZRdQ1jYtN39cJd6fftxdNbRazEYQc9QqsAZiqKb9ub0gA+q+Q==", - "dependencies": { - "System.Text.Encodings.Web": "9.0.11", - "System.Text.Json": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "uK439QzYR0q2emLVtYzwyK3x+T5bTY4yWsd/k/ZUS9LR6Sflp8MIdhGXW8kQCd86dQD4tLqvcbLkku8qHY263Q==", - "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.0" - } - }, - "Microsoft.Extensions.FileProviders.Physical": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "KsvgrYp2fhNXoD9gqSu8jPK9Sbvaa7SqNtsLqHugJkCwFmgRvdz76z6Jz2tlFlC7wyMTZxwwtRF8WAorRQWTEA==", - "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "3.1.0", - "Microsoft.Extensions.FileSystemGlobbing": "3.1.0" - } - }, - "Microsoft.Extensions.FileSystemGlobbing": { - "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "tK5HZOmVv0kUYkonMjuSsxR0CBk+Rd/69QU3eOMv9FvODGZ2d0SR+7R+n8XIgBcCCoCHJBSsI4GPRaoN3Le4rA==" - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "yUKJgu81ExjvqbNWqZKshBbLntZMbMVz/P7Way2SBx7bMqA08Mfdc9O7hWDKAiSp+zPUGT6LKcSCQIPeDK+CCw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.0", - "Microsoft.Extensions.Logging.Abstractions": "9.0.0" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.ApplicationInsights": { - "type": "Transitive", - "resolved": "2.23.0", - "contentHash": "JLEabPz445i1yRB0hKZVzJJE35QatRIzWlrMOiBQXr9kBJod0jkpkrBf94ln6kXu+jlEGohnXtuXacPPhybJDw==", - "dependencies": { - "Microsoft.ApplicationInsights": "2.23.0", - "Microsoft.Extensions.Logging": "2.1.1" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.IdentityModel.Abstractions": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "e/DApa1GfxUqHSBHcpiQg8yaghKAvFVBQFcWh25jNoRobDZbduTUACY8bZ54eeGWXvimGmEDdF0zkS5Dq16XPQ==" - }, - "Microsoft.IdentityModel.JsonWebTokens": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "3513f5VzvOZy3ELd42wGnh1Q3e83tlGAuXFSNbENpgWYoAhLLzgFtd5PiaOPGAU0gqKhYGVzKavghLUGfX3HQg==", - "dependencies": { - "Microsoft.IdentityModel.Tokens": "8.15.0" - } - }, - "Microsoft.IdentityModel.Logging": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "1gJLjhy0LV2RQMJ9NGzi5Tnb2l+c37o8D8Lrk2mrvmb6OQHZ7XJstd/XxvncXgBpad4x9CGXdipbZzJJCXKyAg==", - "dependencies": { - "Microsoft.IdentityModel.Abstractions": "8.15.0" - } - }, - "Microsoft.JSInterop": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "qQqASbHxWIddssdEBKUQ/49j21SEstiho6VAepPQa9eISLCBCE6wq0m3YaB6cpdF5U+AWX5F3FvDfmssql3xtw==" - }, - "Microsoft.Net.Http.Headers": { - "type": "Transitive", - "resolved": "2.1.1", - "contentHash": "lPNIphl8b2EuhOE9dMH6EZDmu7pS882O+HMi5BJNsigxHaWlBrYxZHFZgE18cyaPp6SSZcTkKkuzfjV/RRQKlA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "2.1.1", - "System.Buffers": "4.5.0" - } - }, - "Microsoft.Win32.SystemEvents": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "Serilog.Extensions.Hosting": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "u2TRxuxbjvTAldQn7uaAwePkWxTHIqlgjelekBtilAGL5sYyF3+65NWctN4UrwwGLsDC7c3Vz3HnOlu+PcoxXg==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "9.0.0", - "Microsoft.Extensions.Logging.Abstractions": "9.0.0", - "Serilog": "4.2.0", - "Serilog.Extensions.Logging": "9.0.0" - } - }, - "Serilog.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.0", - "contentHash": "NwSSYqPJeKNzl5AuXVHpGbr6PkZJFlNa14CdIebVjK3k/76kYj/mz5kiTRNVSsSaxM8kAIa1kpy/qyT9E4npRQ==", - "dependencies": { - "Microsoft.Extensions.Logging": "9.0.0", - "Serilog": "4.2.0" - } - }, - "Serilog.Formatting.Compact": { - "type": "Transitive", - "resolved": "3.0.0", - "contentHash": "wQsv14w9cqlfB5FX2MZpNsTawckN4a8dryuNGbebB/3Nh1pXnROHZov3swtu3Nj5oNG7Ba+xdu7Et/ulAUPanQ==", - "dependencies": { - "Serilog": "4.0.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.Debug": { - "type": "Transitive", - "resolved": "3.0.0", - "contentHash": "4BzXcdrgRX7wde9PmHuYd9U6YqycCC28hhpKonK7hx0wb19eiuRj16fPcPSVp0o/Y1ipJuNLYQ00R3q2Zs8FDA==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "Serilog.Sinks.File": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lxjg89Y8gJMmFxVkbZ+qDgjl+T4yC5F7WSLTvA+5q0R04tfKVLRL/EHpYoJ/MEQd2EeCKDuylBIVnAYMotmh2A==", - "dependencies": { - "Serilog": "4.0.0" - } - }, - "SQLitePCLRaw.bundle_e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "UxWuisvZ3uVcVOLJQv7urM/JiQH+v3TmaJc1BLKl5Dxfm/nTzTUrqswCqg/INiYLi61AXnHo1M1JPmPqqLnAdg==", - "dependencies": { - "SQLitePCLRaw.lib.e_sqlite3": "2.1.10", - "SQLitePCLRaw.provider.e_sqlite3": "2.1.10" - } - }, - "SQLitePCLRaw.core": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==", - "dependencies": { - "System.Memory": "4.5.3" - } - }, - "SQLitePCLRaw.lib.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "mAr69tDbnf3QJpRy2nJz8Qdpebdil00fvycyByR58Cn9eARvR+UiG2Vzsp+4q1tV3ikwiYIjlXCQFc12GfebbA==" - }, - "SQLitePCLRaw.provider.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "uZVTi02C1SxqzgT0HqTWatIbWGb40iIkfc3FpFCpE/r7g6K0PqzDUeefL6P6HPhDtc6BacN3yQysfzP7ks+wSQ==", - "dependencies": { - "SQLitePCLRaw.core": "2.1.10" - } - }, - "System.Buffers": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "pL2ChpaRRWI/p4LXyy4RgeWlYF2sgfj/pnVMvBqwNFr5cXg7CXNnWZWxrOONLg8VGdFB8oB+EG2Qw4MLgTOe+A==" - }, - "System.Configuration.ConfigurationManager": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", - "dependencies": { - "System.Security.Cryptography.ProtectedData": "6.0.0", - "System.Security.Permissions": "6.0.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.Diagnostics.PerformanceCounter": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "gbeE5tNp/oB7O8kTTLh3wPPJCxpNOphXPTWVs1BsYuFOYapFijWuh0LYw1qnDo4gwDUYPXOmpTIhvtxisGsYOQ==", - "dependencies": { - "System.Configuration.ConfigurationManager": "6.0.0" - } - }, - "System.Drawing.Common": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==", - "dependencies": { - "Microsoft.Win32.SystemEvents": "6.0.0" - } - }, - "System.IO.FileSystem.AccessControl": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "vMToiarpU81LR1/KZtnT7VDPvqAZfw9oOS5nY6pPP78nGYz3COLsQH3OfzbR+SjTgltd31R6KmKklz/zDpTmzw==", - "dependencies": { - "System.Security.AccessControl": "4.7.0", - "System.Security.Principal.Windows": "4.7.0" - } - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "NfGnevAV0r2gqtZWxa/7uCm3MNRYz1o4WRHhFahgBq46LuG2eaLwXIlPgtgaRUvf9CCrGFnuzN47MOzJUH1HKg==" - }, - "System.Memory": { - "type": "Transitive", - "resolved": "4.5.3", - "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "1.6.0", - "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==" - }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" - }, - "System.Security.Cryptography.ProtectedData": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==" - }, - "System.Security.Permissions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", - "dependencies": { - "System.Security.AccessControl": "6.0.0", - "System.Windows.Extensions": "6.0.0" - } - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==" - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "l5L3Ov+pyD0dfK2bv6IMU2KPEyaaWnix6U0/YhgkNBGEOAgVTVlvh5ZyXWuuRlCtLnOziz+VtM5HFeqLlH2AbA==" - }, - "System.Text.Json": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "DGToqSFbBSU6pMSbZuJ+7jDvLa73rvpcYdGFqZIB3FKdCVlEAbrBJrl9PuCT6E0QbdhXjPwqalYc5lxjUqMQzw==", - "dependencies": { - "System.IO.Pipelines": "9.0.11", - "System.Text.Encodings.Web": "9.0.11" - } - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "System.Windows.Extensions": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", - "dependencies": { - "System.Drawing.Common": "6.0.0" - } - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "visus.addressvalidation.integration.fedex": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Memory": "[9.0.11, )", - "Microsoft.Extensions.DependencyInjection.Abstractions": "[9.0.11, )", - "Microsoft.Extensions.Http": "[9.0.11, )", - "Microsoft.Extensions.Http.Resilience": "[9.10.0, )", - "Visus.AddressValidation": "[0.0.1, )" - } - }, - "visus.addressvalidation.integration.google": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Memory": "[9.0.11, )", - "Microsoft.Extensions.DependencyInjection.Abstractions": "[9.0.11, )", - "Microsoft.Extensions.Http": "[9.0.11, )", - "Microsoft.Extensions.Http.Resilience": "[9.10.0, )", - "Microsoft.IdentityModel.Tokens": "[8.15.0, )", - "System.IdentityModel.Tokens.Jwt": "[8.15.0, )", - "Visus.AddressValidation": "[0.0.1, )" - } - }, - "visus.addressvalidation.integration.pitneybowes": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Memory": "[9.0.11, )", - "Microsoft.Extensions.DependencyInjection.Abstractions": "[9.0.11, )", - "Microsoft.Extensions.Http": "[9.0.11, )", - "Microsoft.Extensions.Http.Resilience": "[9.10.0, )", - "Visus.AddressValidation": "[0.0.1, )" - } - }, - "visus.addressvalidation.integration.ups": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Memory": "[9.0.11, )", - "Microsoft.Extensions.DependencyInjection.Abstractions": "[9.0.11, )", - "Microsoft.Extensions.Http": "[9.0.11, )", - "Microsoft.Extensions.Http.Resilience": "[9.10.0, )", - "Visus.AddressValidation": "[0.0.1, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "CentralTransitive", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.IdentityModel.Tokens": { - "type": "CentralTransitive", - "requested": "[8.15.0, )", - "resolved": "8.15.0", - "contentHash": "zUE9ysJXBtXlHHRtcRK3Sp8NzdCI1z/BRDTXJQ2TvBoI0ENRtnufYIep0O5TSCJRJGDwwuLTUx+l/bEYZUxpCA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.IdentityModel.Logging": "8.15.0" - } - }, - "System.IdentityModel.Tokens.Jwt": { - "type": "CentralTransitive", - "requested": "[8.15.0, )", - "resolved": "8.15.0", - "contentHash": "dpodi7ixz6hxK8YCBYAWzm0IA8JYXoKcz0hbCbNifo519//rjUI0fBD8rfNr+IGqq+2gm4oQoXwHk09LX5SqqQ==", - "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "8.15.0", - "Microsoft.IdentityModel.Tokens": "8.15.0" - } - } - } - } -} \ No newline at end of file diff --git a/global.json b/global.json index c4b369f..ec779e0 100644 --- a/global.json +++ b/global.json @@ -1,8 +1,11 @@ { - "sdk": { - "version": "8.0.416", - "rollForward": "latestFeature", - "allowPrerelease": false - } + "sdk": { + "version": "10.0.103", + "rollForward": "latestFeature", + "allowPrerelease": false + }, + "test": { + "runner": "Microsoft.Testing.Platform" + } } diff --git a/renovate.json b/renovate.json index 92f9e9a..a09f4ba 100644 --- a/renovate.json +++ b/renovate.json @@ -1,11 +1,8 @@ { - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "local>visus-io/renovate-config", - ":preserveSemverRanges" - ], - "ignoreDeps": [ - "Microsoft.CodeAnalysis.CSharp.Workspaces" - ], - "timezone": "America/New_York" + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "local>visus-io/renovate-config", + ":preserveSemverRanges" + ], + "timezone": "America/New_York" } diff --git a/src/Visus.AddressValidation.Integration.FedEx/packages.lock.json b/src/Visus.AddressValidation.Integration.FedEx/packages.lock.json deleted file mode 100644 index 96922e6..0000000 --- a/src/Visus.AddressValidation.Integration.FedEx/packages.lock.json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "Microsoft.Extensions.Caching.Memory": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "Direct", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[8.0.22, )", - "resolved": "8.0.22", - "contentHash": "MhcMithKEiyyNkD2ZfbDZPmcOdi0GheGfg8saEIIEfD/fol3iHmcV8TsZkD4ZYz5gdUuoX4YtlVySUU7Sxl9SQ==" - }, - "Microsoft.SourceLink.GitHub": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", - "dependencies": { - "Microsoft.Build.Tasks.Git": "8.0.0", - "Microsoft.SourceLink.Common": "8.0.0" - } - }, - "Microsoft.Build.Tasks.Git": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.SourceLink.Common": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - } - } - } -} \ No newline at end of file diff --git a/src/Visus.AddressValidation.Integration.Google/packages.lock.json b/src/Visus.AddressValidation.Integration.Google/packages.lock.json deleted file mode 100644 index 357d0a5..0000000 --- a/src/Visus.AddressValidation.Integration.Google/packages.lock.json +++ /dev/null @@ -1,394 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "Microsoft.Extensions.Caching.Memory": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "Direct", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.IdentityModel.Tokens": { - "type": "Direct", - "requested": "[8.15.0, )", - "resolved": "8.15.0", - "contentHash": "zUE9ysJXBtXlHHRtcRK3Sp8NzdCI1z/BRDTXJQ2TvBoI0ENRtnufYIep0O5TSCJRJGDwwuLTUx+l/bEYZUxpCA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.IdentityModel.Logging": "8.15.0" - } - }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[8.0.22, )", - "resolved": "8.0.22", - "contentHash": "MhcMithKEiyyNkD2ZfbDZPmcOdi0GheGfg8saEIIEfD/fol3iHmcV8TsZkD4ZYz5gdUuoX4YtlVySUU7Sxl9SQ==" - }, - "Microsoft.SourceLink.GitHub": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", - "dependencies": { - "Microsoft.Build.Tasks.Git": "8.0.0", - "Microsoft.SourceLink.Common": "8.0.0" - } - }, - "System.IdentityModel.Tokens.Jwt": { - "type": "Direct", - "requested": "[8.15.0, )", - "resolved": "8.15.0", - "contentHash": "dpodi7ixz6hxK8YCBYAWzm0IA8JYXoKcz0hbCbNifo519//rjUI0fBD8rfNr+IGqq+2gm4oQoXwHk09LX5SqqQ==", - "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "8.15.0", - "Microsoft.IdentityModel.Tokens": "8.15.0" - } - }, - "Microsoft.Build.Tasks.Git": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.IdentityModel.Abstractions": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "e/DApa1GfxUqHSBHcpiQg8yaghKAvFVBQFcWh25jNoRobDZbduTUACY8bZ54eeGWXvimGmEDdF0zkS5Dq16XPQ==" - }, - "Microsoft.IdentityModel.JsonWebTokens": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "3513f5VzvOZy3ELd42wGnh1Q3e83tlGAuXFSNbENpgWYoAhLLzgFtd5PiaOPGAU0gqKhYGVzKavghLUGfX3HQg==", - "dependencies": { - "Microsoft.IdentityModel.Tokens": "8.15.0" - } - }, - "Microsoft.IdentityModel.Logging": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "1gJLjhy0LV2RQMJ9NGzi5Tnb2l+c37o8D8Lrk2mrvmb6OQHZ7XJstd/XxvncXgBpad4x9CGXdipbZzJJCXKyAg==", - "dependencies": { - "Microsoft.IdentityModel.Abstractions": "8.15.0" - } - }, - "Microsoft.SourceLink.Common": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - } - } - } -} \ No newline at end of file diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/packages.lock.json b/src/Visus.AddressValidation.Integration.PitneyBowes/packages.lock.json deleted file mode 100644 index 96922e6..0000000 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/packages.lock.json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "Microsoft.Extensions.Caching.Memory": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "Direct", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[8.0.22, )", - "resolved": "8.0.22", - "contentHash": "MhcMithKEiyyNkD2ZfbDZPmcOdi0GheGfg8saEIIEfD/fol3iHmcV8TsZkD4ZYz5gdUuoX4YtlVySUU7Sxl9SQ==" - }, - "Microsoft.SourceLink.GitHub": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", - "dependencies": { - "Microsoft.Build.Tasks.Git": "8.0.0", - "Microsoft.SourceLink.Common": "8.0.0" - } - }, - "Microsoft.Build.Tasks.Git": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.SourceLink.Common": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - } - } - } -} \ No newline at end of file diff --git a/src/Visus.AddressValidation.Integration.Ups/packages.lock.json b/src/Visus.AddressValidation.Integration.Ups/packages.lock.json deleted file mode 100644 index 96922e6..0000000 --- a/src/Visus.AddressValidation.Integration.Ups/packages.lock.json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "Microsoft.Extensions.Caching.Memory": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "Direct", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "Direct", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[8.0.22, )", - "resolved": "8.0.22", - "contentHash": "MhcMithKEiyyNkD2ZfbDZPmcOdi0GheGfg8saEIIEfD/fol3iHmcV8TsZkD4ZYz5gdUuoX4YtlVySUU7Sxl9SQ==" - }, - "Microsoft.SourceLink.GitHub": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", - "dependencies": { - "Microsoft.Build.Tasks.Git": "8.0.0", - "Microsoft.SourceLink.Common": "8.0.0" - } - }, - "Microsoft.Build.Tasks.Git": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.SourceLink.Common": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - } - } - } -} \ No newline at end of file diff --git a/src/Visus.AddressValidation.SourceGeneration/packages.lock.json b/src/Visus.AddressValidation.SourceGeneration/packages.lock.json deleted file mode 100644 index af22a65..0000000 --- a/src/Visus.AddressValidation.SourceGeneration/packages.lock.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "version": 2, - "dependencies": { - ".NETStandard,Version=v2.0": { - "Microsoft.CodeAnalysis.CSharp.Workspaces": { - "type": "Direct", - "requested": "[4.11.0, 4.11.0]", - "resolved": "4.11.0", - "contentHash": "/oRJPIMvzOfiunIegSF6FEa4VvBAUSXlbLDKxyzXuOZN9nLHg3fHuX6Mr9JZLNIupbe2xqQZEmfsPxgB01vCmg==", - "dependencies": { - "Humanizer.Core": "2.14.1", - "Microsoft.Bcl.AsyncInterfaces": "8.0.0", - "Microsoft.CodeAnalysis.Analyzers": "3.3.4", - "Microsoft.CodeAnalysis.CSharp": "[4.11.0]", - "Microsoft.CodeAnalysis.Common": "[4.11.0]", - "Microsoft.CodeAnalysis.Workspaces.Common": "[4.11.0]", - "System.Buffers": "4.5.1", - "System.Collections.Immutable": "8.0.0", - "System.Composition": "8.0.0", - "System.IO.Pipelines": "8.0.0", - "System.Memory": "4.5.5", - "System.Numerics.Vectors": "4.5.0", - "System.Reflection.Metadata": "8.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encoding.CodePages": "7.0.0", - "System.Threading.Channels": "7.0.0", - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "NETStandard.Library": { - "type": "Direct", - "requested": "[2.0.3, )", - "resolved": "2.0.3", - "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - }, - "Humanizer.Core": { - "type": "Transitive", - "resolved": "2.14.1", - "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==" - }, - "Microsoft.Bcl.AsyncInterfaces": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==", - "dependencies": { - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "Microsoft.CodeAnalysis.Analyzers": { - "type": "Transitive", - "resolved": "3.3.4", - "contentHash": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==" - }, - "Microsoft.CodeAnalysis.Common": { - "type": "Transitive", - "resolved": "4.11.0", - "contentHash": "djf8ujmqYImFgB04UGtcsEhHrzVqzHowS+EEl/Yunc5LdrYrZhGBWUTXoCF0NzYXJxtfuD+UVQarWpvrNc94Qg==", - "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "3.3.4", - "System.Buffers": "4.5.1", - "System.Collections.Immutable": "8.0.0", - "System.Memory": "4.5.5", - "System.Numerics.Vectors": "4.5.0", - "System.Reflection.Metadata": "8.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encoding.CodePages": "7.0.0", - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "Microsoft.CodeAnalysis.CSharp": { - "type": "Transitive", - "resolved": "4.11.0", - "contentHash": "6XYi2EusI8JT4y2l/F3VVVS+ISoIX9nqHsZRaG6W5aFeJ5BEuBosHfT/ABb73FN0RZ1Z3cj2j7cL28SToJPXOw==", - "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "3.3.4", - "Microsoft.CodeAnalysis.Common": "[4.11.0]", - "System.Buffers": "4.5.1", - "System.Collections.Immutable": "8.0.0", - "System.Memory": "4.5.5", - "System.Numerics.Vectors": "4.5.0", - "System.Reflection.Metadata": "8.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encoding.CodePages": "7.0.0", - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "Microsoft.CodeAnalysis.Workspaces.Common": { - "type": "Transitive", - "resolved": "4.11.0", - "contentHash": "UtwEt42V7/LnvAcschSlmUXRLEj0poX1H7QeFbY5bezcS+tJBCssAq8C7GfisgIA0qZPo2xzOrwKGBbg51CetA==", - "dependencies": { - "Humanizer.Core": "2.14.1", - "Microsoft.Bcl.AsyncInterfaces": "8.0.0", - "Microsoft.CodeAnalysis.Analyzers": "3.3.4", - "Microsoft.CodeAnalysis.Common": "[4.11.0]", - "System.Buffers": "4.5.1", - "System.Collections.Immutable": "8.0.0", - "System.Composition": "8.0.0", - "System.IO.Pipelines": "8.0.0", - "System.Memory": "4.5.5", - "System.Numerics.Vectors": "4.5.0", - "System.Reflection.Metadata": "8.0.0", - "System.Runtime.CompilerServices.Unsafe": "6.0.0", - "System.Text.Encoding.CodePages": "7.0.0", - "System.Threading.Channels": "7.0.0", - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==" - }, - "System.Buffers": { - "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" - }, - "System.Collections.Immutable": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==", - "dependencies": { - "System.Memory": "4.5.5", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Composition": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "E9oO9olNNxA39J8CxQwf7ceIPm+j/B/PhYpyK9M4LhN/OLLRw6u5fNInkhVqaWueMB9iXxYqnwqwgz+W91loIA==", - "dependencies": { - "System.Composition.AttributedModel": "8.0.0", - "System.Composition.Convention": "8.0.0", - "System.Composition.Hosting": "8.0.0", - "System.Composition.Runtime": "8.0.0", - "System.Composition.TypedParts": "8.0.0" - } - }, - "System.Composition.AttributedModel": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "NyElSuvmBMYdn2iPG0n29i7Igu0bq99izOP3MAtEwskY3OP9jqsavvVmPn9lesVaj/KT/o/QkNjA43dOJTsDQw==" - }, - "System.Composition.Convention": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "UuVkc1B3vQU/LzEbWLMZ1aYVssv4rpShzf8wPEyrUqoGNqdYKREmB8bXR73heOMKkwS6ZnPz3PjGODT2MenukQ==", - "dependencies": { - "System.Composition.AttributedModel": "8.0.0" - } - }, - "System.Composition.Hosting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "qwbONqoxlazxcbiohvb3t1JWZgKIKcRdXS5uEeLbo5wtuBupIbAvdC3PYTAeBCZrZeERvrtAbhYHuuS43Zr1bQ==", - "dependencies": { - "System.Composition.Runtime": "8.0.0" - } - }, - "System.Composition.Runtime": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "G+kRyB5/6+3ucRRQz+DF4uSHGqpkK8Q4ilVdbt4zvxpmvLVZNmSkyFAQpJLcbOyVF85aomJx0m+TGMDVlwx7ZQ==" - }, - "System.Composition.TypedParts": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "DsSklhuA+Dsgo3ZZrar8hjBFvq1wa1grrkNCTt+6SoX3vq0Vy+HXJnVXrU/nNH1BjlGH684A7h4hJQHZd/u5mA==", - "dependencies": { - "System.Composition.AttributedModel": "8.0.0", - "System.Composition.Hosting": "8.0.0", - "System.Composition.Runtime": "8.0.0" - } - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==", - "dependencies": { - "System.Buffers": "4.5.1", - "System.Memory": "4.5.5", - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "System.Memory": { - "type": "Transitive", - "resolved": "4.5.5", - "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", - "dependencies": { - "System.Buffers": "4.5.1", - "System.Numerics.Vectors": "4.4.0", - "System.Runtime.CompilerServices.Unsafe": "4.5.3" - } - }, - "System.Numerics.Vectors": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", - "dependencies": { - "System.Collections.Immutable": "8.0.0", - "System.Memory": "4.5.5" - } - }, - "System.Runtime.CompilerServices.Unsafe": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" - }, - "System.Text.Encoding.CodePages": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "LSyCblMpvOe0N3E+8e0skHcrIhgV2huaNcjUUEa8hRtgEAm36aGkRoC8Jxlb6Ra6GSfF29ftduPNywin8XolzQ==", - "dependencies": { - "System.Memory": "4.5.5", - "System.Runtime.CompilerServices.Unsafe": "6.0.0" - } - }, - "System.Threading.Channels": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "qmeeYNROMsONF6ndEZcIQ+VxR4Q/TX/7uIVLJqtwIWL7dDWeh0l1UIqgo4wYyjG//5lUNhwkLDSFl+pAWO6oiA==", - "dependencies": { - "System.Threading.Tasks.Extensions": "4.5.4" - } - }, - "System.Threading.Tasks.Extensions": { - "type": "Transitive", - "resolved": "4.5.4", - "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", - "dependencies": { - "System.Runtime.CompilerServices.Unsafe": "4.5.3" - } - } - } - } -} \ No newline at end of file diff --git a/src/Visus.AddressValidation/packages.lock.json b/src/Visus.AddressValidation/packages.lock.json deleted file mode 100644 index dc318f5..0000000 --- a/src/Visus.AddressValidation/packages.lock.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "Microsoft.Extensions.Caching.Abstractions": { - "type": "Direct", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "Direct", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[8.0.22, )", - "resolved": "8.0.22", - "contentHash": "MhcMithKEiyyNkD2ZfbDZPmcOdi0GheGfg8saEIIEfD/fol3iHmcV8TsZkD4ZYz5gdUuoX4YtlVySUU7Sxl9SQ==" - }, - "Microsoft.SourceLink.GitHub": { - "type": "Direct", - "requested": "[8.0.0, )", - "resolved": "8.0.0", - "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", - "dependencies": { - "Microsoft.Build.Tasks.Git": "8.0.0", - "Microsoft.SourceLink.Common": "8.0.0" - } - }, - "Microsoft.Build.Tasks.Git": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.SourceLink.Common": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" - } - } - } -} \ No newline at end of file diff --git a/tests/.editorconfig b/tests/.editorconfig deleted file mode 100644 index 806bea4..0000000 --- a/tests/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -# C# files -[*.cs] - -#### C# Coding Conventions #### - -# var preferences -csharp_style_var_elsewhere = true:suggestion -csharp_style_var_for_built_in_types = true:suggestion -csharp_style_var_when_type_is_apparent = true:suggestion diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props deleted file mode 100644 index e556cab..0000000 --- a/tests/Directory.Build.props +++ /dev/null @@ -1,19 +0,0 @@ - - - false - false - enable - true - false - true - - - - true - true - - - - - - diff --git a/tests/Visus.AddressValidation.Integration.FedEx.Tests/packages.lock.json b/tests/Visus.AddressValidation.Integration.FedEx.Tests/packages.lock.json deleted file mode 100644 index ae2f825..0000000 --- a/tests/Visus.AddressValidation.Integration.FedEx.Tests/packages.lock.json +++ /dev/null @@ -1,566 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "coverlet.collector": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==" - }, - "coverlet.msbuild": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "Qa7Hg+wrOMDKpXVn2dw4Wlun490bIWsFW0fdNJQFJLZnbU27MCP0HJ2mPgS+3EQBQUb0zKlkwiQzP+j38Hc3Iw==" - }, - "JunitXml.TestLogger": { - "type": "Direct", - "requested": "[7.0.2, )", - "resolved": "7.0.2", - "contentHash": "f6swYzT8DOVS6byaz1f7SYT06aoZTFXooLlJFX9Da3JB1/RLK+Z0UW1Q33NqMX+T9JFpal276qAJfPVUp96qbg==" - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", - "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" - } - }, - "NSubstitute": { - "type": "Direct", - "requested": "[5.3.0, )", - "resolved": "5.3.0", - "contentHash": "lJ47Cps5Qzr86N99lcwd+OUvQma7+fBgr8+Mn+aOC0WrlqMNkdivaYD9IvnZ5Mqo6Ky3LS7ZI+tUq1/s9ERd0Q==", - "dependencies": { - "Castle.Core": "5.1.1" - } - }, - "PublicApiGenerator": { - "type": "Direct", - "requested": "[11.5.4, )", - "resolved": "11.5.4", - "contentHash": "Va382WG4Vng8kCtDaAP5solqbhayMMlW1E+e/DV/w39yJPybmMgy8fbdUvvQgG93EMILx7JtJbGS1HRhVNTUVQ==", - "dependencies": { - "Mono.Cecil": "0.11.6", - "System.CodeDom": "6.0.0" - } - }, - "RichardSzalay.MockHttp": { - "type": "Direct", - "requested": "[7.0.0, )", - "resolved": "7.0.0", - "contentHash": "QwnauYiaywp65QKFnP+wvgiQ2D8Pv888qB2dyfd7MSVDF06sIvxqASenk+RxsWybyyt+Hu1Y251wQxpHTv3UYg==" - }, - "Verify.Xunit": { - "type": "Direct", - "requested": "[31.8.0, )", - "resolved": "31.8.0", - "contentHash": "f+oaf/znLk/aeX6nAK9z8gjAuAnpZPSr9vixHAMveS6G3FP9dBCDCvu7UsZUKBQLgVT17Ie38LkXvmFgLx7Aqw==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2", - "Verify": "31.8.0", - "xunit.abstractions": "2.0.3", - "xunit.extensibility.execution": "2.9.3" - } - }, - "xunit": { - "type": "Direct", - "requested": "[2.9.3, )", - "resolved": "2.9.3", - "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", - "dependencies": { - "xunit.analyzers": "1.18.0", - "xunit.assert": "2.9.3", - "xunit.core": "[2.9.3]" - } - }, - "xunit.runner.visualstudio": { - "type": "Direct", - "requested": "[3.1.5, )", - "resolved": "3.1.5", - "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" - }, - "Argon": { - "type": "Transitive", - "resolved": "0.33.0", - "contentHash": "4MIj5MosLqRlKAz16Ir5rz1gyocC6npJGGXqkTIIVby0yPYKk56Lm9X5tEQv6MbStLUOv3aDfya6FKAqcRhxTA==" - }, - "Castle.Core": { - "type": "Transitive", - "resolved": "5.1.1", - "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", - "dependencies": { - "System.Diagnostics.EventLog": "6.0.0" - } - }, - "DiffEngine": { - "type": "Transitive", - "resolved": "17.0.1", - "contentHash": "GZ1w8uedF2CpcJzwPJkBMYRVJRETbmmqKAqhTJlIMRiKeEYk68yTXZIXS+7fSwx8jgK5loGhKPyZYPxqXCn2oA==", - "dependencies": { - "EmptyFiles": "8.17.1", - "System.Management": "8.0.0" - } - }, - "EmptyFiles": { - "type": "Transitive", - "resolved": "8.17.1", - "contentHash": "pVmxBQer9yeFhYg6X27YMB/RDxYT99ms5QD8IT2KTj/WzygRtWZ0l7jlk4I4aAztNT7QjvHQ6tQ1/ox07C552A==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", - "dependencies": { - "System.Reflection.Metadata": "8.0.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", - "Newtonsoft.Json": "13.0.3" - } - }, - "Mono.Cecil": { - "type": "Transitive", - "resolved": "0.11.6", - "contentHash": "f33RkDtZO8VlGXCtmQIviOtxgnUdym9xx/b1p9h91CRGOsJFxCFOFK1FDbVt1OCf1aWwYejUFa2MOQyFWTFjbA==" - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "SimpleInfoName": { - "type": "Transitive", - "resolved": "3.1.2", - "contentHash": "/OoEZQxSW6DeTJ9nfrg8BLCOCWpxBiWHV4NkG3t+Xpe8tvzm7yCwKwxkhpauMl3fg9OjlIjJMKX61H6VavLkrw==" - }, - "System.CodeDom": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==" - }, - "System.Collections.Immutable": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Management": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", - "dependencies": { - "System.CodeDom": "8.0.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", - "dependencies": { - "System.Collections.Immutable": "8.0.0" - } - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "Verify": { - "type": "Transitive", - "resolved": "31.8.0", - "contentHash": "xZFQX/xVM8rCG1LkXVSBi7cp+eujrE++RDTMMztw6Vt1KjoETFsr8hd0uwYHmIDpvHu/vK877WVn8XVMxDHFfA==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2" - } - }, - "xunit.abstractions": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" - }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.18.0", - "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]", - "xunit.extensibility.execution": "[2.9.3]" - } - }, - "xunit.extensibility.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", - "dependencies": { - "xunit.abstractions": "2.0.3" - } - }, - "xunit.extensibility.execution": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]" - } - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "visus.addressvalidation.integration.fedex": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Memory": "[9.0.11, )", - "Microsoft.Extensions.DependencyInjection.Abstractions": "[9.0.11, )", - "Microsoft.Extensions.Http": "[9.0.11, )", - "Microsoft.Extensions.Http.Resilience": "[9.10.0, )", - "Visus.AddressValidation": "[0.0.1, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "CentralTransitive", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - } - } - } -} \ No newline at end of file diff --git a/tests/Visus.AddressValidation.Integration.Google.Tests/packages.lock.json b/tests/Visus.AddressValidation.Integration.Google.Tests/packages.lock.json deleted file mode 100644 index ce740e7..0000000 --- a/tests/Visus.AddressValidation.Integration.Google.Tests/packages.lock.json +++ /dev/null @@ -1,609 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "coverlet.collector": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==" - }, - "coverlet.msbuild": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "Qa7Hg+wrOMDKpXVn2dw4Wlun490bIWsFW0fdNJQFJLZnbU27MCP0HJ2mPgS+3EQBQUb0zKlkwiQzP+j38Hc3Iw==" - }, - "JunitXml.TestLogger": { - "type": "Direct", - "requested": "[7.0.2, )", - "resolved": "7.0.2", - "contentHash": "f6swYzT8DOVS6byaz1f7SYT06aoZTFXooLlJFX9Da3JB1/RLK+Z0UW1Q33NqMX+T9JFpal276qAJfPVUp96qbg==" - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", - "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" - } - }, - "NSubstitute": { - "type": "Direct", - "requested": "[5.3.0, )", - "resolved": "5.3.0", - "contentHash": "lJ47Cps5Qzr86N99lcwd+OUvQma7+fBgr8+Mn+aOC0WrlqMNkdivaYD9IvnZ5Mqo6Ky3LS7ZI+tUq1/s9ERd0Q==", - "dependencies": { - "Castle.Core": "5.1.1" - } - }, - "PublicApiGenerator": { - "type": "Direct", - "requested": "[11.5.4, )", - "resolved": "11.5.4", - "contentHash": "Va382WG4Vng8kCtDaAP5solqbhayMMlW1E+e/DV/w39yJPybmMgy8fbdUvvQgG93EMILx7JtJbGS1HRhVNTUVQ==", - "dependencies": { - "Mono.Cecil": "0.11.6", - "System.CodeDom": "6.0.0" - } - }, - "RichardSzalay.MockHttp": { - "type": "Direct", - "requested": "[7.0.0, )", - "resolved": "7.0.0", - "contentHash": "QwnauYiaywp65QKFnP+wvgiQ2D8Pv888qB2dyfd7MSVDF06sIvxqASenk+RxsWybyyt+Hu1Y251wQxpHTv3UYg==" - }, - "Verify.Xunit": { - "type": "Direct", - "requested": "[31.8.0, )", - "resolved": "31.8.0", - "contentHash": "f+oaf/znLk/aeX6nAK9z8gjAuAnpZPSr9vixHAMveS6G3FP9dBCDCvu7UsZUKBQLgVT17Ie38LkXvmFgLx7Aqw==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2", - "Verify": "31.8.0", - "xunit.abstractions": "2.0.3", - "xunit.extensibility.execution": "2.9.3" - } - }, - "xunit": { - "type": "Direct", - "requested": "[2.9.3, )", - "resolved": "2.9.3", - "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", - "dependencies": { - "xunit.analyzers": "1.18.0", - "xunit.assert": "2.9.3", - "xunit.core": "[2.9.3]" - } - }, - "xunit.runner.visualstudio": { - "type": "Direct", - "requested": "[3.1.5, )", - "resolved": "3.1.5", - "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" - }, - "Argon": { - "type": "Transitive", - "resolved": "0.33.0", - "contentHash": "4MIj5MosLqRlKAz16Ir5rz1gyocC6npJGGXqkTIIVby0yPYKk56Lm9X5tEQv6MbStLUOv3aDfya6FKAqcRhxTA==" - }, - "Castle.Core": { - "type": "Transitive", - "resolved": "5.1.1", - "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", - "dependencies": { - "System.Diagnostics.EventLog": "6.0.0" - } - }, - "DiffEngine": { - "type": "Transitive", - "resolved": "17.0.1", - "contentHash": "GZ1w8uedF2CpcJzwPJkBMYRVJRETbmmqKAqhTJlIMRiKeEYk68yTXZIXS+7fSwx8jgK5loGhKPyZYPxqXCn2oA==", - "dependencies": { - "EmptyFiles": "8.17.1", - "System.Management": "8.0.0" - } - }, - "EmptyFiles": { - "type": "Transitive", - "resolved": "8.17.1", - "contentHash": "pVmxBQer9yeFhYg6X27YMB/RDxYT99ms5QD8IT2KTj/WzygRtWZ0l7jlk4I4aAztNT7QjvHQ6tQ1/ox07C552A==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.IdentityModel.Abstractions": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "e/DApa1GfxUqHSBHcpiQg8yaghKAvFVBQFcWh25jNoRobDZbduTUACY8bZ54eeGWXvimGmEDdF0zkS5Dq16XPQ==" - }, - "Microsoft.IdentityModel.JsonWebTokens": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "3513f5VzvOZy3ELd42wGnh1Q3e83tlGAuXFSNbENpgWYoAhLLzgFtd5PiaOPGAU0gqKhYGVzKavghLUGfX3HQg==", - "dependencies": { - "Microsoft.IdentityModel.Tokens": "8.15.0" - } - }, - "Microsoft.IdentityModel.Logging": { - "type": "Transitive", - "resolved": "8.15.0", - "contentHash": "1gJLjhy0LV2RQMJ9NGzi5Tnb2l+c37o8D8Lrk2mrvmb6OQHZ7XJstd/XxvncXgBpad4x9CGXdipbZzJJCXKyAg==", - "dependencies": { - "Microsoft.IdentityModel.Abstractions": "8.15.0" - } - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", - "dependencies": { - "System.Reflection.Metadata": "8.0.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", - "Newtonsoft.Json": "13.0.3" - } - }, - "Mono.Cecil": { - "type": "Transitive", - "resolved": "0.11.6", - "contentHash": "f33RkDtZO8VlGXCtmQIviOtxgnUdym9xx/b1p9h91CRGOsJFxCFOFK1FDbVt1OCf1aWwYejUFa2MOQyFWTFjbA==" - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "SimpleInfoName": { - "type": "Transitive", - "resolved": "3.1.2", - "contentHash": "/OoEZQxSW6DeTJ9nfrg8BLCOCWpxBiWHV4NkG3t+Xpe8tvzm7yCwKwxkhpauMl3fg9OjlIjJMKX61H6VavLkrw==" - }, - "System.CodeDom": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==" - }, - "System.Collections.Immutable": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Management": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", - "dependencies": { - "System.CodeDom": "8.0.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", - "dependencies": { - "System.Collections.Immutable": "8.0.0" - } - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "Verify": { - "type": "Transitive", - "resolved": "31.8.0", - "contentHash": "xZFQX/xVM8rCG1LkXVSBi7cp+eujrE++RDTMMztw6Vt1KjoETFsr8hd0uwYHmIDpvHu/vK877WVn8XVMxDHFfA==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2" - } - }, - "xunit.abstractions": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" - }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.18.0", - "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]", - "xunit.extensibility.execution": "[2.9.3]" - } - }, - "xunit.extensibility.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", - "dependencies": { - "xunit.abstractions": "2.0.3" - } - }, - "xunit.extensibility.execution": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]" - } - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "visus.addressvalidation.integration.google": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Memory": "[9.0.11, )", - "Microsoft.Extensions.DependencyInjection.Abstractions": "[9.0.11, )", - "Microsoft.Extensions.Http": "[9.0.11, )", - "Microsoft.Extensions.Http.Resilience": "[9.10.0, )", - "Microsoft.IdentityModel.Tokens": "[8.15.0, )", - "System.IdentityModel.Tokens.Jwt": "[8.15.0, )", - "Visus.AddressValidation": "[0.0.1, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "CentralTransitive", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.IdentityModel.Tokens": { - "type": "CentralTransitive", - "requested": "[8.15.0, )", - "resolved": "8.15.0", - "contentHash": "zUE9ysJXBtXlHHRtcRK3Sp8NzdCI1z/BRDTXJQ2TvBoI0ENRtnufYIep0O5TSCJRJGDwwuLTUx+l/bEYZUxpCA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.IdentityModel.Logging": "8.15.0" - } - }, - "System.IdentityModel.Tokens.Jwt": { - "type": "CentralTransitive", - "requested": "[8.15.0, )", - "resolved": "8.15.0", - "contentHash": "dpodi7ixz6hxK8YCBYAWzm0IA8JYXoKcz0hbCbNifo519//rjUI0fBD8rfNr+IGqq+2gm4oQoXwHk09LX5SqqQ==", - "dependencies": { - "Microsoft.IdentityModel.JsonWebTokens": "8.15.0", - "Microsoft.IdentityModel.Tokens": "8.15.0" - } - } - } - } -} \ No newline at end of file diff --git a/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/packages.lock.json b/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/packages.lock.json deleted file mode 100644 index b1a7545..0000000 --- a/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/packages.lock.json +++ /dev/null @@ -1,566 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "coverlet.collector": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==" - }, - "coverlet.msbuild": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "Qa7Hg+wrOMDKpXVn2dw4Wlun490bIWsFW0fdNJQFJLZnbU27MCP0HJ2mPgS+3EQBQUb0zKlkwiQzP+j38Hc3Iw==" - }, - "JunitXml.TestLogger": { - "type": "Direct", - "requested": "[7.0.2, )", - "resolved": "7.0.2", - "contentHash": "f6swYzT8DOVS6byaz1f7SYT06aoZTFXooLlJFX9Da3JB1/RLK+Z0UW1Q33NqMX+T9JFpal276qAJfPVUp96qbg==" - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", - "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" - } - }, - "NSubstitute": { - "type": "Direct", - "requested": "[5.3.0, )", - "resolved": "5.3.0", - "contentHash": "lJ47Cps5Qzr86N99lcwd+OUvQma7+fBgr8+Mn+aOC0WrlqMNkdivaYD9IvnZ5Mqo6Ky3LS7ZI+tUq1/s9ERd0Q==", - "dependencies": { - "Castle.Core": "5.1.1" - } - }, - "PublicApiGenerator": { - "type": "Direct", - "requested": "[11.5.4, )", - "resolved": "11.5.4", - "contentHash": "Va382WG4Vng8kCtDaAP5solqbhayMMlW1E+e/DV/w39yJPybmMgy8fbdUvvQgG93EMILx7JtJbGS1HRhVNTUVQ==", - "dependencies": { - "Mono.Cecil": "0.11.6", - "System.CodeDom": "6.0.0" - } - }, - "RichardSzalay.MockHttp": { - "type": "Direct", - "requested": "[7.0.0, )", - "resolved": "7.0.0", - "contentHash": "QwnauYiaywp65QKFnP+wvgiQ2D8Pv888qB2dyfd7MSVDF06sIvxqASenk+RxsWybyyt+Hu1Y251wQxpHTv3UYg==" - }, - "Verify.Xunit": { - "type": "Direct", - "requested": "[31.8.0, )", - "resolved": "31.8.0", - "contentHash": "f+oaf/znLk/aeX6nAK9z8gjAuAnpZPSr9vixHAMveS6G3FP9dBCDCvu7UsZUKBQLgVT17Ie38LkXvmFgLx7Aqw==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2", - "Verify": "31.8.0", - "xunit.abstractions": "2.0.3", - "xunit.extensibility.execution": "2.9.3" - } - }, - "xunit": { - "type": "Direct", - "requested": "[2.9.3, )", - "resolved": "2.9.3", - "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", - "dependencies": { - "xunit.analyzers": "1.18.0", - "xunit.assert": "2.9.3", - "xunit.core": "[2.9.3]" - } - }, - "xunit.runner.visualstudio": { - "type": "Direct", - "requested": "[3.1.5, )", - "resolved": "3.1.5", - "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" - }, - "Argon": { - "type": "Transitive", - "resolved": "0.33.0", - "contentHash": "4MIj5MosLqRlKAz16Ir5rz1gyocC6npJGGXqkTIIVby0yPYKk56Lm9X5tEQv6MbStLUOv3aDfya6FKAqcRhxTA==" - }, - "Castle.Core": { - "type": "Transitive", - "resolved": "5.1.1", - "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", - "dependencies": { - "System.Diagnostics.EventLog": "6.0.0" - } - }, - "DiffEngine": { - "type": "Transitive", - "resolved": "17.0.1", - "contentHash": "GZ1w8uedF2CpcJzwPJkBMYRVJRETbmmqKAqhTJlIMRiKeEYk68yTXZIXS+7fSwx8jgK5loGhKPyZYPxqXCn2oA==", - "dependencies": { - "EmptyFiles": "8.17.1", - "System.Management": "8.0.0" - } - }, - "EmptyFiles": { - "type": "Transitive", - "resolved": "8.17.1", - "contentHash": "pVmxBQer9yeFhYg6X27YMB/RDxYT99ms5QD8IT2KTj/WzygRtWZ0l7jlk4I4aAztNT7QjvHQ6tQ1/ox07C552A==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", - "dependencies": { - "System.Reflection.Metadata": "8.0.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", - "Newtonsoft.Json": "13.0.3" - } - }, - "Mono.Cecil": { - "type": "Transitive", - "resolved": "0.11.6", - "contentHash": "f33RkDtZO8VlGXCtmQIviOtxgnUdym9xx/b1p9h91CRGOsJFxCFOFK1FDbVt1OCf1aWwYejUFa2MOQyFWTFjbA==" - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "SimpleInfoName": { - "type": "Transitive", - "resolved": "3.1.2", - "contentHash": "/OoEZQxSW6DeTJ9nfrg8BLCOCWpxBiWHV4NkG3t+Xpe8tvzm7yCwKwxkhpauMl3fg9OjlIjJMKX61H6VavLkrw==" - }, - "System.CodeDom": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==" - }, - "System.Collections.Immutable": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Management": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", - "dependencies": { - "System.CodeDom": "8.0.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", - "dependencies": { - "System.Collections.Immutable": "8.0.0" - } - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "Verify": { - "type": "Transitive", - "resolved": "31.8.0", - "contentHash": "xZFQX/xVM8rCG1LkXVSBi7cp+eujrE++RDTMMztw6Vt1KjoETFsr8hd0uwYHmIDpvHu/vK877WVn8XVMxDHFfA==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2" - } - }, - "xunit.abstractions": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" - }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.18.0", - "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]", - "xunit.extensibility.execution": "[2.9.3]" - } - }, - "xunit.extensibility.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", - "dependencies": { - "xunit.abstractions": "2.0.3" - } - }, - "xunit.extensibility.execution": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]" - } - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "visus.addressvalidation.integration.pitneybowes": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Memory": "[9.0.11, )", - "Microsoft.Extensions.DependencyInjection.Abstractions": "[9.0.11, )", - "Microsoft.Extensions.Http": "[9.0.11, )", - "Microsoft.Extensions.Http.Resilience": "[9.10.0, )", - "Visus.AddressValidation": "[0.0.1, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "CentralTransitive", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - } - } - } -} \ No newline at end of file diff --git a/tests/Visus.AddressValidation.Integration.Ups.Tests/packages.lock.json b/tests/Visus.AddressValidation.Integration.Ups.Tests/packages.lock.json deleted file mode 100644 index 0dda704..0000000 --- a/tests/Visus.AddressValidation.Integration.Ups.Tests/packages.lock.json +++ /dev/null @@ -1,566 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "coverlet.collector": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==" - }, - "coverlet.msbuild": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "Qa7Hg+wrOMDKpXVn2dw4Wlun490bIWsFW0fdNJQFJLZnbU27MCP0HJ2mPgS+3EQBQUb0zKlkwiQzP+j38Hc3Iw==" - }, - "JunitXml.TestLogger": { - "type": "Direct", - "requested": "[7.0.2, )", - "resolved": "7.0.2", - "contentHash": "f6swYzT8DOVS6byaz1f7SYT06aoZTFXooLlJFX9Da3JB1/RLK+Z0UW1Q33NqMX+T9JFpal276qAJfPVUp96qbg==" - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", - "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" - } - }, - "NSubstitute": { - "type": "Direct", - "requested": "[5.3.0, )", - "resolved": "5.3.0", - "contentHash": "lJ47Cps5Qzr86N99lcwd+OUvQma7+fBgr8+Mn+aOC0WrlqMNkdivaYD9IvnZ5Mqo6Ky3LS7ZI+tUq1/s9ERd0Q==", - "dependencies": { - "Castle.Core": "5.1.1" - } - }, - "PublicApiGenerator": { - "type": "Direct", - "requested": "[11.5.4, )", - "resolved": "11.5.4", - "contentHash": "Va382WG4Vng8kCtDaAP5solqbhayMMlW1E+e/DV/w39yJPybmMgy8fbdUvvQgG93EMILx7JtJbGS1HRhVNTUVQ==", - "dependencies": { - "Mono.Cecil": "0.11.6", - "System.CodeDom": "6.0.0" - } - }, - "RichardSzalay.MockHttp": { - "type": "Direct", - "requested": "[7.0.0, )", - "resolved": "7.0.0", - "contentHash": "QwnauYiaywp65QKFnP+wvgiQ2D8Pv888qB2dyfd7MSVDF06sIvxqASenk+RxsWybyyt+Hu1Y251wQxpHTv3UYg==" - }, - "Verify.Xunit": { - "type": "Direct", - "requested": "[31.8.0, )", - "resolved": "31.8.0", - "contentHash": "f+oaf/znLk/aeX6nAK9z8gjAuAnpZPSr9vixHAMveS6G3FP9dBCDCvu7UsZUKBQLgVT17Ie38LkXvmFgLx7Aqw==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2", - "Verify": "31.8.0", - "xunit.abstractions": "2.0.3", - "xunit.extensibility.execution": "2.9.3" - } - }, - "xunit": { - "type": "Direct", - "requested": "[2.9.3, )", - "resolved": "2.9.3", - "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", - "dependencies": { - "xunit.analyzers": "1.18.0", - "xunit.assert": "2.9.3", - "xunit.core": "[2.9.3]" - } - }, - "xunit.runner.visualstudio": { - "type": "Direct", - "requested": "[3.1.5, )", - "resolved": "3.1.5", - "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" - }, - "Argon": { - "type": "Transitive", - "resolved": "0.33.0", - "contentHash": "4MIj5MosLqRlKAz16Ir5rz1gyocC6npJGGXqkTIIVby0yPYKk56Lm9X5tEQv6MbStLUOv3aDfya6FKAqcRhxTA==" - }, - "Castle.Core": { - "type": "Transitive", - "resolved": "5.1.1", - "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", - "dependencies": { - "System.Diagnostics.EventLog": "6.0.0" - } - }, - "DiffEngine": { - "type": "Transitive", - "resolved": "17.0.1", - "contentHash": "GZ1w8uedF2CpcJzwPJkBMYRVJRETbmmqKAqhTJlIMRiKeEYk68yTXZIXS+7fSwx8jgK5loGhKPyZYPxqXCn2oA==", - "dependencies": { - "EmptyFiles": "8.17.1", - "System.Management": "8.0.0" - } - }, - "EmptyFiles": { - "type": "Transitive", - "resolved": "8.17.1", - "contentHash": "pVmxBQer9yeFhYg6X27YMB/RDxYT99ms5QD8IT2KTj/WzygRtWZ0l7jlk4I4aAztNT7QjvHQ6tQ1/ox07C552A==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" - }, - "Microsoft.Extensions.AmbientMetadata.Application": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "ndm/eoOzk61Csn+ojv5z3Kt7YWAdUNR8ruFaf1b69kSbeqDPoV96f1GR1OWTIrCN9bm83V8CSkhvnnG+LrLTvg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.Compliance.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "Tgu40iIg2Kr8s+BoOhb8r8kQfcagwm1VnpnMZA9fd/sD8Hlj13cNpyCfLRrYEBP+VmfmaoficQvRNEUqH+F4mw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.ObjectPool": "8.0.21" - } - }, - "Microsoft.Extensions.Configuration": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "4ceMQRCIMP9AxxZOQ0k+xYXCfgSEmEsnt6s0o/KkpeLqwm3kGKBbsiJlyMk56GnKJtk4SI7nTpIIzb+Qdk+FMQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Binder": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "iPE1jROL5uK/6iJSRzwpEIJt6BuANN36Io+6bLss67JVjbG6DdVedrMnB9nqsxs+Lx3X9RxvARTgFsUgP0MB0g==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "UquyDzvz0EneIQrrU67GJkIgynS+VD7t+RDtNv6VgKMOFrLBjldn6hzlXppGGecFMvAkMTqn4T8RYvzw7j7fQA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11" - } - }, - "Microsoft.Extensions.DependencyInjection.AutoActivation": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "qk5+lY0MUl7Y77TjM6HzfQPOY4CqoTg281OddyDC5iU2hf+cIxhx0VbNuJH77vqB6qyCP1OsuQmCzvlpf9yxBQ==", - "dependencies": { - "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" - } - }, - "Microsoft.Extensions.Diagnostics": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "WkriTCwxW0QbIgPYXGy329wQKcS4lmstwwysCHcjok2acPd626ysPcwMpw1pSBNzkdkMsqcbcJLlpVc9kP/YiQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.11", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.11", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.Abstractions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "D9gu4weEmvWGuz8zp5xwsOr0ldmWphMKr7+IW66hG4rnrgpMLtTWoOINBOX5mcRTPL39+AVd3BJdc4HTvl2NrA==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - }, - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "SRJgt408OA/+v2o47Kjx8Wf+rbCJMmTsbsnkuzVzeP9xfcn4dIoMJXLCKiRlDNzJ3pXLYrXmkyOSY81BehoVHw==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.FileProviders.Abstractions": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "8.0.0" - } - }, - "Microsoft.Extensions.Hosting.Abstractions": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", - "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2" - } - }, - "Microsoft.Extensions.Http.Diagnostics": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "3IJjOPm4CRmv7zzjPV+RCyvS4kWJ9BNr1k/MWgRTQds6LcIhAgwh+ToZ8O4fKMFlme0EGLvTm27ARKqp468pQw==", - "dependencies": { - "Microsoft.Extensions.Http": "8.0.1", - "Microsoft.Extensions.Telemetry": "9.10.0", - "System.IO.Pipelines": "8.0.0" - } - }, - "Microsoft.Extensions.Logging": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "PVHYgMmMZFEE3PGpc7oZ9CnoyNonNyT5klrV9pNIzCPxL12FpQ7kNhliXAwowmtaDVBmKnG/1db6d7gqPwDj8g==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Logging.Configuration": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "QWwTrsgOnJMmn+XUslm8D2H1n3PkP/u/v52FODtyBc/k4W9r3i2vcXXeeX/upnzllJYRRbrzVzT0OclfNJtBJA==", - "dependencies": { - "Microsoft.Extensions.Configuration": "8.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", - "Microsoft.Extensions.Configuration.Binder": "8.0.2", - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", - "Microsoft.Extensions.Logging": "8.0.1", - "Microsoft.Extensions.Logging.Abstractions": "8.0.2", - "Microsoft.Extensions.Options": "8.0.2", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0" - } - }, - "Microsoft.Extensions.ObjectPool": { - "type": "Transitive", - "resolved": "8.0.21", - "contentHash": "UBuyxD9CqasYKmwP41Skar2+f2Bk47V3NAPXh3a3Rxsmt2NTB1qynDU8zHkHWEts/07QykmzYAWLHPgHsROe0w==" - }, - "Microsoft.Extensions.Options": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HX4M3BLkW1dtByMKHDVq6r7Jy6e4hf8NDzHpIgz7C8BtYk9JQHhfYX5c1UheQTD5Veg1yBhz/cD9C8vtrGrk9w==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Options.ConfigurationExtensions": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "HUzr4c1eMXCQN8Yre2JdCzYmLJAecFGVXfByVhjEY4jBaHIs8EAxdv72WMUa2GcROlkYPbYNzMbcqJPMiznHxw==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.Configuration.Binder": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.Extensions.Resilience": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "tNptjYbHq73emZok4HBbpV41Afwoclga5LaKux8RV27lOA2lyQxeJFKNTWYQauJmWxxwXmwG7bgitbnIDh4eXA==", - "dependencies": { - "Microsoft.Extensions.Diagnostics": "8.0.1", - "Microsoft.Extensions.Diagnostics.ExceptionSummarization": "9.10.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "8.0.0", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0", - "Polly.Extensions": "8.4.2", - "Polly.RateLimiting": "8.4.2" - } - }, - "Microsoft.Extensions.Telemetry": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "FGEOTEjMB+1T69PLp5GrG4UOsIjcdNQcoiXpC+KV9NRejl6vSMLhVqQ6g6c+cxLXzx8xc2J90GAMhD1wPHjKHg==", - "dependencies": { - "Microsoft.Extensions.AmbientMetadata.Application": "9.10.0", - "Microsoft.Extensions.DependencyInjection.AutoActivation": "9.10.0", - "Microsoft.Extensions.Logging.Configuration": "8.0.1", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Telemetry.Abstractions": "9.10.0" - } - }, - "Microsoft.Extensions.Telemetry.Abstractions": { - "type": "Transitive", - "resolved": "9.10.0", - "contentHash": "hJflG5if8NqElmybxXDf38d4EPopOo9H+Qg6l5LKTsavqE4CFdA5DIPb9+jjAeL22FN+rs6KuuEIuBPS4PNXvw==", - "dependencies": { - "Microsoft.Extensions.Compliance.Abstractions": "9.10.0", - "Microsoft.Extensions.Logging.Abstractions": "8.0.3", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Options": "8.0.2" - } - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", - "dependencies": { - "System.Reflection.Metadata": "8.0.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", - "Newtonsoft.Json": "13.0.3" - } - }, - "Mono.Cecil": { - "type": "Transitive", - "resolved": "0.11.6", - "contentHash": "f33RkDtZO8VlGXCtmQIviOtxgnUdym9xx/b1p9h91CRGOsJFxCFOFK1FDbVt1OCf1aWwYejUFa2MOQyFWTFjbA==" - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "Polly.Core": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g==" - }, - "Polly.Extensions": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==", - "dependencies": { - "Microsoft.Extensions.Logging.Abstractions": "8.0.0", - "Microsoft.Extensions.Options": "8.0.0", - "Polly.Core": "8.4.2" - } - }, - "Polly.RateLimiting": { - "type": "Transitive", - "resolved": "8.4.2", - "contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==", - "dependencies": { - "Polly.Core": "8.4.2", - "System.Threading.RateLimiting": "8.0.0" - } - }, - "SimpleInfoName": { - "type": "Transitive", - "resolved": "3.1.2", - "contentHash": "/OoEZQxSW6DeTJ9nfrg8BLCOCWpxBiWHV4NkG3t+Xpe8tvzm7yCwKwxkhpauMl3fg9OjlIjJMKX61H6VavLkrw==" - }, - "System.CodeDom": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==" - }, - "System.Collections.Immutable": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" - }, - "System.Diagnostics.DiagnosticSource": { - "type": "Transitive", - "resolved": "9.0.11", - "contentHash": "/QzMFklOm8Ak//YB0I2kR+ByxUndT63ucrRWQm0xZsuLExJWrVDeGKtYZDuBackd9dThbwMdOotIEc4c4KwJiw==" - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Management": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", - "dependencies": { - "System.CodeDom": "8.0.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", - "dependencies": { - "System.Collections.Immutable": "8.0.0" - } - }, - "System.Threading.RateLimiting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "7mu9v0QDv66ar3DpGSZHg9NuNcxDaaAcnMULuZlaTpP9+hwXhrxNGsF5GmLkSHxFdb5bBc1TzeujsRgTrPWi+Q==" - }, - "Verify": { - "type": "Transitive", - "resolved": "31.8.0", - "contentHash": "xZFQX/xVM8rCG1LkXVSBi7cp+eujrE++RDTMMztw6Vt1KjoETFsr8hd0uwYHmIDpvHu/vK877WVn8XVMxDHFfA==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2" - } - }, - "xunit.abstractions": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" - }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.18.0", - "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]", - "xunit.extensibility.execution": "[2.9.3]" - } - }, - "xunit.extensibility.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", - "dependencies": { - "xunit.abstractions": "2.0.3" - } - }, - "xunit.extensibility.execution": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]" - } - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "visus.addressvalidation.integration.ups": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Memory": "[9.0.11, )", - "Microsoft.Extensions.DependencyInjection.Abstractions": "[9.0.11, )", - "Microsoft.Extensions.Http": "[9.0.11, )", - "Microsoft.Extensions.Http.Resilience": "[9.10.0, )", - "Visus.AddressValidation": "[0.0.1, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Caching.Memory": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "J77oUeVZXdMoiUiCPkL4v13KrNRuMQnSHHw78cTh/2ZidyiMFm8jhu49OUKvNydMUX8ZcuM5g8uohW18YaglMw==", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11", - "Microsoft.Extensions.Primitives": "9.0.11" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "+ZxxZzcVU+IEzq12GItUzf/V3mEc5nSLiXijwvDc4zyhbjvSZZ043giSZqGnhakrjwRWjkerIHPrRwm9okEIpw==" - }, - "Microsoft.Extensions.Http": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "QEa12ESaPAKR3M40N8dawVd+LPOgxCrGsUmC7Myfhn44AQiWh7X9PiTAagrAnJSaGqsb+yx+KRNSjrm8wx1TVQ==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.11", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "Microsoft.Extensions.Diagnostics": "9.0.11", - "Microsoft.Extensions.Logging": "9.0.11", - "Microsoft.Extensions.Logging.Abstractions": "9.0.11", - "Microsoft.Extensions.Options": "9.0.11" - } - }, - "Microsoft.Extensions.Http.Resilience": { - "type": "CentralTransitive", - "requested": "[9.10.0, )", - "resolved": "9.10.0", - "contentHash": "4Bt58q+Oqpj4VYm3T7hcmsb1zVhmUTNNggDkjlWBIv3bv6MVRPGqIokK2tRHsD8bM4i3GkJLRWe8lQwbsWS6PQ==", - "dependencies": { - "Microsoft.Extensions.Http.Diagnostics": "9.10.0", - "Microsoft.Extensions.ObjectPool": "8.0.21", - "Microsoft.Extensions.Resilience": "9.10.0" - } - }, - "Microsoft.Extensions.Logging.Abstractions": { - "type": "CentralTransitive", - "requested": "[9.0.11, )", - "resolved": "9.0.11", - "contentHash": "UKWFTDwtZQIoypyt1YPVsxTnDK+0sKn26+UeSGeNlkRQddrkt9EC6kP4g94rgO/WOZkz94bKNlF1dVZN3QfPFQ==", - "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.11", - "System.Diagnostics.DiagnosticSource": "9.0.11" - } - } - } - } -} \ No newline at end of file diff --git a/tests/Visus.AddressValidation.SourceGeneration.Tests/packages.lock.json b/tests/Visus.AddressValidation.SourceGeneration.Tests/packages.lock.json deleted file mode 100644 index feb5f16..0000000 --- a/tests/Visus.AddressValidation.SourceGeneration.Tests/packages.lock.json +++ /dev/null @@ -1,850 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "coverlet.collector": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==" - }, - "coverlet.msbuild": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "Qa7Hg+wrOMDKpXVn2dw4Wlun490bIWsFW0fdNJQFJLZnbU27MCP0HJ2mPgS+3EQBQUb0zKlkwiQzP+j38Hc3Iw==" - }, - "JunitXml.TestLogger": { - "type": "Direct", - "requested": "[7.0.2, )", - "resolved": "7.0.2", - "contentHash": "f6swYzT8DOVS6byaz1f7SYT06aoZTFXooLlJFX9Da3JB1/RLK+Z0UW1Q33NqMX+T9JFpal276qAJfPVUp96qbg==" - }, - "Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing": { - "type": "Direct", - "requested": "[1.1.2, )", - "resolved": "1.1.2", - "contentHash": "mzi4VHeskAZ7KzORK9xuK/fEAMWS0UfQJ+HbbDVaIiG8khJWIZkMka5a6X5lHW/cOq51sxHv40Ggy95jgEDVgw==", - "dependencies": { - "Microsoft.CodeAnalysis.CSharp.Workspaces": "3.8.0", - "Microsoft.CodeAnalysis.SourceGenerators.Testing": "[1.1.2]" - } - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", - "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" - } - }, - "Verify.DiffPlex": { - "type": "Direct", - "requested": "[3.1.2, )", - "resolved": "3.1.2", - "contentHash": "ySaQ+MffcDfGWzBXB9UHppEGBqzl0L+2CxZcT04xQ3gugsN5AAjBPHkt75Ca61PlAeZCyty/p/Q9ZwaQjNOoTg==", - "dependencies": { - "DiffPlex": "1.7.2", - "Verify": "27.0.0" - } - }, - "Verify.SourceGenerators": { - "type": "Direct", - "requested": "[2.5.0, )", - "resolved": "2.5.0", - "contentHash": "XhAg+fJDPXDH7Ajv/J4Hv8ls0zoeK0LqjZIiOT+quwxOqdplcTuqdPx1+4p1qvYzpTdwkLxyGiIA76MzCljyAQ==", - "dependencies": { - "Verify": "26.5.0" - } - }, - "Verify.Xunit": { - "type": "Direct", - "requested": "[31.8.0, )", - "resolved": "31.8.0", - "contentHash": "f+oaf/znLk/aeX6nAK9z8gjAuAnpZPSr9vixHAMveS6G3FP9dBCDCvu7UsZUKBQLgVT17Ie38LkXvmFgLx7Aqw==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2", - "Verify": "31.8.0", - "xunit.abstractions": "2.0.3", - "xunit.extensibility.execution": "2.9.3" - } - }, - "xunit": { - "type": "Direct", - "requested": "[2.9.3, )", - "resolved": "2.9.3", - "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", - "dependencies": { - "xunit.analyzers": "1.18.0", - "xunit.assert": "2.9.3", - "xunit.core": "[2.9.3]" - } - }, - "xunit.runner.visualstudio": { - "type": "Direct", - "requested": "[3.1.5, )", - "resolved": "3.1.5", - "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" - }, - "Argon": { - "type": "Transitive", - "resolved": "0.33.0", - "contentHash": "4MIj5MosLqRlKAz16Ir5rz1gyocC6npJGGXqkTIIVby0yPYKk56Lm9X5tEQv6MbStLUOv3aDfya6FKAqcRhxTA==" - }, - "DiffEngine": { - "type": "Transitive", - "resolved": "17.0.1", - "contentHash": "GZ1w8uedF2CpcJzwPJkBMYRVJRETbmmqKAqhTJlIMRiKeEYk68yTXZIXS+7fSwx8jgK5loGhKPyZYPxqXCn2oA==", - "dependencies": { - "EmptyFiles": "8.17.1", - "System.Management": "8.0.0" - } - }, - "DiffPlex": { - "type": "Transitive", - "resolved": "1.7.2", - "contentHash": "qJEjdxEDBWSFZGB8paBB9HDeJXHGlHlOXeGX3kbTuXWuOsgv2iSAEOOzo5V1/B39Vcxr9IVVrNKewRcX+rsn4g==" - }, - "EmptyFiles": { - "type": "Transitive", - "resolved": "8.17.1", - "contentHash": "pVmxBQer9yeFhYg6X27YMB/RDxYT99ms5QD8IT2KTj/WzygRtWZ0l7jlk4I4aAztNT7QjvHQ6tQ1/ox07C552A==" - }, - "Humanizer.Core": { - "type": "Transitive", - "resolved": "2.14.1", - "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==" - }, - "Microsoft.CodeAnalysis.Analyzer.Testing": { - "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "g6cSJMPlmTiEHakCKaTobNISbf4jfjNF38YK8V4azAgcV9CE4BxuGQSWW6eftHs43q7mhKOr1lioKsTVQmUc1g==", - "dependencies": { - "DiffPlex": "1.7.2", - "Microsoft.CodeAnalysis.Workspaces.Common": "1.0.1", - "Microsoft.VisualStudio.Composition": "16.1.8", - "NuGet.Common": "6.3.4", - "NuGet.Packaging": "6.3.4", - "NuGet.Protocol": "6.3.4", - "NuGet.Resolver": "6.3.4" - } - }, - "Microsoft.CodeAnalysis.Analyzers": { - "type": "Transitive", - "resolved": "3.3.4", - "contentHash": "AxkxcPR+rheX0SmvpLVIGLhOUXAKG56a64kV9VQZ4y9gR9ZmPXnqZvHJnmwLSwzrEP6junUF11vuc+aqo5r68g==" - }, - "Microsoft.CodeAnalysis.Common": { - "type": "Transitive", - "resolved": "4.11.0", - "contentHash": "djf8ujmqYImFgB04UGtcsEhHrzVqzHowS+EEl/Yunc5LdrYrZhGBWUTXoCF0NzYXJxtfuD+UVQarWpvrNc94Qg==", - "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "3.3.4", - "System.Collections.Immutable": "8.0.0", - "System.Reflection.Metadata": "8.0.0" - } - }, - "Microsoft.CodeAnalysis.CSharp": { - "type": "Transitive", - "resolved": "4.11.0", - "contentHash": "6XYi2EusI8JT4y2l/F3VVVS+ISoIX9nqHsZRaG6W5aFeJ5BEuBosHfT/ABb73FN0RZ1Z3cj2j7cL28SToJPXOw==", - "dependencies": { - "Microsoft.CodeAnalysis.Analyzers": "3.3.4", - "Microsoft.CodeAnalysis.Common": "[4.11.0]", - "System.Collections.Immutable": "8.0.0", - "System.Reflection.Metadata": "8.0.0" - } - }, - "Microsoft.CodeAnalysis.SourceGenerators.Testing": { - "type": "Transitive", - "resolved": "1.1.2", - "contentHash": "m+E8+ovSIYUVXMijWKdPhvnWpOBB/ms+3hunlPiWY8iJkyrT5GKFtRUPevEUKuL75t5+I3SnEAwvsHL29WJSGQ==", - "dependencies": { - "DiffPlex": "1.7.2", - "Microsoft.CodeAnalysis.Analyzer.Testing": "[1.1.2]", - "Microsoft.CodeAnalysis.Workspaces.Common": "3.8.0" - } - }, - "Microsoft.CodeAnalysis.Workspaces.Common": { - "type": "Transitive", - "resolved": "4.11.0", - "contentHash": "UtwEt42V7/LnvAcschSlmUXRLEj0poX1H7QeFbY5bezcS+tJBCssAq8C7GfisgIA0qZPo2xzOrwKGBbg51CetA==", - "dependencies": { - "Humanizer.Core": "2.14.1", - "Microsoft.CodeAnalysis.Analyzers": "3.3.4", - "Microsoft.CodeAnalysis.Common": "[4.11.0]", - "System.Collections.Immutable": "8.0.0", - "System.Composition": "8.0.0", - "System.IO.Pipelines": "8.0.0", - "System.Reflection.Metadata": "8.0.0", - "System.Threading.Channels": "7.0.0" - } - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.NETCore.Platforms": { - "type": "Transitive", - "resolved": "2.0.0", - "contentHash": "VdLJOCXhZaEMY7Hm2GKiULmn7IEPFE4XC5LPSfBVCUIA8YLZVh846gtfBJalsPQF2PlzdD7ecX7DZEulJ402ZQ==" - }, - "Microsoft.NETCore.Targets": { - "type": "Transitive", - "resolved": "1.1.0", - "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", - "dependencies": { - "System.Reflection.Metadata": "8.0.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", - "Newtonsoft.Json": "13.0.3" - } - }, - "Microsoft.VisualStudio.Composition": { - "type": "Transitive", - "resolved": "16.1.8", - "contentHash": "N+thv3dcT7kjn0Xz3U0uBm2CH4uoaMvH8wC6Gy2HWx7HLNdEpqGoMraLyoBdizmypD1owLCJQIa2uKmWe4/o8A==", - "dependencies": { - "Microsoft.VisualStudio.Composition.NetFxAttributes": "16.1.8", - "Microsoft.VisualStudio.Validation": "15.0.82", - "System.Composition": "1.0.31", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Metadata": "1.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Threading.Tasks.Dataflow": "4.6.0" - } - }, - "Microsoft.VisualStudio.Composition.NetFxAttributes": { - "type": "Transitive", - "resolved": "16.1.8", - "contentHash": "EbwZWTvdzit68qZSuTI8nd1PZ87pYjhpCwtsis8lrUKJ7XLdbE5rxY6YrY7OFze+YUsguzqZlNjX4Yn5nL9qBw==", - "dependencies": { - "System.ComponentModel.Composition": "4.5.0" - } - }, - "Microsoft.VisualStudio.Validation": { - "type": "Transitive", - "resolved": "15.0.82", - "contentHash": "XwZyVCsHuEtnd6nYScJnA8XkXPzy4Ok0DV5/hqqAe5ccgOhJ6yap7Qh/sU/i6QxEzuYyECPYDQ7IOyEQ3yRQgQ==" - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "NuGet.Common": { - "type": "Transitive", - "resolved": "6.3.4", - "contentHash": "wKuTiB3RBjbvzB/BhW8+Cu+TTPsABJr91I2Guu/FuM0SXtYRIM26v1NJdwm5rLw59CqB7bamqpWpJKU8bLAdwQ==", - "dependencies": { - "NuGet.Frameworks": "6.3.4" - } - }, - "NuGet.Configuration": { - "type": "Transitive", - "resolved": "6.3.4", - "contentHash": "b+/g6sdnR2128KLn+6qO1MrB8j0goO4kYCFly2RDi/BsLilK+MzKJRHWGYqfMn/YnLmMrgNNJ2sSr4GX7rMEQw==", - "dependencies": { - "NuGet.Common": "6.3.4", - "System.Security.Cryptography.ProtectedData": "4.4.0" - } - }, - "NuGet.Frameworks": { - "type": "Transitive", - "resolved": "6.3.4", - "contentHash": "befpN1xKohg8rss3XLWo7t4UDfh8OQ6SbDohJSM7SR4uNyzm0haJJYyky+9L9GDs+yJHqiTNJYqOb1GDyVVYVg==" - }, - "NuGet.Packaging": { - "type": "Transitive", - "resolved": "6.3.4", - "contentHash": "0HtJXNCes0443jKeFErjhYxJ08BjyoDrIvw/uWyonoTBQ3B//+H2nztviSUyv0+ydfgKyhwshAjsr0efUT8PRA==", - "dependencies": { - "Newtonsoft.Json": "13.0.1", - "NuGet.Configuration": "6.3.4", - "NuGet.Versioning": "6.3.4", - "System.Security.Cryptography.Cng": "5.0.0", - "System.Security.Cryptography.Pkcs": "5.0.0" - } - }, - "NuGet.Protocol": { - "type": "Transitive", - "resolved": "6.3.4", - "contentHash": "Gmvnz7RoN6UG3POw0F4t9mWM4sIdmHiuutvR9c2pLCJCUiYBN8QvbO/ZvkOuQNNM/aGdYExx/Tm84Zx9iVjOSA==", - "dependencies": { - "NuGet.Packaging": "6.3.4" - } - }, - "NuGet.Resolver": { - "type": "Transitive", - "resolved": "6.3.4", - "contentHash": "cO/QqtGqCIUf/e6EncIQ/ORJDco9UOtxooDL0IZhf18x1l0xFJ/nrcLCyAjZeznE9RAIqaNv1+YFobht4u0Lsw==", - "dependencies": { - "NuGet.Protocol": "6.3.4" - } - }, - "NuGet.Versioning": { - "type": "Transitive", - "resolved": "6.3.4", - "contentHash": "mQW9bwsWJq30lacl33MMVLBlrit5ClNEpGzKryIuLfP1UTL6feQK1yzA/5IQXdtjXvUEoI5bo1Axjen5lOm7Bg==" - }, - "SimpleInfoName": { - "type": "Transitive", - "resolved": "3.1.2", - "contentHash": "/OoEZQxSW6DeTJ9nfrg8BLCOCWpxBiWHV4NkG3t+Xpe8tvzm7yCwKwxkhpauMl3fg9OjlIjJMKX61H6VavLkrw==" - }, - "System.CodeDom": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==" - }, - "System.Collections": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Collections.Concurrent": { - "type": "Transitive", - "resolved": "4.0.12", - "contentHash": "2gBcbb3drMLgxlI0fBfxMA31ec6AEyYCHygGse4vxceJan8mRIWeKJ24BFzN7+bi/NFTgdIgufzb94LWO5EERQ==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Diagnostics.Tracing": "4.1.0", - "System.Globalization": "4.0.11", - "System.Reflection": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11", - "System.Threading.Tasks": "4.0.11" - } - }, - "System.Collections.Immutable": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" - }, - "System.ComponentModel.Composition": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "+iB9FoZnfdqMEGq6np28X6YNSUrse16CakmIhV3h6PxEWt7jYxUN3Txs1D8MZhhf4QmyvK0F/EcIN0f4gGN0dA==", - "dependencies": { - "System.Security.Permissions": "4.5.0" - } - }, - "System.Composition": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "E9oO9olNNxA39J8CxQwf7ceIPm+j/B/PhYpyK9M4LhN/OLLRw6u5fNInkhVqaWueMB9iXxYqnwqwgz+W91loIA==", - "dependencies": { - "System.Composition.AttributedModel": "8.0.0", - "System.Composition.Convention": "8.0.0", - "System.Composition.Hosting": "8.0.0", - "System.Composition.Runtime": "8.0.0", - "System.Composition.TypedParts": "8.0.0" - } - }, - "System.Composition.AttributedModel": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "NyElSuvmBMYdn2iPG0n29i7Igu0bq99izOP3MAtEwskY3OP9jqsavvVmPn9lesVaj/KT/o/QkNjA43dOJTsDQw==" - }, - "System.Composition.Convention": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "UuVkc1B3vQU/LzEbWLMZ1aYVssv4rpShzf8wPEyrUqoGNqdYKREmB8bXR73heOMKkwS6ZnPz3PjGODT2MenukQ==", - "dependencies": { - "System.Composition.AttributedModel": "8.0.0" - } - }, - "System.Composition.Hosting": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "qwbONqoxlazxcbiohvb3t1JWZgKIKcRdXS5uEeLbo5wtuBupIbAvdC3PYTAeBCZrZeERvrtAbhYHuuS43Zr1bQ==", - "dependencies": { - "System.Composition.Runtime": "8.0.0" - } - }, - "System.Composition.Runtime": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "G+kRyB5/6+3ucRRQz+DF4uSHGqpkK8Q4ilVdbt4zvxpmvLVZNmSkyFAQpJLcbOyVF85aomJx0m+TGMDVlwx7ZQ==" - }, - "System.Composition.TypedParts": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "DsSklhuA+Dsgo3ZZrar8hjBFvq1wa1grrkNCTt+6SoX3vq0Vy+HXJnVXrU/nNH1BjlGH684A7h4hJQHZd/u5mA==", - "dependencies": { - "System.Composition.AttributedModel": "8.0.0", - "System.Composition.Hosting": "8.0.0", - "System.Composition.Runtime": "8.0.0" - } - }, - "System.Diagnostics.Debug": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Diagnostics.Tracing": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "vDN1PoMZCkkdNjvZLql592oYJZgS7URcJzJ7bxeBgGtx5UtR5leNm49VmfHGqIffX4FKacHbI3H6UyNSHQknBg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Dynamic.Runtime": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Globalization": "4.0.11", - "System.Linq": "4.1.0", - "System.Linq.Expressions": "4.1.0", - "System.ObjectModel": "4.0.12", - "System.Reflection": "4.1.0", - "System.Reflection.Emit": "4.0.1", - "System.Reflection.Emit.ILGeneration": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - } - }, - "System.Formats.Asn1": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "MTvUIktmemNB+El0Fgw9egyqT9AYSIk6DTJeoDSpc3GIHxHCMo8COqkWT1mptX5tZ1SlQ6HJZ0OsSvMth1c12w==" - }, - "System.Globalization": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.IO": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - } - }, - "System.IO.Pipelines": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==" - }, - "System.Linq": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "bQ0iYFOQI0nuTnt+NQADns6ucV4DUvMdwN6CbkB1yj8i7arTGiTN5eok1kQwdnnNWSDZfIUySQY+J3d5KjWn0g==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0" - } - }, - "System.Linq.Expressions": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "I+y02iqkgmCAyfbqOmSDOgqdZQ5tTj80Akm5BPSS8EeB0VGWdy6X1KCoYe8Pk6pwDoAKZUOdLVxnTJcExiv5zw==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Globalization": "4.0.11", - "System.IO": "4.1.0", - "System.Linq": "4.1.0", - "System.ObjectModel": "4.0.12", - "System.Reflection": "4.1.0", - "System.Reflection.Emit": "4.0.1", - "System.Reflection.Emit.ILGeneration": "4.0.1", - "System.Reflection.Emit.Lightweight": "4.0.1", - "System.Reflection.Extensions": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - } - }, - "System.Management": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", - "dependencies": { - "System.CodeDom": "8.0.0" - } - }, - "System.ObjectModel": { - "type": "Transitive", - "resolved": "4.0.12", - "contentHash": "tAgJM1xt3ytyMoW4qn4wIqgJYm7L7TShRZG4+Q4Qsi2PCcj96pXN7nRywS9KkB3p/xDUjc2HSwP9SROyPYDYKQ==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Threading": "4.0.11" - } - }, - "System.Reflection": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.ILGeneration": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.Emit.Lightweight": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "sSzHHXueZ5Uh0OLpUQprhr+ZYJrLPA2Cmr4gn0wj9+FftNKXx8RIMKvO9qnjk2ebPYUjZ+F2ulGdPOsvj+MEjA==", - "dependencies": { - "System.Reflection": "4.1.0", - "System.Reflection.Emit.ILGeneration": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Reflection.Extensions": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "GYrtRsZcMuHF3sbmRHfMYpvxZoIN2bQGrYGerUiWLEkqdEUQZhH3TRSaC/oI4wO0II1RKBPlpIa1TOMxIcOOzQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Reflection": "4.1.0", - "System.Runtime": "4.1.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", - "dependencies": { - "System.Collections.Immutable": "8.0.0" - } - }, - "System.Reflection.Primitives": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Reflection.TypeExtensions": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - } - }, - "System.Resources.ResourceManager": { - "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Globalization": "4.0.11", - "System.Reflection": "4.1.0", - "System.Runtime": "4.1.0" - } - }, - "System.Runtime": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - } - }, - "System.Runtime.Extensions": { - "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "Microsoft.NETCore.Targets": "1.0.1", - "System.Runtime": "4.1.0" - } - }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "vW8Eoq0TMyz5vAG/6ce483x/CP83fgm4SJe5P8Tb1tZaobcvPrbMEL7rhH1DRdrYbbb6F0vq3OlzmK0Pkwks5A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Security.Principal.Windows": "4.5.0" - } - }, - "System.Security.Cryptography.Cng": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==", - "dependencies": { - "System.Formats.Asn1": "5.0.0" - } - }, - "System.Security.Cryptography.Pkcs": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "9TPLGjBCGKmNvG8pjwPeuYy0SMVmGZRwlTZvyPHDbYv/DRkoeumJdfumaaDNQzVGMEmbWtg07zUpSW9q70IlDQ==", - "dependencies": { - "System.Formats.Asn1": "5.0.0", - "System.Security.Cryptography.Cng": "5.0.0" - } - }, - "System.Security.Cryptography.ProtectedData": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "cJV7ScGW7EhatRsjehfvvYVBvtiSMKgN8bOVI0bQhnF5bU7vnHVIsH49Kva7i7GWaWYvmEzkYVk1TC+gZYBEog==" - }, - "System.Security.Permissions": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "9gdyuARhUR7H+p5CjyUB/zPk7/Xut3wUSP8NJQB6iZr8L3XUXTMdoLeVAg9N4rqF8oIpE7MpdqHdDHQ7XgJe0g==", - "dependencies": { - "System.Security.AccessControl": "4.5.0" - } - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0" - } - }, - "System.Text.Encoding": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading": { - "type": "Transitive", - "resolved": "4.0.11", - "contentHash": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", - "dependencies": { - "System.Runtime": "4.1.0", - "System.Threading.Tasks": "4.0.11" - } - }, - "System.Threading.Channels": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "qmeeYNROMsONF6ndEZcIQ+VxR4Q/TX/7uIVLJqtwIWL7dDWeh0l1UIqgo4wYyjG//5lUNhwkLDSFl+pAWO6oiA==" - }, - "System.Threading.Tasks": { - "type": "Transitive", - "resolved": "4.3.0", - "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - } - }, - "System.Threading.Tasks.Dataflow": { - "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "2hRjGu2r2jxRZ55wmcHO/WbdX+YAOz9x6FE8xqkHZgPaoFMKQZRe9dk8xTZIas8fRjxRmzawnTEWIrhlM+Un7w==", - "dependencies": { - "System.Collections": "4.0.11", - "System.Collections.Concurrent": "4.0.12", - "System.Diagnostics.Debug": "4.0.11", - "System.Diagnostics.Tracing": "4.1.0", - "System.Dynamic.Runtime": "4.0.11", - "System.Linq": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11", - "System.Threading.Tasks": "4.0.11" - } - }, - "Verify": { - "type": "Transitive", - "resolved": "31.8.0", - "contentHash": "xZFQX/xVM8rCG1LkXVSBi7cp+eujrE++RDTMMztw6Vt1KjoETFsr8hd0uwYHmIDpvHu/vK877WVn8XVMxDHFfA==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2" - } - }, - "xunit.abstractions": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" - }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.18.0", - "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]", - "xunit.extensibility.execution": "[2.9.3]" - } - }, - "xunit.extensibility.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", - "dependencies": { - "xunit.abstractions": "2.0.3" - } - }, - "xunit.extensibility.execution": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]" - } - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "visus.addressvalidation.sourcegeneration": { - "type": "Project" - }, - "Microsoft.CodeAnalysis.CSharp.Workspaces": { - "type": "CentralTransitive", - "requested": "[4.11.0, 4.11.0]", - "resolved": "4.11.0", - "contentHash": "/oRJPIMvzOfiunIegSF6FEa4VvBAUSXlbLDKxyzXuOZN9nLHg3fHuX6Mr9JZLNIupbe2xqQZEmfsPxgB01vCmg==", - "dependencies": { - "Humanizer.Core": "2.14.1", - "Microsoft.CodeAnalysis.Analyzers": "3.3.4", - "Microsoft.CodeAnalysis.CSharp": "[4.11.0]", - "Microsoft.CodeAnalysis.Common": "[4.11.0]", - "Microsoft.CodeAnalysis.Workspaces.Common": "[4.11.0]", - "System.Collections.Immutable": "8.0.0", - "System.Composition": "8.0.0", - "System.IO.Pipelines": "8.0.0", - "System.Reflection.Metadata": "8.0.0", - "System.Threading.Channels": "7.0.0" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - } - } - } -} \ No newline at end of file diff --git a/tests/Visus.AddressValidation.Tests/packages.lock.json b/tests/Visus.AddressValidation.Tests/packages.lock.json deleted file mode 100644 index 3270e99..0000000 --- a/tests/Visus.AddressValidation.Tests/packages.lock.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "version": 2, - "dependencies": { - "net8.0": { - "coverlet.collector": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "lkhqpF8Pu2Y7IiN7OntbsTtdbpR1syMsm2F3IgX6ootA4ffRqWL5jF7XipHuZQTdVuWG/gVAAcf8mjk8Tz0xPg==" - }, - "coverlet.msbuild": { - "type": "Direct", - "requested": "[6.0.4, )", - "resolved": "6.0.4", - "contentHash": "Qa7Hg+wrOMDKpXVn2dw4Wlun490bIWsFW0fdNJQFJLZnbU27MCP0HJ2mPgS+3EQBQUb0zKlkwiQzP+j38Hc3Iw==" - }, - "JunitXml.TestLogger": { - "type": "Direct", - "requested": "[7.0.2, )", - "resolved": "7.0.2", - "contentHash": "f6swYzT8DOVS6byaz1f7SYT06aoZTFXooLlJFX9Da3JB1/RLK+Z0UW1Q33NqMX+T9JFpal276qAJfPVUp96qbg==" - }, - "Microsoft.NET.Test.Sdk": { - "type": "Direct", - "requested": "[18.0.1, )", - "resolved": "18.0.1", - "contentHash": "WNpu6vI2rA0pXY4r7NKxCN16XRWl5uHu6qjuyVLoDo6oYEggIQefrMjkRuibQHm/NslIUNCcKftvoWAN80MSAg==", - "dependencies": { - "Microsoft.CodeCoverage": "18.0.1", - "Microsoft.TestPlatform.TestHost": "18.0.1" - } - }, - "NSubstitute": { - "type": "Direct", - "requested": "[5.3.0, )", - "resolved": "5.3.0", - "contentHash": "lJ47Cps5Qzr86N99lcwd+OUvQma7+fBgr8+Mn+aOC0WrlqMNkdivaYD9IvnZ5Mqo6Ky3LS7ZI+tUq1/s9ERd0Q==", - "dependencies": { - "Castle.Core": "5.1.1" - } - }, - "PublicApiGenerator": { - "type": "Direct", - "requested": "[11.5.4, )", - "resolved": "11.5.4", - "contentHash": "Va382WG4Vng8kCtDaAP5solqbhayMMlW1E+e/DV/w39yJPybmMgy8fbdUvvQgG93EMILx7JtJbGS1HRhVNTUVQ==", - "dependencies": { - "Mono.Cecil": "0.11.6", - "System.CodeDom": "6.0.0" - } - }, - "Verify.Xunit": { - "type": "Direct", - "requested": "[31.8.0, )", - "resolved": "31.8.0", - "contentHash": "f+oaf/znLk/aeX6nAK9z8gjAuAnpZPSr9vixHAMveS6G3FP9dBCDCvu7UsZUKBQLgVT17Ie38LkXvmFgLx7Aqw==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2", - "Verify": "31.8.0", - "xunit.abstractions": "2.0.3", - "xunit.extensibility.execution": "2.9.3" - } - }, - "xunit": { - "type": "Direct", - "requested": "[2.9.3, )", - "resolved": "2.9.3", - "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==", - "dependencies": { - "xunit.analyzers": "1.18.0", - "xunit.assert": "2.9.3", - "xunit.core": "[2.9.3]" - } - }, - "xunit.runner.visualstudio": { - "type": "Direct", - "requested": "[3.1.5, )", - "resolved": "3.1.5", - "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA==" - }, - "Argon": { - "type": "Transitive", - "resolved": "0.33.0", - "contentHash": "4MIj5MosLqRlKAz16Ir5rz1gyocC6npJGGXqkTIIVby0yPYKk56Lm9X5tEQv6MbStLUOv3aDfya6FKAqcRhxTA==" - }, - "Castle.Core": { - "type": "Transitive", - "resolved": "5.1.1", - "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==", - "dependencies": { - "System.Diagnostics.EventLog": "6.0.0" - } - }, - "DiffEngine": { - "type": "Transitive", - "resolved": "17.0.1", - "contentHash": "GZ1w8uedF2CpcJzwPJkBMYRVJRETbmmqKAqhTJlIMRiKeEYk68yTXZIXS+7fSwx8jgK5loGhKPyZYPxqXCn2oA==", - "dependencies": { - "EmptyFiles": "8.17.1", - "System.Management": "8.0.0" - } - }, - "EmptyFiles": { - "type": "Transitive", - "resolved": "8.17.1", - "contentHash": "pVmxBQer9yeFhYg6X27YMB/RDxYT99ms5QD8IT2KTj/WzygRtWZ0l7jlk4I4aAztNT7QjvHQ6tQ1/ox07C552A==" - }, - "Microsoft.CodeCoverage": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "O+utSr97NAJowIQT/OVp3Lh9QgW/wALVTP4RG1m2AfFP4IyJmJz0ZBmFJUsRQiAPgq6IRC0t8AAzsiPIsaUDEA==" - }, - "Microsoft.Extensions.Primitives": { - "type": "Transitive", - "resolved": "10.0.0", - "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w==" - }, - "Microsoft.TestPlatform.ObjectModel": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "qT/mwMcLF9BieRkzOBPL2qCopl8hQu6A1P7JWAoj/FMu5i9vds/7cjbJ/LLtaiwWevWLAeD5v5wjQJ/l6jvhWQ==", - "dependencies": { - "System.Reflection.Metadata": "8.0.0" - } - }, - "Microsoft.TestPlatform.TestHost": { - "type": "Transitive", - "resolved": "18.0.1", - "contentHash": "uDJKAEjFTaa2wHdWlfo6ektyoh+WD4/Eesrwb4FpBFKsLGehhACVnwwTI4qD3FrIlIEPlxdXg3SyrYRIcO+RRQ==", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "18.0.1", - "Newtonsoft.Json": "13.0.3" - } - }, - "Mono.Cecil": { - "type": "Transitive", - "resolved": "0.11.6", - "contentHash": "f33RkDtZO8VlGXCtmQIviOtxgnUdym9xx/b1p9h91CRGOsJFxCFOFK1FDbVt1OCf1aWwYejUFa2MOQyFWTFjbA==" - }, - "Newtonsoft.Json": { - "type": "Transitive", - "resolved": "13.0.3", - "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==" - }, - "SimpleInfoName": { - "type": "Transitive", - "resolved": "3.1.2", - "contentHash": "/OoEZQxSW6DeTJ9nfrg8BLCOCWpxBiWHV4NkG3t+Xpe8tvzm7yCwKwxkhpauMl3fg9OjlIjJMKX61H6VavLkrw==" - }, - "System.CodeDom": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "WTlRjL6KWIMr/pAaq3rYqh0TJlzpouaQ/W1eelssHgtlwHAH25jXTkUphTYx9HaIIf7XA6qs/0+YhtLEQRkJ+Q==" - }, - "System.Collections.Immutable": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg==" - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" - }, - "System.Management": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "jrK22i5LRzxZCfGb+tGmke2VH7oE0DvcDlJ1HAKYU8cPmD8XnpUT0bYn2Gy98GEhGjtfbR/sxKTVb+dE770pfA==", - "dependencies": { - "System.CodeDom": "8.0.0" - } - }, - "System.Reflection.Metadata": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "ptvgrFh7PvWI8bcVqG5rsA/weWM09EnthFHR5SCnS6IN+P4mj6rE1lBDC4U8HL9/57htKAqy4KQ3bBj84cfYyQ==", - "dependencies": { - "System.Collections.Immutable": "8.0.0" - } - }, - "Verify": { - "type": "Transitive", - "resolved": "31.8.0", - "contentHash": "xZFQX/xVM8rCG1LkXVSBi7cp+eujrE++RDTMMztw6Vt1KjoETFsr8hd0uwYHmIDpvHu/vK877WVn8XVMxDHFfA==", - "dependencies": { - "Argon": "0.33.0", - "DiffEngine": "17.0.1", - "SimpleInfoName": "3.1.2" - } - }, - "xunit.abstractions": { - "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==" - }, - "xunit.analyzers": { - "type": "Transitive", - "resolved": "1.18.0", - "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ==" - }, - "xunit.assert": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==" - }, - "xunit.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]", - "xunit.extensibility.execution": "[2.9.3]" - } - }, - "xunit.extensibility.core": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==", - "dependencies": { - "xunit.abstractions": "2.0.3" - } - }, - "xunit.extensibility.execution": { - "type": "Transitive", - "resolved": "2.9.3", - "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==", - "dependencies": { - "xunit.extensibility.core": "[2.9.3]" - } - }, - "visus.addressvalidation": { - "type": "Project", - "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "[10.0.0, )", - "Microsoft.Extensions.Configuration.Abstractions": "[10.0.0, )" - } - }, - "Microsoft.Extensions.Caching.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "Zcoy6H9mSoGyvr7UvlGokEZrlZkcPCICPZr8mCsSt9U/N8eeCwCXwKF5bShdA66R0obxBCwP4AxomQHvVkC/uA==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - }, - "Microsoft.Extensions.Configuration.Abstractions": { - "type": "CentralTransitive", - "requested": "[10.0.0, )", - "resolved": "10.0.0", - "contentHash": "d2kDKnCsJvY7mBVhcjPSp9BkJk48DsaHPg5u+Oy4f8XaOqnEedRy/USyvnpHL92wpJ6DrTPy7htppUUzskbCXQ==", - "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0" - } - } - } - } -} \ No newline at end of file From a5d68f502178ba86b569429e1335a17316abd776 Mon Sep 17 00:00:00 2001 From: Alan Brault Date: Fri, 27 Feb 2026 07:15:04 -0500 Subject: [PATCH 2/5] chore: remove demo project for now Signed-off-by: Alan Brault --- AddressValidation.slnx | 4 +- demo/src/AddressValidation.Demo/.gitignore | 9 - .../AddressValidation.Demo.csproj | 54 ---- demo/src/AddressValidation.Demo/App.razor | 42 --- .../Common/.editorconfig | 10 - .../Common/Components/LoadingIndicator.razor | 19 -- .../Components/LoadingIndicator.razor.cs | 78 ------ .../Components/LoadingIndicator.razor.css | 93 ------- .../Common/Components/SyntaxHighlighter.cs | 26 -- .../Common/MainLayout.razor | 39 --- .../Common/MainLayout.razor.cs | 6 - .../Common/MainLayout.razor.css | 18 -- .../SqliteConfigurationProvider.cs | 37 --- .../SqliteConfigurationSource.cs | 9 - .../Data/countries+states.db | Bin 819200 -> 0 bytes demo/src/AddressValidation.Demo/Dockerfile | 12 - .../ConfigurationBuilderExtensions.cs | 12 - .../Features/.editorconfig | 10 - .../Features/Error.razor | 40 --- .../Features/Index.razor | 3 - .../AbstractValidatorComponent.cs | 188 -------------- .../Features/Validators/FedEx.razor | 242 ------------------ .../Features/Validators/FedEx.razor.cs | 82 ------ .../Features/Validators/Google.razor | 222 ---------------- .../Features/Validators/Google.razor.cs | 65 ----- .../Features/Validators/PitneyBowes.razor | 239 ----------------- .../Features/Validators/PitneyBowes.razor.cs | 80 ------ .../Features/Validators/Ups.razor | 242 ------------------ .../Features/Validators/Ups.razor.cs | 80 ------ .../GlobalSupression.cs | 13 - .../Configuration/CountryConfig.cs | 21 -- .../Configuration/SettingsConfig.cs | 21 -- .../Configuration/StateConfig.cs | 22 -- .../Infrastructure/GeoContext.cs | 20 -- .../Infrastructure/GeoContextFactory.cs | 22 -- .../Abstractions/ICountryRepository.cs | 7 - .../Abstractions/ISettingsRepository.cs | 7 - .../Abstractions/ISqlRepository.cs | 48 ---- .../Abstractions/IStateRepository.cs | 7 - .../Abstractions/SqlRepository.Add.cs | 28 -- .../Abstractions/SqlRepository.Any.cs | 32 --- .../Abstractions/SqlRepository.Count.cs | 54 ---- .../Abstractions/SqlRepository.Delete.cs | 43 ---- .../Abstractions/SqlRepository.Get.cs | 24 -- .../Abstractions/SqlRepository.List.cs | 65 ----- .../Abstractions/SqlRepository.Max.cs | 32 --- .../Abstractions/SqlRepository.Min.cs | 32 --- .../Abstractions/SqlRepository.Update.cs | 44 ---- .../Abstractions/SqlRepository.cs | 109 -------- .../Repositories/CountryRepository.cs | 8 - .../Repositories/SettingsRepository.cs | 18 -- .../Repositories/StateRepository.cs | 8 - .../Infrastructure/SettingsContext.cs | 17 -- .../Infrastructure/SettingsContextFactory.cs | 22 -- .../Models/Entities/CountryModel.cs | 10 - .../Models/Entities/SettingsModel.cs | 17 -- .../Models/Entities/StateModel.cs | 14 - .../AbstractAddressValidationFormModel.cs | 101 -------- .../Forms/FedExAddressValidationFormModel.cs | 6 - .../Forms/GoogleAddressValidationFormModel.cs | 6 - .../Forms/GoogleApiSettingsFormModel.cs | 30 --- .../Models/Forms/OAuthApiSettingsFormModel.cs | 14 - .../PitneyBowesAddressValidationFormModel.cs | 13 - .../Forms/PitneyBowesApiSettingsFormModel.cs | 14 - .../Forms/UpsAddressValidationFormModel.cs | 6 - demo/src/AddressValidation.Demo/Program.cs | 111 -------- .../Properties/launchSettings.json | 48 ---- demo/src/AddressValidation.Demo/Routes.razor | 6 - .../Abstractions/IGeographyService.cs | 12 - .../Abstractions/ILoadingIndicatorService.cs | 20 -- .../Services/Abstractions/ISettingsService.cs | 6 - .../Services/GeographyService.cs | 173 ------------- .../Services/LoadingIndicatorService.cs | 148 ----------- .../Services/SettingsService.cs | 53 ---- .../src/AddressValidation.Demo/_Imports.razor | 13 - .../appsettings.Development.json | 8 - .../AddressValidation.Demo/appsettings.json | 9 - .../AddressValidation.Demo/wwwroot/app.css | 53 ---- 78 files changed, 1 insertion(+), 3575 deletions(-) delete mode 100644 demo/src/AddressValidation.Demo/.gitignore delete mode 100644 demo/src/AddressValidation.Demo/AddressValidation.Demo.csproj delete mode 100644 demo/src/AddressValidation.Demo/App.razor delete mode 100644 demo/src/AddressValidation.Demo/Common/.editorconfig delete mode 100644 demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor delete mode 100644 demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor.cs delete mode 100644 demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor.css delete mode 100644 demo/src/AddressValidation.Demo/Common/Components/SyntaxHighlighter.cs delete mode 100644 demo/src/AddressValidation.Demo/Common/MainLayout.razor delete mode 100644 demo/src/AddressValidation.Demo/Common/MainLayout.razor.cs delete mode 100644 demo/src/AddressValidation.Demo/Common/MainLayout.razor.css delete mode 100644 demo/src/AddressValidation.Demo/Configuration/SqliteConfigurationProvider.cs delete mode 100644 demo/src/AddressValidation.Demo/Configuration/SqliteConfigurationSource.cs delete mode 100644 demo/src/AddressValidation.Demo/Data/countries+states.db delete mode 100644 demo/src/AddressValidation.Demo/Dockerfile delete mode 100644 demo/src/AddressValidation.Demo/Extensions/ConfigurationBuilderExtensions.cs delete mode 100644 demo/src/AddressValidation.Demo/Features/.editorconfig delete mode 100644 demo/src/AddressValidation.Demo/Features/Error.razor delete mode 100644 demo/src/AddressValidation.Demo/Features/Index.razor delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/Abstractions/AbstractValidatorComponent.cs delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/FedEx.razor delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/FedEx.razor.cs delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/Google.razor delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/Google.razor.cs delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/PitneyBowes.razor delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/PitneyBowes.razor.cs delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/Ups.razor delete mode 100644 demo/src/AddressValidation.Demo/Features/Validators/Ups.razor.cs delete mode 100644 demo/src/AddressValidation.Demo/GlobalSupression.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Configuration/CountryConfig.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Configuration/SettingsConfig.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Configuration/StateConfig.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/GeoContext.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/GeoContextFactory.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ICountryRepository.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ISettingsRepository.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ISqlRepository.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/IStateRepository.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Add.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Any.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Count.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Delete.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Get.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.List.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Max.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Min.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Update.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/CountryRepository.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/SettingsRepository.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/Repositories/StateRepository.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/SettingsContext.cs delete mode 100644 demo/src/AddressValidation.Demo/Infrastructure/SettingsContextFactory.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Entities/CountryModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Entities/SettingsModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Entities/StateModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Forms/Abstractions/AbstractAddressValidationFormModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Forms/FedExAddressValidationFormModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Forms/GoogleAddressValidationFormModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Forms/GoogleApiSettingsFormModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Forms/OAuthApiSettingsFormModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Forms/PitneyBowesAddressValidationFormModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Forms/PitneyBowesApiSettingsFormModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Models/Forms/UpsAddressValidationFormModel.cs delete mode 100644 demo/src/AddressValidation.Demo/Program.cs delete mode 100644 demo/src/AddressValidation.Demo/Properties/launchSettings.json delete mode 100644 demo/src/AddressValidation.Demo/Routes.razor delete mode 100644 demo/src/AddressValidation.Demo/Services/Abstractions/IGeographyService.cs delete mode 100644 demo/src/AddressValidation.Demo/Services/Abstractions/ILoadingIndicatorService.cs delete mode 100644 demo/src/AddressValidation.Demo/Services/Abstractions/ISettingsService.cs delete mode 100644 demo/src/AddressValidation.Demo/Services/GeographyService.cs delete mode 100644 demo/src/AddressValidation.Demo/Services/LoadingIndicatorService.cs delete mode 100644 demo/src/AddressValidation.Demo/Services/SettingsService.cs delete mode 100644 demo/src/AddressValidation.Demo/_Imports.razor delete mode 100644 demo/src/AddressValidation.Demo/appsettings.Development.json delete mode 100644 demo/src/AddressValidation.Demo/appsettings.json delete mode 100644 demo/src/AddressValidation.Demo/wwwroot/app.css diff --git a/AddressValidation.slnx b/AddressValidation.slnx index 8873990..4bbfc69 100644 --- a/AddressValidation.slnx +++ b/AddressValidation.slnx @@ -19,9 +19,7 @@ - - - + diff --git a/demo/src/AddressValidation.Demo/.gitignore b/demo/src/AddressValidation.Demo/.gitignore deleted file mode 100644 index 160739f..0000000 --- a/demo/src/AddressValidation.Demo/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Settings Database - -Data/settings.db -Data/Keys - -*.sqlite3-shm -*.sqlite3-wal -*.db-shm -*.db-wal diff --git a/demo/src/AddressValidation.Demo/AddressValidation.Demo.csproj b/demo/src/AddressValidation.Demo/AddressValidation.Demo.csproj deleted file mode 100644 index bfb0f03..0000000 --- a/demo/src/AddressValidation.Demo/AddressValidation.Demo.csproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - net8.0 - false - $(NoWarn);CA1724 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - - - - - - diff --git a/demo/src/AddressValidation.Demo/App.razor b/demo/src/AddressValidation.Demo/App.razor deleted file mode 100644 index ca7c35c..0000000 --- a/demo/src/AddressValidation.Demo/App.razor +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/demo/src/AddressValidation.Demo/Common/.editorconfig b/demo/src/AddressValidation.Demo/Common/.editorconfig deleted file mode 100644 index 377bce4..0000000 --- a/demo/src/AddressValidation.Demo/Common/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -# see https://github.com/dotnet/sdk/issues/39817 - -[*.razor.cs] -dotnet_diagnostic.CA1822.severity = suggestion -dotnet_diagnostic.CA1823.severity = suggestion -dotnet_diagnostic.IDE0044.severity = suggestion -dotnet_diagnostic.IDE0051.severity = suggestion -dotnet_diagnostic.IDE0052.severity = suggestion -dotnet_diagnostic.IDE0060.severity = none -dotnet_diagnostic.S1144.severity = suggestion diff --git a/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor b/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor deleted file mode 100644 index c2ac5ec..0000000 --- a/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor +++ /dev/null @@ -1,19 +0,0 @@ -@if (!IsLoading) -{ -
- - @ChildContent - - - @if (IsVisible) - { -
-
-
- } -
-} -else -{ -

Loading...

-} diff --git a/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor.cs b/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor.cs deleted file mode 100644 index 3146727..0000000 --- a/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor.cs +++ /dev/null @@ -1,78 +0,0 @@ -namespace AddressValidation.Demo.Common.Components; - -using System.Diagnostics.CodeAnalysis; -using Services.Abstractions; - -public sealed partial class LoadingIndicator : ComponentBase, IDisposable -{ - private ILoadingIndicatorService? _loadingIndicatorService; - - ~LoadingIndicator() - { - Dispose(); - } - - [Parameter] - public RenderFragment ChildContent { get; set; } = null!; - - [Parameter] - public bool IsLoading { get; set; } - - [Parameter] - public bool IsVisible { get; set; } - - [Parameter] - [SuppressMessage("Usage", "BL0007:Component parameters should be auto properties")] - public ILoadingIndicatorService? LoadingIndicatorService - { - get => _loadingIndicatorService; - set - { - if ( value != _loadingIndicatorService ) - { - _loadingIndicatorService?.Unsubscribe(this); - } - - _loadingIndicatorService = value; - _loadingIndicatorService?.Subscribe(this); - } - } - - public void Dispose() - { - _loadingIndicatorService = null; - GC.SuppressFinalize(this); - } - - public Task HideAsync() - { - return SetIsVisible(false); - } - - public Task ShowAsync() - { - return SetIsVisible(true); - } - - internal async Task SetIsLoading(bool value) - { - if ( IsLoading == value ) - { - return; - } - - IsLoading = value; - await InvokeAsync(StateHasChanged); - } - - internal async Task SetIsVisible(bool value) - { - if ( IsVisible == value ) - { - return; - } - - IsVisible = value; - await InvokeAsync(StateHasChanged); - } -} diff --git a/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor.css b/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor.css deleted file mode 100644 index 7b4f486..0000000 --- a/demo/src/AddressValidation.Demo/Common/Components/LoadingIndicator.razor.css +++ /dev/null @@ -1,93 +0,0 @@ -.avd-loader-wrapper { - position: relative; -} - -.avd-loader-container { - position: absolute; - top: 0; - left: 0; - background: rgb(255, 255, 255, 0.5); - width: 100%; - height: 100%; - z-index: 2147483647; -} - -.avd-loader-whirlpool, -.avd-loader-whirlpool::before, -.avd-loader-whirlpool::after { - position: absolute; - top: 50%; - left: 50%; - border: 1px solid rgb(204, 204, 204); - border-left-color: rgb(0, 0, 0); - border-radius: 974px; - -o-border-radius: 974px; - -ms-border-radius: 974px; - -webkit-border-radius: 974px; - -moz-border-radius: 974px; -} - -.avd-loader-whirlpool { - margin: -24px 0 0 -24px; - height: 49px; - width: 49px; - animation: avd-loader-rotate 1150ms linear infinite; - -o-animation: avd-loader-rotate 1150ms linear infinite; - -ms-animation: avd-loader-rotate 1150ms linear infinite; - -webkit-animation: avd-loader-rotate 1150ms linear infinite; - -moz-animation: avd-loader-rotate 1150ms linear infinite; -} - -.avd-loader-whirlpool::before { - content: ""; - margin: -22px 0 0 -22px; - height: 43px; - width: 43px; - animation: avd-loader-rotate 1150ms linear infinite; - -o-animation: avd-loader-rotate 1150ms linear infinite; - -ms-animation: avd-loader-rotate 1150ms linear infinite; - -webkit-animation: avd-loader-rotate 1150ms linear infinite; - -moz-animation: avd-loader-rotate 1150ms linear infinite; -} - -.avd-loader-whirlpool::after { - content: ""; - margin: -28px 0 0 -28px; - height: 55px; - width: 55px; - animation: avd-loader-rotate 2300ms linear infinite; - -o-animation: avd-loader-rotate 2300ms linear infinite; - -ms-animation: avd-loader-rotate 2300ms linear infinite; - -webkit-animation: avd-loader-rotate 2300ms linear infinite; - -moz-animation: avd-loader-rotate 2300ms linear infinite; -} - -@keyframes avd-loader-rotate { - 100% { - transform: rotate(360deg); - } -} - -@-o-keyframes avd-loader-rotate { - 100% { - -o-transform: rotate(360deg); - } -} - -@-ms-keyframes avd-loader-rotate { - 100% { - -ms-transform: rotate(360deg); - } -} - -@-webkit-keyframes avd-loader-rotate { - 100% { - -webkit-transform: rotate(360deg); - } -} - -@-moz-keyframes avd-loader-rotate { - 100% { - -moz-transform: rotate(360deg); - } -} diff --git a/demo/src/AddressValidation.Demo/Common/Components/SyntaxHighlighter.cs b/demo/src/AddressValidation.Demo/Common/Components/SyntaxHighlighter.cs deleted file mode 100644 index a41b05f..0000000 --- a/demo/src/AddressValidation.Demo/Common/Components/SyntaxHighlighter.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace AddressValidation.Demo.Common.Components; - -using Microsoft.AspNetCore.Components.Rendering; - -public sealed class SyntaxHighlighter : ComponentBase -{ - [Parameter] - public RenderFragment? ChildContent { get; set; } - - [Parameter] - public string Language { get; set; } = null!; - - protected override void BuildRenderTree(RenderTreeBuilder builder) - { - ArgumentNullException.ThrowIfNull(builder); - - builder.OpenElement(0, "pre"); - builder.OpenElement(1, "code"); - - builder.AddAttribute(2, "class", $"language-{Language}"); - builder.AddContent(3, ChildContent); - - builder.CloseElement(); - builder.CloseElement(); - } -} diff --git a/demo/src/AddressValidation.Demo/Common/MainLayout.razor b/demo/src/AddressValidation.Demo/Common/MainLayout.razor deleted file mode 100644 index 49be647..0000000 --- a/demo/src/AddressValidation.Demo/Common/MainLayout.razor +++ /dev/null @@ -1,39 +0,0 @@ -@inherits LayoutComponentBase - - - - - - - - - - - - - - - - - - - - -
- @Body -
-
- - - Designed for demonstration purposes only and should not be used in a Production - environment. - - -
- -
- An unhandled error has occurred. - Reload - 🗙 -
diff --git a/demo/src/AddressValidation.Demo/Common/MainLayout.razor.cs b/demo/src/AddressValidation.Demo/Common/MainLayout.razor.cs deleted file mode 100644 index 88e22e4..0000000 --- a/demo/src/AddressValidation.Demo/Common/MainLayout.razor.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace AddressValidation.Demo.Common; - -public partial class MainLayout : LayoutComponentBase -{ - private bool _isExpanded = true; -} diff --git a/demo/src/AddressValidation.Demo/Common/MainLayout.razor.css b/demo/src/AddressValidation.Demo/Common/MainLayout.razor.css deleted file mode 100644 index 0d26cfc..0000000 --- a/demo/src/AddressValidation.Demo/Common/MainLayout.razor.css +++ /dev/null @@ -1,18 +0,0 @@ -#blazor-error-ui { - background: lightyellow; - bottom: 0; - box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); - display: none; - left: 0; - padding: 0.6rem 1.25rem 0.7rem 1.25rem; - position: fixed; - width: 100%; - z-index: 1000; -} - -#blazor-error-ui .dismiss { - cursor: pointer; - position: absolute; - right: 0.75rem; - top: 0.5rem; -} diff --git a/demo/src/AddressValidation.Demo/Configuration/SqliteConfigurationProvider.cs b/demo/src/AddressValidation.Demo/Configuration/SqliteConfigurationProvider.cs deleted file mode 100644 index 7d0f34a..0000000 --- a/demo/src/AddressValidation.Demo/Configuration/SqliteConfigurationProvider.cs +++ /dev/null @@ -1,37 +0,0 @@ -namespace AddressValidation.Demo.Configuration; - -using Infrastructure; -using Infrastructure.Repositories; -using Microsoft.AspNetCore.DataProtection; -using Microsoft.Data.Sqlite; -using Microsoft.Extensions.Logging.Abstractions; -using Models.Entities; - -internal sealed class SqliteConfigurationProvider : ConfigurationProvider -{ - public override void Load() - { - string keysDirectory = Path.Join(AppDomain.CurrentDomain.GetData("DataDirectory")!.ToString(), "Keys"); - IDataProtectionProvider provider = DataProtectionProvider.Create(new DirectoryInfo(keysDirectory), - config => { config.SetApplicationName("AddressValidation.Demo"); }); - - SettingsContextFactory contextFactory = new(NullLoggerFactory.Instance); - SettingsRepository repository = new(contextFactory, NullLogger.Instance); - - try - { - IReadOnlyList items = repository.List(); - - IDataProtector protector = provider.CreateProtector("AddressValidation.Demo.Settings.V1"); - - Data = items.Select(s => new - { - s.Key, - Value = s.IsEncrypted ? protector.Unprotect(s.Value) : s.Value - }).ToDictionary(k => k.Key, string? (v) => v.Value); - } - catch ( SqliteException ) - { - } - } -} diff --git a/demo/src/AddressValidation.Demo/Configuration/SqliteConfigurationSource.cs b/demo/src/AddressValidation.Demo/Configuration/SqliteConfigurationSource.cs deleted file mode 100644 index a7d0f9b..0000000 --- a/demo/src/AddressValidation.Demo/Configuration/SqliteConfigurationSource.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AddressValidation.Demo.Configuration; - -internal sealed class SqliteConfigurationSource : IConfigurationSource -{ - public IConfigurationProvider Build(IConfigurationBuilder builder) - { - return new SqliteConfigurationProvider(); - } -} diff --git a/demo/src/AddressValidation.Demo/Data/countries+states.db b/demo/src/AddressValidation.Demo/Data/countries+states.db deleted file mode 100644 index d0933aad7a7e10f3b8bd58e75e996684249871de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819200 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ℜ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�CZpOIVYq7e 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 diff --git a/demo/src/AddressValidation.Demo/Dockerfile b/demo/src/AddressValidation.Demo/Dockerfile deleted file mode 100644 index b5b5960..0000000 --- a/demo/src/AddressValidation.Demo/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM mcr.microsoft.com/dotnet/aspnet:8.0-noble-chiseled-extra@sha256:1ec4c9605a8fc97d3c2045d46557e51d9ca54ba4f91339205be2e44bfb184732 - -WORKDIR /app - -COPY --chown=$APP_UID:$APP_UID .nuke/temp/AddressValidation.Demo/ . - -ENV ASPNETCORE_HTTP_PORTS=3000 -EXPOSE 3000 - -USER $APP_UID - -ENTRYPOINT ["dotnet", "AddressValidation.Demo.dll"] diff --git a/demo/src/AddressValidation.Demo/Extensions/ConfigurationBuilderExtensions.cs b/demo/src/AddressValidation.Demo/Extensions/ConfigurationBuilderExtensions.cs deleted file mode 100644 index ac83c8c..0000000 --- a/demo/src/AddressValidation.Demo/Extensions/ConfigurationBuilderExtensions.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace AddressValidation.Demo.Extensions; - -using Configuration; - -internal static class ConfigurationBuilderExtensions -{ - public static IConfigurationBuilder AddSqlite(this IConfigurationBuilder builder) - { - ArgumentNullException.ThrowIfNull(builder); - return builder.Add(new SqliteConfigurationSource()); - } -} diff --git a/demo/src/AddressValidation.Demo/Features/.editorconfig b/demo/src/AddressValidation.Demo/Features/.editorconfig deleted file mode 100644 index 377bce4..0000000 --- a/demo/src/AddressValidation.Demo/Features/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -# see https://github.com/dotnet/sdk/issues/39817 - -[*.razor.cs] -dotnet_diagnostic.CA1822.severity = suggestion -dotnet_diagnostic.CA1823.severity = suggestion -dotnet_diagnostic.IDE0044.severity = suggestion -dotnet_diagnostic.IDE0051.severity = suggestion -dotnet_diagnostic.IDE0052.severity = suggestion -dotnet_diagnostic.IDE0060.severity = none -dotnet_diagnostic.S1144.severity = suggestion diff --git a/demo/src/AddressValidation.Demo/Features/Error.razor b/demo/src/AddressValidation.Demo/Features/Error.razor deleted file mode 100644 index b9571fc..0000000 --- a/demo/src/AddressValidation.Demo/Features/Error.razor +++ /dev/null @@ -1,40 +0,0 @@ -@page "/Error" -@using System.Diagnostics - -Error - -

Error.

-

An error occurred while processing your request.

- -@if (ShowRequestId) -{ -

- Request ID: @RequestId -

-} - -

Development Mode

-

- Swapping to Development environment will display more detailed information about the error that - occurred. -

-

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT - environment variable to Development - and restarting the app. -

- -@code{ - [CascadingParameter] private HttpContext? HttpContext { get; set; } - - private string? RequestId { get; set; } - private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); - - protected override void OnInitialized() - { - RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; - } - -} diff --git a/demo/src/AddressValidation.Demo/Features/Index.razor b/demo/src/AddressValidation.Demo/Features/Index.razor deleted file mode 100644 index c9291d4..0000000 --- a/demo/src/AddressValidation.Demo/Features/Index.razor +++ /dev/null @@ -1,3 +0,0 @@ -@page "/" - -Address Validation Demo diff --git a/demo/src/AddressValidation.Demo/Features/Validators/Abstractions/AbstractValidatorComponent.cs b/demo/src/AddressValidation.Demo/Features/Validators/Abstractions/AbstractValidatorComponent.cs deleted file mode 100644 index 5ce66a4..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/Abstractions/AbstractValidatorComponent.cs +++ /dev/null @@ -1,188 +0,0 @@ -namespace AddressValidation.Demo.Features.Validators.Abstractions; - -using System.Text.Json; -using Common.Components; -using Microsoft.JSInterop; -using Models.Forms.Abstractions; -using Radzen; -using Services.Abstractions; -using Visus.AddressValidation.Abstractions; -using Visus.AddressValidation.Http; -using Visus.AddressValidation.Model; -using Visus.AddressValidation.Services; - -public abstract class AbstractValidatorComponent : ComponentBase - where TValidationRequest : AbstractAddressValidationRequest, new() - where TValidationFormModel : AbstractAddressValidationFormModel, new() -{ - private readonly JsonSerializerOptions _serializerOptions = new() - { - WriteIndented = true - }; - - protected TValidationFormModel AddressValidationFormModel { get; } = new(); - - protected bool IsCityOrTownDisabled - { - get - { - if ( string.IsNullOrWhiteSpace(AddressValidationFormModel.CityOrTown) || - string.IsNullOrWhiteSpace(AddressValidationFormModel.StateOrProvince) ) - { - return false; - } - - string? stateOrProvinceName = Provinces!.GetValueOrDefault(AddressValidationFormModel.StateOrProvince); - - return !string.IsNullOrWhiteSpace(stateOrProvinceName) - && string.Equals(stateOrProvinceName, - AddressValidationFormModel.CityOrTown, - StringComparison.OrdinalIgnoreCase); - } - } - - [Inject] - protected IConfiguration Configuration { get; set; } = null!; - - protected IReadOnlyDictionary Countries { get; private set; } = new Dictionary(); - - [Inject] - protected IGeographyService GeographyService { get; set; } = null!; - - [Inject] - protected IJSRuntime JsRuntime { get; set; } = null!; - - [Inject] - protected NotificationService NotificationService { get; set; } = null!; - - protected IReadOnlyDictionary Provinces { get; private set; } = new Dictionary(); - - protected MarkupString? RequestJson { get; private set; } - - protected LoadingIndicator RequestLoadingIndicator { get; set; } = null!; - - protected MarkupString? ResponseJson { get; private set; } - - protected LoadingIndicator ResponseLoadingIndicator { get; set; } = null!; - - protected LoadingIndicator SettingsLoadingIndicator { get; set; } = null!; - - [Inject] - protected ISettingsService SettingsService { get; set; } = null!; - - protected LoadingIndicator ValidateLoadingIndicator { get; set; } = null!; - - [Inject] - protected IAddressValidationService ValidationService { get; set; } = null!; - - protected virtual IEnumerable InitializeCountries() - { - yield break; - } - - protected async Task OnAddressValidationFormSubmitAsync() - { - await ValidateLoadingIndicator.ShowAsync(); - await RequestLoadingIndicator.ShowAsync(); - await ResponseLoadingIndicator.ShowAsync(); - - try - { - await RenderRequestJsonAsync(); - - IAddressValidationResponse? result = await ValidationService.ValidateAsync(AddressValidationFormModel.Request); - if ( result is not null ) - { - await RenderResponseJsonAsync(result); - } - } - finally - { - await ValidateLoadingIndicator.HideAsync(); - await RequestLoadingIndicator.HideAsync(); - await ResponseLoadingIndicator.HideAsync(); - } - } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if ( !firstRender ) - { - return; - } - - await ValidateLoadingIndicator.ShowAsync(); - - try - { - await Task.WhenAll(LoadCountriesAsync(), OnCountryChangedAsync()); - } - finally - { - await ValidateLoadingIndicator.HideAsync(); - } - } - - protected Task OnCountryChangedAsync() - { - if ( string.IsNullOrWhiteSpace(AddressValidationFormModel.Country) ) - { - return Task.CompletedTask; - } - - return Task.Run(async () => await GeographyService.ListProvincesAsDictionaryAsync(AddressValidationFormModel.Country)) - .ContinueWith(t => - { - Provinces = t.Result; - }, CancellationToken.None, TaskContinuationOptions.LongRunning, TaskScheduler.Default); - } - - protected override void OnInitialized() - { - AddressValidationFormModel.Country = nameof(CountryCode.US); - } - - protected Task OnProvinceChangedAsync() - { - if ( string.IsNullOrWhiteSpace(AddressValidationFormModel.Country) || - string.IsNullOrWhiteSpace(AddressValidationFormModel.StateOrProvince) ) - { - return Task.CompletedTask; - } - - return Task.Run(async () => await GeographyService.ListAutonomousCitiesAsync(AddressValidationFormModel.Country)) - .ContinueWith(t => - { - string? stateOrProvinceName = Provinces.GetValueOrDefault(AddressValidationFormModel.StateOrProvince); - if ( !string.IsNullOrWhiteSpace(stateOrProvinceName) && t.Result.Contains(stateOrProvinceName) ) - { - AddressValidationFormModel.CityOrTown = stateOrProvinceName; - } - }, CancellationToken.None, TaskContinuationOptions.LongRunning, TaskScheduler.Default); - } - - private Task LoadCountriesAsync() - { - return Task.Run(async () => await GeographyService.ListCountriesAsDictionaryAsync()) - .ContinueWith(t => - { - Countries = t.Result; - }, CancellationToken.None, TaskContinuationOptions.LongRunning, TaskScheduler.Default); - } - - private async Task RenderRequestJsonAsync() - { - string json = AddressValidationFormModel.ToJson(); - string result = await JsRuntime.InvokeAsync("highlightJson", json); - - RequestJson = new MarkupString(result); - } - - private async Task RenderResponseJsonAsync(IAddressValidationResponse response) - { - string json = JsonSerializer.Serialize(response, _serializerOptions); - string result = await JsRuntime.InvokeAsync("highlightJson", json); - - ResponseJson = new MarkupString(result); - } -} diff --git a/demo/src/AddressValidation.Demo/Features/Validators/FedEx.razor b/demo/src/AddressValidation.Demo/Features/Validators/FedEx.razor deleted file mode 100644 index ac2d242..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/FedEx.razor +++ /dev/null @@ -1,242 +0,0 @@ -@page "/validator/fedex" -@using AddressValidation.Demo.Models.Forms -@using Visus.AddressValidation.Abstractions -@inherits AddressValidation.Demo.Features.Validators.Abstractions.AbstractValidatorComponent - -FedEx Address Validation - -

FedEx Address Validation Dem1

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @if (Provinces.Count > 0) - { - - } - else - { - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @ResponseJson - - - - - @RequestJson - - - - - - diff --git a/demo/src/AddressValidation.Demo/Features/Validators/FedEx.razor.cs b/demo/src/AddressValidation.Demo/Features/Validators/FedEx.razor.cs deleted file mode 100644 index 466254a..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/FedEx.razor.cs +++ /dev/null @@ -1,82 +0,0 @@ -namespace AddressValidation.Demo.Features.Validators; - -using System.Diagnostics.CodeAnalysis; -using Abstractions; -using Configuration; -using Models.Forms; -using Radzen; -using Visus.AddressValidation.Abstractions; -using Visus.AddressValidation.Integration.FedEx; -using Visus.AddressValidation.Integration.FedEx.Http; - -[SuppressMessage("Naming", "CA1711:Identifiers should not have incorrect suffix")] -public partial class FedEx : AbstractValidatorComponent -{ - private readonly Dictionary _clientEnvironments = new(StringComparer.OrdinalIgnoreCase) - { - [nameof(ClientEnvironment.DEVELOPMENT)] = ClientEnvironment.DEVELOPMENT, - [nameof(ClientEnvironment.PRODUCTION)] = ClientEnvironment.PRODUCTION - }; - - private readonly OAuthApiSettingsFormModel _settingsFormModel = new(); - - protected override IEnumerable InitializeCountries() - { - return Constants.SupportedCountries; - } - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - - _settingsFormModel.AccountNumber = Configuration.GetValue(Constants.AccountNumberConfigurationKey); - - string? clientEnvironmentValue = Configuration.GetValue(Constants.ClientEnvironmentConfigurationKey); - if ( !Enum.TryParse(clientEnvironmentValue, out ClientEnvironment clientEnvironment) ) - { - _settingsFormModel.ClientEnvironment = ClientEnvironment.DEVELOPMENT; - } - - _settingsFormModel.ClientEnvironment = clientEnvironment; - _settingsFormModel.ClientId = Configuration.GetValue(Constants.ClientIdConfigurationKey); - _settingsFormModel.ClientSecret = Configuration.GetValue(Constants.ClientSecretConfigurationKey); - } - - private async Task OnSettingsFormSubmitAsync() - { - await SettingsLoadingIndicator.ShowAsync(); - - try - { - bool[] results = - [ - await SettingsService.AddOrUpdateAsync(Constants.AccountNumberConfigurationKey, _settingsFormModel.AccountNumber), - await SettingsService.AddOrUpdateAsync(Constants.ClientEnvironmentConfigurationKey, _settingsFormModel.ClientEnvironment.ToString()), - await SettingsService.AddOrUpdateAsync(Constants.ClientIdConfigurationKey, _settingsFormModel.ClientId, true), - await SettingsService.AddOrUpdateAsync(Constants.ClientSecretConfigurationKey, _settingsFormModel.ClientSecret, true) - ]; - - if ( results.All(a => a) ) - { - NotificationService.Notify(NotificationSeverity.Success, "Configuration Updated"); - - // remark: refresh underlying IConfiguration provider for validation services - if ( Configuration is IConfigurationRoot configurationRoot ) - { - IConfigurationProvider? provider = configurationRoot.Providers.FirstOrDefault(f => f is SqliteConfigurationProvider); - provider?.Load(); - } - } - else - { - NotificationService.Notify(NotificationSeverity.Error, "Configuration Update Failed"); - } - } - finally - { - await SettingsLoadingIndicator.HideAsync(); - } - - await InvokeAsync(StateHasChanged); - } -} diff --git a/demo/src/AddressValidation.Demo/Features/Validators/Google.razor b/demo/src/AddressValidation.Demo/Features/Validators/Google.razor deleted file mode 100644 index 2fc7f33..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/Google.razor +++ /dev/null @@ -1,222 +0,0 @@ -@page "/validator/google" -@using AddressValidation.Demo.Models.Forms -@inherits AddressValidation.Demo.Features.Validators.Abstractions.AbstractValidatorComponent - -Google Address Validation Demo - -

Google Address Validation Demo

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @if (Provinces.Count > 0) - { - - } - else - { - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @RequestJson - - - - - @ResponseJson - - - - - - diff --git a/demo/src/AddressValidation.Demo/Features/Validators/Google.razor.cs b/demo/src/AddressValidation.Demo/Features/Validators/Google.razor.cs deleted file mode 100644 index 3fe11c7..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/Google.razor.cs +++ /dev/null @@ -1,65 +0,0 @@ -namespace AddressValidation.Demo.Features.Validators; - -using Abstractions; -using Configuration; -using Models.Forms; -using Radzen; -using Visus.AddressValidation.Abstractions; -using Visus.AddressValidation.Integration.Google.Http; -using Constants = Visus.AddressValidation.Integration.Google.Constants; - -public partial class Google : AbstractValidatorComponent -{ - private readonly GoogleApiSettingsFormModel _settingsFormModel = new(); - - protected override IEnumerable InitializeCountries() - { - return Constants.SupportedCountries; - } - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - - _settingsFormModel.PrivateKey = Configuration.GetValue(Constants.PrivateKeyConfigurationKey); - _settingsFormModel.ProjectId = Configuration.GetValue(Constants.ProjectIdConfigurationKey); - _settingsFormModel.ServiceAccountEmailAddress = Configuration.GetValue(Constants.ServiceAccountEmailConfigurationKey); - } - - private async Task OnSettingsFormSubmitAsync() - { - await SettingsLoadingIndicator.ShowAsync(); - - try - { - bool[] results = - [ - await SettingsService.AddOrUpdateAsync(Constants.PrivateKeyConfigurationKey, _settingsFormModel.PrivateKey, true), - await SettingsService.AddOrUpdateAsync(Constants.ProjectIdConfigurationKey, _settingsFormModel.ProjectId), - await SettingsService.AddOrUpdateAsync(Constants.ServiceAccountEmailConfigurationKey, _settingsFormModel.ServiceAccountEmailAddress) - ]; - - if ( results.All(a => a) ) - { - NotificationService.Notify(NotificationSeverity.Success, "Configuration Updated"); - - // remark: refresh underlying IConfiguration provider for validation services - if ( Configuration is IConfigurationRoot configurationRoot ) - { - IConfigurationProvider? provider = configurationRoot.Providers.FirstOrDefault(f => f is SqliteConfigurationProvider); - provider?.Load(); - } - } - else - { - NotificationService.Notify(NotificationSeverity.Error, "Configuration Update Failed"); - } - } - finally - { - await SettingsLoadingIndicator.HideAsync(); - } - - await InvokeAsync(StateHasChanged); - } -} diff --git a/demo/src/AddressValidation.Demo/Features/Validators/PitneyBowes.razor b/demo/src/AddressValidation.Demo/Features/Validators/PitneyBowes.razor deleted file mode 100644 index 83f969f..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/PitneyBowes.razor +++ /dev/null @@ -1,239 +0,0 @@ -@page "/validator/pitney-bowes" -@using AddressValidation.Demo.Models.Forms -@using Visus.AddressValidation.Abstractions -@inherits AddressValidation.Demo.Features.Validators.Abstractions.AbstractValidatorComponent - -Pitney Bowes Address Validator - -

Pitney Bowes Address Validation Demo

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @if (Provinces.Count > 0) - { - - } - else - { - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @RequestJson - - - - - @ResponseJson - - - - - - diff --git a/demo/src/AddressValidation.Demo/Features/Validators/PitneyBowes.razor.cs b/demo/src/AddressValidation.Demo/Features/Validators/PitneyBowes.razor.cs deleted file mode 100644 index 5c816a5..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/PitneyBowes.razor.cs +++ /dev/null @@ -1,80 +0,0 @@ -namespace AddressValidation.Demo.Features.Validators; - -using Abstractions; -using Configuration; -using Models.Forms; -using Radzen; -using Visus.AddressValidation.Abstractions; -using Visus.AddressValidation.Integration.PitneyBowes; -using Visus.AddressValidation.Integration.PitneyBowes.Http; - -public partial class PitneyBowes : AbstractValidatorComponent -{ - private readonly Dictionary _clientEnvironments = new(StringComparer.OrdinalIgnoreCase) - { - [nameof(ClientEnvironment.DEVELOPMENT)] = ClientEnvironment.DEVELOPMENT, - [nameof(ClientEnvironment.PRODUCTION)] = ClientEnvironment.PRODUCTION - }; - - private readonly PitneyBowesApiSettingsFormModel _settingsFormModel = new(); - - protected override IEnumerable InitializeCountries() - { - return Constants.SupportedCountries; - } - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - - _settingsFormModel.DeveloperId = Configuration.GetValue(Constants.DeveloperIdConfigurationKey); - - string? clientEnvironmentValue = Configuration.GetValue(Constants.ClientEnvironmentConfigurationKey); - if ( !Enum.TryParse(clientEnvironmentValue, out ClientEnvironment clientEnvironment) ) - { - _settingsFormModel.ClientEnvironment = ClientEnvironment.DEVELOPMENT; - } - - _settingsFormModel.ClientEnvironment = clientEnvironment; - _settingsFormModel.ApiKey = Configuration.GetValue(Constants.ApiKeyConfigurationKey); - _settingsFormModel.ApiSecret = Configuration.GetValue(Constants.ApiSecretConfigurationKey); - } - - private async Task OnSettingsFormSubmitAsync() - { - await SettingsLoadingIndicator.ShowAsync(); - - try - { - bool[] results = - [ - await SettingsService.AddOrUpdateAsync(Constants.DeveloperIdConfigurationKey, _settingsFormModel.DeveloperId), - await SettingsService.AddOrUpdateAsync(Constants.ClientEnvironmentConfigurationKey, _settingsFormModel.ClientEnvironment.ToString()), - await SettingsService.AddOrUpdateAsync(Constants.ApiKeyConfigurationKey, _settingsFormModel.ApiKey, true), - await SettingsService.AddOrUpdateAsync(Constants.ApiSecretConfigurationKey, _settingsFormModel.ApiSecret, true) - ]; - - if ( results.All(a => a) ) - { - NotificationService.Notify(NotificationSeverity.Success, "Configuration Updated"); - - // remark: refresh underlying IConfiguration provider for validation services - if ( Configuration is IConfigurationRoot configurationRoot ) - { - IConfigurationProvider? provider = configurationRoot.Providers.FirstOrDefault(f => f is SqliteConfigurationProvider); - provider?.Load(); - } - } - else - { - NotificationService.Notify(NotificationSeverity.Error, "Configuration Update Failed"); - } - } - finally - { - await SettingsLoadingIndicator.HideAsync(); - } - - await InvokeAsync(StateHasChanged); - } -} diff --git a/demo/src/AddressValidation.Demo/Features/Validators/Ups.razor b/demo/src/AddressValidation.Demo/Features/Validators/Ups.razor deleted file mode 100644 index 8539915..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/Ups.razor +++ /dev/null @@ -1,242 +0,0 @@ -@page "/validator/ups" -@using AddressValidation.Demo.Models.Forms -@using Visus.AddressValidation.Abstractions -@inherits AddressValidation.Demo.Features.Validators.Abstractions.AbstractValidatorComponent - -UPS Address Validation - -

UPS Address Validation Demo

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @if (Provinces.Count > 0) - { - - } - else - { - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @RequestJson - - - - - @ResponseJson - - - - - - - diff --git a/demo/src/AddressValidation.Demo/Features/Validators/Ups.razor.cs b/demo/src/AddressValidation.Demo/Features/Validators/Ups.razor.cs deleted file mode 100644 index d45ac91..0000000 --- a/demo/src/AddressValidation.Demo/Features/Validators/Ups.razor.cs +++ /dev/null @@ -1,80 +0,0 @@ -namespace AddressValidation.Demo.Features.Validators; - -using Abstractions; -using Configuration; -using Models.Forms; -using Radzen; -using Visus.AddressValidation.Abstractions; -using Visus.AddressValidation.Integration.Ups; -using Visus.AddressValidation.Integration.Ups.Http; - -public partial class Ups : AbstractValidatorComponent -{ - private readonly Dictionary _clientEnvironments = new(StringComparer.OrdinalIgnoreCase) - { - [nameof(ClientEnvironment.DEVELOPMENT)] = ClientEnvironment.DEVELOPMENT, - [nameof(ClientEnvironment.PRODUCTION)] = ClientEnvironment.PRODUCTION - }; - - private readonly OAuthApiSettingsFormModel _settingsFormModel = new(); - - protected override IEnumerable InitializeCountries() - { - return Constants.SupportedCountries; - } - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - - _settingsFormModel.AccountNumber = Configuration.GetValue(Constants.AccountNumberConfigurationKey); - - string? clientEnvironmentValue = Configuration.GetValue(Constants.ClientEnvironmentConfigurationKey); - if ( !Enum.TryParse(clientEnvironmentValue, out ClientEnvironment clientEnvironment) ) - { - _settingsFormModel.ClientEnvironment = ClientEnvironment.DEVELOPMENT; - } - - _settingsFormModel.ClientEnvironment = clientEnvironment; - _settingsFormModel.ClientId = Configuration.GetValue(Constants.ClientIdConfigurationKey); - _settingsFormModel.ClientSecret = Configuration.GetValue(Constants.ClientSecretConfigurationKey); - } - - private async Task OnSettingsFormSubmitAsync() - { - await SettingsLoadingIndicator.ShowAsync(); - - try - { - bool[] results = - [ - await SettingsService.AddOrUpdateAsync(Constants.AccountNumberConfigurationKey, _settingsFormModel.AccountNumber), - await SettingsService.AddOrUpdateAsync(Constants.ClientEnvironmentConfigurationKey, _settingsFormModel.ClientEnvironment.ToString()), - await SettingsService.AddOrUpdateAsync(Constants.ClientIdConfigurationKey, _settingsFormModel.ClientId, true), - await SettingsService.AddOrUpdateAsync(Constants.ClientSecretConfigurationKey, _settingsFormModel.ClientSecret, true) - ]; - - if ( results.All(a => a) ) - { - NotificationService.Notify(NotificationSeverity.Success, "Configuration Updated"); - - // remark: refresh underlying IConfiguration provider for validation services - if ( Configuration is IConfigurationRoot configurationRoot ) - { - IConfigurationProvider? provider = configurationRoot.Providers.FirstOrDefault(f => f is SqliteConfigurationProvider); - provider?.Load(); - } - } - else - { - NotificationService.Notify(NotificationSeverity.Error, "Configuration Update Failed"); - } - } - finally - { - await SettingsLoadingIndicator.HideAsync(); - } - - await InvokeAsync(StateHasChanged); - } -} diff --git a/demo/src/AddressValidation.Demo/GlobalSupression.cs b/demo/src/AddressValidation.Demo/GlobalSupression.cs deleted file mode 100644 index ade9e36..0000000 --- a/demo/src/AddressValidation.Demo/GlobalSupression.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Diagnostics.CodeAnalysis; - -[assembly: SuppressMessage("Reliability", - "CA2007:Do not directly await a Task", - Justification = "Discouraged for Blazor UI Components", - Scope = "namespaceanddescendants", - Target = "~N:AddressValidation.Demo.Common")] - -[assembly: SuppressMessage("Reliability", - "CA2007:Do not directly await a Task", - Justification = "Discouraged for Blazor UI Components", - Scope = "namespaceanddescendants", - Target = "~N:AddressValidation.Demo.Features")] diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Configuration/CountryConfig.cs b/demo/src/AddressValidation.Demo/Infrastructure/Configuration/CountryConfig.cs deleted file mode 100644 index 9d4470a..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Configuration/CountryConfig.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Configuration; - -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using Models.Entities; - -public sealed class CountryConfig : IEntityTypeConfiguration -{ - public void Configure(EntityTypeBuilder builder) - { - ArgumentNullException.ThrowIfNull(builder); - - builder.HasKey(p => p.Id); - - builder.ToTable("countries"); - - builder.Property(p => p.Id).IsRequired(); - builder.Property(p => p.Name).IsRequired().HasMaxLength(100); - builder.Property(p => p.IsoCode).HasColumnName("iso2").IsRequired().HasMaxLength(2); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Configuration/SettingsConfig.cs b/demo/src/AddressValidation.Demo/Infrastructure/Configuration/SettingsConfig.cs deleted file mode 100644 index 26d8575..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Configuration/SettingsConfig.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Configuration; - -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using Models.Entities; - -public sealed class SettingsConfig : IEntityTypeConfiguration -{ - public void Configure(EntityTypeBuilder builder) - { - ArgumentNullException.ThrowIfNull(builder); - - builder.HasKey(p => p.Key); - - builder.ToTable("Settings"); - - builder.Property(p => p.Key).ValueGeneratedNever().IsRequired().HasMaxLength(255).IsUnicode(false); - builder.Property(p => p.Value).IsUnicode().HasMaxLength(int.MaxValue); - builder.Property(p => p.IsEncrypted).IsRequired().HasDefaultValue(false); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Configuration/StateConfig.cs b/demo/src/AddressValidation.Demo/Infrastructure/Configuration/StateConfig.cs deleted file mode 100644 index 6fe20c1..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Configuration/StateConfig.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Configuration; - -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using Models.Entities; - -public sealed class StateConfig : IEntityTypeConfiguration -{ - public void Configure(EntityTypeBuilder builder) - { - ArgumentNullException.ThrowIfNull(builder); - - builder.HasKey(p => p.Id); - - builder.ToTable("states"); - - builder.Property(p => p.CountryCode).HasColumnName("country_code").IsRequired().HasMaxLength(2); - builder.Property(p => p.Id).IsRequired(); - builder.Property(p => p.Name).IsRequired().HasMaxLength(100); - builder.Property(p => p.IsoCode).HasColumnName("iso2").IsRequired().HasMaxLength(255); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/GeoContext.cs b/demo/src/AddressValidation.Demo/Infrastructure/GeoContext.cs deleted file mode 100644 index ff11384..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/GeoContext.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure; - -using Configuration; -using Microsoft.EntityFrameworkCore; -using Models.Entities; - -public sealed class GeoContext(DbContextOptions options) : DbContext(options) -{ - public DbSet Countries { get; set; } - - public DbSet States { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - ArgumentNullException.ThrowIfNull(modelBuilder); - - modelBuilder.ApplyConfiguration(new CountryConfig()); - modelBuilder.ApplyConfiguration(new StateConfig()); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/GeoContextFactory.cs b/demo/src/AddressValidation.Demo/Infrastructure/GeoContextFactory.cs deleted file mode 100644 index 653363c..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/GeoContextFactory.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure; - -using Microsoft.EntityFrameworkCore; - -public sealed class GeoContextFactory(ILoggerFactory loggerFactory) : IDbContextFactory -{ - private readonly ILoggerFactory _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); - - public GeoContext CreateDbContext() - { - DbContextOptionsBuilder options = new(); - - string database = Path.Join(AppDomain.CurrentDomain.GetData("DataDirectory")!.ToString(), "countries+states.db"); - - options.UseSqlite($"Data Source={database}"); - - options.UseLoggerFactory(_loggerFactory); - options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); - - return new GeoContext(options.Options); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ICountryRepository.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ICountryRepository.cs deleted file mode 100644 index 60c52fc..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ICountryRepository.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using Models.Entities; - -public interface ICountryRepository : ISqlRepository -{ -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ISettingsRepository.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ISettingsRepository.cs deleted file mode 100644 index cf5e26c..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ISettingsRepository.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using Models.Entities; - -public interface ISettingsRepository : ISqlRepository -{ -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ISqlRepository.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ISqlRepository.cs deleted file mode 100644 index 94f0be9..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/ISqlRepository.cs +++ /dev/null @@ -1,48 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using Microsoft.EntityFrameworkCore.Query; - -public interface ISqlRepository - where TEntity : class, new() -{ - ValueTask AddAsync(TEntity entity, CancellationToken cancellationToken = default); - - ValueTask AnyAsync(CancellationToken cancellationToken = default); - - ValueTask AnyAsync(Expression> predicate, CancellationToken cancellationToken = default); - - ValueTask CountAsync(CancellationToken cancellationToken = default); - - ValueTask CountAsync(Expression> predicate, CancellationToken cancellationToken = default); - - ValueTask DeleteAsync(TEntity entity, CancellationToken cancellationToken = default); - - ValueTask DeleteAsync(Expression> predicate, CancellationToken cancellationToken = default); - - ValueTask GetAsync(Expression> predicate, CancellationToken cancellationToken = default); - - ValueTask> ListAsync(CancellationToken cancellationToken = default); - - ValueTask> ListAsync(Expression> keySelector, CancellationToken cancellationToken = default); - - ValueTask> ListAsync(Expression> predicate, Expression> keySelector, CancellationToken cancellationToken = default); - - ValueTask> ListAsync(Expression> predicate, CancellationToken cancellationToken = default); - - ValueTask LongCountAsync(CancellationToken cancellationToken = default); - - ValueTask LongCountAsync(Expression> predicate, CancellationToken cancellationToken = default); - - ValueTask MaxAsync(CancellationToken cancellationToken = default); - - ValueTask MaxAsync(Expression> predicate, CancellationToken cancellationToken = default); - - ValueTask MinAsync(CancellationToken cancellationToken = default); - - ValueTask MinAsync(Expression> predicate, CancellationToken cancellationToken = default); - - ValueTask UpdateAsync(TEntity entity, CancellationToken cancellationToken = default); - - ValueTask UpdateAsync(Expression> predicate, Expression, SetPropertyCalls>> statements, CancellationToken cancellationToken = default); -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/IStateRepository.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/IStateRepository.cs deleted file mode 100644 index 214ca36..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/IStateRepository.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using Models.Entities; - -public interface IStateRepository : ISqlRepository -{ -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Add.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Add.cs deleted file mode 100644 index 10f51b1..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Add.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public ValueTask AddAsync(TEntity entity, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(entity); - - return !HasPrimaryKey - ? ValueTask.FromResult(false) - : AddInternalAsync(entity, cancellationToken); - } - - private async ValueTask AddInternalAsync(TEntity entity, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - context.Set().Add(entity); - - return await SaveChangesAsync(context, cancellationToken).ConfigureAwait(false); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Any.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Any.cs deleted file mode 100644 index 419f3df..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Any.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public async ValueTask AnyAsync(CancellationToken cancellationToken = default) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().AnyAsync(cancellationToken).ConfigureAwait(false); - } - - public ValueTask AnyAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return AnyInternalAsync(predicate, cancellationToken); - } - - private async ValueTask AnyInternalAsync(Expression> predicate, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().Where(predicate).AnyAsync(cancellationToken).ConfigureAwait(false); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Count.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Count.cs deleted file mode 100644 index f503d17..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Count.cs +++ /dev/null @@ -1,54 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public async ValueTask CountAsync(CancellationToken cancellationToken = default) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().CountAsync(cancellationToken).ConfigureAwait(false); - } - - public ValueTask CountAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return CountInternalAsync(predicate, cancellationToken); - } - - public async ValueTask LongCountAsync(CancellationToken cancellationToken = default) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().LongCountAsync(cancellationToken).ConfigureAwait(false); - } - - public ValueTask LongCountAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return LongCountInternalAsync(predicate, cancellationToken); - } - - private async ValueTask CountInternalAsync(Expression> predicate, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().CountAsync(predicate, cancellationToken).ConfigureAwait(false); - } - - private async ValueTask LongCountInternalAsync(Expression> predicate, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().LongCountAsync(predicate, cancellationToken).ConfigureAwait(false); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Delete.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Delete.cs deleted file mode 100644 index 3988cbf..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Delete.cs +++ /dev/null @@ -1,43 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public ValueTask DeleteAsync(TEntity entity, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(entity); - - return !HasPrimaryKey - ? ValueTask.FromResult(false) - : DeleteInternalAsync(entity, cancellationToken); - } - - public ValueTask DeleteAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return DeleteInternalAsync(predicate, cancellationToken); - } - - private async ValueTask DeleteInternalAsync(TEntity entity, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - context.Set().Remove(entity); - - return await SaveChangesAsync(context, cancellationToken).ConfigureAwait(false); - } - - private async ValueTask DeleteInternalAsync(Expression> predicate, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().Where(predicate).ExecuteDeleteAsync(cancellationToken).ConfigureAwait(false) >= 0; - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Get.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Get.cs deleted file mode 100644 index b694f10..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Get.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public ValueTask GetAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return GetInternalAsync(predicate, cancellationToken); - } - - private async ValueTask GetInternalAsync(Expression> predicate, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().Where(predicate).FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.List.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.List.cs deleted file mode 100644 index e99b387..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.List.cs +++ /dev/null @@ -1,65 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public async ValueTask> ListAsync(CancellationToken cancellationToken = default) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().ToListAsync(cancellationToken).ConfigureAwait(false); - } - - public ValueTask> ListAsync(Expression> keySelector, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(nameof(keySelector)); - return ListInternalAsync(keySelector, cancellationToken); - } - - public ValueTask> ListAsync(Expression> predicate, Expression> keySelector, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(nameof(predicate)); - ArgumentNullException.ThrowIfNull(nameof(keySelector)); - return ListInternalAsync(predicate, keySelector, cancellationToken); - } - - public ValueTask> ListAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return ListInternalAsync(predicate, cancellationToken); - } - - private async ValueTask> ListInternalAsync(Expression> predicate, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().Where(predicate).ToListAsync(cancellationToken).ConfigureAwait(false); - } - - private async ValueTask> ListInternalAsync(Expression> keySelector, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().Select(keySelector).ToListAsync(cancellationToken).ConfigureAwait(false); - } - - private async ValueTask> ListInternalAsync(Expression> predicate, Expression> keySelector, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set() - .Where(predicate) - .Select(keySelector) - .ToListAsync(cancellationToken) - .ConfigureAwait(false); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Max.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Max.cs deleted file mode 100644 index e7169cf..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Max.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public async ValueTask MaxAsync(CancellationToken cancellationToken = default) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().MaxAsync(cancellationToken).ConfigureAwait(false); - } - - public ValueTask MaxAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return MaxInternalAsync(predicate, cancellationToken); - } - - private async ValueTask MaxInternalAsync(Expression> predicate, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().MaxAsync(predicate, cancellationToken).ConfigureAwait(false); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Min.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Min.cs deleted file mode 100644 index e6e0816..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Min.cs +++ /dev/null @@ -1,32 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public async ValueTask MinAsync(CancellationToken cancellationToken = default) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().MinAsync(cancellationToken).ConfigureAwait(false); - } - - public ValueTask MinAsync(Expression> predicate, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return MinInternalAsync(predicate, cancellationToken); - } - - private async ValueTask MinInternalAsync(Expression> predicate, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().MinAsync(predicate, cancellationToken).ConfigureAwait(false); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Update.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Update.cs deleted file mode 100644 index c5f736d..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.Update.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Linq.Expressions; -using System.Runtime.CompilerServices; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Query; - -public abstract partial class SqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - public ValueTask UpdateAsync(TEntity entity, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(entity); - - return !HasPrimaryKey - ? ValueTask.FromResult(false) - : UpdateInternalAsync(entity, cancellationToken); - } - - public ValueTask UpdateAsync(Expression> predicate, Expression, SetPropertyCalls>> statements, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(predicate); - return UpdateInternalAsync(predicate, statements, cancellationToken); - } - - private async ValueTask UpdateInternalAsync(TEntity entity, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - context.Set().Update(entity); - - return await SaveChangesAsync(context, cancellationToken).ConfigureAwait(false); - } - - private async ValueTask UpdateInternalAsync(Expression> predicate, Expression, SetPropertyCalls>> statements, CancellationToken cancellationToken) - { - TContext context = await _contextFactory.CreateDbContextAsync(cancellationToken).ConfigureAwait(false); - await using ConfiguredAsyncDisposable _ = context.ConfigureAwait(false); - - return await context.Set().Where(predicate).ExecuteUpdateAsync(statements, cancellationToken).ConfigureAwait(false) >= 0; - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.cs deleted file mode 100644 index 32032bb..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/Abstractions/SqlRepository.cs +++ /dev/null @@ -1,109 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories.Abstractions; - -using System.Diagnostics.CodeAnalysis; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata; - -public abstract partial class SqlRepository : ISqlRepository - where TEntity : class, new() - where TContext : DbContext -{ - [SuppressMessage("ReSharper", "StaticMemberInGenericType")] - private static readonly Action LogDbUpdateException = - LoggerMessage.Define(LogLevel.Error, - new EventId(2203, nameof(SaveChangesAsync)), - "{Message}: {@Exception}"); - - private readonly Lazy> _columns; - - private readonly IDbContextFactory _contextFactory; - - private readonly ILogger> _logger; - - private readonly Lazy> _primaryKeys; - - private readonly Lazy _schemaName; - - private readonly Lazy _tableName; - - protected SqlRepository(IDbContextFactory contextFactory, ILogger> logger) - { - _contextFactory = contextFactory ?? throw new ArgumentNullException(nameof(contextFactory)); - _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - - // note: must be initialized first - _schemaName = new Lazy(GetEntitySchemaName); - _tableName = new Lazy(GetEntityTableName); - - _columns = new Lazy>(GetEntityColumns); - _primaryKeys = new Lazy>(GetEntityPrimaryKeys); - } - - protected IReadOnlyDictionary Columns => _columns.Value; - - [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] - protected bool HasPrimaryKey => _primaryKeys.Value.Any(); - - protected IReadOnlyList PrimaryKeys => _primaryKeys.Value; - - protected string? SchemaName => _schemaName.Value; - - protected string? TableName => _tableName.Value; - - [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] - protected async ValueTask SaveChangesAsync(TContext context, CancellationToken cancellationToken = default) - { - ArgumentNullException.ThrowIfNull(context); - - try - { - bool result = await context.SaveChangesAsync(cancellationToken).ConfigureAwait(false) > 0; - - // Note: intentional as we are working in a 'disconnected' state. - context.ChangeTracker.Clear(); - - return result; - } - catch ( DbUpdateException e ) - { - LogDbUpdateException(_logger, e, e.Message, null); - } - - return false; - } - - private Dictionary GetEntityColumns() - { - if ( string.IsNullOrWhiteSpace(_tableName.Value) ) - { - return new Dictionary(); - } - - StoreObjectIdentifier storeObjectIdentifier = StoreObjectIdentifier.Table(_tableName.Value, _schemaName.Value); - - using TContext context = _contextFactory.CreateDbContext(); - - return context.Model.FindEntityType(typeof(TEntity))?.GetProperties() - .Where(w => string.IsNullOrWhiteSpace(w.GetComputedColumnSql(storeObjectIdentifier)) && - ( w.ValueGenerated & ValueGenerated.OnAddOrUpdate ) != ValueGenerated.OnAddOrUpdate) - .ToDictionary(d => d.Name, d => d.GetColumnName(storeObjectIdentifier)) ?? new Dictionary(); - } - - private IReadOnlyList GetEntityPrimaryKeys() - { - using TContext context = _contextFactory.CreateDbContext(); - return context.Model.FindEntityType(typeof(TEntity))?.FindPrimaryKey()?.Properties ?? new List().AsReadOnly(); - } - - private string? GetEntitySchemaName() - { - using TContext context = _contextFactory.CreateDbContext(); - return context.Model.FindEntityType(typeof(TEntity))?.GetSchema(); - } - - private string? GetEntityTableName() - { - using TContext context = _contextFactory.CreateDbContext(); - return context.Model.FindEntityType(typeof(TEntity))?.GetTableName(); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/CountryRepository.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/CountryRepository.cs deleted file mode 100644 index c8ac3cc..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/CountryRepository.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories; - -using Abstractions; -using Microsoft.EntityFrameworkCore; -using Models.Entities; - -public sealed class CountryRepository(IDbContextFactory contextFactory, ILogger logger) - : SqlRepository(contextFactory, logger), ICountryRepository; diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/SettingsRepository.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/SettingsRepository.cs deleted file mode 100644 index e22aceb..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/SettingsRepository.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories; - -using Abstractions; -using Microsoft.EntityFrameworkCore; -using Models.Entities; - -public sealed class SettingsRepository( - IDbContextFactory contextFactory, - ILogger logger) : SqlRepository(contextFactory, logger), ISettingsRepository -{ - private readonly IDbContextFactory _contextFactory = contextFactory ?? throw new ArgumentNullException(nameof(contextFactory)); - - public IReadOnlyList List() - { - using SettingsContext context = _contextFactory.CreateDbContext(); - return context.Set().ToList().AsReadOnly(); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/StateRepository.cs b/demo/src/AddressValidation.Demo/Infrastructure/Repositories/StateRepository.cs deleted file mode 100644 index a0c8b64..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/Repositories/StateRepository.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure.Repositories; - -using Abstractions; -using Microsoft.EntityFrameworkCore; -using Models.Entities; - -public sealed class StateRepository(IDbContextFactory contextFactory, ILogger> logger) - : SqlRepository(contextFactory, logger), IStateRepository; diff --git a/demo/src/AddressValidation.Demo/Infrastructure/SettingsContext.cs b/demo/src/AddressValidation.Demo/Infrastructure/SettingsContext.cs deleted file mode 100644 index e9cff42..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/SettingsContext.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure; - -using Configuration; -using Microsoft.EntityFrameworkCore; -using Models.Entities; - -public sealed class SettingsContext(DbContextOptions options) : DbContext(options) -{ - public DbSet Config { get; set; } - - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - ArgumentNullException.ThrowIfNull(modelBuilder); - - modelBuilder.ApplyConfiguration(new SettingsConfig()); - } -} diff --git a/demo/src/AddressValidation.Demo/Infrastructure/SettingsContextFactory.cs b/demo/src/AddressValidation.Demo/Infrastructure/SettingsContextFactory.cs deleted file mode 100644 index d6455b4..0000000 --- a/demo/src/AddressValidation.Demo/Infrastructure/SettingsContextFactory.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace AddressValidation.Demo.Infrastructure; - -using Microsoft.EntityFrameworkCore; - -public sealed class SettingsContextFactory(ILoggerFactory loggerFactory) : IDbContextFactory -{ - private readonly ILoggerFactory _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); - - public SettingsContext CreateDbContext() - { - DbContextOptionsBuilder options = new(); - - string database = Path.Join(AppDomain.CurrentDomain.GetData("DataDirectory")!.ToString(), "settings.db"); - - options.UseSqlite($"Data Source={database}"); - - options.UseLoggerFactory(_loggerFactory); - options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); - - return new SettingsContext(options.Options); - } -} diff --git a/demo/src/AddressValidation.Demo/Models/Entities/CountryModel.cs b/demo/src/AddressValidation.Demo/Models/Entities/CountryModel.cs deleted file mode 100644 index 7d11b6b..0000000 --- a/demo/src/AddressValidation.Demo/Models/Entities/CountryModel.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace AddressValidation.Demo.Models.Entities; - -public sealed class CountryModel -{ - public int Id { get; set; } - - public string IsoCode { get; set; } = null!; - - public string Name { get; set; } = null!; -} diff --git a/demo/src/AddressValidation.Demo/Models/Entities/SettingsModel.cs b/demo/src/AddressValidation.Demo/Models/Entities/SettingsModel.cs deleted file mode 100644 index c9cc1f0..0000000 --- a/demo/src/AddressValidation.Demo/Models/Entities/SettingsModel.cs +++ /dev/null @@ -1,17 +0,0 @@ -#nullable disable - -namespace AddressValidation.Demo.Models.Entities; - -using System.ComponentModel.DataAnnotations.Schema; - -public class SettingsModel -{ - [Column(Order = 2)] - public bool IsEncrypted { get; set; } - - [Column(Order = 0)] - public string Key { get; set; } - - [Column(Order = 1)] - public string Value { get; set; } -} diff --git a/demo/src/AddressValidation.Demo/Models/Entities/StateModel.cs b/demo/src/AddressValidation.Demo/Models/Entities/StateModel.cs deleted file mode 100644 index e7ad470..0000000 --- a/demo/src/AddressValidation.Demo/Models/Entities/StateModel.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace AddressValidation.Demo.Models.Entities; - -public sealed class StateModel -{ - public string CountryCode { get; set; } = null!; - - public int Id { get; set; } - - public string IsoCode { get; set; } = null!; - - public string Name { get; set; } = null!; - - public string? Type { get; set; } -} diff --git a/demo/src/AddressValidation.Demo/Models/Forms/Abstractions/AbstractAddressValidationFormModel.cs b/demo/src/AddressValidation.Demo/Models/Forms/Abstractions/AbstractAddressValidationFormModel.cs deleted file mode 100644 index 35f4fa1..0000000 --- a/demo/src/AddressValidation.Demo/Models/Forms/Abstractions/AbstractAddressValidationFormModel.cs +++ /dev/null @@ -1,101 +0,0 @@ -namespace AddressValidation.Demo.Models.Forms.Abstractions; - -using System.Text.Json; -using Visus.AddressValidation.Abstractions; -using Visus.AddressValidation.Http; - -public abstract class AbstractAddressValidationFormModel - where TRequest : AbstractAddressValidationRequest, new() -{ - private readonly Dictionary _addressLines = new() - { - { 0, null }, - { 1, null } - }; - - private readonly JsonSerializerOptions _serializerOptions = new() - { - WriteIndented = true - }; - - public TRequest Request { get; } = new(); - - public string? AddressLine1 - { - get => _addressLines[0]; - set - { - _addressLines[0] = value; - UpdateAddressLines(); - } - } - - public string? AddressLine2 - { - get => _addressLines[1]; - set - { - _addressLines[1] = value; - UpdateAddressLines(); - } - } - - public string? CityOrTown - { - get => Request.CityOrTown; - set => Request.CityOrTown = value; - } - - public string? Country - { - get => Request.Country.ToString(); - set - { - if ( string.IsNullOrWhiteSpace(value) ) - { - Request.Country = null; - return; - } - - if ( Enum.TryParse(value, true, out CountryCode result) ) - { - Request.Country = result; - return; - } - - Request.Country = null; - } - } - - public string? PostalCode - { - get => Request.PostalCode; - set => Request.PostalCode = value; - } - - public string? StateOrProvince - { - get => Request.StateOrProvince; - set => Request.StateOrProvince = value; - } - - public string ToJson() - { - return JsonSerializer.Serialize(Request, _serializerOptions); - } - - private void UpdateAddressLines() - { - Request.AddressLines.Clear(); - - foreach ( ( int _, string? value ) in _addressLines.OrderBy(o => o.Key) ) - { - if ( string.IsNullOrWhiteSpace(value) ) - { - continue; - } - - Request.AddressLines.Add(value); - } - } -} diff --git a/demo/src/AddressValidation.Demo/Models/Forms/FedExAddressValidationFormModel.cs b/demo/src/AddressValidation.Demo/Models/Forms/FedExAddressValidationFormModel.cs deleted file mode 100644 index 433fc59..0000000 --- a/demo/src/AddressValidation.Demo/Models/Forms/FedExAddressValidationFormModel.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace AddressValidation.Demo.Models.Forms; - -using Abstractions; -using Visus.AddressValidation.Integration.FedEx.Http; - -public sealed class FedExAddressValidationFormModel : AbstractAddressValidationFormModel; diff --git a/demo/src/AddressValidation.Demo/Models/Forms/GoogleAddressValidationFormModel.cs b/demo/src/AddressValidation.Demo/Models/Forms/GoogleAddressValidationFormModel.cs deleted file mode 100644 index c8616c8..0000000 --- a/demo/src/AddressValidation.Demo/Models/Forms/GoogleAddressValidationFormModel.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace AddressValidation.Demo.Models.Forms; - -using Abstractions; -using Visus.AddressValidation.Integration.Google.Http; - -public sealed class GoogleAddressValidationFormModel : AbstractAddressValidationFormModel; diff --git a/demo/src/AddressValidation.Demo/Models/Forms/GoogleApiSettingsFormModel.cs b/demo/src/AddressValidation.Demo/Models/Forms/GoogleApiSettingsFormModel.cs deleted file mode 100644 index 65b8b1c..0000000 --- a/demo/src/AddressValidation.Demo/Models/Forms/GoogleApiSettingsFormModel.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace AddressValidation.Demo.Models.Forms; - -public sealed class GoogleApiSettingsFormModel -{ - private string? _privateKey; - - public string? PrivateKey - { - get => _privateKey; - set - { - if ( string.IsNullOrWhiteSpace(value) ) - { - _privateKey = null; - return; - } - - if ( value.Contains("\\n", StringComparison.OrdinalIgnoreCase) ) - { - value = value.Replace("\\n", Environment.NewLine, StringComparison.OrdinalIgnoreCase); - } - - _privateKey = value; - } - } - - public string? ProjectId { get; set; } - - public string? ServiceAccountEmailAddress { get; set; } -} diff --git a/demo/src/AddressValidation.Demo/Models/Forms/OAuthApiSettingsFormModel.cs b/demo/src/AddressValidation.Demo/Models/Forms/OAuthApiSettingsFormModel.cs deleted file mode 100644 index d659016..0000000 --- a/demo/src/AddressValidation.Demo/Models/Forms/OAuthApiSettingsFormModel.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace AddressValidation.Demo.Models.Forms; - -using Visus.AddressValidation.Abstractions; - -public class OAuthApiSettingsFormModel -{ - public string? AccountNumber { get; set; } - - public ClientEnvironment ClientEnvironment { get; set; } = ClientEnvironment.DEVELOPMENT; - - public string? ClientId { get; set; } - - public string? ClientSecret { get; set; } -} diff --git a/demo/src/AddressValidation.Demo/Models/Forms/PitneyBowesAddressValidationFormModel.cs b/demo/src/AddressValidation.Demo/Models/Forms/PitneyBowesAddressValidationFormModel.cs deleted file mode 100644 index f7b24f5..0000000 --- a/demo/src/AddressValidation.Demo/Models/Forms/PitneyBowesAddressValidationFormModel.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace AddressValidation.Demo.Models.Forms; - -using Abstractions; -using Visus.AddressValidation.Integration.PitneyBowes.Http; - -public sealed class PitneyBowesAddressValidationFormModel : AbstractAddressValidationFormModel -{ - public bool IncludeSuggestions - { - get => Request.IncludeSuggestions; - set => Request.IncludeSuggestions = value; - } -} diff --git a/demo/src/AddressValidation.Demo/Models/Forms/PitneyBowesApiSettingsFormModel.cs b/demo/src/AddressValidation.Demo/Models/Forms/PitneyBowesApiSettingsFormModel.cs deleted file mode 100644 index 15b99a5..0000000 --- a/demo/src/AddressValidation.Demo/Models/Forms/PitneyBowesApiSettingsFormModel.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace AddressValidation.Demo.Models.Forms; - -using Visus.AddressValidation.Abstractions; - -public class PitneyBowesApiSettingsFormModel -{ - public string? ApiKey { get; set; } - - public string? ApiSecret { get; set; } - - public ClientEnvironment ClientEnvironment { get; set; } = ClientEnvironment.DEVELOPMENT; - - public string? DeveloperId { get; set; } -} diff --git a/demo/src/AddressValidation.Demo/Models/Forms/UpsAddressValidationFormModel.cs b/demo/src/AddressValidation.Demo/Models/Forms/UpsAddressValidationFormModel.cs deleted file mode 100644 index d14d9c6..0000000 --- a/demo/src/AddressValidation.Demo/Models/Forms/UpsAddressValidationFormModel.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace AddressValidation.Demo.Models.Forms; - -using Abstractions; -using Visus.AddressValidation.Integration.Ups.Http; - -public sealed class UpsAddressValidationFormModel : AbstractAddressValidationFormModel; diff --git a/demo/src/AddressValidation.Demo/Program.cs b/demo/src/AddressValidation.Demo/Program.cs deleted file mode 100644 index 7b28983..0000000 --- a/demo/src/AddressValidation.Demo/Program.cs +++ /dev/null @@ -1,111 +0,0 @@ -namespace AddressValidation.Demo; - -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using Extensions; -using Infrastructure; -using Infrastructure.Repositories; -using Infrastructure.Repositories.Abstractions; -using Microsoft.AspNetCore.DataProtection; -using Microsoft.EntityFrameworkCore; -using Radzen; -using Serilog; -using Serilog.Events; -using Serilog.Sinks.SystemConsole.Themes; -using Services; -using Services.Abstractions; -using Visus.AddressValidation.Integration.FedEx.Extensions; -using Visus.AddressValidation.Integration.Google.Extensions; -using Visus.AddressValidation.Integration.PitneyBowes.Extensions; -using Visus.AddressValidation.Integration.Ups.Extensions; - -[SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task")] -[SuppressMessage("Design", "CA1031:Do not catch general exception types")] -internal static class Program -{ - public static async Task Main(string[] args) - { - Log.Logger = new LoggerConfiguration() - .MinimumLevel.Debug() - .MinimumLevel.Override("Microsoft", LogEventLevel.Information) - .Enrich.FromLogContext() - .Enrich.WithThreadId() - .Enrich.WithMachineName() - .WriteTo.Console(formatProvider: CultureInfo.InvariantCulture, theme: AnsiConsoleTheme.Code) - .WriteTo.ApplicationInsights(TelemetryConverter.Traces) - .CreateBootstrapLogger(); - - try - { - WebApplicationBuilder builder = WebApplication.CreateBuilder(args); - - AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(builder.Environment.ContentRootPath, "Data")); - - builder.Configuration.AddSqlite(); - - builder.Services.AddDataProtection() - .SetApplicationName("AddressValidation.Demo") - .PersistKeysToFileSystem(new DirectoryInfo(Path.Combine(builder.Environment.ContentRootPath, "Data", "Keys"))); - - builder.Services.AddApplicationInsightsTelemetry(); - - builder.Services.AddDbContextFactory(); - builder.Services.AddDbContextFactory(); - - builder.Services.AddRadzenComponents(); - builder.Services.AddRazorComponents().AddInteractiveServerComponents(); - - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - - builder.Services.AddDistributedMemoryCache(); - - builder.Services.AddFedExAddressValidation(); - builder.Services.AddGoogleAddressValidation(); - builder.Services.AddPitneyBowesAddressValidation(); - builder.Services.AddUpsAddressValidation(); - - builder.Services.AddTransient(); - builder.Services.AddScoped(); - builder.Services.AddTransient(); - - builder.Services.AddSerilog(); - - WebApplication app = builder.Build(); - - if ( !app.Environment.IsDevelopment() ) - { - app.UseExceptionHandler("/Error"); - app.UseHsts(); - } - - app.UseHttpsRedirection(); - - app.UseStaticFiles(); - app.UseAntiforgery(); - - app.MapRazorComponents().AddInteractiveServerRenderMode(); - - using ( IServiceScope scope = app.Services.CreateScope() ) - { - IDbContextFactory contextFactory = scope.ServiceProvider.GetRequiredService>(); - - await using SettingsContext dbContext = await contextFactory.CreateDbContextAsync(); - await dbContext.Database.EnsureCreatedAsync(); - } - - await app.RunAsync(); - } - catch ( Exception e ) - { - Log.Fatal(e, "Host terminated unexpectedly."); - Environment.ExitCode = 1; - } - finally - { - await Task.Delay(1000); - await Log.CloseAndFlushAsync(); - } - } -} diff --git a/demo/src/AddressValidation.Demo/Properties/launchSettings.json b/demo/src/AddressValidation.Demo/Properties/launchSettings.json deleted file mode 100644 index 8c823c8..0000000 --- a/demo/src/AddressValidation.Demo/Properties/launchSettings.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:56591", - "sslPort": 44300 - } - }, - "profiles": { - "generators": { - "commandName": "DebugRoslynComponent", - "targetProject": "../AddressValidation.Demo/AddressValidation.Demo.csproj", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:7074;http://localhost:5030", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://localhost:5030", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:7074;http://localhost:5030", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/demo/src/AddressValidation.Demo/Routes.razor b/demo/src/AddressValidation.Demo/Routes.razor deleted file mode 100644 index 6e5be68..0000000 --- a/demo/src/AddressValidation.Demo/Routes.razor +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/demo/src/AddressValidation.Demo/Services/Abstractions/IGeographyService.cs b/demo/src/AddressValidation.Demo/Services/Abstractions/IGeographyService.cs deleted file mode 100644 index 8e1726c..0000000 --- a/demo/src/AddressValidation.Demo/Services/Abstractions/IGeographyService.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace AddressValidation.Demo.Services.Abstractions; - -using Visus.AddressValidation.Abstractions; - -public interface IGeographyService -{ - ValueTask> ListAutonomousCitiesAsync(string countryCode); - - ValueTask> ListCountriesAsDictionaryAsync(params CountryCode[] countryCodes); - - ValueTask> ListProvincesAsDictionaryAsync(string countryCode); -} diff --git a/demo/src/AddressValidation.Demo/Services/Abstractions/ILoadingIndicatorService.cs b/demo/src/AddressValidation.Demo/Services/Abstractions/ILoadingIndicatorService.cs deleted file mode 100644 index 387c988..0000000 --- a/demo/src/AddressValidation.Demo/Services/Abstractions/ILoadingIndicatorService.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace AddressValidation.Demo.Services.Abstractions; - -using Common.Components; - -public interface ILoadingIndicatorService -{ - bool? IsLoading { get; } - - bool? IsVisible { get; } - - Task HideAsync(); - - Task SetIsLoadingAsync(bool value); - - Task ShowAsync(); - - public void Subscribe(LoadingIndicator loadIndicator); - - public void Unsubscribe(LoadingIndicator loadIndicator); -} diff --git a/demo/src/AddressValidation.Demo/Services/Abstractions/ISettingsService.cs b/demo/src/AddressValidation.Demo/Services/Abstractions/ISettingsService.cs deleted file mode 100644 index 4898e3c..0000000 --- a/demo/src/AddressValidation.Demo/Services/Abstractions/ISettingsService.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace AddressValidation.Demo.Services.Abstractions; - -public interface ISettingsService -{ - ValueTask AddOrUpdateAsync(string key, string? value, bool encrypt = false, CancellationToken cancellationToken = default); -} diff --git a/demo/src/AddressValidation.Demo/Services/GeographyService.cs b/demo/src/AddressValidation.Demo/Services/GeographyService.cs deleted file mode 100644 index fa1dc7e..0000000 --- a/demo/src/AddressValidation.Demo/Services/GeographyService.cs +++ /dev/null @@ -1,173 +0,0 @@ -namespace AddressValidation.Demo.Services; - -using System.Security.Cryptography; -using System.Text; -using System.Text.Json; -using Abstractions; -using Infrastructure.Repositories.Abstractions; -using Microsoft.Extensions.Caching.Distributed; -using Models.Entities; -using Visus.AddressValidation.Abstractions; - -public sealed class GeographyService( - IDistributedCache cache, - ICountryRepository countryRepository, - IStateRepository stateRepository) : IGeographyService -{ - private readonly IDistributedCache _cache = cache ?? throw new ArgumentNullException(nameof(cache)); - - private readonly ICountryRepository _countryRepository = countryRepository ?? throw new ArgumentNullException(nameof(countryRepository)); - - private readonly IStateRepository _stateRepository = stateRepository ?? throw new ArgumentNullException(nameof(stateRepository)); - - private readonly HashSet autonomousTypes = - [ - "autonomous region", - "city" - ]; - - public ValueTask> ListAutonomousCitiesAsync(string countryCode) - { - ArgumentException.ThrowIfNullOrWhiteSpace(countryCode); - return ListAutonomousCitiesInternalAsync(countryCode); - } - - public ValueTask> ListCountriesAsDictionaryAsync(params CountryCode[] countryCodes) - { - ArgumentNullException.ThrowIfNull(countryCodes); - return ListCountriesAsDictionaryInternalAsync(countryCodes); - } - - public ValueTask> ListProvincesAsDictionaryAsync(string countryCode) - { - if ( !Enum.TryParse(countryCode, true, out CountryCode _) ) - { - throw new ArgumentException($"'{countryCode}' is not a valid country code.", nameof(countryCode)); - } - - return ListProvincesAsDictionaryInternalAsync(countryCode); - } - - private static async ValueTask GenerateCacheKeyAsync(string prefix, IReadOnlySet values) - { - using SHA256 sha = SHA256.Create(); - - byte[] checksum = await sha.ComputeHashAsync(Stream.Null).ConfigureAwait(false); - if ( values.Count == 0 ) - { - return prefix + "_" + BitConverter.ToString(checksum).Replace("-", string.Empty, StringComparison.OrdinalIgnoreCase); - } - - string content = string.Join(";", values); - using MemoryStream stream = new(Encoding.UTF8.GetBytes(content)); - - checksum = await sha.ComputeHashAsync(stream).ConfigureAwait(false); - - return prefix + "_" + BitConverter.ToString(checksum).Replace("-", string.Empty, StringComparison.OrdinalIgnoreCase); - } - - private async ValueTask> ListAutonomousCitiesInternalAsync(string countryCode) - { - string cacheKey = await GenerateCacheKeyAsync($"autonomous_cities_{countryCode}", new HashSet - { - countryCode - }).ConfigureAwait(false); - - string? response = await _cache.GetStringAsync(cacheKey).ConfigureAwait(false); - if ( !string.IsNullOrWhiteSpace(response) ) - { - return JsonSerializer.Deserialize>(response)!; - } - - IReadOnlyList results = await _stateRepository.ListAsync(l => l.CountryCode == countryCode - && autonomousTypes.Contains(l.Type!), - l => l.Name).ConfigureAwait(false); - - HashSet set = [.. results]; - - await _cache.SetStringAsync(cacheKey, - JsonSerializer.Serialize(set), - new DistributedCacheEntryOptions - { - AbsoluteExpirationRelativeToNow = TimeSpan.FromDays(1) - } - ).ConfigureAwait(false); - - return set; - } - - private async ValueTask> ListCountriesAsDictionaryInternalAsync(params CountryCode[] supportedCountryCodes) - { - HashSet countryCodes = new(StringComparer.OrdinalIgnoreCase); - if ( supportedCountryCodes.Length > 0 ) - { - foreach ( CountryCode countryCode in supportedCountryCodes ) - { - countryCodes.Add(countryCode.ToString()); - } - } - - string cacheKey = await GenerateCacheKeyAsync("countries", countryCodes).ConfigureAwait(false); - - string? response = await _cache.GetStringAsync(cacheKey).ConfigureAwait(false); - if ( !string.IsNullOrWhiteSpace(response) ) - { - return JsonSerializer.Deserialize>(response)!; - } - - IReadOnlyList results; - if ( countryCodes.Count == 0 ) - { - results = await _countryRepository.ListAsync().ConfigureAwait(false); - } - else - { - results = await _countryRepository.ListAsync(l => countryCodes.Contains(l.IsoCode)).ConfigureAwait(false); - } - - Dictionary dict = results.OrderBy(o => o.Name) - .ToDictionary(country => country.IsoCode, - country => country.Name, - StringComparer.OrdinalIgnoreCase); - - await _cache.SetStringAsync(cacheKey, - JsonSerializer.Serialize(dict), - new DistributedCacheEntryOptions - { - AbsoluteExpirationRelativeToNow = TimeSpan.FromDays(1) - }).ConfigureAwait(false); - - return dict; - } - - private async ValueTask> ListProvincesAsDictionaryInternalAsync(string countryCode) - { - string cacheKey = await GenerateCacheKeyAsync("provinces", new HashSet - { - countryCode - }).ConfigureAwait(false); - - string? response = await _cache.GetStringAsync(cacheKey).ConfigureAwait(false); - if ( !string.IsNullOrWhiteSpace(response) ) - { - return JsonSerializer.Deserialize>(response)!; - } - - IReadOnlyList results = await _stateRepository.ListAsync(l => l.CountryCode == countryCode) - .ConfigureAwait(false); - - Dictionary dict = results.OrderBy(o => o.Name) - .ToDictionary(state => state.IsoCode, - state => state.Name, - StringComparer.OrdinalIgnoreCase); - - await _cache.SetStringAsync(cacheKey, - JsonSerializer.Serialize(dict), - new DistributedCacheEntryOptions - { - AbsoluteExpirationRelativeToNow = TimeSpan.FromDays(1) - }).ConfigureAwait(false); - - return dict; - } -} diff --git a/demo/src/AddressValidation.Demo/Services/LoadingIndicatorService.cs b/demo/src/AddressValidation.Demo/Services/LoadingIndicatorService.cs deleted file mode 100644 index b603ceb..0000000 --- a/demo/src/AddressValidation.Demo/Services/LoadingIndicatorService.cs +++ /dev/null @@ -1,148 +0,0 @@ -namespace AddressValidation.Demo.Services; - -using System.Collections.Concurrent; -using Abstractions; -using Common.Components; - -public sealed class LoadingIndicatorService : ILoadingIndicatorService -{ - private readonly ConcurrentDictionary _indicators = new(); - - private Func _isLoading = null!; - - private Func _isVisible = null!; - - private Func _setIsLoading = null!; - - private Func _setIsVisible = null!; - - public LoadingIndicatorService() - { - MultipleInstanceMode(); - } - - public bool? IsLoading => _isLoading(); - - public bool? IsVisible => _isVisible(); - - public Task HideAsync() - { - return _setIsVisible(true); - } - - public Task SetIsLoadingAsync(bool value) - { - return _setIsLoading(value); - } - - public Task ShowAsync() - { - return _setIsVisible(false); - } - - private bool? GetIsLoadingMultiple() - { - bool? result = null; - foreach ( LoadingIndicator indicator in _indicators.Keys ) - { - switch ( result ) - { - case null: - result = indicator.IsLoading; - break; - default: - { - if ( result != indicator.IsLoading ) - { - return null; - } - - break; - } - } - } - - return result; - } - - private bool? GetIsVisibleMultiple() - { - bool? result = null; - foreach ( LoadingIndicator indicator in _indicators.Keys ) - { - switch ( result ) - { - case null: - result = indicator.IsVisible; - break; - default: - { - if ( result != indicator.IsVisible ) - { - return null; - } - - break; - } - } - } - - return result; - } - - private void MultipleInstanceMode() - { - _isLoading = GetIsLoadingMultiple; - _isVisible = GetIsVisibleMultiple; - _setIsLoading = SetIsLoadingMultipleAsync; - _setIsVisible = SetIsVisibleMultipleAsync; - } - - private Task SetIsLoadingMultipleAsync(bool value) - { - List tasks = new(_indicators.Count); - tasks.AddRange(_indicators.Keys.Select(indicator => indicator.SetIsLoading(value))); - - return Task.WhenAll(tasks); - } - - private Task SetIsVisibleMultipleAsync(bool value) - { - List tasks = new(_indicators.Count); - tasks.AddRange(_indicators.Keys.Select(indicator => indicator.SetIsVisible(value))); - - return Task.WhenAll(tasks); - } - - private void SingleInstanceMode(LoadingIndicator loadIndicator) - { - _isLoading = () => loadIndicator.IsLoading; - _isVisible = () => loadIndicator.IsVisible; - } - - void ILoadingIndicatorService.Subscribe(LoadingIndicator loadIndicator) - { - _indicators.TryAdd(loadIndicator, 0); - if ( _indicators.Count == 1 ) - { - SingleInstanceMode(loadIndicator); - } - else - { - MultipleInstanceMode(); - } - } - - void ILoadingIndicatorService.Unsubscribe(LoadingIndicator loadIndicator) - { - _indicators.TryRemove(loadIndicator, out _); - if ( _indicators.Count == 1 ) - { - SingleInstanceMode(loadIndicator); - } - else - { - MultipleInstanceMode(); - } - } -} diff --git a/demo/src/AddressValidation.Demo/Services/SettingsService.cs b/demo/src/AddressValidation.Demo/Services/SettingsService.cs deleted file mode 100644 index e2b16b4..0000000 --- a/demo/src/AddressValidation.Demo/Services/SettingsService.cs +++ /dev/null @@ -1,53 +0,0 @@ -namespace AddressValidation.Demo.Services; - -using Abstractions; -using Infrastructure.Repositories.Abstractions; -using Microsoft.AspNetCore.DataProtection; -using Models.Entities; - -public sealed class SettingsService( - IDataProtectionProvider dataProtectionProvider, - ISettingsRepository settingsRepository) : ISettingsService -{ - private readonly IDataProtectionProvider _dataProtectionProvider = dataProtectionProvider ?? throw new ArgumentNullException(nameof(dataProtectionProvider)); - - private readonly ISettingsRepository _settingsRepository = settingsRepository ?? throw new ArgumentNullException(nameof(settingsRepository)); - - public ValueTask AddOrUpdateAsync(string key, string? value, bool encrypt = false, CancellationToken cancellationToken = default) - { - ArgumentException.ThrowIfNullOrWhiteSpace(key); - return AddOrUpdateInternalAsync(key, value, encrypt, cancellationToken); - } - - private async ValueTask AddOrUpdateInternalAsync(string key, string? value, bool encrypt, CancellationToken cancellationToken) - { - if ( !string.IsNullOrWhiteSpace(value) && encrypt ) - { - IDataProtector protector = _dataProtectionProvider.CreateProtector("AddressValidation.Demo.Settings.V1"); - value = protector.Protect(value); - } - - bool result; - if ( !await _settingsRepository.AnyAsync(a => a.Key == key, cancellationToken).ConfigureAwait(false) ) - { - SettingsModel model = new() - { - Key = key, - Value = value, - IsEncrypted = encrypt - }; - - result = await _settingsRepository.AddAsync(model, cancellationToken).ConfigureAwait(false); - } - else - { - result = await _settingsRepository.UpdateAsync(u => u.Key == key, - s => - s.SetProperty(p => p.Value, value) - .SetProperty(p => p.IsEncrypted, encrypt), - cancellationToken).ConfigureAwait(false); - } - - return result; - } -} diff --git a/demo/src/AddressValidation.Demo/_Imports.razor b/demo/src/AddressValidation.Demo/_Imports.razor deleted file mode 100644 index 0bf774f..0000000 --- a/demo/src/AddressValidation.Demo/_Imports.razor +++ /dev/null @@ -1,13 +0,0 @@ -@using System.Net.Http -@using System.Net.Http.Json -@using Microsoft.AspNetCore.Components.Forms -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using static RenderMode -@using Microsoft.AspNetCore.Components.Web.Virtualization -@using Microsoft.JSInterop -@using AddressValidation.Demo -@using AddressValidation.Demo.Common -@using Radzen -@using Radzen.Blazor -@using AddressValidation.Demo.Common.Components diff --git a/demo/src/AddressValidation.Demo/appsettings.Development.json b/demo/src/AddressValidation.Demo/appsettings.Development.json deleted file mode 100644 index a34cd70..0000000 --- a/demo/src/AddressValidation.Demo/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/demo/src/AddressValidation.Demo/appsettings.json b/demo/src/AddressValidation.Demo/appsettings.json deleted file mode 100644 index 23160a4..0000000 --- a/demo/src/AddressValidation.Demo/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/demo/src/AddressValidation.Demo/wwwroot/app.css b/demo/src/AddressValidation.Demo/wwwroot/app.css deleted file mode 100644 index 9982277..0000000 --- a/demo/src/AddressValidation.Demo/wwwroot/app.css +++ /dev/null @@ -1,53 +0,0 @@ -h1:focus { - outline: none; -} - -.valid.modified:not([type=checkbox]) { - outline: 1px solid #26b050; -} - -.invalid { - outline: 1px solid #e50000; -} - -.validation-message { - color: #e50000; -} - -.blazor-error-boundary { - background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; - padding: 1rem 1rem 1rem 3.7rem; - color: white; -} - -.blazor-error-boundary::after { - content: "An error has occurred." -} - -.darker-border-checkbox.form-check-input { - border-color: #929292; -} - -.avd-input-text-masked { - transition: all 0.5s ease; - color: transparent !important; - text-shadow: 0 0 5px #000 !important; -} - -.avd-input-text-masked:hover { - color: #000 !important; - text-shadow: none !important; -} - -pre { - margin: 0 !important; - overflow: scroll !important; -} - -.font-awesome { - --rz-icon-font-family: 'Font Awesome 6 Free'; -} - -.font-awesome-brands { - --rz-icon-font-family: 'Font Awesome 6 Brands'; -} From 02842f294cfcaa972b8b4914b69eaaf252e2e119 Mon Sep 17 00:00:00 2001 From: Alan Brault Date: Fri, 27 Feb 2026 07:15:49 -0500 Subject: [PATCH 3/5] chore: remove nuke artifacts Signed-off-by: Alan Brault --- .nuke/.gitignore | 1 - .nuke/build.schema.json | 127 ---------------------------------------- .nuke/parameters.json | 5 -- 3 files changed, 133 deletions(-) delete mode 100644 .nuke/.gitignore delete mode 100644 .nuke/build.schema.json delete mode 100644 .nuke/parameters.json diff --git a/.nuke/.gitignore b/.nuke/.gitignore deleted file mode 100644 index 36445e5..0000000 --- a/.nuke/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/temp diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json deleted file mode 100644 index c380d5d..0000000 --- a/.nuke/build.schema.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "definitions": { - "Host": { - "type": "string", - "enum": [ - "AppVeyor", - "AzurePipelines", - "Bamboo", - "Bitbucket", - "Bitrise", - "GitHubActions", - "GitLab", - "Jenkins", - "Rider", - "SpaceAutomation", - "TeamCity", - "Terminal", - "TravisCI", - "VisualStudio", - "VSCode" - ] - }, - "ExecutableTarget": { - "type": "string", - "enum": [ - "Clean", - "Compile", - "CompileDocs", - "DeployDocs", - "PublishDemo", - "Restore", - "SonarScanBegin", - "SonarScanEnd", - "Test" - ] - }, - "Verbosity": { - "type": "string", - "description": "", - "enum": [ - "Verbose", - "Normal", - "Minimal", - "Quiet" - ] - }, - "NukeBuild": { - "properties": { - "Continue": { - "type": "boolean", - "description": "Indicates to continue a previously failed build attempt" - }, - "Help": { - "type": "boolean", - "description": "Shows the help text for this build assembly" - }, - "Host": { - "description": "Host for execution. Default is 'automatic'", - "$ref": "#/definitions/Host" - }, - "NoLogo": { - "type": "boolean", - "description": "Disables displaying the NUKE logo" - }, - "Partition": { - "type": "string", - "description": "Partition to use on CI" - }, - "Plan": { - "type": "boolean", - "description": "Shows the execution plan (HTML)" - }, - "Profile": { - "type": "array", - "description": "Defines the profiles to load", - "items": { - "type": "string" - } - }, - "Root": { - "type": "string", - "description": "Root directory during build execution" - }, - "Skip": { - "type": "array", - "description": "List of targets to be skipped. Empty list skips all dependencies", - "items": { - "$ref": "#/definitions/ExecutableTarget" - } - }, - "Target": { - "type": "array", - "description": "List of targets to be invoked. Default is '{default_target}'", - "items": { - "$ref": "#/definitions/ExecutableTarget" - } - }, - "Verbosity": { - "description": "Logging verbosity during build execution. Default is 'Normal'", - "$ref": "#/definitions/Verbosity" - } - } - } - }, - "allOf": [ - { - "properties": { - "Configuration": { - "type": "string", - "description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)", - "enum": [ - "Debug", - "Release" - ] - }, - "Solution": { - "type": "string", - "description": "Path to a solution file that is automatically loaded" - } - } - }, - { - "$ref": "#/definitions/NukeBuild" - } - ] -} diff --git a/.nuke/parameters.json b/.nuke/parameters.json deleted file mode 100644 index 838a86f..0000000 --- a/.nuke/parameters.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "$schema": "build.schema.json", - "Host": "GitHubActions", - "Solution": "AddressValidation.sln" -} From 4981442ec19d3aa6a984d67360a910dce5cec50c Mon Sep 17 00:00:00 2001 From: Alan Brault Date: Fri, 27 Feb 2026 07:24:50 -0500 Subject: [PATCH 4/5] chore: update to .net 10 Signed-off-by: Alan Brault --- Directory.Packages.props | 31 +++++-------------- ...AddressValidation.Integration.FedEx.csproj | 2 +- ...ddressValidation.Integration.Google.csproj | 2 +- ...sValidation.Integration.PitneyBowes.csproj | 2 +- ...s.AddressValidation.Integration.Ups.csproj | 2 +- .../Visus.AddressValidation.csproj | 2 +- ...sValidation.Integration.FedEx.Tests.csproj | 2 +- ...Validation.Integration.Google.Tests.csproj | 2 +- ...ation.Integration.PitneyBowes.Tests.csproj | 2 +- ...essValidation.Integration.Ups.Tests.csproj | 2 +- ...ssValidation.SourceGeneration.Tests.csproj | 2 +- .../Visus.AddressValidation.Tests.csproj | 2 +- 12 files changed, 18 insertions(+), 35 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index e19215d..442435b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -4,43 +4,26 @@ true
- - - - - - - - + - - - - - + + + + + - - - - - - - - - - - + diff --git a/src/Visus.AddressValidation.Integration.FedEx/Visus.AddressValidation.Integration.FedEx.csproj b/src/Visus.AddressValidation.Integration.FedEx/Visus.AddressValidation.Integration.FedEx.csproj index 840ca31..45b7fdc 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Visus.AddressValidation.Integration.FedEx.csproj +++ b/src/Visus.AddressValidation.Integration.FedEx/Visus.AddressValidation.Integration.FedEx.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 true diff --git a/src/Visus.AddressValidation.Integration.Google/Visus.AddressValidation.Integration.Google.csproj b/src/Visus.AddressValidation.Integration.Google/Visus.AddressValidation.Integration.Google.csproj index d0d0934..976933d 100644 --- a/src/Visus.AddressValidation.Integration.Google/Visus.AddressValidation.Integration.Google.csproj +++ b/src/Visus.AddressValidation.Integration.Google/Visus.AddressValidation.Integration.Google.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 true diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Visus.AddressValidation.Integration.PitneyBowes.csproj b/src/Visus.AddressValidation.Integration.PitneyBowes/Visus.AddressValidation.Integration.PitneyBowes.csproj index b9cea6a..1a13bf1 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Visus.AddressValidation.Integration.PitneyBowes.csproj +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Visus.AddressValidation.Integration.PitneyBowes.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 true diff --git a/src/Visus.AddressValidation.Integration.Ups/Visus.AddressValidation.Integration.Ups.csproj b/src/Visus.AddressValidation.Integration.Ups/Visus.AddressValidation.Integration.Ups.csproj index 18160ee..d8c6e46 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Visus.AddressValidation.Integration.Ups.csproj +++ b/src/Visus.AddressValidation.Integration.Ups/Visus.AddressValidation.Integration.Ups.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 true diff --git a/src/Visus.AddressValidation/Visus.AddressValidation.csproj b/src/Visus.AddressValidation/Visus.AddressValidation.csproj index e709e82..619db94 100644 --- a/src/Visus.AddressValidation/Visus.AddressValidation.csproj +++ b/src/Visus.AddressValidation/Visus.AddressValidation.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 true diff --git a/tests/Visus.AddressValidation.Integration.FedEx.Tests/Visus.AddressValidation.Integration.FedEx.Tests.csproj b/tests/Visus.AddressValidation.Integration.FedEx.Tests/Visus.AddressValidation.Integration.FedEx.Tests.csproj index 27a38d6..ce124ee 100644 --- a/tests/Visus.AddressValidation.Integration.FedEx.Tests/Visus.AddressValidation.Integration.FedEx.Tests.csproj +++ b/tests/Visus.AddressValidation.Integration.FedEx.Tests/Visus.AddressValidation.Integration.FedEx.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true diff --git a/tests/Visus.AddressValidation.Integration.Google.Tests/Visus.AddressValidation.Integration.Google.Tests.csproj b/tests/Visus.AddressValidation.Integration.Google.Tests/Visus.AddressValidation.Integration.Google.Tests.csproj index 2b1dbb6..56fd0a6 100644 --- a/tests/Visus.AddressValidation.Integration.Google.Tests/Visus.AddressValidation.Integration.Google.Tests.csproj +++ b/tests/Visus.AddressValidation.Integration.Google.Tests/Visus.AddressValidation.Integration.Google.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true diff --git a/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/Visus.AddressValidation.Integration.PitneyBowes.Tests.csproj b/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/Visus.AddressValidation.Integration.PitneyBowes.Tests.csproj index 08b03a1..1f9b830 100644 --- a/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/Visus.AddressValidation.Integration.PitneyBowes.Tests.csproj +++ b/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/Visus.AddressValidation.Integration.PitneyBowes.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true diff --git a/tests/Visus.AddressValidation.Integration.Ups.Tests/Visus.AddressValidation.Integration.Ups.Tests.csproj b/tests/Visus.AddressValidation.Integration.Ups.Tests/Visus.AddressValidation.Integration.Ups.Tests.csproj index ed8e0a7..7556b9f 100644 --- a/tests/Visus.AddressValidation.Integration.Ups.Tests/Visus.AddressValidation.Integration.Ups.Tests.csproj +++ b/tests/Visus.AddressValidation.Integration.Ups.Tests/Visus.AddressValidation.Integration.Ups.Tests.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 true diff --git a/tests/Visus.AddressValidation.SourceGeneration.Tests/Visus.AddressValidation.SourceGeneration.Tests.csproj b/tests/Visus.AddressValidation.SourceGeneration.Tests/Visus.AddressValidation.SourceGeneration.Tests.csproj index d9a87fe..138699f 100644 --- a/tests/Visus.AddressValidation.SourceGeneration.Tests/Visus.AddressValidation.SourceGeneration.Tests.csproj +++ b/tests/Visus.AddressValidation.SourceGeneration.Tests/Visus.AddressValidation.SourceGeneration.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true diff --git a/tests/Visus.AddressValidation.Tests/Visus.AddressValidation.Tests.csproj b/tests/Visus.AddressValidation.Tests/Visus.AddressValidation.Tests.csproj index 13cadaf..4dcb4d1 100644 --- a/tests/Visus.AddressValidation.Tests/Visus.AddressValidation.Tests.csproj +++ b/tests/Visus.AddressValidation.Tests/Visus.AddressValidation.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 true From 9cb55727151925139c002711b36fd693483306a1 Mon Sep 17 00:00:00 2001 From: Alan Brault Date: Fri, 27 Feb 2026 07:29:28 -0500 Subject: [PATCH 5/5] chore: format cleanups Signed-off-by: Alan Brault --- Directory.Build.props | 82 +++++++++---------- Directory.Build.targets | 78 +++++++++--------- .../Abstractions/AddressClassification.cs | 2 +- .../Abstractions/AddressType.cs | 12 +-- .../Abstractions/ResolutionMethod.cs | 3 +- .../Constants.cs | 3 +- .../Extensions/ServiceCollectionExtensions.cs | 23 +++--- .../Http/FedExAddressValidationClient.cs | 9 +- .../Http/FedExAddressValidationRequest.cs | 5 +- .../Http/FedExAuthenticationClient.cs | 6 +- .../Model/AddressValidationResponse.cs | 7 +- .../Json/AddressValidationRequestConverter.cs | 7 +- .../Services/AddressValidationService.cs | 1 - .../Validation/ApiResponseValidator.cs | 10 +-- ...AddressValidation.Integration.FedEx.csproj | 48 +++++------ .../Abstractions/ConfirmationLevel.cs | 2 +- .../Abstractions/Granularity.cs | 2 +- .../Abstractions/VerificationResult.cs | 2 +- .../Constants.cs | 2 +- .../Extensions/ServiceCollectionExtensions.cs | 10 +-- .../Http/GoogleAddressValidationClient.cs | 12 +-- .../Http/GoogleAuthenticationClient.cs | 16 ++-- .../Services/GoogleAuthenticationService.cs | 2 +- .../Validation/ApiResponseValidator.cs | 12 +-- ...ddressValidation.Integration.Google.csproj | 50 +++++------ .../Abstractions/StatusCode.cs | 2 +- .../Constants.cs | 2 +- .../Extensions/ServiceCollectionExtensions.cs | 10 +-- .../PitneyBowesAddressValidationClient.cs | 12 +-- .../Http/PitneyBowesAuthenticationClient.cs | 6 +- .../Model/AddressValidationResponse.cs | 2 +- .../Services/AddressValidationService.cs | 2 +- .../PitneyBowesAuthenticationService.cs | 2 +- .../Validation/ApiResponseValidator.cs | 2 +- ...sValidation.Integration.PitneyBowes.csproj | 46 +++++------ .../Abstractions/AddressClassificationCode.cs | 2 +- .../Abstractions/ResponseStatusCode.cs | 2 +- .../Constants.cs | 2 +- .../Extensions/ServiceCollectionExtensions.cs | 10 +-- .../Http/ApiResponse.cs | 2 +- .../Http/UpsAddressValidationClient.cs | 8 +- .../Http/UpsAuthenticationClient.cs | 6 +- .../Model/AddressValidationResponse.cs | 6 +- .../Services/AddressValidationService.cs | 2 +- .../Services/UpsAuthenticationService.cs | 2 +- .../AddressValidationRequestValidator.cs | 18 ++-- ...s.AddressValidation.Integration.Ups.csproj | 34 ++++---- .../CustomResponseDataGenerator.cs | 60 +++++++------- .../IncrementalValuesProviderExtensions.cs | 44 +++++----- .../Model/HierarchyInfo.Syntax.cs | 18 ++-- .../Model/HierarchyInfo.cs | 12 +-- .../Model/TypeInfo.cs | 4 +- ....AddressValidation.SourceGeneration.csproj | 24 +++--- .../Abstractions/ClientEnvironment.cs | 2 +- .../Abstractions/CountryCode.cs | 2 +- src/Visus.AddressValidation/Constants.cs | 4 +- .../Http/IApiResponse.cs | 2 +- .../AbstractAddressValidationResponse.cs | 2 +- .../Model/IAddressValidationResponse.cs | 20 ++--- .../Json/JsonStringBooleanConverter.cs | 6 +- .../Json/TokenResponseConverter.cs | 2 +- .../Services/AbstractAuthenticationService.cs | 3 +- ...stractAddressValidationRequestValidator.cs | 4 +- .../Validation/ValidationSeverity.cs | 2 +- .../Validation/ValidationState.cs | 2 +- .../Visus.AddressValidation.csproj | 36 ++++---- 66 files changed, 414 insertions(+), 421 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 912b7ea..88dfb61 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,47 +1,47 @@ - - - Visus Development Team - Copyright (c) 2024-2026 Visus Development Team - enable - 14 - en-US - enable - - - true - false - AllEnabledByDefault - + + Visus Development Team + Copyright (c) 2024-2026 Visus Development Team + enable + 14 + en-US + enable + - - embedded - true - true - false - https://github.com/visus-io/addressvalidation - true - git - https://github.com/visus-io/addressvalidation.git - + + true + false + AllEnabledByDefault + - - true - true - - - - $(BeforePack);IncludeAnalyzersInPackage - + + embedded + true + true + false + https://github.com/visus-io/addressvalidation + true + git + https://github.com/visus-io/addressvalidation.git + + + + true + true + + + + $(BeforePack);IncludeAnalyzersInPackage + + + + + <_Parameter1>$(AssemblyName).Tests + + + <_Parameter1>DynamicProxyGenAssembly2 + + - - - <_Parameter1>$(AssemblyName).Tests - - - <_Parameter1>DynamicProxyGenAssembly2 - - - diff --git a/Directory.Build.targets b/Directory.Build.targets index b5bc844..e74dd1a 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,47 +1,47 @@ - - analyzers/dotnet - $(GeneratorProjectBaseTargetPath)/$(AnalyzerLanguage) - $(NoWarn);RS1041 - + + analyzers/dotnet + $(GeneratorProjectBaseTargetPath)/$(AnalyzerLanguage) + $(NoWarn);RS1041 + + + + + $(GeneratorProjectBaseTargetPath) + + - - - $(GeneratorProjectBaseTargetPath) - - - - - - - + + + + - - - <_TargetPathsToSymbols Include="@(_AnalyzerFile)" TargetPath="/%(_AnalyzerFile.PackagePath)" Condition="%(_AnalyzerFile.IsSymbol)" /> - - + + + <_TargetPathsToSymbols Include="@(_AnalyzerFile)" TargetPath="/%(_AnalyzerFile.PackagePath)" Condition="%(_AnalyzerFile.IsSymbol)"/> + + - + - - <_AnalyzerPath>analyzers/dotnet - <_AnalyzerPath Condition="'$(AnalyzerRoslynVersion)' != ''">$(_AnalyzerPath)/roslyn$(AnalyzerRoslynVersion) - <_AnalyzerPath Condition="'$(AnalyzerLanguage)' != ''">$(_AnalyzerPath)/$(AnalyzerLanguage) - + + <_AnalyzerPath>analyzers/dotnet + <_AnalyzerPath Condition="'$(AnalyzerRoslynVersion)' != ''">$(_AnalyzerPath)/roslyn$(AnalyzerRoslynVersion) + <_AnalyzerPath Condition="'$(AnalyzerLanguage)' != ''">$(_AnalyzerPath)/$(AnalyzerLanguage) + - - <_AnalyzerPackFile Include="@(_BuildOutputInPackage->WithMetadataValue('TargetFramework', 'netstandard2.0'))" IsSymbol="false" /> - <_AnalyzerPackFile Include="@(_TargetPathsToSymbols->WithMetadataValue('TargetFramework', 'netstandard2.0'))" IsSymbol="true" /> - <_AnalyzerPackFile PackagePath="$(_AnalyzerPath)/%(TargetPath)" /> - + + <_AnalyzerPackFile Include="@(_BuildOutputInPackage->WithMetadataValue('TargetFramework', 'netstandard2.0'))" IsSymbol="false"/> + <_AnalyzerPackFile Include="@(_TargetPathsToSymbols->WithMetadataValue('TargetFramework', 'netstandard2.0'))" IsSymbol="true"/> + <_AnalyzerPackFile PackagePath="$(_AnalyzerPath)/%(TargetPath)"/> + - - + + diff --git a/src/Visus.AddressValidation.Integration.FedEx/Abstractions/AddressClassification.cs b/src/Visus.AddressValidation.Integration.FedEx/Abstractions/AddressClassification.cs index 7fbee0d..dceea13 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Abstractions/AddressClassification.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Abstractions/AddressClassification.cs @@ -25,5 +25,5 @@ internal enum AddressClassification /// /// Residential Address /// - RESIDENTIAL + RESIDENTIAL, } diff --git a/src/Visus.AddressValidation.Integration.FedEx/Abstractions/AddressType.cs b/src/Visus.AddressValidation.Integration.FedEx/Abstractions/AddressType.cs index ef3dbc9..9d94811 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Abstractions/AddressType.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Abstractions/AddressType.cs @@ -8,17 +8,17 @@ namespace Visus.AddressValidation.Integration.FedEx.Abstractions; internal enum AddressType { /// - /// Address country not supported + /// Address country not supported /// RAW, - + /// - /// Address country supported, but unable to match the address against reference data. + /// Address country supported, but unable to match the address against reference data. /// NORMAL, - + /// - /// Address service was able to successfully match the address against reference data. + /// Address service was able to successfully match the address against reference data. /// - STANDARDIZED + STANDARDIZED, } diff --git a/src/Visus.AddressValidation.Integration.FedEx/Abstractions/ResolutionMethod.cs b/src/Visus.AddressValidation.Integration.FedEx/Abstractions/ResolutionMethod.cs index 7650010..d7bac46 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Abstractions/ResolutionMethod.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Abstractions/ResolutionMethod.cs @@ -1,6 +1,5 @@ namespace Visus.AddressValidation.Integration.FedEx.Abstractions; -using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Text.Json.Serialization; @@ -31,5 +30,5 @@ internal enum ResolutionMethod /// /// US Geo/Map Validated /// - TELEATLAS_GEO_VALIDATE + TELEATLAS_GEO_VALIDATE, } diff --git a/src/Visus.AddressValidation.Integration.FedEx/Constants.cs b/src/Visus.AddressValidation.Integration.FedEx/Constants.cs index 50beb59..6c0f2e3 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Constants.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Constants.cs @@ -1,6 +1,5 @@ namespace Visus.AddressValidation.Integration.FedEx; -using Abstractions; using AddressValidation.Abstractions; /// @@ -86,6 +85,6 @@ public static class Constants CountryCode.UY, CountryCode.VE, CountryCode.VI, - CountryCode.ZA + CountryCode.ZA, }; } diff --git a/src/Visus.AddressValidation.Integration.FedEx/Extensions/ServiceCollectionExtensions.cs b/src/Visus.AddressValidation.Integration.FedEx/Extensions/ServiceCollectionExtensions.cs index 59118e8..94b2798 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Extensions/ServiceCollectionExtensions.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Extensions/ServiceCollectionExtensions.cs @@ -1,11 +1,10 @@ -using Microsoft.Extensions.DependencyInjection; -using Visus.AddressValidation.Services; - namespace Visus.AddressValidation.Integration.FedEx.Extensions; using AddressValidation.Http; +using AddressValidation.Services; using AddressValidation.Validation; using Http; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Services; using Validation; @@ -26,24 +25,24 @@ public static IServiceCollection AddFedExAddressValidation(this IServiceCollecti ArgumentNullException.ThrowIfNull(services); services.TryAddSingleton(); - + services.TryAddScoped, AddressValidationRequestValidator>(); services.TryAddScoped, ApiResponseValidator>(); - + services.TryAddScoped, AddressValidationService>(); services.AddHttpClient() .AddStandardResilienceHandler(); services.AddHttpClient() - .RedactLoggedHeaders(["Authorization"]) + .RedactLoggedHeaders(["Authorization",]) .AddHttpMessageHandler(provider => - { - FedExAuthenticationService authenticationService = - provider.GetRequiredService(); - - return new BearerTokenDelegatingHandler(authenticationService); - }) + { + FedExAuthenticationService authenticationService = + provider.GetRequiredService(); + + return new BearerTokenDelegatingHandler(authenticationService); + }) .AddStandardResilienceHandler(); return services; diff --git a/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAddressValidationClient.cs b/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAddressValidationClient.cs index 68dc1d0..1a5ef00 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAddressValidationClient.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAddressValidationClient.cs @@ -2,7 +2,6 @@ namespace Visus.AddressValidation.Integration.FedEx.Http; using System.Net.Http.Json; using System.Runtime.CompilerServices; -using Abstractions; using AddressValidation.Abstractions; using Microsoft.Extensions.Configuration; using Serialization.Json; @@ -35,7 +34,7 @@ internal sealed class FedExAddressValidationClient( { ClientEnvironment.DEVELOPMENT => Constants.DevelopmentEndpointBaseUri, ClientEnvironment.PRODUCTION => Constants.ProductionEndpointBaseUri, - _ => Constants.DevelopmentEndpointBaseUri + _ => Constants.DevelopmentEndpointBaseUri, }; Uri requestUri = new(baseUri, "/address/v1/addresses/resolve"); @@ -48,19 +47,19 @@ internal sealed class FedExAddressValidationClient( if ( response.IsSuccessStatusCode ) { return await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.ApiResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); } ApiErrorResponse? errorResponse = await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.ApiErrorResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); if ( errorResponse is not null ) { return new ApiResponse { - ErrorResponse = errorResponse + ErrorResponse = errorResponse, }; } diff --git a/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAddressValidationRequest.cs b/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAddressValidationRequest.cs index 2d8d8c0..bbe64d8 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAddressValidationRequest.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAddressValidationRequest.cs @@ -1,9 +1,8 @@ -using System.Text.Json.Serialization; -using Visus.AddressValidation.Integration.FedEx.Serialization.Json; - namespace Visus.AddressValidation.Integration.FedEx.Http; +using System.Text.Json.Serialization; using AddressValidation.Http; +using Serialization.Json; /// /// Representation of a uniformed address validation request to FedEx. diff --git a/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAuthenticationClient.cs b/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAuthenticationClient.cs index 3eb054a..260b43a 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAuthenticationClient.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Http/FedExAuthenticationClient.cs @@ -41,7 +41,7 @@ public FedExAuthenticationClient(IConfiguration configuration, { ClientEnvironment.DEVELOPMENT => Constants.DevelopmentEndpointBaseUri, ClientEnvironment.PRODUCTION => Constants.ProductionEndpointBaseUri, - _ => Constants.DevelopmentEndpointBaseUri + _ => Constants.DevelopmentEndpointBaseUri, }; Uri requestUri = new(baseUri, "/oauth/token"); @@ -50,7 +50,7 @@ public FedExAuthenticationClient(IConfiguration configuration, [ new("client_id", clientId), new("client_secret", clientSecret), - new("grant_type", "client_credentials") + new("grant_type", "client_credentials"), ]; using HttpRequestMessage request = new(HttpMethod.Post, requestUri); @@ -64,7 +64,7 @@ public FedExAuthenticationClient(IConfiguration configuration, } return await response.Content.ReadFromJsonAsync(DefaultJsonSerializerContext.Default.TokenResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); } } diff --git a/src/Visus.AddressValidation.Integration.FedEx/Model/AddressValidationResponse.cs b/src/Visus.AddressValidation.Integration.FedEx/Model/AddressValidationResponse.cs index 2c45ed1..a9a796c 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Model/AddressValidationResponse.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Model/AddressValidationResponse.cs @@ -5,7 +5,6 @@ namespace Visus.AddressValidation.Integration.FedEx.Model; using AddressValidation.Model; using AddressValidation.Validation; using Http; -using Validation; internal sealed class AddressValidationResponse : AbstractAddressValidationResponse { @@ -28,13 +27,13 @@ public AddressValidationResponse(ApiResponse response, IValidationResult? valida PostalCode = primaryAddress.PostalCode; StateOrProvince = primaryAddress.StateOrProvince; IsResidential = primaryAddress.Classification == AddressClassification.RESIDENTIAL; - + Dictionary customResponseData = new(StringComparer.OrdinalIgnoreCase); - + customResponseData.Merge(response.GetCustomResponseData()); customResponseData.Merge(primaryAddress.GetCustomResponseData()); customResponseData.Merge(primaryAddress.Attributes.GetCustomResponseData()); - + CustomResponseData = customResponseData; } } diff --git a/src/Visus.AddressValidation.Integration.FedEx/Serialization/Json/AddressValidationRequestConverter.cs b/src/Visus.AddressValidation.Integration.FedEx/Serialization/Json/AddressValidationRequestConverter.cs index a575f02..deeee65 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Serialization/Json/AddressValidationRequestConverter.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Serialization/Json/AddressValidationRequestConverter.cs @@ -38,12 +38,13 @@ public override void Write(Utf8JsonWriter writer, FedExAddressValidationRequest? writer.WriteStartArray(AddressesToValidatePropertyName); writer.WriteStartObject(); writer.WriteStartObject(AddressPropertyName); - + writer.WriteStartArray(StreetLinesPropertyName); foreach ( string addressLine in value.AddressLines ) { writer.WriteStringValue(addressLine); } + writer.WriteEndArray(); if ( !string.IsNullOrWhiteSpace(value.CityOrTown) ) @@ -60,9 +61,9 @@ public override void Write(Utf8JsonWriter writer, FedExAddressValidationRequest? { writer.WriteString(PostalCodePropertyName, value.PostalCode); } - + writer.WriteString(CountryCodePropertyName, value.Country.Value.ToString()); - + writer.WriteEndObject(); writer.WriteEndObject(); writer.WriteEndArray(); diff --git a/src/Visus.AddressValidation.Integration.FedEx/Services/AddressValidationService.cs b/src/Visus.AddressValidation.Integration.FedEx/Services/AddressValidationService.cs index d2048cf..591f22b 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Services/AddressValidationService.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Services/AddressValidationService.cs @@ -3,7 +3,6 @@ namespace Visus.AddressValidation.Integration.FedEx.Services; using AddressValidation.Services; using AddressValidation.Validation; using Http; -using Validation; internal sealed class AddressValidationService : AbstractAddressValidationService { diff --git a/src/Visus.AddressValidation.Integration.FedEx/Validation/ApiResponseValidator.cs b/src/Visus.AddressValidation.Integration.FedEx/Validation/ApiResponseValidator.cs index 708d9f4..7fa02b2 100644 --- a/src/Visus.AddressValidation.Integration.FedEx/Validation/ApiResponseValidator.cs +++ b/src/Visus.AddressValidation.Integration.FedEx/Validation/ApiResponseValidator.cs @@ -27,7 +27,7 @@ protected override ValueTask PreValidateAsync(ApiResponse instance, ISet results, CancellationToken cancellationToken = default) { - Debug.Assert(instance.Result != null, "instance.Result != null"); + Debug.Assert(instance.Result != null); for ( int i = 0; i < instance.Result.ResolvedAddresses.Length; i++ ) { @@ -37,8 +37,8 @@ protected override ValueTask ValidateAsync(ApiResponse instance, ISet - - net10.0 - true - + + net10.0 + true + - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + - - - + + + + + + + - - - - diff --git a/src/Visus.AddressValidation.Integration.Google/Abstractions/ConfirmationLevel.cs b/src/Visus.AddressValidation.Integration.Google/Abstractions/ConfirmationLevel.cs index 845299b..7fd032e 100644 --- a/src/Visus.AddressValidation.Integration.Google/Abstractions/ConfirmationLevel.cs +++ b/src/Visus.AddressValidation.Integration.Google/Abstractions/ConfirmationLevel.cs @@ -18,5 +18,5 @@ internal enum ConfirmationLevel UNCONFIRMED_BUT_PLAUSIBLE = 2, [Description("This component was not confirmed and is likely to be wrong. For example, a neighborhood that does not fit the rest of the address.")] - UNCONFIRMED_AND_SUSPICIOUS = 3 + UNCONFIRMED_AND_SUSPICIOUS = 3, } diff --git a/src/Visus.AddressValidation.Integration.Google/Abstractions/Granularity.cs b/src/Visus.AddressValidation.Integration.Google/Abstractions/Granularity.cs index 1b0deb2..fdd0c4d 100644 --- a/src/Visus.AddressValidation.Integration.Google/Abstractions/Granularity.cs +++ b/src/Visus.AddressValidation.Integration.Google/Abstractions/Granularity.cs @@ -27,5 +27,5 @@ internal enum Granularity ROUTE = 5, [Description("All other granularities, which are bucketed together since they are not deliverable.")] - OTHER = 6 + OTHER = 6, } diff --git a/src/Visus.AddressValidation.Integration.Google/Abstractions/VerificationResult.cs b/src/Visus.AddressValidation.Integration.Google/Abstractions/VerificationResult.cs index 7715077..26b013b 100644 --- a/src/Visus.AddressValidation.Integration.Google/Abstractions/VerificationResult.cs +++ b/src/Visus.AddressValidation.Integration.Google/Abstractions/VerificationResult.cs @@ -8,6 +8,6 @@ internal enum VerificationResult UNKNOWN = 0, UNVERIFIED = 1, #pragma warning disable CA1707 - PARTIALLY_VERIFIED = 2 + PARTIALLY_VERIFIED = 2, #pragma warning restore CA1707 } diff --git a/src/Visus.AddressValidation.Integration.Google/Constants.cs b/src/Visus.AddressValidation.Integration.Google/Constants.cs index 7af95c2..2a8d3d1 100644 --- a/src/Visus.AddressValidation.Integration.Google/Constants.cs +++ b/src/Visus.AddressValidation.Integration.Google/Constants.cs @@ -69,6 +69,6 @@ public static class Constants CountryCode.SG, CountryCode.SI, CountryCode.SK, - CountryCode.US + CountryCode.US, }; } diff --git a/src/Visus.AddressValidation.Integration.Google/Extensions/ServiceCollectionExtensions.cs b/src/Visus.AddressValidation.Integration.Google/Extensions/ServiceCollectionExtensions.cs index 623e2eb..dd96d06 100644 --- a/src/Visus.AddressValidation.Integration.Google/Extensions/ServiceCollectionExtensions.cs +++ b/src/Visus.AddressValidation.Integration.Google/Extensions/ServiceCollectionExtensions.cs @@ -35,12 +35,12 @@ public static IServiceCollection AddGoogleAddressValidation(this IServiceCollect .AddStandardResilienceHandler(); services.AddHttpClient() - .RedactLoggedHeaders(["Authorization", "X-Goog-User-Project"]) + .RedactLoggedHeaders(["Authorization", "X-Goog-User-Project",]) .AddHttpMessageHandler(provider => - { - GoogleAuthenticationService authenticationService = provider.GetRequiredService(); - return new BearerTokenDelegatingHandler(authenticationService); - }) + { + GoogleAuthenticationService authenticationService = provider.GetRequiredService(); + return new BearerTokenDelegatingHandler(authenticationService); + }) .AddStandardResilienceHandler(); diff --git a/src/Visus.AddressValidation.Integration.Google/Http/GoogleAddressValidationClient.cs b/src/Visus.AddressValidation.Integration.Google/Http/GoogleAddressValidationClient.cs index 66bb3c9..52064b2 100644 --- a/src/Visus.AddressValidation.Integration.Google/Http/GoogleAddressValidationClient.cs +++ b/src/Visus.AddressValidation.Integration.Google/Http/GoogleAddressValidationClient.cs @@ -26,26 +26,26 @@ public GoogleAddressValidationClient(IConfiguration configuration, HttpClient ht private async ValueTask ValidateAddressInternalAsync(GoogleAddressValidationRequest request, CancellationToken cancellationToken) { using HttpResponseMessage response = await _httpClient.PostAsJsonAsync("/v1:validateAddress", - request, - GoogleJsonSerializerContext.Default.GoogleAddressValidationRequest, - cancellationToken) + request, + GoogleJsonSerializerContext.Default.GoogleAddressValidationRequest, + cancellationToken) .ConfigureAwait(false); if ( response.IsSuccessStatusCode ) { return await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.ApiResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); } ApiErrorResponse? errorResponse = await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.ApiErrorResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); if ( errorResponse is not null ) { return new ApiResponse { - ErrorResponse = errorResponse + ErrorResponse = errorResponse, }; } diff --git a/src/Visus.AddressValidation.Integration.Google/Http/GoogleAuthenticationClient.cs b/src/Visus.AddressValidation.Integration.Google/Http/GoogleAuthenticationClient.cs index 6a0caa7..ff627e4 100644 --- a/src/Visus.AddressValidation.Integration.Google/Http/GoogleAuthenticationClient.cs +++ b/src/Visus.AddressValidation.Integration.Google/Http/GoogleAuthenticationClient.cs @@ -39,7 +39,7 @@ public GoogleAuthenticationClient(IConfiguration configuration, HttpClient httpC [ new(JwtRegisteredClaimNames.Iat, currentDateTimeOffset.ToUnixTimeSeconds().ToString(CultureInfo.InvariantCulture), ClaimValueTypes.Integer64), new(JwtRegisteredClaimNames.Exp, currentDateTimeOffset.AddMinutes(60).ToUnixTimeSeconds().ToString(CultureInfo.InvariantCulture), ClaimValueTypes.Integer64), - new("scope", "https://www.googleapis.com/auth/cloud-platform") + new("scope", "https://www.googleapis.com/auth/cloud-platform"), ]; string[] privateKeyBlocks = privateKey.Split('-', StringSplitOptions.RemoveEmptyEntries); @@ -55,14 +55,14 @@ public GoogleAuthenticationClient(IConfiguration configuration, HttpClient httpC { CryptoProviderFactory = new CryptoProviderFactory { - CacheSignatureProviders = false - } + CacheSignatureProviders = false, + }, }; JwtSecurityToken token = new(issuer, - AuthenticationUrl.ToString(), - claims, - signingCredentials: credentials); + AuthenticationUrl.ToString(), + claims, + signingCredentials: credentials); string? jwtToken = new JwtSecurityTokenHandler().WriteToken(token); if ( string.IsNullOrWhiteSpace(jwtToken) ) @@ -73,7 +73,7 @@ public GoogleAuthenticationClient(IConfiguration configuration, HttpClient httpC List> payload = [ new("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer"), - new("assertion", jwtToken) + new("assertion", jwtToken), ]; using HttpRequestMessage request = new(HttpMethod.Post, AuthenticationUrl); @@ -89,7 +89,7 @@ public GoogleAuthenticationClient(IConfiguration configuration, HttpClient httpC } return await response.Content.ReadFromJsonAsync(DefaultJsonSerializerContext.Default.TokenResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); } } diff --git a/src/Visus.AddressValidation.Integration.Google/Services/GoogleAuthenticationService.cs b/src/Visus.AddressValidation.Integration.Google/Services/GoogleAuthenticationService.cs index 2addfe9..9bdcc31 100644 --- a/src/Visus.AddressValidation.Integration.Google/Services/GoogleAuthenticationService.cs +++ b/src/Visus.AddressValidation.Integration.Google/Services/GoogleAuthenticationService.cs @@ -11,7 +11,7 @@ internal sealed class GoogleAuthenticationService : AbstractAuthenticationServic public GoogleAuthenticationService(IDistributedCache cache, IConfiguration configuration, - GoogleAuthenticationClient authenticationClient) + GoogleAuthenticationClient authenticationClient) : base(authenticationClient, cache) { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); diff --git a/src/Visus.AddressValidation.Integration.Google/Validation/ApiResponseValidator.cs b/src/Visus.AddressValidation.Integration.Google/Validation/ApiResponseValidator.cs index 444b151..6714d1d 100644 --- a/src/Visus.AddressValidation.Integration.Google/Validation/ApiResponseValidator.cs +++ b/src/Visus.AddressValidation.Integration.Google/Validation/ApiResponseValidator.cs @@ -10,13 +10,13 @@ internal sealed class ApiResponseValidator : AbstractValidator private readonly HashSet _confirmedGranularity = [ Granularity.PREMISE, - Granularity.SUB_PREMISE + Granularity.SUB_PREMISE, ]; private readonly HashSet _tenuousConfirmations = [ ConfirmationLevel.UNCONFIRMED_BUT_PLAUSIBLE, - ConfirmationLevel.UNCONFIRMED_AND_SUSPICIOUS + ConfirmationLevel.UNCONFIRMED_AND_SUSPICIOUS, ]; private readonly HashSet _tenuousGranularity = @@ -24,7 +24,7 @@ internal sealed class ApiResponseValidator : AbstractValidator Granularity.BLOCK, Granularity.GRANULARITY_UNSPECIFIED, Granularity.PREMISE_PROXIMITY, - Granularity.ROUTE + Granularity.ROUTE, ]; protected override ValueTask PreValidateAsync(ApiResponse instance, ISet results, CancellationToken cancellationToken = default) @@ -52,7 +52,7 @@ protected override ValueTask PreValidateAsync(ApiResponse instance, ISet PreValidateAsync(ApiResponse instance, ISet results, CancellationToken cancellationToken = default) { - Debug.Assert(instance.Result != null, "instance.Result != null"); + Debug.Assert(instance.Result != null); // provide a validation warning if the validationGranularity is BLOCK or GRANULARITY_UNSPECIFIED or PREMISE_PROXIMITY // or ROUTE along with having either hasInferredComponents = true or hasReplacedComponents = true @@ -82,7 +82,7 @@ protected override ValueTask ValidateAsync(ApiResponse instance, ISet - - net10.0 - true - + + net10.0 + true + - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + - - - + + + - - - + + + diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Abstractions/StatusCode.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Abstractions/StatusCode.cs index 908843a..f4b2206 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Abstractions/StatusCode.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Abstractions/StatusCode.cs @@ -9,5 +9,5 @@ internal enum StatusCode { VALIDATED_CHANGED, VALIDATED_AND_NOT_CHANGED, - NOT_CHANGED + NOT_CHANGED, } diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Constants.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Constants.cs index b76e8a7..20fa139 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Constants.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Constants.cs @@ -42,6 +42,6 @@ public static class Constants /// public static readonly IReadOnlySet SupportedCountries = new HashSet { - CountryCode.US + CountryCode.US, }; } diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Extensions/ServiceCollectionExtensions.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Extensions/ServiceCollectionExtensions.cs index 6a7a15d..af57eaf 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Extensions/ServiceCollectionExtensions.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Extensions/ServiceCollectionExtensions.cs @@ -35,12 +35,12 @@ public static IServiceCollection AddPitneyBowesAddressValidation(this IServiceCo .AddStandardResilienceHandler(); services.AddHttpClient() - .RedactLoggedHeaders(["Authorization"]) + .RedactLoggedHeaders(["Authorization",]) .AddHttpMessageHandler(provider => - { - PitneyBowesAuthenticationService authenticationService = provider.GetRequiredService(); - return new BearerTokenDelegatingHandler(authenticationService); - }) + { + PitneyBowesAuthenticationService authenticationService = provider.GetRequiredService(); + return new BearerTokenDelegatingHandler(authenticationService); + }) .AddStandardResilienceHandler(); return services; diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Http/PitneyBowesAddressValidationClient.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Http/PitneyBowesAddressValidationClient.cs index fbe58a5..0bc8f53 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Http/PitneyBowesAddressValidationClient.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Http/PitneyBowesAddressValidationClient.cs @@ -37,7 +37,7 @@ public PitneyBowesAddressValidationClient(IConfiguration configuration, { ClientEnvironment.DEVELOPMENT => Constants.DevelopmentEndpointBaseUri, ClientEnvironment.PRODUCTION => Constants.ProductionEndpointBaseUri, - _ => Constants.DevelopmentEndpointBaseUri + _ => Constants.DevelopmentEndpointBaseUri, }; Uri requestUri = request.IncludeSuggestions @@ -55,27 +55,27 @@ public PitneyBowesAddressValidationClient(IConfiguration configuration, if ( request.IncludeSuggestions ) { return await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.ApiResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); } ApiResponse.AddressResult? result = await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.AddressResult, - cancellationToken) + cancellationToken) .ConfigureAwait(false); return new ApiResponse { - Result = result + Result = result, }; } ApiErrorResponse? errorResponse = await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.ApiErrorResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); if ( errorResponse is not null ) { return new ApiResponse { - ErrorResponse = errorResponse + ErrorResponse = errorResponse, }; } diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Http/PitneyBowesAuthenticationClient.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Http/PitneyBowesAuthenticationClient.cs index 5fcf44f..ba27765 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Http/PitneyBowesAuthenticationClient.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Http/PitneyBowesAuthenticationClient.cs @@ -37,14 +37,14 @@ public PitneyBowesAuthenticationClient(IConfiguration configuration, HttpClient { ClientEnvironment.DEVELOPMENT => Constants.DevelopmentEndpointBaseUri, ClientEnvironment.PRODUCTION => Constants.ProductionEndpointBaseUri, - _ => Constants.DevelopmentEndpointBaseUri + _ => Constants.DevelopmentEndpointBaseUri, }; Uri requestUri = new(baseUri, "/oauth/token"); List> payload = [ - new("grant_type", "client_credentials") + new("grant_type", "client_credentials"), ]; using HttpRequestMessage request = new(HttpMethod.Post, requestUri); @@ -59,7 +59,7 @@ public PitneyBowesAuthenticationClient(IConfiguration configuration, HttpClient } return await response.Content.ReadFromJsonAsync(DefaultJsonSerializerContext.Default.TokenResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); } } diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Model/AddressValidationResponse.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Model/AddressValidationResponse.cs index e5ae09d..ab9290b 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Model/AddressValidationResponse.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Model/AddressValidationResponse.cs @@ -57,6 +57,6 @@ private static ReadOnlyCollection ListSuggestions(Ap .Select(s => new AddressSuggestionValidationResponse(s, response.Result.CountryCode, response.Result.PostalCode)) .ToHashSet(); - return new ReadOnlyCollection([.. results]); + return new ReadOnlyCollection([.. results,]); } } diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Services/AddressValidationService.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Services/AddressValidationService.cs index c16e55d..035e8d8 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Services/AddressValidationService.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Services/AddressValidationService.cs @@ -10,7 +10,7 @@ internal sealed class AddressValidationService : AbstractAddressValidationServic public AddressValidationService(PitneyBowesAddressValidationClient client, IValidator requestValidator, - IValidator responseValidator) + IValidator responseValidator) : base(requestValidator, responseValidator) { _client = client ?? throw new ArgumentNullException(nameof(client)); diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Services/PitneyBowesAuthenticationService.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Services/PitneyBowesAuthenticationService.cs index c6200e2..2f7a783 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Services/PitneyBowesAuthenticationService.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Services/PitneyBowesAuthenticationService.cs @@ -12,7 +12,7 @@ internal sealed class PitneyBowesAuthenticationService : AbstractAuthenticationS public PitneyBowesAuthenticationService(IDistributedCache cache, IConfiguration configuration, - PitneyBowesAuthenticationClient authenticationClient) + PitneyBowesAuthenticationClient authenticationClient) : base(authenticationClient, cache) { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Validation/ApiResponseValidator.cs b/src/Visus.AddressValidation.Integration.PitneyBowes/Validation/ApiResponseValidator.cs index 33aeae6..35fd342 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Validation/ApiResponseValidator.cs +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Validation/ApiResponseValidator.cs @@ -33,7 +33,7 @@ protected override ValueTask PreValidateAsync(ApiResponse instance, ISet results, CancellationToken cancellationToken = default) { - Debug.Assert(instance.Result != null, "instance.Result != null"); + Debug.Assert(instance.Result != null); if ( string.IsNullOrWhiteSpace(instance.Result.PostalCode) ) { diff --git a/src/Visus.AddressValidation.Integration.PitneyBowes/Visus.AddressValidation.Integration.PitneyBowes.csproj b/src/Visus.AddressValidation.Integration.PitneyBowes/Visus.AddressValidation.Integration.PitneyBowes.csproj index 1a13bf1..da2d4ac 100644 --- a/src/Visus.AddressValidation.Integration.PitneyBowes/Visus.AddressValidation.Integration.PitneyBowes.csproj +++ b/src/Visus.AddressValidation.Integration.PitneyBowes/Visus.AddressValidation.Integration.PitneyBowes.csproj @@ -1,30 +1,30 @@  - - net10.0 - true - + + net10.0 + true + - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + - - - + + + - - - + + + diff --git a/src/Visus.AddressValidation.Integration.Ups/Abstractions/AddressClassificationCode.cs b/src/Visus.AddressValidation.Integration.Ups/Abstractions/AddressClassificationCode.cs index 2fcec06..ce0428d 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Abstractions/AddressClassificationCode.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Abstractions/AddressClassificationCode.cs @@ -7,5 +7,5 @@ internal enum AddressClassificationCode { UNCLASSIFIED = 0, COMMERCIAL = 1, - RESIDENTIAL = 2 + RESIDENTIAL = 2, } diff --git a/src/Visus.AddressValidation.Integration.Ups/Abstractions/ResponseStatusCode.cs b/src/Visus.AddressValidation.Integration.Ups/Abstractions/ResponseStatusCode.cs index c414fd5..6f14b41 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Abstractions/ResponseStatusCode.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Abstractions/ResponseStatusCode.cs @@ -6,5 +6,5 @@ namespace Visus.AddressValidation.Integration.Ups.Abstractions; internal enum ResponseStatusCode { FAILURE = 0, - SUCCESS = 1 + SUCCESS = 1, } diff --git a/src/Visus.AddressValidation.Integration.Ups/Constants.cs b/src/Visus.AddressValidation.Integration.Ups/Constants.cs index 0fd7438..a002a83 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Constants.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Constants.cs @@ -43,6 +43,6 @@ public static class Constants public static readonly IReadOnlySet SupportedCountries = new HashSet { CountryCode.US, - CountryCode.PR + CountryCode.PR, }; } diff --git a/src/Visus.AddressValidation.Integration.Ups/Extensions/ServiceCollectionExtensions.cs b/src/Visus.AddressValidation.Integration.Ups/Extensions/ServiceCollectionExtensions.cs index b0073a4..5beeb13 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Extensions/ServiceCollectionExtensions.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Extensions/ServiceCollectionExtensions.cs @@ -35,12 +35,12 @@ public static IServiceCollection AddUpsAddressValidation(this IServiceCollection .AddStandardResilienceHandler(); services.AddHttpClient() - .RedactLoggedHeaders(["Authorization"]) + .RedactLoggedHeaders(["Authorization",]) .AddHttpMessageHandler(provider => - { - UpsAuthenticationService authenticationService = provider.GetRequiredService(); - return new BearerTokenDelegatingHandler(authenticationService); - }) + { + UpsAuthenticationService authenticationService = provider.GetRequiredService(); + return new BearerTokenDelegatingHandler(authenticationService); + }) .AddStandardResilienceHandler(); return services; diff --git a/src/Visus.AddressValidation.Integration.Ups/Http/ApiResponse.cs b/src/Visus.AddressValidation.Integration.Ups/Http/ApiResponse.cs index 343866c..7c3ba90 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Http/ApiResponse.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Http/ApiResponse.cs @@ -33,7 +33,7 @@ internal sealed class AddressClassification internal sealed class AddressKeyFormat { public string[] AddressLine { get; set; } = []; - + public CountryCode CountryCode { get; set; } public string? PoliticalDivision1 { get; set; } diff --git a/src/Visus.AddressValidation.Integration.Ups/Http/UpsAddressValidationClient.cs b/src/Visus.AddressValidation.Integration.Ups/Http/UpsAddressValidationClient.cs index 15aec59..87ecd3c 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Http/UpsAddressValidationClient.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Http/UpsAddressValidationClient.cs @@ -37,7 +37,7 @@ public UpsAddressValidationClient(IConfiguration configuration, { ClientEnvironment.DEVELOPMENT => Constants.DevelopmentEndpointBaseUri, ClientEnvironment.PRODUCTION => Constants.ProductionEndpointBaseUri, - _ => Constants.DevelopmentEndpointBaseUri + _ => Constants.DevelopmentEndpointBaseUri, }; Uri requestUri = new(baseUri, "/api/addressvalidation/v2/3"); @@ -50,18 +50,18 @@ public UpsAddressValidationClient(IConfiguration configuration, if ( response.IsSuccessStatusCode ) { return await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.ApiResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); } ApiErrorResponse? errorResponse = await response.Content.ReadFromJsonAsync(ApiJsonSerializerContext.Default.ApiErrorResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); if ( errorResponse is not null ) { return new ApiResponse { - ErrorResponse = errorResponse + ErrorResponse = errorResponse, }; } diff --git a/src/Visus.AddressValidation.Integration.Ups/Http/UpsAuthenticationClient.cs b/src/Visus.AddressValidation.Integration.Ups/Http/UpsAuthenticationClient.cs index 9cc384a..2b6c571 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Http/UpsAuthenticationClient.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Http/UpsAuthenticationClient.cs @@ -40,14 +40,14 @@ public UpsAuthenticationClient(IConfiguration configuration, HttpClient httpClie { ClientEnvironment.DEVELOPMENT => Constants.DevelopmentEndpointBaseUri, ClientEnvironment.PRODUCTION => Constants.ProductionEndpointBaseUri, - _ => Constants.DevelopmentEndpointBaseUri + _ => Constants.DevelopmentEndpointBaseUri, }; Uri requestUri = new(baseUri, "/security/v1/oauth/token"); List> payload = [ - new("grant_type", "client_credentials") + new("grant_type", "client_credentials"), ]; using HttpRequestMessage request = new(HttpMethod.Post, requestUri); @@ -63,7 +63,7 @@ public UpsAuthenticationClient(IConfiguration configuration, HttpClient httpClie } return await response.Content.ReadFromJsonAsync(DefaultJsonSerializerContext.Default.TokenResponse, - cancellationToken) + cancellationToken) .ConfigureAwait(false); } } diff --git a/src/Visus.AddressValidation.Integration.Ups/Model/AddressValidationResponse.cs b/src/Visus.AddressValidation.Integration.Ups/Model/AddressValidationResponse.cs index 3d5b89d..a508eac 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Model/AddressValidationResponse.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Model/AddressValidationResponse.cs @@ -61,10 +61,10 @@ public AddressValidationResponse(ApiResponse response, IValidationResult? valida HashSet codes = new(StringComparer.OrdinalIgnoreCase) { addressKeyFormat.PostcodePrimaryLow, - addressKeyFormat.PostcodeExtendedLow + addressKeyFormat.PostcodeExtendedLow, }; - return string.Join("-", [.. codes]).ToUpperInvariant(); + return string.Join("-", [.. codes,]).ToUpperInvariant(); } private static ReadOnlyCollection ListSuggestions(IEnumerable candidates) @@ -73,6 +73,6 @@ private static ReadOnlyCollection ListSuggestions(IE .Select(s => new AddressSuggestionValidationResponse(s)) .ToHashSet(); - return new ReadOnlyCollection([.. results]); + return new ReadOnlyCollection([.. results,]); } } diff --git a/src/Visus.AddressValidation.Integration.Ups/Services/AddressValidationService.cs b/src/Visus.AddressValidation.Integration.Ups/Services/AddressValidationService.cs index 5592f95..99f41d3 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Services/AddressValidationService.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Services/AddressValidationService.cs @@ -10,7 +10,7 @@ internal sealed class AddressValidationService : AbstractAddressValidationServic public AddressValidationService(UpsAddressValidationClient client, IValidator requestValidator, - IValidator responseValidator) + IValidator responseValidator) : base(requestValidator, responseValidator) { _client = client ?? throw new ArgumentNullException(nameof(client)); diff --git a/src/Visus.AddressValidation.Integration.Ups/Services/UpsAuthenticationService.cs b/src/Visus.AddressValidation.Integration.Ups/Services/UpsAuthenticationService.cs index 0f87207..c51f331 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Services/UpsAuthenticationService.cs +++ b/src/Visus.AddressValidation.Integration.Ups/Services/UpsAuthenticationService.cs @@ -12,7 +12,7 @@ internal sealed class UpsAuthenticationService : AbstractAuthenticationService _supportedDevelopmentRegions = new(StringComparer.OrdinalIgnoreCase) { "CA", - "NY" + "NY", }; protected override ValueTask ValidateAsync(UpsAddressValidationRequest instance, ISet results, CancellationToken cancellationToken = default) @@ -21,8 +21,8 @@ protected override ValueTask ValidateAsync(UpsAddressValidationRequest instance, if ( !Constants.SupportedCountries.Contains(instance.Country!.Value) ) { results.Add(ValidationState.CreateError("{0}: {1} is currently not supported by the UPS Address Validation API.", - nameof(instance.Country), - instance.Country)); + nameof(instance.Country), + instance.Country)); } if ( !Enum.TryParse(_configuration[Constants.ClientEnvironmentConfigurationKey], out ClientEnvironment clientEnvironment) ) @@ -38,9 +38,9 @@ protected override ValueTask ValidateAsync(UpsAddressValidationRequest instance, if ( instance.Country.Value != CountryCode.US ) { results.Add(ValidationState.CreateError("{0}: Only the value {1} is supported by the UPS Address Validation API while in {2} mode.", - nameof(instance.Country), - CountryCode.US, - ClientEnvironment.DEVELOPMENT)); + nameof(instance.Country), + CountryCode.US, + ClientEnvironment.DEVELOPMENT)); } if ( instance.Country.Value == CountryCode.US @@ -48,9 +48,9 @@ protected override ValueTask ValidateAsync(UpsAddressValidationRequest instance, && !_supportedDevelopmentRegions.Contains(instance.StateOrProvince) ) { results.Add(ValidationState.CreateError("{0}: Only the values {1} are supported by the UPS Address Validation API while in {2} mode.", - nameof(instance.StateOrProvince), - string.Join(", ", _supportedDevelopmentRegions), - ClientEnvironment.DEVELOPMENT)); + nameof(instance.StateOrProvince), + string.Join(", ", _supportedDevelopmentRegions), + ClientEnvironment.DEVELOPMENT)); } return base.ValidateAsync(instance, results, cancellationToken); diff --git a/src/Visus.AddressValidation.Integration.Ups/Visus.AddressValidation.Integration.Ups.csproj b/src/Visus.AddressValidation.Integration.Ups/Visus.AddressValidation.Integration.Ups.csproj index d8c6e46..09ee0fb 100644 --- a/src/Visus.AddressValidation.Integration.Ups/Visus.AddressValidation.Integration.Ups.csproj +++ b/src/Visus.AddressValidation.Integration.Ups/Visus.AddressValidation.Integration.Ups.csproj @@ -1,23 +1,23 @@  - - net10.0 - true - + + net10.0 + true + - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + - - - + + + diff --git a/src/Visus.AddressValidation.SourceGeneration/CustomResponseDataGenerator.cs b/src/Visus.AddressValidation.SourceGeneration/CustomResponseDataGenerator.cs index ab0586e..646fc49 100644 --- a/src/Visus.AddressValidation.SourceGeneration/CustomResponseDataGenerator.cs +++ b/src/Visus.AddressValidation.SourceGeneration/CustomResponseDataGenerator.cs @@ -22,31 +22,31 @@ public void Initialize(IncrementalGeneratorInitializationContext context) IncrementalValuesProvider<(HierarchyInfo, PropertyInfo)> propertyInfo = context.SyntaxProvider .ForAttributeWithMetadataName(CustomResponseDataPropertyAttribute, - static (node, _) => node is PropertyDeclarationSyntax { Parent: ClassDeclarationSyntax or RecordDeclarationSyntax, AttributeLists.Count: > 0 }, - static (ctx, _) => - ctx.TargetSymbol is not IPropertySymbol propertySymbol - ? default - : ( HierarchyInfo.From(propertySymbol.ContainingType), new PropertyInfo(propertySymbol) )); + static (node, _) => node is PropertyDeclarationSyntax { Parent: ClassDeclarationSyntax or RecordDeclarationSyntax, AttributeLists.Count: > 0, }, + static (ctx, _) => + ctx.TargetSymbol is not IPropertySymbol propertySymbol + ? default + : ( HierarchyInfo.From(propertySymbol.ContainingType), new PropertyInfo(propertySymbol) )); IncrementalValuesProvider<(HierarchyInfo Hierarchy, ImmutableArray Properties)> groupedPropertyInfo = propertyInfo.GroupBy(static g => g.Left, static g => g.Right); context.RegisterSourceOutput(groupedPropertyInfo, - static (ctx, item) => - { - MethodDeclarationSyntax methodDeclaration = - MethodDeclaration(GetDictionaryMethodSyntax(), GetCustomResponseDataMethodName) - .AddModifiers(Token(SyntaxKind.PublicKeyword)) - .NormalizeWhitespace() - .WithTrailingTrivia(CarriageReturnLineFeed) - .WithBody(Block(SingletonList(GetDictionaryMethodBodySyntax(item.Properties)))); - - CompilationUnitSyntax? compilationUnit = item.Hierarchy.GetCompilationUnit([methodDeclaration]); - if ( compilationUnit is not null ) - { - ctx.AddSource($"{item.Hierarchy.FileNameHint}.g", compilationUnit.GetText(Encoding.UTF8)); - } - }); + static (ctx, item) => + { + MethodDeclarationSyntax methodDeclaration = + MethodDeclaration(GetDictionaryMethodSyntax(), GetCustomResponseDataMethodName) + .AddModifiers(Token(SyntaxKind.PublicKeyword)) + .NormalizeWhitespace() + .WithTrailingTrivia(CarriageReturnLineFeed) + .WithBody(Block(SingletonList(GetDictionaryMethodBodySyntax(item.Properties)))); + + CompilationUnitSyntax? compilationUnit = item.Hierarchy.GetCompilationUnit([methodDeclaration,]); + if ( compilationUnit is not null ) + { + ctx.AddSource($"{item.Hierarchy.FileNameHint}.g", compilationUnit.GetText(Encoding.UTF8)); + } + }); } private static ReturnStatementSyntax GetDictionaryMethodBodySyntax(ImmutableArray properties) @@ -55,17 +55,17 @@ private static ReturnStatementSyntax GetDictionaryMethodBodySyntax(ImmutableArra [ PredefinedType(Token(SyntaxKind.StringKeyword)), Token(SyntaxKind.CommaToken), - NullableType(PredefinedType(Token(SyntaxKind.ObjectKeyword))) + NullableType(PredefinedType(Token(SyntaxKind.ObjectKeyword))), ]; GenericNameSyntax dictionaryType = GenericName(Identifier("Dictionary"), - TypeArgumentList(SeparatedList(typeArguments))); + TypeArgumentList(SeparatedList(typeArguments))); ArgumentListSyntax dictionaryArguments = ArgumentList() .AddArguments(Argument(MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, - IdentifierName(nameof(StringComparer)), - IdentifierName(nameof(StringComparer.OrdinalIgnoreCase))))); + IdentifierName(nameof(StringComparer)), + IdentifierName(nameof(StringComparer.OrdinalIgnoreCase))))); LinkedList entities = []; @@ -73,11 +73,11 @@ private static ReturnStatementSyntax GetDictionaryMethodBodySyntax(ImmutableArra { BracketedArgumentListSyntax key = BracketedArgumentList(SingletonSeparatedList(Argument(LiteralExpression(SyntaxKind.StringLiteralExpression, - Literal(property.PropertyNameKey))))); + Literal(property.PropertyNameKey))))); AssignmentExpressionSyntax entity = AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, - ImplicitElementAccess().WithArgumentList(key), - IdentifierName(property.PropertyName)); + ImplicitElementAccess().WithArgumentList(key), + IdentifierName(property.PropertyName)); entities.AddLast(entity); } @@ -85,7 +85,7 @@ private static ReturnStatementSyntax GetDictionaryMethodBodySyntax(ImmutableArra ObjectCreationExpressionSyntax dictionary = ObjectCreationExpression(dictionaryType, dictionaryArguments, null) .WithInitializer(InitializerExpression(SyntaxKind.ObjectInitializerExpression, - SeparatedList(entities))); + SeparatedList(entities))); return ReturnStatement(dictionary); } @@ -96,10 +96,10 @@ private static GenericNameSyntax GetDictionaryMethodSyntax() [ PredefinedType(Token(SyntaxKind.StringKeyword)), Token(SyntaxKind.CommaToken), - NullableType(PredefinedType(Token(SyntaxKind.ObjectKeyword))) + NullableType(PredefinedType(Token(SyntaxKind.ObjectKeyword))), ]; return GenericName(Identifier("IReadOnlyDictionary"), - TypeArgumentList(SeparatedList(arguments))); + TypeArgumentList(SeparatedList(arguments))); } } diff --git a/src/Visus.AddressValidation.SourceGeneration/Extensions/IncrementalValuesProviderExtensions.cs b/src/Visus.AddressValidation.SourceGeneration/Extensions/IncrementalValuesProviderExtensions.cs index 04d5938..757cd49 100644 --- a/src/Visus.AddressValidation.SourceGeneration/Extensions/IncrementalValuesProviderExtensions.cs +++ b/src/Visus.AddressValidation.SourceGeneration/Extensions/IncrementalValuesProviderExtensions.cs @@ -18,35 +18,35 @@ internal static class IncrementalValuesProviderExtensions where TElement : IEquatable { return source.Collect().SelectMany((item, token) => - { - Dictionary.Builder> map = new(); + { + Dictionary.Builder> map = new(); - foreach ( (TLeft, TRight) pair in item ) - { - TKey key = keySelector(pair); - TElement element = elementSelector(pair); + foreach ( (TLeft, TRight) pair in item ) + { + TKey key = keySelector(pair); + TElement element = elementSelector(pair); - if ( !map.TryGetValue(key, out ImmutableArray.Builder builder) ) - { - builder = ImmutableArray.CreateBuilder(); + if ( !map.TryGetValue(key, out ImmutableArray.Builder builder) ) + { + builder = ImmutableArray.CreateBuilder(); - map.Add(key, builder); - } + map.Add(key, builder); + } - builder.Add(element); - } + builder.Add(element); + } - token.ThrowIfCancellationRequested(); + token.ThrowIfCancellationRequested(); - ImmutableArray<(TKey Key, ImmutableArray Elements)>.Builder result = - ImmutableArray.CreateBuilder<(TKey, ImmutableArray)>(); + ImmutableArray<(TKey Key, ImmutableArray Elements)>.Builder result = + ImmutableArray.CreateBuilder<(TKey, ImmutableArray)>(); - foreach ( KeyValuePair.Builder> entry in map ) - { - result.Add(( entry.Key, entry.Value.ToImmutable() )); - } + foreach ( KeyValuePair.Builder> entry in map ) + { + result.Add(( entry.Key, entry.Value.ToImmutable() )); + } - return result; - }); + return result; + }); } } diff --git a/src/Visus.AddressValidation.SourceGeneration/Model/HierarchyInfo.Syntax.cs b/src/Visus.AddressValidation.SourceGeneration/Model/HierarchyInfo.Syntax.cs index 9694a80..3b5a5a2 100644 --- a/src/Visus.AddressValidation.SourceGeneration/Model/HierarchyInfo.Syntax.cs +++ b/src/Visus.AddressValidation.SourceGeneration/Model/HierarchyInfo.Syntax.cs @@ -16,10 +16,10 @@ internal partial class HierarchyInfo TypeDeclarationSyntax typeDeclarationSyntax = Hierarchy[0].GetSyntax() .AddModifiers(Token(TriviaList(Comment("/// ")), - Hierarchy[0].AccessibilityKind, - TriviaList())) + Hierarchy[0].AccessibilityKind, + TriviaList())) .AddModifiers(GetKeywordModifierTokens(Hierarchy[0])) - .AddMembers([.. memberDeclarations]) + .AddMembers([.. memberDeclarations,]) .NormalizeWhitespace(); foreach ( TypeInfo parentType in Hierarchy.AsSpan().Slice(1) ) @@ -27,17 +27,17 @@ internal partial class HierarchyInfo typeDeclarationSyntax = parentType.GetSyntax() .AddModifiers(Token(TriviaList(Comment("/// ")), - parentType.AccessibilityKind, - TriviaList())) + parentType.AccessibilityKind, + TriviaList())) .AddModifiers(GetKeywordModifierTokens(parentType)) .AddMembers(typeDeclarationSyntax) .NormalizeWhitespace(); } SyntaxTriviaList syntaxTriviaList = TriviaList( - Comment("// "), - Trivia(PragmaWarningDirectiveTrivia(Token(SyntaxKind.DisableKeyword), true)), - Trivia(NullableDirectiveTrivia(Token(SyntaxKind.EnableKeyword), true))); + Comment("// "), + Trivia(PragmaWarningDirectiveTrivia(Token(SyntaxKind.DisableKeyword), true)), + Trivia(NullableDirectiveTrivia(Token(SyntaxKind.EnableKeyword), true))); return CompilationUnit() .AddMembers(NamespaceDeclaration(IdentifierName(Namespace)) @@ -57,6 +57,6 @@ private static SyntaxToken[] GetKeywordModifierTokens(TypeInfo typeInfo) tokens.Add(Token(SyntaxKind.PartialKeyword)); - return [.. tokens]; + return [.. tokens,]; } } diff --git a/src/Visus.AddressValidation.SourceGeneration/Model/HierarchyInfo.cs b/src/Visus.AddressValidation.SourceGeneration/Model/HierarchyInfo.cs index cda3182..67c9dca 100644 --- a/src/Visus.AddressValidation.SourceGeneration/Model/HierarchyInfo.cs +++ b/src/Visus.AddressValidation.SourceGeneration/Model/HierarchyInfo.cs @@ -41,15 +41,15 @@ public static HierarchyInfo From(INamedTypeSymbol typeSymbol) parent = parent.ContainingType ) { hierarchy.AddLast(new TypeInfo(parent.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat), - parent.TypeKind, - parent.DeclaredAccessibility, - parent.IsRecord, - parent.IsSealed)); + parent.TypeKind, + parent.DeclaredAccessibility, + parent.IsRecord, + parent.IsSealed)); } return new HierarchyInfo(typeSymbol.ToDisplayString(new SymbolDisplayFormat(typeQualificationStyle: NameAndContainingTypesAndNamespaces)), - typeSymbol.ContainingNamespace.ToDisplayString(new SymbolDisplayFormat(typeQualificationStyle: NameAndContainingTypesAndNamespaces)), - [..hierarchy]); + typeSymbol.ContainingNamespace.ToDisplayString(new SymbolDisplayFormat(typeQualificationStyle: NameAndContainingTypesAndNamespaces)), + [..hierarchy,]); } public static bool operator ==(HierarchyInfo? left, HierarchyInfo? right) diff --git a/src/Visus.AddressValidation.SourceGeneration/Model/TypeInfo.cs b/src/Visus.AddressValidation.SourceGeneration/Model/TypeInfo.cs index edd4229..de1bbe1 100644 --- a/src/Visus.AddressValidation.SourceGeneration/Model/TypeInfo.cs +++ b/src/Visus.AddressValidation.SourceGeneration/Model/TypeInfo.cs @@ -22,7 +22,7 @@ internal sealed record TypeInfo( Accessibility.Internal => SyntaxKind.InternalKeyword, Accessibility.Private => SyntaxKind.PrivateKeyword, Accessibility.Protected => SyntaxKind.ProtectedKeyword, - _ => SyntaxKind.None + _ => SyntaxKind.None, }; public Accessibility DeclaredAccessibility { get; } = DeclaredAccessibility; @@ -43,7 +43,7 @@ public TypeDeclarationSyntax GetSyntax() RecordDeclaration(Token(SyntaxKind.RecordKeyword), QualifiedName) .WithOpenBraceToken(Token(SyntaxKind.OpenBraceToken)) .WithCloseBraceToken(Token(SyntaxKind.CloseBraceToken)), - _ => ClassDeclaration(QualifiedName) + _ => ClassDeclaration(QualifiedName), }; } } diff --git a/src/Visus.AddressValidation.SourceGeneration/Visus.AddressValidation.SourceGeneration.csproj b/src/Visus.AddressValidation.SourceGeneration/Visus.AddressValidation.SourceGeneration.csproj index 4910157..3ad922d 100644 --- a/src/Visus.AddressValidation.SourceGeneration/Visus.AddressValidation.SourceGeneration.csproj +++ b/src/Visus.AddressValidation.SourceGeneration/Visus.AddressValidation.SourceGeneration.csproj @@ -1,16 +1,16 @@  - - netstandard2.0 - Visus.AddressValidation.SourceGeneration - cs - true - true - false - true - + + netstandard2.0 + Visus.AddressValidation.SourceGeneration + cs + true + true + false + true + - - - + + + diff --git a/src/Visus.AddressValidation/Abstractions/ClientEnvironment.cs b/src/Visus.AddressValidation/Abstractions/ClientEnvironment.cs index 17c57a4..c02ebd6 100644 --- a/src/Visus.AddressValidation/Abstractions/ClientEnvironment.cs +++ b/src/Visus.AddressValidation/Abstractions/ClientEnvironment.cs @@ -19,5 +19,5 @@ public enum ClientEnvironment /// Production /// [Description("Production")] - PRODUCTION = 1 + PRODUCTION = 1, } diff --git a/src/Visus.AddressValidation/Abstractions/CountryCode.cs b/src/Visus.AddressValidation/Abstractions/CountryCode.cs index 3195798..6bf0c7d 100644 --- a/src/Visus.AddressValidation/Abstractions/CountryCode.cs +++ b/src/Visus.AddressValidation/Abstractions/CountryCode.cs @@ -1510,5 +1510,5 @@ public enum CountryCode /// Zambia /// [Description("Zambia")] - ZM = 894 + ZM = 894, } diff --git a/src/Visus.AddressValidation/Constants.cs b/src/Visus.AddressValidation/Constants.cs index ebce33f..b7b4c2c 100644 --- a/src/Visus.AddressValidation/Constants.cs +++ b/src/Visus.AddressValidation/Constants.cs @@ -8,7 +8,7 @@ internal static class Constants { CountryCode.MC, CountryCode.SG, - CountryCode.VA + CountryCode.VA, }; public static IReadOnlySet NoPostalCode => new HashSet @@ -71,6 +71,6 @@ internal static class Constants CountryCode.VU, CountryCode.YE, CountryCode.ZW, - CountryCode.ZZ + CountryCode.ZZ, }; } diff --git a/src/Visus.AddressValidation/Http/IApiResponse.cs b/src/Visus.AddressValidation/Http/IApiResponse.cs index 2cad935..3bdcabb 100644 --- a/src/Visus.AddressValidation/Http/IApiResponse.cs +++ b/src/Visus.AddressValidation/Http/IApiResponse.cs @@ -17,5 +17,5 @@ public interface IApiResponse /// . /// /// An instance that implements . - public IAddressValidationResponse ToAddressValidationResponse(IValidationResult? validationResult = null); + IAddressValidationResponse ToAddressValidationResponse(IValidationResult? validationResult = null); } diff --git a/src/Visus.AddressValidation/Model/AbstractAddressValidationResponse.cs b/src/Visus.AddressValidation/Model/AbstractAddressValidationResponse.cs index cd780b9..d7e5ce6 100644 --- a/src/Visus.AddressValidation/Model/AbstractAddressValidationResponse.cs +++ b/src/Visus.AddressValidation/Model/AbstractAddressValidationResponse.cs @@ -133,7 +133,7 @@ public override int GetHashCode() } hashCode.Add(CityOrTown, StringComparer.OrdinalIgnoreCase); - hashCode.Add((int) Country); + hashCode.Add((int)Country); hashCode.Add(IsResidential); hashCode.Add(PostalCode, StringComparer.OrdinalIgnoreCase); hashCode.Add(StateOrProvince, StringComparer.OrdinalIgnoreCase); diff --git a/src/Visus.AddressValidation/Model/IAddressValidationResponse.cs b/src/Visus.AddressValidation/Model/IAddressValidationResponse.cs index 0cdbfb8..1e503dc 100644 --- a/src/Visus.AddressValidation/Model/IAddressValidationResponse.cs +++ b/src/Visus.AddressValidation/Model/IAddressValidationResponse.cs @@ -12,33 +12,33 @@ public interface IAddressValidationResponse /// Gets the address lines /// [JsonPropertyName("addressLines")] - public IReadOnlySet AddressLines { get; } + IReadOnlySet AddressLines { get; } /// /// Gets the city (town) /// [JsonPropertyName("cityOrTown")] - public string? CityOrTown { get; } + string? CityOrTown { get; } /// /// Gets the country code /// /// Refer to for values. [JsonPropertyName("country")] - public CountryCode Country { get; } + CountryCode Country { get; } /// /// Gets custom response data /// /// Collection may be empty for services that do not provide additional response information. [JsonPropertyName("customResponseData")] - public IReadOnlyDictionary CustomResponseData { get; } + IReadOnlyDictionary CustomResponseData { get; } /// /// Gets any errors returned during validation /// [JsonPropertyName("errors")] - public IReadOnlySet Errors { get; } + IReadOnlySet Errors { get; } /// /// Gets the residential indicator for the address @@ -48,32 +48,32 @@ public interface IAddressValidationResponse /// return an indicator. /// [JsonPropertyName("isResidential")] - public bool? IsResidential { get; } + bool? IsResidential { get; } /// /// Gets the zip (postal) code /// /// Value may be omitted for countries that do not support the concept of a postal code. [JsonPropertyName("postalCode")] - public string? PostalCode { get; } + string? PostalCode { get; } /// /// Gets the state (province) /// /// Value may be omitted for countries that are considered city-states. [JsonPropertyName("stateOrProvince")] - public string? StateOrProvince { get; } + string? StateOrProvince { get; } /// /// Gets suggested addresses created during validation /// /// Collection may be empty if no suggestions provided or validation service does not provide them. [JsonPropertyName("suggestions")] - public IReadOnlyList Suggestions { get; } + IReadOnlyList Suggestions { get; } /// /// Gets any warnings returned during validation /// [JsonPropertyName("warnings")] - public IReadOnlySet Warnings { get; } + IReadOnlySet Warnings { get; } } diff --git a/src/Visus.AddressValidation/Serialization/Json/JsonStringBooleanConverter.cs b/src/Visus.AddressValidation/Serialization/Json/JsonStringBooleanConverter.cs index 29ff6a1..6389609 100644 --- a/src/Visus.AddressValidation/Serialization/Json/JsonStringBooleanConverter.cs +++ b/src/Visus.AddressValidation/Serialization/Json/JsonStringBooleanConverter.cs @@ -11,7 +11,7 @@ public sealed class JsonStringBooleanConverter : JsonConverter "F", "False", "N", - "NO" + "NO", }; private static readonly HashSet PossibleBooleanTrueStrings = new(StringComparer.OrdinalIgnoreCase) @@ -21,7 +21,7 @@ public sealed class JsonStringBooleanConverter : JsonConverter "T", "True", "Y", - "YES" + "YES", }; /// @@ -32,7 +32,7 @@ public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSer JsonTokenType.True => true, JsonTokenType.False => false, JsonTokenType.String => ToBoolOrDefault(reader.GetString()), - _ => throw new JsonException() + _ => throw new JsonException(), }; } diff --git a/src/Visus.AddressValidation/Serialization/Json/TokenResponseConverter.cs b/src/Visus.AddressValidation/Serialization/Json/TokenResponseConverter.cs index adbc3a4..244d1b4 100644 --- a/src/Visus.AddressValidation/Serialization/Json/TokenResponseConverter.cs +++ b/src/Visus.AddressValidation/Serialization/Json/TokenResponseConverter.cs @@ -38,7 +38,7 @@ public sealed class TokenResponseConverter : JsonConverter { nameof(TokenResponse.IdentityToken), nameof(TokenResponse.IdentityToken) }, { nameof(TokenResponse.IssuedTokenType), nameof(TokenResponse.IssuedTokenType) }, { nameof(TokenResponse.RefreshToken), nameof(TokenResponse.RefreshToken) }, - { nameof(TokenResponse.TokenType), nameof(TokenResponse.TokenType) } + { nameof(TokenResponse.TokenType), nameof(TokenResponse.TokenType) }, }; /// diff --git a/src/Visus.AddressValidation/Services/AbstractAuthenticationService.cs b/src/Visus.AddressValidation/Services/AbstractAuthenticationService.cs index 6597a03..4622c40 100644 --- a/src/Visus.AddressValidation/Services/AbstractAuthenticationService.cs +++ b/src/Visus.AddressValidation/Services/AbstractAuthenticationService.cs @@ -2,7 +2,6 @@ namespace Visus.AddressValidation.Services; using Http; using Microsoft.Extensions.Caching.Distributed; -using Microsoft.Extensions.Caching.Memory; /// /// Abstraction for implementing an authentication service that relies on an @@ -79,7 +78,7 @@ public string? CacheKey await _cache.SetStringAsync(CacheKey, response.AccessToken, new DistributedCacheEntryOptions { - AbsoluteExpiration = expires + AbsoluteExpiration = expires, }, cancellationToken).ConfigureAwait(false); return response.AccessToken; diff --git a/src/Visus.AddressValidation/Validation/AbstractAddressValidationRequestValidator.cs b/src/Visus.AddressValidation/Validation/AbstractAddressValidationRequestValidator.cs index ae54d1b..bf168b4 100644 --- a/src/Visus.AddressValidation/Validation/AbstractAddressValidationRequestValidator.cs +++ b/src/Visus.AddressValidation/Validation/AbstractAddressValidationRequestValidator.cs @@ -14,7 +14,7 @@ protected override ValueTask PreValidateAsync(T instance, ISet res { Debug.Assert(instance != null, nameof(instance) + " != null"); Debug.Assert(results != null, nameof(results) + " != null"); - + switch ( instance.AddressLines.Count ) { case 0: diff --git a/src/Visus.AddressValidation/Validation/ValidationSeverity.cs b/src/Visus.AddressValidation/Validation/ValidationSeverity.cs index d650d70..69736a0 100644 --- a/src/Visus.AddressValidation/Validation/ValidationSeverity.cs +++ b/src/Visus.AddressValidation/Validation/ValidationSeverity.cs @@ -13,5 +13,5 @@ public enum ValidationSeverity /// /// Error /// - Error + Error, } diff --git a/src/Visus.AddressValidation/Validation/ValidationState.cs b/src/Visus.AddressValidation/Validation/ValidationState.cs index bd8c7bb..1f41f1f 100644 --- a/src/Visus.AddressValidation/Validation/ValidationState.cs +++ b/src/Visus.AddressValidation/Validation/ValidationState.cs @@ -128,7 +128,7 @@ public override int GetHashCode() HashCode hashCode = new(); hashCode.Add(Message, StringComparer.OrdinalIgnoreCase); - hashCode.Add((int) Severity); + hashCode.Add((int)Severity); return hashCode.ToHashCode(); } diff --git a/src/Visus.AddressValidation/Visus.AddressValidation.csproj b/src/Visus.AddressValidation/Visus.AddressValidation.csproj index 619db94..45ce8c9 100644 --- a/src/Visus.AddressValidation/Visus.AddressValidation.csproj +++ b/src/Visus.AddressValidation/Visus.AddressValidation.csproj @@ -1,23 +1,23 @@  - - net10.0 - true - + + net10.0 + true + - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + - - - -