From 7b06cfb5a2bc85f770cb1c708179ea0e9da7c61d Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 27 Oct 2020 11:44:39 +0800 Subject: [PATCH 01/62] Move to System.Text.Json Resolve #1198 --- framework/Volo.Abp.sln | 7 ++ .../Volo.Abp.AspNetCore.Mvc.csproj | 1 - .../AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 8 +- .../Mvc/Json/AbpJsonOptionsSetup.cs | 25 ++++++ .../Mvc/Json/AbpMvcJsonContractResolver.cs | 46 ---------- .../Abp/Auditing/AuditingContractResolver.cs | 39 -------- .../AuditingRuntimeIgnoreConverter.cs | 45 ++++++++++ .../Abp/Auditing/JsonNetAuditSerializer.cs | 29 ++---- .../Volo/Abp/Domain/Entities/EntityHelper.cs | 39 +++++++- .../Domain/Entities/EntityJsonConverter.cs | 29 ++++++ .../ValueConverters/AbpJsonValueConverter.cs | 12 +-- .../ExtraPropertiesValueConverter.cs | 15 ++-- .../DynamicProxying/ApiDescriptionFinder.cs | 15 ++-- .../Modeling/ActionApiDescriptionModel.cs | 4 +- .../ApplicationApiDescriptionModel.cs | 6 +- .../Modeling/ControllerApiDescriptionModel.cs | 4 +- .../ControllerInterfaceApiDescriptionModel.cs | 6 +- .../MethodParameterApiDescriptionModel.cs | 2 +- .../Modeling/ModuleApiDescriptionModel.cs | 14 +-- .../Modeling/ParameterApiDescriptionModel.cs | 2 +- .../ReturnValueApiDescriptionModel.cs | 2 +- .../Http/Modeling/TypeApiDescriptionModel.cs | 2 +- .../Volo.Abp.Json.Newtonsoft/FodyWeavers.xml | 3 + .../Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd | 30 +++++++ .../Volo.Abp.Json.Newtonsoft.csproj | 25 ++++++ .../Volo/Abp/Json/AbpJsonModule.cs | 21 +++++ .../Newtonsoft/AbpJsonIsoDateTimeConverter.cs | 0 .../AbpNewtonsoftJsonSerializerOptions.cs | 0 .../Newtonsoft/NewtonsoftJsonSerializer.cs | 1 + .../src/Volo.Abp.Json/Volo.Abp.Json.csproj | 4 - .../Volo/Abp/Json/AbpJsonModule.cs | 10 +-- .../Volo/Abp/Json/AbpJsonOptions.cs | 2 +- .../Abp/Json/Microsoft/AbpJsonSerializer.cs | 49 ++++++++++ .../Microsoft/AbpJsonSerializerOptions.cs | 18 ++++ .../AbpJsonSerializerOptionsSetup.cs | 23 +++++ .../JsonConverters/AbpDateTimeConverter.cs | 38 ++++++++ .../AbpNullableDateTimeConverter.cs | 50 +++++++++++ .../ObjectToInferredTypesConverter.cs | 54 +++++++++++ .../Volo.Abp.Localization.csproj | 4 - .../Json/JsonLocalizationDictionaryBuilder.cs | 19 ++-- .../Localization/Json/JsonLocalizationFile.cs | 4 +- .../MemoryDb/Utf8JsonMemoryDbSerializer.cs | 41 ++------- .../Utf8JsonMemoryDbSerializerOptions.cs | 14 +++ .../OAuth/Claims/MultipleClaimAction_Tests.cs | 1 - .../Abp/AspNetCore/AbpAspNetCoreTestBase.cs | 14 +-- .../Abp/MemoryDb/AbpMemoryDbTestModule.cs | 11 ++- .../Repository_Basic_Tests_With_Int_Pk.cs | 1 + .../Volo.Docs.Domain.Shared.csproj | 4 + ...ureManagementApplicationContractsModule.cs | 11 ++- .../LocalizableStringInfoJsonConverter.cs | 24 +++++ .../SelectionStringValueItemJsonConverter.cs | 36 ++++++++ ...ctionStringValueItemSourceJsonConverter.cs | 36 ++++++++ .../StringValueTypeJsonConverter.cs | 47 ++++++++++ .../ValueValidatorJsonConverter.cs | 68 ++++++++++++++ .../StringValueTypeJsonConverter.cs | 90 ------------------- .../StringValueJsonConverter_Tests.cs | 6 +- nupkg/common.ps1 | 1 + 57 files changed, 783 insertions(+), 329 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs delete mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs delete mode 100644 framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs create mode 100644 framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingRuntimeIgnoreConverter.cs create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityJsonConverter.cs create mode 100644 framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj create mode 100644 framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs rename framework/src/{Volo.Abp.Json => Volo.Abp.Json.Newtonsoft}/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs (100%) rename framework/src/{Volo.Abp.Json => Volo.Abp.Json.Newtonsoft}/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs (100%) rename framework/src/{Volo.Abp.Json => Volo.Abp.Json.Newtonsoft}/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs (98%) create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializer.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptions.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptionsSetup.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpDateTimeConverter.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpNullableDateTimeConverter.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/ObjectToInferredTypesConverter.cs create mode 100644 framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializerOptions.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/LocalizableStringInfoJsonConverter.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemJsonConverter.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs delete mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/StringValueTypeJsonConverter.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 65cac6e7cd..fb59c91051 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -355,6 +355,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Compone EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Swashbuckle", "src\Volo.Abp.Swashbuckle\Volo.Abp.Swashbuckle.csproj", "{DD9519E0-5A68-48DC-A051-7BF2AC922F3E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Json.Newtonsoft", "src\Volo.Abp.Json.Newtonsoft\Volo.Abp.Json.Newtonsoft.csproj", "{B5DEA857-1A22-4479-8441-E871D1BCBAB2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1057,6 +1059,10 @@ Global {DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Release|Any CPU.Build.0 = Release|Any CPU + {B5DEA857-1A22-4479-8441-E871D1BCBAB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5DEA857-1A22-4479-8441-E871D1BCBAB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5DEA857-1A22-4479-8441-E871D1BCBAB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5DEA857-1A22-4479-8441-E871D1BCBAB2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1236,6 +1242,7 @@ Global {B9D1ADCB-D552-4626-A1F1-78FF72C1E822} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {89840441-5A3A-4FD7-9CB4-E5B52FAEF72A} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {DD9519E0-5A68-48DC-A051-7BF2AC922F3E} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {B5DEA857-1A22-4479-8441-E871D1BCBAB2} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj index 3e691f57f3..fff97c83c3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj @@ -29,7 +29,6 @@ - diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index 3097a3c725..f35721c3c0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -35,6 +35,7 @@ using Volo.Abp.Http; using Volo.Abp.DynamicProxy; using Volo.Abp.GlobalFeatures; using Volo.Abp.Http.Modeling; +using Volo.Abp.Json.Microsoft; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.UI; @@ -114,11 +115,6 @@ namespace Volo.Abp.AspNetCore.Mvc ); var mvcBuilder = context.Services.AddMvc() - .AddNewtonsoftJson(options => - { - options.SerializerSettings.ContractResolver = - new AbpMvcJsonContractResolver(context.Services); - }) .AddRazorRuntimeCompilation() .AddDataAnnotationsLocalization(options => { @@ -139,6 +135,8 @@ namespace Volo.Abp.AspNetCore.Mvc }) .AddViewLocalization(); //TODO: How to configure from the application? Also, consider to move to a UI module since APIs does not care about it. + context.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpJsonOptionsSetup>()); + Configure(options => { options.FileProviders.Add( diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs new file mode 100644 index 0000000000..f9d58a3918 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs @@ -0,0 +1,25 @@ +using System; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.Json.Microsoft; +using Volo.Abp.Json.Microsoft.JsonConverters; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + public class AbpJsonOptionsSetup : IConfigureOptions + { + protected IServiceProvider ServiceProvider { get; } + + public AbpJsonOptionsSetup(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + } + + public void Configure(JsonOptions options) + { + options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService()); + options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService()); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs deleted file mode 100644 index 695212f563..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; -using System; -using System.Reflection; -using Volo.Abp.Json.Newtonsoft; -using Volo.Abp.Reflection; -using Volo.Abp.Timing; - -namespace Volo.Abp.AspNetCore.Mvc.Json -{ - public class AbpMvcJsonContractResolver : DefaultContractResolver - { - private readonly Lazy _dateTimeConverter; - - public AbpMvcJsonContractResolver(IServiceCollection services) - { - _dateTimeConverter = services.GetServiceLazy(); - - NamingStrategy = new CamelCaseNamingStrategy(); - } - - protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) - { - JsonProperty property = base.CreateProperty(member, memberSerialization); - - ModifyProperty(member, property); - - return property; - } - - protected virtual void ModifyProperty(MemberInfo member, JsonProperty property) - { - if (property.PropertyType != typeof(DateTime) && property.PropertyType != typeof(DateTime?)) - { - return; - } - - if (ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault(member) == null) - { - property.Converter = _dateTimeConverter.Value; - } - - } - } -} diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs deleted file mode 100644 index e6d03bf707..0000000000 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; - -namespace Volo.Abp.Auditing -{ - public class AuditingContractResolver : CamelCasePropertyNamesContractResolver - { - private readonly List _ignoredTypes; - - public AuditingContractResolver(List ignoredTypes) - { - _ignoredTypes = ignoredTypes; - } - - protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) - { - var property = base.CreateProperty(member, memberSerialization); - - if (member.IsDefined(typeof(DisableAuditingAttribute)) || member.IsDefined(typeof(JsonIgnoreAttribute))) - { - property.ShouldSerialize = instance => false; - } - - foreach (var ignoredType in _ignoredTypes) - { - if (ignoredType.GetTypeInfo().IsAssignableFrom(property.PropertyType)) - { - property.ShouldSerialize = instance => false; - break; - } - } - - return property; - } - } -} diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingRuntimeIgnoreConverter.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingRuntimeIgnoreConverter.cs new file mode 100644 index 0000000000..240b2581ab --- /dev/null +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingRuntimeIgnoreConverter.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Volo.Abp.Auditing +{ + public class AuditingRuntimeIgnoreConverter : JsonConverter> + { + private readonly List _ignoredTypes; + + public AuditingRuntimeIgnoreConverter(List ignoredTypes) + { + _ignoredTypes = ignoredTypes; + } + + public override Dictionary Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + throw new JsonException(); + } + + public override void Write(Utf8JsonWriter writer, Dictionary value, JsonSerializerOptions options) + { + var newDictionary = new Dictionary(); + foreach (var item in value.Where(x => x.Value != null)) + { + if (item.GetType().IsDefined(typeof(DisableAuditingAttribute), true) || + item.GetType().IsDefined(typeof(JsonIgnoreAttribute), true)) + { + continue; + } + + if (_ignoredTypes.Any(x => x.IsInstanceOfType(item.Value))) + { + continue; + } + + newDictionary[item.Key] = item.Value; + } + + JsonSerializer.Serialize(writer, newDictionary); + } + } +} diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs index b86df6b6c8..d11886e5a7 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs @@ -1,5 +1,5 @@ +using System.Text.Json; using Microsoft.Extensions.Options; -using Newtonsoft.Json; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Auditing @@ -16,29 +16,14 @@ namespace Volo.Abp.Auditing public string Serialize(object obj) { - return JsonConvert.SerializeObject(obj, GetSharedJsonSerializerSettings()); + return JsonSerializer.Serialize(obj, GetJsonSerializerOptions()); } - private static readonly object SyncObj = new object(); - private static JsonSerializerSettings _sharedJsonSerializerSettings; - - private JsonSerializerSettings GetSharedJsonSerializerSettings() + private JsonSerializerOptions GetJsonSerializerOptions() { - if (_sharedJsonSerializerSettings == null) - { - lock (SyncObj) - { - if (_sharedJsonSerializerSettings == null) - { - _sharedJsonSerializerSettings = new JsonSerializerSettings - { - ContractResolver = new AuditingContractResolver(Options.IgnoredTypes) - }; - } - } - } - - return _sharedJsonSerializerSettings; + var options = new JsonSerializerOptions(); + options.Converters.Add(new AuditingRuntimeIgnoreConverter(Options.IgnoredTypes)); + return options; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs index 65f2992257..b778ec2b67 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs @@ -77,7 +77,7 @@ namespace Volo.Abp.Domain.Entities { var entity1Key = entity1Keys[i]; var entity2Key = entity2Keys[i]; - + if (entity1Key == null) { if (entity2Key == null) @@ -89,13 +89,13 @@ namespace Volo.Abp.Domain.Entities //entity2Key is not null! return false; } - + if (entity2Key == null) { //entity1Key was not null! return false; } - + if (TypeHelper.IsDefaultValue(entity1Key) && TypeHelper.IsDefaultValue(entity2Key)) { return false; @@ -266,5 +266,36 @@ namespace Volo.Abp.Domain.Entities property?.SetValue(entity, idFactory()); } + + public static void TrySetId( + object entity, + TKey id, + bool checkForDisableIdGenerationAttribute = false) + { + var property = CachedIdProperties.GetOrAdd( + $"{entity.GetType().FullName}-{checkForDisableIdGenerationAttribute}", () => + { + var idProperty = entity + .GetType() + .GetProperties() + .FirstOrDefault(x => x.Name == nameof(IEntity.Id) && + x.GetSetMethod(true) != null); + + if (idProperty == null) + { + return null; + } + + if (checkForDisableIdGenerationAttribute && + idProperty.IsDefined(typeof(DisableIdGenerationAttribute), true)) + { + return null; + } + + return idProperty; + }); + + property?.SetValue(entity, id); + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityJsonConverter.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityJsonConverter.cs new file mode 100644 index 0000000000..d472fd36d0 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityJsonConverter.cs @@ -0,0 +1,29 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Volo.Abp.Domain.Entities +{ + public class EntityJsonConverter : JsonConverter + { + public override TEntity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var jsonDocument = JsonDocument.ParseValue(ref reader); + var entity = (TEntity)JsonSerializer.Deserialize(jsonDocument.RootElement.GetRawText(), typeToConvert); + var idJsonElement = jsonDocument.RootElement.GetProperty(nameof(IEntity.Id)); + + var id = JsonSerializer.Deserialize(idJsonElement.GetRawText()); + if (id != null) + { + EntityHelper.TrySetId(entity, id); + } + + return entity; + } + + public override void Write(Utf8JsonWriter writer, TEntity value, JsonSerializerOptions options) + { + JsonSerializer.Serialize(writer, value); + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs index 6ecf19fa98..4955a703b3 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs @@ -1,6 +1,6 @@ -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Newtonsoft.Json; -using Volo.Abp.Data; +using System.Text.Json; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.Json.Microsoft.JsonConverters; namespace Volo.Abp.EntityFrameworkCore.ValueConverters { @@ -16,12 +16,14 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters private static string SerializeObject(TPropertyType d) { - return JsonConvert.SerializeObject(d, Formatting.None); + return JsonSerializer.Serialize(d); } private static TPropertyType DeserializeObject(string s) { - return JsonConvert.DeserializeObject(s); + var deserializeOptions = new JsonSerializerOptions(); + deserializeOptions.Converters.Add(new ObjectToInferredTypesConverter()); + return JsonSerializer.Deserialize(s, deserializeOptions); } } } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs index 2fa00e3caf..b94a433367 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; -using System.ComponentModel; +using System.Text.Json; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Newtonsoft.Json; +using Volo.Abp.Json.Microsoft.JsonConverters; using Volo.Abp.ObjectExtending; namespace Volo.Abp.EntityFrameworkCore.ValueConverters @@ -36,13 +36,14 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters } } - return JsonConvert.SerializeObject(copyDictionary, Formatting.None); + return JsonSerializer.Serialize(copyDictionary); } private static Dictionary DeserializeObject(string extraPropertiesAsJson, Type entityType) { - var dictionary = JsonConvert.DeserializeObject>(extraPropertiesAsJson); - + var deserializeOptions = new JsonSerializerOptions(); + deserializeOptions.Converters.Add(new ObjectToInferredTypesConverter()); + var dictionary = JsonSerializer.Deserialize>(extraPropertiesAsJson, deserializeOptions) ?? new Dictionary(); if (entityType != null) { var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType); @@ -59,7 +60,7 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters } private static object GetNormalizedValue( - Dictionary dictionary, + Dictionary dictionary, ObjectExtensionPropertyInfo property) { var value = dictionary.GetOrDefault(property.Name); @@ -84,4 +85,4 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs index a9b51eca6a..9142118b97 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs @@ -2,9 +2,8 @@ using System.Linq; using System.Net.Http; using System.Reflection; +using System.Text.Json; using System.Threading.Tasks; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Modeling; using Volo.Abp.Threading; @@ -17,11 +16,6 @@ namespace Volo.Abp.Http.Client.DynamicProxying protected IApiDescriptionCache Cache { get; } - private static readonly JsonSerializerSettings SharedJsonSerializerSettings = new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver() - }; - public ApiDescriptionFinder(IApiDescriptionCache cache) { Cache = cache; @@ -91,9 +85,10 @@ namespace Volo.Abp.Http.Client.DynamicProxying var content = await response.Content.ReadAsStringAsync(); - var result = JsonConvert.DeserializeObject( - content, - typeof(ApplicationApiDescriptionModel), SharedJsonSerializerSettings); + var result = JsonSerializer.Deserialize(content, new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }); return (ApplicationApiDescriptionModel)result; } diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs index 7e9d375d06..fffd9d14d5 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.Http.Modeling public ReturnValueApiDescriptionModel ReturnValue { get; set; } - private ActionApiDescriptionModel() + public ActionApiDescriptionModel() { } @@ -71,4 +71,4 @@ namespace Volo.Abp.Http.Modeling return $"[ActionApiDescriptionModel {Name}]"; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs index cc09b7a153..77fb28eed5 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs @@ -12,9 +12,9 @@ namespace Volo.Abp.Http.Modeling public IDictionary Types { get; set; } - private ApplicationApiDescriptionModel() + public ApplicationApiDescriptionModel() { - + } public static ApplicationApiDescriptionModel Create() @@ -56,4 +56,4 @@ namespace Volo.Abp.Http.Modeling return subModel; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs index db5a5eb37a..3c4b1ee538 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.Http.Modeling public Dictionary Actions { get; set; } - private ControllerApiDescriptionModel() + public ControllerApiDescriptionModel() { } @@ -79,4 +79,4 @@ namespace Volo.Abp.Http.Modeling return $"[ControllerApiDescriptionModel {ControllerName}]"; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs index 04b5ea1bc9..3515ee3129 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs @@ -7,9 +7,9 @@ namespace Volo.Abp.Http.Modeling { public string Type { get; set; } - private ControllerInterfaceApiDescriptionModel() + public ControllerInterfaceApiDescriptionModel() { - + } public static ControllerInterfaceApiDescriptionModel Create(Type type) @@ -20,4 +20,4 @@ namespace Volo.Abp.Http.Modeling }; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs index b4e272c2f3..49e51fed17 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Http.Modeling public object DefaultValue { get; set; } - private MethodParameterApiDescriptionModel() + public MethodParameterApiDescriptionModel() { } diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs index b879b90135..5c7c53745c 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs @@ -11,22 +11,22 @@ namespace Volo.Abp.Http.Modeling /// /// "app". /// - public const string DefaultRootPath = "app"; + public const string DefaultRootPath = "app"; /// /// "Default". /// - public const string DefaultRemoteServiceName = "Default"; - + public const string DefaultRemoteServiceName = "Default"; + public string RootPath { get; set; } public string RemoteServiceName { get; set; } public IDictionary Controllers { get; set; } - private ModuleApiDescriptionModel() + public ModuleApiDescriptionModel() { - + } public static ModuleApiDescriptionModel Create(string rootPath, string remoteServiceName) @@ -53,7 +53,7 @@ namespace Volo.Abp.Http.Modeling { return Controllers.GetOrAdd(uniqueName, () => ControllerApiDescriptionModel.Create(name, type, ignoredInterfaces)); } - + public ModuleApiDescriptionModel CreateSubModel(string[] controllers, string[] actions) { var subModel = Create(RootPath, RemoteServiceName); @@ -69,4 +69,4 @@ namespace Volo.Abp.Http.Modeling return subModel; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs index 675ba8bf54..8bdead565e 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs @@ -24,7 +24,7 @@ namespace Volo.Abp.Http.Modeling public string DescriptorName { get; set; } - private ParameterApiDescriptionModel() + public ParameterApiDescriptionModel() { } diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs index 83fa4bb6be..291abf09ae 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.Http.Modeling public string TypeSimple { get; set; } - private ReturnValueApiDescriptionModel() + public ReturnValueApiDescriptionModel() { } diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs index 4b0b0b870c..6114ed2ee6 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs @@ -19,7 +19,7 @@ namespace Volo.Abp.Http.Modeling public PropertyApiDescriptionModel[] Properties { get; set; } - private TypeApiDescriptionModel() + public TypeApiDescriptionModel() { } diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xml b/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xml new file mode 100644 index 0000000000..bc5a74a236 --- /dev/null +++ b/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd b/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj b/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj new file mode 100644 index 0000000000..dd6cdc06ae --- /dev/null +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj @@ -0,0 +1,25 @@ + + + + + + + netstandard2.0 + Volo.Abp.Json.Newtonsoft + Volo.Abp.Json.Newtonsoft + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs new file mode 100644 index 0000000000..a502239e19 --- /dev/null +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs @@ -0,0 +1,21 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Options; +using Volo.Abp.Json.Microsoft; +using Volo.Abp.Json.Newtonsoft; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Json +{ + [DependsOn(typeof(AbpJsonModule))] + public class AbpJsonNewtonsoftModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Converters.Add(); + }); + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs similarity index 100% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs rename to framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs similarity index 100% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs rename to framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs similarity index 98% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs rename to framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs index 20e49ac817..e241484719 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs @@ -9,6 +9,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Json.Newtonsoft { + [Dependency(ReplaceServices = true)] public class NewtonsoftJsonSerializer : IJsonSerializer, ITransientDependency { private static readonly CamelCaseExceptDictionaryKeysResolver SharedCamelCaseExceptDictionaryKeysResolver = diff --git a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj index 4e891a687d..ddf8cfba65 100644 --- a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj +++ b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj @@ -14,10 +14,6 @@ - - - - diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index c3ea13da43..2899a8ed6b 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -1,4 +1,7 @@ -using Volo.Abp.Json.Newtonsoft; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Options; +using Volo.Abp.Json.Microsoft; using Volo.Abp.Modularity; using Volo.Abp.Timing; @@ -9,10 +12,7 @@ namespace Volo.Abp.Json { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => - { - options.Converters.Add(); - }); + context.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpJsonSerializerOptionsSetup>()); } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs index 9449aa338d..239d7864cd 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs @@ -7,4 +7,4 @@ /// public string DefaultDateTimeFormat { get; set; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializer.cs new file mode 100644 index 0000000000..55adc67ad4 --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializer.cs @@ -0,0 +1,49 @@ +using System; +using System.Text.Json; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Json.Microsoft +{ + public class AbpJsonSerializer : IJsonSerializer, ITransientDependency + { + protected AbpJsonSerializerOptions Options { get; } + + public AbpJsonSerializer(IOptions options) + { + Options = options.Value; + } + + public string Serialize(object obj, bool camelCase = true, bool indented = false) + { + return JsonSerializer.Serialize(obj, CreateJsonSerializerOptions(camelCase, indented)); + } + + public T Deserialize(string jsonString, bool camelCase = true) + { + return JsonSerializer.Deserialize(jsonString, CreateJsonSerializerOptions(camelCase)); + } + + public object Deserialize(Type type, string jsonString, bool camelCase = true) + { + return JsonSerializer.Deserialize(jsonString, type, CreateJsonSerializerOptions(camelCase)); + } + + protected virtual JsonSerializerOptions CreateJsonSerializerOptions(bool camelCase = true, bool indented = false) + { + var settings = new JsonSerializerOptions(Options.JsonSerializerOptions); + + if (camelCase) + { + settings.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + } + + if (indented) + { + settings.WriteIndented = true; + } + + return settings; + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptions.cs new file mode 100644 index 0000000000..bbf92c77f4 --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptions.cs @@ -0,0 +1,18 @@ +using System.Text.Json; + +namespace Volo.Abp.Json.Microsoft +{ + public class AbpJsonSerializerOptions + { + public JsonSerializerOptions JsonSerializerOptions { get; } + + public AbpJsonSerializerOptions() + { + //TODO:Defaults? + //https://github.com/dotnet/aspnetcore/blob/master/src/Mvc/Mvc.Core/src/JsonOptions.cs#L18 + //https://github.com/dotnet/runtime/blob/master/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerDefaults.cs + + JsonSerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptionsSetup.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptionsSetup.cs new file mode 100644 index 0000000000..b06e884d4c --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptionsSetup.cs @@ -0,0 +1,23 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.Json.Microsoft.JsonConverters; + +namespace Volo.Abp.Json.Microsoft +{ + public class AbpJsonSerializerOptionsSetup : IConfigureOptions + { + protected IServiceProvider ServiceProvider { get; } + + public AbpJsonSerializerOptionsSetup(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + } + + public void Configure(AbpJsonSerializerOptions options) + { + options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService()); + options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService()); + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpDateTimeConverter.cs new file mode 100644 index 0000000000..e563ee8aac --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpDateTimeConverter.cs @@ -0,0 +1,38 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Timing; + +namespace Volo.Abp.Json.Microsoft.JsonConverters +{ + public class AbpDateTimeConverter : JsonConverter, ITransientDependency + { + private readonly IClock _clock; + private readonly AbpJsonOptions _options; + + public AbpDateTimeConverter(IClock clock, IOptions abpJsonOptions) + { + _clock = clock; + _options = abpJsonOptions.Value; + } + + public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return _clock.Normalize(reader.GetDateTime()); + } + + public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) + { + if (_options.DefaultDateTimeFormat.IsNullOrWhiteSpace()) + { + writer.WriteStringValue(_clock.Normalize(value)); + } + else + { + writer.WriteStringValue(_clock.Normalize(value).ToString(_options.DefaultDateTimeFormat)); + } + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpNullableDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpNullableDateTimeConverter.cs new file mode 100644 index 0000000000..a072d1426c --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpNullableDateTimeConverter.cs @@ -0,0 +1,50 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Timing; + +namespace Volo.Abp.Json.Microsoft.JsonConverters +{ + public class AbpNullableDateTimeConverter : JsonConverter, ITransientDependency + { + private readonly IClock _clock; + private readonly AbpJsonOptions _options; + + public AbpNullableDateTimeConverter(IClock clock, IOptions abpJsonOptions) + { + _clock = clock; + _options = abpJsonOptions.Value; + } + + public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TryGetDateTime(out var dateTime)) + { + return _clock.Normalize(dateTime); + } + + return null; + } + + public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options) + { + if (value == null) + { + writer.WriteNullValue(); + } + else + { + if (_options.DefaultDateTimeFormat.IsNullOrWhiteSpace()) + { + writer.WriteStringValue(_clock.Normalize(value.Value)); + } + else + { + writer.WriteStringValue(_clock.Normalize(value.Value).ToString(_options.DefaultDateTimeFormat)); + } + } + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/ObjectToInferredTypesConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/ObjectToInferredTypesConverter.cs new file mode 100644 index 0000000000..af29e55a3a --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/ObjectToInferredTypesConverter.cs @@ -0,0 +1,54 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Volo.Abp.Json.Microsoft.JsonConverters +{ + public class ObjectToInferredTypesConverter : JsonConverter + { + public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.True) + { + return true; + } + + if (reader.TokenType == JsonTokenType.False) + { + return false; + } + + if (reader.TokenType == JsonTokenType.Number) + { + if (reader.TryGetInt64(out var l)) + { + return l; + } + + return reader.GetDouble(); + } + + if (reader.TokenType == JsonTokenType.String) + { + if (reader.TryGetDateTime(out var datetime)) + { + return datetime; + } + + return reader.GetString(); + } + + // Use JsonElement as fallback. + // Newtonsoft uses JArray or JObject. + using (var document = JsonDocument.ParseValue(ref reader)) + { + return document.RootElement.Clone(); + } + } + + public override void Write(Utf8JsonWriter writer, object objectToWrite, JsonSerializerOptions options) + { + throw new InvalidOperationException("Should not get here."); + } + } +} diff --git a/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj b/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj index df04ab95df..64352257f3 100644 --- a/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj +++ b/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj @@ -19,10 +19,6 @@ - - - - diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs index 9b1f1617f6..c13fb643bd 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs @@ -1,19 +1,13 @@ using System; using System.Collections.Generic; using System.IO; +using System.Text.Json; using Microsoft.Extensions.Localization; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; namespace Volo.Abp.Localization.Json { public static class JsonLocalizationDictionaryBuilder { - private static readonly JsonSerializerSettings SharedJsonSerializerSettings = new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver() - }; - /// /// Builds an from given file. /// @@ -39,8 +33,13 @@ namespace Volo.Abp.Localization.Json JsonLocalizationFile jsonFile; try { - jsonFile = JsonConvert.DeserializeObject( - jsonString, SharedJsonSerializerSettings); + var options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + DictionaryKeyPolicy = JsonNamingPolicy.CamelCase + }; + + jsonFile = JsonSerializer.Deserialize(jsonString, options); } catch (JsonException ex) { @@ -80,4 +79,4 @@ namespace Volo.Abp.Localization.Json return new StaticLocalizationDictionary(cultureCode, dictionary); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs index c2dc911532..2af738221a 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs @@ -9,11 +9,11 @@ namespace Volo.Abp.Localization.Json /// public string Culture { get; set; } - public Dictionary Texts { get; } + public Dictionary Texts { get; set; } public JsonLocalizationFile() { Texts = new Dictionary(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs index e68b4b6f37..e0040a678d 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs @@ -1,52 +1,27 @@ using System; -using System.Reflection; -using System.Text; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; +using System.Text.Json; +using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; -using Volo.Abp.Json; namespace Volo.Abp.Domain.Repositories.MemoryDb { public class Utf8JsonMemoryDbSerializer : IMemoryDbSerializer, ITransientDependency { - private static readonly JsonSerializerSettings MemoryDbSerializerSettings; + protected Utf8JsonMemoryDbSerializerOptions Options { get; } - static Utf8JsonMemoryDbSerializer() + public Utf8JsonMemoryDbSerializer(IOptions options) { - MemoryDbSerializerSettings = new JsonSerializerSettings - { - ContractResolver = new ResolverWithPrivateSetters(), - ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor - }; + Options = options.Value; } byte[] IMemoryDbSerializer.Serialize(object obj) { - var jsonString = JsonConvert.SerializeObject(obj, MemoryDbSerializerSettings); - return Encoding.UTF8.GetBytes(jsonString); + return JsonSerializer.SerializeToUtf8Bytes(obj, Options.JsonSerializerOptions); } public object Deserialize(byte[] value, Type type) { - var jsonString = Encoding.UTF8.GetString(value); - return JsonConvert.DeserializeObject(jsonString, type, MemoryDbSerializerSettings); - } - - public class ResolverWithPrivateSetters : DefaultContractResolver - { - protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) - { - var prop = base.CreateProperty(member, memberSerialization); - if (prop.Writable) - { - return prop; - } - - prop.Writable = member.As()?.GetSetMethod(true) != null; - - return prop; - } + return JsonSerializer.Deserialize(value, type, Options.JsonSerializerOptions); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializerOptions.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializerOptions.cs new file mode 100644 index 0000000000..a31e9d5eff --- /dev/null +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializerOptions.cs @@ -0,0 +1,14 @@ +using System.Text.Json; + +namespace Volo.Abp.Domain.Repositories.MemoryDb +{ + public class Utf8JsonMemoryDbSerializerOptions + { + public JsonSerializerOptions JsonSerializerOptions { get; } + + public Utf8JsonMemoryDbSerializerOptions() + { + JsonSerializerOptions = new JsonSerializerOptions(); + } + } +} diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs index bf869fc809..dd53e82167 100644 --- a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs @@ -1,7 +1,6 @@ using System.Linq; using System.Security.Claims; using System.Text.Json; -using Newtonsoft.Json.Linq; using Shouldly; using Volo.Abp.Security.Claims; using Xunit; diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs index dd5edff807..3c5571f115 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs @@ -1,10 +1,8 @@ using System.Globalization; using System.Net; using System.Net.Http; -using System.Net.Http.Headers; +using System.Text.Json; using System.Threading.Tasks; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; using Shouldly; using Volo.Abp.AspNetCore.TestBase; @@ -18,16 +16,10 @@ namespace Volo.Abp.AspNetCore public abstract class AbpAspNetCoreTestBase : AbpAspNetCoreIntegratedTestBase where TStartup : class { - private static readonly JsonSerializerSettings SharedJsonSerializerSettings = - new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver() - }; - protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) { var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode); - return JsonConvert.DeserializeObject(strResponse, SharedJsonSerializerSettings); + return JsonSerializer.Deserialize(strResponse, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); } protected virtual async Task GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) @@ -49,4 +41,4 @@ namespace Volo.Abp.AspNetCore } } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs index 7e5d9fcb6b..05839d5c8e 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs @@ -4,14 +4,16 @@ using Volo.Abp.Modularity; using Volo.Abp.TestApp.MemoryDb; using Volo.Abp.Data; using Volo.Abp.Autofac; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Domain.Repositories.MemoryDb; using Volo.Abp.TestApp; using Volo.Abp.TestApp.Domain; namespace Volo.Abp.MemoryDb { [DependsOn( - typeof(TestAppModule), - typeof(AbpMemoryDbModule), + typeof(TestAppModule), + typeof(AbpMemoryDbModule), typeof(AbpAutofacModule))] public class AbpMemoryDbTestModule : AbpModule { @@ -29,6 +31,11 @@ namespace Volo.Abp.MemoryDb options.AddDefaultRepositories(); options.AddRepository(); }); + + Configure(options => + { + options.JsonSerializerOptions.Converters.Add(new EntityJsonConverter()); + }); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs index f873fe4265..821a80492b 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Text.Json; using System.Threading.Tasks; using Shouldly; using Volo.Abp.Domain.Repositories; diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj index 99066c0b9b..d655e05df0 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj @@ -13,5 +13,9 @@ + + + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs index 37b49f2d8a..add06e1e14 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs @@ -1,5 +1,7 @@ using Volo.Abp.Application; -using Volo.Abp.Json.Newtonsoft; +using Volo.Abp.FeatureManagement.JsonConverters; +using Volo.Abp.Json; +using Volo.Abp.Json.Microsoft; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; @@ -7,7 +9,8 @@ namespace Volo.Abp.FeatureManagement { [DependsOn( typeof(AbpFeatureManagementDomainSharedModule), - typeof(AbpDddApplicationModule) + typeof(AbpDddApplicationModule), + typeof(AbpJsonModule) )] public class AbpFeatureManagementApplicationContractsModule : AbpModule { @@ -18,9 +21,9 @@ namespace Volo.Abp.FeatureManagement options.FileSets.AddEmbedded(); }); - Configure(options => + Configure(options => { - options.Converters.Add(); + options.JsonSerializerOptions.Converters.Add(new StringValueTypeJsonConverter()); }); } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/LocalizableStringInfoJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/LocalizableStringInfoJsonConverter.cs new file mode 100644 index 0000000000..e9f5cf599c --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/LocalizableStringInfoJsonConverter.cs @@ -0,0 +1,24 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; +using Volo.Abp.Validation.StringValues; + +namespace Volo.Abp.FeatureManagement.JsonConverters +{ + public class LocalizableStringInfoJsonConverter : JsonConverter + { + public override LocalizableStringInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var rootElement = JsonDocument.ParseValue(ref reader).RootElement; + return new LocalizableStringInfo( + rootElement.GetProperty("ResourceName").GetString(), + rootElement.GetProperty("Name").GetString() + ); + } + + public override void Write(Utf8JsonWriter writer, LocalizableStringInfo value, JsonSerializerOptions options) + { + JsonSerializer.Serialize(writer, value); + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemJsonConverter.cs new file mode 100644 index 0000000000..59b2f77c6b --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemJsonConverter.cs @@ -0,0 +1,36 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; +using Volo.Abp.Validation.StringValues; + +namespace Volo.Abp.FeatureManagement.JsonConverters +{ + public class SelectionStringValueItemJsonConverter : JsonConverter + { + public override ISelectionStringValueItem Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var rootElement = JsonDocument.ParseValue(ref reader).RootElement; + + var jsonSerializerOptions = new JsonSerializerOptions(); + jsonSerializerOptions.Converters.Add(new LocalizableStringInfoJsonConverter()); + + return new LocalizableSelectionStringValueItem + { + Value = rootElement.GetProperty("Value").GetString(), + DisplayText = JsonSerializer.Deserialize(rootElement.GetProperty("DisplayText").GetRawText(), jsonSerializerOptions) + }; + } + + public override void Write(Utf8JsonWriter writer, ISelectionStringValueItem value, JsonSerializerOptions options) + { + if (value.GetType() == typeof(LocalizableStringInfo)) + { + JsonSerializer.Serialize(writer, (LocalizableSelectionStringValueItem)value); + } + else + { + throw new JsonException("Unknown ISelectionStringValueItem type!"); + } + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs new file mode 100644 index 0000000000..b523dba20b --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; +using Volo.Abp.Validation.StringValues; + +namespace Volo.Abp.FeatureManagement.JsonConverters +{ + public class SelectionStringValueItemSourceJsonConverter : JsonConverter + { + public override ISelectionStringValueItemSource Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var rootElement = JsonDocument.ParseValue(ref reader).RootElement; + var jsonSerializerOptions = new JsonSerializerOptions(); + jsonSerializerOptions.Converters.Add(new SelectionStringValueItemJsonConverter()); + + var selectionStringValueItem = + JsonSerializer.Deserialize>(rootElement.GetProperty("Items").GetRawText(), jsonSerializerOptions) ?? + new List(); + + return new StaticSelectionStringValueItemSource(selectionStringValueItem.ToArray()); + } + + public override void Write(Utf8JsonWriter writer, ISelectionStringValueItemSource value, JsonSerializerOptions options) + { + if (value.GetType() == typeof(StaticSelectionStringValueItemSource)) + { + JsonSerializer.Serialize(writer, (StaticSelectionStringValueItemSource)value); + } + else + { + throw new JsonException("Unknown ISelectionStringValueItemSource type!"); + } + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs new file mode 100644 index 0000000000..5cdaf352bb --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs @@ -0,0 +1,47 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; +using Volo.Abp.Validation.StringValues; + +namespace Volo.Abp.FeatureManagement.JsonConverters +{ + public class StringValueTypeJsonConverter : JsonConverter + { + public override IStringValueType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var rootElement = JsonDocument.ParseValue(ref reader).RootElement; + var jsonSerializerOptions = new JsonSerializerOptions(); + jsonSerializerOptions.Converters.Add(new ValueValidatorJsonConverter()); + jsonSerializerOptions.Converters.Add(new SelectionStringValueItemSourceJsonConverter()); + + var name = rootElement.GetProperty("Name").GetString(); + return name switch + { + "SelectionStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), jsonSerializerOptions), + "FreeTextStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), jsonSerializerOptions), + "ToggleStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), jsonSerializerOptions), + _ => throw new ArgumentException($"{nameof(IStringValueType)} named {name} was not found!") + }; + } + + public override void Write(Utf8JsonWriter writer, IStringValueType value, JsonSerializerOptions options) + { + if (value.GetType() == typeof(FreeTextStringValueType)) + { + JsonSerializer.Serialize(writer, (FreeTextStringValueType)value); + } + else if (value.GetType() == typeof(SelectionStringValueType)) + { + JsonSerializer.Serialize(writer, (SelectionStringValueType)value); + } + else if (value.GetType() == typeof(ToggleStringValueType)) + { + JsonSerializer.Serialize(writer, (ToggleStringValueType)value); + } + else + { + throw new JsonException("Unknown IStringValueType type!"); + } + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs new file mode 100644 index 0000000000..cefa97a6aa --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Text.Json.Serialization; +using Volo.Abp.Json.Microsoft.JsonConverters; +using Volo.Abp.Validation.StringValues; + +namespace Volo.Abp.FeatureManagement.JsonConverters +{ + public class ValueValidatorJsonConverter : JsonConverter + { + public override IValueValidator Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + var rootElement = JsonDocument.ParseValue(ref reader).RootElement; + var valueValidator = CreateValueValidatorByName(rootElement.GetProperty("Name").GetString()); + + var deserializeOptions = new JsonSerializerOptions(); + deserializeOptions.Converters.Add(new ObjectToInferredTypesConverter()); + var properties = JsonSerializer.Deserialize>(rootElement.GetProperty("Properties").GetRawText(), deserializeOptions); + if (properties != null && properties.Any()) + { + foreach (var property in properties) + { + valueValidator.Properties[property.Key] = property.Value; + } + } + + return valueValidator; + } + + public override void Write(Utf8JsonWriter writer, IValueValidator value, JsonSerializerOptions options) + { + if (value.GetType() == typeof(AlwaysValidValueValidator)) + { + JsonSerializer.Serialize(writer, (AlwaysValidValueValidator)value); + } + else if (value.GetType() == typeof(BooleanValueValidator)) + { + JsonSerializer.Serialize(writer, (BooleanValueValidator)value); + } + else if (value.GetType() == typeof(NumericValueValidator)) + { + JsonSerializer.Serialize(writer, (NumericValueValidator)value); + } + else if (value.GetType() == typeof(StringValueValidator)) + { + JsonSerializer.Serialize(writer, (StringValueValidator)value); + } + else + { + throw new JsonException("Unknown IValueValidator type!"); + } + } + + protected virtual IValueValidator CreateValueValidatorByName(string name) + { + return name switch + { + "NULL" => new AlwaysValidValueValidator(), + "BOOLEAN" => new BooleanValueValidator(), + "NUMERIC" => new NumericValueValidator(), + "STRING" => new StringValueValidator(), + _ => throw new ArgumentException($"{nameof(IValueValidator)} named {name} was not found!") + }; + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/StringValueTypeJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/StringValueTypeJsonConverter.cs deleted file mode 100644 index 0ee276cce1..0000000000 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/StringValueTypeJsonConverter.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Validation.StringValues; - -namespace Volo.Abp.FeatureManagement -{ - public class StringValueTypeJsonConverter : JsonConverter, ITransientDependency - { - public override bool CanWrite => false; - - public override bool CanConvert(Type objectType) - { - return objectType == typeof(IStringValueType); - } - - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - throw new NotImplementedException("This method should not be called to write (since CanWrite is false)."); - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - if (reader.TokenType != JsonToken.StartObject) - { - return null; - } - - var jsonObject = JObject.Load(reader); - - var stringValue = CreateStringValueTypeByName(jsonObject, jsonObject["name"].ToString()); - foreach (var o in serializer.Deserialize>( - new JsonTextReader(new StringReader(jsonObject["properties"].ToString())))) - { - stringValue[o.Key] = o.Value; - } - - stringValue.Validator = CreateValueValidatorByName(jsonObject["validator"], jsonObject["validator"]["name"].ToString()); - foreach (var o in serializer.Deserialize>( - new JsonTextReader(new StringReader(jsonObject["validator"]["properties"].ToString())))) - { - stringValue.Validator[o.Key] = o.Value; - } - - return stringValue; - } - - protected virtual IStringValueType CreateStringValueTypeByName(JObject jObject, string name) - { - if (name == "SelectionStringValueType") - { - var selectionStringValueType = new SelectionStringValueType(); - if (jObject["itemSource"].HasValues) - { - selectionStringValueType.ItemSource = new StaticSelectionStringValueItemSource(jObject["itemSource"]["items"] - .Select(item => new LocalizableSelectionStringValueItem() - { - Value = item["value"].ToString(), - DisplayText = new LocalizableStringInfo(item["displayText"]["resourceName"].ToString(), item["displayText"]["name"].ToString()) - }).ToArray()); - } - - return selectionStringValueType; - } - - return name switch - { - "FreeTextStringValueType" => new FreeTextStringValueType(), - "ToggleStringValueType" => new ToggleStringValueType(), - _ => throw new ArgumentException($"{nameof(IStringValueType)} named {name} was not found!") - }; - } - - protected virtual IValueValidator CreateValueValidatorByName(JToken jObject, string name) - { - return name switch - { - "NULL" => new AlwaysValidValueValidator(), - "BOOLEAN" => new BooleanValueValidator(), - "NUMERIC" => new NumericValueValidator(), - "STRING" => new StringValueValidator(), - _ => throw new ArgumentException($"{nameof(IValueValidator)} named {name} was not found!") - }; - } - } -} diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs index 1b7553b773..4e5d4b20a3 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Newtonsoft.Json; +using System.Text.Json; using Shouldly; using Volo.Abp.Json; using Volo.Abp.Validation.StringValues; @@ -66,9 +66,11 @@ namespace Volo.Abp.FeatureManagement } }; - var serialized = _jsonSerializer.Serialize(featureListDto, indented: true); + var serialized = _jsonSerializer.Serialize(featureListDto); + var featureListDto2 = _jsonSerializer.Deserialize(serialized); + featureListDto2.ShouldNotBeNull(); featureListDto2.Groups[0].Features[0].ValueType.ShouldBeOfType(); featureListDto2.Groups[0].Features[0].ValueType.Validator.ShouldBeOfType(); diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 29cb13d9f3..3df9140805 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -109,6 +109,7 @@ $projects = ( "framework/src/Volo.Abp.Http", "framework/src/Volo.Abp.IdentityModel", "framework/src/Volo.Abp.Json", + "framework/src/Volo.Abp.Json.Newtonsoft", "framework/src/Volo.Abp.Ldap", "framework/src/Volo.Abp.Localization.Abstractions", "framework/src/Volo.Abp.MailKit", From 0bde769e116d578e0499770f81a038446f8a61ff Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 27 Oct 2020 14:48:54 +0800 Subject: [PATCH 02/62] Revert to use Newtonsoft for IAuditSerializer. Add JsonNetAuditSerializer_Test. --- .../Volo.Abp.Auditing.csproj | 4 ++ .../Abp/Auditing/AuditingContractResolver.cs | 43 ++++++++++++ .../AuditingRuntimeIgnoreConverter.cs | 45 ------------- .../Abp/Auditing/JsonNetAuditSerializer.cs | 27 ++++++-- .../Auditing/JsonNetAuditSerializer_Test.cs | 67 +++++++++++++++++++ 5 files changed, 135 insertions(+), 51 deletions(-) create mode 100644 framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs delete mode 100644 framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingRuntimeIgnoreConverter.cs create mode 100644 framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/JsonNetAuditSerializer_Test.cs diff --git a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj index 4ac2420c8f..b3548a949b 100644 --- a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj +++ b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj @@ -22,5 +22,9 @@ + + + + diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs new file mode 100644 index 0000000000..a88de55aea --- /dev/null +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace Volo.Abp.Auditing +{ + public class AuditingContractResolver : CamelCasePropertyNamesContractResolver + { + private readonly List _ignoredTypes; + + public AuditingContractResolver(List ignoredTypes) + { + _ignoredTypes = ignoredTypes; + } + + protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) + { + var property = base.CreateProperty(member, memberSerialization); + + if (_ignoredTypes.Any(ignoredType => ignoredType.GetTypeInfo().IsAssignableFrom(property.PropertyType))) + { + property.ShouldSerialize = instance => false; + return property; + } + + if (member.DeclaringType != null && (member.DeclaringType.IsDefined(typeof(DisableAuditingAttribute)) || member.DeclaringType.IsDefined(typeof(JsonIgnoreAttribute)))) + { + property.ShouldSerialize = instance => false; + return property; + } + + if (member.IsDefined(typeof(DisableAuditingAttribute)) || member.IsDefined(typeof(JsonIgnoreAttribute))) + { + property.ShouldSerialize = instance => false; + } + + return property; + } + } +} diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingRuntimeIgnoreConverter.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingRuntimeIgnoreConverter.cs deleted file mode 100644 index 240b2581ab..0000000000 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingRuntimeIgnoreConverter.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Volo.Abp.Auditing -{ - public class AuditingRuntimeIgnoreConverter : JsonConverter> - { - private readonly List _ignoredTypes; - - public AuditingRuntimeIgnoreConverter(List ignoredTypes) - { - _ignoredTypes = ignoredTypes; - } - - public override Dictionary Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - throw new JsonException(); - } - - public override void Write(Utf8JsonWriter writer, Dictionary value, JsonSerializerOptions options) - { - var newDictionary = new Dictionary(); - foreach (var item in value.Where(x => x.Value != null)) - { - if (item.GetType().IsDefined(typeof(DisableAuditingAttribute), true) || - item.GetType().IsDefined(typeof(JsonIgnoreAttribute), true)) - { - continue; - } - - if (_ignoredTypes.Any(x => x.IsInstanceOfType(item.Value))) - { - continue; - } - - newDictionary[item.Key] = item.Value; - } - - JsonSerializer.Serialize(writer, newDictionary); - } - } -} diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs index d11886e5a7..b1ce95675b 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs @@ -1,5 +1,5 @@ -using System.Text.Json; using Microsoft.Extensions.Options; +using Newtonsoft.Json; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Auditing @@ -16,14 +16,29 @@ namespace Volo.Abp.Auditing public string Serialize(object obj) { - return JsonSerializer.Serialize(obj, GetJsonSerializerOptions()); + return JsonConvert.SerializeObject(obj, GetSharedJsonSerializerSettings()); } - private JsonSerializerOptions GetJsonSerializerOptions() + private static readonly object SyncObj = new object(); + private static JsonSerializerSettings _sharedJsonSerializerSettings; + + private JsonSerializerSettings GetSharedJsonSerializerSettings() { - var options = new JsonSerializerOptions(); - options.Converters.Add(new AuditingRuntimeIgnoreConverter(Options.IgnoredTypes)); - return options; + if (_sharedJsonSerializerSettings == null) + { + lock (SyncObj) + { + if (_sharedJsonSerializerSettings == null) + { + _sharedJsonSerializerSettings = new JsonSerializerSettings + { + ContractResolver = new AuditingContractResolver(Options.IgnoredTypes) + }; + } + } + } + + return _sharedJsonSerializerSettings; } } } diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/JsonNetAuditSerializer_Test.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/JsonNetAuditSerializer_Test.cs new file mode 100644 index 0000000000..da98f49bd6 --- /dev/null +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/JsonNetAuditSerializer_Test.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Xunit; + +namespace Volo.Abp.Auditing +{ + public class JsonNetAuditSerializer_Test : AbpAuditingTestBase + { + private readonly JsonNetAuditSerializer _jsonNetAuditSerializer; + + public JsonNetAuditSerializer_Test() + { + _jsonNetAuditSerializer = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + services.Configure(options => + { + options.IgnoredTypes.Add(typeof(DateTime)); + }); + + base.AfterAddApplication(services); + } + + [Fact] + public void Serialize_Test() + { + var arguments = new Dictionary + { + {"input", new InputDto {PersonData = "IdCard:123123"}}, + {"input2", new Input2Dto {UserName = "admin", Password = "1q2w3E*", Birthday = DateTime.Now}} + }; + + var str = _jsonNetAuditSerializer.Serialize(arguments); + + str.ShouldNotContain("IdCard"); + str.ShouldNotContain("1q2w3E*"); + str.ShouldNotContain("Birthday"); + + str.ShouldContain("UserName"); + str.ShouldContain("admin"); + } + + + [DisableAuditing] + class InputDto + { + public string PersonData { get; set; } + } + + class Input2Dto + { + public string UserName { get; set; } + + [DisableAuditing] + public string Password { get; set; } + + [Newtonsoft.Json.JsonIgnore] + public string PrivateEmail { get; set; } + + public DateTime Birthday { get; set; } + } + } +} From 0778e380be9488bec56607776889e57498b29da7 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 27 Oct 2020 15:24:23 +0800 Subject: [PATCH 03/62] Rename namespaces. --- .../Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 2 +- .../Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs | 4 ++-- .../ValueConverters/AbpJsonValueConverter.cs | 2 +- .../ValueConverters/ExtraPropertiesValueConverter.cs | 2 +- .../Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs | 2 +- framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs | 1 - .../Volo/Abp/Json/{Microsoft => }/AbpJsonSerializer.cs | 2 +- .../Abp/Json/{Microsoft => }/AbpJsonSerializerOptions.cs | 2 +- .../Json/{Microsoft => }/AbpJsonSerializerOptionsSetup.cs | 5 +++-- .../{Microsoft => }/JsonConverters/AbpDateTimeConverter.cs | 2 +- .../JsonConverters/AbpNullableDateTimeConverter.cs | 2 +- .../JsonConverters/ObjectToInferredTypesConverter.cs | 2 +- .../Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs | 1 + .../Volo/Abp/MemoryDb/JsonConverters}/EntityJsonConverter.cs | 3 ++- .../AbpFeatureManagementApplicationContractsModule.cs | 2 +- .../JsonConverters/ValueValidatorJsonConverter.cs | 2 +- 16 files changed, 19 insertions(+), 17 deletions(-) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{Microsoft => }/AbpJsonSerializer.cs (97%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{Microsoft => }/AbpJsonSerializerOptions.cs (94%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{Microsoft => }/AbpJsonSerializerOptionsSetup.cs (90%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{Microsoft => }/JsonConverters/AbpDateTimeConverter.cs (96%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{Microsoft => }/JsonConverters/AbpNullableDateTimeConverter.cs (96%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{Microsoft => }/JsonConverters/ObjectToInferredTypesConverter.cs (96%) rename framework/{src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities => test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters}/EntityJsonConverter.cs (92%) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index f35721c3c0..0897c69ed3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -35,7 +35,7 @@ using Volo.Abp.Http; using Volo.Abp.DynamicProxy; using Volo.Abp.GlobalFeatures; using Volo.Abp.Http.Modeling; -using Volo.Abp.Json.Microsoft; +using Volo.Abp.Json; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.UI; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs index f9d58a3918..821b2c9218 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs @@ -2,8 +2,8 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Volo.Abp.Json.Microsoft; -using Volo.Abp.Json.Microsoft.JsonConverters; +using Volo.Abp.Json.JsonConverters; +using Volo.Abp.Json; namespace Volo.Abp.AspNetCore.Mvc.Json { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs index 4955a703b3..afce924d59 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs @@ -1,6 +1,6 @@ using System.Text.Json; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.Json.Microsoft.JsonConverters; +using Volo.Abp.Json.JsonConverters; namespace Volo.Abp.EntityFrameworkCore.ValueConverters { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs index b94a433367..00ce8459a6 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text.Json; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.Json.Microsoft.JsonConverters; +using Volo.Abp.Json.JsonConverters; using Volo.Abp.ObjectExtending; namespace Volo.Abp.EntityFrameworkCore.ValueConverters diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs index a502239e19..b040f1afbb 100644 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; -using Volo.Abp.Json.Microsoft; +using Volo.Abp.Json; using Volo.Abp.Json.Newtonsoft; using Volo.Abp.Modularity; diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index 2899a8ed6b..c5376d0f05 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -1,7 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; -using Volo.Abp.Json.Microsoft; using Volo.Abp.Modularity; using Volo.Abp.Timing; diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializer.cs similarity index 97% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializer.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializer.cs index 55adc67ad4..250111fee2 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializer.cs @@ -3,7 +3,7 @@ using System.Text.Json; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; -namespace Volo.Abp.Json.Microsoft +namespace Volo.Abp.Json { public class AbpJsonSerializer : IJsonSerializer, ITransientDependency { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptions.cs similarity index 94% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptions.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptions.cs index bbf92c77f4..c1289ce159 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptions.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptions.cs @@ -1,6 +1,6 @@ using System.Text.Json; -namespace Volo.Abp.Json.Microsoft +namespace Volo.Abp.Json { public class AbpJsonSerializerOptions { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptionsSetup.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs similarity index 90% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptionsSetup.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs index b06e884d4c..c4b9981199 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/AbpJsonSerializerOptionsSetup.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs @@ -1,9 +1,10 @@ using System; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Volo.Abp.Json.Microsoft.JsonConverters; +using Volo.Abp.Json.JsonConverters; +using Volo.Abp.Json; -namespace Volo.Abp.Json.Microsoft +namespace Volo.Abp.Json { public class AbpJsonSerializerOptionsSetup : IConfigureOptions { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs similarity index 96% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpDateTimeConverter.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs index e563ee8aac..7523f1e4d9 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpDateTimeConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs @@ -5,7 +5,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.Timing; -namespace Volo.Abp.Json.Microsoft.JsonConverters +namespace Volo.Abp.Json.JsonConverters { public class AbpDateTimeConverter : JsonConverter, ITransientDependency { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpNullableDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs similarity index 96% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpNullableDateTimeConverter.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs index a072d1426c..0e1e20bedc 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/AbpNullableDateTimeConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs @@ -5,7 +5,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.Timing; -namespace Volo.Abp.Json.Microsoft.JsonConverters +namespace Volo.Abp.Json.JsonConverters { public class AbpNullableDateTimeConverter : JsonConverter, ITransientDependency { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/ObjectToInferredTypesConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs similarity index 96% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/ObjectToInferredTypesConverter.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs index af29e55a3a..4a3cd5e8df 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Microsoft/JsonConverters/ObjectToInferredTypesConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs @@ -2,7 +2,7 @@ using System.Text.Json; using System.Text.Json.Serialization; -namespace Volo.Abp.Json.Microsoft.JsonConverters +namespace Volo.Abp.Json.JsonConverters { public class ObjectToInferredTypesConverter : JsonConverter { diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs index 05839d5c8e..6f5d7a3718 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs @@ -6,6 +6,7 @@ using Volo.Abp.Data; using Volo.Abp.Autofac; using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories.MemoryDb; +using Volo.Abp.MemoryDb.JsonConverters; using Volo.Abp.TestApp; using Volo.Abp.TestApp.Domain; diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityJsonConverter.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs similarity index 92% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityJsonConverter.cs rename to framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs index d472fd36d0..9a41fd4045 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityJsonConverter.cs +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs @@ -1,8 +1,9 @@ using System; using System.Text.Json; using System.Text.Json.Serialization; +using Volo.Abp.Domain.Entities; -namespace Volo.Abp.Domain.Entities +namespace Volo.Abp.MemoryDb.JsonConverters { public class EntityJsonConverter : JsonConverter { diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs index add06e1e14..3c9303f968 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs @@ -1,7 +1,7 @@ using Volo.Abp.Application; using Volo.Abp.FeatureManagement.JsonConverters; using Volo.Abp.Json; -using Volo.Abp.Json.Microsoft; +using Volo.Abp.Json; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs index cefa97a6aa..b525651d73 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; -using Volo.Abp.Json.Microsoft.JsonConverters; +using Volo.Abp.Json.JsonConverters; using Volo.Abp.Validation.StringValues; namespace Volo.Abp.FeatureManagement.JsonConverters From 1e888c241faa4affe2e378327cdf23a00fa20902 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 27 Oct 2020 20:35:33 +0800 Subject: [PATCH 04/62] Refactor. --- .../Abp/Json/AbpJsonSerializerOptionsSetup.cs | 1 - ...ureManagementApplicationContractsModule.cs | 6 ++-- .../JsonSerializerOptionsHelper.cs | 17 +++++++++ .../LocalizableStringInfoJsonConverter.cs | 24 ------------- .../SelectionStringValueItemJsonConverter.cs | 36 ------------------- ...ctionStringValueItemSourceJsonConverter.cs | 12 ++++--- .../StringValueTypeJsonConverter.cs | 22 ++++++------ .../ValueValidatorJsonConverter.cs | 19 +++++----- .../AbpFeatureManagementHttpApiModule.cs | 10 +++++- .../StringValueJsonConverter_Tests.cs | 2 +- 10 files changed, 60 insertions(+), 89 deletions(-) create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs delete mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/LocalizableStringInfoJsonConverter.cs delete mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemJsonConverter.cs diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs index c4b9981199..16e8119731 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs @@ -2,7 +2,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.Json.JsonConverters; -using Volo.Abp.Json; namespace Volo.Abp.Json { diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs index 3c9303f968..c3ca6c2adc 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs @@ -1,7 +1,7 @@ -using Volo.Abp.Application; +using System.Collections.Generic; +using Volo.Abp.Application; using Volo.Abp.FeatureManagement.JsonConverters; using Volo.Abp.Json; -using Volo.Abp.Json; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; @@ -23,7 +23,7 @@ namespace Volo.Abp.FeatureManagement Configure(options => { - options.JsonSerializerOptions.Converters.Add(new StringValueTypeJsonConverter()); + options.JsonSerializerOptions.Converters.AddIfNotContains(new StringValueTypeJsonConverter()); }); } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs new file mode 100644 index 0000000000..26927f59fe --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Volo.Abp.FeatureManagement.JsonConverters +{ + internal static class JsonSerializerOptionsHelper + { + public static JsonSerializerOptions Create(JsonSerializerOptions baseOptions, JsonConverter removeConverter, params JsonConverter[] addConverters) + { + var options = new JsonSerializerOptions(baseOptions); + options.Converters.RemoveAll(x => x == removeConverter); + options.Converters.AddIfNotContains(addConverters); + return options; + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/LocalizableStringInfoJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/LocalizableStringInfoJsonConverter.cs deleted file mode 100644 index e9f5cf599c..0000000000 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/LocalizableStringInfoJsonConverter.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using Volo.Abp.Validation.StringValues; - -namespace Volo.Abp.FeatureManagement.JsonConverters -{ - public class LocalizableStringInfoJsonConverter : JsonConverter - { - public override LocalizableStringInfo Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - var rootElement = JsonDocument.ParseValue(ref reader).RootElement; - return new LocalizableStringInfo( - rootElement.GetProperty("ResourceName").GetString(), - rootElement.GetProperty("Name").GetString() - ); - } - - public override void Write(Utf8JsonWriter writer, LocalizableStringInfo value, JsonSerializerOptions options) - { - JsonSerializer.Serialize(writer, value); - } - } -} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemJsonConverter.cs deleted file mode 100644 index 59b2f77c6b..0000000000 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemJsonConverter.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using Volo.Abp.Validation.StringValues; - -namespace Volo.Abp.FeatureManagement.JsonConverters -{ - public class SelectionStringValueItemJsonConverter : JsonConverter - { - public override ISelectionStringValueItem Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - var rootElement = JsonDocument.ParseValue(ref reader).RootElement; - - var jsonSerializerOptions = new JsonSerializerOptions(); - jsonSerializerOptions.Converters.Add(new LocalizableStringInfoJsonConverter()); - - return new LocalizableSelectionStringValueItem - { - Value = rootElement.GetProperty("Value").GetString(), - DisplayText = JsonSerializer.Deserialize(rootElement.GetProperty("DisplayText").GetRawText(), jsonSerializerOptions) - }; - } - - public override void Write(Utf8JsonWriter writer, ISelectionStringValueItem value, JsonSerializerOptions options) - { - if (value.GetType() == typeof(LocalizableStringInfo)) - { - JsonSerializer.Serialize(writer, (LocalizableSelectionStringValueItem)value); - } - else - { - throw new JsonException("Unknown ISelectionStringValueItem type!"); - } - } - } -} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs index b523dba20b..0812fcc59f 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; using Volo.Abp.Validation.StringValues; @@ -10,12 +11,13 @@ namespace Volo.Abp.FeatureManagement.JsonConverters { public override ISelectionStringValueItemSource Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { + var newOptions = JsonSerializerOptionsHelper.Create(options, this); + var rootElement = JsonDocument.ParseValue(ref reader).RootElement; - var jsonSerializerOptions = new JsonSerializerOptions(); - jsonSerializerOptions.Converters.Add(new SelectionStringValueItemJsonConverter()); + var items = rootElement.EnumerateObject().FirstOrDefault(x => x.Name.Equals("Items", StringComparison.InvariantCultureIgnoreCase)).Value.GetRawText(); var selectionStringValueItem = - JsonSerializer.Deserialize>(rootElement.GetProperty("Items").GetRawText(), jsonSerializerOptions) ?? + JsonSerializer.Deserialize>(items, newOptions) ?? new List(); return new StaticSelectionStringValueItemSource(selectionStringValueItem.ToArray()); @@ -23,9 +25,11 @@ namespace Volo.Abp.FeatureManagement.JsonConverters public override void Write(Utf8JsonWriter writer, ISelectionStringValueItemSource value, JsonSerializerOptions options) { + var newOptions = JsonSerializerOptionsHelper.Create(options, this); + if (value.GetType() == typeof(StaticSelectionStringValueItemSource)) { - JsonSerializer.Serialize(writer, (StaticSelectionStringValueItemSource)value); + JsonSerializer.Serialize(writer, (StaticSelectionStringValueItemSource)value, newOptions); } else { diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs index 5cdaf352bb..9ca037d001 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; using Volo.Abp.Validation.StringValues; @@ -10,33 +11,32 @@ namespace Volo.Abp.FeatureManagement.JsonConverters public override IStringValueType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var rootElement = JsonDocument.ParseValue(ref reader).RootElement; - var jsonSerializerOptions = new JsonSerializerOptions(); - jsonSerializerOptions.Converters.Add(new ValueValidatorJsonConverter()); - jsonSerializerOptions.Converters.Add(new SelectionStringValueItemSourceJsonConverter()); - - var name = rootElement.GetProperty("Name").GetString(); + var name = rootElement.EnumerateObject().FirstOrDefault(x => x.Name.Equals("Name", StringComparison.InvariantCultureIgnoreCase)).Value.GetString(); + var newOptions = JsonSerializerOptionsHelper.Create(options, this, new ValueValidatorJsonConverter(), new SelectionStringValueItemSourceJsonConverter()); return name switch { - "SelectionStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), jsonSerializerOptions), - "FreeTextStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), jsonSerializerOptions), - "ToggleStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), jsonSerializerOptions), + "SelectionStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), newOptions), + "FreeTextStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), newOptions), + "ToggleStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), newOptions), _ => throw new ArgumentException($"{nameof(IStringValueType)} named {name} was not found!") }; } public override void Write(Utf8JsonWriter writer, IStringValueType value, JsonSerializerOptions options) { + var newOptions = JsonSerializerOptionsHelper.Create(options, this); + if (value.GetType() == typeof(FreeTextStringValueType)) { - JsonSerializer.Serialize(writer, (FreeTextStringValueType)value); + JsonSerializer.Serialize(writer, (FreeTextStringValueType)value, newOptions); } else if (value.GetType() == typeof(SelectionStringValueType)) { - JsonSerializer.Serialize(writer, (SelectionStringValueType)value); + JsonSerializer.Serialize(writer, (SelectionStringValueType)value, newOptions); } else if (value.GetType() == typeof(ToggleStringValueType)) { - JsonSerializer.Serialize(writer, (ToggleStringValueType)value); + JsonSerializer.Serialize(writer, (ToggleStringValueType)value, newOptions); } else { diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs index b525651d73..bfea58b078 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs @@ -13,11 +13,12 @@ namespace Volo.Abp.FeatureManagement.JsonConverters public override IValueValidator Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var rootElement = JsonDocument.ParseValue(ref reader).RootElement; - var valueValidator = CreateValueValidatorByName(rootElement.GetProperty("Name").GetString()); + var name = rootElement.EnumerateObject().FirstOrDefault(x => x.Name.Equals("Name", StringComparison.InvariantCultureIgnoreCase)).Value.GetString(); + var valueValidator = CreateValueValidatorByName(name); - var deserializeOptions = new JsonSerializerOptions(); - deserializeOptions.Converters.Add(new ObjectToInferredTypesConverter()); - var properties = JsonSerializer.Deserialize>(rootElement.GetProperty("Properties").GetRawText(), deserializeOptions); + var propertiesRawText = rootElement.EnumerateObject().FirstOrDefault(x => x.Name.Equals("Properties", StringComparison.InvariantCultureIgnoreCase)).Value.GetRawText(); + var newOptions = JsonSerializerOptionsHelper.Create(options, this, new ObjectToInferredTypesConverter()); + var properties = JsonSerializer.Deserialize>(propertiesRawText, newOptions); if (properties != null && properties.Any()) { foreach (var property in properties) @@ -31,21 +32,23 @@ namespace Volo.Abp.FeatureManagement.JsonConverters public override void Write(Utf8JsonWriter writer, IValueValidator value, JsonSerializerOptions options) { + var newOptions = JsonSerializerOptionsHelper.Create(options, this); + if (value.GetType() == typeof(AlwaysValidValueValidator)) { - JsonSerializer.Serialize(writer, (AlwaysValidValueValidator)value); + JsonSerializer.Serialize(writer, (AlwaysValidValueValidator)value, newOptions); } else if (value.GetType() == typeof(BooleanValueValidator)) { - JsonSerializer.Serialize(writer, (BooleanValueValidator)value); + JsonSerializer.Serialize(writer, (BooleanValueValidator)value, newOptions); } else if (value.GetType() == typeof(NumericValueValidator)) { - JsonSerializer.Serialize(writer, (NumericValueValidator)value); + JsonSerializer.Serialize(writer, (NumericValueValidator)value, newOptions); } else if (value.GetType() == typeof(StringValueValidator)) { - JsonSerializer.Serialize(writer, (StringValueValidator)value); + JsonSerializer.Serialize(writer, (StringValueValidator)value, newOptions); } else { diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/AbpFeatureManagementHttpApiModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/AbpFeatureManagementHttpApiModule.cs index 5146061c3b..f062317d66 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/AbpFeatureManagementHttpApiModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/AbpFeatureManagementHttpApiModule.cs @@ -1,9 +1,12 @@ -using Localization.Resources.AbpUi; +using System.Collections.Generic; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.FeatureManagement.Localization; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.FeatureManagement.JsonConverters; namespace Volo.Abp.FeatureManagement { @@ -28,6 +31,11 @@ namespace Volo.Abp.FeatureManagement .Get() .AddBaseTypes(typeof(AbpUiResource)); }); + + Configure(options => + { + options.JsonSerializerOptions.Converters.AddIfNotContains(new StringValueTypeJsonConverter()); + }); } } } diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs index 4e5d4b20a3..c72cbddffd 100644 --- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs @@ -66,7 +66,7 @@ namespace Volo.Abp.FeatureManagement } }; - var serialized = _jsonSerializer.Serialize(featureListDto); + var serialized = _jsonSerializer.Serialize(featureListDto, indented: true); var featureListDto2 = _jsonSerializer.Deserialize(serialized); From 97f383ebcd26c590fe67d773caeb7e031dd13f19 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 27 Oct 2020 22:18:14 +0800 Subject: [PATCH 05/62] Update MyProjectNameWebTestBase.cs --- .../MyProjectNameWebTestBase.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs index ec29900d07..7c3f6330c8 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/MyProjectNameWebTestBase.cs @@ -1,10 +1,8 @@ using System.Net; using System.Net.Http; +using System.Text.Json; using System.Threading.Tasks; -using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; using Shouldly; using Volo.Abp.AspNetCore.TestBase; @@ -22,10 +20,7 @@ namespace MyCompanyName.MyProjectName protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) { var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode); - return JsonConvert.DeserializeObject(strResponse, new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver() - }); + return JsonSerializer.Deserialize(strResponse, new JsonSerializerOptions(JsonSerializerDefaults.Web)); } protected virtual async Task GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) From f7ebd426f48ec15bc3f4245e83a4a07d1342b4f8 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 29 Oct 2020 17:22:59 +0800 Subject: [PATCH 06/62] Refactor. --- .../Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs | 4 ++-- .../Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs | 4 ++-- .../Json/JsonConverters/ObjectToInferredTypesConverter.cs | 3 +++ .../Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs | 5 ++++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs index 7523f1e4d9..29e99f285e 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs @@ -27,11 +27,11 @@ namespace Volo.Abp.Json.JsonConverters { if (_options.DefaultDateTimeFormat.IsNullOrWhiteSpace()) { - writer.WriteStringValue(_clock.Normalize(value)); + writer.WriteStringValue(value); } else { - writer.WriteStringValue(_clock.Normalize(value).ToString(_options.DefaultDateTimeFormat)); + writer.WriteStringValue(value.ToString(_options.DefaultDateTimeFormat)); } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs index 0e1e20bedc..f061b94cf5 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs @@ -38,11 +38,11 @@ namespace Volo.Abp.Json.JsonConverters { if (_options.DefaultDateTimeFormat.IsNullOrWhiteSpace()) { - writer.WriteStringValue(_clock.Normalize(value.Value)); + writer.WriteStringValue(value.Value); } else { - writer.WriteStringValue(_clock.Normalize(value.Value).ToString(_options.DefaultDateTimeFormat)); + writer.WriteStringValue(value.Value.ToString(_options.DefaultDateTimeFormat)); } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs index 4a3cd5e8df..c7497cfa60 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs @@ -4,6 +4,9 @@ using System.Text.Json.Serialization; namespace Volo.Abp.Json.JsonConverters { + /// + /// https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-converters-how-to#deserialize-inferred-types-to-object-properties + /// public class ObjectToInferredTypesConverter : JsonConverter { public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs index 9a41fd4045..8723ce8958 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs @@ -24,7 +24,10 @@ namespace Volo.Abp.MemoryDb.JsonConverters public override void Write(Utf8JsonWriter writer, TEntity value, JsonSerializerOptions options) { - JsonSerializer.Serialize(writer, value); + var newOptions = new JsonSerializerOptions(options); + newOptions.Converters.Remove(this); + var entityConverter = (JsonConverter)newOptions.GetConverter(typeof(TEntity)); + entityConverter.Write(writer, value, newOptions); } } } From 8c28ee1dd220160a38f2df3b90c4cc93f47f40ef Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 30 Oct 2020 16:44:14 +0800 Subject: [PATCH 07/62] Add AbpHybridJsonSerializer, AbpHybridJsonInputFormatter, AbpHybridJsonOutputFormatter. --- framework/Volo.Abp.sln | 12 +-- .../Volo.Abp.AspNetCore.Mvc.csproj | 1 + .../AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs | 2 +- .../Mvc/Json/AbpHybridJsonInputFormatter.cs | 38 +++++++++ .../Mvc/Json/AbpHybridJsonOutputFormatter.cs | 35 ++++++++ .../Mvc/Json/AbpJsonOptionsSetup.cs | 3 +- .../Mvc/Json/AbpMvcJsonContractResolver.cs | 45 ++++++++++ .../Json/AbpMvcNewtonsoftJsonOptionsSetup.cs | 22 +++++ .../Mvc/Json/MediaTypeHeaderValues.cs | 22 +++++ .../Mvc/Json/MvcCoreBuilderExtensions.cs | 82 +++++++++++++++++++ .../ValueConverters/AbpJsonValueConverter.cs | 2 +- .../ExtraPropertiesValueConverter.cs | 2 +- .../Volo.Abp.Json.Newtonsoft/FodyWeavers.xml | 3 - .../Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd | 30 ------- .../Volo.Abp.Json.Newtonsoft.csproj | 25 ------ .../Volo/Abp/Json/AbpJsonModule.cs | 21 ----- .../src/Volo.Abp.Json/Volo.Abp.Json.csproj | 1 + .../Volo/Abp/Json/AbpHybridJsonSerializer.cs | 55 +++++++++++++ .../Volo/Abp/Json/AbpJsonModule.cs | 17 +++- .../Volo/Abp/Json/AbpJsonOptions.cs | 11 ++- .../Volo/Abp/Json/IJsonSerializerProvider.cs | 15 ++++ .../Newtonsoft/AbpJsonIsoDateTimeConverter.cs | 0 .../AbpNewtonsoftJsonSerializerOptions.cs | 0 .../NewtonsoftJsonSerializerProvider.cs} | 10 ++- .../AbpSystemTextJsonSerializerOptions.cs} | 6 +- ...bpSystemTextJsonSerializerOptionsSetup.cs} | 9 +- .../JsonConverters/AbpDateTimeConverter.cs | 6 +- .../AbpNullableDateTimeConverter.cs | 6 +- .../ObjectToInferredTypesConverter.cs | 2 +- .../SystemTextJsonSerializerProvider.cs} | 15 +++- .../SystemTextJsonSupportTypes.cs | 62 ++++++++++++++ .../SystemTextJsonSupportTypesOptions.cs | 15 ++++ .../Volo.Abp.Json.Tests.csproj | 16 ++++ .../Volo/Abp/Json/AbpJsonTestBase.cs | 12 +++ .../Volo/Abp/Json/AbpJsonTestModule.cs | 15 ++++ .../Json/SystemTextJsonSupportTypes_Tests.cs | 65 +++++++++++++++ ...ureManagementApplicationContractsModule.cs | 3 +- .../ValueValidatorJsonConverter.cs | 2 +- nupkg/common.ps1 | 1 - 39 files changed, 574 insertions(+), 115 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcNewtonsoftJsonOptionsSetup.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MediaTypeHeaderValues.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs delete mode 100644 framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xml delete mode 100644 framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd delete mode 100644 framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj delete mode 100644 framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs rename framework/src/{Volo.Abp.Json.Newtonsoft => Volo.Abp.Json}/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs (100%) rename framework/src/{Volo.Abp.Json.Newtonsoft => Volo.Abp.Json}/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs (100%) rename framework/src/{Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs => Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializerProvider.cs} (91%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{AbpJsonSerializerOptions.cs => SystemTextJson/AbpSystemTextJsonSerializerOptions.cs} (78%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{AbpJsonSerializerOptionsSetup.cs => SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs} (59%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{ => SystemTextJson}/JsonConverters/AbpDateTimeConverter.cs (81%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{ => SystemTextJson}/JsonConverters/AbpNullableDateTimeConverter.cs (84%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{ => SystemTextJson}/JsonConverters/ObjectToInferredTypesConverter.cs (96%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/{AbpJsonSerializer.cs => SystemTextJson/SystemTextJsonSerializerProvider.cs} (67%) create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypes.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypesOptions.cs create mode 100644 framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj create mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs create mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs create mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypes_Tests.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index fb59c91051..6957eb2baf 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -355,7 +355,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Compone EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Swashbuckle", "src\Volo.Abp.Swashbuckle\Volo.Abp.Swashbuckle.csproj", "{DD9519E0-5A68-48DC-A051-7BF2AC922F3E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Json.Newtonsoft", "src\Volo.Abp.Json.Newtonsoft\Volo.Abp.Json.Newtonsoft.csproj", "{B5DEA857-1A22-4479-8441-E871D1BCBAB2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Json.Tests", "test\Volo.Abp.Json.Tests\Volo.Abp.Json.Tests.csproj", "{00D07595-993C-40FC-BD90-0DD6331414D3}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1059,10 +1059,10 @@ Global {DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Release|Any CPU.Build.0 = Release|Any CPU - {B5DEA857-1A22-4479-8441-E871D1BCBAB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B5DEA857-1A22-4479-8441-E871D1BCBAB2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B5DEA857-1A22-4479-8441-E871D1BCBAB2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B5DEA857-1A22-4479-8441-E871D1BCBAB2}.Release|Any CPU.Build.0 = Release|Any CPU + {00D07595-993C-40FC-BD90-0DD6331414D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {00D07595-993C-40FC-BD90-0DD6331414D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00D07595-993C-40FC-BD90-0DD6331414D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {00D07595-993C-40FC-BD90-0DD6331414D3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1242,7 +1242,7 @@ Global {B9D1ADCB-D552-4626-A1F1-78FF72C1E822} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {89840441-5A3A-4FD7-9CB4-E5B52FAEF72A} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {DD9519E0-5A68-48DC-A051-7BF2AC922F3E} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} - {B5DEA857-1A22-4479-8441-E871D1BCBAB2} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {00D07595-993C-40FC-BD90-0DD6331414D3} = {447C8A77-E5F0-4538-8687-7383196D04EA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj index fff97c83c3..a018dbbffd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj @@ -28,6 +28,7 @@ + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index 11a6ae9442..61d73cb48b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -136,7 +136,7 @@ namespace Volo.Abp.AspNetCore.Mvc }) .AddViewLocalization(); //TODO: How to configure from the application? Also, consider to move to a UI module since APIs does not care about it. - context.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpJsonOptionsSetup>()); + mvcCoreBuilder.AddAbpHybridJson(); Configure(options => { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs new file mode 100644 index 0000000000..4ad90bcad2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs @@ -0,0 +1,38 @@ +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.Formatters; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Json.SystemTextJson; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + public class AbpHybridJsonInputFormatter : TextInputFormatter, IInputFormatterExceptionPolicy + { + public AbpHybridJsonInputFormatter() + { + SupportedEncodings.Add(UTF8EncodingWithoutBOM); + SupportedEncodings.Add(UTF16EncodingLittleEndian); + + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJson); + SupportedMediaTypes.Add(MediaTypeHeaderValues.TextJson); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationAnyJsonSyntax); + } + + public async override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding) + { + return await GetTextInputFormatter(context).ReadRequestBodyAsync(context, encoding); + } + + private TextInputFormatter GetTextInputFormatter(InputFormatterContext context) + { + if (context.HttpContext.RequestServices.GetRequiredService().CanHandle(context.ModelType)) + { + return context.HttpContext.RequestServices.GetRequiredService(); + } + + return context.HttpContext.RequestServices.GetRequiredService(); + } + + public InputFormatterExceptionPolicy ExceptionPolicy => InputFormatterExceptionPolicy.MalformedInputExceptions; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs new file mode 100644 index 0000000000..7cf991be96 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs @@ -0,0 +1,35 @@ +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.Formatters; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Json.SystemTextJson; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + public class AbpHybridJsonOutputFormatter : TextOutputFormatter + { + public AbpHybridJsonOutputFormatter() + { + SupportedEncodings.Add(Encoding.UTF8); + SupportedEncodings.Add(Encoding.Unicode); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJson); + SupportedMediaTypes.Add(MediaTypeHeaderValues.TextJson); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationAnyJsonSyntax); + } + + public async override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding) + { + await GetTextInputFormatter(context).WriteResponseBodyAsync(context, selectedEncoding); + } + + private TextOutputFormatter GetTextInputFormatter(OutputFormatterWriteContext context) + { + if (context.HttpContext.RequestServices.GetRequiredService().CanHandle(context.ObjectType)) + { + return context.HttpContext.RequestServices.GetRequiredService(); + } + + return context.HttpContext.RequestServices.GetRequiredService(); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs index 821b2c9218..b456204ed8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs @@ -2,8 +2,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Volo.Abp.Json.JsonConverters; -using Volo.Abp.Json; +using Volo.Abp.Json.SystemTextJson.JsonConverters; namespace Volo.Abp.AspNetCore.Mvc.Json { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs new file mode 100644 index 0000000000..2db8bc3f06 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs @@ -0,0 +1,45 @@ +using System; +using System.Reflection; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Json.Newtonsoft; +using Volo.Abp.Reflection; +using Volo.Abp.Timing; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + public class AbpMvcJsonContractResolver : DefaultContractResolver, ITransientDependency + { + private readonly AbpJsonIsoDateTimeConverter _dateTimeConverter; + + public AbpMvcJsonContractResolver(AbpJsonIsoDateTimeConverter dateTimeConverter) + { + _dateTimeConverter = dateTimeConverter; + + NamingStrategy = new CamelCaseNamingStrategy(); + } + + protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) + { + var property = base.CreateProperty(member, memberSerialization); + + ModifyProperty(member, property); + + return property; + } + + protected virtual void ModifyProperty(MemberInfo member, JsonProperty property) + { + if (property.PropertyType != typeof(DateTime) && property.PropertyType != typeof(DateTime?)) + { + return; + } + + if (ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault(member) == null) + { + property.Converter = _dateTimeConverter; + } + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcNewtonsoftJsonOptionsSetup.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcNewtonsoftJsonOptionsSetup.cs new file mode 100644 index 0000000000..48a09e2426 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcNewtonsoftJsonOptionsSetup.cs @@ -0,0 +1,22 @@ +using System; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + public class AbpMvcNewtonsoftJsonOptionsSetup : IConfigureOptions + { + protected IServiceProvider ServiceProvider { get; } + + public AbpMvcNewtonsoftJsonOptionsSetup(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + } + + public void Configure(MvcNewtonsoftJsonOptions options) + { + options.SerializerSettings.ContractResolver = ServiceProvider.GetRequiredService(); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MediaTypeHeaderValues.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MediaTypeHeaderValues.cs new file mode 100644 index 0000000000..d1f1b34b1a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MediaTypeHeaderValues.cs @@ -0,0 +1,22 @@ +using Microsoft.Net.Http.Headers; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + /// + /// https://github.com/dotnet/aspnetcore/blob/master/src/Mvc/Mvc.NewtonsoftJson/src/MediaTypeHeaderValues.cs + /// + internal static class MediaTypeHeaderValues + { + public static readonly MediaTypeHeaderValue ApplicationJson = MediaTypeHeaderValue.Parse("application/json").CopyAsReadOnly(); + + public static readonly MediaTypeHeaderValue TextJson = MediaTypeHeaderValue.Parse("text/json").CopyAsReadOnly(); + + public static readonly MediaTypeHeaderValue ApplicationAnyJsonSyntax = MediaTypeHeaderValue.Parse("application/*+json").CopyAsReadOnly(); + + public static readonly MediaTypeHeaderValue ApplicationXml = MediaTypeHeaderValue.Parse("application/xml").CopyAsReadOnly(); + + public static readonly MediaTypeHeaderValue TextXml = MediaTypeHeaderValue.Parse("text/xml").CopyAsReadOnly(); + + public static readonly MediaTypeHeaderValue ApplicationAnyXmlSyntax = MediaTypeHeaderValue.Parse("application/*+xml").CopyAsReadOnly(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs new file mode 100644 index 0000000000..9eaa0c826a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs @@ -0,0 +1,82 @@ +using System.Buffers; +using System.Text.Json; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Formatters; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Options; +using System.Text.Encodings.Web; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.ObjectPool; + +namespace Volo.Abp.AspNetCore.Mvc.Json +{ + public static class MvcCoreBuilderExtensions + { + public static IMvcCoreBuilder AddAbpHybridJson(this IMvcCoreBuilder builder) + { + //SystemTextJsonInputFormatter + builder.Services.AddTransient(provider => + { + var jsonOptions = provider.GetRequiredService>(); + var logger = provider.GetRequiredService().CreateLogger(); + return new SystemTextJsonInputFormatter(jsonOptions.Value, logger); + }); + + //NewtonsoftJsonInputFormatter + builder.Services.AddTransient(provider => + { + var jsonOptions = provider.GetRequiredService>().Value; + + return new NewtonsoftJsonInputFormatter( + provider.GetRequiredService().CreateLogger(), + jsonOptions.SerializerSettings, + provider.GetRequiredService>(), + provider.GetRequiredService(), + provider.GetRequiredService>().Value, + jsonOptions); + }); + + //SystemTextJsonOutputFormatter + builder.Services.AddTransient(provider => + { + var jsonSerializerOptions = provider.GetRequiredService>().Value.JsonSerializerOptions; + if (jsonSerializerOptions.Encoder is null) + { + // If the user hasn't explicitly configured the encoder, use the less strict encoder that does not encode all non-ASCII characters. + jsonSerializerOptions = new JsonSerializerOptions(jsonSerializerOptions) + { + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, + }; + } + return new SystemTextJsonOutputFormatter(jsonSerializerOptions); + }); + + //NewtonsoftJsonOutputFormatter + builder.Services.AddTransient(provider => + { + var jsonOptions = provider.GetRequiredService>().Value; + return new NewtonsoftJsonOutputFormatter( + jsonOptions.SerializerSettings, + provider.GetRequiredService>(), + provider.GetRequiredService>().Value); + }); + + builder.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpJsonOptionsSetup>()); + builder.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpMvcNewtonsoftJsonOptionsSetup>()); + + builder.Services.Configure(options => + { + options.InputFormatters.RemoveType(); + options.InputFormatters.RemoveType(); + options.InputFormatters.Add(new AbpHybridJsonInputFormatter()); + + options.OutputFormatters.RemoveType(); + options.OutputFormatters.RemoveType(); + options.OutputFormatters.Add(new AbpHybridJsonOutputFormatter()); + }); + + return builder; + } + } +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs index afce924d59..7378ab8eff 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs @@ -1,6 +1,6 @@ using System.Text.Json; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.Json.JsonConverters; +using Volo.Abp.Json.SystemTextJson.JsonConverters; namespace Volo.Abp.EntityFrameworkCore.ValueConverters { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs index 00ce8459a6..661da95a19 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text.Json; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Volo.Abp.Json.JsonConverters; +using Volo.Abp.Json.SystemTextJson.JsonConverters; using Volo.Abp.ObjectExtending; namespace Volo.Abp.EntityFrameworkCore.ValueConverters diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xml b/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xml deleted file mode 100644 index bc5a74a236..0000000000 --- a/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd b/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd deleted file mode 100644 index 3f3946e282..0000000000 --- a/framework/src/Volo.Abp.Json.Newtonsoft/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj b/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj deleted file mode 100644 index dd6cdc06ae..0000000000 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo.Abp.Json.Newtonsoft.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - netstandard2.0 - Volo.Abp.Json.Newtonsoft - Volo.Abp.Json.Newtonsoft - $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; - false - false - false - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs deleted file mode 100644 index b040f1afbb..0000000000 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/AbpJsonModule.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; -using Microsoft.Extensions.Options; -using Volo.Abp.Json; -using Volo.Abp.Json.Newtonsoft; -using Volo.Abp.Modularity; - -namespace Volo.Abp.Json -{ - [DependsOn(typeof(AbpJsonModule))] - public class AbpJsonNewtonsoftModule : AbpModule - { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.Converters.Add(); - }); - } - } -} diff --git a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj index ddf8cfba65..1ef71853fa 100644 --- a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj +++ b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj @@ -16,6 +16,7 @@ + diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs new file mode 100644 index 0000000000..6621ac8640 --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Json +{ + public class AbpHybridJsonSerializer : IJsonSerializer, ISingletonDependency + { + private readonly Lazy> _lazyProviders; + public List Providers => _lazyProviders.Value; + + public AbpHybridJsonSerializer(IOptions options, IServiceProvider serviceProvider) + { + _lazyProviders = new Lazy>( + () => options.Value + .Providers + .Select(c => serviceProvider.GetRequiredService(c) as IJsonSerializerProvider) + .Reverse() + .ToList(), + true + ); + } + + public string Serialize(object obj, bool camelCase = true, bool indented = false) + { + var provider = GetSerializerProvider(obj.GetType()); + return provider.Serialize(obj, camelCase, indented); + } + + public T Deserialize(string jsonString, bool camelCase = true) + { + var provider = GetSerializerProvider(typeof(T)); + return provider.Deserialize(jsonString, camelCase); + } + + public object Deserialize(Type type, string jsonString, bool camelCase = true) + { + var provider = GetSerializerProvider(type); + return provider.Deserialize(type, jsonString, camelCase); + } + + protected virtual IJsonSerializerProvider GetSerializerProvider(Type type) + { + foreach (var provider in Providers.Where(provider => provider.CanHandle(type))) + { + return provider; + } + + throw new AbpException($"There is no IJsonSerializerProvider that can handle {type.GetFullNameWithAssemblyName()} types!"); + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index c5376d0f05..747f01732a 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -1,6 +1,8 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; +using Volo.Abp.Json.Newtonsoft; +using Volo.Abp.Json.SystemTextJson; using Volo.Abp.Modularity; using Volo.Abp.Timing; @@ -11,7 +13,20 @@ namespace Volo.Abp.Json { public override void ConfigureServices(ServiceConfigurationContext context) { - context.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpJsonSerializerOptionsSetup>()); + context.Services.TryAddEnumerable(ServiceDescriptor + .Transient, + AbpSystemTextJsonSerializerOptionsSetup>()); + + Configure(options => + { + options.Providers.Add(); + options.Providers.Add(); + }); + + Configure(options => + { + options.IgnoreAttributes.Add(); + }); } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs index 239d7864cd..55a4683e26 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs @@ -1,4 +1,6 @@ -namespace Volo.Abp.Json +using Volo.Abp.Collections; + +namespace Volo.Abp.Json { public class AbpJsonOptions { @@ -6,5 +8,12 @@ /// Used to set default value for the DateTimeFormat. /// public string DefaultDateTimeFormat { get; set; } + + public ITypeList Providers { get; } + + public AbpJsonOptions() + { + Providers = new TypeList(); + } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs new file mode 100644 index 0000000000..f844dc5fd0 --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs @@ -0,0 +1,15 @@ +using System; + +namespace Volo.Abp.Json +{ + public interface IJsonSerializerProvider + { + bool CanHandle(Type type); + + string Serialize(object obj, bool camelCase = true, bool indented = false); + + T Deserialize(string jsonString, bool camelCase = true); + + object Deserialize(Type type, string jsonString, bool camelCase = true); + } +} diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs similarity index 100% rename from framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpJsonIsoDateTimeConverter.cs diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs similarity index 100% rename from framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerOptions.cs diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializerProvider.cs similarity index 91% rename from framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializerProvider.cs index e241484719..e33f9b155f 100644 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializerProvider.cs @@ -9,15 +9,14 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Json.Newtonsoft { - [Dependency(ReplaceServices = true)] - public class NewtonsoftJsonSerializer : IJsonSerializer, ITransientDependency + public class NewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency { private static readonly CamelCaseExceptDictionaryKeysResolver SharedCamelCaseExceptDictionaryKeysResolver = new CamelCaseExceptDictionaryKeysResolver(); protected List Converters { get; } - public NewtonsoftJsonSerializer( + public NewtonsoftJsonSerializerProvider( IOptions options, IServiceProvider serviceProvider) { @@ -27,6 +26,11 @@ namespace Volo.Abp.Json.Newtonsoft .ToList(); } + public bool CanHandle(Type type) + { + return true; + } + public string Serialize(object obj, bool camelCase = true, bool indented = false) { return JsonConvert.SerializeObject(obj, CreateSerializerSettings(camelCase, indented)); diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs similarity index 78% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptions.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs index c1289ce159..1f986e688b 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptions.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs @@ -1,12 +1,12 @@ using System.Text.Json; -namespace Volo.Abp.Json +namespace Volo.Abp.Json.SystemTextJson { - public class AbpJsonSerializerOptions + public class AbpSystemTextJsonSerializerOptions { public JsonSerializerOptions JsonSerializerOptions { get; } - public AbpJsonSerializerOptions() + public AbpSystemTextJsonSerializerOptions() { //TODO:Defaults? //https://github.com/dotnet/aspnetcore/blob/master/src/Mvc/Mvc.Core/src/JsonOptions.cs#L18 diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs similarity index 59% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs index 16e8119731..4b56997d47 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializerOptionsSetup.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs @@ -1,20 +1,21 @@ using System; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Volo.Abp.Json.JsonConverters; +using Volo.Abp.Json.SystemTextJson; +using Volo.Abp.Json.SystemTextJson.JsonConverters; namespace Volo.Abp.Json { - public class AbpJsonSerializerOptionsSetup : IConfigureOptions + public class AbpSystemTextJsonSerializerOptionsSetup : IConfigureOptions { protected IServiceProvider ServiceProvider { get; } - public AbpJsonSerializerOptionsSetup(IServiceProvider serviceProvider) + public AbpSystemTextJsonSerializerOptionsSetup(IServiceProvider serviceProvider) { ServiceProvider = serviceProvider; } - public void Configure(AbpJsonSerializerOptions options) + public void Configure(AbpSystemTextJsonSerializerOptions options) { options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService()); options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService()); diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs similarity index 81% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs index 29e99f285e..a87add029e 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpDateTimeConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs @@ -5,7 +5,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.Timing; -namespace Volo.Abp.Json.JsonConverters +namespace Volo.Abp.Json.SystemTextJson.JsonConverters { public class AbpDateTimeConverter : JsonConverter, ITransientDependency { @@ -27,11 +27,11 @@ namespace Volo.Abp.Json.JsonConverters { if (_options.DefaultDateTimeFormat.IsNullOrWhiteSpace()) { - writer.WriteStringValue(value); + writer.WriteStringValue(_clock.Normalize(value)); } else { - writer.WriteStringValue(value.ToString(_options.DefaultDateTimeFormat)); + writer.WriteStringValue(_clock.Normalize(value).ToString(_options.DefaultDateTimeFormat)); } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs similarity index 84% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs index f061b94cf5..bad650b4d8 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/AbpNullableDateTimeConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs @@ -5,7 +5,7 @@ using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.Timing; -namespace Volo.Abp.Json.JsonConverters +namespace Volo.Abp.Json.SystemTextJson.JsonConverters { public class AbpNullableDateTimeConverter : JsonConverter, ITransientDependency { @@ -38,11 +38,11 @@ namespace Volo.Abp.Json.JsonConverters { if (_options.DefaultDateTimeFormat.IsNullOrWhiteSpace()) { - writer.WriteStringValue(value.Value); + writer.WriteStringValue(_clock.Normalize(value.Value)); } else { - writer.WriteStringValue(value.Value.ToString(_options.DefaultDateTimeFormat)); + writer.WriteStringValue(_clock.Normalize(value.Value).ToString(_options.DefaultDateTimeFormat)); } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs similarity index 96% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs index c7497cfa60..02fa9bbaff 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/JsonConverters/ObjectToInferredTypesConverter.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs @@ -2,7 +2,7 @@ using System.Text.Json; using System.Text.Json.Serialization; -namespace Volo.Abp.Json.JsonConverters +namespace Volo.Abp.Json.SystemTextJson.JsonConverters { /// /// https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-converters-how-to#deserialize-inferred-types-to-object-properties diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs similarity index 67% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializer.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs index 250111fee2..5a3429bff1 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs @@ -2,18 +2,27 @@ using System.Text.Json; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; +using Volo.Abp.Json.SystemTextJson; namespace Volo.Abp.Json { - public class AbpJsonSerializer : IJsonSerializer, ITransientDependency + public class SystemTextJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency { - protected AbpJsonSerializerOptions Options { get; } + protected AbpSystemTextJsonSerializerOptions Options { get; } - public AbpJsonSerializer(IOptions options) + protected SystemTextJsonSupportTypes SystemTextJsonSupportTypes { get; } + + public SystemTextJsonSerializerProvider(IOptions options, SystemTextJsonSupportTypes systemTextJsonSupportTypes) { + SystemTextJsonSupportTypes = systemTextJsonSupportTypes; Options = options.Value; } + public bool CanHandle(Type type) + { + return SystemTextJsonSupportTypes.CanHandle(type); + } + public string Serialize(object obj, bool camelCase = true, bool indented = false) { return JsonSerializer.Serialize(obj, CreateJsonSerializerOptions(camelCase, indented)); diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypes.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypes.cs new file mode 100644 index 0000000000..c2061e5b27 --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypes.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Reflection; +using Volo.Abp.Timing; + +namespace Volo.Abp.Json.SystemTextJson +{ + public class SystemTextJsonSupportTypes : ITransientDependency + { + private static readonly List CacheTypes = new List(); + + private readonly SystemTextJsonSupportTypesOptions Options; + + public SystemTextJsonSupportTypes(IOptions options) + { + Options = options.Value; + } + + public bool CanHandle(Type type) + { + if (CacheTypes.Any(x => x == type)) + { + return false; + } + + if (type.GetCustomAttributes(true).Any(x => Options.IgnoreAttributes.Any(a => a == x.GetType()))) + { + CacheTypes.Add(type); + return false; + } + + if (type.DeclaringType != null && type.DeclaringType.GetCustomAttributes(true).Any(x => Options.IgnoreAttributes.Any(a => a == x.GetType()))) + { + CacheTypes.Add(type.DeclaringType); + return false; + } + + foreach (var propertyInfo in type.GetProperties()) + { + if (propertyInfo.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true)) + { + CacheTypes.Add(propertyInfo.GetType()); + return false; + } + + if (!TypeHelper.IsPrimitiveExtended(type)) + { + if (!CanHandle(propertyInfo.PropertyType)) + { + CacheTypes.Add(propertyInfo.PropertyType); + return false; + } + } + } + + return true; + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypesOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypesOptions.cs new file mode 100644 index 0000000000..33ad53b997 --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypesOptions.cs @@ -0,0 +1,15 @@ +using System; +using Volo.Abp.Collections; + +namespace Volo.Abp.Json.SystemTextJson +{ + public class SystemTextJsonSupportTypesOptions + { + public ITypeList IgnoreAttributes; + + public SystemTextJsonSupportTypesOptions() + { + IgnoreAttributes = new TypeList(); + } + } +} diff --git a/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj b/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj new file mode 100644 index 0000000000..fbc56e6ac2 --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj @@ -0,0 +1,16 @@ + + + + + + net5.0 + + + + + + + + + + diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs new file mode 100644 index 0000000000..5c9065ad80 --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Testing; + +namespace Volo.Abp.Json +{ + public abstract class AbpJsonTestBase : AbpIntegratedTest + { + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } + } +} diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs new file mode 100644 index 0000000000..ddbc08ac3f --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs @@ -0,0 +1,15 @@ +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Json +{ + [DependsOn( + typeof(AbpAutofacModule), + typeof(AbpJsonModule), + typeof(AbpTestBaseModule) + )] + public class AbpJsonTestModule : AbpModule + { + + } +} diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypes_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypes_Tests.cs new file mode 100644 index 0000000000..b21cb94653 --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypes_Tests.cs @@ -0,0 +1,65 @@ +using System; +using Shouldly; +using Volo.Abp.Json.SystemTextJson; +using Volo.Abp.Timing; +using Xunit; + +namespace Volo.Abp.Json +{ + public class SystemTextJsonSupportTypes_Tests : AbpJsonTestBase + { + private readonly SystemTextJsonSupportTypes _systemTextJsonSupportTypes; + + public SystemTextJsonSupportTypes_Tests() + { + _systemTextJsonSupportTypes = GetRequiredService(); + } + + [Fact] + public void Test() + { + _systemTextJsonSupportTypes.CanHandle(typeof(MyClass)).ShouldBeFalse(); + _systemTextJsonSupportTypes.CanHandle(typeof(MyClass2)).ShouldBeFalse(); + _systemTextJsonSupportTypes.CanHandle(typeof(MyClass3)).ShouldBeFalse(); + _systemTextJsonSupportTypes.CanHandle(typeof(MyClass4)).ShouldBeFalse(); + + _systemTextJsonSupportTypes.CanHandle(typeof(MyClass5)).ShouldBeTrue(); + _systemTextJsonSupportTypes.CanHandle(typeof(MyClass6)).ShouldBeTrue(); + } + + [DisableDateTimeNormalization] + class MyClass + { + public DateTime Prop1 { get; set; } + } + + class MyClass2 + { + [DisableDateTimeNormalization] + public DateTime Prop1 { get; set; } + } + + class MyClass3 + { + public MyClass4 Prop1 { get; set; } + } + + class MyClass4 + { + [DisableDateTimeNormalization] + public DateTime Prop1 { get; set; } + } + + class MyClass5 + { + public DateTime Prop1 { get; set; } + + public MyClass6 Prop2 { get; set; } + } + + class MyClass6 + { + public DateTime Prop1 { get; set; } + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs index c3ca6c2adc..32939a2430 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs @@ -2,6 +2,7 @@ using Volo.Abp.Application; using Volo.Abp.FeatureManagement.JsonConverters; using Volo.Abp.Json; +using Volo.Abp.Json.SystemTextJson; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; @@ -21,7 +22,7 @@ namespace Volo.Abp.FeatureManagement options.FileSets.AddEmbedded(); }); - Configure(options => + Configure(options => { options.JsonSerializerOptions.Converters.AddIfNotContains(new StringValueTypeJsonConverter()); }); diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs index bfea58b078..9d94cf8b55 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; -using Volo.Abp.Json.JsonConverters; +using Volo.Abp.Json.SystemTextJson.JsonConverters; using Volo.Abp.Validation.StringValues; namespace Volo.Abp.FeatureManagement.JsonConverters diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 3df9140805..29cb13d9f3 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -109,7 +109,6 @@ $projects = ( "framework/src/Volo.Abp.Http", "framework/src/Volo.Abp.IdentityModel", "framework/src/Volo.Abp.Json", - "framework/src/Volo.Abp.Json.Newtonsoft", "framework/src/Volo.Abp.Ldap", "framework/src/Volo.Abp.Localization.Abstractions", "framework/src/Volo.Abp.MailKit", From bffccb8f66e8ac6944f5fb2c22ed5fd551293055 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 1 Nov 2020 21:52:50 +0800 Subject: [PATCH 08/62] Refactor. --- .../Mvc/Json/AbpHybridJsonInputFormatter.cs | 3 +- .../Mvc/Json/AbpHybridJsonOutputFormatter.cs | 4 +- .../Volo.Abp.Auditing.csproj | 2 +- .../Volo/Abp/Json/AbpHybridJsonSerializer.cs | 28 +++---- .../Volo/Abp/Json/AbpJsonModule.cs | 4 +- .../SystemTextJsonSerializerProvider.cs | 13 +-- .../SystemTextJsonSupportTypeMatcher.cs | 66 +++++++++++++++ ...SystemTextJsonSupportTypeMatcherOptions.cs | 18 ++++ .../SystemTextJsonSupportTypes.cs | 62 -------------- .../SystemTextJsonSupportTypesOptions.cs | 15 ---- .../SystemTextJsonSupportTypeMatcher_Tests.cs | 83 +++++++++++++++++++ .../Json/SystemTextJsonSupportTypes_Tests.cs | 65 --------------- 12 files changed, 195 insertions(+), 168 deletions(-) create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcherOptions.cs delete mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypes.cs delete mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypesOptions.cs create mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs delete mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypes_Tests.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs index 4ad90bcad2..52cd0c8d63 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs @@ -25,7 +25,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Json private TextInputFormatter GetTextInputFormatter(InputFormatterContext context) { - if (context.HttpContext.RequestServices.GetRequiredService().CanHandle(context.ModelType)) + var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); + if (typesMatcher.Match(context.ModelType)) { return context.HttpContext.RequestServices.GetRequiredService(); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs index 7cf991be96..e0537664da 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs @@ -12,6 +12,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json { SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJson); SupportedMediaTypes.Add(MediaTypeHeaderValues.TextJson); SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationAnyJsonSyntax); @@ -24,7 +25,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Json private TextOutputFormatter GetTextInputFormatter(OutputFormatterWriteContext context) { - if (context.HttpContext.RequestServices.GetRequiredService().CanHandle(context.ObjectType)) + var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); + if (typesMatcher.Match(context.ObjectType)) { return context.HttpContext.RequestServices.GetRequiredService(); } diff --git a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj index b3548a949b..2685236a89 100644 --- a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj +++ b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj @@ -22,7 +22,7 @@ - + diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs index 6621ac8640..9980689760 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -7,21 +6,16 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Json { - public class AbpHybridJsonSerializer : IJsonSerializer, ISingletonDependency + public class AbpHybridJsonSerializer : IJsonSerializer, ITransientDependency { - private readonly Lazy> _lazyProviders; - public List Providers => _lazyProviders.Value; + protected AbpJsonOptions Options { get; } + + protected IServiceProvider ServiceProvider { get; } public AbpHybridJsonSerializer(IOptions options, IServiceProvider serviceProvider) { - _lazyProviders = new Lazy>( - () => options.Value - .Providers - .Select(c => serviceProvider.GetRequiredService(c) as IJsonSerializerProvider) - .Reverse() - .ToList(), - true - ); + Options = options.Value; + ServiceProvider = serviceProvider; } public string Serialize(object obj, bool camelCase = true, bool indented = false) @@ -44,12 +38,16 @@ namespace Volo.Abp.Json protected virtual IJsonSerializerProvider GetSerializerProvider(Type type) { - foreach (var provider in Providers.Where(provider => provider.CanHandle(type))) + foreach (var providerType in Options.Providers.Reverse()) { - return provider; + var provider = ServiceProvider.GetRequiredService(providerType) as IJsonSerializerProvider; + if (provider.CanHandle(type)) + { + return provider; + } } - throw new AbpException($"There is no IJsonSerializerProvider that can handle {type.GetFullNameWithAssemblyName()} types!"); + throw new AbpException($"There is no IJsonSerializerProvider that can handle '{type.GetFullNameWithAssemblyName()}'!"); } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index 747f01732a..21d5b67241 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -23,9 +23,9 @@ namespace Volo.Abp.Json options.Providers.Add(); }); - Configure(options => + Configure(options => { - options.IgnoreAttributes.Add(); + options.UnsupportedAttributes.Add(); }); } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs index 5a3429bff1..623d290fc0 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs @@ -2,25 +2,26 @@ using System.Text.Json; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; -using Volo.Abp.Json.SystemTextJson; -namespace Volo.Abp.Json +namespace Volo.Abp.Json.SystemTextJson { public class SystemTextJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency { protected AbpSystemTextJsonSerializerOptions Options { get; } - protected SystemTextJsonSupportTypes SystemTextJsonSupportTypes { get; } + protected SystemTextJsonSupportTypeMatcher SystemTextJsonSupportTypeMatcher { get; } - public SystemTextJsonSerializerProvider(IOptions options, SystemTextJsonSupportTypes systemTextJsonSupportTypes) + public SystemTextJsonSerializerProvider( + IOptions options, + SystemTextJsonSupportTypeMatcher systemTextJsonSupportTypeMatcher) { - SystemTextJsonSupportTypes = systemTextJsonSupportTypes; + SystemTextJsonSupportTypeMatcher = systemTextJsonSupportTypeMatcher; Options = options.Value; } public bool CanHandle(Type type) { - return SystemTextJsonSupportTypes.CanHandle(type); + return SystemTextJsonSupportTypeMatcher.Match(type); } public string Serialize(object obj, bool camelCase = true, bool indented = false) diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs new file mode 100644 index 0000000000..440d453c37 --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Concurrent; +using System.Linq; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Reflection; +using Volo.Abp.Timing; + +namespace Volo.Abp.Json.SystemTextJson +{ + public class SystemTextJsonSupportTypeMatcher : ITransientDependency + { + private static readonly ConcurrentBag CacheTypes = new ConcurrentBag(); + + private readonly SystemTextJsonSupportTypeMatcherOptions _options; + + public SystemTextJsonSupportTypeMatcher(IOptions options) + { + _options = options.Value; + } + + public bool Match(Type type) + { + if (_options.UnsupportedTypes.Any(x => x == type)) + { + return false; + } + + if (CacheTypes.Contains(type)) + { + return false; + } + + if (type.GetCustomAttributes(true).Any(x => _options.UnsupportedAttributes.Any(a => a == x.GetType()))) + { + CacheTypes.Add(type); + return false; + } + + if (type.DeclaringType != null && type.DeclaringType.GetCustomAttributes(true).Any(x => _options.UnsupportedAttributes.Any(a => a == x.GetType()))) + { + CacheTypes.Add(type); + return false; + } + + foreach (var propertyInfo in type.GetProperties()) + { + if (propertyInfo.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true)) + { + CacheTypes.Add(type); + return false; + } + + if (!TypeHelper.IsPrimitiveExtended(type, includeNullables: true, includeEnums: true)) + { + if (!Match(propertyInfo.PropertyType)) + { + return false; + } + } + } + + return true; + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcherOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcherOptions.cs new file mode 100644 index 0000000000..fcf63c7509 --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcherOptions.cs @@ -0,0 +1,18 @@ +using System; +using Volo.Abp.Collections; + +namespace Volo.Abp.Json.SystemTextJson +{ + public class SystemTextJsonSupportTypeMatcherOptions + { + public ITypeList UnsupportedAttributes { get; } + + public ITypeList UnsupportedTypes { get; } + + public SystemTextJsonSupportTypeMatcherOptions() + { + UnsupportedAttributes = new TypeList(); + UnsupportedTypes = new TypeList(); + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypes.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypes.cs deleted file mode 100644 index c2061e5b27..0000000000 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypes.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.Extensions.Options; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Reflection; -using Volo.Abp.Timing; - -namespace Volo.Abp.Json.SystemTextJson -{ - public class SystemTextJsonSupportTypes : ITransientDependency - { - private static readonly List CacheTypes = new List(); - - private readonly SystemTextJsonSupportTypesOptions Options; - - public SystemTextJsonSupportTypes(IOptions options) - { - Options = options.Value; - } - - public bool CanHandle(Type type) - { - if (CacheTypes.Any(x => x == type)) - { - return false; - } - - if (type.GetCustomAttributes(true).Any(x => Options.IgnoreAttributes.Any(a => a == x.GetType()))) - { - CacheTypes.Add(type); - return false; - } - - if (type.DeclaringType != null && type.DeclaringType.GetCustomAttributes(true).Any(x => Options.IgnoreAttributes.Any(a => a == x.GetType()))) - { - CacheTypes.Add(type.DeclaringType); - return false; - } - - foreach (var propertyInfo in type.GetProperties()) - { - if (propertyInfo.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true)) - { - CacheTypes.Add(propertyInfo.GetType()); - return false; - } - - if (!TypeHelper.IsPrimitiveExtended(type)) - { - if (!CanHandle(propertyInfo.PropertyType)) - { - CacheTypes.Add(propertyInfo.PropertyType); - return false; - } - } - } - - return true; - } - } -} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypesOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypesOptions.cs deleted file mode 100644 index 33ad53b997..0000000000 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypesOptions.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using Volo.Abp.Collections; - -namespace Volo.Abp.Json.SystemTextJson -{ - public class SystemTextJsonSupportTypesOptions - { - public ITypeList IgnoreAttributes; - - public SystemTextJsonSupportTypesOptions() - { - IgnoreAttributes = new TypeList(); - } - } -} diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs new file mode 100644 index 0000000000..f67431a026 --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs @@ -0,0 +1,83 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.Json.SystemTextJson; +using Volo.Abp.Timing; +using Xunit; + +namespace Volo.Abp.Json +{ + public class SystemTextJsonSupportTypeMatcher_Tests : AbpJsonTestBase + { + private readonly SystemTextJsonSupportTypeMatcher _systemTextJsonSupportTypeMatcher; + + protected override void AfterAddApplication(IServiceCollection services) + { + services.Configure(options => + { + options.UnsupportedTypes.Add(); + }); + + base.AfterAddApplication(services); + } + + public SystemTextJsonSupportTypeMatcher_Tests() + { + _systemTextJsonSupportTypeMatcher = GetRequiredService(); + } + + [Fact] + public void CanHandle_Test() + { + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass)).ShouldBeFalse(); + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass2)).ShouldBeFalse(); + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass3)).ShouldBeFalse(); + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass4)).ShouldBeFalse(); + + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass5)).ShouldBeTrue(); + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass6)).ShouldBeTrue(); + + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass7)).ShouldBeFalse(); + } + + [DisableDateTimeNormalization] + class MyClass + { + public DateTime Prop1 { get; set; } + } + + class MyClass2 + { + [DisableDateTimeNormalization] + public DateTime Prop1 { get; set; } + } + + class MyClass3 + { + public MyClass4 Prop1 { get; set; } + } + + class MyClass4 + { + [DisableDateTimeNormalization] + public DateTime Prop1 { get; set; } + } + + class MyClass5 + { + public DateTime Prop1 { get; set; } + + public MyClass6 Prop2 { get; set; } + } + + class MyClass6 + { + public DateTime Prop1 { get; set; } + } + + class MyClass7 + { + public DateTime Prop1 { get; set; } + } + } +} diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypes_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypes_Tests.cs deleted file mode 100644 index b21cb94653..0000000000 --- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypes_Tests.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using Shouldly; -using Volo.Abp.Json.SystemTextJson; -using Volo.Abp.Timing; -using Xunit; - -namespace Volo.Abp.Json -{ - public class SystemTextJsonSupportTypes_Tests : AbpJsonTestBase - { - private readonly SystemTextJsonSupportTypes _systemTextJsonSupportTypes; - - public SystemTextJsonSupportTypes_Tests() - { - _systemTextJsonSupportTypes = GetRequiredService(); - } - - [Fact] - public void Test() - { - _systemTextJsonSupportTypes.CanHandle(typeof(MyClass)).ShouldBeFalse(); - _systemTextJsonSupportTypes.CanHandle(typeof(MyClass2)).ShouldBeFalse(); - _systemTextJsonSupportTypes.CanHandle(typeof(MyClass3)).ShouldBeFalse(); - _systemTextJsonSupportTypes.CanHandle(typeof(MyClass4)).ShouldBeFalse(); - - _systemTextJsonSupportTypes.CanHandle(typeof(MyClass5)).ShouldBeTrue(); - _systemTextJsonSupportTypes.CanHandle(typeof(MyClass6)).ShouldBeTrue(); - } - - [DisableDateTimeNormalization] - class MyClass - { - public DateTime Prop1 { get; set; } - } - - class MyClass2 - { - [DisableDateTimeNormalization] - public DateTime Prop1 { get; set; } - } - - class MyClass3 - { - public MyClass4 Prop1 { get; set; } - } - - class MyClass4 - { - [DisableDateTimeNormalization] - public DateTime Prop1 { get; set; } - } - - class MyClass5 - { - public DateTime Prop1 { get; set; } - - public MyClass6 Prop2 { get; set; } - } - - class MyClass6 - { - public DateTime Prop1 { get; set; } - } - } -} From e0204e9576a7b402fc4a98a467e9b31f09b0dfcd Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 1 Nov 2020 22:11:59 +0800 Subject: [PATCH 09/62] Add AbpJsonIsoDateTimeConverter to AbpNewtonsoftJsonSerializerOptions. --- .../Mvc/Json/AbpHybridJsonInputFormatter.cs | 4 ++-- .../Mvc/Json/AbpHybridJsonOutputFormatter.cs | 2 +- .../Mvc/Json/AbpMvcJsonContractResolver.cs | 12 ++++++++---- .../src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs | 5 +++++ 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs index 52cd0c8d63..ce6036f71f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json return await GetTextInputFormatter(context).ReadRequestBodyAsync(context, encoding); } - private TextInputFormatter GetTextInputFormatter(InputFormatterContext context) + protected virtual TextInputFormatter GetTextInputFormatter(InputFormatterContext context) { var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); if (typesMatcher.Match(context.ModelType)) @@ -34,6 +34,6 @@ namespace Volo.Abp.AspNetCore.Mvc.Json return context.HttpContext.RequestServices.GetRequiredService(); } - public InputFormatterExceptionPolicy ExceptionPolicy => InputFormatterExceptionPolicy.MalformedInputExceptions; + public virtual InputFormatterExceptionPolicy ExceptionPolicy => InputFormatterExceptionPolicy.MalformedInputExceptions; } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs index e0537664da..d4f1d67f22 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json await GetTextInputFormatter(context).WriteResponseBodyAsync(context, selectedEncoding); } - private TextOutputFormatter GetTextInputFormatter(OutputFormatterWriteContext context) + protected virtual TextOutputFormatter GetTextInputFormatter(OutputFormatterWriteContext context) { var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); if (typesMatcher.Match(context.ObjectType)) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs index 2db8bc3f06..2021afd492 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs @@ -1,5 +1,6 @@ using System; using System.Reflection; +using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using Volo.Abp.DependencyInjection; @@ -11,11 +12,14 @@ namespace Volo.Abp.AspNetCore.Mvc.Json { public class AbpMvcJsonContractResolver : DefaultContractResolver, ITransientDependency { - private readonly AbpJsonIsoDateTimeConverter _dateTimeConverter; + private readonly Lazy _dateTimeConverter; - public AbpMvcJsonContractResolver(AbpJsonIsoDateTimeConverter dateTimeConverter) + public AbpMvcJsonContractResolver(IServiceProvider serviceProvider) { - _dateTimeConverter = dateTimeConverter; + _dateTimeConverter = new Lazy( + serviceProvider.GetRequiredService, + true + ); NamingStrategy = new CamelCaseNamingStrategy(); } @@ -38,7 +42,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json if (ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault(member) == null) { - property.Converter = _dateTimeConverter; + property.Converter = _dateTimeConverter.Value; } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index 21d5b67241..8eb683c515 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -27,6 +27,11 @@ namespace Volo.Abp.Json { options.UnsupportedAttributes.Add(); }); + + Configure(options => + { + options.Converters.Add(); + }); } } } From dee8f22055c70620694cbf5ca8a926c4d20b7161 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 1 Nov 2020 23:13:56 +0800 Subject: [PATCH 10/62] Enhanced SystemTextJsonSupportTypeMatcher. --- .../SystemTextJsonSupportTypeMatcher.cs | 130 +++++++++++++++++- .../SystemTextJsonSupportTypeMatcher_Tests.cs | 30 ++++ 2 files changed, 153 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs index 440d453c37..9ac2f16f78 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs @@ -10,7 +10,8 @@ namespace Volo.Abp.Json.SystemTextJson { public class SystemTextJsonSupportTypeMatcher : ITransientDependency { - private static readonly ConcurrentBag CacheTypes = new ConcurrentBag(); + private static readonly ConcurrentBag SupportedTypesCache = new ConcurrentBag(); + private static readonly ConcurrentBag UnsupportedTypesCache = new ConcurrentBag(); private readonly SystemTextJsonSupportTypeMatcherOptions _options; @@ -21,25 +22,83 @@ namespace Volo.Abp.Json.SystemTextJson public bool Match(Type type) { - if (_options.UnsupportedTypes.Any(x => x == type)) + if (UnsupportedTypesCache.Contains(type)) { return false; } - if (CacheTypes.Contains(type)) + if (SupportedTypesCache.Contains(type)) { + return true; + } + + if (_options.UnsupportedTypes.Any(x => x == type)) + { + UnsupportedTypesCache.Add(type); return false; } + if (type.IsGenericType) + { + foreach (var genericArgument in type.GetGenericArguments()) + { + if (!TypeHelper.IsPrimitiveExtended(genericArgument, includeNullables: true, includeEnums: true)) + { + if (!Match(genericArgument)) + { + return false; + } + } + else + { + if (_options.UnsupportedTypes.Any(x => x == genericArgument)) + { + UnsupportedTypesCache.Add(genericArgument); + return false; + } + } + } + + return true; + } + + if (type.IsArray) + { + var elementType = type.GetElementType(); + if (!TypeHelper.IsPrimitiveExtended(elementType, includeNullables: true, includeEnums: true)) + { + if (!Match(elementType)) + { + return false; + } + } + else + { + if (_options.UnsupportedTypes.Any(x => x == elementType)) + { + UnsupportedTypesCache.Add(elementType); + return false; + } + } + + return true; + } + + + if (TypeHelper.IsPrimitiveExtended(type, includeNullables: true, includeEnums: true)) + { + return true; + } + if (type.GetCustomAttributes(true).Any(x => _options.UnsupportedAttributes.Any(a => a == x.GetType()))) { - CacheTypes.Add(type); + UnsupportedTypesCache.Add(type); return false; } if (type.DeclaringType != null && type.DeclaringType.GetCustomAttributes(true).Any(x => _options.UnsupportedAttributes.Any(a => a == x.GetType()))) { - CacheTypes.Add(type); + UnsupportedTypesCache.Add(type); return false; } @@ -47,19 +106,76 @@ namespace Volo.Abp.Json.SystemTextJson { if (propertyInfo.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true)) { - CacheTypes.Add(type); + UnsupportedTypesCache.Add(type); + return false; + } + + if (_options.UnsupportedTypes.Any(x => x == propertyInfo.PropertyType)) + { + UnsupportedTypesCache.Add(propertyInfo.PropertyType); return false; } - if (!TypeHelper.IsPrimitiveExtended(type, includeNullables: true, includeEnums: true)) + if (propertyInfo.PropertyType.IsGenericType) + { + foreach (var genericArgument in propertyInfo.PropertyType.GetGenericArguments()) + { + if (!TypeHelper.IsPrimitiveExtended(genericArgument, includeNullables: true, includeEnums: true)) + { + if (!Match(genericArgument)) + { + return false; + } + } + else + { + if (_options.UnsupportedTypes.Any(x => x == genericArgument)) + { + UnsupportedTypesCache.Add(genericArgument); + return false; + } + } + } + } + + if (propertyInfo.PropertyType.IsArray) + { + var elementType = propertyInfo.PropertyType.GetElementType(); + if (!TypeHelper.IsPrimitiveExtended(elementType, includeNullables: true, includeEnums: true)) + { + if (!Match(elementType)) + { + return false; + } + } + else + { + if (_options.UnsupportedTypes.Any(x => x == elementType)) + { + UnsupportedTypesCache.Add(elementType); + return false; + } + } + } + + if (!TypeHelper.IsPrimitiveExtended(propertyInfo.PropertyType, includeNullables: true, includeEnums: true)) { if (!Match(propertyInfo.PropertyType)) { return false; } } + else + { + if (_options.UnsupportedTypes.Any(x => x == propertyInfo.PropertyType)) + { + UnsupportedTypesCache.Add(propertyInfo.PropertyType); + return false; + } + } } + SupportedTypesCache.Add(type); return true; } } diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs index f67431a026..6fdc6fcb94 100644 --- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.Json.SystemTextJson; @@ -16,6 +17,7 @@ namespace Volo.Abp.Json services.Configure(options => { options.UnsupportedTypes.Add(); + options.UnsupportedTypes.Add(); }); base.AfterAddApplication(services); @@ -38,6 +40,18 @@ namespace Volo.Abp.Json _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass6)).ShouldBeTrue(); _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass7)).ShouldBeFalse(); + + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass8)).ShouldBeFalse(); + _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass9)).ShouldBeFalse(); + + _systemTextJsonSupportTypeMatcher.Match(typeof(string)).ShouldBeTrue(); + _systemTextJsonSupportTypeMatcher.Match(typeof(string[])).ShouldBeTrue(); + + _systemTextJsonSupportTypeMatcher.Match(typeof(int)).ShouldBeTrue(); + + _systemTextJsonSupportTypeMatcher.Match(typeof(byte)).ShouldBeFalse(); + _systemTextJsonSupportTypeMatcher.Match(typeof(Dictionary)).ShouldBeFalse(); + _systemTextJsonSupportTypeMatcher.Match(typeof(Dictionary)).ShouldBeFalse(); } [DisableDateTimeNormalization] @@ -79,5 +93,21 @@ namespace Volo.Abp.Json { public DateTime Prop1 { get; set; } } + + class MyClass8 + { + public MyClass10[] Prop1 { get; set; } + } + + class MyClass9 + { + public Dictionary Prop1 { get; set; } + } + + class MyClass10 + { + [DisableDateTimeNormalization] + public DateTime Prop1 { get; set; } + } } } From 74affe2a749ae748ca786d0f4746cf37aff446e7 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 2 Nov 2020 10:29:58 +0800 Subject: [PATCH 11/62] Refactor & add more unit tests. --- .../Mvc/Json/AbpHybridJsonInputFormatter.cs | 2 +- .../Mvc/Json/AbpHybridJsonOutputFormatter.cs | 2 +- .../Mvc/Json/MvcCoreBuilderExtensions.cs | 1 + .../Volo/Abp/Json/AbpJsonModule.cs | 9 +- ...=> AbpNewtonsoftJsonSerializerProvider.cs} | 4 +- ...=> AbpSystemTextJsonSerializerProvider.cs} | 12 +- .../AbpSystemTextJsonSupportTypeMatcher.cs | 21 ++ ...SystemTextJsonSupportTypeMatcherOptions.cs | 14 ++ .../SystemTextJsonSupportTypeMatcher.cs | 182 ------------------ ...SystemTextJsonSupportTypeMatcherOptions.cs | 18 -- .../ModelBinding/ModelBindingController.cs | 10 + .../ModelBindingController_Tests.cs | 43 ++++- ...pSystemTextJsonSupportTypeMatcher_Tests.cs | 66 +++++++ .../SystemTextJsonSupportTypeMatcher_Tests.cs | 113 ----------- 14 files changed, 165 insertions(+), 332 deletions(-) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/{NewtonsoftJsonSerializerProvider.cs => AbpNewtonsoftJsonSerializerProvider.cs} (94%) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/{SystemTextJsonSerializerProvider.cs => AbpSystemTextJsonSerializerProvider.cs} (75%) create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs create mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcherOptions.cs delete mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs delete mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcherOptions.cs create mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs delete mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs index ce6036f71f..43d59c4e3d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json protected virtual TextInputFormatter GetTextInputFormatter(InputFormatterContext context) { - var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); + var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); if (typesMatcher.Match(context.ModelType)) { return context.HttpContext.RequestServices.GetRequiredService(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs index d4f1d67f22..54039abf1a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json protected virtual TextOutputFormatter GetTextInputFormatter(OutputFormatterWriteContext context) { - var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); + var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); if (typesMatcher.Match(context.ObjectType)) { return context.HttpContext.RequestServices.GetRequiredService(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs index 9eaa0c826a..5a01cafb22 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs @@ -23,6 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json return new SystemTextJsonInputFormatter(jsonOptions.Value, logger); }); + builder.Services.AddTransient(); //NewtonsoftJsonInputFormatter builder.Services.AddTransient(provider => { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index 8eb683c515..c5f102f9c9 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -19,13 +19,8 @@ namespace Volo.Abp.Json Configure(options => { - options.Providers.Add(); - options.Providers.Add(); - }); - - Configure(options => - { - options.UnsupportedAttributes.Add(); + options.Providers.Add(); + options.Providers.Add(); }); Configure(options => diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializerProvider.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerProvider.cs similarity index 94% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializerProvider.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerProvider.cs index e33f9b155f..2d288459cf 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializerProvider.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerProvider.cs @@ -9,14 +9,14 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Json.Newtonsoft { - public class NewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency + public class AbpNewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency { private static readonly CamelCaseExceptDictionaryKeysResolver SharedCamelCaseExceptDictionaryKeysResolver = new CamelCaseExceptDictionaryKeysResolver(); protected List Converters { get; } - public NewtonsoftJsonSerializerProvider( + public AbpNewtonsoftJsonSerializerProvider( IOptions options, IServiceProvider serviceProvider) { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs similarity index 75% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs index 623d290fc0..1bf5f214d6 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSerializerProvider.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs @@ -5,23 +5,23 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Json.SystemTextJson { - public class SystemTextJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency + public class AbpSystemTextJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency { protected AbpSystemTextJsonSerializerOptions Options { get; } - protected SystemTextJsonSupportTypeMatcher SystemTextJsonSupportTypeMatcher { get; } + protected AbpSystemTextJsonSupportTypeMatcher AbpSystemTextJsonSupportTypeMatcher { get; } - public SystemTextJsonSerializerProvider( + public AbpSystemTextJsonSerializerProvider( IOptions options, - SystemTextJsonSupportTypeMatcher systemTextJsonSupportTypeMatcher) + AbpSystemTextJsonSupportTypeMatcher abpSystemTextJsonSupportTypeMatcher) { - SystemTextJsonSupportTypeMatcher = systemTextJsonSupportTypeMatcher; + AbpSystemTextJsonSupportTypeMatcher = abpSystemTextJsonSupportTypeMatcher; Options = options.Value; } public bool CanHandle(Type type) { - return SystemTextJsonSupportTypeMatcher.Match(type); + return AbpSystemTextJsonSupportTypeMatcher.Match(type); } public string Serialize(object obj, bool camelCase = true, bool indented = false) diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs new file mode 100644 index 0000000000..e53a4a1b1e --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs @@ -0,0 +1,21 @@ +using System; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Json.SystemTextJson +{ + public class AbpSystemTextJsonSupportTypeMatcher : ITransientDependency + { + protected AbpSystemTextJsonSupportTypeMatcherOptions Options { get; } + + public AbpSystemTextJsonSupportTypeMatcher(IOptions options) + { + Options = options.Value; + } + + public virtual bool Match(Type type) + { + return !Options.UnsupportedTypes.Contains(type); + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcherOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcherOptions.cs new file mode 100644 index 0000000000..be9b62352f --- /dev/null +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcherOptions.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Collections; + +namespace Volo.Abp.Json.SystemTextJson +{ + public class AbpSystemTextJsonSupportTypeMatcherOptions + { + public ITypeList UnsupportedTypes { get; } + + public AbpSystemTextJsonSupportTypeMatcherOptions() + { + UnsupportedTypes = new TypeList(); + } + } +} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs deleted file mode 100644 index 9ac2f16f78..0000000000 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcher.cs +++ /dev/null @@ -1,182 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Linq; -using Microsoft.Extensions.Options; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Reflection; -using Volo.Abp.Timing; - -namespace Volo.Abp.Json.SystemTextJson -{ - public class SystemTextJsonSupportTypeMatcher : ITransientDependency - { - private static readonly ConcurrentBag SupportedTypesCache = new ConcurrentBag(); - private static readonly ConcurrentBag UnsupportedTypesCache = new ConcurrentBag(); - - private readonly SystemTextJsonSupportTypeMatcherOptions _options; - - public SystemTextJsonSupportTypeMatcher(IOptions options) - { - _options = options.Value; - } - - public bool Match(Type type) - { - if (UnsupportedTypesCache.Contains(type)) - { - return false; - } - - if (SupportedTypesCache.Contains(type)) - { - return true; - } - - if (_options.UnsupportedTypes.Any(x => x == type)) - { - UnsupportedTypesCache.Add(type); - return false; - } - - if (type.IsGenericType) - { - foreach (var genericArgument in type.GetGenericArguments()) - { - if (!TypeHelper.IsPrimitiveExtended(genericArgument, includeNullables: true, includeEnums: true)) - { - if (!Match(genericArgument)) - { - return false; - } - } - else - { - if (_options.UnsupportedTypes.Any(x => x == genericArgument)) - { - UnsupportedTypesCache.Add(genericArgument); - return false; - } - } - } - - return true; - } - - if (type.IsArray) - { - var elementType = type.GetElementType(); - if (!TypeHelper.IsPrimitiveExtended(elementType, includeNullables: true, includeEnums: true)) - { - if (!Match(elementType)) - { - return false; - } - } - else - { - if (_options.UnsupportedTypes.Any(x => x == elementType)) - { - UnsupportedTypesCache.Add(elementType); - return false; - } - } - - return true; - } - - - if (TypeHelper.IsPrimitiveExtended(type, includeNullables: true, includeEnums: true)) - { - return true; - } - - if (type.GetCustomAttributes(true).Any(x => _options.UnsupportedAttributes.Any(a => a == x.GetType()))) - { - UnsupportedTypesCache.Add(type); - return false; - } - - if (type.DeclaringType != null && type.DeclaringType.GetCustomAttributes(true).Any(x => _options.UnsupportedAttributes.Any(a => a == x.GetType()))) - { - UnsupportedTypesCache.Add(type); - return false; - } - - foreach (var propertyInfo in type.GetProperties()) - { - if (propertyInfo.IsDefined(typeof(DisableDateTimeNormalizationAttribute), true)) - { - UnsupportedTypesCache.Add(type); - return false; - } - - if (_options.UnsupportedTypes.Any(x => x == propertyInfo.PropertyType)) - { - UnsupportedTypesCache.Add(propertyInfo.PropertyType); - return false; - } - - if (propertyInfo.PropertyType.IsGenericType) - { - foreach (var genericArgument in propertyInfo.PropertyType.GetGenericArguments()) - { - if (!TypeHelper.IsPrimitiveExtended(genericArgument, includeNullables: true, includeEnums: true)) - { - if (!Match(genericArgument)) - { - return false; - } - } - else - { - if (_options.UnsupportedTypes.Any(x => x == genericArgument)) - { - UnsupportedTypesCache.Add(genericArgument); - return false; - } - } - } - } - - if (propertyInfo.PropertyType.IsArray) - { - var elementType = propertyInfo.PropertyType.GetElementType(); - if (!TypeHelper.IsPrimitiveExtended(elementType, includeNullables: true, includeEnums: true)) - { - if (!Match(elementType)) - { - return false; - } - } - else - { - if (_options.UnsupportedTypes.Any(x => x == elementType)) - { - UnsupportedTypesCache.Add(elementType); - return false; - } - } - } - - if (!TypeHelper.IsPrimitiveExtended(propertyInfo.PropertyType, includeNullables: true, includeEnums: true)) - { - if (!Match(propertyInfo.PropertyType)) - { - return false; - } - } - else - { - if (_options.UnsupportedTypes.Any(x => x == propertyInfo.PropertyType)) - { - UnsupportedTypesCache.Add(propertyInfo.PropertyType); - return false; - } - } - } - - SupportedTypesCache.Add(type); - return true; - } - } -} diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcherOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcherOptions.cs deleted file mode 100644 index fcf63c7509..0000000000 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/SystemTextJsonSupportTypeMatcherOptions.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using Volo.Abp.Collections; - -namespace Volo.Abp.Json.SystemTextJson -{ - public class SystemTextJsonSupportTypeMatcherOptions - { - public ITypeList UnsupportedAttributes { get; } - - public ITypeList UnsupportedTypes { get; } - - public SystemTextJsonSupportTypeMatcherOptions() - { - UnsupportedAttributes = new TypeList(); - UnsupportedTypes = new TypeList(); - } - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController.cs index 2c5a69e7e7..eea25417fc 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController.cs @@ -39,6 +39,16 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding input.Time3.Value.Kind.ToString().ToLower() + "_" + input.InnerModel.Time4.Kind.ToString().ToLower(); } + + //JSON input and output. + [HttpPost("ComplexTypeDateTimeKind_JSON")] + public string ComplexTypeDateTimeKind_JSON([FromBody]GetDateTimeKindModel input) + { + return input.Time1.Kind.ToString().ToLower() + "_" + + input.Time2.Kind.ToString().ToLower() + "_" + + input.Time3.Value.Kind.ToString().ToLower() + "_" + + input.InnerModel.Time4.Kind.ToString().ToLower(); + } } public class GetDateTimeKindModel diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs index 698723a34a..556521d82c 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs @@ -1,9 +1,14 @@ using System; using System.Net; +using System.Net.Http; +using System.Text; +using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Shouldly; +using Volo.Abp.Http; +using Volo.Abp.Json.SystemTextJson; using Volo.Abp.Timing; using Xunit; @@ -13,6 +18,15 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding { protected DateTimeKind DateTimeKind { get; set; } + protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) + { + services.Configure(options => + { + options.UnsupportedTypes.Add(); + options.UnsupportedTypes.Add(); + }); + } + [Fact] public async Task DateTimeKind_Test() { @@ -75,8 +89,29 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding var resultAsString = await response.Content.ReadAsStringAsync(); //Time parameter(2010-01-01T00:00:00Z) with time zone information, so the default Kind is UTC //https://docs.microsoft.com/en-us/aspnet/core/migration/31-to-50?view=aspnetcore-3.1&tabs=visual-studio#datetime-values-are-model-bound-as-utc-times - resultAsString.ShouldBe( - $"utc_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_utc"); + resultAsString.ShouldBe($"utc_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_utc"); + } + + [Fact] + public async Task ComplexTypeDateTimeKind_JSON_Test() + { + var time = DateTime.Parse("2010-01-01T00:00:00Z"); + var response = await Client.PostAsync("/api/model-Binding-test/ComplexTypeDateTimeKind_JSON", + new StringContent(JsonSerializer.Serialize( + new GetDateTimeKindModel { + Time1 = time, + Time2 = time, + Time3 = time, + InnerModel = new GetDateTimeKindModel.GetDateTimeKindInnerModel + { + Time4 = time + } + } + ), Encoding.UTF8, MimeTypes.Application.Json)); + + response.StatusCode.ShouldBe(HttpStatusCode.OK); + var resultAsString = await response.Content.ReadAsStringAsync(); + resultAsString.ShouldBe($"local_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_local"); } } @@ -86,6 +121,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding { DateTimeKind = DateTimeKind.Utc; services.Configure(x => x.Kind = DateTimeKind); + + base.ConfigureServices(context, services); } } @@ -95,6 +132,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding { DateTimeKind = DateTimeKind.Local; services.Configure(x => x.Kind = DateTimeKind); + + base.ConfigureServices(context, services); } } } diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs new file mode 100644 index 0000000000..0e49181fab --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.Json.SystemTextJson; +using Xunit; + +namespace Volo.Abp.Json +{ + public class AbpSystemTextJsonSupportTypeMatcher_Tests : AbpJsonTestBase + { + private readonly AbpSystemTextJsonSupportTypeMatcher _abpSystemTextJsonSupportTypeMatcher; + + public AbpSystemTextJsonSupportTypeMatcher_Tests() + { + _abpSystemTextJsonSupportTypeMatcher = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + services.Configure(options => + { + options.UnsupportedTypes.Add(); + options.UnsupportedTypes.Add(); + options.UnsupportedTypes.Add>(); + }); + } + + [Fact] + public void CanHandle_Test() + { + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(MyClass)).ShouldBeFalse(); + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(byte[])).ShouldBeFalse(); + + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(MyClass2)).ShouldBeTrue(); + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(MyClass3)).ShouldBeTrue(); + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(MyClass4)).ShouldBeTrue(); + + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(string)).ShouldBeTrue(); + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(string[])).ShouldBeTrue(); + + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(Dictionary)).ShouldBeFalse(); + _abpSystemTextJsonSupportTypeMatcher.Match(typeof(IDictionary)).ShouldBeTrue(); + } + + class MyClass + { + public DateTime Prop1 { get; set; } + } + + class MyClass2 + { + public DateTime Prop1 { get; set; } + } + + class MyClass3 + { + public MyClass4 Prop1 { get; set; } + } + + class MyClass4 + { + public DateTime Prop1 { get; set; } + } + } +} diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs deleted file mode 100644 index 6fdc6fcb94..0000000000 --- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/SystemTextJsonSupportTypeMatcher_Tests.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.Extensions.DependencyInjection; -using Shouldly; -using Volo.Abp.Json.SystemTextJson; -using Volo.Abp.Timing; -using Xunit; - -namespace Volo.Abp.Json -{ - public class SystemTextJsonSupportTypeMatcher_Tests : AbpJsonTestBase - { - private readonly SystemTextJsonSupportTypeMatcher _systemTextJsonSupportTypeMatcher; - - protected override void AfterAddApplication(IServiceCollection services) - { - services.Configure(options => - { - options.UnsupportedTypes.Add(); - options.UnsupportedTypes.Add(); - }); - - base.AfterAddApplication(services); - } - - public SystemTextJsonSupportTypeMatcher_Tests() - { - _systemTextJsonSupportTypeMatcher = GetRequiredService(); - } - - [Fact] - public void CanHandle_Test() - { - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass)).ShouldBeFalse(); - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass2)).ShouldBeFalse(); - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass3)).ShouldBeFalse(); - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass4)).ShouldBeFalse(); - - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass5)).ShouldBeTrue(); - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass6)).ShouldBeTrue(); - - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass7)).ShouldBeFalse(); - - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass8)).ShouldBeFalse(); - _systemTextJsonSupportTypeMatcher.Match(typeof(MyClass9)).ShouldBeFalse(); - - _systemTextJsonSupportTypeMatcher.Match(typeof(string)).ShouldBeTrue(); - _systemTextJsonSupportTypeMatcher.Match(typeof(string[])).ShouldBeTrue(); - - _systemTextJsonSupportTypeMatcher.Match(typeof(int)).ShouldBeTrue(); - - _systemTextJsonSupportTypeMatcher.Match(typeof(byte)).ShouldBeFalse(); - _systemTextJsonSupportTypeMatcher.Match(typeof(Dictionary)).ShouldBeFalse(); - _systemTextJsonSupportTypeMatcher.Match(typeof(Dictionary)).ShouldBeFalse(); - } - - [DisableDateTimeNormalization] - class MyClass - { - public DateTime Prop1 { get; set; } - } - - class MyClass2 - { - [DisableDateTimeNormalization] - public DateTime Prop1 { get; set; } - } - - class MyClass3 - { - public MyClass4 Prop1 { get; set; } - } - - class MyClass4 - { - [DisableDateTimeNormalization] - public DateTime Prop1 { get; set; } - } - - class MyClass5 - { - public DateTime Prop1 { get; set; } - - public MyClass6 Prop2 { get; set; } - } - - class MyClass6 - { - public DateTime Prop1 { get; set; } - } - - class MyClass7 - { - public DateTime Prop1 { get; set; } - } - - class MyClass8 - { - public MyClass10[] Prop1 { get; set; } - } - - class MyClass9 - { - public Dictionary Prop1 { get; set; } - } - - class MyClass10 - { - [DisableDateTimeNormalization] - public DateTime Prop1 { get; set; } - } - } -} From 5650f6461d857bbabd6b189c4b4bbb3ead2879ad Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 2 Nov 2020 11:26:30 +0800 Subject: [PATCH 12/62] Add AbpHybridJsonSerializer_Tests. --- .../AbpSystemTextJsonSerializerOptions.cs | 5 + .../AbpSystemTextJsonSupportTypeMatcher.cs | 4 +- ...SystemTextJsonSupportTypeMatcherOptions.cs | 14 -- .../ModelBindingController_Tests.cs | 2 +- .../Abp/Json/AbpHybridJsonSerializer_Tests.cs | 125 ++++++++++++++++++ ...pSystemTextJsonSupportTypeMatcher_Tests.cs | 2 +- 6 files changed, 134 insertions(+), 18 deletions(-) delete mode 100644 framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcherOptions.cs create mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpHybridJsonSerializer_Tests.cs diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs index 1f986e688b..17a4ba661a 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs @@ -1,4 +1,5 @@ using System.Text.Json; +using Volo.Abp.Collections; namespace Volo.Abp.Json.SystemTextJson { @@ -6,6 +7,8 @@ namespace Volo.Abp.Json.SystemTextJson { public JsonSerializerOptions JsonSerializerOptions { get; } + public ITypeList UnsupportedTypes { get; } + public AbpSystemTextJsonSerializerOptions() { //TODO:Defaults? @@ -13,6 +16,8 @@ namespace Volo.Abp.Json.SystemTextJson //https://github.com/dotnet/runtime/blob/master/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerDefaults.cs JsonSerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); + + UnsupportedTypes = new TypeList(); } } } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs index e53a4a1b1e..6b991f051a 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs @@ -6,9 +6,9 @@ namespace Volo.Abp.Json.SystemTextJson { public class AbpSystemTextJsonSupportTypeMatcher : ITransientDependency { - protected AbpSystemTextJsonSupportTypeMatcherOptions Options { get; } + protected AbpSystemTextJsonSerializerOptions Options { get; } - public AbpSystemTextJsonSupportTypeMatcher(IOptions options) + public AbpSystemTextJsonSupportTypeMatcher(IOptions options) { Options = options.Value; } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcherOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcherOptions.cs deleted file mode 100644 index be9b62352f..0000000000 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcherOptions.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Volo.Abp.Collections; - -namespace Volo.Abp.Json.SystemTextJson -{ - public class AbpSystemTextJsonSupportTypeMatcherOptions - { - public ITypeList UnsupportedTypes { get; } - - public AbpSystemTextJsonSupportTypeMatcherOptions() - { - UnsupportedTypes = new TypeList(); - } - } -} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs index 556521d82c..fcce316772 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs @@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services) { - services.Configure(options => + services.Configure(options => { options.UnsupportedTypes.Add(); options.UnsupportedTypes.Add(); diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpHybridJsonSerializer_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpHybridJsonSerializer_Tests.cs new file mode 100644 index 0000000000..98f8acc7b4 --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpHybridJsonSerializer_Tests.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text.Json; +using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using Shouldly; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Json.Newtonsoft; +using Volo.Abp.Json.SystemTextJson; +using Xunit; +using JsonSerializer = Newtonsoft.Json.JsonSerializer; + +namespace Volo.Abp.Json +{ + public class AbpHybridJsonSerializer_Tests : AbpJsonTestBase + { + private readonly IJsonSerializer _jsonSerializer; + + public AbpHybridJsonSerializer_Tests() + { + _jsonSerializer = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + services.Configure(options => + { + options.UnsupportedTypes.Add(); + + options.JsonSerializerOptions.Converters.Add(new SystemTextJsonConverter()); + }); + + services.Configure(options => + { + options.Converters.Add(); + }); + } + + [Fact] + public void NewtonsoftSerialize_Test() + { + var json = _jsonSerializer.Serialize(new MyClass1 + { + Providers = new List + { + new MyClass3() + } + }); + + json.ShouldContain("Newtonsoft"); + } + + [Fact] + public void SystemTextJsonSerialize_Test() + { + var json = _jsonSerializer.Serialize(new MyClass2 + { + Providers = new List + { + new MyClass3() + } + }); + + json.ShouldContain("SystemTextJson"); + } + + public class MyClass1 + { + public string Provider { get; set; } + + public List Providers { get; set; } + } + + public class MyClass2 + { + public string Provider { get; set; } + + public List Providers { get; set; } + } + + public class MyClass3 + { + public string Provider { get; set; } + } + + class NewtonsoftJsonConverter : JsonConverter, ITransientDependency + { + public override void WriteJson(JsonWriter writer, MyClass1 value, JsonSerializer serializer) + { + value.Provider = "Newtonsoft"; + foreach (var provider in value.Providers) + { + provider.Provider = "Newtonsoft"; + } + + writer.WriteRawValue(JsonConvert.SerializeObject(value)); + } + + public override MyClass1 ReadJson(JsonReader reader, Type objectType, MyClass1 existingValue, bool hasExistingValue, JsonSerializer serializer) + { + return (MyClass1)serializer.Deserialize(reader, objectType); + } + } + + class SystemTextJsonConverter : System.Text.Json.Serialization.JsonConverter, ITransientDependency + { + public override void Write(Utf8JsonWriter writer, MyClass2 value, JsonSerializerOptions options) + { + value.Provider = "SystemTextJson"; + foreach (var provider in value.Providers) + { + provider.Provider = "SystemTextJson"; + } + System.Text.Json.JsonSerializer.Serialize(writer, value); + } + + public override MyClass2 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return (MyClass2)System.Text.Json.JsonSerializer.Deserialize(ref reader, typeToConvert); + } + } + } +} diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs index 0e49181fab..929e892af3 100644 --- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.Json protected override void AfterAddApplication(IServiceCollection services) { - services.Configure(options => + services.Configure(options => { options.UnsupportedTypes.Add(); options.UnsupportedTypes.Add(); From 2ab31f491f683083937dd3ba9c9132e547c3b358 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 2 Nov 2020 11:38:15 +0800 Subject: [PATCH 13/62] Rename AbpSystemTextJsonSupportTypeMatcher to AbpSystemTextJsonUnsupportedTypeMatcher. --- .../Mvc/Json/AbpHybridJsonInputFormatter.cs | 4 +- .../Mvc/Json/AbpHybridJsonOutputFormatter.cs | 4 +- .../AbpSystemTextJsonSerializerProvider.cs | 8 +-- ...bpSystemTextJsonUnsupportedTypeMatcher.cs} | 6 +- ...pSystemTextJsonSupportTypeMatcher_Tests.cs | 66 ------------------- ...temTextJsonUnsupportedTypeMatcher_Tests.cs | 66 +++++++++++++++++++ 6 files changed, 77 insertions(+), 77 deletions(-) rename framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/{AbpSystemTextJsonSupportTypeMatcher.cs => AbpSystemTextJsonUnsupportedTypeMatcher.cs} (57%) delete mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs create mode 100644 framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonUnsupportedTypeMatcher_Tests.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs index 43d59c4e3d..bd2ade69ad 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs @@ -25,8 +25,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Json protected virtual TextInputFormatter GetTextInputFormatter(InputFormatterContext context) { - var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); - if (typesMatcher.Match(context.ModelType)) + var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); + if (!typesMatcher.Match(context.ModelType)) { return context.HttpContext.RequestServices.GetRequiredService(); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs index 54039abf1a..1507457f08 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs @@ -25,8 +25,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Json protected virtual TextOutputFormatter GetTextInputFormatter(OutputFormatterWriteContext context) { - var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); - if (typesMatcher.Match(context.ObjectType)) + var typesMatcher = context.HttpContext.RequestServices.GetRequiredService(); + if (!typesMatcher.Match(context.ObjectType)) { return context.HttpContext.RequestServices.GetRequiredService(); } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs index 1bf5f214d6..570d1c162c 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs @@ -9,19 +9,19 @@ namespace Volo.Abp.Json.SystemTextJson { protected AbpSystemTextJsonSerializerOptions Options { get; } - protected AbpSystemTextJsonSupportTypeMatcher AbpSystemTextJsonSupportTypeMatcher { get; } + protected AbpSystemTextJsonUnsupportedTypeMatcher AbpSystemTextJsonUnsupportedTypeMatcher { get; } public AbpSystemTextJsonSerializerProvider( IOptions options, - AbpSystemTextJsonSupportTypeMatcher abpSystemTextJsonSupportTypeMatcher) + AbpSystemTextJsonUnsupportedTypeMatcher abpSystemTextJsonUnsupportedTypeMatcher) { - AbpSystemTextJsonSupportTypeMatcher = abpSystemTextJsonSupportTypeMatcher; + AbpSystemTextJsonUnsupportedTypeMatcher = abpSystemTextJsonUnsupportedTypeMatcher; Options = options.Value; } public bool CanHandle(Type type) { - return AbpSystemTextJsonSupportTypeMatcher.Match(type); + return !AbpSystemTextJsonUnsupportedTypeMatcher.Match(type); } public string Serialize(object obj, bool camelCase = true, bool indented = false) diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs similarity index 57% rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs index 6b991f051a..2beea42c68 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSupportTypeMatcher.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs @@ -4,18 +4,18 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Json.SystemTextJson { - public class AbpSystemTextJsonSupportTypeMatcher : ITransientDependency + public class AbpSystemTextJsonUnsupportedTypeMatcher : ITransientDependency { protected AbpSystemTextJsonSerializerOptions Options { get; } - public AbpSystemTextJsonSupportTypeMatcher(IOptions options) + public AbpSystemTextJsonUnsupportedTypeMatcher(IOptions options) { Options = options.Value; } public virtual bool Match(Type type) { - return !Options.UnsupportedTypes.Contains(type); + return Options.UnsupportedTypes.Contains(type); } } } diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs deleted file mode 100644 index 929e892af3..0000000000 --- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSupportTypeMatcher_Tests.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.Extensions.DependencyInjection; -using Shouldly; -using Volo.Abp.Json.SystemTextJson; -using Xunit; - -namespace Volo.Abp.Json -{ - public class AbpSystemTextJsonSupportTypeMatcher_Tests : AbpJsonTestBase - { - private readonly AbpSystemTextJsonSupportTypeMatcher _abpSystemTextJsonSupportTypeMatcher; - - public AbpSystemTextJsonSupportTypeMatcher_Tests() - { - _abpSystemTextJsonSupportTypeMatcher = GetRequiredService(); - } - - protected override void AfterAddApplication(IServiceCollection services) - { - services.Configure(options => - { - options.UnsupportedTypes.Add(); - options.UnsupportedTypes.Add(); - options.UnsupportedTypes.Add>(); - }); - } - - [Fact] - public void CanHandle_Test() - { - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(MyClass)).ShouldBeFalse(); - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(byte[])).ShouldBeFalse(); - - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(MyClass2)).ShouldBeTrue(); - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(MyClass3)).ShouldBeTrue(); - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(MyClass4)).ShouldBeTrue(); - - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(string)).ShouldBeTrue(); - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(string[])).ShouldBeTrue(); - - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(Dictionary)).ShouldBeFalse(); - _abpSystemTextJsonSupportTypeMatcher.Match(typeof(IDictionary)).ShouldBeTrue(); - } - - class MyClass - { - public DateTime Prop1 { get; set; } - } - - class MyClass2 - { - public DateTime Prop1 { get; set; } - } - - class MyClass3 - { - public MyClass4 Prop1 { get; set; } - } - - class MyClass4 - { - public DateTime Prop1 { get; set; } - } - } -} diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonUnsupportedTypeMatcher_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonUnsupportedTypeMatcher_Tests.cs new file mode 100644 index 0000000000..cc31ceca34 --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonUnsupportedTypeMatcher_Tests.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.Json.SystemTextJson; +using Xunit; + +namespace Volo.Abp.Json +{ + public class AbpSystemTextJsonUnsupportedTypeMatcher_Tests : AbpJsonTestBase + { + private readonly AbpSystemTextJsonUnsupportedTypeMatcher _abpSystemTextJsonUnsupportedTypeMatcher; + + public AbpSystemTextJsonUnsupportedTypeMatcher_Tests() + { + _abpSystemTextJsonUnsupportedTypeMatcher = GetRequiredService(); + } + + protected override void AfterAddApplication(IServiceCollection services) + { + services.Configure(options => + { + options.UnsupportedTypes.Add(); + options.UnsupportedTypes.Add(); + options.UnsupportedTypes.Add>(); + }); + } + + [Fact] + public void Match_Test() + { + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(MyClass)).ShouldBeTrue(); + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(byte[])).ShouldBeTrue(); + + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(MyClass2)).ShouldBeFalse(); + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(MyClass3)).ShouldBeFalse(); + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(MyClass4)).ShouldBeFalse(); + + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(string)).ShouldBeFalse(); + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(string[])).ShouldBeFalse(); + + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(Dictionary)).ShouldBeTrue(); + _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(IDictionary)).ShouldBeFalse(); + } + + class MyClass + { + public DateTime Prop1 { get; set; } + } + + class MyClass2 + { + public DateTime Prop1 { get; set; } + } + + class MyClass3 + { + public MyClass4 Prop1 { get; set; } + } + + class MyClass4 + { + public DateTime Prop1 { get; set; } + } + } +} From f7cf19f335b7e6075811c9e6f93c1a3591c5bca7 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 2 Nov 2020 13:29:09 +0800 Subject: [PATCH 14/62] Use IServiceScopeFactory in AbpHybridJsonSerializer. --- .../Volo/Abp/Json/AbpHybridJsonSerializer.cs | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs index 9980689760..7a108fbac0 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs @@ -10,37 +10,46 @@ namespace Volo.Abp.Json { protected AbpJsonOptions Options { get; } - protected IServiceProvider ServiceProvider { get; } + protected IServiceScopeFactory ServiceScopeFactory { get; } - public AbpHybridJsonSerializer(IOptions options, IServiceProvider serviceProvider) + public AbpHybridJsonSerializer(IOptions options, IServiceScopeFactory serviceScopeFactory) { Options = options.Value; - ServiceProvider = serviceProvider; + ServiceScopeFactory = serviceScopeFactory; } public string Serialize(object obj, bool camelCase = true, bool indented = false) { - var provider = GetSerializerProvider(obj.GetType()); - return provider.Serialize(obj, camelCase, indented); + using (var scope = ServiceScopeFactory.CreateScope()) + { + var serializerProvider = GetSerializerProvider(scope.ServiceProvider, obj.GetType()); + return serializerProvider.Serialize(obj, camelCase, indented); + } } public T Deserialize(string jsonString, bool camelCase = true) { - var provider = GetSerializerProvider(typeof(T)); - return provider.Deserialize(jsonString, camelCase); + using (var scope = ServiceScopeFactory.CreateScope()) + { + var serializerProvider = GetSerializerProvider(scope.ServiceProvider, typeof(T)); + return serializerProvider.Deserialize(jsonString, camelCase); + } } public object Deserialize(Type type, string jsonString, bool camelCase = true) { - var provider = GetSerializerProvider(type); - return provider.Deserialize(type, jsonString, camelCase); + using (var scope = ServiceScopeFactory.CreateScope()) + { + var serializerProvider = GetSerializerProvider(scope.ServiceProvider, type); + return serializerProvider.Deserialize(type, jsonString, camelCase); + } } - protected virtual IJsonSerializerProvider GetSerializerProvider(Type type) + protected virtual IJsonSerializerProvider GetSerializerProvider(IServiceProvider serviceProvider, Type type) { foreach (var providerType in Options.Providers.Reverse()) { - var provider = ServiceProvider.GetRequiredService(providerType) as IJsonSerializerProvider; + var provider = serviceProvider.GetRequiredService(providerType) as IJsonSerializerProvider; if (provider.CanHandle(type)) { return provider; From 739ac37333efc6831441f2c6834ad471b7cc6f75 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 2 Nov 2020 15:08:20 +0800 Subject: [PATCH 15/62] Set ReadCommentHandling, AllowTrailingCommas for JsonSerializerOptions --- .../Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs | 4 ++++ .../Volo/Abp/Json/AbpHybridJsonSerializer.cs | 12 ++++++------ .../src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs | 3 +-- .../AbpSystemTextJsonSerializerOptions.cs | 10 +++++----- .../Json/JsonLocalizationDictionaryBuilder.cs | 4 +++- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs index b456204ed8..4b63828997 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs @@ -1,4 +1,5 @@ using System; +using System.Text.Json; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -17,6 +18,9 @@ namespace Volo.Abp.AspNetCore.Mvc.Json public void Configure(JsonOptions options) { + options.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip; + options.JsonSerializerOptions.AllowTrailingCommas = true; + options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService()); options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService()); } diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs index 7a108fbac0..69f27d4b3c 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs @@ -10,17 +10,17 @@ namespace Volo.Abp.Json { protected AbpJsonOptions Options { get; } - protected IServiceScopeFactory ServiceScopeFactory { get; } + protected IHybridServiceScopeFactory HybridServiceScopeFactory { get; } - public AbpHybridJsonSerializer(IOptions options, IServiceScopeFactory serviceScopeFactory) + public AbpHybridJsonSerializer(IOptions options, IHybridServiceScopeFactory hybridServiceScopeFactory) { Options = options.Value; - ServiceScopeFactory = serviceScopeFactory; + HybridServiceScopeFactory = hybridServiceScopeFactory; } public string Serialize(object obj, bool camelCase = true, bool indented = false) { - using (var scope = ServiceScopeFactory.CreateScope()) + using (var scope = HybridServiceScopeFactory.CreateScope()) { var serializerProvider = GetSerializerProvider(scope.ServiceProvider, obj.GetType()); return serializerProvider.Serialize(obj, camelCase, indented); @@ -29,7 +29,7 @@ namespace Volo.Abp.Json public T Deserialize(string jsonString, bool camelCase = true) { - using (var scope = ServiceScopeFactory.CreateScope()) + using (var scope = HybridServiceScopeFactory.CreateScope()) { var serializerProvider = GetSerializerProvider(scope.ServiceProvider, typeof(T)); return serializerProvider.Deserialize(jsonString, camelCase); @@ -38,7 +38,7 @@ namespace Volo.Abp.Json public object Deserialize(Type type, string jsonString, bool camelCase = true) { - using (var scope = ServiceScopeFactory.CreateScope()) + using (var scope = HybridServiceScopeFactory.CreateScope()) { var serializerProvider = GetSerializerProvider(scope.ServiceProvider, type); return serializerProvider.Deserialize(type, jsonString, camelCase); diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index c5f102f9c9..fae54ec08b 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -14,8 +14,7 @@ namespace Volo.Abp.Json public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.TryAddEnumerable(ServiceDescriptor - .Transient, - AbpSystemTextJsonSerializerOptionsSetup>()); + .Transient, AbpSystemTextJsonSerializerOptionsSetup>()); Configure(options => { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs index 17a4ba661a..e2774df58a 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs @@ -11,11 +11,11 @@ namespace Volo.Abp.Json.SystemTextJson public AbpSystemTextJsonSerializerOptions() { - //TODO:Defaults? - //https://github.com/dotnet/aspnetcore/blob/master/src/Mvc/Mvc.Core/src/JsonOptions.cs#L18 - //https://github.com/dotnet/runtime/blob/master/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializerDefaults.cs - - JsonSerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web); + JsonSerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web) + { + ReadCommentHandling = JsonCommentHandling.Skip, + AllowTrailingCommas = true + }; UnsupportedTypes = new TypeList(); } diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs index c13fb643bd..9ccc6738a6 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs @@ -36,7 +36,9 @@ namespace Volo.Abp.Localization.Json var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true, - DictionaryKeyPolicy = JsonNamingPolicy.CamelCase + DictionaryKeyPolicy = JsonNamingPolicy.CamelCase, + ReadCommentHandling = JsonCommentHandling.Skip, + AllowTrailingCommas = true }; jsonFile = JsonSerializer.Deserialize(jsonString, options); From c6ebca1857e9d4113a52480259526ba1ed1c14d1 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 2 Nov 2020 15:50:24 +0300 Subject: [PATCH 16/62] Create a new module inside the solution --- docs/en/CLI.md | 18 +- .../Volo/Abp/Cli/Commands/AddModuleCommand.cs | 29 ++- .../NugetPackageToLocalReferenceConverter.cs | 16 +- .../ProjectNugetPackageAdder.cs | 77 ++++++- .../SolutionFileModifier.cs | 14 +- .../SolutionModuleAdder.cs | 188 +++++++++++++++--- 6 files changed, 285 insertions(+), 57 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 8713bc9019..ccd6a00661 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -159,6 +159,8 @@ abp add-package Volo.Abp.MongoDB Adds a [multi-package application module](Modules/Index) to a solution by finding all packages of the module, finding related projects in the solution and adding each package to the corresponding project in the solution. +It can also create a fresh new module for your solution and add it to your solution. See `--new-template` option. + > A business module generally consists of several packages (because of layering, different database provider options or other reasons). Using `add-module` command dramatically simplifies adding a module to a solution. However, each module may require some additional configurations which is generally indicated in the documentation of the related module. Usage @@ -167,21 +169,29 @@ Usage abp add-module [options] ```` -Example: +Examples: ```bash abp add-module Volo.Blogging ``` -* This example add the Volo.Blogging module to the solution. +* This example adds the `Volo.Blogging` module to the solution. + +```bash +abp add-module ProductManagement --new-template --add-to-solution-file +``` + +* This example creates a fresh new module specialized for your solution (named `ProductManagement`) and adds it to your solution & solution file. + #### Options * `--solution` or `-s`: Specifies the solution (.sln) file path. If not specified, CLI tries to find a .sln file in the current directory. * `--skip-db-migrations`: For EF Core database provider, it automatically adds a new code first migration (`Add-Migration`) and updates the database (`Update-Database`) if necessary. Specify this option to skip this operation. * `-sp` or `--startup-project`: Relative path to the project folder of the startup project. Default value is the current folder. -* `--with-source-code`: Downloads the source code of the module to your solution folder and uses local project references instead of NuGet/NPM packages. -* `--add-to-solution-file`: Adds the downloaded module to your solution file, so you will also see the projects of the module when you open the solution on a IDE. (only available when `--with-source-code` is used.) +* `--new-template`: Creates a fresh new module (speсialized for your solution) and adds it to your solution. +* `--with-source-code`: Downloads the source code of the module to your solution folder and uses local project references instead of NuGet/NPM packages. This options is always `True` if `--new-template` is used. +* `--add-to-solution-file`: Adds the downloaded/created module to your solution file, so you will also see the projects of the module when you open the solution on a IDE. (only available when `--with-source-code` is `True`.) ### get-source diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs index 42a8d76b98..5b4180d989 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs @@ -36,10 +36,12 @@ namespace Volo.Abp.Cli.Commands ); } - var withSourceCode = commandLineArgs.Options.ContainsKey(Options.SourceCode.Long); + var newTemplate = commandLineArgs.Options.ContainsKey(Options.NewTemplate.Long); + var newProTemplate = commandLineArgs.Options.ContainsKey(Options.NewProTemplate.Long); + var withSourceCode = newTemplate || newProTemplate || commandLineArgs.Options.ContainsKey(Options.SourceCode.Long); var addSourceCodeToSolutionFile = withSourceCode && commandLineArgs.Options.ContainsKey("add-to-solution-file"); - var skipDbMigrations = Convert.ToBoolean( + var skipDbMigrations = newTemplate || newProTemplate || Convert.ToBoolean( commandLineArgs.Options.GetOrNull(Options.DbMigrations.Skip) ?? "false"); var solutionFile = GetSolutionFile(commandLineArgs); @@ -57,7 +59,9 @@ namespace Volo.Abp.Cli.Commands version, skipDbMigrations, withSourceCode, - addSourceCodeToSolutionFile + addSourceCodeToSolutionFile, + newTemplate, + newProTemplate ); } @@ -73,10 +77,11 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine(" abp add-module [options]"); sb.AppendLine(""); sb.AppendLine("Options:"); - sb.AppendLine(" --with-source-code Downloads the source code of the module to your solution folder."); - sb.AppendLine(" --add-to-solution-file Adds the downloaded module to your solution file. (only available when --with-source-code used)"); + sb.AppendLine(" --new-template Creates a fresh new module (speсialized for your solution) and adds it your solution."); + sb.AppendLine(" --with-source-code Downloads the source code of the module to your solution folder. (Always True if `--new-template` is used.)"); + sb.AppendLine(" --add-to-solution-file Adds the downloaded/created module to your solution file. (only available when --with-source-code used)"); sb.AppendLine(" -s|--solution Specify the solution file explicitly."); - sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not."); + sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not. (Always True if `--new-template` is used.)"); sb.AppendLine(" -sp|--startup-project Relative path to the project folder of the startup project. Default value is the current folder."); sb.AppendLine(" -v|--version Specify the version of the module. Default is your project's ABP version."); sb.AppendLine(""); @@ -86,6 +91,8 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine(" abp add-module Volo.Blogging -s Acme.BookStore Adds the module to the given solution."); sb.AppendLine(" abp add-module Volo.Blogging -s Acme.BookStore --skip-db-migrations false Adds the module to the given solution but doesn't create a database migration."); sb.AppendLine(@" abp add-module Volo.Blogging -s Acme.BookStore -sp ..\Acme.BookStore.Web\Acme.BookStore.Web.csproj Adds the module to the given solution and specify migration startup project."); + sb.AppendLine(@" abp add-module ProductManagement --new-template -sp ..\Acme.BookStore.Web\Acme.BookStore.Web.csproj Crates a new module named `ProductManagement` and adds it to your solution."); + sb.AppendLine(@" abp add-module ProductManagement --new-template --add-to-solution-file -sp ..\Acme.BookStore.Web\Acme.BookStore.Web.csproj Crates a new module named `ProductManagement`, adds it to your solution & solution file."); sb.AppendLine(""); sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI"); @@ -166,6 +173,16 @@ namespace Volo.Abp.Cli.Commands { public const string Long = "with-source-code"; } + + public class NewTemplate + { + public const string Long = "new-template"; + } + + public class NewProTemplate + { + public const string Long = "new-pro-template"; + } } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs index d342e993d7..8e45378f72 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs @@ -12,19 +12,19 @@ namespace Volo.Abp.Cli.ProjectModification { public class NugetPackageToLocalReferenceConverter : ITransientDependency { - public async Task Convert(ModuleWithMastersInfo module, string solutionFile) + public async Task Convert(ModuleWithMastersInfo module, string solutionFile, string modulePrefix = "Volo.") { var nugetPackageList = GetNugetPackages(module); var modulesFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "modules"); var srcFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "src"); var testFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "test"); - ConvertToLocalReference(modulesFolder, nugetPackageList, "..\\..\\..\\"); - ConvertToLocalReference(srcFolder, nugetPackageList, "..\\..\\modules\\"); - ConvertToLocalReference(testFolder, nugetPackageList, "..\\..\\modules\\", "test"); + ConvertToLocalReference(modulesFolder, nugetPackageList, "..\\..\\..\\", "src", modulePrefix); + ConvertToLocalReference(srcFolder, nugetPackageList, "..\\..\\modules\\", "src", modulePrefix); + ConvertToLocalReference(testFolder, nugetPackageList, "..\\..\\modules\\", "test", modulePrefix); } - private void ConvertToLocalReference(string folder, List nugetPackageList, string localPathPrefix, string sourceFile = "src") + private void ConvertToLocalReference(string folder, List nugetPackageList, string localPathPrefix, string sourceFile, string modulePrefix) { var projectFiles = GetProjectFilesUnder(folder); @@ -35,15 +35,15 @@ namespace Volo.Abp.Cli.ProjectModification doc.Load(StreamHelper.GenerateStreamFromString(content)); - var convertedProject = ProcessReferenceNodes(folder, doc, nugetPackageList, localPathPrefix, sourceFile); + var convertedProject = ProcessReferenceNodes(folder, doc, nugetPackageList, localPathPrefix, sourceFile, modulePrefix); File.WriteAllText(projectFile, convertedProject); } } - private string ProcessReferenceNodes(string folder, XmlDocument doc, List nugetPackageList, string localPathPrefix, string sourceFile = "src") + private string ProcessReferenceNodes(string folder, XmlDocument doc, List nugetPackageList, string localPathPrefix, string sourceFile, string modulePrefix) { - var nodes = doc.SelectNodes("/Project/ItemGroup/PackageReference[starts-with(@Include, 'Volo.')]"); + var nodes = doc.SelectNodes($"/Project/ItemGroup/PackageReference[starts-with(@Include, '{modulePrefix}')]"); if (nodes == null) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs index 5f1e18efbd..de25b11da7 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs @@ -50,7 +50,8 @@ namespace Volo.Abp.Cli.ProjectModification ); } - public Task AddAsync(string projectFile, NugetPackageInfo package, string version = null) + public Task AddAsync(string projectFile, NugetPackageInfo package, string version = null, + bool useDotnetCliToInstall = true) { var projectFileContent = File.ReadAllText(projectFile); @@ -66,21 +67,30 @@ namespace Volo.Abp.Cli.ProjectModification using (DirectoryHelper.ChangeCurrentDirectory(Path.GetDirectoryName(projectFile))) { - Logger.LogInformation($"Installing '{package.Name}' package to the project '{Path.GetFileNameWithoutExtension(projectFile)}'..."); + Logger.LogInformation( + $"Installing '{package.Name}' package to the project '{Path.GetFileNameWithoutExtension(projectFile)}'..."); - var versionOption = version == null ? "" : $" -v {version}"; - - CmdHelper.Run("dotnet", $"add package {package.Name}{versionOption}"); + if (useDotnetCliToInstall) + { + AddUsingDotnetCli(package, version); + } + else + { + AddToCsprojManuallyAsync(projectFile, package, version); + } var moduleFiles = ModuleClassFinder.Find(projectFile, "AbpModule"); if (moduleFiles.Count == 0) { - throw new CliUsageException($"Could not find a class derived from AbpModule in the project {projectFile}"); + throw new CliUsageException( + $"Could not find a class derived from AbpModule in the project {projectFile}"); } if (moduleFiles.Count > 1) { - throw new CliUsageException($"There are multiple classes derived from AbpModule in the project {projectFile}: " + moduleFiles.JoinAsString(", ")); + throw new CliUsageException( + $"There are multiple classes derived from AbpModule in the project {projectFile}: " + + moduleFiles.JoinAsString(", ")); } ModuleClassDependcyAdder.Add(moduleFiles.First(), package.ModuleClass); @@ -91,9 +101,60 @@ namespace Volo.Abp.Cli.ProjectModification return Task.CompletedTask; } + private Task AddUsingDotnetCli(NugetPackageInfo package, string version = null) + { + var versionOption = version == null ? "" : $" -v {version}"; + + CmdHelper.Run("dotnet", $"add package {package.Name}{versionOption}"); + + return Task.CompletedTask; + } + + private Task AddToCsprojManuallyAsync(string projectFile, NugetPackageInfo package, string version = null) + { + var projectFileContent = File.ReadAllText(projectFile); + var doc = new XmlDocument() {PreserveWhitespace = true}; + doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent)); + + var itemGroupNodes = doc.SelectNodes("/Project/ItemGroup"); + XmlNode itemGroupNode = null; + + if (itemGroupNodes == null || itemGroupNodes.Count < 1) + { + var projectNodes = doc.SelectNodes("/Project"); + var projectNode = projectNodes[0]; + + itemGroupNode = doc.CreateElement("ItemGroup"); + projectNode.AppendChild(itemGroupNode); + } + else + { + itemGroupNode = itemGroupNodes[0]; + } + + var packageReferenceNode = doc.CreateElement("PackageReference"); + + var includeAttr = doc.CreateAttribute("Include"); + includeAttr.Value = package.Name; + packageReferenceNode.Attributes.Append(includeAttr); + + if (version != null) + { + var versionAttr = doc.CreateAttribute("Version"); + versionAttr.Value = version; + packageReferenceNode.Attributes.Append(versionAttr); + } + + itemGroupNode.AppendChild(packageReferenceNode); + + File.WriteAllText(projectFile, doc.OuterXml); + + return Task.CompletedTask; + } + private string GetAbpVersionOrNull(string projectFileContent) { - var doc = new XmlDocument() { PreserveWhitespace = true }; + var doc = new XmlDocument() {PreserveWhitespace = true}; doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent)); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs index a24b31e5f1..9eda6efa10 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs @@ -18,6 +18,11 @@ namespace Volo.Abp.Cli.ProjectModification File.WriteAllText(solutionFile, RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine)); } + public async Task AddModuleToSolutionFileAsync(ModuleWithMastersInfo module, string solutionFile) + { + await AddModuleAsync(module, solutionFile); + } + private List RemoveProject(List solutionFileLines, string projectName) { var projectKey = FindProjectKey(solutionFileLines, projectName); @@ -65,12 +70,7 @@ namespace Volo.Abp.Cli.ProjectModification return null; } - public async Task AddModuleToSolutionFileAsync(ModuleWithMastersInfo module, string solutionFile) - { - await AddModule(module, solutionFile); - } - - private async Task AddModule(ModuleWithMastersInfo module, string solutionFile) + private async Task AddModuleAsync(ModuleWithMastersInfo module, string solutionFile) { var srcModuleFolderId = await AddNewFolderAndGetIdOrGetExistingId(solutionFile, module.Name, await AddNewFolderAndGetIdOrGetExistingId(solutionFile, "modules")); var testModuleFolderId = await AddNewFolderAndGetIdOrGetExistingId(solutionFile, module.Name + ".Tests", await AddNewFolderAndGetIdOrGetExistingId(solutionFile, "test")); @@ -128,7 +128,7 @@ namespace Volo.Abp.Cli.ProjectModification { foreach (var masterModule in module.MasterModuleInfos) { - await AddModule(masterModule, solutionFile); + await AddModuleAsync(masterModule, solutionFile); } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index cc563f97cf..3bcdc34bc9 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -1,15 +1,17 @@ using JetBrains.Annotations; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Threading.Tasks; +using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Http; using Volo.Abp.Cli.ProjectBuilding; +using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; using Volo.Abp.Json; @@ -32,6 +34,7 @@ namespace Volo.Abp.Cli.ProjectModification public SolutionFileModifier SolutionFileModifier { get; } public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; } public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; } + public NewCommand NewCommand { get; } public SolutionModuleAdder( IJsonSerializer jsonSerializer, @@ -45,7 +48,8 @@ namespace Volo.Abp.Cli.ProjectModification SourceCodeDownloadService sourceCodeDownloadService, SolutionFileModifier solutionFileModifier, NugetPackageToLocalReferenceConverter nugetPackageToLocalReferenceConverter, - AngularModuleSourceCodeAdder angularModuleSourceCodeAdder) + AngularModuleSourceCodeAdder angularModuleSourceCodeAdder, + NewCommand newCommand) { JsonSerializer = jsonSerializer; ProjectNugetPackageAdder = projectNugetPackageAdder; @@ -59,6 +63,7 @@ namespace Volo.Abp.Cli.ProjectModification SolutionFileModifier = solutionFileModifier; NugetPackageToLocalReferenceConverter = nugetPackageToLocalReferenceConverter; AngularModuleSourceCodeAdder = angularModuleSourceCodeAdder; + NewCommand = newCommand; Logger = NullLogger.Instance; } @@ -69,24 +74,27 @@ namespace Volo.Abp.Cli.ProjectModification string version, bool skipDbMigrations = false, bool withSourceCode = false, - bool addSourceCodeToSolutionFile = false) + bool addSourceCodeToSolutionFile = false, + bool newTemplate = false, + bool newProTemplate = false) { Check.NotNull(solutionFile, nameof(solutionFile)); Check.NotNull(moduleName, nameof(moduleName)); - var module = await FindModuleInfoAsync(moduleName); + var module = await GetModuleInfoAsync(moduleName, newTemplate, newProTemplate); Logger.LogInformation( $"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'"); var projectFiles = ProjectFinder.GetProjectFiles(solutionFile); - await AddNugetAndNpmReferences(module, projectFiles); + await AddNugetAndNpmReferences(module, projectFiles, !(newTemplate || newProTemplate)); - if (withSourceCode) + if (withSourceCode || newTemplate || newProTemplate) { var modulesFolderInSolution = Path.Combine(Path.GetDirectoryName(solutionFile), "modules"); - await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version); + await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version, newTemplate, + newProTemplate); await RemoveUnnecessaryProjectsAsync(Path.GetDirectoryName(solutionFile), module, projectFiles); if (addSourceCodeToSolutionFile) @@ -94,7 +102,15 @@ namespace Volo.Abp.Cli.ProjectModification await SolutionFileModifier.AddModuleToSolutionFileAsync(module, solutionFile); } - await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile); + if (newTemplate || newProTemplate) + { + await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile, $"{module.Name}."); + } + else + { + await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile); + } + await AddAngularSourceCode(modulesFolderInSolution, solutionFile); } else @@ -105,15 +121,17 @@ namespace Volo.Abp.Cli.ProjectModification ModifyDbContext(projectFiles, module, startupProject, skipDbMigrations); } - private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module, string[] projectFiles) + private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module, + string[] projectFiles) { var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name); - var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); + var moduleSolutionFile = + Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); var isProjectTiered = await IsProjectTiered(projectFiles); if (!projectFiles.Any(p => p.EndsWith(".Blazor.csproj"))) { - await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Blazor,isProjectTiered); + await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Blazor, isProjectTiered); } if (!projectFiles.Any(p => p.EndsWith(".Web.csproj"))) @@ -124,15 +142,18 @@ namespace Volo.Abp.Cli.ProjectModification if (!projectFiles.Any(p => p.EndsWith(".MongoDB.csproj"))) { await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.MongoDB, isProjectTiered); + await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".MongoDB.Tests"); } if (!projectFiles.Any(p => p.EndsWith(".EntityFrameworkCore.csproj"))) { await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered); + await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".EntityFrameworkCore.Tests"); } } - private async Task RemoveProjectByTarget(ModuleWithMastersInfo module, string moduleSolutionFile, NuGetPackageTarget target, bool isTieredProject) + private async Task RemoveProjectByTarget(ModuleWithMastersInfo module, string moduleSolutionFile, + NuGetPackageTarget target, bool isTieredProject) { var packages = module.NugetPackages.Where(n => (isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined @@ -152,6 +173,19 @@ namespace Volo.Abp.Cli.ProjectModification } } + private async Task RemoveProjectByPostFix(ModuleWithMastersInfo module, string moduleSolutionFile, string targetFolder, + string postFix) + { + var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), targetFolder); + var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith(postFix)); + await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, Path.GetDirectoryName(projectFolderPath)); + + if (Directory.Exists(projectFolderPath)) + { + Directory.Delete(projectFolderPath, true); + } + } + private async Task AddAngularPackages(string solutionFilePath, ModuleWithMastersInfo module) { var angularPath = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(solutionFilePath)), "angular"); @@ -201,18 +235,26 @@ namespace Volo.Abp.Cli.ProjectModification } private async Task DownloadSourceCodesToSolutionFolder(ModuleWithMastersInfo module, - string modulesFolderInSolution, string version = null) + string modulesFolderInSolution, string version = null, bool newTemplate = false, + bool newProTemplate = false) { var targetModuleFolder = Path.Combine(modulesFolderInSolution, module.Name); - await SourceCodeDownloadService.DownloadAsync( - module.Name, - targetModuleFolder, - version, - null, - null, - null - ); + if (newTemplate || newProTemplate) + { + await CreateNewModuleAsync(module, modulesFolderInSolution, version, newProTemplate); + } + else + { + await SourceCodeDownloadService.DownloadAsync( + module.Name, + targetModuleFolder, + version, + null, + null, + null + ); + } await DeleteAppAndDemoFolderAsync(targetModuleFolder); @@ -227,6 +269,18 @@ namespace Volo.Abp.Cli.ProjectModification } } + private async Task CreateNewModuleAsync(ModuleWithMastersInfo module, string modulesFolderInSolution, + string version, bool newProTemplate = false) + { + var args = new CommandLineArgs("new", module.Name); + + args.Options.Add("t", newProTemplate ? ModuleProTemplate.TemplateName : ModuleTemplate.TemplateName); + args.Options.Add("v", version); + args.Options.Add("o", Path.Combine(modulesFolderInSolution, module.Name)); + + await NewCommand.ExecuteAsync(args); + } + private async Task DeleteAppAndDemoFolderAsync(string targetModuleFolder) { var appFolder = Path.Combine(targetModuleFolder, "app"); @@ -248,7 +302,8 @@ namespace Volo.Abp.Cli.ProjectModification } } - private async Task AddNugetAndNpmReferences(ModuleWithMastersInfo module, string[] projectFiles) + private async Task AddNugetAndNpmReferences(ModuleWithMastersInfo module, string[] projectFiles, + bool useDotnetCliToInstall) { foreach (var nugetPackage in module.NugetPackages) { @@ -264,7 +319,7 @@ namespace Volo.Abp.Cli.ProjectModification continue; } - await ProjectNugetPackageAdder.AddAsync(targetProjectFile, nugetPackage); + await ProjectNugetPackageAdder.AddAsync(targetProjectFile, nugetPackage, null, useDotnetCliToInstall); } var mvcNpmPackages = module.NpmPackages?.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Mvc)) @@ -357,8 +412,14 @@ namespace Volo.Abp.Cli.ProjectModification } } - protected virtual async Task FindModuleInfoAsync(string moduleName) + protected virtual async Task GetModuleInfoAsync(string moduleName, bool newTemplate, + bool newProTemplate = false) { + if (newTemplate || newProTemplate) + { + return await GetEmptyModuleProjectInfoAsync(moduleName, newProTemplate); + } + using (var client = new CliHttpClient()) { var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName; @@ -380,6 +441,85 @@ namespace Volo.Abp.Cli.ProjectModification } } + private async Task GetEmptyModuleProjectInfoAsync(string moduleName, + bool newProTemplate = false) + { + var module = new ModuleWithMastersInfo(); + + module.Name = moduleName; + module.DisplayName = moduleName; + module.EfCoreConfigureMethodName = $"{module.Name}.EntityFrameworkCore:Configure{module.Name}"; + module.MasterModuleInfos = new List(); + + module.NugetPackages = new List + { + new NugetPackageInfo + { + Name = $"{module.Name}.Application", + ModuleClass = $"{module.Name}.{module.Name}ApplicationModule", + Target = NuGetPackageTarget.Application + }, + new NugetPackageInfo + { + Name = $"{module.Name}.Application.Contracts", + ModuleClass = $"{module.Name}.{module.Name}ApplicationContractsModule", + Target = NuGetPackageTarget.ApplicationContracts + }, + new NugetPackageInfo + { + Name = $"{module.Name}.Blazor", + ModuleClass = $"{module.Name}.Blazor.{module.Name}BlazorModule", + Target = NuGetPackageTarget.Blazor + }, + new NugetPackageInfo + { + Name = $"{module.Name}.Domain", + ModuleClass = $"{module.Name}.{module.Name}DomainModule", + Target = NuGetPackageTarget.Domain + }, + new NugetPackageInfo + { + Name = $"{module.Name}.Domain.Shared", + ModuleClass = $"{module.Name}.{module.Name}DomainSharedModule", + Target = NuGetPackageTarget.DomainShared + }, + new NugetPackageInfo + { + Name = $"{module.Name}.EntityFrameworkCore", + ModuleClass = $"{module.Name}.EntityFrameworkCore.{module.Name}EntityFrameworkCoreModule", + Target = NuGetPackageTarget.EntityFrameworkCore + }, + new NugetPackageInfo + { + Name = $"{module.Name}.HttpApi", + ModuleClass = $"{module.Name}.{module.Name}HttpApiModule", + Target = NuGetPackageTarget.HttpApi + }, + new NugetPackageInfo + { + Name = $"{module.Name}.HttpApi.Client", + ModuleClass = $"{module.Name}.{module.Name}HttpApiClientModule", + Target = NuGetPackageTarget.HttpApiClient + }, + new NugetPackageInfo + { + Name = $"{module.Name}.MongoDB", + ModuleClass = $"{module.Name}.MongoDB.{module.Name}MongoDbModule", + Target = NuGetPackageTarget.MongoDB + }, + new NugetPackageInfo + { + Name = $"{module.Name}.Web", + ModuleClass = $"{module.Name}.Web.{module.Name}WebModule", + Target = NuGetPackageTarget.Web + }, + }; + + module.NpmPackages = new List(); + + return module; + } + protected virtual async Task IsProjectTiered(string[] projectFiles) { return projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath) From 9d9d778ef11418d5de70eb5a871c7edc648b21df Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 3 Nov 2020 12:11:51 +0300 Subject: [PATCH 17/62] Remove merge of resourcemapping.clean with defaults --- npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js b/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js index b20a6efa7d..ff22d3cd53 100644 --- a/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js +++ b/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js @@ -64,13 +64,7 @@ extendObject(defaultSettings.aliases, resourcemapping.aliases); resourcemapping.aliases = defaultSettings.aliases; - if (!resourcemapping.clean) { - resourcemapping.clean = []; - } - - for (var i = 0; i < defaultSettings.clean.length; ++i) { - resourcemapping.clean.push(defaultSettings.clean[i]); - } + resourcemapping.clean = resourcemapping.clean || defaultSettings.clean; return resourcemapping; } From 4564d3e6d5255a84d5e9fa2016f4db8f4eebfa41 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 3 Nov 2020 14:15:53 +0300 Subject: [PATCH 18/62] bundle command initial implementation. --- .../BundleContributer.cs | 18 ++ .../BundleContributer.cs | 20 ++ .../WebAssembly/BundleContributer.cs | 18 ++ .../Volo.Abp.BlazoriseUI/BundleContributer.cs | 21 ++ .../Volo/Abp/Cli/AbpCliCoreModule.cs | 1 + .../Volo/Abp/Cli/Bundling/BundleDefinition.cs | 10 + .../Abp/Cli/Bundling/BundlingException.cs | 12 + .../Volo/Abp/Cli/Bundling/BundlingService.cs | 224 ++++++++++++++++++ .../Volo/Abp/Cli/Bundling/IBundlingService.cs | 9 + .../Volo/Abp/Cli/Commands/BundleCommand.cs | 74 ++++++ .../Volo/Abp/Bundling/IBundleContributer.cs | 12 + .../WebAssembly/BundleContributer.cs | 18 ++ 12 files changed, 437 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs create mode 100644 framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleDefinition.cs create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingException.cs create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/IBundlingService.cs create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs create mode 100644 framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs new file mode 100644 index 0000000000..90b45c2215 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Volo.Abp.Bundling; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme +{ + public class BundleContributer : IBundleContributer + { + public void AddScripts(List scripts) + { + + } + + public void AddStyles(List styles) + { + styles.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/libs/abp/css/theme.css"); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs new file mode 100644 index 0000000000..0c8e70429f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using Volo.Abp.Bundling; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming +{ + public class BundleContributer : IBundleContributer + { + public void AddScripts(List scripts) + { + + } + + public void AddStyles(List styles) + { + styles.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/bootstrap/css/bootstrap.css"); + styles.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/css/all.css"); + styles.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/css/flag-icon.css"); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs new file mode 100644 index 0000000000..4d65f03e4e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Volo.Abp.Bundling; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + public class BundleContributer : IBundleContributer + { + public void AddScripts(List scripts) + { + scripts.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly/libs/abp/js/abp.js"); + } + + public void AddStyles(List styles) + { + + } + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs b/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs new file mode 100644 index 0000000000..10e35c5e10 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using Volo.Abp.Bundling; + +namespace Volo.Abp.BlazoriseUI +{ + public class BundleContributer : IBundleContributer + { + public void AddScripts(List scripts) + { + scripts.AddIfNotContains("_content/Blazorise/blazorise.js"); + scripts.AddIfNotContains("_content/Blazorise.Bootstrap/blazorise.bootstrap.js"); + } + + public void AddStyles(List styles) + { + styles.AddIfNotContains("_content/Blazorise/blazorise.css"); + styles.AddIfNotContains("_content/Blazorise.Bootstrap/blazorise.bootstrap.css"); + styles.AddIfNotContains("_content/Blazorise.Snackbar/blazorise.snackbar.css"); + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs index 29238a3e35..d4d1d1d22e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs @@ -37,6 +37,7 @@ namespace Volo.Abp.Cli options.Commands["switch-to-nightly"] = typeof(SwitchToNightlyCommand); options.Commands["translate"] = typeof(TranslateCommand); options.Commands["build"] = typeof(BuildCommand); + options.Commands["bundle"] = typeof(BundleCommand); }); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleDefinition.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleDefinition.cs new file mode 100644 index 0000000000..fef5e3d5d2 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleDefinition.cs @@ -0,0 +1,10 @@ +using System; + +namespace Volo.Abp.Cli.Bundling +{ + internal class BundleDefinition + { + public int Level { get; set; } + public Type BundleContributerType { get; set; } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingException.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingException.cs new file mode 100644 index 0000000000..31f40a2cd7 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingException.cs @@ -0,0 +1,12 @@ +using System; + +namespace Volo.Abp.Cli.Bundling +{ + public class BundlingException : Exception + { + public BundlingException(string message) : base(message) + { + + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs new file mode 100644 index 0000000000..f2f8e24a3c --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs @@ -0,0 +1,224 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using Volo.Abp.Bundling; +using Volo.Abp.Cli.Build; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Cli.Bundling +{ + public class BundlingService : IBundlingService, ITransientDependency + { + const string StylePlaceholderStart = ""; + const string StylePlaceholderEnd = ""; + const string ScriptPlaceholderStart = ""; + const string ScriptPlaceholderEnd = ""; + const string SupportedWebAssemblyProjectType = "Microsoft.NET.Sdk.BlazorWebAssembly"; + + protected IDotNetProjectBuilder DotNetProjectBuilder { get; set; } + protected ILogger Logger { get; set; } + + public async Task BundleAsync(string directory, bool forceBuild) + { + var projectFiles = Directory.GetFiles(directory, "*.csproj"); + if (!projectFiles.Any()) + { + throw new BundlingException("No project file found in the directory"); + } + + var projectFilePath = projectFiles[0]; + + if (forceBuild) + { + var projects = new List() + { + new DotNetProjectInfo(string.Empty, projectFilePath, true) + }; + Logger.LogInformation("Build starting..."); + DotNetProjectBuilder.Build(projects, string.Empty); + Logger.LogInformation("Build completed..."); + } + + var frameworkVersion = GetTargetFrameworkVersion(projectFilePath); + var assemblyFilePath = GetAssemblyFilePath(directory, frameworkVersion, Path.GetFileNameWithoutExtension(projectFilePath)); + var startupModule = GetStartupModule(assemblyFilePath); + + var bundleDefinitions = new List(); + FindBundleContributersRecursively(startupModule, 0, bundleDefinitions); + bundleDefinitions = bundleDefinitions.OrderByDescending(t => t.Level).ToList(); + + var styleDefinitons = GenerateStyleDefinitions(bundleDefinitions); + var scriptDefinitions = GenerateScriptDefinitions(bundleDefinitions); + + await UpdateDependenciesInHtmlFileAsync(directory, styleDefinitons, scriptDefinitions); + } + + protected virtual async Task UpdateDependenciesInHtmlFileAsync(string directory, string styleDefinitions, string scriptDefinitions) + { + var htmlFilePath = Path.Combine(directory, "wwwroot", "index.html"); + if (!File.Exists(htmlFilePath)) + { + throw new BundlingException($"index.html file could not be found in the following path:{htmlFilePath}"); + } + + Encoding fileEncoding; + string content; + using (var reader = new StreamReader(htmlFilePath, true)) + { + fileEncoding = reader.CurrentEncoding; + content = await reader.ReadToEndAsync(); + } + + content = UpdatePlaceholders(content, StylePlaceholderStart, StylePlaceholderEnd, styleDefinitions); + content = UpdatePlaceholders(content, ScriptPlaceholderStart, ScriptPlaceholderEnd, scriptDefinitions); + + using var writer = new StreamWriter(htmlFilePath, false, fileEncoding); + await writer.WriteAsync(content); + await writer.FlushAsync(); + } + + private string UpdatePlaceholders(string content, string placeholderStart, string placeholderEnd, string definitions) + { + var placeholderStartIndex = content.IndexOf(placeholderStart); + var placeholderEndIndex = content.IndexOf(placeholderEnd); + var updatedContent = content.Remove(placeholderStartIndex, (placeholderEndIndex + placeholderEnd.Length) - placeholderStartIndex); + return updatedContent.Insert(placeholderStartIndex, definitions); + } + + private string GenerateStyleDefinitions(List bundleDefinitions) + { + var styles = new List(); + foreach (var bundleDefinition in bundleDefinitions) + { + var contributer = CreateContributerInstance(bundleDefinition.BundleContributerType); + contributer.AddStyles(styles); + } + + var builder = new StringBuilder(); + builder.AppendLine($"{StylePlaceholderStart}"); + foreach (var style in styles) + { + builder.AppendLine($"\t"); + } + builder.AppendLine($"\t{StylePlaceholderEnd}"); + + return builder.ToString(); + } + + private string GenerateScriptDefinitions(List bundleDefinitions) + { + var scripts = new List + { + "_framework/blazor.webassembly.js" + }; + foreach (var bundleDefinition in bundleDefinitions) + { + var contributer = CreateContributerInstance(bundleDefinition.BundleContributerType); + contributer.AddScripts(scripts); + } + + var builder = new StringBuilder(); + builder.AppendLine($"{ScriptPlaceholderStart}"); + foreach (var script in scripts) + { + builder.AppendLine($"\t"); + } + builder.AppendLine($"\t{ScriptPlaceholderEnd}"); + + return builder.ToString(); + } + + private IBundleContributer CreateContributerInstance(Type bundleContributerType) + { + var instance = Activator.CreateInstance(bundleContributerType); + return instance.As(); + } + + private void FindBundleContributersRecursively(Type module, int level, List bundleDefinitions) + { + var dependencyDescriptors = module + .GetCustomAttributes() + .OfType(); + + var bundleContributer = module.Assembly.GetTypes().SingleOrDefault(t => t.IsAssignableTo()); + if (bundleContributer != null) + { + var definition = bundleDefinitions.SingleOrDefault(t => t.BundleContributerType == bundleContributer); + if (definition != null) + { + if (definition.Level < level) + { + definition.Level = level; + } + } + else + { + bundleDefinitions.Add(new BundleDefinition + { + Level = level, + BundleContributerType = bundleContributer + }); + } + } + + foreach (var descriptor in dependencyDescriptors) + { + foreach (var dependedModuleType in descriptor.GetDependedTypes()) + { + FindBundleContributersRecursively(dependedModuleType, level + 1, bundleDefinitions); + } + } + } + + private Type GetStartupModule(string assemblyPath) + { + var assembly = Assembly.LoadFrom(assemblyPath); + return assembly.GetTypes().SingleOrDefault(IsAbpModule); + + static bool IsAbpModule(Type type) + { + var typeInfo = type.GetTypeInfo(); + + return + typeInfo.IsClass && + !typeInfo.IsAbstract && + !typeInfo.IsGenericType && + typeof(IAbpModule).GetTypeInfo().IsAssignableFrom(type); + } + } + + private string GetFrameworkFolderPath(string projectDirectory, string frameworkVersion) + { + return Path.Combine(projectDirectory, "bin", "Debug", frameworkVersion, "wwwroot", "_framework"); ; + } + + private string GetTargetFrameworkVersion(string projectFilePath) + { + var document = new XmlDocument(); + document.Load(projectFilePath); + var sdk = document.DocumentElement.GetAttribute("Sdk"); + if (sdk == SupportedWebAssemblyProjectType) + { + var frameworkVersion = document.SelectSingleNode("//TargetFramework").InnerText; + return frameworkVersion; + } + else + { + throw new BundlingException($"Unsupported project type. Project type must be {SupportedWebAssemblyProjectType}."); + } + } + + private string GetAssemblyFilePath(string directory, string frameworkVersion, string projectFileName) + { + var outputDirectory = GetFrameworkFolderPath(directory, frameworkVersion); + return Path.Combine(outputDirectory, projectFileName + ".dll"); + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/IBundlingService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/IBundlingService.cs new file mode 100644 index 0000000000..817735ee20 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/IBundlingService.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.Cli.Bundling +{ + public interface IBundlingService + { + Task BundleAsync(string directory, bool forceBuild); + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs new file mode 100644 index 0000000000..e3ca0397a8 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs @@ -0,0 +1,74 @@ +using Microsoft.Extensions.Logging; +using System; +using System.IO; +using System.Threading.Tasks; +using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Bundling; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Cli.Commands +{ + public class BundleCommand : IConsoleCommand, ITransientDependency + { + public ILogger Logger { get; set; } + + public IBundlingService BundlingService { get; set; } + + + public async Task ExecuteAsync(CommandLineArgs commandLineArgs) + { + var workingDirectoryArg = commandLineArgs.Options.GetOrNull( + Options.WorkingDirectory.Short, + Options.WorkingDirectory.Long + ); + + var workingDirectory = workingDirectoryArg ?? Directory.GetCurrentDirectory(); + + var forceBuild = commandLineArgs.Options.ContainsKey(Options.ForceBuild.Short) || + commandLineArgs.Options.ContainsKey(Options.ForceBuild.Long); + + if (!Directory.Exists(workingDirectory)) + { + throw new CliUsageException( + "Specified directory does not exist." + + Environment.NewLine + Environment.NewLine + + GetUsageInfo() + ); + } + + try + { + await BundlingService.BundleAsync(workingDirectory, forceBuild); + } + catch (BundlingException ex) + { + Logger.LogError(ex.Message); + } + } + + public string GetShortDescription() + { + throw new NotImplementedException(); + } + + public string GetUsageInfo() + { + throw new NotImplementedException(); + } + + public static class Options + { + public static class WorkingDirectory + { + public const string Short = "wd"; + public const string Long = "working-directory"; + } + + public static class ForceBuild + { + public const string Short = "f"; + public const string Long = "force"; + } + } + } +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs new file mode 100644 index 0000000000..c9201fe007 --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Abp.Bundling +{ + public interface IBundleContributer + { + void AddScripts(List scripts); + void AddStyles(List styles); + } +} diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs new file mode 100644 index 0000000000..da4c01512a --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Bundling; + +namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly +{ + public class BundleContributer : IBundleContributer + { + public void AddScripts(List scripts) + { + scripts.AddIfNotContains("_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"); + } + + public void AddStyles(List styles) + { + } + } +} From 9dc4b403f72d63e0b6adb3cfe424773d4b56581c Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 3 Nov 2020 12:18:47 +0100 Subject: [PATCH 19/62] AbpBlazorMessageLocalizerHelper moved to Volo.Abp.AspNetCore.Components.WebAssembly project --- .../WebAssembly/AbpBlazorMessageLocalizerHelper.cs | 6 +++--- framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs | 3 +++ .../src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs | 6 +++--- .../Pages/Identity/RoleManagement.razor | 3 +-- .../Pages/Identity/UserManagement.razor | 5 ++--- 5 files changed, 12 insertions(+), 11 deletions(-) rename modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs => framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorMessageLocalizerHelper.cs (84%) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorMessageLocalizerHelper.cs similarity index 84% rename from modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs rename to framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorMessageLocalizerHelper.cs index 5d858843b8..e47e7f611c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorMessageLocalizerHelper.cs @@ -3,13 +3,13 @@ using System.Linq; using JetBrains.Annotations; using Microsoft.Extensions.Localization; -namespace Volo.Abp.Identity.Blazor +namespace Volo.Abp.AspNetCore.Components.WebAssembly { - public class AbpIdentityBlazorMessageLocalizerHelper + public class AbpBlazorMessageLocalizerHelper { private readonly IStringLocalizer stringLocalizer; - public AbpIdentityBlazorMessageLocalizerHelper(IStringLocalizer stringLocalizer) + public AbpBlazorMessageLocalizerHelper(IStringLocalizer stringLocalizer) { this.stringLocalizer = stringLocalizer; } diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs index 716f36b1ea..7ab435a34e 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs @@ -1,4 +1,5 @@ using Blazorise; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Components.WebAssembly; using Volo.Abp.Modularity; @@ -18,6 +19,8 @@ namespace Volo.Abp.BlazoriseUI { context.Services .AddBlazorise(); + + context.Services.AddSingleton(typeof(AbpBlazorMessageLocalizerHelper<>)); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs index 7f11267132..7cdeb0295b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; using Volo.Abp.AutoMapper; +using Volo.Abp.BlazoriseUI; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.Blazor; using Volo.Abp.UI.Navigation; @@ -10,7 +11,8 @@ namespace Volo.Abp.Identity.Blazor [DependsOn( typeof(AbpIdentityHttpApiClientModule), typeof(AbpAutoMapperModule), - typeof(AbpPermissionManagementBlazorModule) + typeof(AbpPermissionManagementBlazorModule), + typeof(AbpBlazoriseUIModule) )] public class AbpIdentityBlazorModule : AbpModule { @@ -32,8 +34,6 @@ namespace Volo.Abp.Identity.Blazor { options.AdditionalAssemblies.Add(typeof(AbpIdentityBlazorModule).Assembly); }); - - context.Services.AddSingleton(typeof(AbpIdentityBlazorMessageLocalizerHelper<>)); } } } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index 946fae64c3..f1b0a53a5e 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -6,10 +6,9 @@ @using Volo.Abp.PermissionManagement.Blazor.Components @using Microsoft.Extensions.Localization @using Volo.Abp.Identity.Localization -@inject AbpIdentityBlazorMessageLocalizerHelper LH +@inject AbpBlazorMessageLocalizerHelper LH @inherits AbpCrudPageBase - @* ************************* PAGE HEADER ************************* *@ diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 36db98f78e..1db58e4440 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -1,14 +1,13 @@ @page "/identity/users" -@attribute [Authorize(IdentityPermissions.Users.Default)] +@attribute [Authorize( IdentityPermissions.Users.Default )] @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Forms @using Volo.Abp.PermissionManagement.Blazor.Components @using Microsoft.Extensions.Localization @using Volo.Abp.Identity.Localization +@inject AbpBlazorMessageLocalizerHelper LH @inherits AbpCrudPageBase - -@inject AbpIdentityBlazorMessageLocalizerHelper LH @* ************************* PAGE HEADER ************************* *@ From 01d71954744f7c1a7048cd6a13ccea00bd753567 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 3 Nov 2020 12:19:30 +0100 Subject: [PATCH 20/62] Validation on user edit modal used an invalid model --- .../Pages/Identity/UserManagement.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 1db58e4440..8f8d872fc6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -186,7 +186,7 @@ - + From a62fb7be317213ce8d62686bdf12ea48ce8695e0 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Tue, 3 Nov 2020 12:21:30 +0100 Subject: [PATCH 21/62] Validation for Tenant create and edit modals --- .../TenantCreateOrUpdateDtoBase.cs | 3 +- .../TenantManagement/TenantManagement.razor | 175 +++++++++++------- .../TenantManagement.razor.cs | 32 ++-- 3 files changed, 127 insertions(+), 83 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs index 9f047af2fd..eb5b71ba05 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs @@ -8,11 +8,12 @@ namespace Volo.Abp.TenantManagement { [Required] [DynamicStringLength(typeof(TenantConsts), nameof(TenantConsts.MaxNameLength))] + [Display(Name = "TenantName")] public string Name { get; set; } public TenantCreateOrUpdateDtoBase() : base(false) { - + } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index 81c61ae9fa..1d62dc6be0 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -1,15 +1,15 @@ @page "/tenant-management/tenants" -@attribute [Authorize(TenantManagementPermissions.Tenants.Default)] +@attribute [Authorize( TenantManagementPermissions.Tenants.Default )] @using Microsoft.AspNetCore.Authorization @using Volo.Abp.FeatureManagement.Blazor.Components @using Microsoft.AspNetCore.Components.Forms - +@using Volo.Abp.TenantManagement.Localization +@inject AbpBlazorMessageLocalizerHelper LH @inherits AbpCrudPageBase - @* ************************* PAGE HEADER ************************* *@ -

@L["Tenants"]

+ @L["Tenants"]
@if (HasCreatePermission) @@ -65,31 +65,52 @@ { - - - @L["NewTenant"] - - - - - - @L["TenantName"] - - - - @L["DisplayName:AdminEmailAddress"] - - - - @L["DisplayName:AdminPassword"] - - - - - - - - + +
+ + @L["NewTenant"] + + + + + + + + @L["TenantName"] + + + + + + + + + + @L["DisplayName:AdminEmailAddress"] + + + + + + + + + + @L["DisplayName:AdminPassword"] + + + + + + + + + + + + + +
} @@ -99,23 +120,31 @@ { - - - @L["Edit"] - - - - - - @L["TenantName"] - - - - - - - - + +
+ + @L["Edit"] + + + + + + + @L["TenantName"] + + + + + + + + + + + + + +
} @@ -125,30 +154,36 @@ { - - - @L["ConnectionStrings"] - - - - - - @L["DisplayName:DefaultConnectionString"] - - - @if (!TenantInfo.UseSharedDatabase) - { - - @L["DisplayName:DefaultConnectionString"] - - - } - - - - - - + +
+ + @L["ConnectionStrings"] + + + + + + + @L["DisplayName:DefaultConnectionString"] + + + + @if (!TenantInfo.UseSharedDatabase) + { + + + @L["DisplayName:DefaultConnectionString"] + + + + } + + + + + + +
} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index e5fcc9c4a3..ad33b68e5c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Blazorise; using Microsoft.AspNetCore.Authorization; @@ -20,9 +21,10 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement protected FeatureManagementModal FeatureManagementModal; protected Modal ManageConnectionStringModal; + protected Validations ManageConnectionStringValidations; protected TenantInfoModel TenantInfo; - + public TenantManagement() { LocalizationResource = typeof(AbpTenantManagementResource); @@ -36,7 +38,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement TenantInfo = new TenantInfoModel(); } - + protected async override Task SetPermissionsAsync() { await base.SetPermissionsAsync(); @@ -47,6 +49,8 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement protected virtual async Task OpenEditConnectionStringModalAsync(Guid id) { + ManageConnectionStringValidations.ClearAll(); + var tenantConnectionString = await AppService.GetDefaultConnectionStringAsync(id); TenantInfo = new TenantInfoModel @@ -67,18 +71,21 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement protected virtual async Task UpdateConnectionStringAsync() { - await CheckPolicyAsync(ManageConnectionStringsPolicyName); - - if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace()) + if (ManageConnectionStringValidations.ValidateAll()) { - await AppService.DeleteDefaultConnectionStringAsync(TenantInfo.Id); + await CheckPolicyAsync(ManageConnectionStringsPolicyName); + + if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace()) + { + await AppService.DeleteDefaultConnectionStringAsync(TenantInfo.Id); + } + else + { + await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString); + } + + ManageConnectionStringModal.Hide(); } - else - { - await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString); - } - - ManageConnectionStringModal.Hide(); } protected override string GetDeleteConfirmationMessage(TenantDto entity) @@ -93,6 +100,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement public bool UseSharedDatabase { get; set; } + [Required] public string DefaultConnectionString { get; set; } } } \ No newline at end of file From 9a0f435f97586611199b39d81b9d9405608dbd36 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 3 Nov 2020 14:34:35 +0300 Subject: [PATCH 22/62] usage info and short description added. --- .../Volo/Abp/Cli/Commands/BundleCommand.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs index e3ca0397a8..eaf0b33116 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Logging; using System; using System.IO; +using System.Text; using System.Threading.Tasks; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Bundling; @@ -48,12 +49,26 @@ namespace Volo.Abp.Cli.Commands public string GetShortDescription() { - throw new NotImplementedException(); + return "Bundles all third party styles and scripts required by modules and updates index.html file."; } public string GetUsageInfo() { - throw new NotImplementedException(); + var sb = new StringBuilder(); + + sb.AppendLine(""); + sb.AppendLine("Usage:"); + sb.AppendLine(""); + sb.AppendLine(" abp bundle [options]"); + sb.AppendLine(""); + sb.AppendLine("Options:"); + sb.AppendLine(""); + sb.AppendLine("-wd|--working-directory (default: empty)"); + sb.AppendLine("-f | --force (default: false)"); + sb.AppendLine(""); + sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI"); + + return sb.ToString(); } public static class Options From 06e37d703b8ac3494c900c3ff8a0584588100202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 3 Nov 2020 15:44:31 +0300 Subject: [PATCH 23/62] Fix global-styles path --- .../wwwroot/{libs => }/global-styles.css | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/{libs => }/global-styles.css (100%) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/global-styles.css b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/global-styles.css similarity index 100% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/libs/global-styles.css rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/wwwroot/global-styles.css From 3c70e366fbd25ef5e214c75ecb7c8e499bc4d94e Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 21:07:17 +0800 Subject: [PATCH 24/62] Use IServiceScopeFactory in AbpHybridJsonSerializer. --- .../Volo/Abp/Json/AbpHybridJsonSerializer.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs index 69f27d4b3c..560d6baa36 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs @@ -10,17 +10,17 @@ namespace Volo.Abp.Json { protected AbpJsonOptions Options { get; } - protected IHybridServiceScopeFactory HybridServiceScopeFactory { get; } + protected IServiceScopeFactory ServiceScopeFactory { get; } - public AbpHybridJsonSerializer(IOptions options, IHybridServiceScopeFactory hybridServiceScopeFactory) + public AbpHybridJsonSerializer(IOptions options, IServiceScopeFactory serviceScopeFactory) { Options = options.Value; - HybridServiceScopeFactory = hybridServiceScopeFactory; + ServiceScopeFactory = serviceScopeFactory; } public string Serialize(object obj, bool camelCase = true, bool indented = false) { - using (var scope = HybridServiceScopeFactory.CreateScope()) + using (var scope = ServiceScopeFactory.CreateScope()) { var serializerProvider = GetSerializerProvider(scope.ServiceProvider, obj.GetType()); return serializerProvider.Serialize(obj, camelCase, indented); @@ -29,7 +29,7 @@ namespace Volo.Abp.Json public T Deserialize(string jsonString, bool camelCase = true) { - using (var scope = HybridServiceScopeFactory.CreateScope()) + using (var scope = ServiceScopeFactory.CreateScope()) { var serializerProvider = GetSerializerProvider(scope.ServiceProvider, typeof(T)); return serializerProvider.Deserialize(jsonString, camelCase); @@ -38,7 +38,7 @@ namespace Volo.Abp.Json public object Deserialize(Type type, string jsonString, bool camelCase = true) { - using (var scope = HybridServiceScopeFactory.CreateScope()) + using (var scope = ServiceScopeFactory.CreateScope()) { var serializerProvider = GetSerializerProvider(scope.ServiceProvider, type); return serializerProvider.Deserialize(type, jsonString, camelCase); From 2c5dc8041ca0465e3b30fc0c19f5f3d6dade4d7d Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 3 Nov 2020 16:17:16 +0300 Subject: [PATCH 25/62] Add fs-extra, glob, micromatch + Remove rimraf --- npm/packs/aspnetcore.mvc.ui/package-lock.json | 2857 +++++++++++++++++ npm/packs/aspnetcore.mvc.ui/package.json | 6 +- 2 files changed, 2861 insertions(+), 2 deletions(-) create mode 100644 npm/packs/aspnetcore.mvc.ui/package-lock.json diff --git a/npm/packs/aspnetcore.mvc.ui/package-lock.json b/npm/packs/aspnetcore.mvc.ui/package-lock.json new file mode 100644 index 0000000000..18c07aa98d --- /dev/null +++ b/npm/packs/aspnetcore.mvc.ui/package-lock.json @@ -0,0 +1,2857 @@ +{ + "name": "@abp/aspnetcore.mvc.ui", + "version": "3.3.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "requires": { + "async-done": "^1.2.2" + } + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-props": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", + "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "requires": { + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "requires": { + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extend-object/-/extend-object-1.0.0.tgz", + "integrity": "sha1-QlFPhAFdE1bK9Rh5ad+yvBvaCCM=" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "requires": { + "glogg": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "just-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "requires": { + "once": "^1.3.2" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "requires": { + "value-or-function": "^3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "requires": { + "sver-compat": "^1.5.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "requires": { + "through2": "^2.0.3" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yargs": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", + "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "5.0.0-security.0" + } + }, + "yargs-parser": { + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } + } +} diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index b3870a1e1a..8668ad5543 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -7,10 +7,12 @@ "dependencies": { "ansi-colors": "^4.1.1", "extend-object": "^1.0.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", "gulp": "^4.0.2", "merge-stream": "^2.0.0", - "path": "^0.12.7", - "rimraf": "^3.0.2" + "micromatch": "^4.0.2", + "path": "^0.12.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } From 2d5561f717f2136fcc6a7664b58c9ded2965d18c Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 3 Nov 2020 16:32:31 +0300 Subject: [PATCH 26/62] Enable complex glob pattern matching on clean --- .../aspnetcore.mvc.ui/gulp/copy-resources.js | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js b/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js index ff22d3cd53..03b9dc1e4a 100644 --- a/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js +++ b/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js @@ -4,7 +4,9 @@ var gulp = require("gulp"), merge = require("merge-stream"), - rimraf = require("rimraf"), + fse = require('fs-extra'), + glob = require('glob'), + micromatch = require('micromatch'), path = require("path"), extendObject = require('extend-object'); @@ -41,13 +43,42 @@ return undefined; } } - - function cleanFiles() { - if (resourceMapping.clean) { - for (var i = 0; i < resourceMapping.clean.length; i++) { - rimraf.sync(replaceAliases(resourceMapping.clean[i]) + '/**/*', { force: true }); - } - } + + function cleanDirsAndFiles(patterns) { + const { dirs, files } = findDirsAndFiles(patterns); + + files.forEach(file => fse.unlinkSync(file)); + dirs.forEach(dir => { + try { + fse.rmdirSync(dir); + } catch (_) {} + }); + } + + function findDirsAndFiles(patterns) { + const dirs = []; + const files = []; + + const list = glob.sync('**/*', { dot: true }); + + const matches = micromatch(list, normalizeGlob(patterns), { + dot: true, + }); + + matches.forEach(match => { + if (!fse.pathExistsSync(match)) return; + + (fse.statSync(match).isDirectory() ? dirs : files).push(match); + }); + + return { dirs, files }; + } + + function normalizeGlob(patterns) { + return patterns.map(pattern => { + const prefix = /\*$/.test(pattern) ? '' : '/**'; + return replaceAliases(pattern).replace(/(!?)\.\//, '$1') + prefix; + }); } function normalizeResourceMapping(resourcemapping) { @@ -106,7 +137,7 @@ rootPath = path; resourceMapping = normalizeResourceMapping(buildResourceMapping(rootPath)); - cleanFiles(); + cleanDirsAndFiles(resourceMapping.clean); var tasks = []; From 166c4cadba279aff46df32912d0b5b23429354bf Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 3 Nov 2020 16:45:42 +0300 Subject: [PATCH 27/62] add optional additional properties collection to the bundle definition. --- .../BundleContributer.cs | 14 ++++-- .../BundleContributer.cs | 18 +++++-- .../WebAssembly/BundleContributer.cs | 15 ++++-- .../Volo.Abp.BlazoriseUI/BundleContributer.cs | 30 +++++++++--- ...eDefinition.cs => BundleTypeDefinition.cs} | 2 +- .../Volo/Abp/Cli/Bundling/BundlingService.cs | 47 ++++++++++++++----- .../Volo/Abp/Bundling/BundleDefinition.cs | 16 +++++++ .../Volo/Abp/Bundling/IBundleContributer.cs | 8 ++-- .../WebAssembly/BundleContributer.cs | 18 +++++-- 9 files changed, 127 insertions(+), 41 deletions(-) rename framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/{BundleDefinition.cs => BundleTypeDefinition.cs} (80%) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BundleDefinition.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs index 90b45c2215..81ff6044b2 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs @@ -5,14 +5,22 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme { public class BundleContributer : IBundleContributer { - public void AddScripts(List scripts) + public void AddScripts(List scriptDefinitions) { } - public void AddStyles(List styles) + public void AddStyles(List styleDefinitions) { - styles.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/libs/abp/css/theme.css"); + var styles = new string[] + { + "_content/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/libs/abp/css/theme.css", + }; + + foreach (var style in styles) + { + styleDefinitions.AddIfNotContains((item) => item.Source == style, () => new BundleDefinition(style)); + } } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs index 0c8e70429f..fa46219c06 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs @@ -5,16 +5,24 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming { public class BundleContributer : IBundleContributer { - public void AddScripts(List scripts) + public void AddScripts(List scriptDefinitions) { } - public void AddStyles(List styles) + public void AddStyles(List styleDefinitions) { - styles.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/bootstrap/css/bootstrap.css"); - styles.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/css/all.css"); - styles.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/css/flag-icon.css"); + var styles = new string[] + { + "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/bootstrap/css/bootstrap.min.css", + "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/css/all.css", + "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/css/flag-icon.css" + }; + + foreach (var style in styles) + { + styleDefinitions.AddIfNotContains((item) => item.Source == style, () => new BundleDefinition(style)); + } } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs index 4d65f03e4e..99fcde7b97 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs @@ -5,14 +5,21 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly { public class BundleContributer : IBundleContributer { - public void AddScripts(List scripts) + public void AddScripts(List scriptDefinitions) { - scripts.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly/libs/abp/js/abp.js"); + var scripts = new string[] + { + "_content/Volo.Abp.AspNetCore.Components.WebAssembly/libs/abp/js/abp.js", + }; + + foreach (var script in scripts) + { + scriptDefinitions.AddIfNotContains((item) => item.Source == script, () => new BundleDefinition(script)); + } } - public void AddStyles(List styles) + public void AddStyles(List styleDefinitions) { - } } } diff --git a/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs b/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs index 10e35c5e10..2b182f465f 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs @@ -5,17 +5,33 @@ namespace Volo.Abp.BlazoriseUI { public class BundleContributer : IBundleContributer { - public void AddScripts(List scripts) + public void AddScripts(List scriptDefinitions) { - scripts.AddIfNotContains("_content/Blazorise/blazorise.js"); - scripts.AddIfNotContains("_content/Blazorise.Bootstrap/blazorise.bootstrap.js"); + var scripts = new string[] + { + "_content/Blazorise/blazorise.js", + "_content/Blazorise.Bootstrap/blazorise.bootstrap.js" + }; + + foreach (var script in scripts) + { + scriptDefinitions.AddIfNotContains((item) => item.Source == script, () => new BundleDefinition(script)); + } } - public void AddStyles(List styles) + public void AddStyles(List styleDefinitions) { - styles.AddIfNotContains("_content/Blazorise/blazorise.css"); - styles.AddIfNotContains("_content/Blazorise.Bootstrap/blazorise.bootstrap.css"); - styles.AddIfNotContains("_content/Blazorise.Snackbar/blazorise.snackbar.css"); + var styles = new string[] + { + "_content/Blazorise/blazorise.css", + "_content/Blazorise.Bootstrap/blazorise.bootstrap.css", + "_content/Blazorise.Snackbar/blazorise.snackbar.css" + }; + + foreach (var style in styles) + { + styleDefinitions.AddIfNotContains((item) => item.Source == style, () => new BundleDefinition(style)); + } } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleDefinition.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleTypeDefinition.cs similarity index 80% rename from framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleDefinition.cs rename to framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleTypeDefinition.cs index fef5e3d5d2..5fc9ecadeb 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleDefinition.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleTypeDefinition.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.Cli.Bundling { - internal class BundleDefinition + internal class BundleTypeDefinition { public int Level { get; set; } public Type BundleContributerType { get; set; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs index f2f8e24a3c..8610b3da4d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Logging; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.IO; @@ -50,7 +51,7 @@ namespace Volo.Abp.Cli.Bundling var assemblyFilePath = GetAssemblyFilePath(directory, frameworkVersion, Path.GetFileNameWithoutExtension(projectFilePath)); var startupModule = GetStartupModule(assemblyFilePath); - var bundleDefinitions = new List(); + var bundleDefinitions = new List(); FindBundleContributersRecursively(startupModule, 0, bundleDefinitions); bundleDefinitions = bundleDefinitions.OrderByDescending(t => t.Level).ToList(); @@ -92,9 +93,9 @@ namespace Volo.Abp.Cli.Bundling return updatedContent.Insert(placeholderStartIndex, definitions); } - private string GenerateStyleDefinitions(List bundleDefinitions) + private string GenerateStyleDefinitions(List bundleDefinitions) { - var styles = new List(); + var styles = new List(); foreach (var bundleDefinition in bundleDefinitions) { var contributer = CreateContributerInstance(bundleDefinition.BundleContributerType); @@ -105,18 +106,30 @@ namespace Volo.Abp.Cli.Bundling builder.AppendLine($"{StylePlaceholderStart}"); foreach (var style in styles) { - builder.AppendLine($"\t"); + if (style.AdditionalProperties != null && style.AdditionalProperties.Any()) + { + builder.Append($"\t"); + } + else + { + builder.AppendLine($"\t"); + } } builder.AppendLine($"\t{StylePlaceholderEnd}"); return builder.ToString(); } - private string GenerateScriptDefinitions(List bundleDefinitions) + private string GenerateScriptDefinitions(List bundleDefinitions) { - var scripts = new List + var scripts = new List { - "_framework/blazor.webassembly.js" + new BundleDefinition("_framework/blazor.webassembly.js") }; foreach (var bundleDefinition in bundleDefinitions) { @@ -128,7 +141,19 @@ namespace Volo.Abp.Cli.Bundling builder.AppendLine($"{ScriptPlaceholderStart}"); foreach (var script in scripts) { - builder.AppendLine($"\t"); + if (script.AdditionalProperties != null && script.AdditionalProperties.Any()) + { + builder.Append($"\t"); + } + else + { + builder.AppendLine($"\t"); + } } builder.AppendLine($"\t{ScriptPlaceholderEnd}"); @@ -141,7 +166,7 @@ namespace Volo.Abp.Cli.Bundling return instance.As(); } - private void FindBundleContributersRecursively(Type module, int level, List bundleDefinitions) + private void FindBundleContributersRecursively(Type module, int level, List bundleDefinitions) { var dependencyDescriptors = module .GetCustomAttributes() @@ -160,7 +185,7 @@ namespace Volo.Abp.Cli.Bundling } else { - bundleDefinitions.Add(new BundleDefinition + bundleDefinitions.Add(new BundleTypeDefinition { Level = level, BundleContributerType = bundleContributer diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BundleDefinition.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BundleDefinition.cs new file mode 100644 index 0000000000..2bc82a86ef --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BundleDefinition.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; + +namespace Volo.Abp.Bundling +{ + public class BundleDefinition + { + public string Source { get; set; } + public Dictionary AdditionalProperties { get; set; } + + public BundleDefinition(string source) + { + Source = source; + AdditionalProperties = new Dictionary(); + } + } +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs index c9201fe007..2bf8dfff85 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs @@ -1,12 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; namespace Volo.Abp.Bundling { public interface IBundleContributer { - void AddScripts(List scripts); - void AddStyles(List styles); + void AddScripts(List scriptDefinitions); + void AddStyles(List styleDefinitions); } } diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs index da4c01512a..b7932866ad 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs @@ -1,18 +1,26 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Volo.Abp.Bundling; namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly { public class BundleContributer : IBundleContributer { - public void AddScripts(List scripts) + public void AddScripts(List scriptDefinitions) { - scripts.AddIfNotContains("_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"); + var scripts = new string[] + { + "_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js", + }; + + foreach (var script in scripts) + { + scriptDefinitions.AddIfNotContains((item) => item.Source == script, () => new BundleDefinition(script)); + } } - public void AddStyles(List styles) + public void AddStyles(List styleDefinitions) { + } } } From fb4f46d4d43ce9f91212d05918ea9f2145ee6308 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 21:56:56 +0800 Subject: [PATCH 28/62] Make JsonConverter's Write method simple. --- ...ctionStringValueItemSourceJsonConverter.cs | 10 +-------- .../StringValueTypeJsonConverter.cs | 18 +-------------- .../ValueValidatorJsonConverter.cs | 22 +------------------ 3 files changed, 3 insertions(+), 47 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs index 0812fcc59f..feaa68ccc6 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs @@ -26,15 +26,7 @@ namespace Volo.Abp.FeatureManagement.JsonConverters public override void Write(Utf8JsonWriter writer, ISelectionStringValueItemSource value, JsonSerializerOptions options) { var newOptions = JsonSerializerOptionsHelper.Create(options, this); - - if (value.GetType() == typeof(StaticSelectionStringValueItemSource)) - { - JsonSerializer.Serialize(writer, (StaticSelectionStringValueItemSource)value, newOptions); - } - else - { - throw new JsonException("Unknown ISelectionStringValueItemSource type!"); - } + JsonSerializer.Serialize(writer, value, value.GetType(), newOptions); } } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs index 9ca037d001..32748231da 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs @@ -25,23 +25,7 @@ namespace Volo.Abp.FeatureManagement.JsonConverters public override void Write(Utf8JsonWriter writer, IStringValueType value, JsonSerializerOptions options) { var newOptions = JsonSerializerOptionsHelper.Create(options, this); - - if (value.GetType() == typeof(FreeTextStringValueType)) - { - JsonSerializer.Serialize(writer, (FreeTextStringValueType)value, newOptions); - } - else if (value.GetType() == typeof(SelectionStringValueType)) - { - JsonSerializer.Serialize(writer, (SelectionStringValueType)value, newOptions); - } - else if (value.GetType() == typeof(ToggleStringValueType)) - { - JsonSerializer.Serialize(writer, (ToggleStringValueType)value, newOptions); - } - else - { - throw new JsonException("Unknown IStringValueType type!"); - } + JsonSerializer.Serialize(writer, value, value.GetType(), newOptions); } } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs index 9d94cf8b55..7276a36923 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs @@ -33,27 +33,7 @@ namespace Volo.Abp.FeatureManagement.JsonConverters public override void Write(Utf8JsonWriter writer, IValueValidator value, JsonSerializerOptions options) { var newOptions = JsonSerializerOptionsHelper.Create(options, this); - - if (value.GetType() == typeof(AlwaysValidValueValidator)) - { - JsonSerializer.Serialize(writer, (AlwaysValidValueValidator)value, newOptions); - } - else if (value.GetType() == typeof(BooleanValueValidator)) - { - JsonSerializer.Serialize(writer, (BooleanValueValidator)value, newOptions); - } - else if (value.GetType() == typeof(NumericValueValidator)) - { - JsonSerializer.Serialize(writer, (NumericValueValidator)value, newOptions); - } - else if (value.GetType() == typeof(StringValueValidator)) - { - JsonSerializer.Serialize(writer, (StringValueValidator)value, newOptions); - } - else - { - throw new JsonException("Unknown IValueValidator type!"); - } + JsonSerializer.Serialize(writer, value, value.GetType(), newOptions); } protected virtual IValueValidator CreateValueValidatorByName(string name) From 3d69c73d0a0eeea5b633d1e9e79c694907748ba0 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 3 Nov 2020 17:02:12 +0300 Subject: [PATCH 29/62] Document how glob patterns work when cleaning --- docs/en/UI/AspNetCore/Client-Side-Package-Management.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/en/UI/AspNetCore/Client-Side-Package-Management.md b/docs/en/UI/AspNetCore/Client-Side-Package-Management.md index 77dee7a383..645200a363 100644 --- a/docs/en/UI/AspNetCore/Client-Side-Package-Management.md +++ b/docs/en/UI/AspNetCore/Client-Side-Package-Management.md @@ -76,7 +76,8 @@ module.exports = { "@libs": "./wwwroot/libs" }, clean: [ - "@libs" + "@libs", + "!@libs/**/foo.txt" ], mappings: { @@ -85,7 +86,7 @@ module.exports = { ```` * **aliases** section defines standard aliases (placeholders) that can be used in the mapping paths. **@node_modules** and **@libs** are required (by the standard packages), you can define your own aliases to reduce duplication. -* **clean** section is a list of folders to clean before copying the files. +* **clean** section is a list of folders to clean before copying the files. Glob matching and negation is enabled, so you can fine-tune what to delete and keep. The example above will clean everything inside `./wwwroot/libs`, but keep any `foo.txt` files. * **mappings** section is a list of mappings of files/folders to copy. This example does not copy any resource itself, but depends on a standard package. An example mapping configuration is shown below: From 3f46a6f272c795ba141dcfc60d5db7d0ff395081 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 3 Nov 2020 17:31:40 +0300 Subject: [PATCH 30/62] add German translations... volosoft/volo#2282 --- .../Account/Localization/Resources/de-DE.json | 14 ++ .../Admin/Localization/Resources/de-DE.json | 199 ++++++++++++++++++ .../Base/Localization/Resources/de-DE.json | 33 +++ .../Localization/Resources/de-DE.json | 35 +++ .../Localization/Resources/de-DE.json | 90 ++++++++ .../Www/Localization/Resources/de-DE.json | 189 +++++++++++++++++ .../UI/MultiTenancy/Localization/de-DE.json | 12 ++ .../Localization/Resources/AbpDdd/de-DE.json | 6 + .../Volo/Abp/Emailing/Localization/de-DE.json | 25 +++ .../ExceptionHandling/Localization/de-DE.json | 23 ++ .../Volo/Abp/Ldap/Localization/de-DE.json | 15 ++ .../Resources/AbpLocalization/de-DE.json | 7 + .../Volo/Abp/Timing/Localization/de-DE.json | 7 + .../Localization/Resource/de-DE.json | 6 + .../Localization/Resources/AbpUi/de-DE.json | 52 +++++ .../Abp/Validation/Localization/de-DE.json | 34 +++ .../Mvc/Localization/Resource/de-DE.json | 7 + .../Volo/Abp/Emailing/Localization/de-DE.json | 6 + .../Volo/Abp/Http/Localization/de-DE.json | 6 + .../Base/CountryNames/de-DE.json | 7 + .../TestResources/Base/Validation/de-DE.json | 7 + .../TestResources/Source/de-DE.json | 11 + .../TestResources/SourceExt/de-DE.json | 6 + .../TextTemplating/Localization/de-DE.json | 7 + .../Account/Localization/Resources/de-DE.json | 62 ++++++ .../Database/Localization/de-DE.json | 6 + .../Localization/Resources/de-DE.json | 58 +++++ .../CmsKit/Localization/Resources/de-DE.json | 22 ++ .../Resources/VoloDocs/Web/de-DE.json | 10 + .../Docs/ApplicationContracts/de-DE.json | 59 ++++++ .../Volo/Docs/Localization/Domain/de-DE.json | 39 ++++ .../Localization/Domain/de-DE.json | 10 + .../Volo/Abp/Identity/Localization/de-DE.json | 120 +++++++++++ .../Localization/Resources/de-DE.json | 14 ++ .../Localization/Domain/de-DE.json | 10 + .../Resources/AbpSettingManagement/de-DE.json | 7 + .../Localization/Resources/de-DE.json | 23 ++ .../Localization/Resources/de-DE.json | 14 ++ .../Localization/MyProjectName/de-DE.json | 8 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameIdentityServerModule.cs | 1 + .../MyProjectNameWebModule.cs | 1 + .../Localization/MyProjectName/de-DE.json | 7 + 44 files changed, 1277 insertions(+) create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/de-DE.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/de-DE.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de-DE.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de-DE.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de-DE.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de-DE.json create mode 100644 framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de-DE.json create mode 100644 framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de-DE.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de-DE.json create mode 100644 framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/de-DE.json create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de-DE.json create mode 100644 framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/de-DE.json create mode 100644 framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de-DE.json create mode 100644 framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de-DE.json create mode 100644 framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de-DE.json create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de-DE.json create mode 100644 framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de-DE.json create mode 100644 framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/de-DE.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de-DE.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de-DE.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de-DE.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de-DE.json create mode 100644 framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/de-DE.json create mode 100644 modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json create mode 100644 modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/de-DE.json create mode 100644 modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de-DE.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json create mode 100644 modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de-DE.json create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de-DE.json create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de-DE.json create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de-DE.json create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de-DE.json create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de-DE.json create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json create mode 100644 modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/de-DE.json create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..b0418f082f --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/de-DE.json @@ -0,0 +1,14 @@ +{ + "culture": "de-DE", + "texts": { + "Account": "ABP Benutzerkonto - Anmeldung & Registrierung | ABP.IO", + "Welcome": "Willkommen", + "UseOneOfTheFollowingLinksToContinue": "Nutzen Sie einen der nachfolgenden Links um fortzusetzen", + "FrameworkHomePage": "Framework Website", + "FrameworkDocumentation": "Framework Dokumentation", + "OfficialBlog": "Offizieller Blog", + "CommercialHomePage": "Commercial Website", + "CommercialSupportWebSite": "Commercial Support-Website", + "CommunityWebSite": "ABP Community-Website" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..60725c437b --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/de-DE.json @@ -0,0 +1,199 @@ +{ + "culture": "de-DE", + "texts": { + "Permission:Organizations": "Organisationen", + "Permission:Manage": "Organisationen verwalten", + "Permission:DiscountRequests": "Rabattanfragen", + "Permission:DiscountManage": "Rabattanfragen verwalten", + "Permission:Disable": "Deaktivieren", + "Permission:Enable": "Aktivieren", + "Permission:EnableSendEmail": "E-Mail-Senden aktivieren", + "Permission:SendEmail": "E-Mail senden", + "Permission:NpmPackages": "NPM-Pakete", + "Permission:NugetPackages": "Nuget-Pakete", + "Permission:Maintenance": "Wartung", + "Permission:Maintain": "Warten", + "Permission:ClearCaches": "Caches leeren", + "Permission:Modules": "Module", + "Permission:Packages": "Pakete", + "Permission:Edit": "Bearbeiten", + "Permission:Delete": "Löschen", + "Permission:Create": "Erstellen", + "Permission:Accounting": "Abrechnung", + "Permission:Accounting:Quotation": "Angebot", + "Permission:Accounting:Invoice": "Rechnung", + "Menu:Organizations": "Organisationen", + "Menu:Accounting": "Abrechnung", + "Menu:Packages": "Pakete", + "Menu:DiscountRequests": "Rabattanfragen", + "NpmPackageDeletionWarningMessage": "Dieses NPM-Paket wird entfernt. Bestätigen Sie das?", + "NugetPackageDeletionWarningMessage": "Dieses Nuget-Paket wird entfernt. Bestägiten Sie das?", + "ModuleDeletionWarningMessage": "Dieses Modul wird entfernt. Bestätigen Sie das?", + "Name": "Name", + "DisplayName": "Anzeigename", + "ShortDescription": "Kurzbeschreibung", + "NameFilter": "Name", + "CreationTime": "Erstellungszeitpunkt", + "IsPro": "Ist pro", + "ShowOnModuleList": "In Modulliste anzeigen", + "EfCoreConfigureMethodName": "Methodenname konfigurieren", + "IsProFilter": "Ist pro", + "ApplicationType": "Anwendungstyp", + "Target": "Ziel", + "TargetFilter": "Ziel", + "ModuleClass": "Modulklasse", + "NugetPackageTarget.DomainShared": "Gemeinsame Domain", + "NugetPackageTarget.Domain": "Domain", + "NugetPackageTarget.Application": "Anwendung", + "NugetPackageTarget.ApplicationContracts": "Anwedungsverträge", + "NugetPackageTarget.HttpApi": "HTTP-API", + "NugetPackageTarget.HttpApiClient": "HTTP-API-Client", + "NugetPackageTarget.Web": "Web", + "NugetPackageTarget.EntityFrameworkCore": "DeleteAllEntityFramework Core", + "NugetPackageTarget.MongoDB": "MongoDB", + "Edit": "Bearbeiten", + "Delete": "Löschen", + "Refresh": "Aktualisieren", + "NpmPackages": "NPM-Pakete", + "NugetPackages": "Nuget-Pakete", + "NpmPackageCount": "NPM-Paketanzahl", + "NugetPackageCount": "Nuget-Paketanzahl", + "Module": "Module", + "ModuleInfo": "Modulinfo", + "CreateANpmPackage": "Erstellen Sie ein NPM Paket", + "CreateAModule": "Erstellen Sie in Modul", + "CreateANugetPackage": "Erstellen Sei ein Nuget-Paket", + "AddNew": "Neu hinzufügen", + "PackageAlreadyExist{0}": "\"{0}\" Paket ist bereits hinzugefügt.", + "ModuleAlreadyExist{0}": "\"{0}\" Modul ist bereits hinzugefügt.", + "ClearCache": "Cache leeren", + "SuccessfullyCleared": "Erfolgreich geleert", + "Menu:NpmPackages": "NPM-Pakete", + "Menu:Modules": "Module", + "Menu:Maintenance": "Wartung", + "Menu:NugetPackages": "Nuget-Pakete", + "CreateAnOrganization": "Erstellen Sie eine Organisation", + "Organizations": "Organisationen", + "LongName": "Lange Name", + "LicenseType": "Lizenztyp", + "MissingLicenseTypeField": "Das Feld Lizenztyp ist erforderlich!", + "LicenseStartTime": "Startzeit der Lizenz", + "LicenseEndTime": "Endzeit der Lizenz", + "AllowedDeveloperCount": "Zulässige Entwickleranzahl", + "UserNameOrEmailAddress": "Benutzername oder E-Mail-Adresse", + "AddOwner": "Besitzer hinzufügen", + "UserName": "Benutzername", + "Email": "E-Mail", + "Developers": "Entwickler", + "AddDeveloper": "Entwickler hinzufügen", + "Create": "Erstellen", + "UserNotFound": "Benutzer nicht gefunden", + "{0}WillBeRemovedFromDevelopers": "{0} wird von den Entwicklern entfernt. Bestätigen Sie das?", + "{0}WillBeRemovedFromOwners": "{0} wird von den Besitzern entfernt. Bestätigen Sie das?", + "Computers": "Computer", + "UniqueComputerId": "Eindeutig Computer-ID", + "LastSeenDate": "Zuletzt gesehenes Datum", + "{0}Computer{1}WillBeRemovedFromRecords": "Computer von {0} ({1}) wird aus den Datensätzen entfernt", + "OrganizationDeletionWarningMessage": "Organisation wird gelöscht", + "DeletingLastOwnerWarningMessage": "Eine Organisation muss zumindest einen Besitzer aufweisen! Daher können Sie diesen Besitzer nicht entfernen", + "This{0}AlreadyExistInThisOrganization": "Dies {0} existiert bereits in dieser Organisation", + "AreYouSureYouWantToDeleteAllComputers": "Sind Sie sicher, dass Sie alle Computer löschen möchten?", + "DeleteAll": "Alles Löschen", + "DoYouWantToCreateNewUser": "Möchten Sie einen neuen Benutzer erstellen?", + "MasterModules": "Master-Module", + "OrganizationName": "Organisationsname", + "CreationDate": "Erstellungsdatum", + "LicenseStartDate": "Startdatum der Lizenz", + "LicenseEndDate": "Enddatum der Lizenz", + "OrganizationNamePlaceholder": "Organisationsname...", + "TotalQuestionCountPlaceholder": "Gesamtzahl der Fragen...", + "RemainingQuestionCountPlaceholder": "Anzahl verbleibender Fragen...", + "LicenseTypePlaceholder": "Lizenztyp...", + "CreationDatePlaceholder": "Erstellungsdatum...", + "LicenseStartDatePlaceholder": "Startdatum der Lizenz...", + "LicenseEndDatePlaceholder": "Enddatum der Lizenz...", + "UsernameOrEmail": "Benutzername oder E-Mail-Adresse", + "UsernameOrEmailPlaceholder": "Benutzername oder E-Mail-Adresse...", + "Member": "Mitglied", + "PurchaseOrderNo": "Bestellnummer", + "QuotationDate": "Angebotsdatum", + "CompanyName": "Firmenname", + "CompanyAddress": "Firmenanschrift", + "Price": "Preis", + "DiscountText": "Rabatttext", + "DiscountQuantity": "Rabattmenge", + "DiscountPrice": "Rabattpreis", + "Quotation": "Angebot", + "ExtraText": "Zusätzlicher Text", + "ExtraAmount": "Zusätzliche Menge", + "DownloadQuotation": "Angebot herunterladen", + "Invoice": "Rechnung", + "TaxNumber": "Steuernummer", + "InvoiceNumber": "Rechnungsnummer", + "InvoiceDate": "Rechnungsdatum", + "InvoiceNote": "Rechnungsnotiz", + "Quantity": "Menge", + "AddProduct": "Produkt hinzufügen", + "AddProductWarning": "Sie müssen ein Produkt hinzufügen!", + "TotalPrice": "Gesamtpreis", + "Generate": "Generieren", + "MissingQuantityField": "Das Feld Menge ist erforderlich!", + "MissingPriceField": "Das Feld Preis ist erforderlich!", + "CodeUsageStatus": "Status", + "Country": "Land", + "DeveloperCount": "Entwickleranzahl", + "RequestCode": "Anfrage-Code", + "WebSite": "Webseite", + "GithubUsername": "Github Benutzername", + "PhoneNumber": "Telefonnummer", + "ProjectDescription": "Projektbeschreibung", + "Referrer": "Referrer", + "DiscountRequests": "Rabattanfrage", + "Copylink": "Link kopieren", + "Disable": "Deaktivieren", + "Enable": "Aktivieren", + "EnableSendEmail": "E-Mail-Senden aktivieren", + "SendEmail": "E-Mail senden", + "SuccessfullyDisabled": "Erfolgreich deaktiviert", + "SuccessfullyEnabled": "Erfolgreich aktiviert", + "EmailSent": "E-Mail gesendet", + "SuccessfullySent": "Erfolgreich gesendet", + "SuccessfullyDeleted": "Erfolgreich gelöscht", + "DiscountRequestDeletionWarningMessage": "Rabattanfrage wird gelöscht", + "BusinessType": "Unternehmensart", + "TotalQuestionCount": "Gesamtzahl der Fragen", + "RemainingQuestionCount": "Anzahl verbleibender Fragen", + "TotalQuestionMustBeGreaterWarningMessage": "TotalQuestionCount muss größer sein als RemainingQuestionCount !", + "QuestionCountsMustBeGreaterThanZero": "TotalQuestionCount und RemainingQuestionCount müssen Null oder größer als Null sein !", + "UnlimitedQuestionCount": "Unbegrenzte Anzahl von Fragen", + "Notes": "Anmerkungen", + "Menu:Community": "Community", + "Menu:Articles": "Beiträge", + "Wait": "Warten", + "Approve": "Genehmigen", + "Reject": "Ablehnen", + "Details": "Details", + "Url": "URL", + "Title": "Titel", + "ContentSource": "Inhaltsquelle", + "Status": "Status", + "ReadArticle": "Beitrag lesen", + "ArticleHasBeenWaiting": "Beitrag hat gewartet", + "ArticleHasBeenApproved": "Beitrag wurde genehmigt", + "ArticleHasBeenRejected": "Beitrag wurde abgelehnt", + "Permission:Community": "Community", + "Permission:CommunityArticle": "Beitrag", + "Link": "Link", + "Enum:ContentSource:0": "Github", + "Enum:ContentSource:1": "Extern", + "Enum:Status:0": "Wartend", + "Enum:Status:1": "Abgelehnt", + "Enum:Status:2": "Genehmigt", + "Summary": "Zusammenfassung", + "AuthorName": "Autorenname", + "CoverImage": "Titelbild", + "RemoveCacheConfirmationMessage": "Sind Sie sicher, dass Sie den Cache für den Artikel \"{0}\" entfernen wollen?", + "SuccessfullyRemoved": "Erfolgreich geleert", + "RemoveCache": "Cache entfernen" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..77e1b2090a --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de-DE.json @@ -0,0 +1,33 @@ +{ + "culture": "de-DE", + "texts": { + "Volo.AbpIo.Domain:010004": "Maximale Mitgliederanzahl erreicht!", + "Volo.AbpIo.Domain:010005": "Miximale Besizeranzahl erreicht!", + "Volo.AbpIo.Domain:010006": "Dieser Benutzer ist bereits ein Besitzer in dieser Organisation!", + "Volo.AbpIo.Domain:010007": "Dieser Benutzer ist bereits ein Entwickler in dieser Organisation!", + "Volo.AbpIo.Domain:010008": "Die zulässige Entwickleranzahl darf nicht geringer sein als die aktuelle Entwickleranzahl!", + "Volo.AbpIo.Domain:010009": "Die zulässige Entwickleranzahl darf nicht kleiner als 0 sein!", + "Volo.AbpIo.Domain:010010": "Die maximale Anzahl der Mac-Adressen ist überschritten!", + "Volo.AbpIo.Domain:010011": "Die persönliche Lizenz kann nicht mehr als 1 Entwickler haben!", + "Volo.AbpIo.Domain:010012": "Die Lizenz kann nicht einen Monat nach Ablauf der Lizenz verlängert werden!", + "Volo.AbpIo.Domain:020001": "Dieses NPM-Paket konnte nicht gelöscht werden, da \"{NugetPackages}\" Nuget-Pakete von diesem Paket abhängig sind.", + "Volo.AbpIo.Domain:020002": "Dieses NPM-Paket konnte nicht gelöscht werden, da \"{Module}\" Module dieses Paket verwenden.", + "Volo.AbpIo.Domain:020003": "Dieses NPM-Paket konnte nicht gelöscht werden, da \"{Module}\" Module dieses Paket verwenden und \"{NugetPackages}\" Nuget-Pakete von diesem Paket abhängig sind.", + "Volo.AbpIo.Domain:020004": "Dieses Nuget-Paket konnte nicht gelöscht werden, da \"{Module}\" Module dieses Paket verwenden.", + "WantToLearn?": "Wollen Sie sich einlernen?", + "ReadyToGetStarted?": "Bereit anzufangen?", + "JoinOurCommunity": "Tritt unserer Community bei", + "GetStartedUpper": "LOSLEGEN", + "ForkMeOnGitHub": "Fork me on GitHub", + "Features": "Features", + "GetStarted": "Loslegen", + "Documents": "Unterlagen", + "Community": "Community", + "ContributionGuide": "Leitfaden für Mitwirkende", + "Blog": "Blog", + "Commercial": "Commercial", + "MyAccount": "Mein Benutzerkonto", + "SeeDocuments": "Siehe Unterlagen", + "Samples": "Beispiele" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..ddc493e63b --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de-DE.json @@ -0,0 +1,35 @@ +{ + "culture": "de-DE", + "texts": { + "OrganizationManagement": "Organisationsverwaltung", + "OrganizationList": "Organisationsauflistung", + "Volo.AbpIo.Commercial:010003": "Sie sind der Besitzer dieser Organisation!", + "OrganizationNotFoundMessage": "Keine Organisation gefunden!", + "DeveloperCount": "Zugeordnete / Gesamte Entwickler", + "QuestionCount": "Verbleibende / Gesamte Fragen", + "Unlimited": "Unbegrenzt", + "Owners": "Besitzer", + "AddMember": "Mitglied hinzufügen", + "AddOwner": "Besizer hinzufügen", + "AddDeveloper": "Entwickler hinzufügen", + "UserName": "Benutzername", + "Name": "Name", + "EmailAddress": "E-Mail-Adress", + "Developers": "Entwickler", + "LicenseType": "Lizenztyp", + "Manage": "Verwalten", + "StartDate": "Startdatum", + "EndDate": "Enddatum", + "Modules": "Module", + "LicenseExtendMessage": "Ihr Lizenzenddatum wird auf {0} verlängert", + "LicenseUpgradeMessage": "Ihre Lizenz wird auf {0} aktualisiert", + "LicenseAddDeveloperMessage": "{0} Entwickler zu Ihrer Lizenz hinzugefügt", + "Volo.AbpIo.Commercial:010004": "Kann den angegebenen Benutzer nicht finden! Der Benutzer muss sich bereits registriert haben.", + "MyOrganizations": "Meine Organisationen", + "ApiKey": "API-Schlüssel", + "UserNameNotFound": "Es gibt keinen Benutzer mit dem Benutzernamen {0}", + "SuccessfullyAddedToNewsletter": "Vielen Dank, dass Sie unseren Newsletter abonniert haben!", + "MyProfile": "Mein Profil", + "EmailNotValid": "Bitte geben Sie eine gültige E-Mail-Adresse ein." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..cc8d76012c --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de-DE.json @@ -0,0 +1,90 @@ +{ + "culture": "de-DE", + "texts": { + "Permission:CommunityArticle": "Community-Beitrag", + "Permission:Edit": "Bearbeiten", + "Waiting": "Wartend", + "Approved": "Genehmigt", + "Rejected": "Abgelehnt", + "Wait": "Warten", + "Approve": "Genehmigen", + "Reject": "Ablehnen", + "ReadArticle": "Beitrag lesen", + "Status": "Status", + "ContentSource": "Inhaltsquelle", + "Details": "Details", + "Url": "URL", + "Title": "Titel", + "CreationTime": "Erstellungszeitpunkt", + "Save": "Speichern", + "SameUrlAlreadyExist": "Dieselbe URL existiert bereits, wenn Sie diesen Beitrag hinzufügen möchten, sollten Sie die URL ändern!", + "UrlIsNotValid": "Der URL ist nicht korrekt.", + "UrlNotFound": "URL nicht gefunden.", + "UrlContentNotFound": "URL-Inhalt nicht gefunden", + "Summary": "Zusammenfassung", + "MostRead": "Meist gelesen", + "Latest": "Neueste", + "ContributeAbpCommunity": "Tragen Sie zur ABP Community bei", + "SubmitYourArticle": "Reichen Sie Ihren Beitrag ein", + "ContributionGuide": "Leitfaden für Mitwirkende", + "BugReport": "Fehler melden", + "SeeAllArticles": "Alle Beiträge anzeigen", + "WelcomeToABPCommunity!": "Willkommen in der ABP Community!", + "MyProfile": "Mein Profil", + "MyOrganizations": "Meine Organisationen", + "EmailNotValid": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", + "FeatureRequest": "Featureanfrage", + "CreateArticleTitleInfo": "Titel des Beitrags, der in der Beitragsliste angezeigt werden soll.", + "CreateArticleUrlInfo": "Original GitHub-/externe URL des Beitrags.", + "CreateArticleSummaryInfo": "Eine kurze Zusammenfassung des Beitrags, der in der Beitragsliste angezeigt werden soll.", + "CreateArticleCoverInfo": "Fügen Sie zum Erstellen eines effektiven Beitrags ein Titelbild hinzu. Laden Sie Bilder mit einem Seitenverhältnis von 16: 9 hoch, um die beste Ansicht zu erhalten.", + "ThisExtensionIsNotAllowed": "Diese Erweiterung ist nicht zulässig.", + "TheFileIsTooLarge": "Die Datei ist zu groß.", + "GoToTheArticle": "Gehe zum Beitrag", + "Contribute": "Beitragen", + "OverallProgress": "Gesamtfortschritt", + "Done": "Ferig", + "Open": "Offen", + "Closed": "Geschlossen", + "LatestQuestionOnThe": "Letzte Frage zum", + "Stackoverflow": "Stackoverflow", + "Votes": "Stimmen", + "Answer": "Antworten", + "Views": "Ansichten", + "Answered": "Beantwortet", + "WaitingForYourAnswer": "Warten auf Ihre Antwort", + "Asked": "gefragt", + "AllQuestions": "Alle Fragen", + "NextVersion": "Nächste Version", + "MilestoneErrorMessage": "Die aktuellen Meilensteindetails konnten von Github nicht abgerufen werden.", + "QuestionItemErrorMessage": "Die neuesten Fragendetails konnten von Stackoverflow nicht abgerufen werden.", + "Oops": "Hoppla!", + "CreateArticleSuccessMessage": "Der Beitrag wurde erfolgreich eingereicht. Er wird nach einer Überprüfung durch den Site-Administrator veröffentlicht.", + "ChooseCoverImage": "Wählen Sie ein Titelbild ...", + "CoverImage": "Titelbild", + "ShareYourExperiencesWithTheABPFramework": "Teilen Sie Ihre Erfahrungen mit dem ABP Framework!", + "Optional": "Optional", + "UpdateUserWebSiteInfo": "Beispiel: https://johndoe.com", + "UpdateUserTwitterInfo": "Beispiel: johndoe", + "UpdateUserGithubInfo": "Beispiel: johndoe", + "UpdateUserLinkedinInfo": "Beispiel: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Beispiel: Volosoft", + "UpdateUserJobTitleInfo": "Beispiel: Software Developer", + "UserName": "Benutzername", + "Company": "Firma", + "PersonalWebsite": "Persönliche Website", + "RegistrationDate": "Registrierungsdatum", + "Social": "Social", + "Biography": "Biographie", + "HasNoPublishedArticlesYet": "hat noch keine Beiträge veröffentlicht", + "Author": "Autor", + "LatestGithubAnnouncements": "Neueste Github-Ankündigungen", + "SeeAllAnnouncements": "Alle Ankündigungen anzeigen", + "LatestBlogPost": "Letzter Blog-Beitrag", + "Edit": "Bearbeiten", + "ProfileImageChange": "Ändern Sie das Profilbild", + "BlogItemErrorMessage": "Die neuesten Blogpost-Details konnten von ABP nicht abgerufen werden.", + "PlannedReleaseDate": "Geplantes Erscheinungsdatum", + "CommunityArticleRequestErrorMessage": "Die Anfrage nach den neuesten Beiträgen von Github konnte nicht abgerufen werden." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..6f9f0726cf --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json @@ -0,0 +1,189 @@ +{ + "culture": "de-DE", + "texts": { + "GetStarted": "Erste Schritte - Startvorlagen", + "Create": "Erstellen", + "NewProject": "Neues Projekt", + "DirectDownload": "Direkter Download", + "ProjectName": "Proejktname", + "ProjectType": "Projekttyp", + "DatabaseProvider": "Datenbankanbieter", + "NTier": "N-Tier", + "IncludeUserInterface": "Benutzeroberfläche einschließen", + "CreateNow": "Jetzt erstellen", + "TheStartupProject": "Das Startprojekt", + "Tutorial": "Lernprogramm", + "UsingCLI": "mit CLI", + "SeeDetails": "Details ansehen", + "AbpShortDescription": "ABP Framework ist eine vollständige Infrastruktur zum Erstellen moderner Webanwendungen unter Befolgung von Best Practices und Konventionen für Softwareentwicklung.", + "SourceCodeUpper": "QUELLCODE", + "LatestReleaseLogs": "Akteulle Release", + "Infrastructure": "Infrastrutkur", + "Architecture": "Architektur", + "Modular": "Modular", + "DontRepeatYourself": "Don't Repeat Yourself", + "DeveloperFocused": "Entwickler-Zentriert", + "FullStackApplicationInfrastructure": "Full-Stack-Anwendungsinfrastruktur.", + "DomainDrivenDesign": "Domain Driven Design", + "DomainDrivenDesignExplanation": "Entworfen und entwickelt basierend auf DDD-Mustern und -Prinzipien. Bietet ein Schichtenmodell für Ihre Anwendung.", + "Authorization": "Authorization", + "AuthorizationExplanation": "Erweiterte Autorisierung mit Benutzer-, Rollen- und fein abgestimmtem Berechtigungssystem. Aufbauend auf der Microsoft Identity-Bibliothek.", + "MultiTenancy": "Multi-Tenancy", + "MultiTenancyExplanationShort": "SaaS-Anwendungen leicht gemacht! Integrierte Mandantenfähigkeit von der Datenbank bis zur Benutzeroberfläche.", + "CrossCuttingConcerns": "Cross Cutting Concerns", + "CrossCuttingConcernsExplanationShort": "Komplette Infrastruktur für Autorisierung, Validierung, Ausnahmebehandlung, Caching, Überwachungsprotokollierung, Transaktionsverwaltung und mehr.", + "BuiltInBundlingMinification": "Built-In Bundling & Minification", + "BuiltInBundlingMinificationExplanation": "Für die Bundling und Minification müssen keine externen Tools verwendet werden. ABP bietet eine einfachere, dynamische, leistungsstarke, modulare und integrierte Methode!", + "VirtualFileSystem": "Virtual File System", + "VirtualFileSystemExplanation": "Betten Sie Ansichten, Skripte, Stile, Bilder ... in Pakete/Bibliotheken ein und verwenden Sie sie in verschiedenen Anwendungen wieder.", + "Theming": "Theming", + "ThemingExplanationShort": "Verwenden und passen Sie das Bootstrap-basierte Standard-UI-Design an oder erstellen Sie Ihr eigenes.", + "BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers & Dynamic Forms", + "BootstrapTagHelpersDynamicFormsExplanation": "Anstatt die sich wiederholenden Details von Bootstrap-Komponenten manuell zu schreiben, verwenden Sie die Tag-Helper von ABP, um diese zu vereinfachen und dabei die Vorteile von Intellisense zu nutzen. Erstellen Sie mit dem dynamischen Formular-Tag-Helfer schnell UI-Formulare basierend auf einem C#-Modell.", + "HTTPAPIsDynamicProxies": "HTTP APIs & Dynamic Proxies", + "HTTPAPIsDynamicProxiesExplanation": "Stellen Sie Anwendungsdienste automatisch als HTTP-APIs im REST-Stil bereit und verwenden Sie diese mit dynamischen JavaScript- und C#-Proxys.", + "CompleteArchitectureInfo": "Moderne Architektur zur Erstellung wartbarer Softwarelösungen.", + "DomainDrivenDesignBasedLayeringModelExplanation": "Hilft Ihnen bei der Implementierung einer DDD-basierten Schichtarchitektur und beim Aufbau einer wartbaren Codebasis.", + "DomainDrivenDesignBasedLayeringModelExplanationCont": "Bietet Startvorlagen, Abstraktionen, Basisklassen, Dienste, Dokumentation und Anleitungen, mit denen Sie Ihre Anwendung basierend auf DDD-Mustern und -Prinzipien entwickeln können.", + "MicroserviceCompatibleModelExplanation": "Das Kernframework und die vorgefertigten Module sind unter Berücksichtigung der Microservice-Architektur konzipiert.", + "MicroserviceCompatibleModelExplanationCont": "Bietet Infrastruktur, Integrationen, Beispiele und Dokumentation zur einfacheren Implementierung von Microservice-Lösungen, ohne zusätzliche Komplexität zu verursachen, wenn Sie eine monolithische Anwendung wünschen.", + "ModularInfo": "ABP bietet ein Modulsystem, mit dem Sie wiederverwendbare Anwendungsmodule entwickeln, Ereignisse im Anwendungslebenszyklus verknüpfen und Abhängigkeiten zwischen Kernteilen Ihres Systems ausdrücken können.", + "PreBuiltModulesThemes": "Vorgefertigte Module & Themes", + "PreBuiltModulesThemesExplanation": "Open Source- und kommerzielle Module und Themes stehen bereit, um in Ihrer Geschäftsanwendung verwendet zu werden.", + "NuGetNPMPackages": "NuGet- & NPM-Pakete", + "NuGetNPMPackagesExplanation": "Bereitgestellt als NuGet- & NPM-Pakete. Einfach zu installieren und zu aktualisieren.", + "ExtensibleReplaceable": "Erweiterbar/Austauschbar", + "ExtensibleReplaceableExplanation": "Alle Dienste und Module sind auf Erweiterbarkeit ausgelegt. Sie können Dienste, Seiten, Stile und Komponenten ersetzen.", + "CrossCuttingConcernsExplanation2": "Halten Sie Ihre Codebasis kleiner, damit Sie sich auf ihre geschäftsspezifischen Code konzentrieren können.", + "CrossCuttingConcernsExplanation3": "Verbringen Sie keine Zeit damit, grundlegende Anwendungsanforderungen für jedes neue Projekte zu implementieren.", + "AuthenticationAuthorization": "Authentifizierung & Autorisierung", + "ExceptionHandling": "Fehlerbehandlung", + "Validation": "Validierung", + "DatabaseConnection": "Datenbankverbindung", + "TransactionManagement": "Transaktionsmanagement", + "AuditLogging": "Audit Logging", + "Caching": "Caching", + "Multitenancy": "Multimandantenfähigkeit", + "DataFiltering": "Datenfilterung", + "ConventionOverConfiguration": "Convention Over Configuration", + "ConventionOverConfigurationExplanation": "ABP implementiert standardmäßig allgemeine Anwendungskonventionen mit einer minimalen oder Null-Konfiguration.", + "ConventionOverConfigurationExplanationList1": "Automatische Registrierung bekannter Services für Dependency Injection.", + "ConventionOverConfigurationExplanationList2": "Stellt Anwendungsdienste mittels Namenskonventionen als HTTP-APIs bereit.", + "ConventionOverConfigurationExplanationList3": "Erstellt dynamische HTTP-Client-Proxys für C# und JavaScript.", + "ConventionOverConfigurationExplanationList4": "Bietet Standard-Repositorys für Ihre Entities.", + "ConventionOverConfigurationExplanationList5": "Verwaltet die Unit-of-Work gemäß Webanforderung oder Anwendungsdienstmethode.", + "ConventionOverConfigurationExplanationList6": "Triggert Erstellungs-, Aktualisierungs- und Lösch-Events für Ihre Entities.", + "BaseClasses": "Basisklassen", + "BaseClassesExplanation": "Vorgefertigte Basisklassen für gängige Anwendungsmuster.", + "DeveloperFocusedExplanation": "ABP ist für Entwickler", + "DeveloperFocusedExplanationCont": "Es zielt darauf ab, Ihre tägliche Softwareentwicklung zu vereinfachen, ohne Sie daran zu hindern, Low-Level-Code zu schreiben.", + "SeeAllFeatures": "Alle Features anzeigen", + "CLI_CommandLineInterface": "CLI (Command Line Interface)", + "CLI_CommandLineInterfaceExplanation": "Enthält eine CLI, mit der Sie die Erstellung neuer Projekte und das Hinzufügen neuer Module automatisieren können.", + "StartupTemplates": "Startvorlagen", + "StartupTemplatesExplanation": "Verschiedene Startvorlagen bieten eine vollständig konfigurierte Lösung, um Ihre Entwicklung zu beschleunigen.", + "BasedOnFamiliarTools": "Basierend auf vertrauten Tools", + "BasedOnFamiliarToolsExplanation": "Aufbauend auf und integriert mit beliebten Tools, die Sie bereits kennen. Geringe Lernkurve, einfache Anpassung, komfortable Entwicklung.", + "ORMIndependent": "ORM-unabhängig", + "ORMIndependentExplanation": "Das Kernframework ist ORM-/datenbankunabhängig und kann mit jeder Datenquelle arbeiten. Entity Framework Core- und MongoDB-Anbieter sind bereits verfügbar.", + "Features": "Entdecken Sie die ABP Framework-Features", + "ABPCLI": "ABP CLI", + "Modularity": "Modularität", + "BootstrapTagHelpers": "Bootstrap Tag Helpers", + "DynamicForms": "Dynamische Formulare", + "BundlingMinification": "Bundling & Minification", + "BackgroundJobs": "Background Jobs", + "BackgroundJobsExplanation": "Definieren Sie einfache Klassen, um Jobs im Hintergrund in der Warteschlange auszuführen. Verwenden Sie den integrierten Jobmanager oder integrieren Sie Ihren eigenen. Hangfire & RabbitMQ -Integrationen sind bereits verfügbar.", + "DDDInfrastructure": "DDD-Infrastruktur", + "DomainDrivenDesignInfrastructure": "Domain Driven Design-Infrastruktur", + "AutoRESTAPIs": "Auto REST APIs", + "DynamicClientProxies": "Dynamische Client-Proxies", + "DistributedEventBus": "Distributed Event Bus", + "DistributedEventBusWithRabbitMQIntegration": "Distributed Event Bus mit RabbitMQ-Integration", + "TestInfrastructure": "Test-Infrastruktur", + "AuditLoggingEntityHistories": "Audit Logging & Entity Histories", + "ObjectToObjectMapping": "Object to Object Mapping", + "ObjectToObjectMappingExplanation": " Object to Object Mapping Abstraktion mit AutoMapper-Integration.", + "EmailSMSAbstractions": "E-Mail & SMS Abstraktionen", + "EmailSMSAbstractionsWithTemplatingSupport": "E-Mail- und SMS-Abstraktionen mit Vorlagenunterstützung", + "Localization": "Lokalisierung", + "SettingManagement": "Einstellungsverwaltung", + "ExtensionMethods": "Erweiterungsmethoden", + "ExtensionMethodsHelpers": "Erweiterungsmethoden & Helfer", + "AspectOrientedProgramming": "Aspektorientierte Programmierung", + "DependencyInjection": "Dependency Injection", + "DependencyInjectionByConventions": "Dependency Injection durch Konventionen", + "ABPCLIExplanation": "ABP CLI (Command Line Interface) ist ein Befehlszeilenprogramm zum Ausführen einiger gängiger Vorgänge für ABP-basierte Lösungen.", + "ModularityExplanation": "ABP bietet eine vollständige Infrastruktur zum Erstellen eigener Anwendungsmodule, die Entities, Services, Datenbankintegration, APIs, UI-Komponenten usw. enthalten können.", + "MultiTenancyExplanation": "Das ABP-Framework unterstützt nicht nur die Entwicklung von Multi-Mandantenanwendungen, sondern macht Ihren Code von der Mandantenfähigkeit auch weitgehend unabhängig.", + "MultiTenancyExplanation2": "Kann den aktuellen Mandanten automatisch ermitteln und Daten verschiedener Mandanten voneinander isolieren.", + "MultiTenancyExplanation3": "Unterstützt einzelne Datenbank-, Datenbank-pro-Mandanten- und Hybrid-Ansätze.", + "MultiTenancyExplanation4": "Sie konzentrieren sich auf Ihren geschäftsspezifischen Code und lassen das Framework die Mandantenfähigkeit für Sie übernehmen.", + "BootstrapTagHelpersExplanation": "Anstatt die sich wiederholenden Details von Bootstrap-Komponenten manuell zu schreiben, verwenden Sie die Tag-Helper von ABP, um diese zu vereinfachen und dabei die Vorteile von Intellisense zu nutzen. Sie können Bootstrap weitherhin verwenden, wann immer Sie es benötigen.", + "DynamicFormsExplanation": "Helfer für dynamische Formular- und Input-Tags können das vollständige Formular anhand einer C#-Klasse als Model erstellen.", + "AuthenticationAuthorizationExplanation": "Umfangreiche Authentifizierungs- und Autorisierungsoptionen, die in ASP.NET Core Identity & IdentityServer4 integriert sind. Bietet ein erweiterbares und detailliertes Berechtigungssystem.", + "CrossCuttingConcernsExplanation": "Wiederholen Sie sich nicht, um all diese allgemeinen Dinge immer wieder zu implementieren. Konzentrieren Sie sich auf Ihren geschäftsspezifischen Code und lassen Sie ihn von ABP durch Konventionen automatisieren.", + "DatabaseConnectionTransactionManagement": "Datenbankverbindungs- und Transaktionsmanagement", + "CorrelationIdTracking": "Correlation-ID-Verfolgung", + "BundlingMinificationExplanation": "ABP bietet ein einfaches, dynamisches, leistungsstarkes, modulares und integriertes Bundling- und Minification-System.", + "VirtualFileSystemnExplanation": "Das virtuelle Dateisystem ermöglicht die Verwaltung von Dateien, die physisch nicht auf dem Dateisystem (Datenträger) vorhanden sind. Es wird hauptsächlich verwendet, um Dateien (js, css, image, cshtml ...) in Assemblys einzubetten und sie zur Laufzeit wie physische Dateien zu verwenden.", + "ThemingExplanation": "Mit dem Theming-System können Sie Ihre Anwendung & Module Theme-unabhängig entwickeln, indem Sie eine Reihe gemeinsamer Basisbibliotheken und Layouts definieren, die auf dem neuesten Bootstrap-Framework basieren.", + "DomainDrivenDesignInfrastructureExplanation": "Eine vollständige Infrastruktur zum Erstellen von mehrschichtigen Anwendungen basierend auf den Domain Driven Design Entwurfsmustern und -prinzipien;", + "Specification": "Specification", + "Repository": "Repository", + "DomainService": "Domain Service", + "ValueObject": "Value Object", + "ApplicationService": "Application Service", + "DataTransferObject": "Data Transfer Object", + "AggregateRootEntity": "Aggregate Root, Entity", + "AutoRESTAPIsExplanation": "ABP kann Ihre Anwendungsservices gemäß Konvention automatisch als API-Controller konfigurieren.", + "DynamicClientProxiesExplanation": "Verwenden Sie Ihre APIs ganz einfach in JavaScript- und C#-Clients.", + "DistributedEventBusWithRabbitMQIntegrationExplanation": "Veröffentlichen und konsumieren Sie Distributed Events einfach mithilfe des integrierten Distributed Event Bus mit verfügbarer RabbitMQ-Integration.", + "TestInfrastructureExplanation": "Das Framework wurde unter Berücksichtigung von Unit- und Integrationstests entwickelt. Bietet Ihnen Basisklassen, um es einfacher zu machen. Startvorlagen werden mit vorkonfiguriert Tests geliefert.", + "AuditLoggingEntityHistoriesExplanation": "Integriertes Audit Logging für geschäftskritische Anwendungen. Audit Logging auf Request-, Service-, und Methodenebene sowie Entity-Historien mit Details auf Property-Ebene.", + "EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender- und ISmsSender-Abstraktionen entkoppeln Ihre Anwendungslogik von der Infrastruktur. Das erweiterte E-Mail-Vorlagensystem ermöglicht das Erstellen und Lokalisieren von E-Mail-Vorlagen und deren einfache Verwendung bei Bedarf.", + "LocalizationExplanation": "Das Lokalisierungssystem ermöglicht das Erstellen von Ressourcen in einfachen JSON-Dateien und die Lokalisierung Ihrer Benutzeroberfläche. Es unterstützt erweiterte Szenarien wie Vererbung, Erweiterungen und JavaScript-Integration und ist vollständig mit dem Lokalisierungssystem von AspNet Core kompatibel.", + "SettingManagementExplanation": "Definieren Sie Einstellungen für Ihre Anwendung und erhalten Sie zur Laufzeit Werte basierend auf der aktuellen Konfiguration, dem Mandanten und dem Benutzer.", + "ExtensionMethodsHelpersExplanation": "Wiederholen Sie sich nicht einmal für triviale Codeteile. Erweiterungen und Helfer für Standardtypen machen Ihren Code viel sauberer und einfacher zu schreiben.", + "AspectOrientedProgrammingExplanation": "Bietet eine komfortable Infrastruktur zum Erstellen dynamischer Proxys und zum Implementieren der aspektorientierten Programmierung. Fangen Sie eine Klasse ab und führen Sie Ihren Code vor und nach jeder Methodenausführung aus.", + "DependencyInjectionByConventionsExplanation": "Sie müssen Ihre Klassen nicht manuell für die Dependency Injection registrieren. Registriert gängige Servicetypen automatisch gemäß Konvention. Für andere Arten von Services können Sie Schnittstellen und Attribute verwenden, um dies einfacher gestalten und an Ort und Stelle zu ermöglichen.", + "DataFilteringExplanation": "Definieren und verwenden Sie Datenfilter, die automatisch angewendet werden, wenn Sie Entities aus der Datenbank abfragen. Soft Delete- und Multimandanten-Filter sind sofort verfügbar, wenn Sie einfache Schnittstellen implementieren.", + "PublishEvents": "Events veröffentlichen", + "HandleEvents": "Auf Events reagieren", + "AndMore": "und mehr...", + "Code": "Code", + "Result": "Resultat", + "SeeTheDocumentForMoreInformation": "Weitere Informationen finden Sie in der {0} -Dokumentation ", + "IndexPageHeroSection": "Open SourceWebanwendung
Framework
für ASP.Net Core", + "UiFramework": "UI-Framework", + "EmailAddress": "E-Mail-Adresse", + "Mobile": "Mobile", + "ReactNative": "React Native", + "Strong": "Stark", + "Complete": "Vollständig", + "BasedLayeringModel": "Based Layering Model", + "Microservice": "Microservice", + "Compatible": "Kompatibel", + "MeeTTheABPCommunityInfo": "Unsere Mission ist es, eine Umgebung zu schaffen, in der Entwickler sich gegenseitig mit Beiträgen, Tutorials, Fallstudien usw. helfen und Gleichgesinnte treffen können.", + "JoinTheABPCommunityInfo": "Beteiligen Sie sich an einer lebendigen Community und tragen Sie zum ABP Framework bei!", + "AllArticles": "Alle Beiträge", + "SubmitYourArticle": "Reichen Sie Ihren Beitrag ein", + "DynamicClientProxyDocument": "In der Dokumentation zu den Dynamischen Client-Proxies finden Sie Informationen zu JavaScript & C#.", + "EmailSMSAbstractionsDocument": "Weitere Informationen finden Sie in den Unterlagen E-Mail-Senden and SMS-Senden.", + "CreateProjectWizard": "Dieser Assistent erstellt ein neues Projekt aus der Startvorlage, die ordnungsgemäß konfiguriert ist, um Ihr Projekt zu starten.", + "TieredOption": "Erstellt eine Tiered Lösung, bei der Web- und HTTP-API-Ebenen physisch getrennt sind. Wenn diese Option nicht aktiviert ist, wird eine mehrschichtige Lösung erstellt, die weniger komplex und für die meisten Szenarien geeignet ist.", + "SeparateIdentityServerOption": "Trennt die Serverseite in zwei Anwendungen: Die erste ist für den Identitätsserver und die zweite für die serverseitige HTTP-API.", + "UseslatestPreVersion": "Verwendet die neueste Vorabversion", + "ReadTheDocumentation": "Lesen SieDie Dokumentation", + "Documentation": "Dokumentation", + "GettingStartedTutorial": "Erste Schritte Tutorial", + "ApplicationDevelopmentTutorial": "Tutorial zur Anwendungsentwicklung", + "TheStartupTemplate": "Die Startvorlage", + "InstallABPCLIInfo": "ABP CLI ist der schnellste Weg, um eine neue Lösung mit dem ABP-Framework zu starten. Installieren Sie die ABP-CLI über die Eingabeaufforderung:", + "DifferentLevelOfNamespaces": "Sie können verschiedene Ebenen von Namespaces verwenden; z.B. BookStore, Acme.BookStore or Acme.Retail.BookStore.", + "ABPCLIExamplesInfo": "Der Befehl new erstellt eine mehrschichtige MVC-Anwendung mit Entity Framework Core als Datenbankanbieter. Es gibt jedoch zusätzliche Optionen. Beispiele:", + "SeeCliDocumentForMoreInformation": "Weitere Optionen finden Sie im ABP CLI-Dokument oder wählen Sie oben die Registerkarte \"Direkter Download\".", + "Optional": "Optional", + "LocalFrameworkRef": "Behalten Sie die lokale Projektreferenz für die Framework-Pakete bei." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de-DE.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de-DE.json new file mode 100644 index 0000000000..3b1f12c29d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de-DE.json @@ -0,0 +1,12 @@ +{ + "culture": "de-DE", + "texts": { + "GivenTenantIsNotAvailable": "Der angegebene Mandant ist nicht verfügbar: {0}", + "Tenant": "Mandant", + "Switch": "wechseln", + "Name": "Name", + "SwitchTenantHint": "Lassen Sie das Namensfeld leer, um zur Host-Seite zu wechseln.", + "SwitchTenant": "Mandant wechseln", + "NotSelected": "Nicht ausgewählt" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de-DE.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de-DE.json new file mode 100644 index 0000000000..4397fbf5af --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de-DE.json @@ -0,0 +1,6 @@ +{ + "culture": "de-DE", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0} kann nicht mehr als {1} sein! Erhöhen Sie {2}.{3} auf der Serverseite, um mehr Ergebnisse zu erzielen." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de-DE.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de-DE.json new file mode 100644 index 0000000000..89da090ccf --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de-DE.json @@ -0,0 +1,25 @@ +{ + "culture": "de-DE", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "Standard-Absenderadresse", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Standard-Absendername", + "DisplayName:Abp.Mailing.Smtp.Host": "Host", + "DisplayName:Abp.Mailing.Smtp.Port": "Port", + "DisplayName:Abp.Mailing.Smtp.UserName": "Benutzername", + "DisplayName:Abp.Mailing.Smtp.Password": "Passwort", + "DisplayName:Abp.Mailing.Smtp.Domain": "Domain", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "SSL aktivieren", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Standard-Anmeldeinformationen verwenden", + "Description:Abp.Mailing.DefaultFromAddress": "Die Standard-Absenderadresse", + "Description:Abp.Mailing.DefaultFromDisplayName": "Der Standard-Absendername", + "Description:Abp.Mailing.Smtp.Host": "Der Name oder die IP-Adresse des Hosts, der für SMTP-Transaktionen verwendet wird.", + "Description:Abp.Mailing.Smtp.Port": "Der Port, der für SMTP-Transaktionen verwendete wird.", + "Description:Abp.Mailing.Smtp.UserName": "Der Benutzername, der den Anmeldeinformationen zugeordnet ist.", + "Description:Abp.Mailing.Smtp.Password": "Das Kennwort für den Benutzernamen, der den Anmeldeinformationen zugeordnet ist.", + "Description:Abp.Mailing.Smtp.Domain": "Der Domänen- oder Computername, der die Anmeldeinformationen überprüft.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Gibt an, ob der SmtpClient SSL (Secure Sockets Layer) zum Verschlüsseln der Verbindung verwendet.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Gibt an, ob die DefaultCredentials mit Anforderungen mitgesendet werden.", + "TextTemplate:StandardEmailTemplates.Layout": "Standard-E-Mail-Layoutvorlage", + "TextTemplate:StandardEmailTemplates.Message": "Einfache Nachrichtenvorlage für E-Mails" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de-DE.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de-DE.json new file mode 100644 index 0000000000..7ec6a74841 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de-DE.json @@ -0,0 +1,23 @@ +{ + "culture": "de-DE", + "texts": { + "InternalServerErrorMessage": "Bei Ihrer Anfrage ist ein interner Fehler aufgetreten!", + "ValidationErrorMessage": "Ihre Anfrage ist ungültig!", + "ValidationNarrativeErrorMessageTitle": "Die folgenden Fehler wurden während der Validierung festgestellt.", + "DefaultErrorMessage": "Ein Fehler ist aufgetreten!", + "DefaultErrorMessageDetail": "Fehlerdetail nicht vom Server gesendet.", + "DefaultErrorMessage401": "Sie sind nicht authentifiziert!", + "DefaultErrorMessage401Detail": "Sie sollten sich anmelden, um diesen Vorgang auszuführen.", + "DefaultErrorMessage403": "Sie sind nicht berechtigt!", + "DefaultErrorMessage403Detail": "Sie dürfen diesen Vorgang nicht ausführen!", + "DefaultErrorMessage404": "Ressource nicht gefunden!", + "DefaultErrorMessage404Detail": "Die angeforderte Ressource konnte nicht auf dem Server gefunden werden!", + "EntityNotFoundErrorMessage": "Es gibt keine Entität {0} mit id = {1}!", + "Error": "Fehler", + "UnhandledException": "Unbehandelte Ausnahme!", + "401Message": "Nicht autorisiert", + "403Message": "Unzulässig", + "404Message": "Seite nicht gefunden", + "500Message": "Interner Serverfehler" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/de-DE.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/de-DE.json new file mode 100644 index 0000000000..3d2dbb07da --- /dev/null +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/de-DE.json @@ -0,0 +1,15 @@ +{ + "culture": "de-DE", + "texts": { + "DisplayName:Abp.Ldap.ServerHost": "Server-Host", + "Description:Abp.Ldap.ServerHost": "Server-Host", + "DisplayName:Abp.Ldap.ServerPort": "Server-Port", + "Description:Abp.Ldap.ServerPort": "Server-Port", + "DisplayName:Abp.Ldap.BaseDc": "Basisdomänenkomponente", + "Description:Abp.Ldap.BaseDc": "Basisdomänenkomponente", + "DisplayName:Abp.Ldap.UserName": "Benutzername", + "Description:Abp.Ldap.UserName": "Benutzername", + "DisplayName:Abp.Ldap.Password": "Passwort", + "Description:Abp.Ldap.Password": "Passwort" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de-DE.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de-DE.json new file mode 100644 index 0000000000..7e2aef7fd7 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "Standard-Sprache", + "Description:Abp.Localization.DefaultLanguage": "Die Standard-Sprache der Anwendung." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/de-DE.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/de-DE.json new file mode 100644 index 0000000000..f4e1f7668d --- /dev/null +++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "DisplayName:Abp.Timing.Timezone": "Zeitzone", + "Description:Abp.Timing.Timezone": "Anwendungszeitzone" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de-DE.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de-DE.json new file mode 100644 index 0000000000..854ab862d1 --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de-DE.json @@ -0,0 +1,6 @@ +{ + "culture": "de-DE", + "texts": { + "Menu:Administration": "Administration" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de-DE.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de-DE.json new file mode 100644 index 0000000000..2ab3dd90e9 --- /dev/null +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de-DE.json @@ -0,0 +1,52 @@ +{ + "culture": "de-DE", + "texts": { + "Languages": "Sprachen", + "AreYouSure": "Sind Sie sicher?", + "Cancel": "Abbrechen", + "Clear": "Bereinigen", + "Yes": "Ja", + "No": "Nein", + "Ok": "Ok", + "Close": "Schließen", + "Save": "Speichern", + "SavingWithThreeDot": "Speichern...", + "Actions": "Aktionen", + "Delete": "Löschen", + "Edit": "Bearbeiten", + "Refresh": "Aktualisieren", + "Language": "Sprache", + "LoadMore": "Mehr laden", + "ProcessingWithThreeDot": "Wird Bearbeitet...", + "LoadingWithThreeDot": "Wird geladen...", + "Welcome": "Wilkommen", + "Login": "Anmelden", + "Register": "Registrieren", + "Logout": "Abmelden", + "Submit": "Senden", + "Back": "Zurück", + "PagerSearch": "Suche", + "PagerNext": "Nächste", + "PagerPrevious": "Vorherige", + "PagerFirst": "Erste", + "PagerLast": "Letzte", + "PagerInfo": "Anzeigen von _START_ bis _END_ von _TOTAL_ Einträgen", + "PagerInfo{0}{1}{2}": "{0} bis {1} von {2} Einträgen anzeigen", + "PagerInfoEmpty": "0 bis 0 von 0 Einträgen anzeigen", + "PagerInfoFiltered": "(gefiltert aus _MAX_ Gesamteinträgen)", + "NoDataAvailableInDatatable": "Keine Daten verfügbar", + "Total": "gesamt", + "Selected": "ausgewählt", + "PagerShowMenuEntries": "_MENU_ Einträge anzeigen", + "DatatableActionDropdownDefaultText": "Aktionen", + "ChangePassword": "Passwort ändern", + "PersonalInfo": "Mein Profil", + "AreYouSureYouWantToCancelEditingWarningMessage": "Sie haben nicht gespeicherte Änderungen.", + "GoHomePage": "Gehen Sie zur Startseite", + "GoBack": "Geh zurück", + "Search": "Suche", + "ItemWillBeDeletedMessageWithFormat": "{0} wird gelöscht!", + "ItemWillBeDeletedMessage": "Dieser Element wird gelöscht!", + "ManageYourAccount": "Verwalten Sie Ihr Benutzerkonto" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de-DE.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de-DE.json new file mode 100644 index 0000000000..f36417ecf4 --- /dev/null +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de-DE.json @@ -0,0 +1,34 @@ +{ + "culture": "de-DE", + "texts": { + "'{0}' and '{1}' do not match.": "'{0}' und '{1}' stimmen nicht überein.", + "The {0} field is not a valid credit card number.": "Das Feld {0} ist keine gültige Kreditkartennummer.", + "{0} is not valid.": "{0} ist ungültig.", + "The {0} field is not a valid e-mail address.": "Das Feld {0} ist keine gültige E-Mail-Adresse.", + "The {0} field only accepts files with the following extensions: {1}": "Das Feld {0} akzeptiert nur Dateien mit den folgenden Erweiterungen: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "Das Feld {0} muss ein String- oder Array-Typ mit einer maximalen Länge von '{1}' sein.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "Das Feld {0} muss ein String- oder Array-Typ mit einer Mindestlänge von '{1}' sein.", + "The {0} field is not a valid phone number.": "Das Feld {0} ist keine gültige Telefonnummer.", + "The field {0} must be between {1} and {2}.": "Das Feld {0} muss zwischen {1} und {2} liegen.", + "The field {0} must match the regular expression '{1}'.": "Das Feld {0} stimmt nicht mit dem gefordeten Format überein.", + "The {0} field is required.": "Das Feld {0} stimmt nicht mit dem angeforderten Format überein.", + "The field {0} must be a string with a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer maximalen Länge von {1} sein.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer Mindestlänge von {2} und einer Maximallänge von {1} sein.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "Das Feld {0} ist keine gültige, vollqualifizierte http-, https- oder ftp-URL.", + "The field {0} is invalid.": "Das Feld {0} ist ungültig.", + "ThisFieldIsNotAValidCreditCardNumber.": "Dieses Feld ist keine gültige Kreditkartennummer.", + "ThisFieldIsNotValid.": "Dieses Feld ist ungültig.", + "ThisFieldIsNotAValidEmailAddress.": "Dieses Feld ist keine gültige E-Mail-Adresse.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Dieses Feld akzeptiert nur Dateien mit den folgenden Erweiterungen: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Dieses Feld muss ein String- oder Array-Typ mit einer maximalen Länge von '{0}' sein.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Dieses Feld muss ein String- oder Array-Typ mit einer Mindestlänge von '{0}' sein.", + "ThisFieldIsNotAValidPhoneNumber.": "Dieses Feld ist keine gültige Telefonnummer.", + "ThisFieldMustBeBetween{0}And{1}": "Dieses Feld muss zwischen {0} und {1} liegen.", + "ThisFieldMustMatchTheRegularExpression{0}": "Dieses Feld muss mit dem regulären Ausdruck '{0}' übereinstimmen.", + "ThisFieldIsRequired.": "Dieses Feld wird benötigt.", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer maximalen Länge von {0} sein.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer Mindestlänge von {1} und einer Maximallänge von {0} sein.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Dieses Feld ist keine gültige, vollqualifizierte http-, https- oder ftp-URL.", + "ThisFieldIsInvalid.": "Dieses Feld ist ungültig." + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de-DE.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de-DE.json new file mode 100644 index 0000000000..4df3b36adf --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "BirthDate": "Geburtsdatum", + "Value1": "Wert Eins" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de-DE.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de-DE.json new file mode 100644 index 0000000000..4b5809aa99 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de-DE.json @@ -0,0 +1,6 @@ +{ + "culture": "de-DE", + "texts": { + "hello": "Hallo" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/de-DE.json b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/de-DE.json new file mode 100644 index 0000000000..0bc97b136f --- /dev/null +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/de-DE.json @@ -0,0 +1,6 @@ +{ + "culture": "de-DE", + "texts": { + "Volo.Abp.Http.DynamicProxying:10001": "Geschäftsausnahme mit Daten: {0}" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de-DE.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de-DE.json new file mode 100644 index 0000000000..9ddb93d58d --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "USA": "Vereinigte Staaten von Amerika", + "Brazil": "Brasilien" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de-DE.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de-DE.json new file mode 100644 index 0000000000..1ae73a9601 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "ThisFieldIsRequired": "Dieses Feld wird benötigt", + "MaxLenghtErrorMessage": "Dieses Feld darf maximal '{0}' Zeichen enthalten" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de-DE.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de-DE.json new file mode 100644 index 0000000000..e300ad9edc --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de-DE.json @@ -0,0 +1,11 @@ +{ + "culture": "de-DE", + "texts": { + "Hello {0}.": "Hallo {0}.", + "Car": "Auto", + "CarPlural": "Autos", + "MaxLenghtErrorMessage": "Die Länge dieses Feldes darf maximal '{0}' Zeichen betragen", + "Universe": "Universum", + "FortyTwo": "Zweiundvierzig" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de-DE.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de-DE.json new file mode 100644 index 0000000000..8519a0eb29 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de-DE.json @@ -0,0 +1,6 @@ +{ + "culture": "de-DE", + "texts": { + "SeeYou": "Wir sehen uns" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/de-DE.json b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/de-DE.json new file mode 100644 index 0000000000..30d812cf15 --- /dev/null +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "HelloText": "Hallo {0}", + "HowAreYou": "wie geht es Ihnen?" + } +} \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..9a5b7314e1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json @@ -0,0 +1,62 @@ +{ + "culture": "de-DE", + "texts": { + "UserName": "Benutzername", + "EmailAddress": "E-Mail-Adresse", + "UserNameOrEmailAddress": "Benutzername oder E-Mail-Adresse", + "Password": "Passwort", + "RememberMe": "Angemeldet bleiben", + "UseAnotherServiceToLogin": "Verwenden Sie einen anderen Dienst, um sich anzumelden", + "UserLockedOutMessage": "Das Benutzerkonto wurde aufgrund ungültiger Anmeldeversuche gesperrt. Bitte warten Sie eine Weile und versuchen Sie es erneut.", + "InvalidUserNameOrPassword": "Ungültiger Benutzername oder Passwort!", + "LoginIsNotAllowed": "Sie dürfen sich nicht anmelden! Sie müssen Ihre E-Mail-Adresse / Telefonnummer bestätigen.", + "SelfRegistrationDisabledMessage": "Die Selbstregistrierung ist für diese Anwendung deaktiviert. Bitte wenden Sie sich an den Anwendungsadministrator, um einen neuen Benutzer zu registrieren.", + "LocalLoginDisabledMessage": "Die lokale Anmeldung ist für diese Anwendung deaktiviert.", + "Login": "Anmelden", + "Cancel": "Abbrechen", + "Register": "Registrieren", + "AreYouANewUser": "Sind Sie ein neuer Benutzer", + "AlreadyRegistered": "Bereits registriert?", + "InvalidLoginRequest": "Ungültiger Anmeldeversuch", + "ThereAreNoLoginSchemesConfiguredForThisClient": "Für diesen Client sind keine Anmeldeschemata konfiguriert.", + "LogInUsingYourProviderAccount": "Melden Sie sich mit Ihrem {0} Benutzerkonto an", + "DisplayName:CurrentPassword": "Derzeitiges Passwort", + "DisplayName:NewPassword": "Neues Passwort", + "DisplayName:NewPasswordConfirm": "Neues Passwort bestätigen", + "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich geändert.", + "DisplayName:UserName": "Benutzername", + "DisplayName:Email": "E-Mail-Adresse", + "DisplayName:Name": "Name", + "DisplayName:Surname": "Nachname", + "DisplayName:Password": "Passwort", + "DisplayName:EmailAddress": "E-Mail-Adresse", + "DisplayName:PhoneNumber": "Telefonnummer", + "PersonalSettings": "Persönliche Einstellungen", + "PersonalSettingsSaved": "Persönliche Einstellungen gespeichert", + "PasswordChanged": "Passwort geändert", + "NewPasswordConfirmFailed": "Bitte bestätigen Sie das neue Passwort.", + "Manage": "Verwalten", + "ManageYourProfile": "Verwalten Sie Ihr Profil", + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Selbstregistrierung ist aktiviert", + "Description:Abp.Account.IsSelfRegistrationEnabled": "Gibt an, ob ein Benutzer das Benutzerkonto selbst registrieren kann.", + "DisplayName:Abp.Account.EnableLocalLogin": "Authentifizieren Sie sich mit einem lokalen Benutzerkonto", + "Description:Abp.Account.EnableLocalLogin": "Gibt an, ob der Server Benutzern die Authentifizierung mit einem lokalen Konto ermöglicht.", + "LoggedOutTitle": "Abgemeldet", + "LoggedOutText": "Sie wurden abgemeldet und werden bald weitergeleitet.", + "ReturnToText": "Klicken Sie hier, um zu {0} umzuleiten", + "OrLoginWith": "Oder melden Sie sich an mit;", + "ForgotPassword": "Passwort vergessen?", + "SendPasswordResetLink_Information": "Ein Link zum Zurücksetzen des Passworts wird an Ihre E-Mail gesendet. Wenn Sie innerhalb weniger Minuten keine E-Mail erhalten, versuchen Sie es erneut.", + "PasswordResetMailSentMessage": "E-Mail zur Kontowiederherstellung an Ihre E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht innerhalb von 15 Minuten in Ihrem Posteingang sehen, suchen Sie sie in Ihrem Junk-Mail-Ordner. Wenn Sie es dort finden, markieren Sie es bitte als -Kein Junk-. ", + "ResetPassword": "Passwort zurücksetzen", + "ConfirmPassword": "Bestätigen (wiederholen) Sie das Passwort", + "ResetPassword_Information": "Bitte geben Sie Ihr neues Passwort ein.", + "YourPasswordIsSuccessfullyReset": "Ihr Passwort wurde erfolgreich zurückgesetzt.", + "GoToTheApplication": "Gehen Sie zur Anwendung", + "BackToLogin": "Zurück zur Anmeldung", + "ProfileTab:Password": "Passwort ändern", + "ProfileTab:PersonalInfo": "Persönliche Informationen", + "ReturnToApplication": "Zur Anwendung zurückkehren", + "Volo.Account:InvalidEmailAddress": "Die angegebene E-Mail-Adresse kann nicht gefunden werden: {0}" + } +} \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/de-DE.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/de-DE.json new file mode 100644 index 0000000000..6d0b0b7a36 --- /dev/null +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/de-DE.json @@ -0,0 +1,6 @@ +{ + "culture": "de-DE", + "texts": { + "ManageYourProfile": "Verwalten Sie Ihr Profil" + } +} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de-DE.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..a56444847e --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de-DE.json @@ -0,0 +1,58 @@ +{ + "culture": "de-DE", + "texts": { + "Menu:Blogs": "Blogs", + "Menu:BlogManagement": "Blogging", + "Permission:Management": "Verwaltung", + "Permission:Edit": "Bearbeiten", + "Permission:Create": "Erstellen", + "Permission:Delete": "Löschen", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Beiträge", + "Permission:Tags": "Schlagwörter", + "Permission:Comments": "Kommentare", + "Title": "Titel", + "Delete": "Löschen", + "Reply": "Antworten", + "ReplyTo": "Antwort auf {0}", + "ContinueReading": "Weiterlesen", + "DaysAgo": "Vor {0} Tagen", + "YearsAgo": "Vor {0} Jahren", + "MonthsAgo": "Vor {0} Monaten", + "WeeksAgo": "Vor {0} Wochen", + "MinutesAgo": "Vor {0} Minuten", + "SecondsAgo": "Vor {0} Sekunden", + "HoursAgo": "Vor {0} Stunden", + "Now": "jetzt", + "Content": "Inhalt", + "SeeAll": "Alles sehen", + "PopularTags": "Beliebte Schlagworte", + "WiewsWithCount": "{0} Ansichten", + "LastPosts": "Letzte Beiträge", + "LeaveComment": "Einen Kommentar hinterlassen", + "TagsInThisArticle": "Schlagworte in diesem Beitrag", + "Posts": "Beiträge", + "Edit": "Bearbeiten", + "BLOG": "BLOG", + "CommentDeletionWarningMessage": "Kommentar wird gelöscht.", + "PostDeletionWarningMessage": "Beitrag wird gelöscht.", + "BlogDeletionWarningMessage": "Blog wird gelöscht.", + "AreYouSure": "Sind Sie sicher?", + "CommentWithCount": "{0} Kommentare", + "Comment": "Kommentar", + "ShareOnTwitter": "Auf Twitter teilen", + "CoverImage": "Titelbild", + "CreateANewPost": "Erstellen Sie einen neuen Beitrag", + "CreateANewBlog": "Erstellen Sie einen neuen Blog", + "WhatIsNew": "Was ist neu?", + "Name": "Name", + "ShortName": "Kurzer Name", + "CreationTime": "Erstellungszeitpunkt", + "Description": "Beschreibung", + "Blogs": "Blogs", + "Tags": "Schlagwörter", + "ShareOn": "Teilen auf", + "TitleLengthWarning": "Halten Sie Ihre Titellänge unter 60 Zeichen, um SEO-freundlich zu sein!" + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..e5d9e294dc --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json @@ -0,0 +1,22 @@ +{ + "culture": "de-DE", + "texts": { + "PickYourReaction": "Wählen Sie Ihre Reaktion", + "YourComment": "Ihr Kommentar", + "YourReply": "Ihre Antwort", + "Comments": "Kommentare", + "Send": "Senden", + "Delete": "Löschen", + "Reply": "Antworten", + "Update": "Aktualisieren", + "Edit": "Bearbeiten", + "LoginToAddComment": "Melden Sie sich an, um zu Kommentieren", + "LoginToReply": "Melden Sie sich an, um zu Antworten", + "MessageDeletionConfirmationMessage": "Dieser Kommentar wird vollständig gelöscht.", + "CommentAuthorizationExceptionMessage": "Diese Kommentare dürfen nicht öffentlich angezeigt werden.", + "Undo": "Rüchkängig machen", + "RatingUndoMessage": "Ihre Bewertung wird rückgängig gemacht.", + "LoginToRate": "Melden Sie sich an, um zu Bewerten", + "Star": "Stern" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de-DE.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de-DE.json new file mode 100644 index 0000000000..6fa1db9d7a --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de-DE.json @@ -0,0 +1,10 @@ +{ + "culture": "de-DE", + "texts": { + "DocsTitle": "VoloDocs", + "WelcomeVoloDocs": "Willkommen bei den VoloDocs!", + "NoProjectWarning": "Es gibt noch kein definiertes Projekt!", + "CreateYourFirstProject": "Klicken Sie hier, um Ihr erstes Projekt zu starten", + "NoProject": "Kein Projekt!" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json new file mode 100644 index 0000000000..28d5f53f47 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json @@ -0,0 +1,59 @@ +{ + "culture": "de-DE", + "texts": { + "Permission:DocumentManagement": "Dokumentenverwaltung", + "Permission:Projects": "Projekte", + "Permission:Edit": "Bearbeiten", + "Permission:Delete": "Löschen", + "Permission:Create": "Erstellen", + "Permission:Documents": "Dokumente", + "Menu:Documents": "Dokumente", + "Menu:DocumentManagement": "Dokumente", + "Menu:ProjectManagement": "Projekte", + "CreateANewProject": "Neues Projekt erstellen", + "Edit": "Bearbeiten", + "Create": "Erstellen", + "Pull": "Pull", + "Projects": "Projekte", + "Name": "Name", + "ShortName": "Kurzname", + "DocumentStoreType": "DocumentStoreType", + "Format": "Format", + "ShortNameInfoText": "Wird für eine eindeutige URL verwendet.", + "DisplayName:Name": "Name", + "DisplayName:ShortName": "Kurzname", + "DisplayName:Format": "Format", + "DisplayName:DefaultDocumentName": "Standard-Dokumentenname", + "DisplayName:NavigationDocumentName": "Name des Navigationsdokuments", + "DisplayName:MinimumVersion": "Mindestversion", + "DisplayName:MainWebsiteUrl": "URL der Hauptwebsite", + "DisplayName:LatestVersionBranchName": "Name der neuesten Version des Branch", + "DisplayName:GitHubRootUrl": "GitHub-Root-URL", + "DisplayName:GitHubAccessToken": "GitHub-Zugriffstoken", + "DisplayName:GitHubUserAgent": "GitHub-User-Agent", + "DisplayName:GithubVersionProviderSource": "Quelle des GitHub-Versionsanbieters", + "DisplayName:VersionBranchPrefix": "Version-Branch-Präfix", + "DisplayName:All": "Pull all", + "DisplayName:LanguageCode": "Sprachcode", + "DisplayName:Version": "Version", + "Documents": "Dokumente", + "RemoveFromCache": "Aus dem Cache entfernen", + "Reindex": "Neuindizierung", + "ReindexCompleted": "Neuindizierung abgeschlossen", + "RemovedFromCache": "Aus dem Cache entfernt", + "RemoveFromCacheConfirmation": "Möchten Sie dieses Element wirklich aus dem Cache entfernen?", + "ReIndexDocumentConfirmation": "Möchten Sie diesen Beitrag wirklich neu indizieren?", + "DeleteFromDatabase": "Aus Datenbank löschen", + "Deleted": "Gelöscht", + "Search": "Suchen", + "StartDate": "Startdatum", + "EndDate": "Enddatum", + "CreationTime": "Erstellungszeitpunkt", + "LastUpdateTime": "Letzte Änderung", + "LastSignificantUpdateTime": "Letzte wichtige Aktualisierung", + "Version": "Version", + "LanguageCode": "Sprachcode", + "FileName": "Dateiname", + "LastCachedTime": "Cache-Zeit" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de-DE.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de-DE.json new file mode 100644 index 0000000000..b6687f978b --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de-DE.json @@ -0,0 +1,39 @@ +{ + "culture": "de-DE", + "texts": { + "Documents": "Unterlagen", + "BackToWebsite": "Zurück zur Website", + "Contributors": "Mitwirkende", + "ShareOn": "Teilen auf", + "Version": "Version", + "Edit": "Bearbeiten", + "LastEditTime": "Letzte Änderung", + "Delete": "Löschen", + "ClearCache": "Cache leeren", + "ClearCacheConfirmationMessage": "Sind Sie sicher, alle Caches für das Projekt \"{0}\" zu löschen?", + "ReIndexAllProjects": "Alle Projekte neu indizieren", + "ReIndexProject": "Projekt neu indizieren", + "ReIndexProjectConfirmationMessage": "Sind Sie sicher, dass Sie das Projekt \"{0}\" neu indizieren?", + "SuccessfullyReIndexProject": "Neuindizierung für Projekt \"{0}\"", + "ReIndexAllProjectConfirmationMessage": "Sind Sie sicher, alle Projekte neu zu indizieren?", + "SuccessfullyReIndexAllProject": "Alle Projekte erfolgreich neu indizieren", + "InThisDocument": "In diesem Dokument", + "GoToTop": "Nach oben", + "Projects": "Projekt(e)", + "NoProjectWarning": "Es gibt noch keine Projekte!", + "DocumentNotFound": "Hoppla, das angeforderte Dokument wurde nicht gefunden!", + "ProjectNotFound": "Hoppla, das angeforderte Projekt wurde nicht gefunden!", + "NavigationDocumentNotFound": "Diese Version hat kein Navigationsdokument!", + "DocumentNotFoundInSelectedLanguage": "Dokument in der gewünschten Sprache wurde nicht gefunden. Dokument in der Standardsprache wird angezeigt.", + "FilterTopics": "Themen filtern", + "FullSearch": "In Dokumenten suchen", + "Volo.Docs.Domain:010001": "Elastic Search ist nicht aktiviert", + "MultipleVersionDocumentInfo": "Dieses Dokument hat mehrere Versionen. Wählen Sie die Optionen aus, die am besten zu Ihnen passen.", + "New": "Neu", + "Upd": "Upd", + "NewExplanation": "In den letzten zwei Wochen erstellt.", + "UpdatedExplanation": "In den letzten zwei Wochen aktualisiert.", + "Volo.Docs.Domain:010002": "Kurzname {ShortName} existiert bereits.", + "Preview": "Vorschau" + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json new file mode 100644 index 0000000000..af3a7601af --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json @@ -0,0 +1,10 @@ +{ + "culture": "de-DE", + "texts": { + "Features": "Features", + "NoFeatureFoundMessage": "Es ist kein Feature verfügbar.", + "Permission:FeatureManagement": "Feature-Verwaltung", + "Permission:FeatureManagement.ManageHostFeatures": "Host-Features verwalten", + "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} Feature-Wert ist ungültig!" + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de-DE.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de-DE.json new file mode 100644 index 0000000000..3ad1a5d8ae --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de-DE.json @@ -0,0 +1,120 @@ +{ + "culture": "de-DE", + "texts": { + "Menu:IdentityManagement": "Identitätsverwaltung", + "Users": "Benutzer", + "NewUser": "Neuer Benutzer", + "UserName": "Benutzername", + "EmailAddress": "E-Mail-Adresse", + "PhoneNumber": "Telefonnummer", + "UserInformations": "Nutzerinformation", + "DisplayName:IsDefault": "Standard", + "DisplayName:IsStatic": "Statisch", + "DisplayName:IsPublic": "Öffentlich", + "Roles": "Rollen", + "Password": "Passwort", + "PersonalInfo": "Mein Profil", + "PersonalSettings": "Persönliche Einstellungen", + "UserDeletionConfirmationMessage": "Benutzer '{0}' wird gelöscht. Bestätigen Sie das?", + "RoleDeletionConfirmationMessage": "Die Rolle '{0}' wird gelöscht. Bestätigen Sie das?", + "DisplayName:RoleName": "Rollenname", + "DisplayName:UserName": "Benutzername", + "DisplayName:Name": "Name", + "DisplayName:Surname": "Nachname", + "DisplayName:Password": "Passwort", + "DisplayName:Email": "E-Mail-Adresse", + "DisplayName:PhoneNumber": "Telefonnummer", + "DisplayName:TwoFactorEnabled": "Zwei-Faktor-Überprüfung", + "DisplayName:LockoutEnabled": "Benutzerkonto nach fehlgeschlagenen Anmeldeversuchen sperren", + "NewRole": "Neue Rolle", + "RoleName": "Rollenname", + "CreationTime": "Erstellungszeitpunkt", + "Permissions": "Berechtigungen", + "DisplayName:CurrentPassword": "Derzeitiges Passwort", + "DisplayName:NewPassword": "Neues Passwort", + "DisplayName:NewPasswordConfirm": "Neues Passwort bestätigen", + "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich geändert.", + "PersonalSettingsSavedMessage": "Ihre persönlichen Einstellungen wurden erfolgreich gespeichert.", + "Volo.Abp.Identity:DefaultError": "Ein unbekannter Fehler ist aufgetreten.", + "Volo.Abp.Identity:ConcurrencyFailure": "Optimitic Concurrency-Fehler, Objekt wurde geändert.", + "Volo.Abp.Identity:DuplicateEmail": "E-Mail '{0}' ist bereits vergeben.", + "Volo.Abp.Identity:DuplicateRoleName": "Der Rollenname '{0}' ist bereits vergeben.", + "Volo.Abp.Identity:DuplicateUserName": "Der Benutzername '{0}' ist bereits vergeben.", + "Volo.Abp.Identity:InvalidEmail": "E-Mail '{0}' ist ungültig.", + "Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "Der angegebene PasswordHasherCompatibilityMode ist ungültig.", + "Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "Die Iterationszahl muss eine positive Ganzzahl sein.", + "Volo.Abp.Identity:InvalidRoleName": "Der Rollenname '{0}' ist ungültig.", + "Volo.Abp.Identity:InvalidToken": "Ungültiger Token.", + "Volo.Abp.Identity:InvalidUserName": "Der Benutzername '{0}' ist ungültig und darf nur Buchstaben oder Ziffern enthalten.", + "Volo.Abp.Identity:LoginAlreadyAssociated": "Ein Benutzer mit diesem Login existiert bereits.", + "Volo.Abp.Identity:PasswordMismatch": "Falsches Passwort.", + "Volo.Abp.Identity:PasswordRequiresDigit": "Passwörter müssen mindestens eine Ziffer haben ('0' - '9').", + "Volo.Abp.Identity:PasswordRequiresLower": "Passwörter müssen mindestens einen Kleinbuchstaben haben ('a' - 'z').", + "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Passwörter müssen mindestens ein nicht alphanumerisches Zeichen haben.", + "Volo.Abp.Identity:PasswordRequiresUpper": "Passwörter müssen mindestens einen Großbuchstaben ('A' - 'Z') enthalten.", + "Volo.Abp.Identity:PasswordTooShort": "Passwörter müssen mindestens {0} Zeichen lang sein.", + "Volo.Abp.Identity:RoleNotFound": "Rolle {0} existiert nicht.", + "Volo.Abp.Identity:UserAlreadyHasPassword": "Der Benutzer hat bereits ein Passwort festgelegt.", + "Volo.Abp.Identity:UserAlreadyInRole": "Benutzer bereits in Rolle '{0}'.", + "Volo.Abp.Identity:UserLockedOut": "Benutzer ist gesperrt.", + "Volo.Abp.Identity:UserLockoutNotEnabled": "Die Sperrung ist für diesen Benutzer nicht aktiviert.", + "Volo.Abp.Identity:UserNameNotFound": "Benutzer {0} existiert nicht.", + "Volo.Abp.Identity:UserNotInRole": "Der Benutzer hat nicht die Rolle '{0}'.", + "Volo.Abp.Identity:PasswordConfirmationFailed": "Das Passwort stimmt nicht mit dem Bestätigungspasswort überein.", + "Volo.Abp.Identity:010001": "Sie können Ihr eigenes Benutzerkonto nicht löschen!", + "Volo.Abp.Identity:010002": "Es kann nicht mehr als die Organisationseinheit {MaxUserMembershipCount} für einen Benutzer festgelegt werden!", + "Volo.Abp.Identity:010003": "Passwort eines extern angemeldeten Benutzers kann nicht geändert werden!", + "Volo.Abp.Identity:010004": "Es gibt bereits eine Organisationseinheit mit dem Namen {0}. Zwei Einheiten mit demselben Namen können nicht auf derselben Ebene erstellt werden.", + "Volo.Abp.Identity:010005": "Statische Rollen können nicht umbenannt werden.", + "Volo.Abp.Identity:010006": "Statische Rollen können nicht gelöscht werden.", + "Volo.Abp.Identity:010007": "Sie können Ihre Zwei-Faktor-Einstellung nicht ändern.", + "Volo.Abp.Identity:010008": "Die Zwei-Faktor-Einstellung dürfen nicht geändert werden.", + "Identity.OrganizationUnit.MaxUserMembershipCount": "Maximal zulässige Anzahl an Mitgliedschaften in Organisationseinheiten für einen Benutzer", + "Permission:IdentityManagement": "Identitätsverwaltung", + "Permission:RoleManagement": "Rollenverwaltung", + "Permission:Create": "Erstellen", + "Permission:Edit": "Bearbeiten", + "Permission:Delete": "Löschen", + "Permission:ChangePermissions": "Berechtigungen ändern", + "Permission:UserManagement": "Benutzerverwaltung", + "Permission:UserLookup": "Benutzersuche", + "Feature:IdentityGroup": "Identität", + "Feature:TwoFactor": "Zwei-Faktor-Verhalten", + "Feature:TwoFactorDescription": "Stellen Sie das Zwei-Faktor-Verhalten ein. Optionale Werte: Optional, Deaktiviert, Erzwungen", + "Feature:TwoFactor.Optional": "Optional", + "Feature:TwoFactor.Disabled": "Deaktiviert", + "Feature:TwoFactor.Forced": "Erzwungen", + "DisplayName:Abp.Identity.Password.RequiredLength": "Erforderliche Länge", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Erforderliche eindeutige Zeichennummer", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Erforderliches nicht alphanumerisches Zeichen", + "DisplayName:Abp.Identity.Password.RequireLowercase": "Erforderlicher Kleinbuchstabe", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Erforderlicher Großbuchstabe", + "DisplayName:Abp.Identity.Password.RequireDigit": "Erforderliche Ziffer", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Für neue Benutzer aktiviert", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Sperrdauer (Sekunden)", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max. Fehlgeschlagene Zugriffsversuche", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Bestätigte E-Mail-Adresse erforderlich", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Ermöglichen Sie Benutzern, ihre Telefonnummer zu bestätigen", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Bestätigte Telefonnummer erforderlich", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Ermöglichen Sie Benutzern, ihre Benutzernamen zu ändern", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Ermöglichen Sie Benutzern, ihre E-Mail-Adressen zu ändern", + "Description:Abp.Identity.Password.RequiredLength": "Die Mindestlänge, die ein Passworts aufweisen muss.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "Die Mindestanzahl unterschiedlicher Zeichen, die ein Kennwort enthalten muss.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Wenn Passwörter ein nicht alphanumerisches Zeichen enthalten müssen.", + "Description:Abp.Identity.Password.RequireLowercase": "Wenn Kennwörter einen ASCII-Kleinbuchstaben enthalten müssen.", + "Description:Abp.Identity.Password.RequireUppercase": "Wenn Kennwörter einen ASCII-Großbuchstaben enthalten müssen.", + "Description:Abp.Identity.Password.RequireDigit": "Wenn Passwörter eine Ziffer enthalten müssen.", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Gibt an, ob ein neuer Benutzer gesperrt werden kann.", + "Description:Abp.Identity.Lockout.LockoutDuration": "Die Dauer, für die ein Benutzer gesperrt ist, wenn eine Sperre auftritt.", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Die Anzahl der fehlgeschlagenen Zugriffsversuche, die zulässig sind, bevor ein Benutzer gesperrt wird, sofern die Sperre aktiviert ist.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Gibt an, ob eine bestätigte E-Mail-Adresse erforderlich ist, um sich anzumelden.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Gibt an, ob die Telefonnummer vom Benutzer bestätigt werden kann.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Gibt an, ob eine bestätigte Telefonnummer erforderlich ist, um sich anzumelden.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Gibt an, ob der Benutzername vom Benutzer aktualisiert werden kann.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Gibt an, ob die E-Mail-Adresse vom Benutzer aktualisiert werden kann.", + "DisplayName:Abp.Identity.TwoFactorBehaviour": "Zwei-Faktoren-Verhalten", + "Description:Abp.Identity.TwoFactorBehaviour": "Zwei-Faktoren-Verhalten", + "DisplayName:Abp.Identity.UsersCanChange": "Ermöglichen Sie Benutzern, ihre Zwei-Faktor-Authentifizierung zu ändern.", + "Description:Abp.Identity.UsersCanChange": "Ermöglichen Sie Benutzern, ihre Zwei-Faktor-Authentifizierung zu ändern." + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de-DE.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..bbb835af15 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de-DE.json @@ -0,0 +1,14 @@ +{ + "culture": "de-DE", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "Identitätsressourcenname existiert bereits: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "Der Name der API-Ressource ist bereits vorhanden: {Name}", + "Volo.IdentityServer:DuplicateApiScopeName": "Der Name des Api-Bereichs existiert bereits: {Name}", + "Volo.IdentityServer:DuplicateClientId": "ClientId existiert bereits: {ClientId}", + "UserLockedOut": "Das Benutzerkonto wurde aufgrund ungültiger Anmeldeversuche gesperrt. Bitte warten Sie eine Weile und versuchen Sie es erneut.", + "InvalidUserNameOrPassword": "Ungültiger Benutzername oder Passwort!", + "LoginIsNotAllowed": "Sie dürfen sich nicht anmelden! Sie müssen Ihre E-Mail-Adresse / Telefonnummer bestätigen.", + "InvalidUsername": "Ungültiger Benutzername oder Passwort!", + "TheTargetUserIsNotLinkedToYou": "Der Zielbenutzer ist nicht mit Ihnen verknüpft!" + } +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de-DE.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de-DE.json new file mode 100644 index 0000000000..ab64118c53 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de-DE.json @@ -0,0 +1,10 @@ +{ + "culture": "de-DE", + "texts": { + "Permissions": "Berechtigungen", + "OnlyProviderPermissons": "Nur dieser Anbieter", + "All": "Alles", + "SelectAllInAllTabs": "Alle Berechtigungen gewähren", + "SelectAllInThisTab": "Alles auswählen" + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de-DE.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de-DE.json new file mode 100644 index 0000000000..04ada53d3e --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "Settings": "Einstellungen", + "SuccessfullySaved": "Erfolgreich gespeichert" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..16644b17aa --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json @@ -0,0 +1,23 @@ +{ + "culture": "de-DE", + "texts": { + "Menu:TenantManagement": "Mandantenverwaltung", + "Tenants": "Mandanten", + "NewTenant": "Neuer Mandant", + "TenantName": "Mandantenname", + "DisplayName:TenantName": "Mandantenname", + "TenantDeletionConfirmationMessage": "Der Mandant '{0}' wird gelöscht. Bestätigen Sie das?", + "ConnectionStrings": "Connection Strings", + "DisplayName:DefaultConnectionString": "Standard-Connection String", + "DisplayName:UseSharedDatabase": "Verwenden Sie die freigegebene Datenbank", + "ManageHostFeatures": "Host-Features verwalten", + "Permission:TenantManagement": "Mandantenverwaltung", + "Permission:Create": "Erstellen", + "Permission:Edit": "Bearbeiten", + "Permission:Delete": "Löschen", + "Permission:ManageConnectionStrings": "Connection Strings verwalten", + "Permission:ManageFeatures": "Features verwalten", + "DisplayName:AdminEmailAddress": "Admin-E-Mail-Adresse", + "DisplayName:AdminPassword": "Admin-Passwort" + } +} \ No newline at end of file diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/de-DE.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/de-DE.json new file mode 100644 index 0000000000..78e2d41ed4 --- /dev/null +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/de-DE.json @@ -0,0 +1,14 @@ +{ + "culture": "de-DE", + "texts": { + "VirtualFileExplorer": "Virtueller Dateiexplorer", + "VirtualFileType": "Virtueller Dateityp", + "Menu:VirtualFileExplorer": "Virtueller Dateiexplorer", + "LastUpdateTime": "Letzte Aktualisierung", + "VirtualFileName": "Name der virtuellen Datei", + "FileContent": "Dateiinhalt", + "Size": "Größe", + "BackToRoot": "Zurück zum Stammverzeichnis", + "EmptyFileInfoList": "Es gibt keine virtuellen Dateien" + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json new file mode 100644 index 0000000000..aca4528c7c --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json @@ -0,0 +1,8 @@ +{ + "culture": "de-DE", + "texts": { + "Menu:Home": "Home", + "Welcome": "Willkommen", + "LongWelcomeMessage": "Willkommen bei der Anwendung. Dies ist ein Startup-Projekt, das auf dem ABP-Framework basiert. Weitere Informationen finden Sie unter abp.io." + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 8259259152..1a6c410619 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -127,6 +127,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); + options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 2bc5c64d21..9f1b0c8168 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -152,6 +152,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); + options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index e67b25769f..45322b2960 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -70,6 +70,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); + options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); }); Configure(options => diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 1483e94a57..2db1d47151 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -168,6 +168,7 @@ namespace MyCompanyName.MyProjectName.Web options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); + options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsche", "de")); }); } diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json new file mode 100644 index 0000000000..5fb222491e --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/de-DE.json @@ -0,0 +1,7 @@ +{ + "culture": "de-DE", + "texts": { + "ManageYourProfile": "Verwalten Sie Ihr Profil", + "SamplePageMessage": "Eine Beispielseite für das Modul MyProjectNameModul" + } +} \ No newline at end of file From 2fd8d2b1dae2d0076ce76f6f6e80b94df10a6fa6 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 3 Nov 2020 17:48:38 +0300 Subject: [PATCH 31/62] remove unnecessary logger and remove newline. --- .../Volo/Abp/Cli/Bundling/BundlingService.cs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs index 8610b3da4d..3057e81002 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs @@ -1,5 +1,4 @@ using Microsoft.CodeAnalysis.CSharp; -using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.IO; @@ -23,8 +22,7 @@ namespace Volo.Abp.Cli.Bundling const string ScriptPlaceholderEnd = ""; const string SupportedWebAssemblyProjectType = "Microsoft.NET.Sdk.BlazorWebAssembly"; - protected IDotNetProjectBuilder DotNetProjectBuilder { get; set; } - protected ILogger Logger { get; set; } + public IDotNetProjectBuilder DotNetProjectBuilder { get; set; } public async Task BundleAsync(string directory, bool forceBuild) { @@ -42,9 +40,7 @@ namespace Volo.Abp.Cli.Bundling { new DotNetProjectInfo(string.Empty, projectFilePath, true) }; - Logger.LogInformation("Build starting..."); DotNetProjectBuilder.Build(projects, string.Empty); - Logger.LogInformation("Build completed..."); } var frameworkVersion = GetTargetFrameworkVersion(projectFilePath); @@ -120,7 +116,7 @@ namespace Volo.Abp.Cli.Bundling builder.AppendLine($"\t"); } } - builder.AppendLine($"\t{StylePlaceholderEnd}"); + builder.Append($"\t{StylePlaceholderEnd}"); return builder.ToString(); } @@ -155,7 +151,7 @@ namespace Volo.Abp.Cli.Bundling builder.AppendLine($"\t"); } } - builder.AppendLine($"\t{ScriptPlaceholderEnd}"); + builder.Append($"\t{ScriptPlaceholderEnd}"); return builder.ToString(); } From 59b5613ef10777f11ba8dd066a090c12d4145732 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 3 Nov 2020 17:49:15 +0300 Subject: [PATCH 32/62] third party dependecy placeholders added. --- .../wwwroot/index.html | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index bf8c9d7902..dd66675d2c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -7,24 +7,29 @@ MyCompanyName.MyProjectName.Blazor - - - + + + + + +
Loading...
- + + - - + + + From d28440004493d2d9c68bd5f79d010e2fe8e91abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 3 Nov 2020 18:26:17 +0300 Subject: [PATCH 33/62] Completed the Domain Services document --- docs/en/Domain-Driven-Design.md | 2 +- docs/en/Domain-Services.md | 134 +++++++++++++++++++++++++++++++- docs/en/docs-nav.json | 3 +- 3 files changed, 136 insertions(+), 3 deletions(-) diff --git a/docs/en/Domain-Driven-Design.md b/docs/en/Domain-Driven-Design.md index bbf22eab13..9e0343d562 100644 --- a/docs/en/Domain-Driven-Design.md +++ b/docs/en/Domain-Driven-Design.md @@ -29,7 +29,7 @@ See the following documents to learn what ABP Framework provides to you to imple * [Entities & Aggregate Roots](Entities.md) * Value Objects * [Repositories](Repositories.md) - * Domain Services + * [Domain Services](Domain-Services.md) * Specifications * **Application Layer** * [Application Services](Application-Services.md) diff --git a/docs/en/Domain-Services.md b/docs/en/Domain-Services.md index 9f4a5ee544..5a4f6393e1 100644 --- a/docs/en/Domain-Services.md +++ b/docs/en/Domain-Services.md @@ -1,3 +1,135 @@ # Domain Services -TODO \ No newline at end of file +## Introduction + +In a [Domain Driven Design](Domain-Driven-Design.md) (DDD) solution, the core business logic is generally implemented in aggregates ([entities](Entities.md)) and the Domain Services. Creating a Domain Service is especially needed when; + +* You implement a core domain logic that depends on some services (like repositories or other external services). +* The logic you need to implement is related to more than one aggregate/entity, so it doesn't properly fit in any of the aggregates. + +## ABP Domain Service Infrastructure + +Domain Services are simple, stateless classes. While you don't have to derive from any service or interface, ABP Framework provides some useful base classes and conventions. + +### DomainService & IDomainService + +Either derive a Domain Service from the `DomainService` base class or directly implement the `IDomainService` interface. + +**Example: Create a Domain Service deriving from the `DomainService` base class.** + +````csharp +using Volo.Abp.Domain.Services; + +namespace MyProject.Issues +{ + public class IssueManager : DomainService + { + + } +} +```` + +When you do that; + +* ABP Framework automatically registers the class to the Dependency Injection system with a Transient lifetime. +* You can directly use some common services as base properties, without needing to manually inject (e.g. [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)). + +> It is suggested to name a Domain Service with a `Manager` or `Service` suffix. We typically use the `Manager` suffix as used in the sample above. + +**Example: Implement the domain logic of assigning an Issue to a User** + +````csharp +public class IssueManager : DomainService +{ + private readonly IRepository _issueRepository; + + public IssueManager(IRepository issueRepository) + { + _issueRepository = issueRepository; + } + + public async Task AssignAsync(Issue issue, AppUser user) + { + var currentIssueCount = await _issueRepository + .CountAsync(i => i.AssignedUserId == user.Id); + + //Implementing a core business validation + if (currentIssueCount >= 3) + { + throw new IssueAssignmentException(user.UserName); + } + + issue.AssignedUserId = user.Id; + } +} +```` + +Issue is an [aggregate root](Entities.md) defined as shown below: + +````csharp +public class Issue : AggregateRoot +{ + public Guid? AssignedUserId { get; internal set; } + + //... +} +```` + +* Making the setter `internal` ensures that it can not directly set in the upper layers and forces to always use the `IssueManager` to assign an `Issue` to a `User`. + +### Using a Domain Service + +A Domain Service is typically used in an [application service](Application-Services.md). + +**Example: Use the `IssueManager` to assign an Issue to a User** + +````csharp +using System; +using System.Threading.Tasks; +using MyProject.Users; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace MyProject.Issues +{ + public class IssueAppService : ApplicationService, IIssueAppService + { + private readonly IssueManager _issueManager; + private readonly IRepository _userRepository; + private readonly IRepository _issueRepository; + + public IssueAppService( + IssueManager issueManager, + IRepository userRepository, + IRepository issueRepository) + { + _issueManager = issueManager; + _userRepository = userRepository; + _issueRepository = issueRepository; + } + + public async Task AssignAsync(Guid id, Guid userId) + { + var issue = await _issueRepository.GetAsync(id); + var user = await _userRepository.GetAsync(userId); + + await _issueManager.AssignAsync(issue, user); + await _issueRepository.UpdateAsync(issue); + } + } +} +```` + +Since the `IssueAppService` is in the Application Layer, it can't directly assign an issue to a user. So, it uses the `IssueManager`. + +## Application Services vs Domain Services + +While both of [Application Services](Application-Services.md) and Domain Services implement the business rules, there are fundamental logical and formal differences; + +* Application Services implement the **use cases** of the application (user interactions in a typical web application), while Domain Services implement the **core, use case independent domain logic**. +* Application Services get/return [Data Transfer Objects](Data-Transfer-Objects.md), Domain Service methods typically get and return the **domain objects** ([entities](Entities.md), [value objects](Value-Objects.md)). +* Domain services are typically used by the Application Services or other Domain Services, while Application Services are used by the Presentation Layer or Client Applications. + +## Lifetime + +Lifetime of Domain Services are [transient](https://docs.abp.io/en/abp/latest/Dependency-Injection) and they are automatically registered to the dependency injection system. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 838e41d5be..8034368347 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -351,7 +351,8 @@ "path": "Repositories.md" }, { - "text": "Domain Services" + "text": "Domain Services", + "path": "Domain-Services.md" }, { "text": "Specifications", From 3c13ff726bd85a1c8e94956b96667169e33a2c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 3 Nov 2020 18:30:19 +0300 Subject: [PATCH 34/62] Completed domain services document --- docs/en/Domain-Driven-Design.md | 2 +- docs/en/Domain-Services.md | 134 +++++++++++++++++++++++++++++++- docs/en/docs-nav.json | 3 +- 3 files changed, 136 insertions(+), 3 deletions(-) diff --git a/docs/en/Domain-Driven-Design.md b/docs/en/Domain-Driven-Design.md index bbf22eab13..9e0343d562 100644 --- a/docs/en/Domain-Driven-Design.md +++ b/docs/en/Domain-Driven-Design.md @@ -29,7 +29,7 @@ See the following documents to learn what ABP Framework provides to you to imple * [Entities & Aggregate Roots](Entities.md) * Value Objects * [Repositories](Repositories.md) - * Domain Services + * [Domain Services](Domain-Services.md) * Specifications * **Application Layer** * [Application Services](Application-Services.md) diff --git a/docs/en/Domain-Services.md b/docs/en/Domain-Services.md index 9f4a5ee544..5a4f6393e1 100644 --- a/docs/en/Domain-Services.md +++ b/docs/en/Domain-Services.md @@ -1,3 +1,135 @@ # Domain Services -TODO \ No newline at end of file +## Introduction + +In a [Domain Driven Design](Domain-Driven-Design.md) (DDD) solution, the core business logic is generally implemented in aggregates ([entities](Entities.md)) and the Domain Services. Creating a Domain Service is especially needed when; + +* You implement a core domain logic that depends on some services (like repositories or other external services). +* The logic you need to implement is related to more than one aggregate/entity, so it doesn't properly fit in any of the aggregates. + +## ABP Domain Service Infrastructure + +Domain Services are simple, stateless classes. While you don't have to derive from any service or interface, ABP Framework provides some useful base classes and conventions. + +### DomainService & IDomainService + +Either derive a Domain Service from the `DomainService` base class or directly implement the `IDomainService` interface. + +**Example: Create a Domain Service deriving from the `DomainService` base class.** + +````csharp +using Volo.Abp.Domain.Services; + +namespace MyProject.Issues +{ + public class IssueManager : DomainService + { + + } +} +```` + +When you do that; + +* ABP Framework automatically registers the class to the Dependency Injection system with a Transient lifetime. +* You can directly use some common services as base properties, without needing to manually inject (e.g. [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)). + +> It is suggested to name a Domain Service with a `Manager` or `Service` suffix. We typically use the `Manager` suffix as used in the sample above. + +**Example: Implement the domain logic of assigning an Issue to a User** + +````csharp +public class IssueManager : DomainService +{ + private readonly IRepository _issueRepository; + + public IssueManager(IRepository issueRepository) + { + _issueRepository = issueRepository; + } + + public async Task AssignAsync(Issue issue, AppUser user) + { + var currentIssueCount = await _issueRepository + .CountAsync(i => i.AssignedUserId == user.Id); + + //Implementing a core business validation + if (currentIssueCount >= 3) + { + throw new IssueAssignmentException(user.UserName); + } + + issue.AssignedUserId = user.Id; + } +} +```` + +Issue is an [aggregate root](Entities.md) defined as shown below: + +````csharp +public class Issue : AggregateRoot +{ + public Guid? AssignedUserId { get; internal set; } + + //... +} +```` + +* Making the setter `internal` ensures that it can not directly set in the upper layers and forces to always use the `IssueManager` to assign an `Issue` to a `User`. + +### Using a Domain Service + +A Domain Service is typically used in an [application service](Application-Services.md). + +**Example: Use the `IssueManager` to assign an Issue to a User** + +````csharp +using System; +using System.Threading.Tasks; +using MyProject.Users; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace MyProject.Issues +{ + public class IssueAppService : ApplicationService, IIssueAppService + { + private readonly IssueManager _issueManager; + private readonly IRepository _userRepository; + private readonly IRepository _issueRepository; + + public IssueAppService( + IssueManager issueManager, + IRepository userRepository, + IRepository issueRepository) + { + _issueManager = issueManager; + _userRepository = userRepository; + _issueRepository = issueRepository; + } + + public async Task AssignAsync(Guid id, Guid userId) + { + var issue = await _issueRepository.GetAsync(id); + var user = await _userRepository.GetAsync(userId); + + await _issueManager.AssignAsync(issue, user); + await _issueRepository.UpdateAsync(issue); + } + } +} +```` + +Since the `IssueAppService` is in the Application Layer, it can't directly assign an issue to a user. So, it uses the `IssueManager`. + +## Application Services vs Domain Services + +While both of [Application Services](Application-Services.md) and Domain Services implement the business rules, there are fundamental logical and formal differences; + +* Application Services implement the **use cases** of the application (user interactions in a typical web application), while Domain Services implement the **core, use case independent domain logic**. +* Application Services get/return [Data Transfer Objects](Data-Transfer-Objects.md), Domain Service methods typically get and return the **domain objects** ([entities](Entities.md), [value objects](Value-Objects.md)). +* Domain services are typically used by the Application Services or other Domain Services, while Application Services are used by the Presentation Layer or Client Applications. + +## Lifetime + +Lifetime of Domain Services are [transient](https://docs.abp.io/en/abp/latest/Dependency-Injection) and they are automatically registered to the dependency injection system. \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 732e86bd41..29d658aee4 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -347,7 +347,8 @@ "path": "Repositories.md" }, { - "text": "Domain Services" + "text": "Domain Services", + "path": "Domain-Services.md" }, { "text": "Specifications", From d05d33e9082b1991c7e8a995b8a7b437b0bc1458 Mon Sep 17 00:00:00 2001 From: EngincanV Date: Tue, 3 Nov 2020 18:33:55 +0300 Subject: [PATCH 35/62] Update en.json --- .../Community/Localization/Resources/en.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 87db8c931a..2d146db401 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -85,6 +85,11 @@ "ProfileImageChange": "Change the profile image", "BlogItemErrorMessage": "Could not get the latest blog post details from ABP.", "PlannedReleaseDate": "Planned release date", - "CommunityArticleRequestErrorMessage": "Could not get the latest article request from Github." + "CommunityArticleRequestErrorMessage": "Could not get the latest article request from Github.", + "ArticleRequestFromGithubIssue": "There are not any article requests now.", + "LatestArticles": "Latest Articles", + "ArticleRequests": "Article Requests", + "AllArticleRequests": "See All Article Requests", + "ArticleAssignRequest": "Want to write this article? Click here to assign yourself." } } From 60ed3f7a65c6658126feb98b65cb1d811472173e Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 3 Nov 2020 19:00:06 +0300 Subject: [PATCH 36/62] use basebundlecontributer to avoid code duplication --- .../BundleContributer.cs | 19 ++-------- .../BundleContributer.cs | 16 ++------ .../WebAssembly/BundleContributer.cs | 18 ++------- .../Volo.Abp.BlazoriseUI/BundleContributer.cs | 33 ++++++---------- .../Abp/Bundling/BaseBundleContributer.cs | 38 +++++++++++++++++++ .../WebAssembly/BundleContributer.cs | 19 ++-------- 6 files changed, 64 insertions(+), 79 deletions(-) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BaseBundleContributer.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs index 81ff6044b2..666a6e24f5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs @@ -1,26 +1,15 @@ -using System.Collections.Generic; -using Volo.Abp.Bundling; +using Volo.Abp.Bundling; namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme { - public class BundleContributer : IBundleContributer + public class BundleContributer : BaseBundleContributer { - public void AddScripts(List scriptDefinitions) + public override string[] GetStyles() { - - } - - public void AddStyles(List styleDefinitions) - { - var styles = new string[] + return new string[] { "_content/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/libs/abp/css/theme.css", }; - - foreach (var style in styles) - { - styleDefinitions.AddIfNotContains((item) => item.Source == style, () => new BundleDefinition(style)); - } } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs index fa46219c06..d4d8902079 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs @@ -3,26 +3,16 @@ using Volo.Abp.Bundling; namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming { - public class BundleContributer : IBundleContributer + public class BundleContributer : BaseBundleContributer { - public void AddScripts(List scriptDefinitions) + public override string[] GetStyles() { - - } - - public void AddStyles(List styleDefinitions) - { - var styles = new string[] + return new string[] { "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/bootstrap/css/bootstrap.min.css", "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/css/all.css", "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/css/flag-icon.css" }; - - foreach (var style in styles) - { - styleDefinitions.AddIfNotContains((item) => item.Source == style, () => new BundleDefinition(style)); - } } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs index 99fcde7b97..693bf8f575 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs @@ -1,25 +1,15 @@ -using System.Collections.Generic; -using Volo.Abp.Bundling; +using Volo.Abp.Bundling; namespace Volo.Abp.AspNetCore.Components.WebAssembly { - public class BundleContributer : IBundleContributer + public class BundleContributer : BaseBundleContributer { - public void AddScripts(List scriptDefinitions) + public override string[] GetScripts() { - var scripts = new string[] + return new string[] { "_content/Volo.Abp.AspNetCore.Components.WebAssembly/libs/abp/js/abp.js", }; - - foreach (var script in scripts) - { - scriptDefinitions.AddIfNotContains((item) => item.Source == script, () => new BundleDefinition(script)); - } - } - - public void AddStyles(List styleDefinitions) - { } } } diff --git a/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs b/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs index 2b182f465f..0e72dc1e36 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs @@ -1,37 +1,26 @@ -using System.Collections.Generic; -using Volo.Abp.Bundling; +using Volo.Abp.Bundling; namespace Volo.Abp.BlazoriseUI { - public class BundleContributer : IBundleContributer + public class BundleContributer : BaseBundleContributer { - public void AddScripts(List scriptDefinitions) + public override string[] GetStyles() { - var scripts = new string[] - { - "_content/Blazorise/blazorise.js", - "_content/Blazorise.Bootstrap/blazorise.bootstrap.js" - }; - - foreach (var script in scripts) - { - scriptDefinitions.AddIfNotContains((item) => item.Source == script, () => new BundleDefinition(script)); - } - } - - public void AddStyles(List styleDefinitions) - { - var styles = new string[] + return new string[] { "_content/Blazorise/blazorise.css", "_content/Blazorise.Bootstrap/blazorise.bootstrap.css", "_content/Blazorise.Snackbar/blazorise.snackbar.css" }; + } - foreach (var style in styles) + public override string[] GetScripts() + { + return new string[] { - styleDefinitions.AddIfNotContains((item) => item.Source == style, () => new BundleDefinition(style)); - } + "_content/Blazorise/blazorise.js", + "_content/Blazorise.Bootstrap/blazorise.bootstrap.js" + }; } } } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BaseBundleContributer.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BaseBundleContributer.cs new file mode 100644 index 0000000000..214b021afb --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BaseBundleContributer.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.Bundling +{ + public class BaseBundleContributer : IBundleContributer + { + public virtual void AddScripts(List scriptDefinitions) + { + var scripts = GetScripts(); + + foreach (var script in scripts) + { + scriptDefinitions.AddIfNotContains((item) => item.Source == script, () => new BundleDefinition(script)); + } + } + + public virtual void AddStyles(List styleDefinitions) + { + var styles = GetStyles(); + + foreach (var style in styles) + { + styleDefinitions.AddIfNotContains((item) => item.Source == style, () => new BundleDefinition(style)); + } + } + + public virtual string[] GetStyles() + { + return Array.Empty(); + } + + public virtual string[] GetScripts() + { + return Array.Empty(); + } + } +} diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs index b7932866ad..e4dec37162 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs @@ -1,26 +1,15 @@ -using System.Collections.Generic; -using Volo.Abp.Bundling; +using Volo.Abp.Bundling; namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly { - public class BundleContributer : IBundleContributer + public class BundleContributer : BaseBundleContributer { - public void AddScripts(List scriptDefinitions) + public override string[] GetScripts() { - var scripts = new string[] + return new string[] { "_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js", }; - - foreach (var script in scripts) - { - scriptDefinitions.AddIfNotContains((item) => item.Source == script, () => new BundleDefinition(script)); - } - } - - public void AddStyles(List styleDefinitions) - { - } } } From f7b84cf09dac4a306bf96350dd7077cdac26addd Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Tue, 3 Nov 2020 19:05:51 +0300 Subject: [PATCH 37/62] flag icon library removed from theming project. --- .../BundleContributer.cs | 1 - .../wwwroot/libs/flag-icon/css/flag-icon.css | 1568 ---- .../libs/flag-icon/css/flag-icon.min.css | 1 - .../wwwroot/libs/flag-icon/flags/1x1/ad.svg | 148 - .../wwwroot/libs/flag-icon/flags/1x1/ae.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/af.svg | 81 - .../wwwroot/libs/flag-icon/flags/1x1/ag.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/ai.svg | 763 -- .../wwwroot/libs/flag-icon/flags/1x1/al.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/am.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/ao.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/aq.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/ar.svg | 31 - .../wwwroot/libs/flag-icon/flags/1x1/as.svg | 33 - .../wwwroot/libs/flag-icon/flags/1x1/at.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/au.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/aw.svg | 186 - .../wwwroot/libs/flag-icon/flags/1x1/ax.svg | 18 - .../wwwroot/libs/flag-icon/flags/1x1/az.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/ba.svg | 12 - .../wwwroot/libs/flag-icon/flags/1x1/bb.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/bd.svg | 4 - .../wwwroot/libs/flag-icon/flags/1x1/be.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/bf.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/bg.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/bh.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/bi.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/bj.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/bl.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/bm.svg | 98 - .../wwwroot/libs/flag-icon/flags/1x1/bn.svg | 36 - .../wwwroot/libs/flag-icon/flags/1x1/bo.svg | 678 -- .../wwwroot/libs/flag-icon/flags/1x1/bq.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/br.svg | 45 - .../wwwroot/libs/flag-icon/flags/1x1/bs.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/bt.svg | 89 - .../wwwroot/libs/flag-icon/flags/1x1/bv.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/bw.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/by.svg | 22 - .../wwwroot/libs/flag-icon/flags/1x1/bz.svg | 145 - .../wwwroot/libs/flag-icon/flags/1x1/ca.svg | 4 - .../wwwroot/libs/flag-icon/flags/1x1/cc.svg | 19 - .../wwwroot/libs/flag-icon/flags/1x1/cd.svg | 12 - .../wwwroot/libs/flag-icon/flags/1x1/cf.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/cg.svg | 12 - .../wwwroot/libs/flag-icon/flags/1x1/ch.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/ci.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/ck.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/cl.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/cm.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/cn.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/co.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/cr.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/cu.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/cv.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/cw.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/cx.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/cy.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/cz.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/de.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/dj.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/dk.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/dm.svg | 152 - .../wwwroot/libs/flag-icon/flags/1x1/do.svg | 6745 ----------------- .../wwwroot/libs/flag-icon/flags/1x1/dz.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/ec.svg | 138 - .../wwwroot/libs/flag-icon/flags/1x1/ee.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/eg.svg | 38 - .../wwwroot/libs/flag-icon/flags/1x1/eh.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/er.svg | 13 - .../libs/flag-icon/flags/1x1/es-ca.svg | 4 - .../libs/flag-icon/flags/1x1/es-ga.svg | 189 - .../wwwroot/libs/flag-icon/flags/1x1/es.svg | 547 -- .../wwwroot/libs/flag-icon/flags/1x1/et.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/eu.svg | 28 - .../wwwroot/libs/flag-icon/flags/1x1/fi.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/fj.svg | 125 - .../wwwroot/libs/flag-icon/flags/1x1/fk.svg | 93 - .../wwwroot/libs/flag-icon/flags/1x1/fm.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/fo.svg | 12 - .../wwwroot/libs/flag-icon/flags/1x1/fr.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/ga.svg | 7 - .../libs/flag-icon/flags/1x1/gb-eng.svg | 5 - .../libs/flag-icon/flags/1x1/gb-nir.svg | 131 - .../libs/flag-icon/flags/1x1/gb-sct.svg | 4 - .../libs/flag-icon/flags/1x1/gb-wls.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/gb.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/gd.svg | 27 - .../wwwroot/libs/flag-icon/flags/1x1/ge.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/gf.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/gg.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/gh.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/gi.svg | 32 - .../wwwroot/libs/flag-icon/flags/1x1/gl.svg | 4 - .../wwwroot/libs/flag-icon/flags/1x1/gm.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/gn.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/gp.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/gq.svg | 23 - .../wwwroot/libs/flag-icon/flags/1x1/gr.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/gs.svg | 206 - .../wwwroot/libs/flag-icon/flags/1x1/gt.svg | 204 - .../wwwroot/libs/flag-icon/flags/1x1/gu.svg | 39 - .../wwwroot/libs/flag-icon/flags/1x1/gw.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/gy.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/hk.svg | 30 - .../wwwroot/libs/flag-icon/flags/1x1/hm.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/hn.svg | 18 - .../wwwroot/libs/flag-icon/flags/1x1/hr.svg | 56 - .../wwwroot/libs/flag-icon/flags/1x1/ht.svg | 116 - .../wwwroot/libs/flag-icon/flags/1x1/hu.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/id.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/ie.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/il.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/im.svg | 36 - .../wwwroot/libs/flag-icon/flags/1x1/in.svg | 25 - .../wwwroot/libs/flag-icon/flags/1x1/io.svg | 140 - .../wwwroot/libs/flag-icon/flags/1x1/iq.svg | 10 - .../wwwroot/libs/flag-icon/flags/1x1/ir.svg | 219 - .../wwwroot/libs/flag-icon/flags/1x1/is.svg | 12 - .../wwwroot/libs/flag-icon/flags/1x1/it.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/je.svg | 29 - .../wwwroot/libs/flag-icon/flags/1x1/jm.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/jo.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/jp.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/ke.svg | 23 - .../wwwroot/libs/flag-icon/flags/1x1/kg.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/kh.svg | 61 - .../wwwroot/libs/flag-icon/flags/1x1/ki.svg | 36 - .../wwwroot/libs/flag-icon/flags/1x1/km.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/kn.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/kp.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/kr.svg | 24 - .../wwwroot/libs/flag-icon/flags/1x1/kw.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/ky.svg | 70 - .../wwwroot/libs/flag-icon/flags/1x1/kz.svg | 23 - .../wwwroot/libs/flag-icon/flags/1x1/la.svg | 12 - .../wwwroot/libs/flag-icon/flags/1x1/lb.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/lc.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/li.svg | 43 - .../wwwroot/libs/flag-icon/flags/1x1/lk.svg | 22 - .../wwwroot/libs/flag-icon/flags/1x1/lr.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/ls.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/lt.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/lu.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/lv.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/ly.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/ma.svg | 4 - .../wwwroot/libs/flag-icon/flags/1x1/mc.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/md.svg | 71 - .../wwwroot/libs/flag-icon/flags/1x1/me.svg | 118 - .../wwwroot/libs/flag-icon/flags/1x1/mf.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/mg.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/mh.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/mk.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/ml.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/mm.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/mn.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/mo.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/mp.svg | 86 - .../wwwroot/libs/flag-icon/flags/1x1/mq.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/mr.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/ms.svg | 70 - .../wwwroot/libs/flag-icon/flags/1x1/mt.svg | 50 - .../wwwroot/libs/flag-icon/flags/1x1/mu.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/mv.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/mw.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/mx.svg | 378 - .../wwwroot/libs/flag-icon/flags/1x1/my.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/mz.svg | 21 - .../wwwroot/libs/flag-icon/flags/1x1/na.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/nc.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/ne.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/nf.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/ng.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/ni.svg | 129 - .../wwwroot/libs/flag-icon/flags/1x1/nl.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/no.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/np.svg | 19 - .../wwwroot/libs/flag-icon/flags/1x1/nr.svg | 12 - .../wwwroot/libs/flag-icon/flags/1x1/nu.svg | 26 - .../wwwroot/libs/flag-icon/flags/1x1/nz.svg | 41 - .../wwwroot/libs/flag-icon/flags/1x1/om.svg | 115 - .../wwwroot/libs/flag-icon/flags/1x1/pa.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/pe.svg | 244 - .../wwwroot/libs/flag-icon/flags/1x1/pf.svg | 18 - .../wwwroot/libs/flag-icon/flags/1x1/pg.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/ph.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/pk.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/pl.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/pm.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/pn.svg | 67 - .../wwwroot/libs/flag-icon/flags/1x1/pr.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/ps.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/pt.svg | 57 - .../wwwroot/libs/flag-icon/flags/1x1/pw.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/py.svg | 156 - .../wwwroot/libs/flag-icon/flags/1x1/qa.svg | 4 - .../wwwroot/libs/flag-icon/flags/1x1/re.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/ro.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/rs.svg | 296 - .../wwwroot/libs/flag-icon/flags/1x1/ru.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/rw.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/sa.svg | 26 - .../wwwroot/libs/flag-icon/flags/1x1/sb.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/sc.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/sd.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/se.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/sg.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/sh.svg | 81 - .../wwwroot/libs/flag-icon/flags/1x1/si.svg | 18 - .../wwwroot/libs/flag-icon/flags/1x1/sj.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/sk.svg | 9 - .../wwwroot/libs/flag-icon/flags/1x1/sl.svg | 12 - .../wwwroot/libs/flag-icon/flags/1x1/sm.svg | 89 - .../wwwroot/libs/flag-icon/flags/1x1/sn.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/so.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/sr.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/ss.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/st.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/sv.svg | 596 -- .../wwwroot/libs/flag-icon/flags/1x1/sx.svg | 56 - .../wwwroot/libs/flag-icon/flags/1x1/sy.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/sz.svg | 45 - .../wwwroot/libs/flag-icon/flags/1x1/tc.svg | 74 - .../wwwroot/libs/flag-icon/flags/1x1/td.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/tf.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/tg.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/th.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/tj.svg | 26 - .../wwwroot/libs/flag-icon/flags/1x1/tk.svg | 5 - .../wwwroot/libs/flag-icon/flags/1x1/tl.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/tm.svg | 203 - .../wwwroot/libs/flag-icon/flags/1x1/tn.svg | 13 - .../wwwroot/libs/flag-icon/flags/1x1/to.svg | 10 - .../wwwroot/libs/flag-icon/flags/1x1/tr.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/tt.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/tv.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/tw.svg | 14 - .../wwwroot/libs/flag-icon/flags/1x1/tz.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/ua.svg | 6 - .../wwwroot/libs/flag-icon/flags/1x1/ug.svg | 30 - .../wwwroot/libs/flag-icon/flags/1x1/um.svg | 15 - .../wwwroot/libs/flag-icon/flags/1x1/un.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/us.svg | 10 - .../wwwroot/libs/flag-icon/flags/1x1/uy.svg | 28 - .../wwwroot/libs/flag-icon/flags/1x1/uz.svg | 30 - .../wwwroot/libs/flag-icon/flags/1x1/va.svg | 479 -- .../wwwroot/libs/flag-icon/flags/1x1/vc.svg | 8 - .../wwwroot/libs/flag-icon/flags/1x1/ve.svg | 26 - .../wwwroot/libs/flag-icon/flags/1x1/vg.svg | 128 - .../wwwroot/libs/flag-icon/flags/1x1/vi.svg | 28 - .../wwwroot/libs/flag-icon/flags/1x1/vn.svg | 11 - .../wwwroot/libs/flag-icon/flags/1x1/vu.svg | 18 - .../wwwroot/libs/flag-icon/flags/1x1/wf.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/ws.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/xk.svg | 16 - .../wwwroot/libs/flag-icon/flags/1x1/ye.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/yt.svg | 7 - .../wwwroot/libs/flag-icon/flags/1x1/za.svg | 17 - .../wwwroot/libs/flag-icon/flags/1x1/zm.svg | 27 - .../wwwroot/libs/flag-icon/flags/1x1/zw.svg | 21 - .../wwwroot/index.html | 27 +- 262 files changed, 13 insertions(+), 19325 deletions(-) delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.css delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.min.css delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ad.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ae.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/af.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ag.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ai.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/al.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/am.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ao.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aq.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ar.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/as.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/at.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/au.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ax.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/az.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ba.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bb.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bd.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/be.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bf.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bh.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bi.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bj.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bl.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bo.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bq.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/br.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bs.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bt.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bv.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/by.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ca.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cc.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cd.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cf.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ch.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ci.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ck.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cl.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/co.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cu.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cv.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cx.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cy.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/de.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dj.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/do.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ec.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ee.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eh.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/er.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/et.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eu.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fi.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fj.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fo.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ga.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gd.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ge.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gf.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gh.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gi.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gl.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gp.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gq.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gs.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gt.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gu.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gy.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ht.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hu.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/id.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ie.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/il.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/im.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/in.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/io.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/iq.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ir.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/is.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/it.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/je.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jo.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jp.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ke.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kh.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ki.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/km.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kp.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ky.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/la.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lb.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lc.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/li.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ls.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lt.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lu.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lv.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ly.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ma.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mc.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/md.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/me.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mf.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mh.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ml.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mo.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mp.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mq.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ms.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mt.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mu.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mv.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mx.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/my.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/na.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nc.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ne.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nf.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ng.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ni.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nl.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/no.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/np.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nu.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/om.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pa.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pe.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pf.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ph.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pl.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ps.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pt.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/py.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/qa.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/re.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ro.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rs.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ru.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sa.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sb.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sc.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sd.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/se.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sh.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/si.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sj.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sl.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/so.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ss.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/st.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sv.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sx.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sy.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tc.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/td.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tf.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/th.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tj.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tl.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/to.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tr.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tt.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tv.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tw.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ua.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ug.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/um.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/un.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/us.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uy.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uz.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/va.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vc.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ve.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vg.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vi.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vn.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vu.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/wf.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ws.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/xk.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ye.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/yt.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/za.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zm.svg delete mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zw.svg diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs index d4d8902079..f9150e7c2b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs @@ -11,7 +11,6 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming { "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/bootstrap/css/bootstrap.min.css", "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/css/all.css", - "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/flag-icon/css/flag-icon.css" }; } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.css b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.css deleted file mode 100644 index b54375090b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.css +++ /dev/null @@ -1,1568 +0,0 @@ -.flag-icon-background { - background-size: contain; - background-position: 50%; - background-repeat: no-repeat; -} -.flag-icon { - background-size: contain; - background-position: 50%; - background-repeat: no-repeat; - position: relative; - display: inline-block; - width: 1.33333333em; - line-height: 1em; -} -.flag-icon:before { - content: "\00a0"; -} -.flag-icon.flag-icon-squared { - width: 1em; -} -.flag-icon-ad { - background-image: url(../flags/4x3/ad.svg); -} -.flag-icon-ad.flag-icon-squared { - background-image: url(../flags/1x1/ad.svg); -} -.flag-icon-ae { - background-image: url(../flags/4x3/ae.svg); -} -.flag-icon-ae.flag-icon-squared { - background-image: url(../flags/1x1/ae.svg); -} -.flag-icon-af { - background-image: url(../flags/4x3/af.svg); -} -.flag-icon-af.flag-icon-squared { - background-image: url(../flags/1x1/af.svg); -} -.flag-icon-ag { - background-image: url(../flags/4x3/ag.svg); -} -.flag-icon-ag.flag-icon-squared { - background-image: url(../flags/1x1/ag.svg); -} -.flag-icon-ai { - background-image: url(../flags/4x3/ai.svg); -} -.flag-icon-ai.flag-icon-squared { - background-image: url(../flags/1x1/ai.svg); -} -.flag-icon-al { - background-image: url(../flags/4x3/al.svg); -} -.flag-icon-al.flag-icon-squared { - background-image: url(../flags/1x1/al.svg); -} -.flag-icon-am { - background-image: url(../flags/4x3/am.svg); -} -.flag-icon-am.flag-icon-squared { - background-image: url(../flags/1x1/am.svg); -} -.flag-icon-ao { - background-image: url(../flags/4x3/ao.svg); -} -.flag-icon-ao.flag-icon-squared { - background-image: url(../flags/1x1/ao.svg); -} -.flag-icon-aq { - background-image: url(../flags/4x3/aq.svg); -} -.flag-icon-aq.flag-icon-squared { - background-image: url(../flags/1x1/aq.svg); -} -.flag-icon-ar { - background-image: url(../flags/4x3/ar.svg); -} -.flag-icon-ar.flag-icon-squared { - background-image: url(../flags/1x1/ar.svg); -} -.flag-icon-as { - background-image: url(../flags/4x3/as.svg); -} -.flag-icon-as.flag-icon-squared { - background-image: url(../flags/1x1/as.svg); -} -.flag-icon-at { - background-image: url(../flags/4x3/at.svg); -} -.flag-icon-at.flag-icon-squared { - background-image: url(../flags/1x1/at.svg); -} -.flag-icon-au { - background-image: url(../flags/4x3/au.svg); -} -.flag-icon-au.flag-icon-squared { - background-image: url(../flags/1x1/au.svg); -} -.flag-icon-aw { - background-image: url(../flags/4x3/aw.svg); -} -.flag-icon-aw.flag-icon-squared { - background-image: url(../flags/1x1/aw.svg); -} -.flag-icon-ax { - background-image: url(../flags/4x3/ax.svg); -} -.flag-icon-ax.flag-icon-squared { - background-image: url(../flags/1x1/ax.svg); -} -.flag-icon-az { - background-image: url(../flags/4x3/az.svg); -} -.flag-icon-az.flag-icon-squared { - background-image: url(../flags/1x1/az.svg); -} -.flag-icon-ba { - background-image: url(../flags/4x3/ba.svg); -} -.flag-icon-ba.flag-icon-squared { - background-image: url(../flags/1x1/ba.svg); -} -.flag-icon-bb { - background-image: url(../flags/4x3/bb.svg); -} -.flag-icon-bb.flag-icon-squared { - background-image: url(../flags/1x1/bb.svg); -} -.flag-icon-bd { - background-image: url(../flags/4x3/bd.svg); -} -.flag-icon-bd.flag-icon-squared { - background-image: url(../flags/1x1/bd.svg); -} -.flag-icon-be { - background-image: url(../flags/4x3/be.svg); -} -.flag-icon-be.flag-icon-squared { - background-image: url(../flags/1x1/be.svg); -} -.flag-icon-bf { - background-image: url(../flags/4x3/bf.svg); -} -.flag-icon-bf.flag-icon-squared { - background-image: url(../flags/1x1/bf.svg); -} -.flag-icon-bg { - background-image: url(../flags/4x3/bg.svg); -} -.flag-icon-bg.flag-icon-squared { - background-image: url(../flags/1x1/bg.svg); -} -.flag-icon-bh { - background-image: url(../flags/4x3/bh.svg); -} -.flag-icon-bh.flag-icon-squared { - background-image: url(../flags/1x1/bh.svg); -} -.flag-icon-bi { - background-image: url(../flags/4x3/bi.svg); -} -.flag-icon-bi.flag-icon-squared { - background-image: url(../flags/1x1/bi.svg); -} -.flag-icon-bj { - background-image: url(../flags/4x3/bj.svg); -} -.flag-icon-bj.flag-icon-squared { - background-image: url(../flags/1x1/bj.svg); -} -.flag-icon-bl { - background-image: url(../flags/4x3/bl.svg); -} -.flag-icon-bl.flag-icon-squared { - background-image: url(../flags/1x1/bl.svg); -} -.flag-icon-bm { - background-image: url(../flags/4x3/bm.svg); -} -.flag-icon-bm.flag-icon-squared { - background-image: url(../flags/1x1/bm.svg); -} -.flag-icon-bn { - background-image: url(../flags/4x3/bn.svg); -} -.flag-icon-bn.flag-icon-squared { - background-image: url(../flags/1x1/bn.svg); -} -.flag-icon-bo { - background-image: url(../flags/4x3/bo.svg); -} -.flag-icon-bo.flag-icon-squared { - background-image: url(../flags/1x1/bo.svg); -} -.flag-icon-bq { - background-image: url(../flags/4x3/bq.svg); -} -.flag-icon-bq.flag-icon-squared { - background-image: url(../flags/1x1/bq.svg); -} -.flag-icon-br { - background-image: url(../flags/4x3/br.svg); -} -.flag-icon-br.flag-icon-squared { - background-image: url(../flags/1x1/br.svg); -} -.flag-icon-bs { - background-image: url(../flags/4x3/bs.svg); -} -.flag-icon-bs.flag-icon-squared { - background-image: url(../flags/1x1/bs.svg); -} -.flag-icon-bt { - background-image: url(../flags/4x3/bt.svg); -} -.flag-icon-bt.flag-icon-squared { - background-image: url(../flags/1x1/bt.svg); -} -.flag-icon-bv { - background-image: url(../flags/4x3/bv.svg); -} -.flag-icon-bv.flag-icon-squared { - background-image: url(../flags/1x1/bv.svg); -} -.flag-icon-bw { - background-image: url(../flags/4x3/bw.svg); -} -.flag-icon-bw.flag-icon-squared { - background-image: url(../flags/1x1/bw.svg); -} -.flag-icon-by { - background-image: url(../flags/4x3/by.svg); -} -.flag-icon-by.flag-icon-squared { - background-image: url(../flags/1x1/by.svg); -} -.flag-icon-bz { - background-image: url(../flags/4x3/bz.svg); -} -.flag-icon-bz.flag-icon-squared { - background-image: url(../flags/1x1/bz.svg); -} -.flag-icon-ca { - background-image: url(../flags/4x3/ca.svg); -} -.flag-icon-ca.flag-icon-squared { - background-image: url(../flags/1x1/ca.svg); -} -.flag-icon-cc { - background-image: url(../flags/4x3/cc.svg); -} -.flag-icon-cc.flag-icon-squared { - background-image: url(../flags/1x1/cc.svg); -} -.flag-icon-cd { - background-image: url(../flags/4x3/cd.svg); -} -.flag-icon-cd.flag-icon-squared { - background-image: url(../flags/1x1/cd.svg); -} -.flag-icon-cf { - background-image: url(../flags/4x3/cf.svg); -} -.flag-icon-cf.flag-icon-squared { - background-image: url(../flags/1x1/cf.svg); -} -.flag-icon-cg { - background-image: url(../flags/4x3/cg.svg); -} -.flag-icon-cg.flag-icon-squared { - background-image: url(../flags/1x1/cg.svg); -} -.flag-icon-ch { - background-image: url(../flags/4x3/ch.svg); -} -.flag-icon-ch.flag-icon-squared { - background-image: url(../flags/1x1/ch.svg); -} -.flag-icon-ci { - background-image: url(../flags/4x3/ci.svg); -} -.flag-icon-ci.flag-icon-squared { - background-image: url(../flags/1x1/ci.svg); -} -.flag-icon-ck { - background-image: url(../flags/4x3/ck.svg); -} -.flag-icon-ck.flag-icon-squared { - background-image: url(../flags/1x1/ck.svg); -} -.flag-icon-cl { - background-image: url(../flags/4x3/cl.svg); -} -.flag-icon-cl.flag-icon-squared { - background-image: url(../flags/1x1/cl.svg); -} -.flag-icon-cm { - background-image: url(../flags/4x3/cm.svg); -} -.flag-icon-cm.flag-icon-squared { - background-image: url(../flags/1x1/cm.svg); -} -.flag-icon-cn { - background-image: url(../flags/4x3/cn.svg); -} -.flag-icon-cn.flag-icon-squared { - background-image: url(../flags/1x1/cn.svg); -} -.flag-icon-co { - background-image: url(../flags/4x3/co.svg); -} -.flag-icon-co.flag-icon-squared { - background-image: url(../flags/1x1/co.svg); -} -.flag-icon-cr { - background-image: url(../flags/4x3/cr.svg); -} -.flag-icon-cr.flag-icon-squared { - background-image: url(../flags/1x1/cr.svg); -} -.flag-icon-cu { - background-image: url(../flags/4x3/cu.svg); -} -.flag-icon-cu.flag-icon-squared { - background-image: url(../flags/1x1/cu.svg); -} -.flag-icon-cv { - background-image: url(../flags/4x3/cv.svg); -} -.flag-icon-cv.flag-icon-squared { - background-image: url(../flags/1x1/cv.svg); -} -.flag-icon-cw { - background-image: url(../flags/4x3/cw.svg); -} -.flag-icon-cw.flag-icon-squared { - background-image: url(../flags/1x1/cw.svg); -} -.flag-icon-cx { - background-image: url(../flags/4x3/cx.svg); -} -.flag-icon-cx.flag-icon-squared { - background-image: url(../flags/1x1/cx.svg); -} -.flag-icon-cy { - background-image: url(../flags/4x3/cy.svg); -} -.flag-icon-cy.flag-icon-squared { - background-image: url(../flags/1x1/cy.svg); -} -.flag-icon-cz { - background-image: url(../flags/4x3/cz.svg); -} -.flag-icon-cz.flag-icon-squared { - background-image: url(../flags/1x1/cz.svg); -} -.flag-icon-de { - background-image: url(../flags/4x3/de.svg); -} -.flag-icon-de.flag-icon-squared { - background-image: url(../flags/1x1/de.svg); -} -.flag-icon-dj { - background-image: url(../flags/4x3/dj.svg); -} -.flag-icon-dj.flag-icon-squared { - background-image: url(../flags/1x1/dj.svg); -} -.flag-icon-dk { - background-image: url(../flags/4x3/dk.svg); -} -.flag-icon-dk.flag-icon-squared { - background-image: url(../flags/1x1/dk.svg); -} -.flag-icon-dm { - background-image: url(../flags/4x3/dm.svg); -} -.flag-icon-dm.flag-icon-squared { - background-image: url(../flags/1x1/dm.svg); -} -.flag-icon-do { - background-image: url(../flags/4x3/do.svg); -} -.flag-icon-do.flag-icon-squared { - background-image: url(../flags/1x1/do.svg); -} -.flag-icon-dz { - background-image: url(../flags/4x3/dz.svg); -} -.flag-icon-dz.flag-icon-squared { - background-image: url(../flags/1x1/dz.svg); -} -.flag-icon-ec { - background-image: url(../flags/4x3/ec.svg); -} -.flag-icon-ec.flag-icon-squared { - background-image: url(../flags/1x1/ec.svg); -} -.flag-icon-ee { - background-image: url(../flags/4x3/ee.svg); -} -.flag-icon-ee.flag-icon-squared { - background-image: url(../flags/1x1/ee.svg); -} -.flag-icon-eg { - background-image: url(../flags/4x3/eg.svg); -} -.flag-icon-eg.flag-icon-squared { - background-image: url(../flags/1x1/eg.svg); -} -.flag-icon-eh { - background-image: url(../flags/4x3/eh.svg); -} -.flag-icon-eh.flag-icon-squared { - background-image: url(../flags/1x1/eh.svg); -} -.flag-icon-er { - background-image: url(../flags/4x3/er.svg); -} -.flag-icon-er.flag-icon-squared { - background-image: url(../flags/1x1/er.svg); -} -.flag-icon-es { - background-image: url(../flags/4x3/es.svg); -} -.flag-icon-es.flag-icon-squared { - background-image: url(../flags/1x1/es.svg); -} -.flag-icon-et { - background-image: url(../flags/4x3/et.svg); -} -.flag-icon-et.flag-icon-squared { - background-image: url(../flags/1x1/et.svg); -} -.flag-icon-fi { - background-image: url(../flags/4x3/fi.svg); -} -.flag-icon-fi.flag-icon-squared { - background-image: url(../flags/1x1/fi.svg); -} -.flag-icon-fj { - background-image: url(../flags/4x3/fj.svg); -} -.flag-icon-fj.flag-icon-squared { - background-image: url(../flags/1x1/fj.svg); -} -.flag-icon-fk { - background-image: url(../flags/4x3/fk.svg); -} -.flag-icon-fk.flag-icon-squared { - background-image: url(../flags/1x1/fk.svg); -} -.flag-icon-fm { - background-image: url(../flags/4x3/fm.svg); -} -.flag-icon-fm.flag-icon-squared { - background-image: url(../flags/1x1/fm.svg); -} -.flag-icon-fo { - background-image: url(../flags/4x3/fo.svg); -} -.flag-icon-fo.flag-icon-squared { - background-image: url(../flags/1x1/fo.svg); -} -.flag-icon-fr { - background-image: url(../flags/4x3/fr.svg); -} -.flag-icon-fr.flag-icon-squared { - background-image: url(../flags/1x1/fr.svg); -} -.flag-icon-ga { - background-image: url(../flags/4x3/ga.svg); -} -.flag-icon-ga.flag-icon-squared { - background-image: url(../flags/1x1/ga.svg); -} -.flag-icon-gb { - background-image: url(../flags/4x3/gb.svg); -} -.flag-icon-gb.flag-icon-squared { - background-image: url(../flags/1x1/gb.svg); -} -.flag-icon-gd { - background-image: url(../flags/4x3/gd.svg); -} -.flag-icon-gd.flag-icon-squared { - background-image: url(../flags/1x1/gd.svg); -} -.flag-icon-ge { - background-image: url(../flags/4x3/ge.svg); -} -.flag-icon-ge.flag-icon-squared { - background-image: url(../flags/1x1/ge.svg); -} -.flag-icon-gf { - background-image: url(../flags/4x3/gf.svg); -} -.flag-icon-gf.flag-icon-squared { - background-image: url(../flags/1x1/gf.svg); -} -.flag-icon-gg { - background-image: url(../flags/4x3/gg.svg); -} -.flag-icon-gg.flag-icon-squared { - background-image: url(../flags/1x1/gg.svg); -} -.flag-icon-gh { - background-image: url(../flags/4x3/gh.svg); -} -.flag-icon-gh.flag-icon-squared { - background-image: url(../flags/1x1/gh.svg); -} -.flag-icon-gi { - background-image: url(../flags/4x3/gi.svg); -} -.flag-icon-gi.flag-icon-squared { - background-image: url(../flags/1x1/gi.svg); -} -.flag-icon-gl { - background-image: url(../flags/4x3/gl.svg); -} -.flag-icon-gl.flag-icon-squared { - background-image: url(../flags/1x1/gl.svg); -} -.flag-icon-gm { - background-image: url(../flags/4x3/gm.svg); -} -.flag-icon-gm.flag-icon-squared { - background-image: url(../flags/1x1/gm.svg); -} -.flag-icon-gn { - background-image: url(../flags/4x3/gn.svg); -} -.flag-icon-gn.flag-icon-squared { - background-image: url(../flags/1x1/gn.svg); -} -.flag-icon-gp { - background-image: url(../flags/4x3/gp.svg); -} -.flag-icon-gp.flag-icon-squared { - background-image: url(../flags/1x1/gp.svg); -} -.flag-icon-gq { - background-image: url(../flags/4x3/gq.svg); -} -.flag-icon-gq.flag-icon-squared { - background-image: url(../flags/1x1/gq.svg); -} -.flag-icon-gr { - background-image: url(../flags/4x3/gr.svg); -} -.flag-icon-gr.flag-icon-squared { - background-image: url(../flags/1x1/gr.svg); -} -.flag-icon-gs { - background-image: url(../flags/4x3/gs.svg); -} -.flag-icon-gs.flag-icon-squared { - background-image: url(../flags/1x1/gs.svg); -} -.flag-icon-gt { - background-image: url(../flags/4x3/gt.svg); -} -.flag-icon-gt.flag-icon-squared { - background-image: url(../flags/1x1/gt.svg); -} -.flag-icon-gu { - background-image: url(../flags/4x3/gu.svg); -} -.flag-icon-gu.flag-icon-squared { - background-image: url(../flags/1x1/gu.svg); -} -.flag-icon-gw { - background-image: url(../flags/4x3/gw.svg); -} -.flag-icon-gw.flag-icon-squared { - background-image: url(../flags/1x1/gw.svg); -} -.flag-icon-gy { - background-image: url(../flags/4x3/gy.svg); -} -.flag-icon-gy.flag-icon-squared { - background-image: url(../flags/1x1/gy.svg); -} -.flag-icon-hk { - background-image: url(../flags/4x3/hk.svg); -} -.flag-icon-hk.flag-icon-squared { - background-image: url(../flags/1x1/hk.svg); -} -.flag-icon-hm { - background-image: url(../flags/4x3/hm.svg); -} -.flag-icon-hm.flag-icon-squared { - background-image: url(../flags/1x1/hm.svg); -} -.flag-icon-hn { - background-image: url(../flags/4x3/hn.svg); -} -.flag-icon-hn.flag-icon-squared { - background-image: url(../flags/1x1/hn.svg); -} -.flag-icon-hr { - background-image: url(../flags/4x3/hr.svg); -} -.flag-icon-hr.flag-icon-squared { - background-image: url(../flags/1x1/hr.svg); -} -.flag-icon-ht { - background-image: url(../flags/4x3/ht.svg); -} -.flag-icon-ht.flag-icon-squared { - background-image: url(../flags/1x1/ht.svg); -} -.flag-icon-hu { - background-image: url(../flags/4x3/hu.svg); -} -.flag-icon-hu.flag-icon-squared { - background-image: url(../flags/1x1/hu.svg); -} -.flag-icon-id { - background-image: url(../flags/4x3/id.svg); -} -.flag-icon-id.flag-icon-squared { - background-image: url(../flags/1x1/id.svg); -} -.flag-icon-ie { - background-image: url(../flags/4x3/ie.svg); -} -.flag-icon-ie.flag-icon-squared { - background-image: url(../flags/1x1/ie.svg); -} -.flag-icon-il { - background-image: url(../flags/4x3/il.svg); -} -.flag-icon-il.flag-icon-squared { - background-image: url(../flags/1x1/il.svg); -} -.flag-icon-im { - background-image: url(../flags/4x3/im.svg); -} -.flag-icon-im.flag-icon-squared { - background-image: url(../flags/1x1/im.svg); -} -.flag-icon-in { - background-image: url(../flags/4x3/in.svg); -} -.flag-icon-in.flag-icon-squared { - background-image: url(../flags/1x1/in.svg); -} -.flag-icon-io { - background-image: url(../flags/4x3/io.svg); -} -.flag-icon-io.flag-icon-squared { - background-image: url(../flags/1x1/io.svg); -} -.flag-icon-iq { - background-image: url(../flags/4x3/iq.svg); -} -.flag-icon-iq.flag-icon-squared { - background-image: url(../flags/1x1/iq.svg); -} -.flag-icon-ir { - background-image: url(../flags/4x3/ir.svg); -} -.flag-icon-ir.flag-icon-squared { - background-image: url(../flags/1x1/ir.svg); -} -.flag-icon-is { - background-image: url(../flags/4x3/is.svg); -} -.flag-icon-is.flag-icon-squared { - background-image: url(../flags/1x1/is.svg); -} -.flag-icon-it { - background-image: url(../flags/4x3/it.svg); -} -.flag-icon-it.flag-icon-squared { - background-image: url(../flags/1x1/it.svg); -} -.flag-icon-je { - background-image: url(../flags/4x3/je.svg); -} -.flag-icon-je.flag-icon-squared { - background-image: url(../flags/1x1/je.svg); -} -.flag-icon-jm { - background-image: url(../flags/4x3/jm.svg); -} -.flag-icon-jm.flag-icon-squared { - background-image: url(../flags/1x1/jm.svg); -} -.flag-icon-jo { - background-image: url(../flags/4x3/jo.svg); -} -.flag-icon-jo.flag-icon-squared { - background-image: url(../flags/1x1/jo.svg); -} -.flag-icon-jp { - background-image: url(../flags/4x3/jp.svg); -} -.flag-icon-jp.flag-icon-squared { - background-image: url(../flags/1x1/jp.svg); -} -.flag-icon-ke { - background-image: url(../flags/4x3/ke.svg); -} -.flag-icon-ke.flag-icon-squared { - background-image: url(../flags/1x1/ke.svg); -} -.flag-icon-kg { - background-image: url(../flags/4x3/kg.svg); -} -.flag-icon-kg.flag-icon-squared { - background-image: url(../flags/1x1/kg.svg); -} -.flag-icon-kh { - background-image: url(../flags/4x3/kh.svg); -} -.flag-icon-kh.flag-icon-squared { - background-image: url(../flags/1x1/kh.svg); -} -.flag-icon-ki { - background-image: url(../flags/4x3/ki.svg); -} -.flag-icon-ki.flag-icon-squared { - background-image: url(../flags/1x1/ki.svg); -} -.flag-icon-km { - background-image: url(../flags/4x3/km.svg); -} -.flag-icon-km.flag-icon-squared { - background-image: url(../flags/1x1/km.svg); -} -.flag-icon-kn { - background-image: url(../flags/4x3/kn.svg); -} -.flag-icon-kn.flag-icon-squared { - background-image: url(../flags/1x1/kn.svg); -} -.flag-icon-kp { - background-image: url(../flags/4x3/kp.svg); -} -.flag-icon-kp.flag-icon-squared { - background-image: url(../flags/1x1/kp.svg); -} -.flag-icon-kr { - background-image: url(../flags/4x3/kr.svg); -} -.flag-icon-kr.flag-icon-squared { - background-image: url(../flags/1x1/kr.svg); -} -.flag-icon-kw { - background-image: url(../flags/4x3/kw.svg); -} -.flag-icon-kw.flag-icon-squared { - background-image: url(../flags/1x1/kw.svg); -} -.flag-icon-ky { - background-image: url(../flags/4x3/ky.svg); -} -.flag-icon-ky.flag-icon-squared { - background-image: url(../flags/1x1/ky.svg); -} -.flag-icon-kz { - background-image: url(../flags/4x3/kz.svg); -} -.flag-icon-kz.flag-icon-squared { - background-image: url(../flags/1x1/kz.svg); -} -.flag-icon-la { - background-image: url(../flags/4x3/la.svg); -} -.flag-icon-la.flag-icon-squared { - background-image: url(../flags/1x1/la.svg); -} -.flag-icon-lb { - background-image: url(../flags/4x3/lb.svg); -} -.flag-icon-lb.flag-icon-squared { - background-image: url(../flags/1x1/lb.svg); -} -.flag-icon-lc { - background-image: url(../flags/4x3/lc.svg); -} -.flag-icon-lc.flag-icon-squared { - background-image: url(../flags/1x1/lc.svg); -} -.flag-icon-li { - background-image: url(../flags/4x3/li.svg); -} -.flag-icon-li.flag-icon-squared { - background-image: url(../flags/1x1/li.svg); -} -.flag-icon-lk { - background-image: url(../flags/4x3/lk.svg); -} -.flag-icon-lk.flag-icon-squared { - background-image: url(../flags/1x1/lk.svg); -} -.flag-icon-lr { - background-image: url(../flags/4x3/lr.svg); -} -.flag-icon-lr.flag-icon-squared { - background-image: url(../flags/1x1/lr.svg); -} -.flag-icon-ls { - background-image: url(../flags/4x3/ls.svg); -} -.flag-icon-ls.flag-icon-squared { - background-image: url(../flags/1x1/ls.svg); -} -.flag-icon-lt { - background-image: url(../flags/4x3/lt.svg); -} -.flag-icon-lt.flag-icon-squared { - background-image: url(../flags/1x1/lt.svg); -} -.flag-icon-lu { - background-image: url(../flags/4x3/lu.svg); -} -.flag-icon-lu.flag-icon-squared { - background-image: url(../flags/1x1/lu.svg); -} -.flag-icon-lv { - background-image: url(../flags/4x3/lv.svg); -} -.flag-icon-lv.flag-icon-squared { - background-image: url(../flags/1x1/lv.svg); -} -.flag-icon-ly { - background-image: url(../flags/4x3/ly.svg); -} -.flag-icon-ly.flag-icon-squared { - background-image: url(../flags/1x1/ly.svg); -} -.flag-icon-ma { - background-image: url(../flags/4x3/ma.svg); -} -.flag-icon-ma.flag-icon-squared { - background-image: url(../flags/1x1/ma.svg); -} -.flag-icon-mc { - background-image: url(../flags/4x3/mc.svg); -} -.flag-icon-mc.flag-icon-squared { - background-image: url(../flags/1x1/mc.svg); -} -.flag-icon-md { - background-image: url(../flags/4x3/md.svg); -} -.flag-icon-md.flag-icon-squared { - background-image: url(../flags/1x1/md.svg); -} -.flag-icon-me { - background-image: url(../flags/4x3/me.svg); -} -.flag-icon-me.flag-icon-squared { - background-image: url(../flags/1x1/me.svg); -} -.flag-icon-mf { - background-image: url(../flags/4x3/mf.svg); -} -.flag-icon-mf.flag-icon-squared { - background-image: url(../flags/1x1/mf.svg); -} -.flag-icon-mg { - background-image: url(../flags/4x3/mg.svg); -} -.flag-icon-mg.flag-icon-squared { - background-image: url(../flags/1x1/mg.svg); -} -.flag-icon-mh { - background-image: url(../flags/4x3/mh.svg); -} -.flag-icon-mh.flag-icon-squared { - background-image: url(../flags/1x1/mh.svg); -} -.flag-icon-mk { - background-image: url(../flags/4x3/mk.svg); -} -.flag-icon-mk.flag-icon-squared { - background-image: url(../flags/1x1/mk.svg); -} -.flag-icon-ml { - background-image: url(../flags/4x3/ml.svg); -} -.flag-icon-ml.flag-icon-squared { - background-image: url(../flags/1x1/ml.svg); -} -.flag-icon-mm { - background-image: url(../flags/4x3/mm.svg); -} -.flag-icon-mm.flag-icon-squared { - background-image: url(../flags/1x1/mm.svg); -} -.flag-icon-mn { - background-image: url(../flags/4x3/mn.svg); -} -.flag-icon-mn.flag-icon-squared { - background-image: url(../flags/1x1/mn.svg); -} -.flag-icon-mo { - background-image: url(../flags/4x3/mo.svg); -} -.flag-icon-mo.flag-icon-squared { - background-image: url(../flags/1x1/mo.svg); -} -.flag-icon-mp { - background-image: url(../flags/4x3/mp.svg); -} -.flag-icon-mp.flag-icon-squared { - background-image: url(../flags/1x1/mp.svg); -} -.flag-icon-mq { - background-image: url(../flags/4x3/mq.svg); -} -.flag-icon-mq.flag-icon-squared { - background-image: url(../flags/1x1/mq.svg); -} -.flag-icon-mr { - background-image: url(../flags/4x3/mr.svg); -} -.flag-icon-mr.flag-icon-squared { - background-image: url(../flags/1x1/mr.svg); -} -.flag-icon-ms { - background-image: url(../flags/4x3/ms.svg); -} -.flag-icon-ms.flag-icon-squared { - background-image: url(../flags/1x1/ms.svg); -} -.flag-icon-mt { - background-image: url(../flags/4x3/mt.svg); -} -.flag-icon-mt.flag-icon-squared { - background-image: url(../flags/1x1/mt.svg); -} -.flag-icon-mu { - background-image: url(../flags/4x3/mu.svg); -} -.flag-icon-mu.flag-icon-squared { - background-image: url(../flags/1x1/mu.svg); -} -.flag-icon-mv { - background-image: url(../flags/4x3/mv.svg); -} -.flag-icon-mv.flag-icon-squared { - background-image: url(../flags/1x1/mv.svg); -} -.flag-icon-mw { - background-image: url(../flags/4x3/mw.svg); -} -.flag-icon-mw.flag-icon-squared { - background-image: url(../flags/1x1/mw.svg); -} -.flag-icon-mx { - background-image: url(../flags/4x3/mx.svg); -} -.flag-icon-mx.flag-icon-squared { - background-image: url(../flags/1x1/mx.svg); -} -.flag-icon-my { - background-image: url(../flags/4x3/my.svg); -} -.flag-icon-my.flag-icon-squared { - background-image: url(../flags/1x1/my.svg); -} -.flag-icon-mz { - background-image: url(../flags/4x3/mz.svg); -} -.flag-icon-mz.flag-icon-squared { - background-image: url(../flags/1x1/mz.svg); -} -.flag-icon-na { - background-image: url(../flags/4x3/na.svg); -} -.flag-icon-na.flag-icon-squared { - background-image: url(../flags/1x1/na.svg); -} -.flag-icon-nc { - background-image: url(../flags/4x3/nc.svg); -} -.flag-icon-nc.flag-icon-squared { - background-image: url(../flags/1x1/nc.svg); -} -.flag-icon-ne { - background-image: url(../flags/4x3/ne.svg); -} -.flag-icon-ne.flag-icon-squared { - background-image: url(../flags/1x1/ne.svg); -} -.flag-icon-nf { - background-image: url(../flags/4x3/nf.svg); -} -.flag-icon-nf.flag-icon-squared { - background-image: url(../flags/1x1/nf.svg); -} -.flag-icon-ng { - background-image: url(../flags/4x3/ng.svg); -} -.flag-icon-ng.flag-icon-squared { - background-image: url(../flags/1x1/ng.svg); -} -.flag-icon-ni { - background-image: url(../flags/4x3/ni.svg); -} -.flag-icon-ni.flag-icon-squared { - background-image: url(../flags/1x1/ni.svg); -} -.flag-icon-nl { - background-image: url(../flags/4x3/nl.svg); -} -.flag-icon-nl.flag-icon-squared { - background-image: url(../flags/1x1/nl.svg); -} -.flag-icon-no { - background-image: url(../flags/4x3/no.svg); -} -.flag-icon-no.flag-icon-squared { - background-image: url(../flags/1x1/no.svg); -} -.flag-icon-np { - background-image: url(../flags/4x3/np.svg); -} -.flag-icon-np.flag-icon-squared { - background-image: url(../flags/1x1/np.svg); -} -.flag-icon-nr { - background-image: url(../flags/4x3/nr.svg); -} -.flag-icon-nr.flag-icon-squared { - background-image: url(../flags/1x1/nr.svg); -} -.flag-icon-nu { - background-image: url(../flags/4x3/nu.svg); -} -.flag-icon-nu.flag-icon-squared { - background-image: url(../flags/1x1/nu.svg); -} -.flag-icon-nz { - background-image: url(../flags/4x3/nz.svg); -} -.flag-icon-nz.flag-icon-squared { - background-image: url(../flags/1x1/nz.svg); -} -.flag-icon-om { - background-image: url(../flags/4x3/om.svg); -} -.flag-icon-om.flag-icon-squared { - background-image: url(../flags/1x1/om.svg); -} -.flag-icon-pa { - background-image: url(../flags/4x3/pa.svg); -} -.flag-icon-pa.flag-icon-squared { - background-image: url(../flags/1x1/pa.svg); -} -.flag-icon-pe { - background-image: url(../flags/4x3/pe.svg); -} -.flag-icon-pe.flag-icon-squared { - background-image: url(../flags/1x1/pe.svg); -} -.flag-icon-pf { - background-image: url(../flags/4x3/pf.svg); -} -.flag-icon-pf.flag-icon-squared { - background-image: url(../flags/1x1/pf.svg); -} -.flag-icon-pg { - background-image: url(../flags/4x3/pg.svg); -} -.flag-icon-pg.flag-icon-squared { - background-image: url(../flags/1x1/pg.svg); -} -.flag-icon-ph { - background-image: url(../flags/4x3/ph.svg); -} -.flag-icon-ph.flag-icon-squared { - background-image: url(../flags/1x1/ph.svg); -} -.flag-icon-pk { - background-image: url(../flags/4x3/pk.svg); -} -.flag-icon-pk.flag-icon-squared { - background-image: url(../flags/1x1/pk.svg); -} -.flag-icon-pl { - background-image: url(../flags/4x3/pl.svg); -} -.flag-icon-pl.flag-icon-squared { - background-image: url(../flags/1x1/pl.svg); -} -.flag-icon-pm { - background-image: url(../flags/4x3/pm.svg); -} -.flag-icon-pm.flag-icon-squared { - background-image: url(../flags/1x1/pm.svg); -} -.flag-icon-pn { - background-image: url(../flags/4x3/pn.svg); -} -.flag-icon-pn.flag-icon-squared { - background-image: url(../flags/1x1/pn.svg); -} -.flag-icon-pr { - background-image: url(../flags/4x3/pr.svg); -} -.flag-icon-pr.flag-icon-squared { - background-image: url(../flags/1x1/pr.svg); -} -.flag-icon-ps { - background-image: url(../flags/4x3/ps.svg); -} -.flag-icon-ps.flag-icon-squared { - background-image: url(../flags/1x1/ps.svg); -} -.flag-icon-pt { - background-image: url(../flags/4x3/pt.svg); -} -.flag-icon-pt.flag-icon-squared { - background-image: url(../flags/1x1/pt.svg); -} -.flag-icon-pw { - background-image: url(../flags/4x3/pw.svg); -} -.flag-icon-pw.flag-icon-squared { - background-image: url(../flags/1x1/pw.svg); -} -.flag-icon-py { - background-image: url(../flags/4x3/py.svg); -} -.flag-icon-py.flag-icon-squared { - background-image: url(../flags/1x1/py.svg); -} -.flag-icon-qa { - background-image: url(../flags/4x3/qa.svg); -} -.flag-icon-qa.flag-icon-squared { - background-image: url(../flags/1x1/qa.svg); -} -.flag-icon-re { - background-image: url(../flags/4x3/re.svg); -} -.flag-icon-re.flag-icon-squared { - background-image: url(../flags/1x1/re.svg); -} -.flag-icon-ro { - background-image: url(../flags/4x3/ro.svg); -} -.flag-icon-ro.flag-icon-squared { - background-image: url(../flags/1x1/ro.svg); -} -.flag-icon-rs { - background-image: url(../flags/4x3/rs.svg); -} -.flag-icon-rs.flag-icon-squared { - background-image: url(../flags/1x1/rs.svg); -} -.flag-icon-ru { - background-image: url(../flags/4x3/ru.svg); -} -.flag-icon-ru.flag-icon-squared { - background-image: url(../flags/1x1/ru.svg); -} -.flag-icon-rw { - background-image: url(../flags/4x3/rw.svg); -} -.flag-icon-rw.flag-icon-squared { - background-image: url(../flags/1x1/rw.svg); -} -.flag-icon-sa { - background-image: url(../flags/4x3/sa.svg); -} -.flag-icon-sa.flag-icon-squared { - background-image: url(../flags/1x1/sa.svg); -} -.flag-icon-sb { - background-image: url(../flags/4x3/sb.svg); -} -.flag-icon-sb.flag-icon-squared { - background-image: url(../flags/1x1/sb.svg); -} -.flag-icon-sc { - background-image: url(../flags/4x3/sc.svg); -} -.flag-icon-sc.flag-icon-squared { - background-image: url(../flags/1x1/sc.svg); -} -.flag-icon-sd { - background-image: url(../flags/4x3/sd.svg); -} -.flag-icon-sd.flag-icon-squared { - background-image: url(../flags/1x1/sd.svg); -} -.flag-icon-se { - background-image: url(../flags/4x3/se.svg); -} -.flag-icon-se.flag-icon-squared { - background-image: url(../flags/1x1/se.svg); -} -.flag-icon-sg { - background-image: url(../flags/4x3/sg.svg); -} -.flag-icon-sg.flag-icon-squared { - background-image: url(../flags/1x1/sg.svg); -} -.flag-icon-sh { - background-image: url(../flags/4x3/sh.svg); -} -.flag-icon-sh.flag-icon-squared { - background-image: url(../flags/1x1/sh.svg); -} -.flag-icon-si { - background-image: url(../flags/4x3/si.svg); -} -.flag-icon-si.flag-icon-squared { - background-image: url(../flags/1x1/si.svg); -} -.flag-icon-sj { - background-image: url(../flags/4x3/sj.svg); -} -.flag-icon-sj.flag-icon-squared { - background-image: url(../flags/1x1/sj.svg); -} -.flag-icon-sk { - background-image: url(../flags/4x3/sk.svg); -} -.flag-icon-sk.flag-icon-squared { - background-image: url(../flags/1x1/sk.svg); -} -.flag-icon-sl { - background-image: url(../flags/4x3/sl.svg); -} -.flag-icon-sl.flag-icon-squared { - background-image: url(../flags/1x1/sl.svg); -} -.flag-icon-sm { - background-image: url(../flags/4x3/sm.svg); -} -.flag-icon-sm.flag-icon-squared { - background-image: url(../flags/1x1/sm.svg); -} -.flag-icon-sn { - background-image: url(../flags/4x3/sn.svg); -} -.flag-icon-sn.flag-icon-squared { - background-image: url(../flags/1x1/sn.svg); -} -.flag-icon-so { - background-image: url(../flags/4x3/so.svg); -} -.flag-icon-so.flag-icon-squared { - background-image: url(../flags/1x1/so.svg); -} -.flag-icon-sr { - background-image: url(../flags/4x3/sr.svg); -} -.flag-icon-sr.flag-icon-squared { - background-image: url(../flags/1x1/sr.svg); -} -.flag-icon-ss { - background-image: url(../flags/4x3/ss.svg); -} -.flag-icon-ss.flag-icon-squared { - background-image: url(../flags/1x1/ss.svg); -} -.flag-icon-st { - background-image: url(../flags/4x3/st.svg); -} -.flag-icon-st.flag-icon-squared { - background-image: url(../flags/1x1/st.svg); -} -.flag-icon-sv { - background-image: url(../flags/4x3/sv.svg); -} -.flag-icon-sv.flag-icon-squared { - background-image: url(../flags/1x1/sv.svg); -} -.flag-icon-sx { - background-image: url(../flags/4x3/sx.svg); -} -.flag-icon-sx.flag-icon-squared { - background-image: url(../flags/1x1/sx.svg); -} -.flag-icon-sy { - background-image: url(../flags/4x3/sy.svg); -} -.flag-icon-sy.flag-icon-squared { - background-image: url(../flags/1x1/sy.svg); -} -.flag-icon-sz { - background-image: url(../flags/4x3/sz.svg); -} -.flag-icon-sz.flag-icon-squared { - background-image: url(../flags/1x1/sz.svg); -} -.flag-icon-tc { - background-image: url(../flags/4x3/tc.svg); -} -.flag-icon-tc.flag-icon-squared { - background-image: url(../flags/1x1/tc.svg); -} -.flag-icon-td { - background-image: url(../flags/4x3/td.svg); -} -.flag-icon-td.flag-icon-squared { - background-image: url(../flags/1x1/td.svg); -} -.flag-icon-tf { - background-image: url(../flags/4x3/tf.svg); -} -.flag-icon-tf.flag-icon-squared { - background-image: url(../flags/1x1/tf.svg); -} -.flag-icon-tg { - background-image: url(../flags/4x3/tg.svg); -} -.flag-icon-tg.flag-icon-squared { - background-image: url(../flags/1x1/tg.svg); -} -.flag-icon-th { - background-image: url(../flags/4x3/th.svg); -} -.flag-icon-th.flag-icon-squared { - background-image: url(../flags/1x1/th.svg); -} -.flag-icon-tj { - background-image: url(../flags/4x3/tj.svg); -} -.flag-icon-tj.flag-icon-squared { - background-image: url(../flags/1x1/tj.svg); -} -.flag-icon-tk { - background-image: url(../flags/4x3/tk.svg); -} -.flag-icon-tk.flag-icon-squared { - background-image: url(../flags/1x1/tk.svg); -} -.flag-icon-tl { - background-image: url(../flags/4x3/tl.svg); -} -.flag-icon-tl.flag-icon-squared { - background-image: url(../flags/1x1/tl.svg); -} -.flag-icon-tm { - background-image: url(../flags/4x3/tm.svg); -} -.flag-icon-tm.flag-icon-squared { - background-image: url(../flags/1x1/tm.svg); -} -.flag-icon-tn { - background-image: url(../flags/4x3/tn.svg); -} -.flag-icon-tn.flag-icon-squared { - background-image: url(../flags/1x1/tn.svg); -} -.flag-icon-to { - background-image: url(../flags/4x3/to.svg); -} -.flag-icon-to.flag-icon-squared { - background-image: url(../flags/1x1/to.svg); -} -.flag-icon-tr { - background-image: url(../flags/4x3/tr.svg); -} -.flag-icon-tr.flag-icon-squared { - background-image: url(../flags/1x1/tr.svg); -} -.flag-icon-tt { - background-image: url(../flags/4x3/tt.svg); -} -.flag-icon-tt.flag-icon-squared { - background-image: url(../flags/1x1/tt.svg); -} -.flag-icon-tv { - background-image: url(../flags/4x3/tv.svg); -} -.flag-icon-tv.flag-icon-squared { - background-image: url(../flags/1x1/tv.svg); -} -.flag-icon-tw { - background-image: url(../flags/4x3/tw.svg); -} -.flag-icon-tw.flag-icon-squared { - background-image: url(../flags/1x1/tw.svg); -} -.flag-icon-tz { - background-image: url(../flags/4x3/tz.svg); -} -.flag-icon-tz.flag-icon-squared { - background-image: url(../flags/1x1/tz.svg); -} -.flag-icon-ua { - background-image: url(../flags/4x3/ua.svg); -} -.flag-icon-ua.flag-icon-squared { - background-image: url(../flags/1x1/ua.svg); -} -.flag-icon-ug { - background-image: url(../flags/4x3/ug.svg); -} -.flag-icon-ug.flag-icon-squared { - background-image: url(../flags/1x1/ug.svg); -} -.flag-icon-um { - background-image: url(../flags/4x3/um.svg); -} -.flag-icon-um.flag-icon-squared { - background-image: url(../flags/1x1/um.svg); -} -.flag-icon-us { - background-image: url(../flags/4x3/us.svg); -} -.flag-icon-us.flag-icon-squared { - background-image: url(../flags/1x1/us.svg); -} -.flag-icon-uy { - background-image: url(../flags/4x3/uy.svg); -} -.flag-icon-uy.flag-icon-squared { - background-image: url(../flags/1x1/uy.svg); -} -.flag-icon-uz { - background-image: url(../flags/4x3/uz.svg); -} -.flag-icon-uz.flag-icon-squared { - background-image: url(../flags/1x1/uz.svg); -} -.flag-icon-va { - background-image: url(../flags/4x3/va.svg); -} -.flag-icon-va.flag-icon-squared { - background-image: url(../flags/1x1/va.svg); -} -.flag-icon-vc { - background-image: url(../flags/4x3/vc.svg); -} -.flag-icon-vc.flag-icon-squared { - background-image: url(../flags/1x1/vc.svg); -} -.flag-icon-ve { - background-image: url(../flags/4x3/ve.svg); -} -.flag-icon-ve.flag-icon-squared { - background-image: url(../flags/1x1/ve.svg); -} -.flag-icon-vg { - background-image: url(../flags/4x3/vg.svg); -} -.flag-icon-vg.flag-icon-squared { - background-image: url(../flags/1x1/vg.svg); -} -.flag-icon-vi { - background-image: url(../flags/4x3/vi.svg); -} -.flag-icon-vi.flag-icon-squared { - background-image: url(../flags/1x1/vi.svg); -} -.flag-icon-vn { - background-image: url(../flags/4x3/vn.svg); -} -.flag-icon-vn.flag-icon-squared { - background-image: url(../flags/1x1/vn.svg); -} -.flag-icon-vu { - background-image: url(../flags/4x3/vu.svg); -} -.flag-icon-vu.flag-icon-squared { - background-image: url(../flags/1x1/vu.svg); -} -.flag-icon-wf { - background-image: url(../flags/4x3/wf.svg); -} -.flag-icon-wf.flag-icon-squared { - background-image: url(../flags/1x1/wf.svg); -} -.flag-icon-ws { - background-image: url(../flags/4x3/ws.svg); -} -.flag-icon-ws.flag-icon-squared { - background-image: url(../flags/1x1/ws.svg); -} -.flag-icon-ye { - background-image: url(../flags/4x3/ye.svg); -} -.flag-icon-ye.flag-icon-squared { - background-image: url(../flags/1x1/ye.svg); -} -.flag-icon-yt { - background-image: url(../flags/4x3/yt.svg); -} -.flag-icon-yt.flag-icon-squared { - background-image: url(../flags/1x1/yt.svg); -} -.flag-icon-za { - background-image: url(../flags/4x3/za.svg); -} -.flag-icon-za.flag-icon-squared { - background-image: url(../flags/1x1/za.svg); -} -.flag-icon-zm { - background-image: url(../flags/4x3/zm.svg); -} -.flag-icon-zm.flag-icon-squared { - background-image: url(../flags/1x1/zm.svg); -} -.flag-icon-zw { - background-image: url(../flags/4x3/zw.svg); -} -.flag-icon-zw.flag-icon-squared { - background-image: url(../flags/1x1/zw.svg); -} -.flag-icon-es-ca { - background-image: url(../flags/4x3/es-ca.svg); -} -.flag-icon-es-ca.flag-icon-squared { - background-image: url(../flags/1x1/es-ca.svg); -} -.flag-icon-es-ga { - background-image: url(../flags/4x3/es-ga.svg); -} -.flag-icon-es-ga.flag-icon-squared { - background-image: url(../flags/1x1/es-ga.svg); -} -.flag-icon-eu { - background-image: url(../flags/4x3/eu.svg); -} -.flag-icon-eu.flag-icon-squared { - background-image: url(../flags/1x1/eu.svg); -} -.flag-icon-gb-eng { - background-image: url(../flags/4x3/gb-eng.svg); -} -.flag-icon-gb-eng.flag-icon-squared { - background-image: url(../flags/1x1/gb-eng.svg); -} -.flag-icon-gb-nir { - background-image: url(../flags/4x3/gb-nir.svg); -} -.flag-icon-gb-nir.flag-icon-squared { - background-image: url(../flags/1x1/gb-nir.svg); -} -.flag-icon-gb-sct { - background-image: url(../flags/4x3/gb-sct.svg); -} -.flag-icon-gb-sct.flag-icon-squared { - background-image: url(../flags/1x1/gb-sct.svg); -} -.flag-icon-gb-wls { - background-image: url(../flags/4x3/gb-wls.svg); -} -.flag-icon-gb-wls.flag-icon-squared { - background-image: url(../flags/1x1/gb-wls.svg); -} -.flag-icon-un { - background-image: url(../flags/4x3/un.svg); -} -.flag-icon-un.flag-icon-squared { - background-image: url(../flags/1x1/un.svg); -} -.flag-icon-xk { - background-image: url(../flags/4x3/xk.svg); -} -.flag-icon-xk.flag-icon-squared { - background-image: url(../flags/1x1/xk.svg); -} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.min.css b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.min.css deleted file mode 100644 index 3d049b3953..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.min.css +++ /dev/null @@ -1 +0,0 @@ -.flag-icon-background{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat;position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(../flags/4x3/ad.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(../flags/1x1/ad.svg)}.flag-icon-ae{background-image:url(../flags/4x3/ae.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(../flags/1x1/ae.svg)}.flag-icon-af{background-image:url(../flags/4x3/af.svg)}.flag-icon-af.flag-icon-squared{background-image:url(../flags/1x1/af.svg)}.flag-icon-ag{background-image:url(../flags/4x3/ag.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(../flags/1x1/ag.svg)}.flag-icon-ai{background-image:url(../flags/4x3/ai.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(../flags/1x1/ai.svg)}.flag-icon-al{background-image:url(../flags/4x3/al.svg)}.flag-icon-al.flag-icon-squared{background-image:url(../flags/1x1/al.svg)}.flag-icon-am{background-image:url(../flags/4x3/am.svg)}.flag-icon-am.flag-icon-squared{background-image:url(../flags/1x1/am.svg)}.flag-icon-ao{background-image:url(../flags/4x3/ao.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(../flags/1x1/ao.svg)}.flag-icon-aq{background-image:url(../flags/4x3/aq.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(../flags/1x1/aq.svg)}.flag-icon-ar{background-image:url(../flags/4x3/ar.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(../flags/1x1/ar.svg)}.flag-icon-as{background-image:url(../flags/4x3/as.svg)}.flag-icon-as.flag-icon-squared{background-image:url(../flags/1x1/as.svg)}.flag-icon-at{background-image:url(../flags/4x3/at.svg)}.flag-icon-at.flag-icon-squared{background-image:url(../flags/1x1/at.svg)}.flag-icon-au{background-image:url(../flags/4x3/au.svg)}.flag-icon-au.flag-icon-squared{background-image:url(../flags/1x1/au.svg)}.flag-icon-aw{background-image:url(../flags/4x3/aw.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(../flags/1x1/aw.svg)}.flag-icon-ax{background-image:url(../flags/4x3/ax.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(../flags/1x1/ax.svg)}.flag-icon-az{background-image:url(../flags/4x3/az.svg)}.flag-icon-az.flag-icon-squared{background-image:url(../flags/1x1/az.svg)}.flag-icon-ba{background-image:url(../flags/4x3/ba.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(../flags/1x1/ba.svg)}.flag-icon-bb{background-image:url(../flags/4x3/bb.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(../flags/1x1/bb.svg)}.flag-icon-bd{background-image:url(../flags/4x3/bd.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(../flags/1x1/bd.svg)}.flag-icon-be{background-image:url(../flags/4x3/be.svg)}.flag-icon-be.flag-icon-squared{background-image:url(../flags/1x1/be.svg)}.flag-icon-bf{background-image:url(../flags/4x3/bf.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(../flags/1x1/bf.svg)}.flag-icon-bg{background-image:url(../flags/4x3/bg.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(../flags/1x1/bg.svg)}.flag-icon-bh{background-image:url(../flags/4x3/bh.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(../flags/1x1/bh.svg)}.flag-icon-bi{background-image:url(../flags/4x3/bi.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(../flags/1x1/bi.svg)}.flag-icon-bj{background-image:url(../flags/4x3/bj.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(../flags/1x1/bj.svg)}.flag-icon-bl{background-image:url(../flags/4x3/bl.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(../flags/1x1/bl.svg)}.flag-icon-bm{background-image:url(../flags/4x3/bm.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(../flags/1x1/bm.svg)}.flag-icon-bn{background-image:url(../flags/4x3/bn.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(../flags/1x1/bn.svg)}.flag-icon-bo{background-image:url(../flags/4x3/bo.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(../flags/1x1/bo.svg)}.flag-icon-bq{background-image:url(../flags/4x3/bq.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(../flags/1x1/bq.svg)}.flag-icon-br{background-image:url(../flags/4x3/br.svg)}.flag-icon-br.flag-icon-squared{background-image:url(../flags/1x1/br.svg)}.flag-icon-bs{background-image:url(../flags/4x3/bs.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(../flags/1x1/bs.svg)}.flag-icon-bt{background-image:url(../flags/4x3/bt.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(../flags/1x1/bt.svg)}.flag-icon-bv{background-image:url(../flags/4x3/bv.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(../flags/1x1/bv.svg)}.flag-icon-bw{background-image:url(../flags/4x3/bw.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(../flags/1x1/bw.svg)}.flag-icon-by{background-image:url(../flags/4x3/by.svg)}.flag-icon-by.flag-icon-squared{background-image:url(../flags/1x1/by.svg)}.flag-icon-bz{background-image:url(../flags/4x3/bz.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(../flags/1x1/bz.svg)}.flag-icon-ca{background-image:url(../flags/4x3/ca.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(../flags/1x1/ca.svg)}.flag-icon-cc{background-image:url(../flags/4x3/cc.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(../flags/1x1/cc.svg)}.flag-icon-cd{background-image:url(../flags/4x3/cd.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(../flags/1x1/cd.svg)}.flag-icon-cf{background-image:url(../flags/4x3/cf.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(../flags/1x1/cf.svg)}.flag-icon-cg{background-image:url(../flags/4x3/cg.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(../flags/1x1/cg.svg)}.flag-icon-ch{background-image:url(../flags/4x3/ch.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(../flags/1x1/ch.svg)}.flag-icon-ci{background-image:url(../flags/4x3/ci.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(../flags/1x1/ci.svg)}.flag-icon-ck{background-image:url(../flags/4x3/ck.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(../flags/1x1/ck.svg)}.flag-icon-cl{background-image:url(../flags/4x3/cl.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(../flags/1x1/cl.svg)}.flag-icon-cm{background-image:url(../flags/4x3/cm.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(../flags/1x1/cm.svg)}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(../flags/1x1/cn.svg)}.flag-icon-co{background-image:url(../flags/4x3/co.svg)}.flag-icon-co.flag-icon-squared{background-image:url(../flags/1x1/co.svg)}.flag-icon-cr{background-image:url(../flags/4x3/cr.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(../flags/1x1/cr.svg)}.flag-icon-cu{background-image:url(../flags/4x3/cu.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(../flags/1x1/cu.svg)}.flag-icon-cv{background-image:url(../flags/4x3/cv.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(../flags/1x1/cv.svg)}.flag-icon-cw{background-image:url(../flags/4x3/cw.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(../flags/1x1/cw.svg)}.flag-icon-cx{background-image:url(../flags/4x3/cx.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(../flags/1x1/cx.svg)}.flag-icon-cy{background-image:url(../flags/4x3/cy.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(../flags/1x1/cy.svg)}.flag-icon-cz{background-image:url(../flags/4x3/cz.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(../flags/1x1/cz.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-de.flag-icon-squared{background-image:url(../flags/1x1/de.svg)}.flag-icon-dj{background-image:url(../flags/4x3/dj.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(../flags/1x1/dj.svg)}.flag-icon-dk{background-image:url(../flags/4x3/dk.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(../flags/1x1/dk.svg)}.flag-icon-dm{background-image:url(../flags/4x3/dm.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(../flags/1x1/dm.svg)}.flag-icon-do{background-image:url(../flags/4x3/do.svg)}.flag-icon-do.flag-icon-squared{background-image:url(../flags/1x1/do.svg)}.flag-icon-dz{background-image:url(../flags/4x3/dz.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(../flags/1x1/dz.svg)}.flag-icon-ec{background-image:url(../flags/4x3/ec.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(../flags/1x1/ec.svg)}.flag-icon-ee{background-image:url(../flags/4x3/ee.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(../flags/1x1/ee.svg)}.flag-icon-eg{background-image:url(../flags/4x3/eg.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(../flags/1x1/eg.svg)}.flag-icon-eh{background-image:url(../flags/4x3/eh.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(../flags/1x1/eh.svg)}.flag-icon-er{background-image:url(../flags/4x3/er.svg)}.flag-icon-er.flag-icon-squared{background-image:url(../flags/1x1/er.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-es.flag-icon-squared{background-image:url(../flags/1x1/es.svg)}.flag-icon-et{background-image:url(../flags/4x3/et.svg)}.flag-icon-et.flag-icon-squared{background-image:url(../flags/1x1/et.svg)}.flag-icon-fi{background-image:url(../flags/4x3/fi.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(../flags/1x1/fi.svg)}.flag-icon-fj{background-image:url(../flags/4x3/fj.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(../flags/1x1/fj.svg)}.flag-icon-fk{background-image:url(../flags/4x3/fk.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(../flags/1x1/fk.svg)}.flag-icon-fm{background-image:url(../flags/4x3/fm.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(../flags/1x1/fm.svg)}.flag-icon-fo{background-image:url(../flags/4x3/fo.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(../flags/1x1/fo.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(../flags/1x1/fr.svg)}.flag-icon-ga{background-image:url(../flags/4x3/ga.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(../flags/1x1/ga.svg)}.flag-icon-gb{background-image:url(../flags/4x3/gb.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(../flags/1x1/gb.svg)}.flag-icon-gd{background-image:url(../flags/4x3/gd.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(../flags/1x1/gd.svg)}.flag-icon-ge{background-image:url(../flags/4x3/ge.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(../flags/1x1/ge.svg)}.flag-icon-gf{background-image:url(../flags/4x3/gf.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(../flags/1x1/gf.svg)}.flag-icon-gg{background-image:url(../flags/4x3/gg.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(../flags/1x1/gg.svg)}.flag-icon-gh{background-image:url(../flags/4x3/gh.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(../flags/1x1/gh.svg)}.flag-icon-gi{background-image:url(../flags/4x3/gi.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(../flags/1x1/gi.svg)}.flag-icon-gl{background-image:url(../flags/4x3/gl.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(../flags/1x1/gl.svg)}.flag-icon-gm{background-image:url(../flags/4x3/gm.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(../flags/1x1/gm.svg)}.flag-icon-gn{background-image:url(../flags/4x3/gn.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(../flags/1x1/gn.svg)}.flag-icon-gp{background-image:url(../flags/4x3/gp.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(../flags/1x1/gp.svg)}.flag-icon-gq{background-image:url(../flags/4x3/gq.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(../flags/1x1/gq.svg)}.flag-icon-gr{background-image:url(../flags/4x3/gr.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(../flags/1x1/gr.svg)}.flag-icon-gs{background-image:url(../flags/4x3/gs.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(../flags/1x1/gs.svg)}.flag-icon-gt{background-image:url(../flags/4x3/gt.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(../flags/1x1/gt.svg)}.flag-icon-gu{background-image:url(../flags/4x3/gu.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(../flags/1x1/gu.svg)}.flag-icon-gw{background-image:url(../flags/4x3/gw.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(../flags/1x1/gw.svg)}.flag-icon-gy{background-image:url(../flags/4x3/gy.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(../flags/1x1/gy.svg)}.flag-icon-hk{background-image:url(../flags/4x3/hk.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(../flags/1x1/hk.svg)}.flag-icon-hm{background-image:url(../flags/4x3/hm.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(../flags/1x1/hm.svg)}.flag-icon-hn{background-image:url(../flags/4x3/hn.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(../flags/1x1/hn.svg)}.flag-icon-hr{background-image:url(../flags/4x3/hr.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(../flags/1x1/hr.svg)}.flag-icon-ht{background-image:url(../flags/4x3/ht.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(../flags/1x1/ht.svg)}.flag-icon-hu{background-image:url(../flags/4x3/hu.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(../flags/1x1/hu.svg)}.flag-icon-id{background-image:url(../flags/4x3/id.svg)}.flag-icon-id.flag-icon-squared{background-image:url(../flags/1x1/id.svg)}.flag-icon-ie{background-image:url(../flags/4x3/ie.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(../flags/1x1/ie.svg)}.flag-icon-il{background-image:url(../flags/4x3/il.svg)}.flag-icon-il.flag-icon-squared{background-image:url(../flags/1x1/il.svg)}.flag-icon-im{background-image:url(../flags/4x3/im.svg)}.flag-icon-im.flag-icon-squared{background-image:url(../flags/1x1/im.svg)}.flag-icon-in{background-image:url(../flags/4x3/in.svg)}.flag-icon-in.flag-icon-squared{background-image:url(../flags/1x1/in.svg)}.flag-icon-io{background-image:url(../flags/4x3/io.svg)}.flag-icon-io.flag-icon-squared{background-image:url(../flags/1x1/io.svg)}.flag-icon-iq{background-image:url(../flags/4x3/iq.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(../flags/1x1/iq.svg)}.flag-icon-ir{background-image:url(../flags/4x3/ir.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(../flags/1x1/ir.svg)}.flag-icon-is{background-image:url(../flags/4x3/is.svg)}.flag-icon-is.flag-icon-squared{background-image:url(../flags/1x1/is.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-it.flag-icon-squared{background-image:url(../flags/1x1/it.svg)}.flag-icon-je{background-image:url(../flags/4x3/je.svg)}.flag-icon-je.flag-icon-squared{background-image:url(../flags/1x1/je.svg)}.flag-icon-jm{background-image:url(../flags/4x3/jm.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(../flags/1x1/jm.svg)}.flag-icon-jo{background-image:url(../flags/4x3/jo.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(../flags/1x1/jo.svg)}.flag-icon-jp{background-image:url(../flags/4x3/jp.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(../flags/1x1/jp.svg)}.flag-icon-ke{background-image:url(../flags/4x3/ke.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(../flags/1x1/ke.svg)}.flag-icon-kg{background-image:url(../flags/4x3/kg.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(../flags/1x1/kg.svg)}.flag-icon-kh{background-image:url(../flags/4x3/kh.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(../flags/1x1/kh.svg)}.flag-icon-ki{background-image:url(../flags/4x3/ki.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(../flags/1x1/ki.svg)}.flag-icon-km{background-image:url(../flags/4x3/km.svg)}.flag-icon-km.flag-icon-squared{background-image:url(../flags/1x1/km.svg)}.flag-icon-kn{background-image:url(../flags/4x3/kn.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(../flags/1x1/kn.svg)}.flag-icon-kp{background-image:url(../flags/4x3/kp.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(../flags/1x1/kp.svg)}.flag-icon-kr{background-image:url(../flags/4x3/kr.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(../flags/1x1/kr.svg)}.flag-icon-kw{background-image:url(../flags/4x3/kw.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(../flags/1x1/kw.svg)}.flag-icon-ky{background-image:url(../flags/4x3/ky.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(../flags/1x1/ky.svg)}.flag-icon-kz{background-image:url(../flags/4x3/kz.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(../flags/1x1/kz.svg)}.flag-icon-la{background-image:url(../flags/4x3/la.svg)}.flag-icon-la.flag-icon-squared{background-image:url(../flags/1x1/la.svg)}.flag-icon-lb{background-image:url(../flags/4x3/lb.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(../flags/1x1/lb.svg)}.flag-icon-lc{background-image:url(../flags/4x3/lc.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(../flags/1x1/lc.svg)}.flag-icon-li{background-image:url(../flags/4x3/li.svg)}.flag-icon-li.flag-icon-squared{background-image:url(../flags/1x1/li.svg)}.flag-icon-lk{background-image:url(../flags/4x3/lk.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(../flags/1x1/lk.svg)}.flag-icon-lr{background-image:url(../flags/4x3/lr.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(../flags/1x1/lr.svg)}.flag-icon-ls{background-image:url(../flags/4x3/ls.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(../flags/1x1/ls.svg)}.flag-icon-lt{background-image:url(../flags/4x3/lt.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(../flags/1x1/lt.svg)}.flag-icon-lu{background-image:url(../flags/4x3/lu.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(../flags/1x1/lu.svg)}.flag-icon-lv{background-image:url(../flags/4x3/lv.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(../flags/1x1/lv.svg)}.flag-icon-ly{background-image:url(../flags/4x3/ly.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(../flags/1x1/ly.svg)}.flag-icon-ma{background-image:url(../flags/4x3/ma.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(../flags/1x1/ma.svg)}.flag-icon-mc{background-image:url(../flags/4x3/mc.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(../flags/1x1/mc.svg)}.flag-icon-md{background-image:url(../flags/4x3/md.svg)}.flag-icon-md.flag-icon-squared{background-image:url(../flags/1x1/md.svg)}.flag-icon-me{background-image:url(../flags/4x3/me.svg)}.flag-icon-me.flag-icon-squared{background-image:url(../flags/1x1/me.svg)}.flag-icon-mf{background-image:url(../flags/4x3/mf.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(../flags/1x1/mf.svg)}.flag-icon-mg{background-image:url(../flags/4x3/mg.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(../flags/1x1/mg.svg)}.flag-icon-mh{background-image:url(../flags/4x3/mh.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(../flags/1x1/mh.svg)}.flag-icon-mk{background-image:url(../flags/4x3/mk.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(../flags/1x1/mk.svg)}.flag-icon-ml{background-image:url(../flags/4x3/ml.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(../flags/1x1/ml.svg)}.flag-icon-mm{background-image:url(../flags/4x3/mm.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(../flags/1x1/mm.svg)}.flag-icon-mn{background-image:url(../flags/4x3/mn.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(../flags/1x1/mn.svg)}.flag-icon-mo{background-image:url(../flags/4x3/mo.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(../flags/1x1/mo.svg)}.flag-icon-mp{background-image:url(../flags/4x3/mp.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(../flags/1x1/mp.svg)}.flag-icon-mq{background-image:url(../flags/4x3/mq.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(../flags/1x1/mq.svg)}.flag-icon-mr{background-image:url(../flags/4x3/mr.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(../flags/1x1/mr.svg)}.flag-icon-ms{background-image:url(../flags/4x3/ms.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(../flags/1x1/ms.svg)}.flag-icon-mt{background-image:url(../flags/4x3/mt.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(../flags/1x1/mt.svg)}.flag-icon-mu{background-image:url(../flags/4x3/mu.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(../flags/1x1/mu.svg)}.flag-icon-mv{background-image:url(../flags/4x3/mv.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(../flags/1x1/mv.svg)}.flag-icon-mw{background-image:url(../flags/4x3/mw.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(../flags/1x1/mw.svg)}.flag-icon-mx{background-image:url(../flags/4x3/mx.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(../flags/1x1/mx.svg)}.flag-icon-my{background-image:url(../flags/4x3/my.svg)}.flag-icon-my.flag-icon-squared{background-image:url(../flags/1x1/my.svg)}.flag-icon-mz{background-image:url(../flags/4x3/mz.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(../flags/1x1/mz.svg)}.flag-icon-na{background-image:url(../flags/4x3/na.svg)}.flag-icon-na.flag-icon-squared{background-image:url(../flags/1x1/na.svg)}.flag-icon-nc{background-image:url(../flags/4x3/nc.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(../flags/1x1/nc.svg)}.flag-icon-ne{background-image:url(../flags/4x3/ne.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(../flags/1x1/ne.svg)}.flag-icon-nf{background-image:url(../flags/4x3/nf.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(../flags/1x1/nf.svg)}.flag-icon-ng{background-image:url(../flags/4x3/ng.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(../flags/1x1/ng.svg)}.flag-icon-ni{background-image:url(../flags/4x3/ni.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(../flags/1x1/ni.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(../flags/1x1/nl.svg)}.flag-icon-no{background-image:url(../flags/4x3/no.svg)}.flag-icon-no.flag-icon-squared{background-image:url(../flags/1x1/no.svg)}.flag-icon-np{background-image:url(../flags/4x3/np.svg)}.flag-icon-np.flag-icon-squared{background-image:url(../flags/1x1/np.svg)}.flag-icon-nr{background-image:url(../flags/4x3/nr.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(../flags/1x1/nr.svg)}.flag-icon-nu{background-image:url(../flags/4x3/nu.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(../flags/1x1/nu.svg)}.flag-icon-nz{background-image:url(../flags/4x3/nz.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(../flags/1x1/nz.svg)}.flag-icon-om{background-image:url(../flags/4x3/om.svg)}.flag-icon-om.flag-icon-squared{background-image:url(../flags/1x1/om.svg)}.flag-icon-pa{background-image:url(../flags/4x3/pa.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(../flags/1x1/pa.svg)}.flag-icon-pe{background-image:url(../flags/4x3/pe.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(../flags/1x1/pe.svg)}.flag-icon-pf{background-image:url(../flags/4x3/pf.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(../flags/1x1/pf.svg)}.flag-icon-pg{background-image:url(../flags/4x3/pg.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(../flags/1x1/pg.svg)}.flag-icon-ph{background-image:url(../flags/4x3/ph.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(../flags/1x1/ph.svg)}.flag-icon-pk{background-image:url(../flags/4x3/pk.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(../flags/1x1/pk.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(../flags/1x1/pl.svg)}.flag-icon-pm{background-image:url(../flags/4x3/pm.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(../flags/1x1/pm.svg)}.flag-icon-pn{background-image:url(../flags/4x3/pn.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(../flags/1x1/pn.svg)}.flag-icon-pr{background-image:url(../flags/4x3/pr.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(../flags/1x1/pr.svg)}.flag-icon-ps{background-image:url(../flags/4x3/ps.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(../flags/1x1/ps.svg)}.flag-icon-pt{background-image:url(../flags/4x3/pt.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(../flags/1x1/pt.svg)}.flag-icon-pw{background-image:url(../flags/4x3/pw.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(../flags/1x1/pw.svg)}.flag-icon-py{background-image:url(../flags/4x3/py.svg)}.flag-icon-py.flag-icon-squared{background-image:url(../flags/1x1/py.svg)}.flag-icon-qa{background-image:url(../flags/4x3/qa.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(../flags/1x1/qa.svg)}.flag-icon-re{background-image:url(../flags/4x3/re.svg)}.flag-icon-re.flag-icon-squared{background-image:url(../flags/1x1/re.svg)}.flag-icon-ro{background-image:url(../flags/4x3/ro.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(../flags/1x1/ro.svg)}.flag-icon-rs{background-image:url(../flags/4x3/rs.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(../flags/1x1/rs.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(../flags/1x1/ru.svg)}.flag-icon-rw{background-image:url(../flags/4x3/rw.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(../flags/1x1/rw.svg)}.flag-icon-sa{background-image:url(../flags/4x3/sa.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(../flags/1x1/sa.svg)}.flag-icon-sb{background-image:url(../flags/4x3/sb.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(../flags/1x1/sb.svg)}.flag-icon-sc{background-image:url(../flags/4x3/sc.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(../flags/1x1/sc.svg)}.flag-icon-sd{background-image:url(../flags/4x3/sd.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(../flags/1x1/sd.svg)}.flag-icon-se{background-image:url(../flags/4x3/se.svg)}.flag-icon-se.flag-icon-squared{background-image:url(../flags/1x1/se.svg)}.flag-icon-sg{background-image:url(../flags/4x3/sg.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(../flags/1x1/sg.svg)}.flag-icon-sh{background-image:url(../flags/4x3/sh.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(../flags/1x1/sh.svg)}.flag-icon-si{background-image:url(../flags/4x3/si.svg)}.flag-icon-si.flag-icon-squared{background-image:url(../flags/1x1/si.svg)}.flag-icon-sj{background-image:url(../flags/4x3/sj.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(../flags/1x1/sj.svg)}.flag-icon-sk{background-image:url(../flags/4x3/sk.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(../flags/1x1/sk.svg)}.flag-icon-sl{background-image:url(../flags/4x3/sl.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(../flags/1x1/sl.svg)}.flag-icon-sm{background-image:url(../flags/4x3/sm.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(../flags/1x1/sm.svg)}.flag-icon-sn{background-image:url(../flags/4x3/sn.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(../flags/1x1/sn.svg)}.flag-icon-so{background-image:url(../flags/4x3/so.svg)}.flag-icon-so.flag-icon-squared{background-image:url(../flags/1x1/so.svg)}.flag-icon-sr{background-image:url(../flags/4x3/sr.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(../flags/1x1/sr.svg)}.flag-icon-ss{background-image:url(../flags/4x3/ss.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(../flags/1x1/ss.svg)}.flag-icon-st{background-image:url(../flags/4x3/st.svg)}.flag-icon-st.flag-icon-squared{background-image:url(../flags/1x1/st.svg)}.flag-icon-sv{background-image:url(../flags/4x3/sv.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(../flags/1x1/sv.svg)}.flag-icon-sx{background-image:url(../flags/4x3/sx.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(../flags/1x1/sx.svg)}.flag-icon-sy{background-image:url(../flags/4x3/sy.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(../flags/1x1/sy.svg)}.flag-icon-sz{background-image:url(../flags/4x3/sz.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(../flags/1x1/sz.svg)}.flag-icon-tc{background-image:url(../flags/4x3/tc.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(../flags/1x1/tc.svg)}.flag-icon-td{background-image:url(../flags/4x3/td.svg)}.flag-icon-td.flag-icon-squared{background-image:url(../flags/1x1/td.svg)}.flag-icon-tf{background-image:url(../flags/4x3/tf.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(../flags/1x1/tf.svg)}.flag-icon-tg{background-image:url(../flags/4x3/tg.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(../flags/1x1/tg.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-th.flag-icon-squared{background-image:url(../flags/1x1/th.svg)}.flag-icon-tj{background-image:url(../flags/4x3/tj.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(../flags/1x1/tj.svg)}.flag-icon-tk{background-image:url(../flags/4x3/tk.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(../flags/1x1/tk.svg)}.flag-icon-tl{background-image:url(../flags/4x3/tl.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(../flags/1x1/tl.svg)}.flag-icon-tm{background-image:url(../flags/4x3/tm.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(../flags/1x1/tm.svg)}.flag-icon-tn{background-image:url(../flags/4x3/tn.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(../flags/1x1/tn.svg)}.flag-icon-to{background-image:url(../flags/4x3/to.svg)}.flag-icon-to.flag-icon-squared{background-image:url(../flags/1x1/to.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(../flags/1x1/tr.svg)}.flag-icon-tt{background-image:url(../flags/4x3/tt.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(../flags/1x1/tt.svg)}.flag-icon-tv{background-image:url(../flags/4x3/tv.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(../flags/1x1/tv.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(../flags/1x1/tw.svg)}.flag-icon-tz{background-image:url(../flags/4x3/tz.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(../flags/1x1/tz.svg)}.flag-icon-ua{background-image:url(../flags/4x3/ua.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(../flags/1x1/ua.svg)}.flag-icon-ug{background-image:url(../flags/4x3/ug.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(../flags/1x1/ug.svg)}.flag-icon-um{background-image:url(../flags/4x3/um.svg)}.flag-icon-um.flag-icon-squared{background-image:url(../flags/1x1/um.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}.flag-icon-us.flag-icon-squared{background-image:url(../flags/1x1/us.svg)}.flag-icon-uy{background-image:url(../flags/4x3/uy.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(../flags/1x1/uy.svg)}.flag-icon-uz{background-image:url(../flags/4x3/uz.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(../flags/1x1/uz.svg)}.flag-icon-va{background-image:url(../flags/4x3/va.svg)}.flag-icon-va.flag-icon-squared{background-image:url(../flags/1x1/va.svg)}.flag-icon-vc{background-image:url(../flags/4x3/vc.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(../flags/1x1/vc.svg)}.flag-icon-ve{background-image:url(../flags/4x3/ve.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(../flags/1x1/ve.svg)}.flag-icon-vg{background-image:url(../flags/4x3/vg.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(../flags/1x1/vg.svg)}.flag-icon-vi{background-image:url(../flags/4x3/vi.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(../flags/1x1/vi.svg)}.flag-icon-vn{background-image:url(../flags/4x3/vn.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(../flags/1x1/vn.svg)}.flag-icon-vu{background-image:url(../flags/4x3/vu.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(../flags/1x1/vu.svg)}.flag-icon-wf{background-image:url(../flags/4x3/wf.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(../flags/1x1/wf.svg)}.flag-icon-ws{background-image:url(../flags/4x3/ws.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(../flags/1x1/ws.svg)}.flag-icon-ye{background-image:url(../flags/4x3/ye.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(../flags/1x1/ye.svg)}.flag-icon-yt{background-image:url(../flags/4x3/yt.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(../flags/1x1/yt.svg)}.flag-icon-za{background-image:url(../flags/4x3/za.svg)}.flag-icon-za.flag-icon-squared{background-image:url(../flags/1x1/za.svg)}.flag-icon-zm{background-image:url(../flags/4x3/zm.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(../flags/1x1/zm.svg)}.flag-icon-zw{background-image:url(../flags/4x3/zw.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(../flags/1x1/zw.svg)}.flag-icon-es-ca{background-image:url(../flags/4x3/es-ca.svg)}.flag-icon-es-ca.flag-icon-squared{background-image:url(../flags/1x1/es-ca.svg)}.flag-icon-es-ga{background-image:url(../flags/4x3/es-ga.svg)}.flag-icon-es-ga.flag-icon-squared{background-image:url(../flags/1x1/es-ga.svg)}.flag-icon-eu{background-image:url(../flags/4x3/eu.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(../flags/1x1/eu.svg)}.flag-icon-gb-eng{background-image:url(../flags/4x3/gb-eng.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(../flags/1x1/gb-eng.svg)}.flag-icon-gb-nir{background-image:url(../flags/4x3/gb-nir.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(../flags/1x1/gb-nir.svg)}.flag-icon-gb-sct{background-image:url(../flags/4x3/gb-sct.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(../flags/1x1/gb-sct.svg)}.flag-icon-gb-wls{background-image:url(../flags/4x3/gb-wls.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(../flags/1x1/gb-wls.svg)}.flag-icon-un{background-image:url(../flags/4x3/un.svg)}.flag-icon-un.flag-icon-squared{background-image:url(../flags/1x1/un.svg)}.flag-icon-xk{background-image:url(../flags/4x3/xk.svg)}.flag-icon-xk.flag-icon-squared{background-image:url(../flags/1x1/xk.svg)} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ad.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ad.svg deleted file mode 100644 index e7fc56abbc..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ad.svg +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ae.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ae.svg deleted file mode 100644 index 739c5d4646..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ae.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/af.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/af.svg deleted file mode 100644 index 90c34b8d5a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/af.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ag.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ag.svg deleted file mode 100644 index d0b2a83cbe..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ag.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ai.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ai.svg deleted file mode 100644 index 472be200e7..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ai.svg +++ /dev/null @@ -1,763 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/al.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/al.svg deleted file mode 100644 index 75995ecde6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/al.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/am.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/am.svg deleted file mode 100644 index 1198be035f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/am.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ao.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ao.svg deleted file mode 100644 index a5a25bf107..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ao.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aq.svg deleted file mode 100644 index 80e682abd6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aq.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ar.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ar.svg deleted file mode 100644 index 1730ecac9e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ar.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/as.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/as.svg deleted file mode 100644 index b8d8162d0a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/as.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/at.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/at.svg deleted file mode 100644 index 649d6efe0a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/at.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/au.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/au.svg deleted file mode 100644 index ca5d607ea0..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/au.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aw.svg deleted file mode 100644 index 248a08d69b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aw.svg +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ax.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ax.svg deleted file mode 100644 index cdeb07e273..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ax.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/az.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/az.svg deleted file mode 100644 index 0119e1ab4e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/az.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ba.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ba.svg deleted file mode 100644 index 5b92b0ab54..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ba.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bb.svg deleted file mode 100644 index 9d627842f1..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bb.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bd.svg deleted file mode 100644 index 4cb38cf503..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bd.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/be.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/be.svg deleted file mode 100644 index 01496c3cac..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/be.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bf.svg deleted file mode 100644 index a3c7c44a4f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bf.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bg.svg deleted file mode 100644 index 5abe67f642..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bg.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bh.svg deleted file mode 100644 index 22fba621a9..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bh.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bi.svg deleted file mode 100644 index cc11dcff2c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bi.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bj.svg deleted file mode 100644 index 07c4c117ca..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bj.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bl.svg deleted file mode 100644 index 0fa74e1c3c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bl.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bm.svg deleted file mode 100644 index a7057d24c0..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bm.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bn.svg deleted file mode 100644 index 2e93aea326..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bn.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bo.svg deleted file mode 100644 index 52a534fe2b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bo.svg +++ /dev/null @@ -1,678 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bq.svg deleted file mode 100644 index cc872ef1b8..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bq.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/br.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/br.svg deleted file mode 100644 index 8353e823fc..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/br.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bs.svg deleted file mode 100644 index decdebb1ef..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bs.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bt.svg deleted file mode 100644 index 3bbbfaac74..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bt.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bv.svg deleted file mode 100644 index 01c9ee147d..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bv.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bw.svg deleted file mode 100644 index 0bc5d3d34f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bw.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/by.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/by.svg deleted file mode 100644 index 73e14f7a23..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/by.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bz.svg deleted file mode 100644 index 0e9a27ca6a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bz.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ca.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ca.svg deleted file mode 100644 index 6882f6da65..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ca.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cc.svg deleted file mode 100644 index dd6e20003e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cc.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cd.svg deleted file mode 100644 index 5da2a96892..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cd.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cf.svg deleted file mode 100644 index e924621528..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cf.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cg.svg deleted file mode 100644 index a52ba7e211..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cg.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ch.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ch.svg deleted file mode 100644 index 773cdc8a3e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ch.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ci.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ci.svg deleted file mode 100644 index bd1e3f4141..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ci.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ck.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ck.svg deleted file mode 100644 index f2df0dbe34..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ck.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cl.svg deleted file mode 100644 index b808896721..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cl.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cm.svg deleted file mode 100644 index 08b710bb87..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cm.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cn.svg deleted file mode 100644 index 7873c1b4fa..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cn.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/co.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/co.svg deleted file mode 100644 index 18d1c5f450..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/co.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cr.svg deleted file mode 100644 index a60a6dd614..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cr.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cu.svg deleted file mode 100644 index 396817620d..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cu.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cv.svg deleted file mode 100644 index a8311b2f83..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cv.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cw.svg deleted file mode 100644 index d7ba21865b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cw.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cx.svg deleted file mode 100644 index ef82c45363..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cx.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cy.svg deleted file mode 100644 index ba2b0f8908..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cy.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cz.svg deleted file mode 100644 index 9557b6e88d..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cz.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/de.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/de.svg deleted file mode 100644 index b9ea8a6134..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/de.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dj.svg deleted file mode 100644 index 3f6b2e4f35..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dj.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dk.svg deleted file mode 100644 index 51ff69feb0..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dk.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dm.svg deleted file mode 100644 index 405a4b6b96..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dm.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/do.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/do.svg deleted file mode 100644 index 03d3f3547b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/do.svg +++ /dev/null @@ -1,6745 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dz.svg deleted file mode 100644 index 37df0c8bba..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dz.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ec.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ec.svg deleted file mode 100644 index 65fd0bad2e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ec.svg +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ee.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ee.svg deleted file mode 100644 index fbc9e33943..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ee.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eg.svg deleted file mode 100644 index 2965b6afa0..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eg.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eh.svg deleted file mode 100644 index 4c3feba1b3..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eh.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/er.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/er.svg deleted file mode 100644 index 86343349e3..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/er.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg deleted file mode 100644 index 2a50685ddb..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg deleted file mode 100644 index 5c55ff855b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es.svg deleted file mode 100644 index d7030eb292..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es.svg +++ /dev/null @@ -1,547 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/et.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/et.svg deleted file mode 100644 index 8b02f6b7ca..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/et.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eu.svg deleted file mode 100644 index b031d2d336..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eu.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fi.svg deleted file mode 100644 index aff1304c6b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fi.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fj.svg deleted file mode 100644 index 9d9c3029e1..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fj.svg +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fk.svg deleted file mode 100644 index 12a34c46dc..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fk.svg +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fm.svg deleted file mode 100644 index 791fde9929..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fm.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fo.svg deleted file mode 100644 index b28915c013..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fo.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fr.svg deleted file mode 100644 index f8e3ca0d57..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fr.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ga.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ga.svg deleted file mode 100644 index 16c81b3029..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ga.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg deleted file mode 100644 index 18026d2941..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg deleted file mode 100644 index 6d8a3a3974..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg deleted file mode 100644 index 6987b0886b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg deleted file mode 100644 index 3931a17954..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb.svg deleted file mode 100644 index ef048dc2a1..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gd.svg deleted file mode 100644 index cca37ba483..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gd.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ge.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ge.svg deleted file mode 100644 index ac1d87bb49..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ge.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gf.svg deleted file mode 100644 index c00a576342..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gf.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gg.svg deleted file mode 100644 index 2d06a9f86f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gg.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gh.svg deleted file mode 100644 index 4b6446d645..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gh.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gi.svg deleted file mode 100644 index 39f5b2770c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gi.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gl.svg deleted file mode 100644 index 7a026d995f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gl.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gm.svg deleted file mode 100644 index b06ab6cb58..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gm.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gn.svg deleted file mode 100644 index 8f8855da4b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gn.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gp.svg deleted file mode 100644 index 0a5bdb0056..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gp.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gq.svg deleted file mode 100644 index 8149406de4..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gq.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gr.svg deleted file mode 100644 index 4bc68fc1fa..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gr.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gs.svg deleted file mode 100644 index 48f68b8b67..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gs.svg +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - L - - - E - - - O - - - T - - - E - - - R - - - R - - - R - - - R - - - R - - - E - - - O - - - O - - - A - - - A - - - A - - - M - - - P - - - P - - - P - - - I - - - T - - - T - - - M - - - G - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gt.svg deleted file mode 100644 index 761801ca47..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gt.svg +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gu.svg deleted file mode 100644 index d6f5d535ca..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gu.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - G - - - U - - - A - - - M - - - - - - - - G - - - U - - - A - - - M - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gw.svg deleted file mode 100644 index 064a593473..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gw.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gy.svg deleted file mode 100644 index 57eb520903..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gy.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hk.svg deleted file mode 100644 index 024c070555..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hk.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hm.svg deleted file mode 100644 index 7e1f7e7e64..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hm.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hn.svg deleted file mode 100644 index c7c4c4acfd..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hn.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hr.svg deleted file mode 100644 index 7ea00410d5..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hr.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ht.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ht.svg deleted file mode 100644 index 920833a66e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ht.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hu.svg deleted file mode 100644 index 94bc29f134..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hu.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/id.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/id.svg deleted file mode 100644 index 6d2cf0941e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/id.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ie.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ie.svg deleted file mode 100644 index 60448a9ded..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ie.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/il.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/il.svg deleted file mode 100644 index 6cb4b1c1f7..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/il.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/im.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/im.svg deleted file mode 100644 index 0f487f67d7..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/im.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/in.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/in.svg deleted file mode 100644 index e6557cd01a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/in.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/io.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/io.svg deleted file mode 100644 index 4d809e03e6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/io.svg +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/iq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/iq.svg deleted file mode 100644 index 6b96774d97..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/iq.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ir.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ir.svg deleted file mode 100644 index 79f66324f1..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ir.svg +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/is.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/is.svg deleted file mode 100644 index 08d1e68383..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/is.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/it.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/it.svg deleted file mode 100644 index 615c58fb8f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/it.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/je.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/je.svg deleted file mode 100644 index c63ccb29ec..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/je.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jm.svg deleted file mode 100644 index c261da0971..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jm.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jo.svg deleted file mode 100644 index ab1c62aaa1..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jo.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jp.svg deleted file mode 100644 index dc7a64a5c7..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jp.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ke.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ke.svg deleted file mode 100644 index 0b82f3a6c3..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ke.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kg.svg deleted file mode 100644 index 71ee7b8df5..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kg.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kh.svg deleted file mode 100644 index 8c888f1681..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kh.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ki.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ki.svg deleted file mode 100644 index bfc5ccab46..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ki.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/km.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/km.svg deleted file mode 100644 index 8f842ea8c0..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/km.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kn.svg deleted file mode 100644 index 4b2a2488be..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kn.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kp.svg deleted file mode 100644 index 8eda6be874..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kp.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kr.svg deleted file mode 100644 index 2db51b02a6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kr.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kw.svg deleted file mode 100644 index 3d4047fff5..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kw.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ky.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ky.svg deleted file mode 100644 index b4ae00aa86..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ky.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kz.svg deleted file mode 100644 index f17bd6e0f8..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kz.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/la.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/la.svg deleted file mode 100644 index 1e7686a935..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/la.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lb.svg deleted file mode 100644 index a047b0b948..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lb.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lc.svg deleted file mode 100644 index b13b8852aa..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lc.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/li.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/li.svg deleted file mode 100644 index cbed5cc84c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/li.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lk.svg deleted file mode 100644 index 2b112155f6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lk.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lr.svg deleted file mode 100644 index 0ae34e7282..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lr.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ls.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ls.svg deleted file mode 100644 index e71bb5bb70..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ls.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lt.svg deleted file mode 100644 index aa96cf3236..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lt.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lu.svg deleted file mode 100644 index 6293671602..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lu.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lv.svg deleted file mode 100644 index 5556de1a3d..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lv.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ly.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ly.svg deleted file mode 100644 index fe0ed81b60..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ly.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ma.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ma.svg deleted file mode 100644 index 85c99b3b9e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ma.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mc.svg deleted file mode 100644 index d38822ddac..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mc.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/md.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/md.svg deleted file mode 100644 index 86b2a96149..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/md.svg +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/me.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/me.svg deleted file mode 100644 index 56a19ed0a0..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/me.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mf.svg deleted file mode 100644 index 310afce407..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mf.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mg.svg deleted file mode 100644 index f0375cc6be..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mg.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mh.svg deleted file mode 100644 index 97f34631af..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mh.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mk.svg deleted file mode 100644 index da2e9a4c40..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mk.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ml.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ml.svg deleted file mode 100644 index 1e4d98900c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ml.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mm.svg deleted file mode 100644 index 5076184c32..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mm.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mn.svg deleted file mode 100644 index 568fda088a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mn.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mo.svg deleted file mode 100644 index 83d04ea28a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mp.svg deleted file mode 100644 index 54a0ede9f2..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mp.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mq.svg deleted file mode 100644 index 7a69fb5842..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mq.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mr.svg deleted file mode 100644 index 7da23e5f4e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mr.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ms.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ms.svg deleted file mode 100644 index d7d910d020..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ms.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mt.svg deleted file mode 100644 index 96acc15e73..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mt.svg +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mu.svg deleted file mode 100644 index 773d3d59ee..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mu.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mv.svg deleted file mode 100644 index aa5ed5333e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mv.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mw.svg deleted file mode 100644 index a9521a08c1..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mw.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mx.svg deleted file mode 100644 index a440656807..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mx.svg +++ /dev/null @@ -1,378 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/my.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/my.svg deleted file mode 100644 index 7ebe064b74..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/my.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mz.svg deleted file mode 100644 index 113a205792..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mz.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/na.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/na.svg deleted file mode 100644 index b934fc157c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/na.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nc.svg deleted file mode 100644 index 2bdf6ee5b5..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nc.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ne.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ne.svg deleted file mode 100644 index e76e44c0bb..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ne.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nf.svg deleted file mode 100644 index 21495222f6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nf.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ng.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ng.svg deleted file mode 100644 index 57d65d380a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ng.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ni.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ni.svg deleted file mode 100644 index 8f68d42255..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ni.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nl.svg deleted file mode 100644 index 9db233dd4b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nl.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/no.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/no.svg deleted file mode 100644 index 08ea5728d2..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/no.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/np.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/np.svg deleted file mode 100644 index f34ee8c638..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/np.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nr.svg deleted file mode 100644 index 282d80fa14..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nr.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nu.svg deleted file mode 100644 index aced440dc1..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nu.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nz.svg deleted file mode 100644 index 5283a96ed4..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nz.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/om.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/om.svg deleted file mode 100644 index 055d1e6986..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/om.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pa.svg deleted file mode 100644 index 57965b9ea2..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pa.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pe.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pe.svg deleted file mode 100644 index 40b87badbb..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pe.svg +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pf.svg deleted file mode 100644 index 94ff90cb2c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pf.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pg.svg deleted file mode 100644 index 7397754182..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pg.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ph.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ph.svg deleted file mode 100644 index 681cf23ff5..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ph.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pk.svg deleted file mode 100644 index 06b6022f0c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pk.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pl.svg deleted file mode 100644 index f7c12a1843..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pl.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pm.svg deleted file mode 100644 index 3d4014a414..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pm.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pn.svg deleted file mode 100644 index 47b0749a0a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pn.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pr.svg deleted file mode 100644 index 79cf4c0991..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pr.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ps.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ps.svg deleted file mode 100644 index 7c1ea3f9a6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ps.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pt.svg deleted file mode 100644 index 425515054a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pt.svg +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pw.svg deleted file mode 100644 index 83bc3f71d5..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pw.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/py.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/py.svg deleted file mode 100644 index 88f55e6f02..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/py.svg +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/qa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/qa.svg deleted file mode 100644 index 0bf30ea37f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/qa.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/re.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/re.svg deleted file mode 100644 index 027c9f32ce..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/re.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ro.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ro.svg deleted file mode 100644 index 994992ab66..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ro.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rs.svg deleted file mode 100644 index 3270f304c4..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rs.svg +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ru.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ru.svg deleted file mode 100644 index d643087430..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ru.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rw.svg deleted file mode 100644 index 26e41f6ad7..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rw.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sa.svg deleted file mode 100644 index 1cc41b80bf..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sa.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sb.svg deleted file mode 100644 index f61bafd6a9..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sb.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sc.svg deleted file mode 100644 index 65d8943d64..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sc.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sd.svg deleted file mode 100644 index 72a729708b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sd.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/se.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/se.svg deleted file mode 100644 index e824395ebb..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/se.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sg.svg deleted file mode 100644 index 1444e5b6ab..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sg.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sh.svg deleted file mode 100644 index 599a09d73b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sh.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/si.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/si.svg deleted file mode 100644 index 6de77ef473..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/si.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sj.svg deleted file mode 100644 index f4e5829735..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sj.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sk.svg deleted file mode 100644 index fd728680b0..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sk.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sl.svg deleted file mode 100644 index 18c76d781b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sl.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sm.svg deleted file mode 100644 index 1ed18eed6c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sm.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - L - - - I - - - B - - - E - - - R - - - T - - - A - - - S - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sn.svg deleted file mode 100644 index fbbad5e026..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sn.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/so.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/so.svg deleted file mode 100644 index 96d88a992a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/so.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sr.svg deleted file mode 100644 index a0ca03e367..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sr.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ss.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ss.svg deleted file mode 100644 index 7e6a47ffd9..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ss.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/st.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/st.svg deleted file mode 100644 index da5df2990d..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/st.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sv.svg deleted file mode 100644 index 65b44baeec..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sv.svg +++ /dev/null @@ -1,596 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sx.svg deleted file mode 100644 index 5d9fadfa2e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sx.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sy.svg deleted file mode 100644 index 904dc1f65c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sy.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sz.svg deleted file mode 100644 index b3009e4d92..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sz.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tc.svg deleted file mode 100644 index 1029615f55..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tc.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/td.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/td.svg deleted file mode 100644 index e3e81ce2fd..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/td.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tf.svg deleted file mode 100644 index 2061867c96..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tf.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tg.svg deleted file mode 100644 index 2c1fd98fd4..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tg.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/th.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/th.svg deleted file mode 100644 index 86850f5fbf..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/th.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tj.svg deleted file mode 100644 index 853a4a4555..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tj.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tk.svg deleted file mode 100644 index c5ff6b4cb4..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tk.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tl.svg deleted file mode 100644 index ec6d44bd13..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tl.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tm.svg deleted file mode 100644 index d856424fe6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tm.svg +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tn.svg deleted file mode 100644 index d46a1cd9aa..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tn.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/to.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/to.svg deleted file mode 100644 index 201d6bc39d..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/to.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tr.svg deleted file mode 100644 index 861d4ea580..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tr.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tt.svg deleted file mode 100644 index 87e439a07d..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tt.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tv.svg deleted file mode 100644 index f30c8f3710..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tv.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tw.svg deleted file mode 100644 index 5f284fc612..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tw.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tz.svg deleted file mode 100644 index f993ff15d6..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tz.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ua.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ua.svg deleted file mode 100644 index 18ebe0d49d..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ua.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ug.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ug.svg deleted file mode 100644 index d9be945945..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ug.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/um.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/um.svg deleted file mode 100644 index 25b08ce6ab..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/um.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/un.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/un.svg deleted file mode 100644 index 1d50ea9250..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/un.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/us.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/us.svg deleted file mode 100644 index 31f90c6c3a..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/us.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uy.svg deleted file mode 100644 index 0194a7cb0b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uy.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uz.svg deleted file mode 100644 index 641af1b826..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uz.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/va.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/va.svg deleted file mode 100644 index 7da6d3e739..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/va.svg +++ /dev/null @@ -1,479 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vc.svg deleted file mode 100644 index ee72f781ac..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vc.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ve.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ve.svg deleted file mode 100644 index 205fe848a3..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ve.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vg.svg deleted file mode 100644 index 9572de3480..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vg.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vi.svg deleted file mode 100644 index 2740f24ffa..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vi.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vn.svg deleted file mode 100644 index 6b158145ad..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vn.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vu.svg deleted file mode 100644 index 397d30e60b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vu.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/wf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/wf.svg deleted file mode 100644 index bb726a7c2e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/wf.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ws.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ws.svg deleted file mode 100644 index 155ad7b558..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ws.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/xk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/xk.svg deleted file mode 100644 index 69146ca449..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/xk.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ye.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ye.svg deleted file mode 100644 index d49d2c414e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ye.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/yt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/yt.svg deleted file mode 100644 index 7bf3837379..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/yt.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/za.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/za.svg deleted file mode 100644 index 9bae96fe3e..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/za.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zm.svg deleted file mode 100644 index 105f1076ad..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zm.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zw.svg deleted file mode 100644 index ca5b7a20f9..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zw.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index dd66675d2c..a88f57f3b1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -8,14 +8,13 @@ - - - - - - - - + + + + + + + @@ -24,12 +23,12 @@
Loading...
- - - - - - + + + + + + From cb8357c520dc45d02b553b8bb7e8bf941149f3ea Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 3 Nov 2020 19:10:40 +0300 Subject: [PATCH 38/62] build: add @ngneat/inspector to devDependencies --- npm/ng-packs/package.json | 1 + npm/ng-packs/yarn.lock | 129 ++++++++++++++++++++++---------------- 2 files changed, 75 insertions(+), 55 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 9ce382c01f..33abdb7d94 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -54,6 +54,7 @@ "@angular/router": "~10.1.2", "@fortawesome/fontawesome-free": "^5.14.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", + "@ngneat/inspector": "^1.0.0", "@ngneat/spectator": "^5.13.0", "@ngx-validate/core": "^0.0.12", "@ngxs/devtools-plugin": "^3.7.0", diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index c23b6f2c88..cf075a5875 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,20 +2,20 @@ # yarn lockfile v1 -"@abp/ng.account@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.3.0.tgz#db36a62b9b3106096a95844c5f8c8df664dc68f0" - integrity sha512-jJuGUIsQL4rBgpr8TqnEKp9PKtrl4KooeizeQIQWrm4JwC0ZQRyo1PB+D3mDI6sPXQo4Uc2YA14nRSGJ9OSdXA== +"@abp/ng.account@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.3.1.tgz#e660ede11f2e73b62f9a58ada24afe38836056b3" + integrity sha512-IJeCB+Y8IeZIF54f406OYw/Bsg0hGSLbYC9X0up/o0Lwm16+UTCZOXVBQ4OifIf8mmWLDlX81zO2KX68fEm97g== dependencies: - "@abp/ng.theme.shared" "~3.3.0" + "@abp/ng.theme.shared" "~3.3.1" tslib "^2.0.0" -"@abp/ng.core@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.3.0.tgz#dd013e171c18a66eede4b8404211d69f09a60533" - integrity sha512-ERH1XyAY1tviWctyYKL8w/9stGogcN5g2ty/6OdZf3dUPcN2MrjXt8o8nRdvA7yUfP4VFKH8xl7qAnSMO+5iCQ== +"@abp/ng.core@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.3.1.tgz#230518da3cd1a8b4efef85df9d4d07e5c66b2549" + integrity sha512-x2zD3zhK5YD9EaV1p8AEboj9yoqzYCvyOkb7YDDBNR1VP2v+m7T8NRASBHkVrGZLwLkyd/qwOBUjEitz8XAbUA== dependencies: - "@abp/utils" "^3.3.0-rc.2" + "@abp/utils" "^3.3.0" "@angular/localize" "~10.0.10" "@ngxs/router-plugin" "^3.7.0" "@ngxs/storage-plugin" "^3.7.0" @@ -27,35 +27,35 @@ ts-toolbelt "6.15.4" tslib "^2.0.0" -"@abp/ng.feature-management@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.3.0.tgz#6f83895acd8cf2bb163cc5260404eab86d6d7a4d" - integrity sha512-XjCEDw1aiQ9zt8McEazqx+lgbtMicQn2KAq/Z45G3Pp138twvT7nDYKwEy3Zo/kzeaQcZYya9/xNP6r7aSnI4A== +"@abp/ng.feature-management@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.3.1.tgz#b4497d999e87049b266473daf8d274d5fb26b248" + integrity sha512-SdUrZ67bGJQZ0RchS7bcA5wSF6PiD3hcJwsReWzw49nM2Qr8vbHlsstXww6slvq8nT5gwC6O0OA71zsHarpHfg== dependencies: - "@abp/ng.theme.shared" "~3.3.0" + "@abp/ng.theme.shared" "~3.3.1" tslib "^2.0.0" -"@abp/ng.identity@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.3.0.tgz#587b81e806d35185bee0a72cc400969c0992a8bc" - integrity sha512-AzIMkWpiHSVdq4E8n6LNl/QXZHn0KNB3Ok6cfOVIPWWUl1NuTmdG3UdGOZAXGOm9bQmflbTKbBZcdhLOzHlLGw== +"@abp/ng.identity@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.3.1.tgz#e357e8bb1281e4fcbdeb20ef9d288eee6b274d3c" + integrity sha512-NjCmLdHUQtyGWPqIBo0OVSxUeQ4laQ501xPsJYZG7WOWmMJGTkBQKIFkUAG8gLKv8EDTIzBuVs8V8scr+EUSiw== dependencies: - "@abp/ng.permission-management" "~3.3.0" - "@abp/ng.theme.shared" "~3.3.0" + "@abp/ng.permission-management" "~3.3.1" + "@abp/ng.theme.shared" "~3.3.1" tslib "^2.0.0" -"@abp/ng.permission-management@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.3.0.tgz#c686dca6d80fa5dafe9d940accf4b91853743ec1" - integrity sha512-jHVmgsZ06umNuMp9Uj1SWXm9dz7UNKMyDZjYrbWuG0S8ciwCCmykfOar0C+BK1kvycJXXJw2VKd0Kj36/57FxQ== +"@abp/ng.permission-management@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.3.1.tgz#2870a517b00b266c064df0914f0c4227c83677d7" + integrity sha512-69h0MLXOOQ9Iav4drwg1P6dcA+tl7+Vgt34IGJW1o0Aj0pYBlqBZQqq8IOW2g/xVLRE8qkfRnmoyAGBQfbJkTA== dependencies: - "@abp/ng.theme.shared" "~3.3.0" + "@abp/ng.theme.shared" "~3.3.1" tslib "^2.0.0" -"@abp/ng.schematics@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.3.0.tgz#b2e05826e19fa8096ca11f2117ff81061fbde24f" - integrity sha512-WSIDGoxX2HGtIpLY6uMpX0r/vOClilN478sHKdzX4OL3yXetdvrRp8evB87EOteP4r5DbRIjpWk3GEbknlyeEg== +"@abp/ng.schematics@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.3.1.tgz#ca5588574a6bbe10551d828ae0940b2004bdd3b2" + integrity sha512-1altHVHSWL0RLXKcsVltSqAUdiqxFItBYReR8YniJT7nQNOy+QeWiwX6H+Epv79K3m0Uf7G1d3fH1uCM6Qqq4A== dependencies: "@angular-devkit/core" "~10.0.3" "@angular-devkit/schematics" "~10.0.3" @@ -63,37 +63,37 @@ jsonc-parser "^2.3.0" typescript "~3.9.2" -"@abp/ng.setting-management@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.3.0.tgz#a53a370e201760570945e9130c7e85bdfcb48ac8" - integrity sha512-54EhudWaXrN0e7bFXNBVkK3bwEM6A/y8OF79Q9//YCD7eB56KvNdP4XXdSRKUfH7P9bvxJn/bmSAZcRQ1uk9Ww== +"@abp/ng.setting-management@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.3.1.tgz#f89ed79ab5b6348a5bd57a8699ee6298279e30ec" + integrity sha512-TGIeAUemaKEFcC/HG6d9JEYOG9EIYTry1goAKJReI0CShrykZUM5WPHe3wK0CQIqgI6MChVSYeq4yC+oyl8JnQ== dependencies: - "@abp/ng.theme.shared" "~3.3.0" + "@abp/ng.theme.shared" "~3.3.1" tslib "^2.0.0" -"@abp/ng.tenant-management@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.3.0.tgz#c5479c3d2b17a96308f8e2e87907dd405003fb5d" - integrity sha512-NPqTP2vU40IxZ0sQ8QNEgl5okptwf6J99Vkl1ELYwa8ztEnfBBo94gK/1q+I8CiQHp3fr//3ycrimPRszW/CCQ== +"@abp/ng.tenant-management@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.3.1.tgz#315fdc5980adddbc9d561fba15bed6c27d8203ec" + integrity sha512-dehegHTe459UCc+45G0yL/ptGBk4xDk+Nl5DIRKDyf0k7l5HZstS5UrWwOAY8JO2SECUB5RjX33yvqt2/nxt4Q== dependencies: - "@abp/ng.feature-management" "~3.3.0" - "@abp/ng.theme.shared" "~3.3.0" + "@abp/ng.feature-management" "~3.3.1" + "@abp/ng.theme.shared" "~3.3.1" tslib "^2.0.0" -"@abp/ng.theme.basic@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.3.0.tgz#c216c344273a2f816fa723ddcb3840e416dc5a5d" - integrity sha512-BiwpYd8C5ZL0ew8eVwtpC+nXoSNaP64tJkw1CJScvgJ0fPRiVPddFzgEd3PDFPjqeWtupN1Q8pyp5ng7vqOOpA== +"@abp/ng.theme.basic@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.3.1.tgz#e9d711c3d1895a481d15409f35e52608d71259fc" + integrity sha512-DcAdBQNdgpkEGhFHXClBJIfTOuG43AQkk6o4yzaglCkYKQDuJ4XRtbRdFQNb/we/OtdIFHQtxVLEeqrMTZYYcQ== dependencies: - "@abp/ng.theme.shared" "~3.3.0" + "@abp/ng.theme.shared" "~3.3.1" tslib "^2.0.0" -"@abp/ng.theme.shared@~3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.3.0.tgz#08c6af4ca5877d5cad0a49e002889938b7904c70" - integrity sha512-2X1O+JAUQWlFmuTWm/bHypHEVN084g6w4cVWUuum7+X2Fk01LVRjnJPwCEIRklS3teFoTX/IbKZXG24wVC6liA== +"@abp/ng.theme.shared@~3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.3.1.tgz#694453546b4e4147a9f89058570dbbef81ef1196" + integrity sha512-21wJPa/cNBU3OoLiact4w1sHnQpsm0R5JUD6pRCzp14EyPN3QgOY8JC+/YgGuasKY2xm5pvgbgIdTryy9j4IyQ== dependencies: - "@abp/ng.core" "~3.3.0" + "@abp/ng.core" "~3.3.1" "@fortawesome/fontawesome-free" "^5.14.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ngx-validate/core" "^0.0.12" @@ -109,10 +109,10 @@ dependencies: just-compare "^1.3.0" -"@abp/utils@^3.3.0-rc.2": - version "3.3.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.0-rc.2.tgz#f7b8ce37a88ee870212c39fb7bc1aa112ae41765" - integrity sha512-Q9ZB1Qiosz7WbeVS5fqUHdu6GvsnZyzOzJFNCD4rmN80hfDcEWgh5va9LZLO2EZiqZvHlDkOn9UlXzGU1ecbSA== +"@abp/utils@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd" + integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA== dependencies: just-compare "^1.3.0" @@ -2402,6 +2402,15 @@ dependencies: tslib "^2.0.0" +"@ngneat/inspector@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@ngneat/inspector/-/inspector-1.0.0.tgz#88e0f645f4292df8e050320e2855ce327c710b64" + integrity sha512-FO3iUcFdDEvc2IDgGfF490C3GI9O6dnPQZhBrwA3NNE7bMX0pvC/5fdSQh5wewVqu+1+1NpuT2+3aTjiam3FFQ== + dependencies: + ace-builds "^1.4.12" + tinykeys "^1.1.0" + tslib "^2.0.0" + "@ngneat/spectator@^5.13.0": version "5.13.3" resolved "https://registry.yarnpkg.com/@ngneat/spectator/-/spectator-5.13.3.tgz#e02104fcd6938c921d6a792601ec609e665eafda" @@ -3172,6 +3181,11 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +ace-builds@^1.4.12: + version "1.4.12" + resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.12.tgz#888efa386e36f4345f40b5233fcc4fe4c588fae7" + integrity sha512-G+chJctFPiiLGvs3+/Mly3apXTcfgE45dT5yp12BcWZ1kUs+gm0qd3/fv4gsz6fVag4mM0moHVpjHDIgph6Psg== + acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -12922,6 +12936,11 @@ tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= +tinykeys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tinykeys/-/tinykeys-1.1.1.tgz#2535e8b24c8e2be447dd0ee1cff656ef435cd63d" + integrity sha512-YEA1TGMlkMabXI0NGddRFti+c1eMO2QP7wefwibSz0Pip8sA+d99yX5Pp7pK7wUeTKmrF4ys4XZVz44YydlTYg== + tmp@0.0.30: version "0.0.30" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" From 0b90e75f94101794753d190191982fc538a4136b Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 3 Nov 2020 19:11:21 +0300 Subject: [PATCH 39/62] feat: import InspectorModule when in dev mode --- npm/ng-packs/apps/dev-app/src/app/app.module.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index 4ad16e13e8..461275f255 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -8,6 +8,7 @@ import { ThemeSharedModule } from '@abp/ng.theme.shared'; import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { InspectorModule } from '@ngneat/inspector'; import { NgxsLoggerPluginModule } from '@ngxs/logger-plugin'; import { NgxsModule } from '@ngxs/store'; import { environment } from '../environments/environment'; @@ -15,7 +16,10 @@ import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { APP_ROUTE_PROVIDER } from './route.provider'; -const LOGGERS = [NgxsLoggerPluginModule.forRoot({ disabled: true })]; +const INSPECTION_TOOLS = [ + NgxsLoggerPluginModule.forRoot({ disabled: true }), + InspectorModule.forRoot(), +]; @NgModule({ imports: [ @@ -34,7 +38,7 @@ const LOGGERS = [NgxsLoggerPluginModule.forRoot({ disabled: true })]; SettingManagementConfigModule.forRoot(), NgxsModule.forRoot(), ThemeBasicModule.forRoot(), - ...(environment.production ? [] : LOGGERS), + ...(environment.production ? [] : INSPECTION_TOOLS), ], providers: [APP_ROUTE_PROVIDER], declarations: [AppComponent], From 4b88df691fba28a1fe1a714c7299ca2a9e966752 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 3 Nov 2020 19:20:13 +0300 Subject: [PATCH 40/62] fix: #6024 --- .../Themes/Basic/FirstLevelNavMenuItem.razor | 4 ++-- .../Pages/Identity/RoleManagement.razor | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor index 574a684213..31090ac092 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor @@ -15,7 +15,7 @@ { if (MenuItem.Icon.StartsWith("fa")) { - + } } @MenuItem.DisplayName @@ -32,7 +32,7 @@ else { if (MenuItem.Icon.StartsWith("fa")) { - + } } @MenuItem.DisplayName diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index f1b0a53a5e..d0d21346f2 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -56,11 +56,11 @@ @(context.Name) @if (context.IsDefault) { - @L["DisplayName:IsDefault"] + @L["DisplayName:IsDefault"] } @if (context.IsPublic) { - @L["DisplayName:IsPublic"] + @L["DisplayName:IsPublic"] } From a5104699cbd306529f0732174f06a6801677ffb6 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 3 Nov 2020 19:31:24 +0300 Subject: [PATCH 41/62] fix: #5822 --- .../Pages/Identity/RoleManagement.razor | 92 +++-- .../Pages/Identity/UserManagement.razor | 378 +++++++++--------- 2 files changed, 239 insertions(+), 231 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor index d0d21346f2..410ccc2cae 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor @@ -73,52 +73,17 @@ - - @L["NewRole"] - - - - - - - @L["DisplayName:RoleName"] - - - - - - - - - @L["DisplayName:IsDefault"] - @L["DisplayName:IsPublic"] - - - - - - - - - -} -@* ************************* EDIT MODAL ************************* *@ -@if (HasUpdatePermission) -{ - - - +
- @L["Edit"] - + @L["NewRole"] + - - + @L["DisplayName:RoleName"] - + @@ -126,15 +91,54 @@ - @L["DisplayName:IsDefault"] - @L["DisplayName:IsPublic"] + @L["DisplayName:IsDefault"] + @L["DisplayName:IsPublic"] - - + + +
+
+
+} +@* ************************* EDIT MODAL ************************* *@ +@if (HasUpdatePermission) +{ + + + +
+ + @L["Edit"] + + + + + + + + @L["DisplayName:RoleName"] + + + + + + + + + @L["DisplayName:IsDefault"] + @L["DisplayName:IsPublic"] + + + + + + + +
} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 8f8d872fc6..6f26d28a8b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -74,103 +74,105 @@ - - @L["NewUser"] - - - - - - - @L["UserInformations"] - @L["Roles"] - - - - - - @L["DisplayName:UserName"] - - - - - - - - - - @L["DisplayName:Name"] - - - - - - - - - - @L["DisplayName:Surname"] - - - - - - - - - - @L["DisplayName:Password"] - - - - - - - - - - @L["DisplayName:Email"] - - - - - - - - +
+ + @L["NewUser"] + + + + + + + @L["UserInformations"] + @L["Roles"] + + + + + + @L["DisplayName:UserName"] + + + + + + + + + + @L["DisplayName:Name"] + + + + + + + + + + @L["DisplayName:Surname"] + + + + + + + + + + @L["DisplayName:Password"] + + + + + + + + + + @L["DisplayName:Email"] + + + + + + + + + + @L["DisplayName:PhoneNumber"] + + + + + + + - @L["DisplayName:PhoneNumber"] - - - - - + @L["DisplayName:LockoutEnabled"] - - - @L["DisplayName:LockoutEnabled"] - - - - @if (NewUserRoles != null) - { - @foreach (var role in NewUserRoles) + + + @if (NewUserRoles != null) { - - - @role.Name - + @foreach (var role in NewUserRoles) + { + + + @role.Name + + } } - } - - - - - - - - - + + + + + + + + + +
} @@ -181,105 +183,107 @@ - - @L["Edit"] - - - - - +
+ + @L["Edit"] + + + + + - - - @L["UserInformations"] - @L["Roles"] - - - - - - @L["DisplayName:UserName"] - - - - - - - - - - @L["DisplayName:Name"] - - - - - - - - - - @L["DisplayName:Surname"] - - - - - - - - - - @L["DisplayName:Password"] - - - - - - - - - - @L["DisplayName:Email"] - - - - - - - - + + + @L["UserInformations"] + @L["Roles"] + + + + + + @L["DisplayName:UserName"] + + + + + + + + + + @L["DisplayName:Name"] + + + + + + + + + + @L["DisplayName:Surname"] + + + + + + + + + + @L["DisplayName:Password"] + + + + + + + + + + @L["DisplayName:Email"] + + + + + + + + + + @L["DisplayName:PhoneNumber"] + + + + + + + - @L["DisplayName:PhoneNumber"] - - - - - + @L["DisplayName:LockoutEnabled"] - - - @L["DisplayName:LockoutEnabled"] - - - - @if (EditUserRoles != null) - { - @foreach (var role in EditUserRoles) + + + @if (EditUserRoles != null) { - - - @role.Name - + @foreach (var role in EditUserRoles) + { + + + @role.Name + + } } - } - - - - - - - - - + + + + + + + + + +
} From 01a7c4738508aa348784964e73d6c1ed4eeec314 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 3 Nov 2020 22:11:02 +0300 Subject: [PATCH 42/62] Update AbpCrudPageBase.cs --- framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index ffd93e6954..57337f0155 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -204,7 +204,7 @@ namespace Volo.Abp.BlazoriseUI EditingEntity = new TUpdateViewModel(); } - protected async override Task OnInitializedAsync() + protected override async Task OnInitializedAsync() { await SetBreadcrumbItemsAsync(); await SetPermissionsAsync(); From 2c8a68be228d9c4ecfee189b86e4171b1244eb42 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Nov 2020 12:52:20 +0800 Subject: [PATCH 43/62] Make readonly for Creation audit properties of the entities. Resolve #6020 --- .../Volo/Abp/Auditing/AuditPropertySetter.cs | 6 +- .../Volo/Abp/Auditing/IHasCreationTime.cs | 4 +- .../Volo/Abp/Auditing/IMayHaveCreator.cs | 6 +- .../Volo/Abp/Auditing/IMustHaveCreator.cs | 6 +- .../Volo.Abp.Core/Volo/Abp/ObjectHelper.cs | 57 ++++++++++++++ .../Auditing/AuditedAggregateRootWithUser.cs | 6 +- .../Auditing/AuditedEntityWithUser.cs | 6 +- .../Auditing/CreationAuditedAggregateRoot.cs | 4 +- .../CreationAuditedAggregateRootWithUser.cs | 6 +- .../Auditing/CreationAuditedEntity.cs | 10 +-- .../Auditing/CreationAuditedEntityWithUser.cs | 6 +- .../FullAuditedAggregateRootWithUser.cs | 6 +- .../Auditing/FullAuditedEntityWithUser.cs | 8 +- .../Volo/Abp/Domain/Entities/EntityHelper.cs | 44 +++-------- .../Volo/Abp/ObjectHelper_Tests.cs | 78 +++++++++++++++++++ 15 files changed, 184 insertions(+), 69 deletions(-) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs create mode 100644 framework/test/Volo.Abp.Core.Tests/Volo/Abp/ObjectHelper_Tests.cs diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs index 1863c8f938..841a7f63de 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs @@ -48,7 +48,7 @@ namespace Volo.Abp.Auditing if (objectWithCreationTime.CreationTime == default) { - objectWithCreationTime.CreationTime = Clock.Now; + ObjectHelper.TrySetProperty(objectWithCreationTime, x => x.CreationTime, () => Clock.Now); } } @@ -82,7 +82,7 @@ namespace Volo.Abp.Auditing return; } - mayHaveCreatorObject.CreatorId = CurrentUser.Id; + ObjectHelper.TrySetProperty(mayHaveCreatorObject, x => x.CreatorId, () => CurrentUser.Id); } else if (targetObject is IMustHaveCreator mustHaveCreatorObject) { @@ -91,7 +91,7 @@ namespace Volo.Abp.Auditing return; } - mustHaveCreatorObject.CreatorId = CurrentUser.Id.Value; + ObjectHelper.TrySetProperty(mustHaveCreatorObject, x => x.CreatorId, () => CurrentUser.Id.Value); } } diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IHasCreationTime.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IHasCreationTime.cs index 58e64cabef..07e9a7525b 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IHasCreationTime.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IHasCreationTime.cs @@ -10,6 +10,6 @@ namespace Volo.Abp.Auditing /// /// Creation time. /// - DateTime CreationTime { get; set; } + DateTime CreationTime { get; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMayHaveCreator.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMayHaveCreator.cs index 7960827d77..4fb4f9f49d 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMayHaveCreator.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMayHaveCreator.cs @@ -9,7 +9,7 @@ namespace Volo.Abp.Auditing /// Reference to the creator. ///
[CanBeNull] - TCreator Creator { get; set; } + TCreator Creator { get; } } /// @@ -20,6 +20,6 @@ namespace Volo.Abp.Auditing /// /// Id of the creator. /// - Guid? CreatorId { get; set; } + Guid? CreatorId { get; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMustHaveCreator.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMustHaveCreator.cs index 87671f97d6..14c6050dcd 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMustHaveCreator.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMustHaveCreator.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Auditing /// Reference to the creator. /// [NotNull] - TCreator Creator { get; set; } + TCreator Creator { get; } } /// @@ -23,6 +23,6 @@ namespace Volo.Abp.Auditing /// /// Id of the creator. /// - Guid CreatorId { get; set; } + Guid CreatorId { get; } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs new file mode 100644 index 0000000000..643c950b8a --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; + +namespace Volo.Abp +{ + public static class ObjectHelper + { + private static readonly ConcurrentDictionary CachedObjectProperties = + new ConcurrentDictionary(); + + public static void TrySetProperty( + TObject obj, + Expression> propertySelector, + Func valueFactory, + params Type[] ignoreAttributeTypes) + { + TrySetProperty(obj, propertySelector, x => valueFactory(), ignoreAttributeTypes); + } + + public static void TrySetProperty( + TObject obj, + Expression> propertySelector, + Func valueFactory, + params Type[] ignoreAttributeTypes) + { + var property = CachedObjectProperties.GetOrAdd( + $"{obj.GetType().FullName}-{propertySelector}{(ignoreAttributeTypes != null ? string.Join("-", ignoreAttributeTypes.Select(x => x.FullName)) : "")}", () => + { + if (propertySelector.Body.NodeType != ExpressionType.MemberAccess) + { + return null; + } + + var memberExpression = propertySelector.Body.As(); + + var propertyInfo = obj.GetType().GetProperties().FirstOrDefault(x => x.Name == memberExpression.Member.Name && x.DeclaringType == obj.GetType()); + if (propertyInfo == null || propertyInfo.GetSetMethod(true) == null) + { + return null; + } + + if (ignoreAttributeTypes != null && ignoreAttributeTypes.Any(ignoreAttribute => propertyInfo.IsDefined(ignoreAttribute, true))) + { + return null; + } + + return propertyInfo; + }); + + property?.SetValue(obj, valueFactory(obj)); + } + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs index 477f8750fd..69e6961630 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Domain.Entities.Auditing where TUser : IEntity { /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } /// public virtual TUser LastModifier { get; set; } @@ -28,7 +28,7 @@ namespace Volo.Abp.Domain.Entities.Auditing where TUser : IEntity { /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } /// public virtual TUser LastModifier { get; set; } @@ -44,4 +44,4 @@ namespace Volo.Abp.Domain.Entities.Auditing } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs index cc54209595..1aa12a17da 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.Domain.Entities.Auditing where TUser : IEntity { /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } /// public virtual TUser LastModifier { get; set; } @@ -28,7 +28,7 @@ namespace Volo.Abp.Domain.Entities.Auditing where TUser : IEntity { /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } /// public virtual TUser LastModifier { get; set; } @@ -44,4 +44,4 @@ namespace Volo.Abp.Domain.Entities.Auditing } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs index 084c907606..4e42738b85 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs @@ -10,10 +10,10 @@ namespace Volo.Abp.Domain.Entities.Auditing public abstract class CreationAuditedAggregateRoot : AggregateRoot, ICreationAuditedObject { /// - public virtual DateTime CreationTime { get; set; } + public virtual DateTime CreationTime { get; protected set; } /// - public virtual Guid? CreatorId { get; set; } + public virtual Guid? CreatorId { get; protected set; } } /// diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs index 7d491d7be1..f576ba8452 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.Domain.Entities.Auditing public abstract class CreationAuditedAggregateRootWithUser : CreationAuditedAggregateRoot, ICreationAuditedObject { /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } } /// @@ -23,7 +23,7 @@ namespace Volo.Abp.Domain.Entities.Auditing public abstract class CreationAuditedAggregateRootWithUser : CreationAuditedAggregateRoot, ICreationAuditedObject { /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } protected CreationAuditedAggregateRootWithUser() { @@ -36,4 +36,4 @@ namespace Volo.Abp.Domain.Entities.Auditing } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs index 41802c78b7..d039318fc1 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs @@ -10,10 +10,10 @@ namespace Volo.Abp.Domain.Entities.Auditing public abstract class CreationAuditedEntity : Entity, ICreationAuditedObject { /// - public virtual DateTime CreationTime { get; set; } + public virtual DateTime CreationTime { get; protected set; } /// - public virtual Guid? CreatorId { get; set; } + public virtual Guid? CreatorId { get; protected set; } } /// @@ -24,10 +24,10 @@ namespace Volo.Abp.Domain.Entities.Auditing public abstract class CreationAuditedEntity : Entity, ICreationAuditedObject { /// - public virtual DateTime CreationTime { get; set; } + public virtual DateTime CreationTime { get; protected set; } /// - public virtual Guid? CreatorId { get; set; } + public virtual Guid? CreatorId { get; protected set; } protected CreationAuditedEntity() { @@ -40,4 +40,4 @@ namespace Volo.Abp.Domain.Entities.Auditing } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs index 45d844efa7..c193f9486c 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.Domain.Entities.Auditing public abstract class CreationAuditedEntityWithUser : CreationAuditedEntity, ICreationAuditedObject { /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } } /// @@ -23,7 +23,7 @@ namespace Volo.Abp.Domain.Entities.Auditing public abstract class CreationAuditedEntityWithUser : CreationAuditedEntity, ICreationAuditedObject { /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } protected CreationAuditedEntityWithUser() { @@ -36,4 +36,4 @@ namespace Volo.Abp.Domain.Entities.Auditing } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs index c6bfefbb23..312c3abd51 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Domain.Entities.Auditing public virtual TUser Deleter { get; set; } /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } /// public virtual TUser LastModifier { get; set; } @@ -34,7 +34,7 @@ namespace Volo.Abp.Domain.Entities.Auditing public virtual TUser Deleter { get; set; } /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } /// public virtual TUser LastModifier { get; set; } @@ -50,4 +50,4 @@ namespace Volo.Abp.Domain.Entities.Auditing } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs index f7ec2b672f..1ce198304d 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Domain.Entities.Auditing public virtual TUser Deleter { get; set; } /// - public virtual TUser Creator { get; set; } + public virtual TUser Creator { get; protected set; } /// public virtual TUser LastModifier { get; set; } @@ -34,8 +34,8 @@ namespace Volo.Abp.Domain.Entities.Auditing public virtual TUser Deleter { get; set; } /// - public virtual TUser Creator { get; set; } - + public virtual TUser Creator { get; protected set; } + /// public virtual TUser LastModifier { get; set; } @@ -50,4 +50,4 @@ namespace Volo.Abp.Domain.Entities.Auditing } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs index 65f2992257..0175498c9f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs @@ -13,11 +13,8 @@ namespace Volo.Abp.Domain.Entities /// /// Some helper methods for entities. /// - public static class EntityHelper + public static partial class EntityHelper { - private static readonly ConcurrentDictionary CachedIdProperties = - new ConcurrentDictionary(); - public static bool EntityEquals(IEntity entity1, IEntity entity2) { if (entity1 == null || entity2 == null) @@ -77,7 +74,7 @@ namespace Volo.Abp.Domain.Entities { var entity1Key = entity1Keys[i]; var entity2Key = entity2Keys[i]; - + if (entity1Key == null) { if (entity2Key == null) @@ -89,13 +86,13 @@ namespace Volo.Abp.Domain.Entities //entity2Key is not null! return false; } - + if (entity2Key == null) { //entity1Key was not null! return false; } - + if (TypeHelper.IsDefaultValue(entity1Key) && TypeHelper.IsDefaultValue(entity2Key)) { return false; @@ -241,30 +238,13 @@ namespace Volo.Abp.Domain.Entities Func idFactory, bool checkForDisableIdGenerationAttribute = false) { - var property = CachedIdProperties.GetOrAdd( - $"{entity.GetType().FullName}-{checkForDisableIdGenerationAttribute}", () => - { - var idProperty = entity - .GetType() - .GetProperties() - .FirstOrDefault(x => x.Name == nameof(entity.Id) && - x.GetSetMethod(true) != null); - - if (idProperty == null) - { - return null; - } - - if (checkForDisableIdGenerationAttribute && - idProperty.IsDefined(typeof(DisableIdGenerationAttribute), true)) - { - return null; - } - - return idProperty; - }); - - property?.SetValue(entity, idFactory()); + ObjectHelper.TrySetProperty( + entity, + x => x.Id, + idFactory, + checkForDisableIdGenerationAttribute + ? new Type[] { typeof(DisableIdGenerationAttribute) } + : new Type[] { }); } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/ObjectHelper_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/ObjectHelper_Tests.cs new file mode 100644 index 0000000000..facefbe915 --- /dev/null +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/ObjectHelper_Tests.cs @@ -0,0 +1,78 @@ +using System.Runtime.Serialization; +using Shouldly; +using Xunit; + +namespace Volo.Abp +{ + public class ObjectHelper_Tests + { + [Fact] + public void TrySetProperty_Test() + { + var testClass = new MyClass(); + + ObjectHelper.TrySetProperty(testClass, x => x.Name, () => "NewName"); + testClass.Name.ShouldBe("NewName"); + + ObjectHelper.TrySetProperty(testClass, x => x.Name2, () => "NewName2"); + testClass.Name2.ShouldBe("NewName2"); + + ObjectHelper.TrySetProperty(testClass, x => x.Name3, () => "NewName3"); + testClass.Name3.ShouldBe("NewName3"); + + ObjectHelper.TrySetProperty(testClass, x => x.Name4, () => "NewName4"); + testClass.Name4.ShouldBe("Name4"); // readonly + + ObjectHelper.TrySetProperty(testClass, x => x.Name5, () => "NewName5", ignoreAttributeTypes: typeof(IgnoreDataMemberAttribute)); + testClass.Name5.ShouldNotBe("NewName5"); // ignore by attribute + + ObjectHelper.TrySetProperty(testClass, x => x.ChildClass.Name, () => "NewChildName"); + testClass.ChildClass.Name.ShouldNotBe("NewChildName"); + + ObjectHelper.TrySetProperty(testClass.ChildClass, x => x.Name, () => "NewChildName"); + testClass.ChildClass.Name.ShouldBe("NewChildName"); + + ObjectHelper.TrySetProperty(testClass.ChildClass, x => x, () => new MyChildClass + { + Name = "NewChildName" + }); + testClass.ChildClass.Name.ShouldBe("NewChildName"); + } + + class MyClass + { + public string Name { get; set; } + + public string Name2 { get; protected set; } + + public string Name3 { get; private set; } + + public string Name4 { get; } + + [IgnoreDataMember] + public string Name5 { get; } + + public MyChildClass ChildClass { get; set; } + + public MyClass() + { + Name = "Name"; + Name2 = "Name2"; + Name3 = "Name3"; + Name4 = "Name4"; + Name5 = "Name5"; + ChildClass = new MyChildClass(); + } + } + + class MyChildClass + { + public string Name { get; set; } + + public MyChildClass() + { + Name = "Name"; + } + } + } +} From 467e9e8ad362cd4429eaada9dfb7b12c3c10b1b1 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Nov 2020 12:53:47 +0800 Subject: [PATCH 44/62] Update EntityHelper.cs --- .../Volo/Abp/Domain/Entities/EntityHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs index 0175498c9f..5e81e2270d 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.Domain.Entities /// /// Some helper methods for entities. /// - public static partial class EntityHelper + public static class EntityHelper { public static bool EntityEquals(IEntity entity1, IEntity entity2) { From 3383a4b2fc8448a81725469ab1af038062520e21 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Nov 2020 13:16:48 +0800 Subject: [PATCH 45/62] Beautify ObjectHelper class. --- .../Volo.Abp.Core/Volo/Abp/ObjectHelper.cs | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs index 643c950b8a..9f9e8f3fe8 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs @@ -27,29 +27,36 @@ namespace Volo.Abp Func valueFactory, params Type[] ignoreAttributeTypes) { - var property = CachedObjectProperties.GetOrAdd( - $"{obj.GetType().FullName}-{propertySelector}{(ignoreAttributeTypes != null ? string.Join("-", ignoreAttributeTypes.Select(x => x.FullName)) : "")}", () => + var cacheKey = $"{obj.GetType().FullName}-" + + $"{propertySelector}-" + + $"{(ignoreAttributeTypes != null ? "-" + string.Join("-", ignoreAttributeTypes.Select(x => x.FullName)) : "")}"; + + var property = CachedObjectProperties.GetOrAdd(cacheKey, () => + { + if (propertySelector.Body.NodeType != ExpressionType.MemberAccess) + { + return null; + } + + var memberExpression = propertySelector.Body.As(); + + var propertyInfo = obj.GetType().GetProperties().FirstOrDefault(x => + x.Name == memberExpression.Member.Name && + x.GetSetMethod(true) != null); + + if (propertyInfo == null) + { + return null; + } + + if (ignoreAttributeTypes != null && + ignoreAttributeTypes.Any(ignoreAttribute => propertyInfo.IsDefined(ignoreAttribute, true))) { - if (propertySelector.Body.NodeType != ExpressionType.MemberAccess) - { - return null; - } - - var memberExpression = propertySelector.Body.As(); - - var propertyInfo = obj.GetType().GetProperties().FirstOrDefault(x => x.Name == memberExpression.Member.Name && x.DeclaringType == obj.GetType()); - if (propertyInfo == null || propertyInfo.GetSetMethod(true) == null) - { - return null; - } - - if (ignoreAttributeTypes != null && ignoreAttributeTypes.Any(ignoreAttribute => propertyInfo.IsDefined(ignoreAttribute, true))) - { - return null; - } - - return propertyInfo; - }); + return null; + } + + return propertyInfo; + }); property?.SetValue(obj, valueFactory(obj)); } From 2ccb988538ac1f280666a565229ebd766e1e0f16 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Nov 2020 15:47:47 +0800 Subject: [PATCH 46/62] Add IMongoClient to the IAbpMongoDbContext. Resolve #6036 resolve #4886 --- .../Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs | 6 ++++-- .../Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs | 2 ++ .../Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs | 6 +++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs index e961fdf256..5e7eb84111 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using MongoDB.Bson; using MongoDB.Driver; using Volo.Abp.DependencyInjection; @@ -9,6 +8,8 @@ namespace Volo.Abp.MongoDB { public IMongoModelSource ModelSource { get; set; } + public IMongoClient Client { get; private set; } + public IMongoDatabase Database { get; private set; } public IClientSessionHandle SessionHandle { get; private set; } @@ -18,9 +19,10 @@ namespace Volo.Abp.MongoDB } - public virtual void InitializeDatabase(IMongoDatabase database, IClientSessionHandle sessionHandle) + public virtual void InitializeDatabase(IMongoDatabase database, IMongoClient client, IClientSessionHandle sessionHandle) { Database = database; + Client = client; SessionHandle = sessionHandle; } diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs index c4049e1389..008c4d5fef 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs @@ -4,6 +4,8 @@ namespace Volo.Abp.MongoDB { public interface IAbpMongoDbContext { + IMongoClient Client { get; } + IMongoDatabase Database { get; } IMongoCollection Collection(); diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 0d9969ee51..d3d8a419fb 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -59,7 +59,7 @@ namespace Volo.Abp.Uow.MongoDB } var dbContext = unitOfWork.ServiceProvider.GetRequiredService(); - dbContext.ToAbpMongoDbContext().InitializeDatabase(database, null); + dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, null); return dbContext; } @@ -90,11 +90,11 @@ namespace Volo.Abp.Uow.MongoDB new MongoDbTransactionApi(session) ); - dbContext.ToAbpMongoDbContext().InitializeDatabase(database, session); + dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, session); } else { - dbContext.ToAbpMongoDbContext().InitializeDatabase(database, activeTransaction.SessionHandle); + dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, activeTransaction.SessionHandle); } return dbContext; From a9e33bfd2d21f2840f5a5dfc3e278cb383c4b0b9 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Nov 2020 16:10:45 +0800 Subject: [PATCH 47/62] Remove duplicate TrySetId method. --- .../Volo/Abp/Domain/Entities/EntityHelper.cs | 31 ------------------- .../JsonConverters/EntityJsonConverter.cs | 3 +- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs index b778ec2b67..ecb9252779 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs @@ -266,36 +266,5 @@ namespace Volo.Abp.Domain.Entities property?.SetValue(entity, idFactory()); } - - public static void TrySetId( - object entity, - TKey id, - bool checkForDisableIdGenerationAttribute = false) - { - var property = CachedIdProperties.GetOrAdd( - $"{entity.GetType().FullName}-{checkForDisableIdGenerationAttribute}", () => - { - var idProperty = entity - .GetType() - .GetProperties() - .FirstOrDefault(x => x.Name == nameof(IEntity.Id) && - x.GetSetMethod(true) != null); - - if (idProperty == null) - { - return null; - } - - if (checkForDisableIdGenerationAttribute && - idProperty.IsDefined(typeof(DisableIdGenerationAttribute), true)) - { - return null; - } - - return idProperty; - }); - - property?.SetValue(entity, id); - } } } diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs index 8723ce8958..576e7512fa 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs @@ -6,6 +6,7 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.MemoryDb.JsonConverters { public class EntityJsonConverter : JsonConverter + where TEntity : IEntity { public override TEntity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { @@ -16,7 +17,7 @@ namespace Volo.Abp.MemoryDb.JsonConverters var id = JsonSerializer.Deserialize(idJsonElement.GetRawText()); if (id != null) { - EntityHelper.TrySetId(entity, id); + EntityHelper.TrySetId(entity, () => id); } return entity; From f2ebe9c6185fea7c86652672838845a3da423a65 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Nov 2020 16:36:50 +0800 Subject: [PATCH 48/62] Remove Newtonsoft.Json from Volo.Abp.Auditing module. --- framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj index 2685236a89..4ac2420c8f 100644 --- a/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj +++ b/framework/src/Volo.Abp.Auditing/Volo.Abp.Auditing.csproj @@ -23,8 +23,4 @@ - - - - From 2b5704a6db4374719dd087ed334e8b897d49e6eb Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Nov 2020 16:39:28 +0800 Subject: [PATCH 49/62] Use TryAddTransient for DefaultObjectPoolProvider. --- .../Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs index 5a01cafb22..9ff3ac21b0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Json return new SystemTextJsonInputFormatter(jsonOptions.Value, logger); }); - builder.Services.AddTransient(); + builder.Services.TryAddTransient(); //NewtonsoftJsonInputFormatter builder.Services.AddTransient(provider => { From 4cfcfdbc0d0630155384c48c550291a4fbb420c3 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 4 Nov 2020 16:45:54 +0800 Subject: [PATCH 50/62] Remove Newtonsoft.Json from Volo.Docs.Domain.Shared project. --- .../Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj index d655e05df0..99066c0b9b 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.csproj @@ -13,9 +13,5 @@ - - - - From 580d4a9c53f542f58c5db4902c0e61703619e785 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 4 Nov 2020 11:53:26 +0300 Subject: [PATCH 51/62] Disable inspection tools while regression tests --- npm/ng-packs/angular.json | 12 ++++++ .../apps/dev-app/src/app/app.module.ts | 2 +- .../environments/environment.regression.ts | 43 +++++++++++++++++++ npm/ng-packs/package.json | 1 + .../packages/core/src/lib/models/config.ts | 1 + 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 npm/ng-packs/apps/dev-app/src/environments/environment.regression.ts diff --git a/npm/ng-packs/angular.json b/npm/ng-packs/angular.json index 0f1ca59f48..1f4aed25fa 100644 --- a/npm/ng-packs/angular.json +++ b/npm/ng-packs/angular.json @@ -496,6 +496,15 @@ "with": "apps/dev-app/src/environments/environment.internal.ts" } ] + }, + "regression": { + "tsConfig": "apps/dev-app/tsconfig.dev.json", + "fileReplacements": [ + { + "replace": "apps/dev-app/src/environments/environment.ts", + "with": "apps/dev-app/src/environments/environment.regression.ts" + } + ] } } }, @@ -510,6 +519,9 @@ }, "internal": { "browserTarget": "dev-app:build:internal" + }, + "regression": { + "browserTarget": "dev-app:build:regression" } } }, diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts index 461275f255..11d1ab48b2 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts @@ -38,7 +38,7 @@ const INSPECTION_TOOLS = [ SettingManagementConfigModule.forRoot(), NgxsModule.forRoot(), ThemeBasicModule.forRoot(), - ...(environment.production ? [] : INSPECTION_TOOLS), + ...(environment.production || environment.test ? [] : INSPECTION_TOOLS), ], providers: [APP_ROUTE_PROVIDER], declarations: [AppComponent], diff --git a/npm/ng-packs/apps/dev-app/src/environments/environment.regression.ts b/npm/ng-packs/apps/dev-app/src/environments/environment.regression.ts new file mode 100644 index 0000000000..1ce44bfc74 --- /dev/null +++ b/npm/ng-packs/apps/dev-app/src/environments/environment.regression.ts @@ -0,0 +1,43 @@ +import { Config } from '@abp/ng.core'; + +const baseUrl = 'http://localhost:4200'; + +export const environment = { + test: true, + production: false, + hmr: false, + application: { + baseUrl, + name: 'MyProjectName', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44305', + redirectUri: baseUrl, + clientId: 'MyProjectName_App', + responseType: 'code', + scope: 'offline_access MyProjectName', + }, + apis: { + default: { + url: 'https://localhost:44305', + rootNamespace: 'MyCompanyName.MyProjectName', + }, + AbpFeatureManagement: { + url: 'https://localhost:44305', + rootNamespace: 'Volo.Abp', + }, + AbpPermissionManagement: { + url: 'https://localhost:44305', + rootNamespace: 'Volo.Abp.PermissionManagement', + }, + AbpTenantManagement: { + url: 'https://localhost:44305', + rootNamespace: 'Volo.Abp.TenantManagement', + }, + AbpIdentity: { + url: 'https://localhost:44305', + rootNamespace: 'Volo.Abp', + }, + }, +} as Config.Environment; diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 33abdb7d94..42284c0e07 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -9,6 +9,7 @@ "symlink": "symlink", "start": "ng serve dev-app", "start:internal": "ng serve dev-app --configuration=internal", + "start:regression": "ng serve dev-app --configuration=regression", "build": "ng build", "test": "ng test --watchAll --runInBand", "commit": "git-cz", diff --git a/npm/ng-packs/packages/core/src/lib/models/config.ts b/npm/ng-packs/packages/core/src/lib/models/config.ts index cf4eb007c9..be2c128d37 100644 --- a/npm/ng-packs/packages/core/src/lib/models/config.ts +++ b/npm/ng-packs/packages/core/src/lib/models/config.ts @@ -10,6 +10,7 @@ export namespace Config { apis: Apis; application: Application; hmr?: boolean; + test?: boolean; localization?: { defaultResourceName?: string }; oAuthConfig: AuthConfig; production: boolean; From ce61e77cfcc2c1d664e914986c745960bde84ff3 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Wed, 4 Nov 2020 12:11:40 +0300 Subject: [PATCH 52/62] Update CLI.md --- docs/en/CLI.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index ccd6a00661..12efb3862f 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -159,7 +159,7 @@ abp add-package Volo.Abp.MongoDB Adds a [multi-package application module](Modules/Index) to a solution by finding all packages of the module, finding related projects in the solution and adding each package to the corresponding project in the solution. -It can also create a fresh new module for your solution and add it to your solution. See `--new-template` option. +It can also create a new module for your solution and add it to your solution. See `--new-template` option. > A business module generally consists of several packages (because of layering, different database provider options or other reasons). Using `add-module` command dramatically simplifies adding a module to a solution. However, each module may require some additional configurations which is generally indicated in the documentation of the related module. @@ -181,7 +181,7 @@ abp add-module Volo.Blogging abp add-module ProductManagement --new-template --add-to-solution-file ``` -* This example creates a fresh new module specialized for your solution (named `ProductManagement`) and adds it to your solution & solution file. +* This command creates a fresh new module customized for your solution (named `ProductManagement`) and adds it to your solution. #### Options @@ -189,7 +189,7 @@ abp add-module ProductManagement --new-template --add-to-solution-file * `--solution` or `-s`: Specifies the solution (.sln) file path. If not specified, CLI tries to find a .sln file in the current directory. * `--skip-db-migrations`: For EF Core database provider, it automatically adds a new code first migration (`Add-Migration`) and updates the database (`Update-Database`) if necessary. Specify this option to skip this operation. * `-sp` or `--startup-project`: Relative path to the project folder of the startup project. Default value is the current folder. -* `--new-template`: Creates a fresh new module (speсialized for your solution) and adds it to your solution. +* `--new-template`: Creates a fresh new module (customized for your solution) and adds it to your solution. * `--with-source-code`: Downloads the source code of the module to your solution folder and uses local project references instead of NuGet/NPM packages. This options is always `True` if `--new-template` is used. * `--add-to-solution-file`: Adds the downloaded/created module to your solution file, so you will also see the projects of the module when you open the solution on a IDE. (only available when `--with-source-code` is `True`.) From d53e4e06bb356a3606a3bf0f9dde0147de4991e0 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 4 Nov 2020 11:17:55 +0100 Subject: [PATCH 53/62] Canter align of message alert text and icon --- .../Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor index cd8fd5cada..35f50dea6c 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor @@ -9,16 +9,18 @@ @if ( ShowMessageIcon ) { - + } - @Message + + @Message + @if ( IsConfirmation ) { -