(mvcBuilder =>
+ {
+ // 添加插件程序集
+ mvcBuilder.PartManager.ApplicationParts.Add(new AssemblyPart(typeof(MyMvcUIPlugInModule).Assembly));
+
+ // 添加视图程序集
+ var viewDllPath = Path.Combine(Path.GetDirectoryName(typeof(MyMvcUIPlugInModule).Assembly.Location), "MyMvcUIPlugIn.Views.dll");
+ var viewAssembly = new CompiledRazorAssemblyPart(Assembly.LoadFrom(viewDllPath));
+ mvcBuilder.PartManager.ApplicationParts.Add(viewAssembly);
+ });
+ }
+ }
+}
+````
+
+* 由于我们添加了相关的NuGet包,因此取决于`AbpAspNetCoreMvcUiThemeSharedModule`.
+* 添加插件程序集到ASP.NET Core MVC的`PartManager`中.这是ASP.NET Core所必需的.否则,你插件中的控制器将无法正常工作.
+* 添加插件的视图程序集到ASP.NET Core MVC的`PartManager`中.这是ASP.NET Core所必需的.否则,你在插件中的视图将不起作用.
+
+现在,你可以在`Pages`目录下添加一个razor页面,例如`MyPlugInPage.cshtml`:
+
+````html
+@page
+@model MyMvcUIPlugIn.Pages.MyPlugInPage
+Welcome to my plug-in page
+This page is located inside a plug-in module! :)
+````
+
+现在,你可以构建插件项目.它将产生以下输出:
+
+
+
+将`MyMvcUIPlugIn.dll`和`MyMvcUIPlugIn.Views.dll`复制到到插件目录下(此示例中为`D:\Temp\MyPlugIns`).
+
+如果你已经按照上述方式配置了主应用程序(参见“基础用法”部分),那么在应用程序启动的时候,你应该能够访问`/MyPlugInPage`URL:
+
+
+
+## 讨论
+
+在现实世界中,你的插件可能具有一些外部依赖性.另外,你的应用程序可能被设计为支持插件.所有这些都是你自己的系统要求.ABP做的仅仅是在应用程序启动时加载模块.你在这些模块中执行什么操作由你决定.
+
+但是,我们可以为一些常见情况提供一些建议.
+
+### 库依赖
+
+对于包/dll依赖,你可以将相关的dll复制到插件目录下.ABP会自动将所有程序集加载到该目录下,并且你的插件将按预期工作.
+
+> 请参见[Microsoft文档](https://docs.microsoft.com/zh-cn/dotnet/core/tutorials/creating-app-with-plugin-support#plugin-with-library-dependencies).
+
+### 数据库模式
+
+如果你的模块使用关系型数据库和[Entity Framework Core](Entity-Framework-Core.md), 那么它需要在数据库中提供表.有多种不同的方法可确保在应用程序使用插件时创建表.一些例子;
+
+1. 插件可以检查数据库表是否存在,并在应用程序启动时创建表,或者如果插件已更新且需要进行某些架构更改时,则会迁移它们.你可以使用EF Core的迁移API来做到这一点.
+2. 你可以改进`DbMigrator`应用程序,用于查找插件的迁移并执行它们.
+
+可能还有其它解决方案.例如,如果你的数据库管理员不允许你在应用程序代码中更改数据库模式,则可能需要手动将SQL文件发送给数据库管理员,以将其应用于数据库.
diff --git a/docs/zh-Hans/Redis-Cache.md b/docs/zh-Hans/Redis-Cache.md
new file mode 100644
index 0000000000..cb82a640d5
--- /dev/null
+++ b/docs/zh-Hans/Redis-Cache.md
@@ -0,0 +1 @@
+TODO...
\ No newline at end of file
diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json
index 5d231099c9..4f47dd2760 100644
--- a/docs/zh-Hans/docs-nav.json
+++ b/docs/zh-Hans/docs-nav.json
@@ -313,7 +313,8 @@
"path": "Module-Development-Basics.md"
},
{
- "text": "模块插件"
+ "text": "模块插件",
+ "path": "PlugIn-Modules.md"
},
{
"text": "自定义应用模块",
diff --git a/docs/zh-Hans/images/simple-plug-in-dll-file.png b/docs/zh-Hans/images/simple-plug-in-dll-file.png
new file mode 100644
index 0000000000..3155708d68
Binary files /dev/null and b/docs/zh-Hans/images/simple-plug-in-dll-file.png differ
diff --git a/docs/zh-Hans/images/simple-plugin-library.png b/docs/zh-Hans/images/simple-plugin-library.png
new file mode 100644
index 0000000000..9fefd57dda
Binary files /dev/null and b/docs/zh-Hans/images/simple-plugin-library.png differ
diff --git a/docs/zh-Hans/images/simple-plugin-output.png b/docs/zh-Hans/images/simple-plugin-output.png
new file mode 100644
index 0000000000..71f6a78c0e
Binary files /dev/null and b/docs/zh-Hans/images/simple-plugin-output.png differ
diff --git a/docs/zh-Hans/images/simple-razor-plug-in-dll-file.png b/docs/zh-Hans/images/simple-razor-plug-in-dll-file.png
new file mode 100644
index 0000000000..06b7a565fe
Binary files /dev/null and b/docs/zh-Hans/images/simple-razor-plug-in-dll-file.png differ
diff --git a/docs/zh-Hans/images/simple-razor-plugin.png b/docs/zh-Hans/images/simple-razor-plugin.png
new file mode 100644
index 0000000000..92e0e00d29
Binary files /dev/null and b/docs/zh-Hans/images/simple-razor-plugin.png differ
diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln
index 963472ada8..8c2670fa27 100644
--- a/framework/Volo.Abp.sln
+++ b/framework/Volo.Abp.sln
@@ -359,6 +359,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Json.Tests", "test
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Http.Tests", "test\Volo.Abp.Http.Tests\Volo.Abp.Http.Tests.csproj", "{A37BFEB5-7C57-4CDC-93B8-B5CE4BB9ACE1}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.EventBus.Abstractions", "src\Volo.Abp.EventBus.Abstractions\Volo.Abp.EventBus.Abstractions.csproj", "{8FDB3BF7-AD89-43F6-8DEB-C3E29B8801FE}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1069,6 +1071,10 @@ Global
{A37BFEB5-7C57-4CDC-93B8-B5CE4BB9ACE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A37BFEB5-7C57-4CDC-93B8-B5CE4BB9ACE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A37BFEB5-7C57-4CDC-93B8-B5CE4BB9ACE1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8FDB3BF7-AD89-43F6-8DEB-C3E29B8801FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8FDB3BF7-AD89-43F6-8DEB-C3E29B8801FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8FDB3BF7-AD89-43F6-8DEB-C3E29B8801FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8FDB3BF7-AD89-43F6-8DEB-C3E29B8801FE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1250,6 +1256,7 @@ Global
{DD9519E0-5A68-48DC-A051-7BF2AC922F3E} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{00D07595-993C-40FC-BD90-0DD6331414D3} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{A37BFEB5-7C57-4CDC-93B8-B5CE4BB9ACE1} = {447C8A77-E5F0-4538-8687-7383196D04EA}
+ {8FDB3BF7-AD89-43F6-8DEB-C3E29B8801FE} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor
index f9e47c4c27..d6067021ab 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor
@@ -10,14 +10,12 @@
if (MenuItem.Url != null)
{
- @if (MenuItem.Icon != null)
- {
- if (MenuItem.Icon.StartsWith("fa"))
- {
-
- }
- }
- @MenuItem.DisplayName
+
+
+
+
+ @MenuItem.DisplayName
+
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js
index 431d9093f7..55c604cf4a 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js
@@ -159,7 +159,7 @@
abp.dom.initializers.initializeDatepickers = function ($rootElement) {
$rootElement
- .findWithSelf('input.datepicker,input[type=date]')
+ .findWithSelf('input.datepicker,input[type=date][abp-data-datepicker!=false]')
.each(function () {
var $input = $(this);
$input
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
index 1808f267eb..9895097d99 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
@@ -334,7 +334,10 @@
};
}
return function (requestData, callback, settings) {
- var input = inputAction ? inputAction(requestData, settings) : {};
+ var input = typeof inputAction === 'function'
+ ? inputAction(requestData, settings)
+ : typeof inputAction === 'object'
+ ? inputAction : {};
//Paging
if (settings.oInit.paging) {
diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs
index 25707e3899..cb576ba1de 100644
--- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs
+++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs
@@ -25,7 +25,7 @@ namespace Volo.Abp.AutoMapper
{
context.Services.AddAutoMapperObjectMapper();
- context.Services.AddSingleton(provider => CreateMappings(provider));
+ context.Services.AddSingleton(CreateMappings);
context.Services.AddSingleton(provider => provider.GetRequiredService());
}
@@ -43,6 +43,8 @@ namespace Volo.Abp.AutoMapper
}
}
+ options.Configurators.Insert(0, ctx => ctx.MapperConfiguration.ConstructServicesUsing(serviceProvider.GetService));
+
void ValidateAll(IConfigurationProvider config)
{
foreach (var profileType in options.ValidatingProfiles)
@@ -60,7 +62,7 @@ namespace Volo.Abp.AutoMapper
return new MapperAccessor
{
- Mapper = new Mapper(mapperConfiguration, serviceProvider.GetService)
+ Mapper = new Mapper(mapperConfiguration)
};
}
}
diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/ServiceCollectionExtensions.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/ServiceCollectionExtensions.cs
deleted file mode 100644
index 4b61ae5a6e..0000000000
--- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/ServiceCollectionExtensions.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-// This software is part of the Autofac IoC container
-// Copyright © 2017 Autofac Contributors
-// http://autofac.org
-//
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following
-// conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// OTHER DEALINGS IN THE SOFTWARE.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using JetBrains.Annotations;
-using Microsoft.Extensions.DependencyInjection;
-using Volo.Abp;
-
-namespace Autofac.Extensions.DependencyInjection
-{
- ///
- /// Extension methods on to register the .
- ///
- public static class ServiceCollectionExtensions
- {
- ///
- /// Adds the to the service collection.
- ///
- /// The service collection to add the factory to.
- /// Action on a that adds component registrations to the container.
- /// The service collection.
- public static IServiceCollection AddAutofac(this IServiceCollection services, Action configurationAction = null)
- {
- return services
- .ClearServiceProviderFactories()
- .AddSingleton>(new AutofacServiceProviderFactory(configurationAction));
- }
-
- private static IServiceCollection ClearServiceProviderFactories([NotNull] this IServiceCollection services)
- {
- Check.NotNull(services, nameof(services));
-
- services.RemoveAll(
- service => service.ImplementationInstance?
- .GetType()
- .GetInterfaces()
- .Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IServiceProviderFactory<>)) == true
- );
-
- return services;
- }
- }
-}
diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs
index c3cb34f30c..fc45ccd05d 100644
--- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs
+++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs
@@ -45,19 +45,26 @@ namespace Volo.Abp.Caching.StackExchangeRedis
MapMetadataMethod = type.GetMethod("MapMetadata", BindingFlags.Instance | BindingFlags.NonPublic);
- GetAbsoluteExpirationMethod = type.GetMethod("GetAbsoluteExpiration", BindingFlags.Static | BindingFlags.NonPublic);
+ GetAbsoluteExpirationMethod =
+ type.GetMethod("GetAbsoluteExpiration", BindingFlags.Static | BindingFlags.NonPublic);
- GetExpirationInSecondsMethod = type.GetMethod("GetExpirationInSeconds", BindingFlags.Static | BindingFlags.NonPublic);
+ GetExpirationInSecondsMethod =
+ type.GetMethod("GetExpirationInSeconds", BindingFlags.Static | BindingFlags.NonPublic);
- SetScript = type.GetField("SetScript", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null).ToString();
+ SetScript = type.GetField("SetScript", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null)
+ .ToString();
- AbsoluteExpirationKey = type.GetField("AbsoluteExpirationKey", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null).ToString();
+ AbsoluteExpirationKey = type.GetField("AbsoluteExpirationKey", BindingFlags.Static | BindingFlags.NonPublic)
+ ?.GetValue(null).ToString();
- SlidingExpirationKey = type.GetField("SlidingExpirationKey", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null).ToString();
+ SlidingExpirationKey = type.GetField("SlidingExpirationKey", BindingFlags.Static | BindingFlags.NonPublic)
+ ?.GetValue(null).ToString();
- DataKey = type.GetField("DataKey", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null).ToString();
+ DataKey = type.GetField("DataKey", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null).ToString();
- NotPresent = type.GetField("NotPresent", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null).To();
+ // ReSharper disable once PossibleNullReferenceException
+ NotPresent = type.GetField("NotPresent", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null)
+ .To();
}
public AbpRedisCache(IOptions optionsAccessor)
@@ -124,6 +131,42 @@ namespace Volo.Abp.Caching.StackExchangeRedis
await Task.WhenAll(PipelineSetMany(items, options));
}
+ public void RefreshMany(
+ IEnumerable keys)
+ {
+ keys = Check.NotNull(keys, nameof(keys));
+
+ GetAndRefreshMany(keys, false);
+ }
+
+ public async Task RefreshManyAsync(
+ IEnumerable keys,
+ CancellationToken token = default)
+ {
+ keys = Check.NotNull(keys, nameof(keys));
+
+ await GetAndRefreshManyAsync(keys, false, token);
+ }
+
+ public void RemoveMany(IEnumerable keys)
+ {
+ keys = Check.NotNull(keys, nameof(keys));
+
+ Connect();
+
+ RedisDatabase.KeyDelete(keys.Select(key => (RedisKey)(Instance + key)).ToArray());
+ }
+
+ public async Task RemoveManyAsync(IEnumerable keys, CancellationToken token = default)
+ {
+ keys = Check.NotNull(keys, nameof(keys));
+
+ token.ThrowIfCancellationRequested();
+ await ConnectAsync(token);
+
+ await RedisDatabase.KeyDeleteAsync(keys.Select(key => (RedisKey)(Instance + key)).ToArray());
+ }
+
protected virtual byte[][] GetAndRefreshMany(
IEnumerable keys,
bool getData)
diff --git a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs
index d62411628e..1337206464 100644
--- a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs
+++ b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/DistributedCache.cs
@@ -527,6 +527,198 @@ namespace Volo.Abp.Caching
return value;
}
+ public KeyValuePair[] GetOrAddMany(
+ IEnumerable keys,
+ Func, List>> factory,
+ Func optionsFactory = null,
+ bool? hideErrors = null,
+ bool considerUow = false)
+ {
+
+ KeyValuePair[] result;
+ var keyArray = keys.ToArray();
+
+ var cacheSupportsMultipleItems = Cache as ICacheSupportsMultipleItems;
+ if (cacheSupportsMultipleItems == null)
+ {
+ result = GetManyFallback(
+ keyArray,
+ hideErrors,
+ considerUow
+ );
+ }
+ else
+ {
+ var notCachedKeys = new List();
+ var cachedValues = new List>();
+ if (ShouldConsiderUow(considerUow))
+ {
+ var uowCache = GetUnitOfWorkCache();
+ foreach (var key in keyArray)
+ {
+ var value = uowCache.GetOrDefault(key)?.GetUnRemovedValueOrNull();
+ if (value != null)
+ {
+ cachedValues.Add(new KeyValuePair(key, value));
+ }
+ }
+
+ notCachedKeys = keyArray.Except(cachedValues.Select(x => x.Key)).ToList();
+ if (!notCachedKeys.Any())
+ {
+ return cachedValues.ToArray();
+ }
+ }
+
+ hideErrors = hideErrors ?? _distributedCacheOption.HideErrors;
+ byte[][] cachedBytes;
+
+ var readKeys = notCachedKeys.Any() ? notCachedKeys.ToArray() : keyArray;
+ try
+ {
+ cachedBytes = cacheSupportsMultipleItems.GetMany(readKeys.Select(NormalizeKey));
+ }
+ catch (Exception ex)
+ {
+ if (hideErrors == true)
+ {
+ HandleException(ex);
+ return ToCacheItemsWithDefaultValues(keyArray);
+ }
+
+ throw;
+ }
+
+ result = cachedValues.Concat(ToCacheItems(cachedBytes, readKeys)).ToArray();
+ }
+
+ if (result.All(x => x.Value != null))
+ {
+ return result;
+ }
+
+ var missingKeys = new List();
+ var missingValuesIndex = new List();
+ for (var i = 0; i < keyArray.Length; i++)
+ {
+ if (result[i].Value != null)
+ {
+ continue;
+ }
+
+ missingKeys.Add(keyArray[i]);
+ missingValuesIndex.Add(i);
+ }
+
+ var missingValues = factory.Invoke(missingKeys).ToArray();
+ var valueQueue = new Queue>(missingValues);
+
+ SetMany(missingValues, optionsFactory?.Invoke(), hideErrors, considerUow);
+
+ foreach (var index in missingValuesIndex)
+ {
+ result[index] = valueQueue.Dequeue();
+ }
+
+ return result;
+ }
+
+
+ public async Task[]> GetOrAddManyAsync(
+ IEnumerable keys,
+ Func, Task>>> factory,
+ Func optionsFactory = null,
+ bool? hideErrors = null,
+ bool considerUow = false,
+ CancellationToken token = default)
+ {
+ KeyValuePair[] result;
+ var keyArray = keys.ToArray();
+
+ var cacheSupportsMultipleItems = Cache as ICacheSupportsMultipleItems;
+ if (cacheSupportsMultipleItems == null)
+ {
+ result = await GetManyFallbackAsync(
+ keyArray,
+ hideErrors,
+ considerUow, token);
+ }
+ else
+ {
+ var notCachedKeys = new List();
+ var cachedValues = new List>();
+ if (ShouldConsiderUow(considerUow))
+ {
+ var uowCache = GetUnitOfWorkCache();
+ foreach (var key in keyArray)
+ {
+ var value = uowCache.GetOrDefault(key)?.GetUnRemovedValueOrNull();
+ if (value != null)
+ {
+ cachedValues.Add(new KeyValuePair(key, value));
+ }
+ }
+
+ notCachedKeys = keyArray.Except(cachedValues.Select(x => x.Key)).ToList();
+ if (!notCachedKeys.Any())
+ {
+ return cachedValues.ToArray();
+ }
+ }
+
+ hideErrors = hideErrors ?? _distributedCacheOption.HideErrors;
+ byte[][] cachedBytes;
+
+ var readKeys = notCachedKeys.Any() ? notCachedKeys.ToArray() : keyArray;
+ try
+ {
+ cachedBytes = await cacheSupportsMultipleItems.GetManyAsync(readKeys.Select(NormalizeKey), token);
+ }
+ catch (Exception ex)
+ {
+ if (hideErrors == true)
+ {
+ await HandleExceptionAsync(ex);
+ return ToCacheItemsWithDefaultValues(keyArray);
+ }
+
+ throw;
+ }
+
+ result = cachedValues.Concat(ToCacheItems(cachedBytes, readKeys)).ToArray();
+ }
+
+ if (result.All(x => x.Value != null))
+ {
+ return result;
+ }
+
+ var missingKeys = new List();
+ var missingValuesIndex = new List();
+ for (var i = 0; i < keyArray.Length; i++)
+ {
+ if (result[i].Value != null)
+ {
+ continue;
+ }
+
+ missingKeys.Add(keyArray[i]);
+ missingValuesIndex.Add(i);
+ }
+
+ var missingValues = (await factory.Invoke(missingKeys)).ToArray();
+ var valueQueue = new Queue>(missingValues);
+
+ await SetManyAsync(missingValues, optionsFactory?.Invoke(), hideErrors, considerUow, token);
+
+ foreach (var index in missingValuesIndex)
+ {
+ result[index] = valueQueue.Dequeue();
+ }
+
+ return result;
+ }
+
///
/// Sets the cache item value for the provided key.
///
@@ -924,6 +1116,71 @@ namespace Volo.Abp.Caching
}
}
+ public virtual void RefreshMany(
+ IEnumerable keys,
+ bool? hideErrors = null)
+ {
+ hideErrors = hideErrors ?? _distributedCacheOption.HideErrors;
+
+ try
+ {
+ if (Cache is ICacheSupportsMultipleItems cacheSupportsMultipleItems)
+ {
+ cacheSupportsMultipleItems.RefreshMany(keys.Select(NormalizeKey));
+ }
+ else
+ {
+ foreach (var key in keys)
+ {
+ Cache.Refresh(NormalizeKey(key));
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ if (hideErrors == true)
+ {
+ HandleException(ex);
+ return;
+ }
+
+ throw;
+ }
+ }
+
+ public virtual async Task RefreshManyAsync(
+ IEnumerable keys,
+ bool? hideErrors = null,
+ CancellationToken token = default)
+ {
+ hideErrors = hideErrors ?? _distributedCacheOption.HideErrors;
+
+ try
+ {
+ if (Cache is ICacheSupportsMultipleItems cacheSupportsMultipleItems)
+ {
+ await cacheSupportsMultipleItems.RefreshManyAsync(keys.Select(NormalizeKey), token);
+ }
+ else
+ {
+ foreach (var key in keys)
+ {
+ await Cache.RefreshAsync(NormalizeKey(key), token);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ if (hideErrors == true)
+ {
+ await HandleExceptionAsync(ex);
+ return;
+ }
+
+ throw;
+ }
+ }
+
///
/// Removes the cache item for given key from cache.
///
@@ -1027,6 +1284,130 @@ namespace Volo.Abp.Caching
}
}
+ public void RemoveMany(
+ IEnumerable keys,
+ bool? hideErrors = null,
+ bool considerUow = false)
+ {
+ var keyArray = keys.ToArray();
+
+ if (Cache is ICacheSupportsMultipleItems cacheSupportsMultipleItems)
+ {
+ void RemoveRealCache()
+ {
+ hideErrors = hideErrors ?? _distributedCacheOption.HideErrors;
+
+ try
+ {
+ cacheSupportsMultipleItems.RemoveMany(
+ keyArray.Select(NormalizeKey)
+ );
+ }
+ catch (Exception ex)
+ {
+ if (hideErrors == true)
+ {
+ HandleException(ex);
+ return;
+ }
+
+ throw;
+ }
+ }
+
+ if (ShouldConsiderUow(considerUow))
+ {
+ var uowCache = GetUnitOfWorkCache();
+
+ foreach (var key in keyArray)
+ {
+ if (uowCache.TryGetValue(key, out _))
+ {
+ uowCache[key].RemoveValue();
+ }
+ }
+
+ // ReSharper disable once PossibleNullReferenceException
+ UnitOfWorkManager.Current.OnCompleted(() =>
+ {
+ RemoveRealCache();
+ return Task.CompletedTask;
+ });
+ }
+ else
+ {
+ RemoveRealCache();
+ }
+ }
+ else
+ {
+ foreach (var key in keyArray)
+ {
+ Remove(key, hideErrors, considerUow);
+ }
+ }
+ }
+
+ public async Task RemoveManyAsync(
+ IEnumerable keys,
+ bool? hideErrors = null,
+ bool considerUow = false,
+ CancellationToken token = default)
+ {
+ var keyArray = keys.ToArray();
+
+ if (Cache is ICacheSupportsMultipleItems cacheSupportsMultipleItems)
+ {
+ async Task RemoveRealCache()
+ {
+ hideErrors = hideErrors ?? _distributedCacheOption.HideErrors;
+
+ try
+ {
+ await cacheSupportsMultipleItems.RemoveManyAsync(
+ keyArray.Select(NormalizeKey), token);
+ }
+ catch (Exception ex)
+ {
+ if (hideErrors == true)
+ {
+ await HandleExceptionAsync(ex);
+ return;
+ }
+
+ throw;
+ }
+ }
+
+ if (ShouldConsiderUow(considerUow))
+ {
+ var uowCache = GetUnitOfWorkCache();
+
+ foreach (var key in keyArray)
+ {
+ if (uowCache.TryGetValue(key, out _))
+ {
+ uowCache[key].RemoveValue();
+ }
+ }
+
+ // ReSharper disable once PossibleNullReferenceException
+ UnitOfWorkManager.Current.OnCompleted(RemoveRealCache);
+ }
+ else
+ {
+ await RemoveRealCache();
+ }
+ }
+ else
+ {
+ foreach (var key in keyArray)
+ {
+ await RemoveAsync(key, hideErrors, considerUow, token);
+ }
+ }
+ }
+
protected virtual void HandleException(Exception ex)
{
_ = HandleExceptionAsync(ex);
diff --git a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/ICacheSupportsMultipleItems.cs b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/ICacheSupportsMultipleItems.cs
index af6f87021b..857385699d 100644
--- a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/ICacheSupportsMultipleItems.cs
+++ b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/ICacheSupportsMultipleItems.cs
@@ -25,6 +25,24 @@ namespace Volo.Abp.Caching
IEnumerable> items,
DistributedCacheEntryOptions options,
CancellationToken token = default
- );
+ );
+
+ void RefreshMany(
+ IEnumerable keys
+ );
+
+ Task RefreshManyAsync(
+ IEnumerable keys,
+ CancellationToken token = default
+ );
+
+ void RemoveMany(
+ IEnumerable keys
+ );
+
+ Task RemoveManyAsync(
+ IEnumerable keys,
+ CancellationToken token = default
+ );
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/IDistributedCache.cs b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/IDistributedCache.cs
index 2f74fd678b..f8e76fd9dd 100644
--- a/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/IDistributedCache.cs
+++ b/framework/src/Volo.Abp.Caching/Volo/Abp/Caching/IDistributedCache.cs
@@ -14,8 +14,8 @@ namespace Volo.Abp.Caching
public interface IDistributedCache : IDistributedCache
where TCacheItem : class
{
-
}
+
///
/// Represents a distributed cache of type.
/// Uses a generic cache key type of type.
@@ -128,6 +128,44 @@ namespace Volo.Abp.Caching
CancellationToken token = default
);
+ ///
+ /// Gets or Adds multiple cache items with the given keys. If any cache items not found for the given keys then adds cache items
+ /// provided by delegate and returns the provided cache items.
+ ///
+ /// The keys of cached items to be retrieved from the cache.
+ /// The factory delegate is used to provide the cache items when no cache items are found for the given .
+ /// The cache options for the factory delegate.
+ /// Indicates to throw or hide the exceptions for the distributed cache.
+ /// This will store the cache in the current unit of work until the end of the current unit of work does not really affect the cache.
+ /// The cache items.
+ KeyValuePair[] GetOrAddMany(
+ IEnumerable keys,
+ Func, List>> factory,
+ Func optionsFactory = null,
+ bool? hideErrors = null,
+ bool considerUow = false
+ );
+
+ ///
+ /// Gets or Adds multiple cache items with the given keys. If any cache items not found for the given keys then adds cache items
+ /// provided by delegate and returns the provided cache items.
+ ///
+ /// The keys of cached items to be retrieved from the cache.
+ /// The factory delegate is used to provide the cache items when no cache items are found for the given .
+ /// The cache options for the factory delegate.
+ /// Indicates to throw or hide the exceptions for the distributed cache.
+ /// This will store the cache in the current unit of work until the end of the current unit of work does not really affect the cache.
+ /// The for the task.
+ /// The cache items.
+ Task[]> GetOrAddManyAsync(
+ IEnumerable keys,
+ Func, Task>>> factory,
+ Func optionsFactory = null,
+ bool? hideErrors = null,
+ bool considerUow = false,
+ CancellationToken token = default
+ );
+
///
/// Sets the cache item value for the provided key.
///
@@ -219,6 +257,29 @@ namespace Volo.Abp.Caching
CancellationToken token = default
);
+ ///
+ /// Refreshes the cache value of the given keys, and resets their sliding expiration timeout.
+ /// Based on the implementation, this can be more efficient than setting multiple items individually.
+ ///
+ /// The keys of cached items to be retrieved from the cache.
+ /// Indicates to throw or hide the exceptions for the distributed cache.
+ void RefreshMany(
+ IEnumerable keys,
+ bool? hideErrors = null);
+
+ ///
+ /// Refreshes the cache value of the given keys, and resets their sliding expiration timeout.
+ /// Based on the implementation, this can be more efficient than setting multiple items individually.
+ ///
+ /// The keys of cached items to be retrieved from the cache.
+ /// Indicates to throw or hide the exceptions for the distributed cache.
+ /// The for the task.
+ /// The indicating that the operation is asynchronous.
+ Task RefreshManyAsync(
+ IEnumerable keys,
+ bool? hideErrors = null,
+ CancellationToken token = default);
+
///
/// Removes the cache item for given key from cache.
///
@@ -245,5 +306,32 @@ namespace Volo.Abp.Caching
bool considerUow = false,
CancellationToken token = default
);
+
+ ///
+ /// Removes the cache items for given keys from cache.
+ ///
+ /// The keys of cached items to be retrieved from the cache.
+ /// Indicates to throw or hide the exceptions for the distributed cache.
+ /// This will store the cache in the current unit of work until the end of the current unit of work does not really affect the cache.
+ void RemoveMany(
+ IEnumerable keys,
+ bool? hideErrors = null,
+ bool considerUow = false
+ );
+
+ ///
+ /// Removes the cache items for given keys from cache.
+ ///
+ /// The keys of cached items to be retrieved from the cache.
+ /// Indicates to throw or hide the exceptions for the distributed cache.
+ /// This will store the cache in the current unit of work until the end of the current unit of work does not really affect the cache.
+ /// The for the task.
+ /// The indicating that the operation is asynchronous.
+ Task RemoveManyAsync(
+ IEnumerable keys,
+ bool? hideErrors = null,
+ bool considerUow = false,
+ CancellationToken token = default
+ );
}
}
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 9208357d4a..6b23857233 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
@@ -1,5 +1,7 @@
using System.Text;
+using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Cli.Commands;
+using Volo.Abp.Cli.Http;
using Volo.Abp.Domain;
using Volo.Abp.IdentityModel;
using Volo.Abp.Json;
@@ -18,6 +20,9 @@ namespace Volo.Abp.Cli
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
+ context.Services.AddHttpClient(CliConsts.HttpClientName)
+ .ConfigurePrimaryHttpMessageHandler(() => new CliHttpClientHandler());
+
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Configure(options =>
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
index b062388c7a..37dbbba318 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
@@ -7,5 +7,7 @@
public const string BranchPrefix = "branch@";
public const string DocsLink = "https://docs.abp.io";
+
+ public const string HttpClientName = "AbpHttpClient";
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs
index 12810aebb9..f03c101c88 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/LoginCommand.cs
@@ -22,13 +22,17 @@ namespace Volo.Abp.Cli.Commands
public ICancellationTokenProvider CancellationTokenProvider { get; }
public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
+
public LoginCommand(AuthService authService,
ICancellationTokenProvider cancellationTokenProvider,
- IRemoteServiceExceptionHandler remoteServiceExceptionHandler)
+ IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
+ CliHttpClientFactory cliHttpClientFactory)
{
AuthService = authService;
CancellationTokenProvider = cancellationTokenProvider;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
+ _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
}
@@ -79,20 +83,19 @@ namespace Volo.Abp.Cli.Commands
{
var url = $"{CliUrls.WwwAbpIo}api/license/check-multiple-organizations?username={username}";
- using (var client = new CliHttpClient())
+ var client = _cliHttpClientFactory.CreateClient();
+
+ using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger))
{
- using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger))
+ if (!response.IsSuccessStatusCode)
{
- if (!response.IsSuccessStatusCode)
- {
- throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
- }
+ throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
+ }
- await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
+ await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
- var responseContent = await response.Content.ReadAsStringAsync();
- return JsonSerializer.Deserialize(responseContent);
- }
+ var responseContent = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseContent);
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientExtensions.cs
similarity index 73%
rename from framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs
rename to framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientExtensions.cs
index d853067abf..9976542f05 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClient.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientExtensions.cs
@@ -13,29 +13,9 @@ using Microsoft.Extensions.Logging;
namespace Volo.Abp.Cli.Http
{
- public class CliHttpClient : HttpClient
+ public static class CliHttpClientExtensions
{
- public static TimeSpan DefaultTimeout { get; set; } = TimeSpan.FromMinutes(1);
-
- public CliHttpClient(TimeSpan? timeout = null)
- : base(new CliHttpClientHandler())
- {
- Timeout = timeout ?? DefaultTimeout;
-
- AddAuthentication(this);
- }
-
- public CliHttpClient(bool setBearerToken) : base(new CliHttpClientHandler())
- {
- Timeout = DefaultTimeout;
-
- if (setBearerToken)
- {
- AddAuthentication(this);
- }
- }
-
- private static void AddAuthentication(HttpClient client)
+ public static void AddAbpAuthenticationToken(this HttpClient httpClient)
{
if (!AuthService.IsLoggedIn())
{
@@ -45,12 +25,13 @@ namespace Volo.Abp.Cli.Http
var accessToken = File.ReadAllText(CliPaths.AccessToken, Encoding.UTF8);
if (!accessToken.IsNullOrEmpty())
{
- client.SetBearerToken(accessToken);
+ httpClient.SetBearerToken(accessToken);
}
}
- public async Task GetHttpResponseMessageWithRetryAsync
+ public static async Task GetHttpResponseMessageWithRetryAsync
(
+ this HttpClient httpClient,
string url,
CancellationToken? cancellationToken = null,
ILogger logger = null,
@@ -67,7 +48,12 @@ namespace Volo.Abp.Cli.Http
};
}
- cancellationToken ??= CancellationToken.None;
+ if (cancellationToken == null)
+ {
+ var cancellationTokenSource = new CancellationTokenSource();
+ cancellationTokenSource.CancelAfter(httpClient.Timeout);
+ cancellationToken = cancellationTokenSource.Token;
+ }
return await HttpPolicyExtensions
.HandleTransientHttpError()
@@ -92,8 +78,7 @@ namespace Volo.Abp.Cli.Http
$"Waiting {timeSpan.TotalSeconds} secs for the next try...");
}
})
- .ExecuteAsync(async () => await this.GetAsync(url, cancellationToken.Value));
+ .ExecuteAsync(async () => await httpClient.GetAsync(url, cancellationToken.Value));
}
-
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs
new file mode 100644
index 0000000000..a5608a1f88
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Net.Http;
+using System.Threading;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Threading;
+
+namespace Volo.Abp.Cli.Http
+{
+ public class CliHttpClientFactory : ISingletonDependency
+ {
+ public static readonly TimeSpan DefaultTimeout = TimeSpan.FromMinutes(1);
+
+ private readonly IHttpClientFactory _clientFactory;
+ private readonly ICancellationTokenProvider _cancellationTokenProvider;
+
+ public CliHttpClientFactory(IHttpClientFactory clientFactory, ICancellationTokenProvider cancellationTokenProvider)
+ {
+ _clientFactory = clientFactory;
+ _cancellationTokenProvider = cancellationTokenProvider;
+ }
+
+ public HttpClient CreateClient(bool needsAuthentication = true, TimeSpan? timeout = null)
+ {
+ var httpClient = _clientFactory.CreateClient(CliConsts.HttpClientName);
+ httpClient.Timeout = timeout ?? DefaultTimeout;
+
+ if (needsAuthentication)
+ {
+ httpClient.AddAbpAuthenticationToken();
+ }
+
+ return httpClient;
+ }
+
+ public CancellationToken GetCancellationToken(TimeSpan? timeout = null)
+ {
+ if (timeout == null)
+ {
+ if (_cancellationTokenProvider == null)
+ {
+ var cancellationTokenSource = new CancellationTokenSource();
+ cancellationTokenSource.CancelAfter(DefaultTimeout);
+ return cancellationTokenSource.Token;
+ }
+ else
+ {
+ return _cancellationTokenProvider.Token;
+ }
+ }
+ else
+ {
+ var cancellationTokenSource = new CancellationTokenSource();
+ cancellationTokenSource.CancelAfter(Convert.ToInt32(timeout.Value.TotalMilliseconds));
+ return cancellationTokenSource.Token;
+ }
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs
index 2aeb8ed90a..5ff4d39d4f 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs
@@ -25,16 +25,19 @@ namespace Volo.Abp.Cli.Licensing
private readonly ILogger _logger;
private DeveloperApiKeyResult _apiKeyResult = null;
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
public AbpIoApiKeyService(
IJsonSerializer jsonSerializer,
ICancellationTokenProvider cancellationTokenProvider,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
- ILogger logger)
+ ILogger logger,
+ CliHttpClientFactory cliHttpClientFactory)
{
JsonSerializer = jsonSerializer;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
_logger = logger;
+ _cliHttpClientFactory = cliHttpClientFactory;
CancellationTokenProvider = cancellationTokenProvider;
}
@@ -56,22 +59,21 @@ namespace Volo.Abp.Cli.Licensing
}
var url = $"{CliUrls.WwwAbpIo}api/license/api-key";
+ var client = _cliHttpClientFactory.CreateClient();
- using (var client = new CliHttpClient())
+ using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, _logger))
{
- using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, _logger))
+ if (!response.IsSuccessStatusCode)
{
- if (!response.IsSuccessStatusCode)
- {
- throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
- }
+ throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
+ }
- await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
+ await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
- var responseContent = await response.Content.ReadAsStringAsync();
- return JsonSerializer.Deserialize(responseContent);
- }
+ var responseContent = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseContent);
}
+
}
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs
index 057ffcc02d..7907baaa2d 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs
@@ -23,6 +23,7 @@ namespace Volo.Abp.Cli.NuGet
protected ICancellationTokenProvider CancellationTokenProvider { get; }
protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }
private readonly IApiKeyService _apiKeyService;
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
private List _proPackageList;
private DeveloperApiKeyResult _apiKeyResult;
@@ -30,12 +31,14 @@ namespace Volo.Abp.Cli.NuGet
IJsonSerializer jsonSerializer,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
ICancellationTokenProvider cancellationTokenProvider,
- IApiKeyService apiKeyService)
+ IApiKeyService apiKeyService,
+ CliHttpClientFactory cliHttpClientFactory)
{
JsonSerializer = jsonSerializer;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
CancellationTokenProvider = cancellationTokenProvider;
_apiKeyService = apiKeyService;
+ _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
}
@@ -93,18 +96,17 @@ namespace Volo.Abp.Cli.NuGet
url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json";
}
- using (var client = new CliHttpClient(setBearerToken: false))
+ var client = _cliHttpClientFactory.CreateClient(needsAuthentication: false);
+
+ using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync(
+ url,
+ cancellationToken: CancellationTokenProvider.Token,
+ logger: Logger
+ ))
{
- using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync(
- url,
- cancellationToken: CancellationTokenProvider.Token,
- logger: Logger
- ))
- {
- await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
- var responseContent = await responseMessage.Content.ReadAsStringAsync();
- return JsonSerializer.Deserialize(responseContent).Versions;
- }
+ await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
+ var responseContent = await responseMessage.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseContent).Versions;
}
}
@@ -120,9 +122,8 @@ namespace Volo.Abp.Cli.NuGet
private async Task> GetProPackageListAsync()
{
- using var client = new CliHttpClient();
-
var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/proPackageNames";
+ var client = _cliHttpClientFactory.CreateClient(needsAuthentication: true);
using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync(
url: url,
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs
index 0462920fbb..bebe44542d 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/AbpIoSourceCodeStore.cs
@@ -9,6 +9,7 @@ using System.Net.Http;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
+using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.ProjectBuilding.Templates.App;
@@ -28,22 +29,23 @@ namespace Volo.Abp.Cli.ProjectBuilding
public ILogger Logger { get; set; }
protected AbpCliOptions Options { get; }
-
protected IJsonSerializer JsonSerializer { get; }
-
protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }
-
protected ICancellationTokenProvider CancellationTokenProvider { get; }
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
+
public AbpIoSourceCodeStore(
IOptions options,
IJsonSerializer jsonSerializer,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
- ICancellationTokenProvider cancellationTokenProvider)
+ ICancellationTokenProvider cancellationTokenProvider,
+ CliHttpClientFactory cliHttpClientFactory)
{
JsonSerializer = jsonSerializer;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
CancellationTokenProvider = cancellationTokenProvider;
+ _cliHttpClientFactory = cliHttpClientFactory;
Options = options.Value;
Logger = NullLogger.Instance;
@@ -134,24 +136,17 @@ namespace Volo.Abp.Cli.ProjectBuilding
try
{
- using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
+ var client = _cliHttpClientFactory.CreateClient();
+ var stringContent = new StringContent(
+ JsonSerializer.Serialize(new GetLatestSourceCodeVersionDto { Name = name, IncludePreReleases = includePreReleases }),
+ Encoding.UTF8,
+ MimeTypes.Application.Json
+ );
+
+ using (var response = await client.PostAsync(url, stringContent, _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10))))
{
- var response = await client.PostAsync(
- url,
- new StringContent(
- JsonSerializer.Serialize(
- new GetLatestSourceCodeVersionDto { Name = name, IncludePreReleases = includePreReleases }
- ),
- Encoding.UTF8,
- MimeTypes.Application.Json
- ),
- CancellationTokenProvider.Token
- );
-
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
-
var result = await response.Content.ReadAsStringAsync();
-
return JsonSerializer.Deserialize(result).Version;
}
}
@@ -164,32 +159,25 @@ namespace Volo.Abp.Cli.ProjectBuilding
private async Task GetTemplateNugetVersionAsync(string name, string type, string version)
{
- var url = $"{CliUrls.WwwAbpIo}api/download/{type}/get-nuget-version/";
-
try
{
- using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
- {
- var response = await client.PostAsync(
- url,
- new StringContent(
- JsonSerializer.Serialize(
- new GetTemplateNugetVersionDto { Name = name, Version = version}
- ),
- Encoding.UTF8,
- MimeTypes.Application.Json
- ),
- CancellationTokenProvider.Token
- );
+ var url = $"{CliUrls.WwwAbpIo}api/download/{type}/get-nuget-version/";
+ var client = _cliHttpClientFactory.CreateClient();
- await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
+ var stringContent = new StringContent(
+ JsonSerializer.Serialize(new GetTemplateNugetVersionDto { Name = name, Version = version }),
+ Encoding.UTF8,
+ MimeTypes.Application.Json
+ );
+ using (var response = await client.PostAsync(url, stringContent, _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10))))
+ {
+ await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
var result = await response.Content.ReadAsStringAsync();
-
return JsonSerializer.Deserialize(result).Version;
}
}
- catch (Exception ex)
+ catch (Exception)
{
return null;
}
@@ -199,38 +187,39 @@ namespace Volo.Abp.Cli.ProjectBuilding
{
var url = $"{CliUrls.WwwAbpIo}api/download/{input.Type}/";
+ HttpResponseMessage responseMessage = null;
+
try
{
- using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
- {
- HttpResponseMessage responseMessage;
+ var client = _cliHttpClientFactory.CreateClient();
- if (input.TemplateSource.IsNullOrWhiteSpace())
- {
- responseMessage = await client.PostAsync(
- url,
- new StringContent(JsonSerializer.Serialize(input), Encoding.UTF8, MimeTypes.Application.Json),
- CancellationTokenProvider.Token
- );
- }
- else
- {
- responseMessage = await client.GetAsync(input.TemplateSource, CancellationTokenProvider.Token);
- }
+ if (input.TemplateSource.IsNullOrWhiteSpace())
+ {
+ responseMessage = await client.PostAsync(
+ url,
+ new StringContent(JsonSerializer.Serialize(input), Encoding.UTF8, MimeTypes.Application.Json),
+ _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10))
+ );
+ }
+ else
+ {
+ responseMessage = await client.GetAsync(input.TemplateSource, _cliHttpClientFactory.GetCancellationToken());
+ }
- await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
+ await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
+ var resultAsBytes = await responseMessage.Content.ReadAsByteArrayAsync();
+ responseMessage.Dispose();
- return await responseMessage.Content.ReadAsByteArrayAsync();
- }
+ return resultAsBytes;
}
catch (Exception ex)
{
- Console.WriteLine("Error occured while downloading source-code from {0} : {1}", url, ex.Message);
+ Console.WriteLine("Error occured while downloading source-code from {0} : {1}{2}{3}", url, responseMessage?.ToString(), Environment.NewLine, ex.Message);
throw;
}
}
- private bool IsNetworkSource(string source)
+ private static bool IsNetworkSource(string source)
{
return source.ToLower().StartsWith("http");
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs
index 621631af2a..e97d7443d4 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Analyticses/CliAnalyticsCollect.cs
@@ -18,15 +18,18 @@ namespace Volo.Abp.Cli.ProjectBuilding.Analyticses
private readonly IJsonSerializer _jsonSerializer;
private readonly ILogger _logger;
private readonly IRemoteServiceExceptionHandler _remoteServiceExceptionHandler;
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
public CliAnalyticsCollect(
ICancellationTokenProvider cancellationTokenProvider,
IJsonSerializer jsonSerializer,
- IRemoteServiceExceptionHandler remoteServiceExceptionHandler)
+ IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
+ CliHttpClientFactory cliHttpClientFactory)
{
_cancellationTokenProvider = cancellationTokenProvider;
_jsonSerializer = jsonSerializer;
_remoteServiceExceptionHandler = remoteServiceExceptionHandler;
+ _cliHttpClientFactory = cliHttpClientFactory;
_logger = NullLogger.Instance;
}
@@ -34,32 +37,31 @@ namespace Volo.Abp.Cli.ProjectBuilding.Analyticses
{
var postData = _jsonSerializer.Serialize(input);
var url = $"{CliUrls.WwwAbpIo}api/clianalytics/collect";
-
+
try
{
- using (var client = new CliHttpClient())
- {
- var responseMessage = await client.PostAsync(
- url,
- new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json),
- _cancellationTokenProvider.Token
- );
+ var client = _cliHttpClientFactory.CreateClient();
- if (!responseMessage.IsSuccessStatusCode)
- {
- var exceptionMessage = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. ";
- var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage);
+ var responseMessage = await client.PostAsync(
+ url,
+ new StringContent(postData, Encoding.UTF8, MimeTypes.Application.Json),
+ _cancellationTokenProvider.Token
+ );
- if (remoteServiceErrorMessage != null)
- {
- exceptionMessage += remoteServiceErrorMessage;
- }
+ if (!responseMessage.IsSuccessStatusCode)
+ {
+ var exceptionMessage = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. ";
+ var remoteServiceErrorMessage = await _remoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage);
- _logger.LogInformation(exceptionMessage);
+ if (remoteServiceErrorMessage != null)
+ {
+ exceptionMessage += remoteServiceErrorMessage;
}
+
+ _logger.LogInformation(exceptionMessage);
}
}
- catch (Exception ex)
+ catch (Exception)
{
// ignored
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs
index 260fbb745f..1d8da0e3b1 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ModuleInfo.cs
@@ -23,5 +23,7 @@
public bool MvcUi { get; set; }
public bool BlazorUi { get; set; }
+
+ public bool IsFreeToActiveLicenseOwners { get; set; }
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs
index 611d4d5266..ce2c8c3b2a 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs
@@ -55,11 +55,13 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder, _companyName);
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToCamelCase(), _companyName.ToCamelCase());
+ RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToKebabCase(), _companyName.ToKebabCase());
}
else
{
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder + "." + _projectNamePlaceHolder, _projectNamePlaceHolder);
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToCamelCase() + "." + _projectNamePlaceHolder.ToCamelCase(), _projectNamePlaceHolder.ToCamelCase());
+ RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToKebabCase() + "/" + _projectNamePlaceHolder.ToKebabCase(), _projectNamePlaceHolder.ToKebabCase());
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs
index 81bc704151..92bbe728c0 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ModuleInfoProvider.cs
@@ -16,14 +16,18 @@ namespace Volo.Abp.Cli.ProjectBuilding
public ICancellationTokenProvider CancellationTokenProvider { get; }
public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
+
public ModuleInfoProvider(
IJsonSerializer jsonSerializer,
ICancellationTokenProvider cancellationTokenProvider,
- IRemoteServiceExceptionHandler remoteServiceExceptionHandler)
+ IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
+ CliHttpClientFactory cliHttpClientFactory)
{
JsonSerializer = jsonSerializer;
CancellationTokenProvider = cancellationTokenProvider;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
+ _cliHttpClientFactory = cliHttpClientFactory;
}
public async Task GetAsync(string name)
@@ -47,17 +51,16 @@ namespace Volo.Abp.Cli.ProjectBuilding
private async Task> GetModuleListInternalAsync()
{
- using (var client = new CliHttpClient())
+ var client = _cliHttpClientFactory.CreateClient();
+
+ using (var responseMessage = await client.GetAsync(
+ $"{CliUrls.WwwAbpIo}api/download/modules/",
+ CancellationTokenProvider.Token
+ ))
{
- using (var responseMessage = await client.GetAsync(
- $"{CliUrls.WwwAbpIo}api/download/modules/",
- CancellationTokenProvider.Token
- ))
- {
- await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
- var result = await responseMessage.Content.ReadAsStringAsync();
- return JsonSerializer.Deserialize>(result);
- }
+ await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
+ var result = await responseMessage.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize>(result);
}
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs
index b9308dd707..1a4bf3c05a 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateInfoProvider.cs
@@ -24,13 +24,17 @@ namespace Volo.Abp.Cli.ProjectBuilding
public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }
public AuthService AuthService { get; }
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
+
public TemplateInfoProvider(ICancellationTokenProvider cancellationTokenProvider,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
- AuthService authService)
+ AuthService authService,
+ CliHttpClientFactory cliHttpClientFactory)
{
CancellationTokenProvider = cancellationTokenProvider;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
AuthService = authService;
+ _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
}
@@ -76,21 +80,19 @@ namespace Volo.Abp.Cli.ProjectBuilding
try
{
var url = $"{CliUrls.WwwAbpIo}api/license/check-user";
+ var client = _cliHttpClientFactory.CreateClient();
- using (var client = new CliHttpClient())
+ using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger))
{
- using (var response = await client.GetHttpResponseMessageWithRetryAsync(url, CancellationTokenProvider.Token, Logger))
+ if (!response.IsSuccessStatusCode)
{
- if (!response.IsSuccessStatusCode)
- {
- throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
- }
+ throw new Exception($"ERROR: Remote server returns '{response.StatusCode}'");
+ }
- await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
+ await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
- var responseContent = await response.Content.ReadAsStringAsync();
- return JsonSerializer.Deserialize(responseContent);
- }
+ var responseContent = await response.Content.ReadAsStringAsync();
+ return JsonSerializer.Deserialize(responseContent);
}
}
catch (Exception)
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs
index 75e9156ce0..5434ede83f 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/MyGetPackageListFinder.cs
@@ -6,17 +6,23 @@ using Microsoft.Extensions.Logging.Abstractions;
using Newtonsoft.Json;
using Volo.Abp.Cli.Http;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Threading;
namespace Volo.Abp.Cli.ProjectModification
{
public class MyGetPackageListFinder : ISingletonDependency
{
- private MyGetApiResponse _response;
-
public ILogger Logger { get; set; }
- public MyGetPackageListFinder()
+ private MyGetApiResponse _response;
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
+ protected ICancellationTokenProvider CancellationTokenProvider { get; }
+
+ public MyGetPackageListFinder(CliHttpClientFactory cliHttpClientFactory,
+ ICancellationTokenProvider cancellationTokenProvider)
{
+ _cliHttpClientFactory = cliHttpClientFactory;
+ CancellationTokenProvider = cancellationTokenProvider;
Logger = NullLogger.Instance;
}
@@ -29,18 +35,20 @@ namespace Volo.Abp.Cli.ProjectModification
try
{
- using (var client = new CliHttpClient(TimeSpan.FromMinutes(10)))
+ var client = _cliHttpClientFactory.CreateClient();
+
+ using (var responseMessage = await client.GetAsync(
+ $"{CliUrls.WwwAbpIo}api/myget/packages/",
+ _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10))))
{
- var responseMessage = await client.GetAsync(
- $"{CliUrls.WwwAbpIo}api/myget/packages/"
+ _response = JsonConvert.DeserializeObject(
+ Encoding.Default.GetString(await responseMessage.Content.ReadAsByteArrayAsync())
);
-
- _response = JsonConvert.DeserializeObject(Encoding.Default.GetString(await responseMessage.Content.ReadAsByteArrayAsync()));
}
}
- catch (Exception)
+ catch (Exception ex)
{
- Logger.LogError("Unable to get latest preview version.");
+ Logger.LogError("Unable to get latest preview version. Error: " + ex.Message);
throw;
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
index 8fc800c146..bf23bc3786 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
@@ -27,15 +27,18 @@ namespace Volo.Abp.Cli.ProjectModification
private readonly PackageJsonFileFinder _packageJsonFileFinder;
private readonly NpmGlobalPackagesChecker _npmGlobalPackagesChecker;
private readonly Dictionary _fileVersionStorage = new Dictionary();
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
public NpmPackagesUpdater(
PackageJsonFileFinder packageJsonFileFinder,
NpmGlobalPackagesChecker npmGlobalPackagesChecker,
- ICancellationTokenProvider cancellationTokenProvider)
+ ICancellationTokenProvider cancellationTokenProvider,
+ CliHttpClientFactory cliHttpClientFactory)
{
_packageJsonFileFinder = packageJsonFileFinder;
_npmGlobalPackagesChecker = npmGlobalPackagesChecker;
CancellationTokenProvider = cancellationTokenProvider;
+ _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
}
@@ -151,16 +154,14 @@ namespace Volo.Abp.Cli.ProjectModification
{
try
{
- using (var client = new CliHttpClient(TimeSpan.FromMinutes(1)))
+ var client = _cliHttpClientFactory.CreateClient();
+ using (var response = await client.GetHttpResponseMessageWithRetryAsync(
+ url: $"{CliUrls.WwwAbpIo}api/myget/apikey/",
+ cancellationToken: CancellationTokenProvider.Token,
+ logger: Logger
+ ))
{
- using (var response = await client.GetHttpResponseMessageWithRetryAsync(
- url: $"{CliUrls.WwwAbpIo}api/myget/apikey/",
- cancellationToken: CancellationTokenProvider.Token,
- logger: Logger
- ))
- {
- return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync());
- }
+ return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync());
}
}
catch (Exception)
@@ -356,7 +357,7 @@ namespace Volo.Abp.Cli.ProjectModification
protected virtual string ExtractVersions(string output)
{
var arrayStart = output.IndexOf('[');
- return output.Substring(arrayStart, output.IndexOf(']') - arrayStart + 1);
+ return output.Substring(arrayStart, output.IndexOf(']') - arrayStart + 1);
}
protected virtual bool SpecifiedVersionExists(string version, JProperty package)
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs
index 10274f3528..68b6e4fb44 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs
@@ -13,6 +13,7 @@
EntityFrameworkCore = 8,
MongoDB = 9,
SignalR = 10,
- Blazor = 11
+ Blazor = 11,
+ IdentityServer = 12
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs
index 0c02f8cb87..0ac4bb2a51 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs
@@ -22,6 +22,8 @@ namespace Volo.Abp.Cli.ProjectModification
{
case NuGetPackageTarget.Web:
return FindProjectEndsWith(projectFiles, assemblyNames, ".Web");
+ case NuGetPackageTarget.IdentityServer:
+ return FindProjectEndsWith(projectFiles, assemblyNames, ".IdentityServer");
case NuGetPackageTarget.EntityFrameworkCore:
return FindProjectEndsWith(projectFiles, assemblyNames, ".EntityFrameworkCore");
case NuGetPackageTarget.MongoDB:
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 ee736f3aa0..6ebcad2c08 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
@@ -21,13 +21,15 @@ namespace Volo.Abp.Cli.ProjectModification
public class ProjectNugetPackageAdder : ITransientDependency
{
public ILogger Logger { get; set; }
+ public BundleCommand BundleCommand { get; }
protected IJsonSerializer JsonSerializer { get; }
protected ProjectNpmPackageAdder NpmPackageAdder { get; }
protected DerivedClassFinder ModuleClassFinder { get; }
protected ModuleClassDependcyAdder ModuleClassDependcyAdder { get; }
protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }
- public BundleCommand BundleCommand { get; }
+
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
public ProjectNugetPackageAdder(
IJsonSerializer jsonSerializer,
@@ -35,7 +37,8 @@ namespace Volo.Abp.Cli.ProjectModification
DerivedClassFinder moduleClassFinder,
ModuleClassDependcyAdder moduleClassDependcyAdder,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
- BundleCommand bundleCommand)
+ BundleCommand bundleCommand,
+ CliHttpClientFactory cliHttpClientFactory)
{
JsonSerializer = jsonSerializer;
NpmPackageAdder = npmPackageAdder;
@@ -43,6 +46,7 @@ namespace Volo.Abp.Cli.ProjectModification
ModuleClassDependcyAdder = moduleClassDependcyAdder;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
BundleCommand = bundleCommand;
+ _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
}
@@ -121,7 +125,7 @@ namespace Volo.Abp.Cli.ProjectModification
private Task AddToCsprojManuallyAsync(string projectFile, NugetPackageInfo package, string version = null)
{
var projectFileContent = File.ReadAllText(projectFile);
- var doc = new XmlDocument() {PreserveWhitespace = true};
+ var doc = new XmlDocument() { PreserveWhitespace = true };
doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent));
var itemGroupNodes = doc.SelectNodes("/Project/ItemGroup");
@@ -162,7 +166,7 @@ namespace Volo.Abp.Cli.ProjectModification
private string GetAbpVersionOrNull(string projectFileContent)
{
- var doc = new XmlDocument() {PreserveWhitespace = true};
+ var doc = new XmlDocument() { PreserveWhitespace = true };
doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent));
@@ -173,12 +177,11 @@ namespace Volo.Abp.Cli.ProjectModification
protected virtual async Task FindNugetPackageInfoAsync(string packageName)
{
- using (var client = new CliHttpClient())
- {
- var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + packageName;
-
- var response = await client.GetAsync(url);
+ var url = $"{CliUrls.WwwAbpIo}api/app/nugetPackage/byName/?name=" + packageName;
+ var client = _cliHttpClientFactory.CreateClient();
+ using (var response = await client.GetAsync(url, _cliHttpClientFactory.GetCancellationToken()))
+ {
if (!response.IsSuccessStatusCode)
{
if (response.StatusCode == HttpStatusCode.NotFound)
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 90f4ff5d8f..c84713ffcb 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
@@ -7,7 +7,6 @@ using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Volo.Abp.Cli.Args;
-using Volo.Abp.Cli.Bundling;
using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.Commands.Services;
using Volo.Abp.Cli.Http;
@@ -22,6 +21,12 @@ namespace Volo.Abp.Cli.ProjectModification
public class SolutionModuleAdder : ITransientDependency
{
public ILogger Logger { get; set; }
+ public SourceCodeDownloadService SourceCodeDownloadService { get; }
+ public SolutionFileModifier SolutionFileModifier { get; }
+ public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; }
+ public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; }
+ public NewCommand NewCommand { get; }
+ public BundleCommand BundleCommand { get; }
protected IJsonSerializer JsonSerializer { get; }
protected ProjectNugetPackageAdder ProjectNugetPackageAdder { get; }
@@ -31,12 +36,9 @@ namespace Volo.Abp.Cli.ProjectModification
protected ProjectNpmPackageAdder ProjectNpmPackageAdder { get; }
protected NpmGlobalPackagesChecker NpmGlobalPackagesChecker { get; }
protected IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }
- public SourceCodeDownloadService SourceCodeDownloadService { get; }
- public SolutionFileModifier SolutionFileModifier { get; }
- public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; }
- public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; }
- public NewCommand NewCommand { get; }
- public BundleCommand BundleCommand { get; }
+
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
+
public SolutionModuleAdder(
IJsonSerializer jsonSerializer,
@@ -52,7 +54,8 @@ namespace Volo.Abp.Cli.ProjectModification
NugetPackageToLocalReferenceConverter nugetPackageToLocalReferenceConverter,
AngularModuleSourceCodeAdder angularModuleSourceCodeAdder,
NewCommand newCommand,
- BundleCommand bundleCommand)
+ BundleCommand bundleCommand,
+ CliHttpClientFactory cliHttpClientFactory)
{
JsonSerializer = jsonSerializer;
ProjectNugetPackageAdder = projectNugetPackageAdder;
@@ -68,6 +71,7 @@ namespace Volo.Abp.Cli.ProjectModification
AngularModuleSourceCodeAdder = angularModuleSourceCodeAdder;
NewCommand = newCommand;
BundleCommand = bundleCommand;
+ _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
}
@@ -131,7 +135,7 @@ namespace Volo.Abp.Cli.ProjectModification
{
var blazorProject = projectFiles.FirstOrDefault(f => f.EndsWith(".Blazor.csproj"));
- if (blazorProject == null || !module.NugetPackages.Any(np=> np.Target == NuGetPackageTarget.Blazor))
+ if (blazorProject == null || !module.NugetPackages.Any(np => np.Target == NuGetPackageTarget.Blazor))
{
return;
}
@@ -171,7 +175,7 @@ namespace Volo.Abp.Cli.ProjectModification
{
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered);
await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".EntityFrameworkCore.Tests");
- await ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile);
+ ChangeDomainTestReferenceToMongoDB(module, moduleSolutionFile);
}
}
@@ -211,7 +215,7 @@ namespace Volo.Abp.Cli.ProjectModification
return;
}
- var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith(postFix));
+ var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d => d.EndsWith(postFix));
if (projectFolderPath == null)
{
@@ -226,7 +230,7 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
- private async Task ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile)
+ private void ChangeDomainTestReferenceToMongoDB(ModuleWithMastersInfo module, string moduleSolutionFile)
{
var testPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "test");
@@ -235,7 +239,7 @@ namespace Volo.Abp.Cli.ProjectModification
return;
}
- var projectFolderPath = Directory.GetDirectories(testPath).FirstOrDefault(d=> d.EndsWith("Domain.Tests"));
+ var projectFolderPath = Directory.GetDirectories(testPath).FirstOrDefault(d => d.EndsWith("Domain.Tests"));
if (projectFolderPath == null)
{
@@ -250,10 +254,10 @@ namespace Volo.Abp.Cli.ProjectModification
return;
}
- File.WriteAllText(csprojFile, File.ReadAllText(csprojFile).Replace("EntityFrameworkCore","MongoDB"));
+ File.WriteAllText(csprojFile, File.ReadAllText(csprojFile).Replace("EntityFrameworkCore", "MongoDB"));
File.WriteAllText(moduleFile, File.ReadAllText(moduleFile)
- .Replace(".EntityFrameworkCore;",".MongoDB;")
- .Replace("EntityFrameworkCoreTestModule","MongoDbTestModule"));
+ .Replace(".EntityFrameworkCore;", ".MongoDB;")
+ .Replace("EntityFrameworkCoreTestModule", "MongoDbTestModule"));
}
private async Task AddAngularPackages(string solutionFilePath, ModuleWithMastersInfo module)
@@ -355,9 +359,9 @@ namespace Volo.Abp.Cli.ProjectModification
);
}
- await DeleteRedundantHostProjects(targetModuleFolder,"app");
- await DeleteRedundantHostProjects(targetModuleFolder,"demo");
- await DeleteRedundantHostProjects(targetModuleFolder,"host");
+ await DeleteRedundantHostProjects(targetModuleFolder, "app");
+ await DeleteRedundantHostProjects(targetModuleFolder, "demo");
+ await DeleteRedundantHostProjects(targetModuleFolder, "host");
if (module.MasterModuleInfos == null)
{
@@ -501,7 +505,7 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
- protected virtual async Task RunMigrator(string[] projectFiles)
+ protected virtual void RunMigrator(string[] projectFiles)
{
var dbMigratorProject = projectFiles.FirstOrDefault(p => p.EndsWith(".DbMigrator.csproj"));
@@ -516,15 +520,14 @@ namespace Volo.Abp.Cli.ProjectModification
{
if (newTemplate || newProTemplate)
{
- return await GetEmptyModuleProjectInfoAsync(moduleName, newProTemplate);
+ return GetEmptyModuleProjectInfo(moduleName, newProTemplate);
}
- using (var client = new CliHttpClient())
- {
- var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName;
-
- var response = await client.GetAsync(url);
+ var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName;
+ var client = _cliHttpClientFactory.CreateClient();
+ using (var response = await client.GetAsync(url, _cliHttpClientFactory.GetCancellationToken()))
+ {
if (!response.IsSuccessStatusCode)
{
if (response.StatusCode == HttpStatusCode.NotFound)
@@ -540,7 +543,7 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
- private async Task GetEmptyModuleProjectInfoAsync(string moduleName,
+ private ModuleWithMastersInfo GetEmptyModuleProjectInfo(string moduleName,
bool newProTemplate = false)
{
var module = new ModuleWithMastersInfo
@@ -625,7 +628,7 @@ namespace Volo.Abp.Cli.ProjectModification
protected virtual async Task IsProjectTiered(string[] projectFiles)
{
return projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath)
- .Any(p =>p.EndsWith(".HttpApi.Host"))
+ .Any(p => p.EndsWith(".HttpApi.Host"))
&& projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath)
.Any(p => p.EndsWith(".IdentityServer"));
}
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/PlugIns/FolderPlugInSource.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/PlugIns/FolderPlugInSource.cs
index b0544d0338..eb54a19900 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/PlugIns/FolderPlugInSource.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/PlugIns/FolderPlugInSource.cs
@@ -18,7 +18,7 @@ namespace Volo.Abp.Modularity.PlugIns
public Func Filter { get; set; }
public FolderPlugInSource(
- [NotNull] string folder,
+ [NotNull] string folder,
SearchOption searchOption = SearchOption.TopDirectoryOnly)
{
Check.NotNull(folder, nameof(folder));
@@ -52,7 +52,7 @@ namespace Volo.Abp.Modularity.PlugIns
return modules.ToArray();
}
- private IEnumerable GetAssemblies()
+ private List GetAssemblies()
{
var assemblyFiles = AssemblyHelper.GetAssemblyFiles(Folder, SearchOption);
@@ -61,7 +61,7 @@ namespace Volo.Abp.Modularity.PlugIns
assemblyFiles = assemblyFiles.Where(Filter);
}
- return assemblyFiles.Select(AssemblyLoadContext.Default.LoadFromAssemblyPath);
+ return assemblyFiles.Select(AssemblyLoadContext.Default.LoadFromAssemblyPath).ToList();
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDataModule.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDataModule.cs
index 8c9643012e..bc3bc8e5dd 100644
--- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDataModule.cs
+++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDataModule.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
using Volo.Abp.Modularity;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Uow;
@@ -27,6 +28,14 @@ namespace Volo.Abp.Data
context.Services.AddSingleton(typeof(IDataFilter<>), typeof(DataFilter<>));
}
+ public override void PostConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.Databases.RefreshIndexes();
+ });
+ }
+
private static void AutoAddDataSeedContributors(IServiceCollection services)
{
var contributors = new List();
diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDatabaseInfo.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDatabaseInfo.cs
new file mode 100644
index 0000000000..4f719a862a
--- /dev/null
+++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDatabaseInfo.cs
@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.Data
+{
+ public class AbpDatabaseInfo
+ {
+ public string DatabaseName { get; set; }
+
+ ///
+ /// List of connection names mapped to this database.
+ ///
+ public HashSet MappedConnections { get; }
+
+ ///
+ /// Is this database used by tenants. Set this to true if this database
+ /// can't owned by tenants.
+ ///
+ /// Default: true.
+ ///
+ public bool IsUsedByTenants { get; set; } = true;
+
+ internal AbpDatabaseInfo(string databaseName)
+ {
+ DatabaseName = databaseName;
+ MappedConnections = new HashSet();
+ }
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDatabaseInfoDictionary.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDatabaseInfoDictionary.cs
new file mode 100644
index 0000000000..93098d303d
--- /dev/null
+++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDatabaseInfoDictionary.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using JetBrains.Annotations;
+
+namespace Volo.Abp.Data
+{
+ public class AbpDatabaseInfoDictionary : Dictionary
+ {
+ private Dictionary ConnectionIndex { get; set; }
+
+ public AbpDatabaseInfoDictionary()
+ {
+ ConnectionIndex = new Dictionary();
+ }
+
+ [CanBeNull]
+ public AbpDatabaseInfo GetMappedDatabaseOrNull(string connectionStringName)
+ {
+ return ConnectionIndex.GetOrDefault(connectionStringName);
+ }
+
+ public AbpDatabaseInfoDictionary Configure(string databaseName, Action configureAction)
+ {
+ var databaseInfo = this.GetOrAdd(
+ databaseName,
+ () => new AbpDatabaseInfo(databaseName)
+ );
+
+ configureAction(databaseInfo);
+
+ return this;
+ }
+
+ ///
+ /// This method should be called if this dictionary changes.
+ /// It refreshes indexes for quick access to the connection informations.
+ ///
+ public void RefreshIndexes()
+ {
+ ConnectionIndex = new Dictionary();
+
+ foreach (var databaseInfo in Values)
+ {
+ foreach (var mappedConnection in databaseInfo.MappedConnections)
+ {
+ if (ConnectionIndex.ContainsKey(mappedConnection))
+ {
+ throw new AbpException(
+ $"A connection name can not map to multiple databases: {mappedConnection}."
+ );
+ }
+
+ ConnectionIndex[mappedConnection] = databaseInfo;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDbConnectionOptions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDbConnectionOptions.cs
index 863bffb743..9f6ad78a69 100644
--- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDbConnectionOptions.cs
+++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDbConnectionOptions.cs
@@ -1,12 +1,54 @@
-namespace Volo.Abp.Data
+using System;
+using System.Collections.Generic;
+
+namespace Volo.Abp.Data
{
public class AbpDbConnectionOptions
{
public ConnectionStrings ConnectionStrings { get; set; }
+
+ public AbpDatabaseInfoDictionary Databases { get; set; }
public AbpDbConnectionOptions()
{
ConnectionStrings = new ConnectionStrings();
+ Databases = new AbpDatabaseInfoDictionary();
+ }
+
+ public string GetConnectionStringOrNull(
+ string connectionStringName,
+ bool fallbackToDatabaseMappings = true,
+ bool fallbackToDefault = true)
+ {
+ var connectionString = ConnectionStrings.GetOrDefault(connectionStringName);
+ if (!connectionString.IsNullOrEmpty())
+ {
+ return connectionString;
+ }
+
+ if (fallbackToDatabaseMappings)
+ {
+ var database = Databases.GetMappedDatabaseOrNull(connectionStringName);
+ if (database != null)
+ {
+ connectionString = ConnectionStrings.GetOrDefault(database.DatabaseName);
+ if (!connectionString.IsNullOrEmpty())
+ {
+ return connectionString;
+ }
+ }
+ }
+
+ if (fallbackToDefault)
+ {
+ connectionString = ConnectionStrings.Default;
+ if (!connectionString.IsNullOrWhiteSpace())
+ {
+ return connectionString;
+ }
+ }
+
+ return null;
}
}
}
diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DefaultConnectionStringResolver.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DefaultConnectionStringResolver.cs
index 4d5ce2fb27..f907cb0cb6 100644
--- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/DefaultConnectionStringResolver.cs
+++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/DefaultConnectionStringResolver.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
@@ -10,7 +9,8 @@ namespace Volo.Abp.Data
{
protected AbpDbConnectionOptions Options { get; }
- public DefaultConnectionStringResolver(IOptionsSnapshot options)
+ public DefaultConnectionStringResolver(
+ IOptionsSnapshot options)
{
Options = options.Value;
}
@@ -28,18 +28,19 @@ namespace Volo.Abp.Data
private string ResolveInternal(string connectionStringName)
{
- //Get module specific value if provided
- if (!connectionStringName.IsNullOrEmpty())
+ if (connectionStringName == null)
{
- var moduleConnString = Options.ConnectionStrings.GetOrDefault(connectionStringName);
- if (!moduleConnString.IsNullOrEmpty())
- {
- return moduleConnString;
- }
+ return Options.ConnectionStrings.Default;
+ }
+
+ var connectionString = Options.GetConnectionStringOrNull(connectionStringName);
+
+ if (!connectionString.IsNullOrEmpty())
+ {
+ return connectionString;
}
- //Get default value
- return Options.ConnectionStrings.Default;
+ return null;
}
}
-}
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/DependencyInjection/AbpCommonDbContextRegistrationOptions.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/DependencyInjection/AbpCommonDbContextRegistrationOptions.cs
index c7f7230710..dbd46811f2 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/DependencyInjection/AbpCommonDbContextRegistrationOptions.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/DependencyInjection/AbpCommonDbContextRegistrationOptions.cs
@@ -117,25 +117,5 @@ namespace Volo.Abp.DependencyInjection
CustomRepositories[entityType] = repositoryType;
}
-
- public bool ShouldRegisterDefaultRepositoryFor(Type entityType)
- {
- if (!RegisterDefaultRepositories)
- {
- return false;
- }
-
- if (CustomRepositories.ContainsKey(entityType))
- {
- return false;
- }
-
- if (!IncludeAllEntitiesForDefaultRepositories && !typeof(IAggregateRoot).IsAssignableFrom(entityType))
- {
- return false;
- }
-
- return true;
- }
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xml b/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xml
new file mode 100644
index 0000000000..bc5a74a236
--- /dev/null
+++ b/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xsd b/framework/src/Volo.Abp.EventBus.Abstractions/FodyWeavers.xsd
new file mode 100644
index 0000000000..3f3946e282
--- /dev/null
+++ b/framework/src/Volo.Abp.EventBus.Abstractions/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.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj b/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj
new file mode 100644
index 0000000000..ae0cef7f59
--- /dev/null
+++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo.Abp.EventBus.Abstractions.csproj
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/Distributed/EtoBase.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/Domain/Entities/Events/Distributed/EtoBase.cs
similarity index 63%
rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/Distributed/EtoBase.cs
rename to framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/Domain/Entities/Events/Distributed/EtoBase.cs
index f574240dc8..c877dccc58 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/Distributed/EtoBase.cs
+++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/Domain/Entities/Events/Distributed/EtoBase.cs
@@ -6,11 +6,11 @@ namespace Volo.Abp.Domain.Entities.Events.Distributed
[Serializable]
public abstract class EtoBase
{
- public Dictionary Properties { get; }
+ public Dictionary Properties { get; set; }
protected EtoBase()
{
- Properties = new Dictionary();
+ Properties = new Dictionary();
}
}
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Abstractions/AbpEventBusAbstractionsModule.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Abstractions/AbpEventBusAbstractionsModule.cs
new file mode 100644
index 0000000000..bb9d4585b9
--- /dev/null
+++ b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Abstractions/AbpEventBusAbstractionsModule.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.EventBus.Abstractions
+{
+ public class AbpEventBusAbstractionsModule : AbpModule
+ {
+
+ }
+}
diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventNameAttribute.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/EventNameAttribute.cs
similarity index 100%
rename from framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventNameAttribute.cs
rename to framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/EventNameAttribute.cs
diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/GenericEventNameAttribute.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/GenericEventNameAttribute.cs
similarity index 100%
rename from framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/GenericEventNameAttribute.cs
rename to framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/GenericEventNameAttribute.cs
diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventNameProvider.cs b/framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/IEventNameProvider.cs
similarity index 100%
rename from framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventNameProvider.cs
rename to framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/IEventNameProvider.cs
diff --git a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj
index a1799c6673..221454bed3 100644
--- a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj
+++ b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs
index 81c3393a50..eb9c17b129 100644
--- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs
+++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs
@@ -1,6 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
+using Volo.Abp.EventBus.Abstractions;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Modularity;
@@ -9,7 +10,9 @@ using Volo.Abp.Reflection;
namespace Volo.Abp.EventBus
{
- [DependsOn(typeof(AbpMultiTenancyModule))]
+ [DependsOn(
+ typeof(AbpEventBusAbstractionsModule),
+ typeof(AbpMultiTenancyModule))]
public class AbpEventBusModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs
index 1769d8a076..26d15ce818 100644
--- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs
+++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs
@@ -9,11 +9,13 @@ namespace Volo.Abp.Kafka
public KafkaConnections Connections { get; }
public Action ConfigureProducer { get; set; }
-
+
public Action ConfigureConsumer { get; set; }
public Action ConfigureTopic { get; set; }
+ public bool ReQueue { get; set; } = true;
+
public AbpKafkaOptions()
{
Connections = new KafkaConnections();
diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs
index bb7e2d66a3..3b8f022012 100644
--- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs
+++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs
@@ -20,6 +20,8 @@ namespace Volo.Abp.Kafka
protected IConsumerPool ConsumerPool { get; }
+ protected IProducerPool ProducerPool { get; }
+
protected IExceptionNotifier ExceptionNotifier { get; }
protected AbpKafkaOptions Options { get; }
@@ -37,10 +39,12 @@ namespace Volo.Abp.Kafka
public KafkaMessageConsumer(
IConsumerPool consumerPool,
IExceptionNotifier exceptionNotifier,
- IOptions options)
+ IOptions options,
+ IProducerPool producerPool)
{
ConsumerPool = consumerPool;
ExceptionNotifier = exceptionNotifier;
+ ProducerPool = producerPool;
Options = options.Value;
Logger = NullLogger.Instance;
@@ -132,14 +136,29 @@ namespace Volo.Abp.Kafka
{
await callback(consumeResult.Message);
}
-
- Consumer.Commit(consumeResult);
}
catch (Exception ex)
{
+ await RequeueAsync(consumeResult);
+
Logger.LogException(ex);
await ExceptionNotifier.NotifyAsync(ex);
}
+ finally
+ {
+ Consumer.Commit(consumeResult);
+ }
+ }
+
+ protected virtual async Task RequeueAsync(ConsumeResult consumeResult)
+ {
+ if (!Options.ReQueue)
+ {
+ return;
+ }
+
+ var producer = ProducerPool.Get(ConnectionName);
+ await producer.ProduceAsync(consumeResult.Topic, consumeResult.Message);
}
public virtual void Dispose()
diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj b/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj
index 951712c7f0..344dbfdec0 100644
--- a/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj
+++ b/framework/src/Volo.Abp.MultiTenancy/Volo.Abp.MultiTenancy.csproj
@@ -16,6 +16,7 @@
+
diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs
index 9dc64ef7f8..c51daf99aa 100644
--- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs
+++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/AbpMultiTenancyModule.cs
@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Data;
+using Volo.Abp.EventBus.Abstractions;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy.ConfigurationStore;
using Volo.Abp.Security;
@@ -10,7 +11,8 @@ namespace Volo.Abp.MultiTenancy
[DependsOn(
typeof(AbpDataModule),
- typeof(AbpSecurityModule)
+ typeof(AbpSecurityModule),
+ typeof(AbpEventBusAbstractionsModule)
)]
public class AbpMultiTenancyModule : AbpModule
{
diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs
index 0d82419013..41ba7873ac 100644
--- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs
+++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs
@@ -26,105 +26,144 @@ namespace Volo.Abp.MultiTenancy
public override async Task ResolveAsync(string connectionStringName = null)
{
- //No current tenant, fallback to default logic
if (_currentTenant.Id == null)
{
+ //No current tenant, fallback to default logic
return await base.ResolveAsync(connectionStringName);
}
- using (var serviceScope = _serviceProvider.CreateScope())
- {
- var tenantStore = serviceScope
- .ServiceProvider
- .GetRequiredService();
+ var tenant = await FindTenantConfigurationAsync(_currentTenant.Id.Value);
- var tenant = await tenantStore.FindAsync(_currentTenant.Id.Value);
-
- if (tenant?.ConnectionStrings == null)
- {
- return await base.ResolveAsync(connectionStringName);
- }
+ if (tenant == null || tenant.ConnectionStrings.IsNullOrEmpty())
+ {
+ //Tenant has not defined any connection string, fallback to default logic
+ return await base.ResolveAsync(connectionStringName);
+ }
- //Requesting default connection string
- if (connectionStringName == null)
- {
- return tenant.ConnectionStrings.Default ??
- Options.ConnectionStrings.Default;
- }
+ var tenantDefaultConnectionString = tenant.ConnectionStrings.Default;
+
+ //Requesting default connection string...
+ if (connectionStringName == null ||
+ connectionStringName == ConnectionStrings.DefaultConnectionStringName)
+ {
+ //Return tenant's default or global default
+ return !tenantDefaultConnectionString.IsNullOrWhiteSpace()
+ ? tenantDefaultConnectionString
+ : Options.ConnectionStrings.Default;
+ }
- //Requesting specific connection string
- var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName);
- if (connString != null)
+ //Requesting specific connection string...
+ var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName);
+ if (!connString.IsNullOrWhiteSpace())
+ {
+ //Found for the tenant
+ return connString;
+ }
+
+ //Fallback to the mapped database for the specific connection string
+ var database = Options.Databases.GetMappedDatabaseOrNull(connectionStringName);
+ if (database != null)
+ {
+ connString = tenant.ConnectionStrings.GetOrDefault(database.DatabaseName);
+ if (!connString.IsNullOrWhiteSpace())
{
+ //Found for the tenant
return connString;
}
+ }
- /* Requested a specific connection string, but it's not specified for the tenant.
- * - If it's specified in options, use it.
- * - If not, use tenant's default conn string.
- */
-
- var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName);
- if (connStringInOptions != null)
- {
- return connStringInOptions;
- }
-
- return tenant.ConnectionStrings.Default ??
- Options.ConnectionStrings.Default;
+ //Fallback to tenant's default connection string if available
+ if (!tenantDefaultConnectionString.IsNullOrWhiteSpace())
+ {
+ return tenantDefaultConnectionString;
}
+
+ return await base.ResolveAsync(connectionStringName);
}
[Obsolete("Use ResolveAsync method.")]
public override string Resolve(string connectionStringName = null)
{
- //No current tenant, fallback to default logic
if (_currentTenant.Id == null)
{
+ //No current tenant, fallback to default logic
return base.Resolve(connectionStringName);
}
- using (var serviceScope = _serviceProvider.CreateScope())
+ var tenant = FindTenantConfiguration(_currentTenant.Id.Value);
+
+ if (tenant == null || tenant.ConnectionStrings.IsNullOrEmpty())
{
- var tenantStore = serviceScope
- .ServiceProvider
- .GetRequiredService();
+ //Tenant has not defined any connection string, fallback to default logic
+ return base.Resolve(connectionStringName);
+ }
- var tenant = tenantStore.Find(_currentTenant.Id.Value);
+ var tenantDefaultConnectionString = tenant.ConnectionStrings.Default;
- if (tenant?.ConnectionStrings == null)
- {
- return base.Resolve(connectionStringName);
- }
+ //Requesting default connection string...
+ if (connectionStringName == null ||
+ connectionStringName == ConnectionStrings.DefaultConnectionStringName)
+ {
+ //Return tenant's default or global default
+ return !tenantDefaultConnectionString.IsNullOrWhiteSpace()
+ ? tenantDefaultConnectionString
+ : Options.ConnectionStrings.Default;
+ }
- //Requesting default connection string
- if (connectionStringName == null)
- {
- return tenant.ConnectionStrings.Default ??
- Options.ConnectionStrings.Default;
- }
+ //Requesting specific connection string...
+ var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName);
+ if (!connString.IsNullOrWhiteSpace())
+ {
+ //Found for the tenant
+ return connString;
+ }
- //Requesting specific connection string
- var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName);
- if (connString != null)
- {
- return connString;
- }
+ //Fallback to tenant's default connection string if available
+ if (!tenantDefaultConnectionString.IsNullOrWhiteSpace())
+ {
+ return tenantDefaultConnectionString;
+ }
- /* Requested a specific connection string, but it's not specified for the tenant.
- * - If it's specified in options, use it.
- * - If not, use tenant's default conn string.
- */
+ //Try to find the specific connection string for given name
+ var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName);
+ if (!connStringInOptions.IsNullOrWhiteSpace())
+ {
+ return connStringInOptions;
+ }
- var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName);
- if (connStringInOptions != null)
- {
- return connStringInOptions;
- }
+ //Fallback to the global default connection string
+ var defaultConnectionString = Options.ConnectionStrings.Default;
+ if (!defaultConnectionString.IsNullOrWhiteSpace())
+ {
+ return defaultConnectionString;
+ }
+
+ throw new AbpException("No connection string defined!");
+ }
+
+ protected virtual async Task FindTenantConfigurationAsync(Guid tenantId)
+ {
+ using (var serviceScope = _serviceProvider.CreateScope())
+ {
+ var tenantStore = serviceScope
+ .ServiceProvider
+ .GetRequiredService();
+
+ return await tenantStore.FindAsync(tenantId);
+ }
+ }
+
+ [Obsolete("Use FindTenantConfigurationAsync method.")]
+ protected virtual TenantConfiguration FindTenantConfiguration(Guid tenantId)
+ {
+ using (var serviceScope = _serviceProvider.CreateScope())
+ {
+ var tenantStore = serviceScope
+ .ServiceProvider
+ .GetRequiredService();
- return tenant.ConnectionStrings.Default ??
- Options.ConnectionStrings.Default;
+ return tenantStore.Find(tenantId);
}
}
}
-}
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConnectionStringUpdatedEto.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConnectionStringUpdatedEto.cs
new file mode 100644
index 0000000000..022343821b
--- /dev/null
+++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantConnectionStringUpdatedEto.cs
@@ -0,0 +1,21 @@
+using System;
+using Volo.Abp.Domain.Entities.Events.Distributed;
+using Volo.Abp.EventBus;
+
+namespace Volo.Abp.MultiTenancy
+{
+ [Serializable]
+ [EventName("abp.multi_tenancy.tenant.connection_string.updated")]
+ public class TenantConnectionStringUpdatedEto : EtoBase
+ {
+ public Guid Id { get; set; }
+
+ public string Name { get; set; }
+
+ public string ConnectionStringName { get; set; }
+
+ public string OldValue { get; set; }
+
+ public string NewValue { get; set; }
+ }
+}
diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantCreatedEto.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantCreatedEto.cs
new file mode 100644
index 0000000000..317995c971
--- /dev/null
+++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/TenantCreatedEto.cs
@@ -0,0 +1,15 @@
+using System;
+using Volo.Abp.Domain.Entities.Events.Distributed;
+using Volo.Abp.EventBus;
+
+namespace Volo.Abp.MultiTenancy
+{
+ [Serializable]
+ [EventName("abp.multi_tenancy.tenant.created")]
+ public class TenantCreatedEto : EtoBase
+ {
+ public Guid Id { get; set; }
+
+ public string Name { get; set; }
+ }
+}
diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs
index b94663d886..f757efab64 100644
--- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs
+++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs
@@ -191,6 +191,16 @@ namespace Volo.Abp.RabbitMQ
}
catch (Exception ex)
{
+ try
+ {
+ Channel.BasicNack(
+ basicDeliverEventArgs.DeliveryTag,
+ multiple: false,
+ requeue: true
+ );
+ }
+ catch { }
+
Logger.LogException(ex);
await ExceptionNotifier.NotifyAsync(ex);
}
diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json
index 52402db298..076d4b2517 100644
--- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json
+++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json
@@ -11,7 +11,7 @@
"Close": "Cerrar",
"Save": "Guardar",
"SavingWithThreeDot": "Guardando...",
- "Actions": "Actiones",
+ "Actions": "Acciones",
"Delete": "Borrar",
"Edit": "Editar",
"Refresh": "Actualizar",
@@ -49,4 +49,4 @@
"ItemWillBeDeletedMessage": "Este elemento será borrado",
"ManageYourAccount": "Gestiona tu cuenta"
}
-}
\ No newline at end of file
+}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
index 994844bec9..1e583b4c57 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
@@ -3,7 +3,7 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.shared": "^4.2.0",
+ "@abp/aspnetcore.mvc.ui.theme.shared": "^4.2.1",
"highlight.js": "^9.13.1"
},
"devDependencies": {}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
index a50932965e..fd7672cc5e 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
@@ -2,30 +2,30 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.shared@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.0.tgz#a72b5e1cefa27e658b7f072a8c2c1b4ee12baef8"
- integrity sha512-bgWwBBJA/74kFGWh7O+lzb+inV5LOlYOpDoCNAL0XgQTrutrPNHwsk5ZnGVfhSYrBgk47HGVZDwsqKMCTRn1ig==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.2.0"
- "@abp/bootstrap" "~4.2.0"
- "@abp/bootstrap-datepicker" "~4.2.0"
- "@abp/datatables.net-bs4" "~4.2.0"
- "@abp/font-awesome" "~4.2.0"
- "@abp/jquery-form" "~4.2.0"
- "@abp/jquery-validation-unobtrusive" "~4.2.0"
- "@abp/lodash" "~4.2.0"
- "@abp/luxon" "~4.2.0"
- "@abp/malihu-custom-scrollbar-plugin" "~4.2.0"
- "@abp/select2" "~4.2.0"
- "@abp/sweetalert" "~4.2.0"
- "@abp/timeago" "~4.2.0"
- "@abp/toastr" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.0.tgz#9c090f64a33d31962936d8d53b345afeaa9f2ba3"
- integrity sha512-Qt3MUZ41vuvnIVEAYxyOm1mflvFwwvKYsEjFBbePBnwaYL7udooiIFxTEm4FBh3EQJOi+8T84rnXqiIXj4Pi8A==
+"@abp/aspnetcore.mvc.ui.theme.shared@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.1.tgz#18205c13f137dad9876c4153f34273a7c8e69854"
+ integrity sha512-+f54CysWpEKfxjIIjhnTKW0jJ0Rg+wS6yxb9Rg3qxA5iEUkxp3B+NB5wA9rT5YcY9APrwVpiw1miNRmq5ZvFXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.2.1"
+ "@abp/bootstrap" "~4.2.1"
+ "@abp/bootstrap-datepicker" "~4.2.1"
+ "@abp/datatables.net-bs4" "~4.2.1"
+ "@abp/font-awesome" "~4.2.1"
+ "@abp/jquery-form" "~4.2.1"
+ "@abp/jquery-validation-unobtrusive" "~4.2.1"
+ "@abp/lodash" "~4.2.1"
+ "@abp/luxon" "~4.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.2.1"
+ "@abp/select2" "~4.2.1"
+ "@abp/sweetalert" "~4.2.1"
+ "@abp/timeago" "~4.2.1"
+ "@abp/toastr" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.1.tgz#2ad368af731678213ff3d8448a3dd30a2f1f66c9"
+ integrity sha512-/a/KDVQ3EuETSSe+KqmsR24w6RWHvaokvmmOjL+tCpFQyeaYAZ88E9pvM5hC9HVR24FCHTiARiXwgMTw2eZFyQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -36,145 +36,145 @@
micromatch "^4.0.2"
path "^0.12.7"
-"@abp/bootstrap-datepicker@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.0.tgz#92abebe044a91b94b8a3b85560b501120a0fa500"
- integrity sha512-bhEa/+zGVX00vkXGrbKI/hcl9o5Xgqwb27by9ZQqxk9Go4lwsEP/7lrXM49Cg8XZTT3L0/lYclneEMDrqGafaQ==
+"@abp/bootstrap-datepicker@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.1.tgz#87fe913aa6923a39206f4481af3b02309e2cebd5"
+ integrity sha512-35uaM+OBUqsBBIF08NUu7XBVIgwVQIjJard92Px7eR0EJ2AW6f5hNlJQYfPkYVdmkPIpG16qWctICB+L2W3ZKA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.0.tgz#c7ce82ead40bf0d62a318f67f180663ec76aa53c"
- integrity sha512-E1gEX0ct67KFjKiZB6eQcIYJ3TS/pF1S4CxknBVCd77Zs03bHI+eEgBNlwcYriVBbQo+vheUQAaACbi+e2mm3Q==
+"@abp/bootstrap@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.1.tgz#12d8b0cddb5fca55888e01644ff49ed7d78069e9"
+ integrity sha512-1Z4atDgHDxesjBh5uPb442NALcUucS2Lt56CaN5UPBXQvAPr72cw4hfKbW08KJ0ab7WME0uCi1vYZFM28/zqTg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
-"@abp/core@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.0.tgz#20da3d1bab30e80d8864915fdd67e99db729be71"
- integrity sha512-Cfa6Ck+Tr7isVpNxo9qT9eKByLadDErA+QVjeps7qYq9ztIpIz/7Yl85tHYEH0YPO9y2zcSOvxjy5SCBXlph5Q==
+"@abp/core@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.1.tgz#1e74b0ffbc8c938e8de2f320594637910a09cbab"
+ integrity sha512-EiJSgUytS9Mrv8GZr9pwIzxwlrP82hEcS67cAgDxBc4QOhtMXhGZBMjDBHoIkOt6Db/ua0iPC700w0Utt5kWZQ==
dependencies:
- "@abp/utils" "^4.2.0"
+ "@abp/utils" "^4.2.1"
-"@abp/datatables.net-bs4@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.0.tgz#b5cb47235079a4063c5ff8ce78e65596fa587709"
- integrity sha512-N4hp2xCst1qavt07Nf+zXlvbZfeSah64VuMjsZgaimHMlDjxg6zVsTHLgLfzwfPV/eOBrGiecPEuvfEeaqcw4A==
+"@abp/datatables.net-bs4@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.1.tgz#fa6d711e6af352672879130a931fc2d27e5fd9e7"
+ integrity sha512-T66P74F58n4P5xwfhekriSr66A35okrXw61mlMXqeet8ACtxiM55MhXw89qvsL0qo5qG/a9d9MWPYNmZgXvKSQ==
dependencies:
- "@abp/datatables.net" "~4.2.0"
+ "@abp/datatables.net" "~4.2.1"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.0.tgz#2e0273c3212e5a62fc8b4138e4570fb27143f701"
- integrity sha512-33ZkaorkVkPQ7HNtDjyIvcVbvAdFm8V+gFN+xMQZhA10wMlMGrKzVJjriv4NhNpPjtB4/owhOv6wobiuWBrGiA==
+"@abp/datatables.net@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.1.tgz#a5f3549b7b581619bbffb398b2172ed7789d0486"
+ integrity sha512-ZxpSW6PhJupjecTC25MEKTdjePvg2xNouqioL9L7V3lPJ6S3fsqNs9QFjFjpv0vltzXMaZgJTSuxilmR6s6piw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.0.tgz#a637d164634b0df862e4ea620736afae282c71c9"
- integrity sha512-P8OXp+XIZj6l7cNJ5+7Lpl8iixI/bHGSPkATggaOYZ2EWoNR3B/8pj7p44weP2bCAvUEvaxk214BKlpAslo8eQ==
+"@abp/font-awesome@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.1.tgz#81d718b08a1f08bf35dd0887f9c6c9f1ea5416ee"
+ integrity sha512-kWAOqN7OtiBA7gd3VLH7pft1A5KYnJGJCn56xoqWIqLyHrSapwI5IMOojRDr+WhQJXk5EGE+rnmqRP51MYo4NQ==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.0.tgz#12b88a79a69f7d3b15aed8c7ca3ff5bc9f526f22"
- integrity sha512-lxvXhA4kg002gmDTWgoE6TcQWDe6kBcpV4KBB7aK/6LjK3noeT29SPX0kvKxjoUKyM5TqT2Hx7rg4jgtICjFFA==
+"@abp/jquery-form@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.1.tgz#bbc21aafd88aa0f89619ce72fbafc917812d15e4"
+ integrity sha512-xnxaaOExhz7/8/P6XGvQuKitpuVjzoZz+r1Kr+W9gVy0dWZcCOfeVi4kdpxDFpqUmQJQJi0tvdVkFHx/hAkB7g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.0.tgz#05bcd303ec1e22b85389d03a8941eb898bac354f"
- integrity sha512-mtvUcoTD5XSurMFI5cybgWzFI9bn35vU1PvH5NJxJitjJ7sg9gjtLf9WOIddIy4FdqmprhbG2YnR32GITOwFhg==
+"@abp/jquery-validation-unobtrusive@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.1.tgz#36681e75e43e8f708bbd5d6e359eefd8dcce86df"
+ integrity sha512-STuVKdSUNjrW3q30GcszgzecHDdPmL3aA0jPsRJr0S2Wp5CQOe0dB7d5xyAnADIL68cPXjZWlz1OyXSQ2LixeQ==
dependencies:
- "@abp/jquery-validation" "~4.2.0"
+ "@abp/jquery-validation" "~4.2.1"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.0.tgz#a09d7cf2abf8ccf0c59f27eadacb030fb2067bbe"
- integrity sha512-/nvJrs1pt3LJX+SgH3FtDPfCDrcl4M0LDxjV7hf0Y1jtyhvWOQiyJMb8FKzMweTTEOd0pHG/GvOKd90STabSiw==
+"@abp/jquery-validation@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.1.tgz#209b0acb500ac301bb66b3f04bc18b9c574e2fcf"
+ integrity sha512-g87I0nO7Jk2d4Jt7PlLk/bHu5xQFH4+mbHwH4oRLAzflDhRNtNB+uVF35HK/1shprmSlZt6X+bHz652SEqD81g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.0.tgz#0a24488198ca6c9b84273fa028b853ee9f94f3a7"
- integrity sha512-6a42Iy7knhgzvQUvCHenrVnPDKhsOyqgZkPxs9pa9x/wNapSch+jLM7u1ezKAFj/Ai4w9yG/yqP+4YE8seZDZw==
+"@abp/jquery@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.1.tgz#b8ed11cbc02d33cdc99cacbaf5089343a0f164c5"
+ integrity sha512-xcoSu/2qc2AEF+dCTNHTCWjAo1dIcohHVPM3Yh36bb+JEcnruYYRokqZc4pzkh0GQamE1eMVGi3QOAmuURtbCg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
jquery "~3.5.1"
-"@abp/lodash@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.0.tgz#74dfac7d70f1563df2b78c5ebd0b2450e11c4c42"
- integrity sha512-5hpjxWZJPvjMIY7FCCw/v/B+JzJbB/yuoioRzcU4vrisY9uRq54vVYcX7hH1DldsJFPTuXY3Id1WBflHA5I9Aw==
+"@abp/lodash@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.1.tgz#87b7f48cf494553f7cd43dddf625a90581555ae7"
+ integrity sha512-hDwzR/Q9GqXPdQaijQ3B4GIWZ8z9clCW9vU59qbELD8xBZIJalTSrUGnIT8YNB9O5tNFb2FWJJbw5Nh8K7lu1A==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
lodash "^4.17.15"
-"@abp/luxon@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.0.tgz#9cd02faa02cda1315f3e23ae204991ef47d6ae7c"
- integrity sha512-dwtv2kqWCDyQADA1Os0aIy6Au2PhBtN6q9kukLWCvYmQZI23OKuEBMSngbJVTqEPfz0LV6CWbsWCUC3okAs46A==
+"@abp/luxon@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.1.tgz#e29c1fe9903beb0fc4d32cab90a5de4ebc768e43"
+ integrity sha512-Sussnocvw75EbJ1j0Ohn7F+SBQy9xPbiG6RJExdDFzxhUNsVp5wJF2Jm8hOZB3DYkeGAOskY5RoIG0abfE/j3w==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.0.tgz#2f8538df5567a2cf227998e4e2fb9a44b6e814eb"
- integrity sha512-3D5REdR7yw2sRRfm3Oi+qlhDABLrKvfU/l7JcCJy+vrBvadx3e3pTdTLXsGptypPN3x/Qr400LgwIrrgyefN8g==
+"@abp/malihu-custom-scrollbar-plugin@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.1.tgz#0c491d772ab0bb03d7eead0b9715bddb44252d56"
+ integrity sha512-qBnBMzj4G/dAMShmF4EXr55hkMehC1+cB6Jjl1wPHgMV8QPafznBKGyM6KWxGhrl8K6nCErBbidgQKpYqtWhNA==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.0.tgz#eb05d22b1390c037911ba25e5ca0f2ed508a93b1"
- integrity sha512-VlNoa9+F1/kGmaEI2wbL/cRNeAEpp0UdLpbadAnsmpUIODxCULCWS556Q4Y6Ff4CzYtzkYz2qaJ8T8pn+3EOcA==
+"@abp/select2@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.1.tgz#2f397cc1754135642385333bf47a1a106dd9b165"
+ integrity sha512-g1AUGof5daULbVFCokR9JS1/4gIpEWKB5/+rRJBmnje2hUgBA3llD5PCOh5WRHA7urJJOD/5BjWlFdozluUAyg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
select2 "^4.0.13"
-"@abp/sweetalert@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.0.tgz#b1daf641f27f0c8c2e246d364d6285c133faf773"
- integrity sha512-AarV/L031xNB1gk/OYEUxkKZmls7zTwovS2t3ZrmwXXoav7nBCSPjEf1ByR2yhZRU/Yo1SNY/CNQQ4dgyf7Xng==
+"@abp/sweetalert@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.1.tgz#bdbc28c3f73b314b8ca792ea73390fe9f558c03f"
+ integrity sha512-xTi0oSjAkFMIDHgF8YB+oqFCl4gNfnt7mGHvEjJwpCEQSkuML9QsiGvw1TpXyHP7npOWSjjVpoyEBS2HXC778Q==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
sweetalert "^2.1.2"
-"@abp/timeago@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.0.tgz#9b15c496b7e63df93921d41de9e9eaf35a8dccbe"
- integrity sha512-hyuLVGluHxtWEhR0VakPx5UCbyPcfq4lECEgHhI62PvH0xcSNNZ3bp1QnBTd3se/HAYvwA5sCwJY0YXQgUF2UQ==
+"@abp/timeago@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.1.tgz#38474ed4455e94c687a3124e1a6e77c3b29a87d3"
+ integrity sha512-46+2plKizUcRn2VWN5WPWvwEVz+xoKOmsH1tEJ8WKKNxjeNRAsfeOslbfIEks89hTXLQemP3txAbq9V3E8pwQw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
timeago "^1.6.7"
-"@abp/toastr@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.0.tgz#400e2f28b19c72b131ca32aa188ff5151d035752"
- integrity sha512-tuGZd3kXqj1t/Y1xN8sOUH1KxiArYKD7xkhuajoOS65Ex5ad8mHPuzCtu8Pv+KL8TVFys9x3U3Tg24DQ6ASjhQ==
+"@abp/toastr@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.1.tgz#9e30607f7ff7067588d0a660226d338003c37707"
+ integrity sha512-fdlMZjffEO/05aeG8BjTspARKGtUu2SpoFViTeHGhSPsCW55BvuehIgRhyOEQNfMqJz8m0cVR0R2q+WPFWf1XA==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
toastr "^2.1.4"
-"@abp/utils@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.0.tgz#073330e3e3f6ee61892f50260e48dbe1b05df35e"
- integrity sha512-75qR3SdiAa75wqleAx9sUMXLj4m9duuBo5+2sVv7Y29GcEyKUPvm8B1s6tksvSGA0e3vnFTHeVEc10eD1xKHSQ==
+"@abp/utils@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.1.tgz#1f5bfa7aae0065ec4dc38f1f5dc393b664c92d5c"
+ integrity sha512-V7XYC38u4C+UpXQr28KA1KHL5nNgDsFHfZULPnkwPxV8DuhzemmPYN3qmSXi5hfSfp+psNCX3GYZRMCI57kHgQ==
dependencies:
just-compare "^1.3.0"
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
index cc12cde188..5b59cb4e77 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
@@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.0",
- "@abp/prismjs": "^4.2.0"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.1",
+ "@abp/prismjs": "^4.2.1"
},
"devDependencies": {}
-}
\ No newline at end of file
+}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
index c3d415ce3b..ab9fe53b89 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.0.tgz#01d6aab8a31fd6ea828b753805f1ba9a9165975f"
- integrity sha512-d+7YubPbuBRY8tjqBxS4I1gyxekjg8Z0X9QaDrf/SGQBoWpIdbG09AekNdddKNkimWcPg4UgUytahPuX9f17ZA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.0.tgz#a72b5e1cefa27e658b7f072a8c2c1b4ee12baef8"
- integrity sha512-bgWwBBJA/74kFGWh7O+lzb+inV5LOlYOpDoCNAL0XgQTrutrPNHwsk5ZnGVfhSYrBgk47HGVZDwsqKMCTRn1ig==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.2.0"
- "@abp/bootstrap" "~4.2.0"
- "@abp/bootstrap-datepicker" "~4.2.0"
- "@abp/datatables.net-bs4" "~4.2.0"
- "@abp/font-awesome" "~4.2.0"
- "@abp/jquery-form" "~4.2.0"
- "@abp/jquery-validation-unobtrusive" "~4.2.0"
- "@abp/lodash" "~4.2.0"
- "@abp/luxon" "~4.2.0"
- "@abp/malihu-custom-scrollbar-plugin" "~4.2.0"
- "@abp/select2" "~4.2.0"
- "@abp/sweetalert" "~4.2.0"
- "@abp/timeago" "~4.2.0"
- "@abp/toastr" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.0.tgz#9c090f64a33d31962936d8d53b345afeaa9f2ba3"
- integrity sha512-Qt3MUZ41vuvnIVEAYxyOm1mflvFwwvKYsEjFBbePBnwaYL7udooiIFxTEm4FBh3EQJOi+8T84rnXqiIXj4Pi8A==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.1.tgz#78b465ab8fcd68a38e2b868717d00e5f5d3b0c61"
+ integrity sha512-Tb0g4mtdSsjQkadvnjjRjObEhweUvigto0BTv5SzRNi0oQLW8ZVUcFmuMWB09nJAIPrbuA3QuPUlXzFcv2gsdg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.1.tgz#18205c13f137dad9876c4153f34273a7c8e69854"
+ integrity sha512-+f54CysWpEKfxjIIjhnTKW0jJ0Rg+wS6yxb9Rg3qxA5iEUkxp3B+NB5wA9rT5YcY9APrwVpiw1miNRmq5ZvFXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.2.1"
+ "@abp/bootstrap" "~4.2.1"
+ "@abp/bootstrap-datepicker" "~4.2.1"
+ "@abp/datatables.net-bs4" "~4.2.1"
+ "@abp/font-awesome" "~4.2.1"
+ "@abp/jquery-form" "~4.2.1"
+ "@abp/jquery-validation-unobtrusive" "~4.2.1"
+ "@abp/lodash" "~4.2.1"
+ "@abp/luxon" "~4.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.2.1"
+ "@abp/select2" "~4.2.1"
+ "@abp/sweetalert" "~4.2.1"
+ "@abp/timeago" "~4.2.1"
+ "@abp/toastr" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.1.tgz#2ad368af731678213ff3d8448a3dd30a2f1f66c9"
+ integrity sha512-/a/KDVQ3EuETSSe+KqmsR24w6RWHvaokvmmOjL+tCpFQyeaYAZ88E9pvM5hC9HVR24FCHTiARiXwgMTw2eZFyQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -43,162 +43,162 @@
micromatch "^4.0.2"
path "^0.12.7"
-"@abp/bootstrap-datepicker@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.0.tgz#92abebe044a91b94b8a3b85560b501120a0fa500"
- integrity sha512-bhEa/+zGVX00vkXGrbKI/hcl9o5Xgqwb27by9ZQqxk9Go4lwsEP/7lrXM49Cg8XZTT3L0/lYclneEMDrqGafaQ==
+"@abp/bootstrap-datepicker@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.1.tgz#87fe913aa6923a39206f4481af3b02309e2cebd5"
+ integrity sha512-35uaM+OBUqsBBIF08NUu7XBVIgwVQIjJard92Px7eR0EJ2AW6f5hNlJQYfPkYVdmkPIpG16qWctICB+L2W3ZKA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.0.tgz#c7ce82ead40bf0d62a318f67f180663ec76aa53c"
- integrity sha512-E1gEX0ct67KFjKiZB6eQcIYJ3TS/pF1S4CxknBVCd77Zs03bHI+eEgBNlwcYriVBbQo+vheUQAaACbi+e2mm3Q==
+"@abp/bootstrap@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.1.tgz#12d8b0cddb5fca55888e01644ff49ed7d78069e9"
+ integrity sha512-1Z4atDgHDxesjBh5uPb442NALcUucS2Lt56CaN5UPBXQvAPr72cw4hfKbW08KJ0ab7WME0uCi1vYZFM28/zqTg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
-"@abp/clipboard@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.2.0.tgz#860220df1d57ef64e864401d56cb5cf7068d5861"
- integrity sha512-yBgMDhpqPEHp9N9//Ur1BEIOicFIoKBut75PMz9XPOttLyqCmqHYEPj/jgAkUzLd5O+fJM9TE3yGNM7YdRbRPg==
+"@abp/clipboard@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.2.1.tgz#93132b1f3009883da00d074e9ce2a45fdb368fea"
+ integrity sha512-yMbBbiPdm187XtPX0unfdjSTd5Lmh9U527kw/suq0NqFwMEOVQkdW7gA1Xm1Ierit5OwvNP3vE6sHqTk7LhLWw==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
clipboard "^2.0.6"
-"@abp/core@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.0.tgz#20da3d1bab30e80d8864915fdd67e99db729be71"
- integrity sha512-Cfa6Ck+Tr7isVpNxo9qT9eKByLadDErA+QVjeps7qYq9ztIpIz/7Yl85tHYEH0YPO9y2zcSOvxjy5SCBXlph5Q==
+"@abp/core@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.1.tgz#1e74b0ffbc8c938e8de2f320594637910a09cbab"
+ integrity sha512-EiJSgUytS9Mrv8GZr9pwIzxwlrP82hEcS67cAgDxBc4QOhtMXhGZBMjDBHoIkOt6Db/ua0iPC700w0Utt5kWZQ==
dependencies:
- "@abp/utils" "^4.2.0"
+ "@abp/utils" "^4.2.1"
-"@abp/datatables.net-bs4@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.0.tgz#b5cb47235079a4063c5ff8ce78e65596fa587709"
- integrity sha512-N4hp2xCst1qavt07Nf+zXlvbZfeSah64VuMjsZgaimHMlDjxg6zVsTHLgLfzwfPV/eOBrGiecPEuvfEeaqcw4A==
+"@abp/datatables.net-bs4@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.1.tgz#fa6d711e6af352672879130a931fc2d27e5fd9e7"
+ integrity sha512-T66P74F58n4P5xwfhekriSr66A35okrXw61mlMXqeet8ACtxiM55MhXw89qvsL0qo5qG/a9d9MWPYNmZgXvKSQ==
dependencies:
- "@abp/datatables.net" "~4.2.0"
+ "@abp/datatables.net" "~4.2.1"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.0.tgz#2e0273c3212e5a62fc8b4138e4570fb27143f701"
- integrity sha512-33ZkaorkVkPQ7HNtDjyIvcVbvAdFm8V+gFN+xMQZhA10wMlMGrKzVJjriv4NhNpPjtB4/owhOv6wobiuWBrGiA==
+"@abp/datatables.net@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.1.tgz#a5f3549b7b581619bbffb398b2172ed7789d0486"
+ integrity sha512-ZxpSW6PhJupjecTC25MEKTdjePvg2xNouqioL9L7V3lPJ6S3fsqNs9QFjFjpv0vltzXMaZgJTSuxilmR6s6piw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.0.tgz#a637d164634b0df862e4ea620736afae282c71c9"
- integrity sha512-P8OXp+XIZj6l7cNJ5+7Lpl8iixI/bHGSPkATggaOYZ2EWoNR3B/8pj7p44weP2bCAvUEvaxk214BKlpAslo8eQ==
+"@abp/font-awesome@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.1.tgz#81d718b08a1f08bf35dd0887f9c6c9f1ea5416ee"
+ integrity sha512-kWAOqN7OtiBA7gd3VLH7pft1A5KYnJGJCn56xoqWIqLyHrSapwI5IMOojRDr+WhQJXk5EGE+rnmqRP51MYo4NQ==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.0.tgz#12b88a79a69f7d3b15aed8c7ca3ff5bc9f526f22"
- integrity sha512-lxvXhA4kg002gmDTWgoE6TcQWDe6kBcpV4KBB7aK/6LjK3noeT29SPX0kvKxjoUKyM5TqT2Hx7rg4jgtICjFFA==
+"@abp/jquery-form@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.1.tgz#bbc21aafd88aa0f89619ce72fbafc917812d15e4"
+ integrity sha512-xnxaaOExhz7/8/P6XGvQuKitpuVjzoZz+r1Kr+W9gVy0dWZcCOfeVi4kdpxDFpqUmQJQJi0tvdVkFHx/hAkB7g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.0.tgz#05bcd303ec1e22b85389d03a8941eb898bac354f"
- integrity sha512-mtvUcoTD5XSurMFI5cybgWzFI9bn35vU1PvH5NJxJitjJ7sg9gjtLf9WOIddIy4FdqmprhbG2YnR32GITOwFhg==
+"@abp/jquery-validation-unobtrusive@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.1.tgz#36681e75e43e8f708bbd5d6e359eefd8dcce86df"
+ integrity sha512-STuVKdSUNjrW3q30GcszgzecHDdPmL3aA0jPsRJr0S2Wp5CQOe0dB7d5xyAnADIL68cPXjZWlz1OyXSQ2LixeQ==
dependencies:
- "@abp/jquery-validation" "~4.2.0"
+ "@abp/jquery-validation" "~4.2.1"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.0.tgz#a09d7cf2abf8ccf0c59f27eadacb030fb2067bbe"
- integrity sha512-/nvJrs1pt3LJX+SgH3FtDPfCDrcl4M0LDxjV7hf0Y1jtyhvWOQiyJMb8FKzMweTTEOd0pHG/GvOKd90STabSiw==
+"@abp/jquery-validation@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.1.tgz#209b0acb500ac301bb66b3f04bc18b9c574e2fcf"
+ integrity sha512-g87I0nO7Jk2d4Jt7PlLk/bHu5xQFH4+mbHwH4oRLAzflDhRNtNB+uVF35HK/1shprmSlZt6X+bHz652SEqD81g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.0.tgz#0a24488198ca6c9b84273fa028b853ee9f94f3a7"
- integrity sha512-6a42Iy7knhgzvQUvCHenrVnPDKhsOyqgZkPxs9pa9x/wNapSch+jLM7u1ezKAFj/Ai4w9yG/yqP+4YE8seZDZw==
+"@abp/jquery@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.1.tgz#b8ed11cbc02d33cdc99cacbaf5089343a0f164c5"
+ integrity sha512-xcoSu/2qc2AEF+dCTNHTCWjAo1dIcohHVPM3Yh36bb+JEcnruYYRokqZc4pzkh0GQamE1eMVGi3QOAmuURtbCg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
jquery "~3.5.1"
-"@abp/lodash@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.0.tgz#74dfac7d70f1563df2b78c5ebd0b2450e11c4c42"
- integrity sha512-5hpjxWZJPvjMIY7FCCw/v/B+JzJbB/yuoioRzcU4vrisY9uRq54vVYcX7hH1DldsJFPTuXY3Id1WBflHA5I9Aw==
+"@abp/lodash@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.1.tgz#87b7f48cf494553f7cd43dddf625a90581555ae7"
+ integrity sha512-hDwzR/Q9GqXPdQaijQ3B4GIWZ8z9clCW9vU59qbELD8xBZIJalTSrUGnIT8YNB9O5tNFb2FWJJbw5Nh8K7lu1A==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
lodash "^4.17.15"
-"@abp/luxon@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.0.tgz#9cd02faa02cda1315f3e23ae204991ef47d6ae7c"
- integrity sha512-dwtv2kqWCDyQADA1Os0aIy6Au2PhBtN6q9kukLWCvYmQZI23OKuEBMSngbJVTqEPfz0LV6CWbsWCUC3okAs46A==
+"@abp/luxon@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.1.tgz#e29c1fe9903beb0fc4d32cab90a5de4ebc768e43"
+ integrity sha512-Sussnocvw75EbJ1j0Ohn7F+SBQy9xPbiG6RJExdDFzxhUNsVp5wJF2Jm8hOZB3DYkeGAOskY5RoIG0abfE/j3w==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.0.tgz#2f8538df5567a2cf227998e4e2fb9a44b6e814eb"
- integrity sha512-3D5REdR7yw2sRRfm3Oi+qlhDABLrKvfU/l7JcCJy+vrBvadx3e3pTdTLXsGptypPN3x/Qr400LgwIrrgyefN8g==
+"@abp/malihu-custom-scrollbar-plugin@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.1.tgz#0c491d772ab0bb03d7eead0b9715bddb44252d56"
+ integrity sha512-qBnBMzj4G/dAMShmF4EXr55hkMehC1+cB6Jjl1wPHgMV8QPafznBKGyM6KWxGhrl8K6nCErBbidgQKpYqtWhNA==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/prismjs@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.2.0.tgz#8cedfac538d225930c3654f0d94cad0102faa2f4"
- integrity sha512-f4duxGD47p2TDMNiiBcvvjOG1hjhSbAoXyq306RrbP0CBUVTdjzzVhCPPnr5+nMoG55VlRBqh92zkax5kdgwQg==
+"@abp/prismjs@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.2.1.tgz#4029e69efe88a24903760cb3031c90ae1ddb0d3c"
+ integrity sha512-QxSQ4l8Bdpl8sntZWlPdSb2YQwSMtFPqudod/4atC0ttZKK1DZNMW3HRInsRo3gZDc9XzwMAazci4BPaJHG6eA==
dependencies:
- "@abp/clipboard" "~4.2.0"
- "@abp/core" "~4.2.0"
+ "@abp/clipboard" "~4.2.1"
+ "@abp/core" "~4.2.1"
prismjs "^1.20.0"
-"@abp/select2@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.0.tgz#eb05d22b1390c037911ba25e5ca0f2ed508a93b1"
- integrity sha512-VlNoa9+F1/kGmaEI2wbL/cRNeAEpp0UdLpbadAnsmpUIODxCULCWS556Q4Y6Ff4CzYtzkYz2qaJ8T8pn+3EOcA==
+"@abp/select2@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.1.tgz#2f397cc1754135642385333bf47a1a106dd9b165"
+ integrity sha512-g1AUGof5daULbVFCokR9JS1/4gIpEWKB5/+rRJBmnje2hUgBA3llD5PCOh5WRHA7urJJOD/5BjWlFdozluUAyg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
select2 "^4.0.13"
-"@abp/sweetalert@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.0.tgz#b1daf641f27f0c8c2e246d364d6285c133faf773"
- integrity sha512-AarV/L031xNB1gk/OYEUxkKZmls7zTwovS2t3ZrmwXXoav7nBCSPjEf1ByR2yhZRU/Yo1SNY/CNQQ4dgyf7Xng==
+"@abp/sweetalert@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.1.tgz#bdbc28c3f73b314b8ca792ea73390fe9f558c03f"
+ integrity sha512-xTi0oSjAkFMIDHgF8YB+oqFCl4gNfnt7mGHvEjJwpCEQSkuML9QsiGvw1TpXyHP7npOWSjjVpoyEBS2HXC778Q==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
sweetalert "^2.1.2"
-"@abp/timeago@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.0.tgz#9b15c496b7e63df93921d41de9e9eaf35a8dccbe"
- integrity sha512-hyuLVGluHxtWEhR0VakPx5UCbyPcfq4lECEgHhI62PvH0xcSNNZ3bp1QnBTd3se/HAYvwA5sCwJY0YXQgUF2UQ==
+"@abp/timeago@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.1.tgz#38474ed4455e94c687a3124e1a6e77c3b29a87d3"
+ integrity sha512-46+2plKizUcRn2VWN5WPWvwEVz+xoKOmsH1tEJ8WKKNxjeNRAsfeOslbfIEks89hTXLQemP3txAbq9V3E8pwQw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
timeago "^1.6.7"
-"@abp/toastr@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.0.tgz#400e2f28b19c72b131ca32aa188ff5151d035752"
- integrity sha512-tuGZd3kXqj1t/Y1xN8sOUH1KxiArYKD7xkhuajoOS65Ex5ad8mHPuzCtu8Pv+KL8TVFys9x3U3Tg24DQ6ASjhQ==
+"@abp/toastr@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.1.tgz#9e30607f7ff7067588d0a660226d338003c37707"
+ integrity sha512-fdlMZjffEO/05aeG8BjTspARKGtUu2SpoFViTeHGhSPsCW55BvuehIgRhyOEQNfMqJz8m0cVR0R2q+WPFWf1XA==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
toastr "^2.1.4"
-"@abp/utils@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.0.tgz#073330e3e3f6ee61892f50260e48dbe1b05df35e"
- integrity sha512-75qR3SdiAa75wqleAx9sUMXLj4m9duuBo5+2sVv7Y29GcEyKUPvm8B1s6tksvSGA0e3vnFTHeVEc10eD1xKHSQ==
+"@abp/utils@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.1.tgz#1f5bfa7aae0065ec4dc38f1f5dc393b664c92d5c"
+ integrity sha512-V7XYC38u4C+UpXQr28KA1KHL5nNgDsFHfZULPnkwPxV8DuhzemmPYN3qmSXi5hfSfp+psNCX3GYZRMCI57kHgQ==
dependencies:
just-compare "^1.3.0"
diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs
new file mode 100644
index 0000000000..c1995970b5
--- /dev/null
+++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_CustomServiceConstruction_Tests.cs
@@ -0,0 +1,83 @@
+using System;
+using AutoMapper;
+using Microsoft.Extensions.DependencyInjection;
+using Shouldly;
+using Volo.Abp.Modularity;
+using Volo.Abp.Testing;
+using Xunit;
+using IObjectMapper = Volo.Abp.ObjectMapping.IObjectMapper;
+
+namespace Volo.Abp.AutoMapper
+{
+ public class AutoMapper_CustomServiceConstruction_Tests : AbpIntegratedTest
+ {
+ private readonly IObjectMapper _objectMapper;
+
+ public AutoMapper_CustomServiceConstruction_Tests()
+ {
+ _objectMapper = ServiceProvider.GetRequiredService();
+ }
+
+ [Fact]
+ public void Should_Custom_Service_Construction()
+ {
+ var source = new SourceModel
+ {
+ Name = nameof(SourceModel)
+ };
+ _objectMapper.Map(source).Name.ShouldBe(nameof(CustomMappingAction));
+ }
+
+ [DependsOn(typeof(AbpAutoMapperModule))]
+ public class TestModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.AddMaps();
+ options.Configurators.Add(configurationContext =>
+ {
+ configurationContext.MapperConfiguration.ConstructServicesUsing(type =>
+ type.Name.Contains(nameof(CustomMappingAction))
+ ? new CustomMappingAction(nameof(CustomMappingAction))
+ : Activator.CreateInstance(type));
+ });
+ });
+ }
+ }
+
+ public class SourceModel
+ {
+ public string Name { get; set; }
+ }
+
+ public class DestModel
+ {
+ public string Name { get; set; }
+ }
+
+ public class MapperActionProfile : Profile
+ {
+ public MapperActionProfile()
+ {
+ CreateMap().AfterMap();
+ }
+ }
+
+ public class CustomMappingAction : IMappingAction
+ {
+ private readonly string _name;
+
+ public CustomMappingAction(string name)
+ {
+ _name = name;
+ }
+
+ public void Process(SourceModel source, DestModel destination, ResolutionContext context)
+ {
+ destination.Name = _name;
+ }
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs
index 56c5e6f061..7edf32eb23 100644
--- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs
+++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AutoMapper_Dependency_Injection_Tests.cs
@@ -19,7 +19,7 @@ namespace Volo.Abp.AutoMapper
[Fact]
public void Should_Registered_AutoMapper_Service()
{
- GetService().ShouldNotBeNull();
+ GetService().ShouldNotBeNull();
}
[Fact]
@@ -47,15 +47,30 @@ namespace Volo.Abp.AutoMapper
{
public MapperActionProfile()
{
- CreateMap().AfterMap();
+ CreateMap().AfterMap();
}
}
- public class CustomMappingActionService : IMappingAction
+ public class CustomMappingAction : IMappingAction
{
+ private readonly CustomMappingActionService _customMappingActionService;
+
+ public CustomMappingAction(CustomMappingActionService customMappingActionService)
+ {
+ _customMappingActionService = customMappingActionService;
+ }
+
public void Process(SourceModel source, DestModel destination, ResolutionContext context)
{
- destination.Name = nameof(CustomMappingActionService);
+ destination.Name = _customMappingActionService.GetName();
+ }
+ }
+
+ public class CustomMappingActionService : ITransientDependency
+ {
+ public string GetName()
+ {
+ return nameof(CustomMappingActionService);
}
}
}
diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs
index 32876c08fe..c1d5af64ef 100644
--- a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs
+++ b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/DistributedCache_Tests.cs
@@ -712,5 +712,240 @@ namespace Volo.Abp.Caching
(await personCache.GetAsync("john")).Name.ShouldBe("John Nash");
(await personCache.GetAsync("baris")).ShouldBeNull();
}
+
+ [Fact]
+ public async Task Should_Get_And_Add_Multiple_Items_Async()
+ {
+ var testkey = "testkey";
+ var testkey2 = "testkey2";
+
+ var testkey3 = new[] {testkey, testkey2};
+ var personCache = GetRequiredService>();
+
+ await personCache.SetAsync(testkey, new PersonCacheItem("john"));
+
+ var cacheValue = await personCache.GetManyAsync(testkey3);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.ShouldBeNull();
+
+ cacheValue = await personCache.GetOrAddManyAsync(testkey3, (missingKeys) =>
+ {
+ var missingKeyArray = missingKeys.ToArray();
+ missingKeyArray.Length.ShouldBe(1);
+ missingKeyArray[0].ShouldBe(testkey2);
+
+ return Task.FromResult(new List>
+ {
+ new(testkey2, new PersonCacheItem("jack"))
+ });
+ });
+
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+
+ cacheValue = await personCache.GetManyAsync(testkey3);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+ }
+
+ [Fact]
+ public async Task Cache_Should_Only_Available_In_Uow_For_GetOrAddManyAsync()
+ {
+ var testkey = "testkey";
+ var testkey2 = "testkey2";
+
+ var testkey3 = new[] {testkey, testkey2};
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetOrAddManyAsync(testkey3, (missingKeys) => Task.FromResult(new List>
+ {
+ new(testkey, new PersonCacheItem("john")),
+ new(testkey2, new PersonCacheItem("jack")),
+ }), considerUow: true);
+
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+
+ uow.OnCompleted(async () =>
+ {
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+ });
+
+ await uow.CompleteAsync();
+ }
+ }
+
+ [Fact]
+ public async Task Cache_Should_Rollback_With_Uow_For_GetOrAddManyAsync()
+ {
+ var testkey = "testkey";
+ var testkey2 = "testkey2";
+
+ var testkey3 = new[] {testkey, testkey2};
+
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ cacheValue = await personCache.GetOrAddManyAsync(testkey3, (missingKeys) => Task.FromResult(new List>
+ {
+ new(testkey, new PersonCacheItem("john")),
+ new(testkey2, new PersonCacheItem("jack")),
+ }), considerUow: true);
+
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+ }
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+ }
+
+ [Fact]
+ public async Task Should_Remove_Multiple_Items_Async()
+ {
+ var testkey = "testkey";
+ var testkey2 = "testkey2";
+ var testkey3 = new[] {testkey, testkey2};
+
+ var personCache = GetRequiredService>();
+
+ await personCache.SetManyAsync(new List>
+ {
+ new(testkey, new PersonCacheItem("john")),
+ new(testkey2, new PersonCacheItem("jack"))
+ });
+
+ await personCache.RemoveManyAsync(testkey3);
+
+ var cacheValue = await personCache.GetManyAsync(testkey3);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+ }
+
+ [Fact]
+ public async Task Cache_Should_Only_Available_In_Uow_For_RemoveManyAsync()
+ {
+ var testkey = "testkey";
+ var testkey2 = "testkey2";
+ var testkey3 = new[] {testkey, testkey2};
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ await personCache.SetManyAsync(new List>
+ {
+ new(testkey, new PersonCacheItem("john")),
+ new(testkey2, new PersonCacheItem("jack"))
+ });
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+
+ await personCache.RemoveManyAsync(testkey3, considerUow: true);
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+
+ uow.OnCompleted(async () =>
+ {
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.ShouldNotBeNull();
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+ });
+
+ await uow.CompleteAsync();
+ }
+
+ }
+
+ [Fact]
+ public async Task Cache_Should_Rollback_With_Uow_For_RemoveManyAsync()
+ {
+ var testkey = "testkey";
+ var testkey2 = "testkey2";
+ var testkey3 = new[] {testkey, testkey2};
+ var personCache = GetRequiredService>();
+
+ var cacheValue = await personCache.GetManyAsync(testkey3, considerUow: false);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+
+ using (var uow = GetRequiredService().Begin())
+ {
+ await personCache.SetManyAsync(new List>
+ {
+ new(testkey, new PersonCacheItem("john")),
+ new(testkey2, new PersonCacheItem("jack"))
+ }, considerUow: true);
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.Name.ShouldBe("john");
+ cacheValue[1].Value.Name.ShouldBe("jack");
+
+ await personCache.RemoveManyAsync(testkey3, considerUow: true);
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+ }
+
+ cacheValue = await personCache.GetManyAsync(testkey3, considerUow: true);
+ cacheValue.Length.ShouldBe(2);
+ cacheValue[0].Value.ShouldBeNull();
+ cacheValue[1].Value.ShouldBeNull();
+ }
}
}
diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/TestMemoryDistributedCache.cs b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/TestMemoryDistributedCache.cs
index 69589d97cd..5df5b488d9 100644
--- a/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/TestMemoryDistributedCache.cs
+++ b/framework/test/Volo.Abp.Caching.Tests/Volo/Abp/Caching/TestMemoryDistributedCache.cs
@@ -57,5 +57,37 @@ namespace Volo.Abp.Caching
await SetAsync(item.Key, item.Value, options, token);
}
}
+
+ public void RefreshMany(IEnumerable keys)
+ {
+ foreach (var key in keys)
+ {
+ Refresh(key);
+ }
+ }
+
+ public async Task RefreshManyAsync(IEnumerable keys, CancellationToken token = default)
+ {
+ foreach (var key in keys)
+ {
+ await RefreshAsync(key, token);
+ }
+ }
+
+ public void RemoveMany(IEnumerable keys)
+ {
+ foreach (var key in keys)
+ {
+ Remove(key);
+ }
+ }
+
+ public async Task RemoveManyAsync(IEnumerable keys, CancellationToken token = default)
+ {
+ foreach (var key in keys)
+ {
+ await RemoveAsync(key, token);
+ }
+ }
}
}
diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus_Test.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus_Test.cs
index d3371f383a..5bea07fc44 100644
--- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus_Test.cs
+++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus_Test.cs
@@ -44,5 +44,23 @@ namespace Volo.Abp.EventBus.Distributed
Assert.Equal(tenantId, MySimpleDistributedSingleInstanceEventHandler.TenantId);
}
+
+ [Fact]
+ public async Task Should_Get_TenantId_From_EventEto_Extra_Property()
+ {
+ var tenantId = Guid.NewGuid();
+
+ DistributedEventBus.Subscribe(GetRequiredService());
+
+ await DistributedEventBus.PublishAsync(new MySimpleEto
+ {
+ Properties =
+ {
+ {"TenantId", tenantId.ToString()}
+ }
+ });
+
+ Assert.Equal(tenantId, MySimpleDistributedSingleInstanceEventHandler.TenantId);
+ }
}
}
diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/MySimpleDistributedSingleInstanceEventHandler.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/MySimpleDistributedSingleInstanceEventHandler.cs
index 53fe8e347b..9141a28024 100644
--- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/MySimpleDistributedSingleInstanceEventHandler.cs
+++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Distributed/MySimpleDistributedSingleInstanceEventHandler.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
@@ -6,7 +7,7 @@ using Volo.Abp.MultiTenancy;
namespace Volo.Abp.EventBus.Distributed
{
- public class MySimpleDistributedSingleInstanceEventHandler : IDistributedEventHandler, IDistributedEventHandler>, ITransientDependency
+ public class MySimpleDistributedSingleInstanceEventHandler : IDistributedEventHandler, IDistributedEventHandler>, IDistributedEventHandler, ITransientDependency
{
private readonly ICurrentTenant _currentTenant;
@@ -28,5 +29,12 @@ namespace Volo.Abp.EventBus.Distributed
TenantId = _currentTenant.Id;
return Task.CompletedTask;
}
+
+ public Task HandleEventAsync(MySimpleEto eventData)
+ {
+ var tenantIdString = eventData.Properties.GetOrDefault("TenantId").ToString();
+ TenantId = tenantIdString != null ? new Guid(tenantIdString) : _currentTenant.Id;
+ return Task.CompletedTask;
+ }
}
}
diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/MySimpleEto.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/MySimpleEto.cs
new file mode 100644
index 0000000000..55d176c392
--- /dev/null
+++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/MySimpleEto.cs
@@ -0,0 +1,8 @@
+using Volo.Abp.Domain.Entities.Events.Distributed;
+
+namespace Volo.Abp.EventBus
+{
+ public class MySimpleEto : EtoBase
+ {
+ }
+}
\ No newline at end of file
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
index eb44e51820..f719eb68f8 100644
--- 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
@@ -63,6 +63,23 @@ namespace Volo.Abp.Json
json.ShouldContain("SystemTextJson");
}
+
+ [Fact]
+ public void SystemTextJsonSerialize_With_Dictionary_Test()
+ {
+ var json = _jsonSerializer.Serialize(new MyClassWithDictionary
+ {
+ Properties =
+ {
+ {"A", "AV"},
+ {"B", "BV"}
+ }
+ });
+
+ var deserialized = _jsonSerializer.Deserialize(json);
+ deserialized.Properties.ShouldContain(p => p.Key == "A" && p.Value == "AV");
+ deserialized.Properties.ShouldContain(p => p.Key == "B" && p.Value == "BV");
+ }
public class MyClass1
{
@@ -83,6 +100,16 @@ namespace Volo.Abp.Json
public string Provider { get; set; }
}
+ public class MyClassWithDictionary
+ {
+ public Dictionary Properties { get; set; }
+
+ public MyClassWithDictionary()
+ {
+ Properties = new Dictionary();
+ }
+ }
+
class NewtonsoftJsonConverter : JsonConverter, ITransientDependency
{
public override void WriteJson(JsonWriter writer, MyClass1 value, JsonSerializer serializer)
diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json
index dd0661267d..a4ba0ae306 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/package.json
+++ b/modules/blogging/app/Volo.BloggingTestApp/package.json
@@ -3,7 +3,7 @@
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.0",
- "@abp/blogging": "^4.2.0"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.1",
+ "@abp/blogging": "^4.2.1"
}
}
\ No newline at end of file
diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
index 21cabeb03f..96a737240e 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
+++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.0.tgz#01d6aab8a31fd6ea828b753805f1ba9a9165975f"
- integrity sha512-d+7YubPbuBRY8tjqBxS4I1gyxekjg8Z0X9QaDrf/SGQBoWpIdbG09AekNdddKNkimWcPg4UgUytahPuX9f17ZA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.0.tgz#a72b5e1cefa27e658b7f072a8c2c1b4ee12baef8"
- integrity sha512-bgWwBBJA/74kFGWh7O+lzb+inV5LOlYOpDoCNAL0XgQTrutrPNHwsk5ZnGVfhSYrBgk47HGVZDwsqKMCTRn1ig==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.2.0"
- "@abp/bootstrap" "~4.2.0"
- "@abp/bootstrap-datepicker" "~4.2.0"
- "@abp/datatables.net-bs4" "~4.2.0"
- "@abp/font-awesome" "~4.2.0"
- "@abp/jquery-form" "~4.2.0"
- "@abp/jquery-validation-unobtrusive" "~4.2.0"
- "@abp/lodash" "~4.2.0"
- "@abp/luxon" "~4.2.0"
- "@abp/malihu-custom-scrollbar-plugin" "~4.2.0"
- "@abp/select2" "~4.2.0"
- "@abp/sweetalert" "~4.2.0"
- "@abp/timeago" "~4.2.0"
- "@abp/toastr" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.0.tgz#9c090f64a33d31962936d8d53b345afeaa9f2ba3"
- integrity sha512-Qt3MUZ41vuvnIVEAYxyOm1mflvFwwvKYsEjFBbePBnwaYL7udooiIFxTEm4FBh3EQJOi+8T84rnXqiIXj4Pi8A==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.1.tgz#78b465ab8fcd68a38e2b868717d00e5f5d3b0c61"
+ integrity sha512-Tb0g4mtdSsjQkadvnjjRjObEhweUvigto0BTv5SzRNi0oQLW8ZVUcFmuMWB09nJAIPrbuA3QuPUlXzFcv2gsdg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.1.tgz#18205c13f137dad9876c4153f34273a7c8e69854"
+ integrity sha512-+f54CysWpEKfxjIIjhnTKW0jJ0Rg+wS6yxb9Rg3qxA5iEUkxp3B+NB5wA9rT5YcY9APrwVpiw1miNRmq5ZvFXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.2.1"
+ "@abp/bootstrap" "~4.2.1"
+ "@abp/bootstrap-datepicker" "~4.2.1"
+ "@abp/datatables.net-bs4" "~4.2.1"
+ "@abp/font-awesome" "~4.2.1"
+ "@abp/jquery-form" "~4.2.1"
+ "@abp/jquery-validation-unobtrusive" "~4.2.1"
+ "@abp/lodash" "~4.2.1"
+ "@abp/luxon" "~4.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.2.1"
+ "@abp/select2" "~4.2.1"
+ "@abp/sweetalert" "~4.2.1"
+ "@abp/timeago" "~4.2.1"
+ "@abp/toastr" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.1.tgz#2ad368af731678213ff3d8448a3dd30a2f1f66c9"
+ integrity sha512-/a/KDVQ3EuETSSe+KqmsR24w6RWHvaokvmmOjL+tCpFQyeaYAZ88E9pvM5hC9HVR24FCHTiARiXwgMTw2eZFyQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -43,214 +43,214 @@
micromatch "^4.0.2"
path "^0.12.7"
-"@abp/blogging@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.2.0.tgz#5eaef63ea06f86cca8ca2727624cdc224566b473"
- integrity sha512-rSJ0mSGInIDQcFUDGVVlWjXEF8T81BQ0u41vuURm3f06MBcK3TficQbl0Xnvx0Pc9Cbs4mFNd3UiZcsGp4MeMg==
+"@abp/blogging@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.2.1.tgz#9276cdced0e33bd3118824ffab2653d9487d159e"
+ integrity sha512-zRAZqgdn7e+DpTwh8eMhVnx6utkMpUtUoMW4eA0DESQB1qQ1E2fEAKl1NjzJ2CinhvNty1psCsI+k2gVHQUYeA==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.0"
- "@abp/owl.carousel" "~4.2.0"
- "@abp/prismjs" "~4.2.0"
- "@abp/tui-editor" "~4.2.0"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.1"
+ "@abp/owl.carousel" "~4.2.1"
+ "@abp/prismjs" "~4.2.1"
+ "@abp/tui-editor" "~4.2.1"
-"@abp/bootstrap-datepicker@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.0.tgz#92abebe044a91b94b8a3b85560b501120a0fa500"
- integrity sha512-bhEa/+zGVX00vkXGrbKI/hcl9o5Xgqwb27by9ZQqxk9Go4lwsEP/7lrXM49Cg8XZTT3L0/lYclneEMDrqGafaQ==
+"@abp/bootstrap-datepicker@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.1.tgz#87fe913aa6923a39206f4481af3b02309e2cebd5"
+ integrity sha512-35uaM+OBUqsBBIF08NUu7XBVIgwVQIjJard92Px7eR0EJ2AW6f5hNlJQYfPkYVdmkPIpG16qWctICB+L2W3ZKA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.0.tgz#c7ce82ead40bf0d62a318f67f180663ec76aa53c"
- integrity sha512-E1gEX0ct67KFjKiZB6eQcIYJ3TS/pF1S4CxknBVCd77Zs03bHI+eEgBNlwcYriVBbQo+vheUQAaACbi+e2mm3Q==
+"@abp/bootstrap@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.1.tgz#12d8b0cddb5fca55888e01644ff49ed7d78069e9"
+ integrity sha512-1Z4atDgHDxesjBh5uPb442NALcUucS2Lt56CaN5UPBXQvAPr72cw4hfKbW08KJ0ab7WME0uCi1vYZFM28/zqTg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
-"@abp/clipboard@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.2.0.tgz#860220df1d57ef64e864401d56cb5cf7068d5861"
- integrity sha512-yBgMDhpqPEHp9N9//Ur1BEIOicFIoKBut75PMz9XPOttLyqCmqHYEPj/jgAkUzLd5O+fJM9TE3yGNM7YdRbRPg==
+"@abp/clipboard@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.2.1.tgz#93132b1f3009883da00d074e9ce2a45fdb368fea"
+ integrity sha512-yMbBbiPdm187XtPX0unfdjSTd5Lmh9U527kw/suq0NqFwMEOVQkdW7gA1Xm1Ierit5OwvNP3vE6sHqTk7LhLWw==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
clipboard "^2.0.6"
-"@abp/codemirror@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.2.0.tgz#4dac96e8bd908c0a77d1d2ca488cc08c30a123dc"
- integrity sha512-urWA355XeP56NpPLDoByc7btjCSQY66jLe2G1/x/3zznChdFqEdWkql5nbLgsnfiPb0CaIntoWCKeqSnEz08kQ==
+"@abp/codemirror@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.2.1.tgz#33614bf789da88ccb1521f93527c7bf8e6d519bc"
+ integrity sha512-kY7KiFDQiVHPIKxumJszPXJlZIyOUpKxh8zmZiOvPm4ixUb4pOZZrPJ1u0HPpADU0RTFdB3Hq3AMzfwaXR2CGw==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
codemirror "^5.54.0"
-"@abp/core@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.0.tgz#20da3d1bab30e80d8864915fdd67e99db729be71"
- integrity sha512-Cfa6Ck+Tr7isVpNxo9qT9eKByLadDErA+QVjeps7qYq9ztIpIz/7Yl85tHYEH0YPO9y2zcSOvxjy5SCBXlph5Q==
+"@abp/core@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.1.tgz#1e74b0ffbc8c938e8de2f320594637910a09cbab"
+ integrity sha512-EiJSgUytS9Mrv8GZr9pwIzxwlrP82hEcS67cAgDxBc4QOhtMXhGZBMjDBHoIkOt6Db/ua0iPC700w0Utt5kWZQ==
dependencies:
- "@abp/utils" "^4.2.0"
+ "@abp/utils" "^4.2.1"
-"@abp/datatables.net-bs4@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.0.tgz#b5cb47235079a4063c5ff8ce78e65596fa587709"
- integrity sha512-N4hp2xCst1qavt07Nf+zXlvbZfeSah64VuMjsZgaimHMlDjxg6zVsTHLgLfzwfPV/eOBrGiecPEuvfEeaqcw4A==
+"@abp/datatables.net-bs4@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.1.tgz#fa6d711e6af352672879130a931fc2d27e5fd9e7"
+ integrity sha512-T66P74F58n4P5xwfhekriSr66A35okrXw61mlMXqeet8ACtxiM55MhXw89qvsL0qo5qG/a9d9MWPYNmZgXvKSQ==
dependencies:
- "@abp/datatables.net" "~4.2.0"
+ "@abp/datatables.net" "~4.2.1"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.0.tgz#2e0273c3212e5a62fc8b4138e4570fb27143f701"
- integrity sha512-33ZkaorkVkPQ7HNtDjyIvcVbvAdFm8V+gFN+xMQZhA10wMlMGrKzVJjriv4NhNpPjtB4/owhOv6wobiuWBrGiA==
+"@abp/datatables.net@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.1.tgz#a5f3549b7b581619bbffb398b2172ed7789d0486"
+ integrity sha512-ZxpSW6PhJupjecTC25MEKTdjePvg2xNouqioL9L7V3lPJ6S3fsqNs9QFjFjpv0vltzXMaZgJTSuxilmR6s6piw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.0.tgz#a637d164634b0df862e4ea620736afae282c71c9"
- integrity sha512-P8OXp+XIZj6l7cNJ5+7Lpl8iixI/bHGSPkATggaOYZ2EWoNR3B/8pj7p44weP2bCAvUEvaxk214BKlpAslo8eQ==
+"@abp/font-awesome@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.1.tgz#81d718b08a1f08bf35dd0887f9c6c9f1ea5416ee"
+ integrity sha512-kWAOqN7OtiBA7gd3VLH7pft1A5KYnJGJCn56xoqWIqLyHrSapwI5IMOojRDr+WhQJXk5EGE+rnmqRP51MYo4NQ==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/highlight.js@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.2.0.tgz#92b1885fcfe4e94a4eaa3b7deffe9b62b4767692"
- integrity sha512-C6gOvrp/pexbxgcd8rwN3McI4CVPWgE4JwgGrVw/VOuNF5eB4Bvy1ELI9bQNiLnoGNHhdUJD5a7nCNOMW4L9cA==
+"@abp/highlight.js@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.2.1.tgz#85702403328a36ad3a15347b566e11aa5bafeda0"
+ integrity sha512-3Tn4xqenO+LyB5mPgCbGmX+hoRwQwoQcfKG41upkr1jwn2M6+ljTo9NgB53wqaeJZsbhOPPfknKkLJzOl4UeRg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
-"@abp/jquery-form@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.0.tgz#12b88a79a69f7d3b15aed8c7ca3ff5bc9f526f22"
- integrity sha512-lxvXhA4kg002gmDTWgoE6TcQWDe6kBcpV4KBB7aK/6LjK3noeT29SPX0kvKxjoUKyM5TqT2Hx7rg4jgtICjFFA==
+"@abp/jquery-form@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.1.tgz#bbc21aafd88aa0f89619ce72fbafc917812d15e4"
+ integrity sha512-xnxaaOExhz7/8/P6XGvQuKitpuVjzoZz+r1Kr+W9gVy0dWZcCOfeVi4kdpxDFpqUmQJQJi0tvdVkFHx/hAkB7g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.0.tgz#05bcd303ec1e22b85389d03a8941eb898bac354f"
- integrity sha512-mtvUcoTD5XSurMFI5cybgWzFI9bn35vU1PvH5NJxJitjJ7sg9gjtLf9WOIddIy4FdqmprhbG2YnR32GITOwFhg==
+"@abp/jquery-validation-unobtrusive@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.1.tgz#36681e75e43e8f708bbd5d6e359eefd8dcce86df"
+ integrity sha512-STuVKdSUNjrW3q30GcszgzecHDdPmL3aA0jPsRJr0S2Wp5CQOe0dB7d5xyAnADIL68cPXjZWlz1OyXSQ2LixeQ==
dependencies:
- "@abp/jquery-validation" "~4.2.0"
+ "@abp/jquery-validation" "~4.2.1"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.0.tgz#a09d7cf2abf8ccf0c59f27eadacb030fb2067bbe"
- integrity sha512-/nvJrs1pt3LJX+SgH3FtDPfCDrcl4M0LDxjV7hf0Y1jtyhvWOQiyJMb8FKzMweTTEOd0pHG/GvOKd90STabSiw==
+"@abp/jquery-validation@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.1.tgz#209b0acb500ac301bb66b3f04bc18b9c574e2fcf"
+ integrity sha512-g87I0nO7Jk2d4Jt7PlLk/bHu5xQFH4+mbHwH4oRLAzflDhRNtNB+uVF35HK/1shprmSlZt6X+bHz652SEqD81g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.0.tgz#0a24488198ca6c9b84273fa028b853ee9f94f3a7"
- integrity sha512-6a42Iy7knhgzvQUvCHenrVnPDKhsOyqgZkPxs9pa9x/wNapSch+jLM7u1ezKAFj/Ai4w9yG/yqP+4YE8seZDZw==
+"@abp/jquery@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.1.tgz#b8ed11cbc02d33cdc99cacbaf5089343a0f164c5"
+ integrity sha512-xcoSu/2qc2AEF+dCTNHTCWjAo1dIcohHVPM3Yh36bb+JEcnruYYRokqZc4pzkh0GQamE1eMVGi3QOAmuURtbCg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
jquery "~3.5.1"
-"@abp/lodash@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.0.tgz#74dfac7d70f1563df2b78c5ebd0b2450e11c4c42"
- integrity sha512-5hpjxWZJPvjMIY7FCCw/v/B+JzJbB/yuoioRzcU4vrisY9uRq54vVYcX7hH1DldsJFPTuXY3Id1WBflHA5I9Aw==
+"@abp/lodash@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.1.tgz#87b7f48cf494553f7cd43dddf625a90581555ae7"
+ integrity sha512-hDwzR/Q9GqXPdQaijQ3B4GIWZ8z9clCW9vU59qbELD8xBZIJalTSrUGnIT8YNB9O5tNFb2FWJJbw5Nh8K7lu1A==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
lodash "^4.17.15"
-"@abp/luxon@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.0.tgz#9cd02faa02cda1315f3e23ae204991ef47d6ae7c"
- integrity sha512-dwtv2kqWCDyQADA1Os0aIy6Au2PhBtN6q9kukLWCvYmQZI23OKuEBMSngbJVTqEPfz0LV6CWbsWCUC3okAs46A==
+"@abp/luxon@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.1.tgz#e29c1fe9903beb0fc4d32cab90a5de4ebc768e43"
+ integrity sha512-Sussnocvw75EbJ1j0Ohn7F+SBQy9xPbiG6RJExdDFzxhUNsVp5wJF2Jm8hOZB3DYkeGAOskY5RoIG0abfE/j3w==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.0.tgz#2f8538df5567a2cf227998e4e2fb9a44b6e814eb"
- integrity sha512-3D5REdR7yw2sRRfm3Oi+qlhDABLrKvfU/l7JcCJy+vrBvadx3e3pTdTLXsGptypPN3x/Qr400LgwIrrgyefN8g==
+"@abp/malihu-custom-scrollbar-plugin@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.1.tgz#0c491d772ab0bb03d7eead0b9715bddb44252d56"
+ integrity sha512-qBnBMzj4G/dAMShmF4EXr55hkMehC1+cB6Jjl1wPHgMV8QPafznBKGyM6KWxGhrl8K6nCErBbidgQKpYqtWhNA==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/markdown-it@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.2.0.tgz#e04514da16f9fdbfe3cab2933a60aa9193784a0b"
- integrity sha512-If9AH2QwXExsZdFH5Orfo9giSrGMr9HviNM9cxDnHPwID5MJFrc7zxalqNwXcArtjGxLB+QaAfxEACIvLfLp/g==
+"@abp/markdown-it@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.2.1.tgz#7f33fdbaebafcadc5dd7b39d13b27fcda9ebbd43"
+ integrity sha512-nhN0SrsQ2fqy0yM2p7+jE96K7qSxc794uZc2xxngbsIGGShxwBx9dDOlQaE4TA44Fu7PoE6jQCYsdzXbakP9iQ==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
markdown-it "^11.0.0"
-"@abp/owl.carousel@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.2.0.tgz#1e02b137dc05529feca196568b87dd691a3d273a"
- integrity sha512-T44Mvi7VlkDuv31WzoDLoskEF1jJ2KK/0UKtsg2ECauOfS1iQA1weoRx+ITK4Vg6RWayZxyQatVt1+6jz+0LcA==
+"@abp/owl.carousel@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.2.1.tgz#f6ae488649038d8e0272712be60b9fcd529fa54c"
+ integrity sha512-uOLM90DaMeYiwRAff5UrlaCty1sTmLkYALw4aOpJRo4+cXlXeEP4RkVbe/nLU3DMxFndll2MINllPuXs2GPCQQ==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
owl.carousel "^2.3.4"
-"@abp/prismjs@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.2.0.tgz#8cedfac538d225930c3654f0d94cad0102faa2f4"
- integrity sha512-f4duxGD47p2TDMNiiBcvvjOG1hjhSbAoXyq306RrbP0CBUVTdjzzVhCPPnr5+nMoG55VlRBqh92zkax5kdgwQg==
+"@abp/prismjs@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.2.1.tgz#4029e69efe88a24903760cb3031c90ae1ddb0d3c"
+ integrity sha512-QxSQ4l8Bdpl8sntZWlPdSb2YQwSMtFPqudod/4atC0ttZKK1DZNMW3HRInsRo3gZDc9XzwMAazci4BPaJHG6eA==
dependencies:
- "@abp/clipboard" "~4.2.0"
- "@abp/core" "~4.2.0"
+ "@abp/clipboard" "~4.2.1"
+ "@abp/core" "~4.2.1"
prismjs "^1.20.0"
-"@abp/select2@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.0.tgz#eb05d22b1390c037911ba25e5ca0f2ed508a93b1"
- integrity sha512-VlNoa9+F1/kGmaEI2wbL/cRNeAEpp0UdLpbadAnsmpUIODxCULCWS556Q4Y6Ff4CzYtzkYz2qaJ8T8pn+3EOcA==
+"@abp/select2@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.1.tgz#2f397cc1754135642385333bf47a1a106dd9b165"
+ integrity sha512-g1AUGof5daULbVFCokR9JS1/4gIpEWKB5/+rRJBmnje2hUgBA3llD5PCOh5WRHA7urJJOD/5BjWlFdozluUAyg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
select2 "^4.0.13"
-"@abp/sweetalert@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.0.tgz#b1daf641f27f0c8c2e246d364d6285c133faf773"
- integrity sha512-AarV/L031xNB1gk/OYEUxkKZmls7zTwovS2t3ZrmwXXoav7nBCSPjEf1ByR2yhZRU/Yo1SNY/CNQQ4dgyf7Xng==
+"@abp/sweetalert@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.1.tgz#bdbc28c3f73b314b8ca792ea73390fe9f558c03f"
+ integrity sha512-xTi0oSjAkFMIDHgF8YB+oqFCl4gNfnt7mGHvEjJwpCEQSkuML9QsiGvw1TpXyHP7npOWSjjVpoyEBS2HXC778Q==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
sweetalert "^2.1.2"
-"@abp/timeago@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.0.tgz#9b15c496b7e63df93921d41de9e9eaf35a8dccbe"
- integrity sha512-hyuLVGluHxtWEhR0VakPx5UCbyPcfq4lECEgHhI62PvH0xcSNNZ3bp1QnBTd3se/HAYvwA5sCwJY0YXQgUF2UQ==
+"@abp/timeago@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.1.tgz#38474ed4455e94c687a3124e1a6e77c3b29a87d3"
+ integrity sha512-46+2plKizUcRn2VWN5WPWvwEVz+xoKOmsH1tEJ8WKKNxjeNRAsfeOslbfIEks89hTXLQemP3txAbq9V3E8pwQw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
timeago "^1.6.7"
-"@abp/toastr@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.0.tgz#400e2f28b19c72b131ca32aa188ff5151d035752"
- integrity sha512-tuGZd3kXqj1t/Y1xN8sOUH1KxiArYKD7xkhuajoOS65Ex5ad8mHPuzCtu8Pv+KL8TVFys9x3U3Tg24DQ6ASjhQ==
+"@abp/toastr@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.1.tgz#9e30607f7ff7067588d0a660226d338003c37707"
+ integrity sha512-fdlMZjffEO/05aeG8BjTspARKGtUu2SpoFViTeHGhSPsCW55BvuehIgRhyOEQNfMqJz8m0cVR0R2q+WPFWf1XA==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
toastr "^2.1.4"
-"@abp/tui-editor@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.2.0.tgz#893be49c6de9af515afab424bd3720796034190f"
- integrity sha512-UN6CY5FGbqaYlRJoa8rLENibpMnB19XkhJReq05Bej6b/aCBiZCi7GAilgWPEghqublAObgdmeOe11NJlMrQ5Q==
+"@abp/tui-editor@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.2.1.tgz#8db0872bfd555b0a5db93b4cd5ef045e5313cb27"
+ integrity sha512-jxdCU7g3q5HMb+8ZgaeZ5Ub2YtHzdJv+StISwVpt+6zGDyIQjjcHGz3zQn0R4tovFk8gC1G8SJD267OezrynVQ==
dependencies:
- "@abp/codemirror" "~4.2.0"
- "@abp/highlight.js" "~4.2.0"
- "@abp/jquery" "~4.2.0"
- "@abp/markdown-it" "~4.2.0"
+ "@abp/codemirror" "~4.2.1"
+ "@abp/highlight.js" "~4.2.1"
+ "@abp/jquery" "~4.2.1"
+ "@abp/markdown-it" "~4.2.1"
tui-editor "^1.4.10"
-"@abp/utils@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.0.tgz#073330e3e3f6ee61892f50260e48dbe1b05df35e"
- integrity sha512-75qR3SdiAa75wqleAx9sUMXLj4m9duuBo5+2sVv7Y29GcEyKUPvm8B1s6tksvSGA0e3vnFTHeVEc10eD1xKHSQ==
+"@abp/utils@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.1.tgz#1f5bfa7aae0065ec4dc38f1f5dc393b664c92d5c"
+ integrity sha512-V7XYC38u4C+UpXQr28KA1KHL5nNgDsFHfZULPnkwPxV8DuhzemmPYN3qmSXi5hfSfp+psNCX3GYZRMCI57kHgQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
index 0a602e5e82..cdee343f41 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
@@ -3,6 +3,6 @@
"name": "client-simulation-web",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.0"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.1"
}
}
\ No newline at end of file
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
index 7b70feb736..7484be2bca 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.0.tgz#01d6aab8a31fd6ea828b753805f1ba9a9165975f"
- integrity sha512-d+7YubPbuBRY8tjqBxS4I1gyxekjg8Z0X9QaDrf/SGQBoWpIdbG09AekNdddKNkimWcPg4UgUytahPuX9f17ZA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.0.tgz#a72b5e1cefa27e658b7f072a8c2c1b4ee12baef8"
- integrity sha512-bgWwBBJA/74kFGWh7O+lzb+inV5LOlYOpDoCNAL0XgQTrutrPNHwsk5ZnGVfhSYrBgk47HGVZDwsqKMCTRn1ig==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.2.0"
- "@abp/bootstrap" "~4.2.0"
- "@abp/bootstrap-datepicker" "~4.2.0"
- "@abp/datatables.net-bs4" "~4.2.0"
- "@abp/font-awesome" "~4.2.0"
- "@abp/jquery-form" "~4.2.0"
- "@abp/jquery-validation-unobtrusive" "~4.2.0"
- "@abp/lodash" "~4.2.0"
- "@abp/luxon" "~4.2.0"
- "@abp/malihu-custom-scrollbar-plugin" "~4.2.0"
- "@abp/select2" "~4.2.0"
- "@abp/sweetalert" "~4.2.0"
- "@abp/timeago" "~4.2.0"
- "@abp/toastr" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.0.tgz#9c090f64a33d31962936d8d53b345afeaa9f2ba3"
- integrity sha512-Qt3MUZ41vuvnIVEAYxyOm1mflvFwwvKYsEjFBbePBnwaYL7udooiIFxTEm4FBh3EQJOi+8T84rnXqiIXj4Pi8A==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.1.tgz#78b465ab8fcd68a38e2b868717d00e5f5d3b0c61"
+ integrity sha512-Tb0g4mtdSsjQkadvnjjRjObEhweUvigto0BTv5SzRNi0oQLW8ZVUcFmuMWB09nJAIPrbuA3QuPUlXzFcv2gsdg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.1.tgz#18205c13f137dad9876c4153f34273a7c8e69854"
+ integrity sha512-+f54CysWpEKfxjIIjhnTKW0jJ0Rg+wS6yxb9Rg3qxA5iEUkxp3B+NB5wA9rT5YcY9APrwVpiw1miNRmq5ZvFXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.2.1"
+ "@abp/bootstrap" "~4.2.1"
+ "@abp/bootstrap-datepicker" "~4.2.1"
+ "@abp/datatables.net-bs4" "~4.2.1"
+ "@abp/font-awesome" "~4.2.1"
+ "@abp/jquery-form" "~4.2.1"
+ "@abp/jquery-validation-unobtrusive" "~4.2.1"
+ "@abp/lodash" "~4.2.1"
+ "@abp/luxon" "~4.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.2.1"
+ "@abp/select2" "~4.2.1"
+ "@abp/sweetalert" "~4.2.1"
+ "@abp/timeago" "~4.2.1"
+ "@abp/toastr" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.1.tgz#2ad368af731678213ff3d8448a3dd30a2f1f66c9"
+ integrity sha512-/a/KDVQ3EuETSSe+KqmsR24w6RWHvaokvmmOjL+tCpFQyeaYAZ88E9pvM5hC9HVR24FCHTiARiXwgMTw2eZFyQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -43,145 +43,145 @@
micromatch "^4.0.2"
path "^0.12.7"
-"@abp/bootstrap-datepicker@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.0.tgz#92abebe044a91b94b8a3b85560b501120a0fa500"
- integrity sha512-bhEa/+zGVX00vkXGrbKI/hcl9o5Xgqwb27by9ZQqxk9Go4lwsEP/7lrXM49Cg8XZTT3L0/lYclneEMDrqGafaQ==
+"@abp/bootstrap-datepicker@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.1.tgz#87fe913aa6923a39206f4481af3b02309e2cebd5"
+ integrity sha512-35uaM+OBUqsBBIF08NUu7XBVIgwVQIjJard92Px7eR0EJ2AW6f5hNlJQYfPkYVdmkPIpG16qWctICB+L2W3ZKA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.0.tgz#c7ce82ead40bf0d62a318f67f180663ec76aa53c"
- integrity sha512-E1gEX0ct67KFjKiZB6eQcIYJ3TS/pF1S4CxknBVCd77Zs03bHI+eEgBNlwcYriVBbQo+vheUQAaACbi+e2mm3Q==
+"@abp/bootstrap@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.1.tgz#12d8b0cddb5fca55888e01644ff49ed7d78069e9"
+ integrity sha512-1Z4atDgHDxesjBh5uPb442NALcUucS2Lt56CaN5UPBXQvAPr72cw4hfKbW08KJ0ab7WME0uCi1vYZFM28/zqTg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
-"@abp/core@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.0.tgz#20da3d1bab30e80d8864915fdd67e99db729be71"
- integrity sha512-Cfa6Ck+Tr7isVpNxo9qT9eKByLadDErA+QVjeps7qYq9ztIpIz/7Yl85tHYEH0YPO9y2zcSOvxjy5SCBXlph5Q==
+"@abp/core@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.1.tgz#1e74b0ffbc8c938e8de2f320594637910a09cbab"
+ integrity sha512-EiJSgUytS9Mrv8GZr9pwIzxwlrP82hEcS67cAgDxBc4QOhtMXhGZBMjDBHoIkOt6Db/ua0iPC700w0Utt5kWZQ==
dependencies:
- "@abp/utils" "^4.2.0"
+ "@abp/utils" "^4.2.1"
-"@abp/datatables.net-bs4@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.0.tgz#b5cb47235079a4063c5ff8ce78e65596fa587709"
- integrity sha512-N4hp2xCst1qavt07Nf+zXlvbZfeSah64VuMjsZgaimHMlDjxg6zVsTHLgLfzwfPV/eOBrGiecPEuvfEeaqcw4A==
+"@abp/datatables.net-bs4@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.1.tgz#fa6d711e6af352672879130a931fc2d27e5fd9e7"
+ integrity sha512-T66P74F58n4P5xwfhekriSr66A35okrXw61mlMXqeet8ACtxiM55MhXw89qvsL0qo5qG/a9d9MWPYNmZgXvKSQ==
dependencies:
- "@abp/datatables.net" "~4.2.0"
+ "@abp/datatables.net" "~4.2.1"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.0.tgz#2e0273c3212e5a62fc8b4138e4570fb27143f701"
- integrity sha512-33ZkaorkVkPQ7HNtDjyIvcVbvAdFm8V+gFN+xMQZhA10wMlMGrKzVJjriv4NhNpPjtB4/owhOv6wobiuWBrGiA==
+"@abp/datatables.net@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.1.tgz#a5f3549b7b581619bbffb398b2172ed7789d0486"
+ integrity sha512-ZxpSW6PhJupjecTC25MEKTdjePvg2xNouqioL9L7V3lPJ6S3fsqNs9QFjFjpv0vltzXMaZgJTSuxilmR6s6piw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.0.tgz#a637d164634b0df862e4ea620736afae282c71c9"
- integrity sha512-P8OXp+XIZj6l7cNJ5+7Lpl8iixI/bHGSPkATggaOYZ2EWoNR3B/8pj7p44weP2bCAvUEvaxk214BKlpAslo8eQ==
+"@abp/font-awesome@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.1.tgz#81d718b08a1f08bf35dd0887f9c6c9f1ea5416ee"
+ integrity sha512-kWAOqN7OtiBA7gd3VLH7pft1A5KYnJGJCn56xoqWIqLyHrSapwI5IMOojRDr+WhQJXk5EGE+rnmqRP51MYo4NQ==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.0.tgz#12b88a79a69f7d3b15aed8c7ca3ff5bc9f526f22"
- integrity sha512-lxvXhA4kg002gmDTWgoE6TcQWDe6kBcpV4KBB7aK/6LjK3noeT29SPX0kvKxjoUKyM5TqT2Hx7rg4jgtICjFFA==
+"@abp/jquery-form@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.1.tgz#bbc21aafd88aa0f89619ce72fbafc917812d15e4"
+ integrity sha512-xnxaaOExhz7/8/P6XGvQuKitpuVjzoZz+r1Kr+W9gVy0dWZcCOfeVi4kdpxDFpqUmQJQJi0tvdVkFHx/hAkB7g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.0.tgz#05bcd303ec1e22b85389d03a8941eb898bac354f"
- integrity sha512-mtvUcoTD5XSurMFI5cybgWzFI9bn35vU1PvH5NJxJitjJ7sg9gjtLf9WOIddIy4FdqmprhbG2YnR32GITOwFhg==
+"@abp/jquery-validation-unobtrusive@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.1.tgz#36681e75e43e8f708bbd5d6e359eefd8dcce86df"
+ integrity sha512-STuVKdSUNjrW3q30GcszgzecHDdPmL3aA0jPsRJr0S2Wp5CQOe0dB7d5xyAnADIL68cPXjZWlz1OyXSQ2LixeQ==
dependencies:
- "@abp/jquery-validation" "~4.2.0"
+ "@abp/jquery-validation" "~4.2.1"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.0.tgz#a09d7cf2abf8ccf0c59f27eadacb030fb2067bbe"
- integrity sha512-/nvJrs1pt3LJX+SgH3FtDPfCDrcl4M0LDxjV7hf0Y1jtyhvWOQiyJMb8FKzMweTTEOd0pHG/GvOKd90STabSiw==
+"@abp/jquery-validation@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.1.tgz#209b0acb500ac301bb66b3f04bc18b9c574e2fcf"
+ integrity sha512-g87I0nO7Jk2d4Jt7PlLk/bHu5xQFH4+mbHwH4oRLAzflDhRNtNB+uVF35HK/1shprmSlZt6X+bHz652SEqD81g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.0.tgz#0a24488198ca6c9b84273fa028b853ee9f94f3a7"
- integrity sha512-6a42Iy7knhgzvQUvCHenrVnPDKhsOyqgZkPxs9pa9x/wNapSch+jLM7u1ezKAFj/Ai4w9yG/yqP+4YE8seZDZw==
+"@abp/jquery@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.1.tgz#b8ed11cbc02d33cdc99cacbaf5089343a0f164c5"
+ integrity sha512-xcoSu/2qc2AEF+dCTNHTCWjAo1dIcohHVPM3Yh36bb+JEcnruYYRokqZc4pzkh0GQamE1eMVGi3QOAmuURtbCg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
jquery "~3.5.1"
-"@abp/lodash@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.0.tgz#74dfac7d70f1563df2b78c5ebd0b2450e11c4c42"
- integrity sha512-5hpjxWZJPvjMIY7FCCw/v/B+JzJbB/yuoioRzcU4vrisY9uRq54vVYcX7hH1DldsJFPTuXY3Id1WBflHA5I9Aw==
+"@abp/lodash@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.1.tgz#87b7f48cf494553f7cd43dddf625a90581555ae7"
+ integrity sha512-hDwzR/Q9GqXPdQaijQ3B4GIWZ8z9clCW9vU59qbELD8xBZIJalTSrUGnIT8YNB9O5tNFb2FWJJbw5Nh8K7lu1A==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
lodash "^4.17.15"
-"@abp/luxon@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.0.tgz#9cd02faa02cda1315f3e23ae204991ef47d6ae7c"
- integrity sha512-dwtv2kqWCDyQADA1Os0aIy6Au2PhBtN6q9kukLWCvYmQZI23OKuEBMSngbJVTqEPfz0LV6CWbsWCUC3okAs46A==
+"@abp/luxon@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.1.tgz#e29c1fe9903beb0fc4d32cab90a5de4ebc768e43"
+ integrity sha512-Sussnocvw75EbJ1j0Ohn7F+SBQy9xPbiG6RJExdDFzxhUNsVp5wJF2Jm8hOZB3DYkeGAOskY5RoIG0abfE/j3w==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.0.tgz#2f8538df5567a2cf227998e4e2fb9a44b6e814eb"
- integrity sha512-3D5REdR7yw2sRRfm3Oi+qlhDABLrKvfU/l7JcCJy+vrBvadx3e3pTdTLXsGptypPN3x/Qr400LgwIrrgyefN8g==
+"@abp/malihu-custom-scrollbar-plugin@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.1.tgz#0c491d772ab0bb03d7eead0b9715bddb44252d56"
+ integrity sha512-qBnBMzj4G/dAMShmF4EXr55hkMehC1+cB6Jjl1wPHgMV8QPafznBKGyM6KWxGhrl8K6nCErBbidgQKpYqtWhNA==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.0.tgz#eb05d22b1390c037911ba25e5ca0f2ed508a93b1"
- integrity sha512-VlNoa9+F1/kGmaEI2wbL/cRNeAEpp0UdLpbadAnsmpUIODxCULCWS556Q4Y6Ff4CzYtzkYz2qaJ8T8pn+3EOcA==
+"@abp/select2@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.1.tgz#2f397cc1754135642385333bf47a1a106dd9b165"
+ integrity sha512-g1AUGof5daULbVFCokR9JS1/4gIpEWKB5/+rRJBmnje2hUgBA3llD5PCOh5WRHA7urJJOD/5BjWlFdozluUAyg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
select2 "^4.0.13"
-"@abp/sweetalert@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.0.tgz#b1daf641f27f0c8c2e246d364d6285c133faf773"
- integrity sha512-AarV/L031xNB1gk/OYEUxkKZmls7zTwovS2t3ZrmwXXoav7nBCSPjEf1ByR2yhZRU/Yo1SNY/CNQQ4dgyf7Xng==
+"@abp/sweetalert@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.1.tgz#bdbc28c3f73b314b8ca792ea73390fe9f558c03f"
+ integrity sha512-xTi0oSjAkFMIDHgF8YB+oqFCl4gNfnt7mGHvEjJwpCEQSkuML9QsiGvw1TpXyHP7npOWSjjVpoyEBS2HXC778Q==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
sweetalert "^2.1.2"
-"@abp/timeago@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.0.tgz#9b15c496b7e63df93921d41de9e9eaf35a8dccbe"
- integrity sha512-hyuLVGluHxtWEhR0VakPx5UCbyPcfq4lECEgHhI62PvH0xcSNNZ3bp1QnBTd3se/HAYvwA5sCwJY0YXQgUF2UQ==
+"@abp/timeago@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.1.tgz#38474ed4455e94c687a3124e1a6e77c3b29a87d3"
+ integrity sha512-46+2plKizUcRn2VWN5WPWvwEVz+xoKOmsH1tEJ8WKKNxjeNRAsfeOslbfIEks89hTXLQemP3txAbq9V3E8pwQw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
timeago "^1.6.7"
-"@abp/toastr@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.0.tgz#400e2f28b19c72b131ca32aa188ff5151d035752"
- integrity sha512-tuGZd3kXqj1t/Y1xN8sOUH1KxiArYKD7xkhuajoOS65Ex5ad8mHPuzCtu8Pv+KL8TVFys9x3U3Tg24DQ6ASjhQ==
+"@abp/toastr@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.1.tgz#9e30607f7ff7067588d0a660226d338003c37707"
+ integrity sha512-fdlMZjffEO/05aeG8BjTspARKGtUu2SpoFViTeHGhSPsCW55BvuehIgRhyOEQNfMqJz8m0cVR0R2q+WPFWf1XA==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
toastr "^2.1.4"
-"@abp/utils@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.0.tgz#073330e3e3f6ee61892f50260e48dbe1b05df35e"
- integrity sha512-75qR3SdiAa75wqleAx9sUMXLj4m9duuBo5+2sVv7Y29GcEyKUPvm8B1s6tksvSGA0e3vnFTHeVEc10eD1xKHSQ==
+"@abp/utils@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.1.tgz#1f5bfa7aae0065ec4dc38f1f5dc393b664c92d5c"
+ integrity sha512-V7XYC38u4C+UpXQr28KA1KHL5nNgDsFHfZULPnkwPxV8DuhzemmPYN3qmSXi5hfSfp+psNCX3GYZRMCI57kHgQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json
index 1fcaa68498..fc8c45eed7 100644
--- a/modules/cms-kit/angular/package.json
+++ b/modules/cms-kit/angular/package.json
@@ -16,10 +16,10 @@
"private": true,
"dependencies": {
"@abp/ng.account": "~3.3.2",
- "@abp/ng.identity": "~4.2.0",
- "@abp/ng.setting-management": "~4.2.0",
- "@abp/ng.tenant-management": "~4.2.0",
- "@abp/ng.theme.basic": "~4.2.0",
+ "@abp/ng.identity": "~4.2.1",
+ "@abp/ng.setting-management": "~4.2.1",
+ "@abp/ng.tenant-management": "~4.2.1",
+ "@abp/ng.theme.basic": "~4.2.1",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",
diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json
index 04018e4360..7ebc6d0f46 100644
--- a/modules/cms-kit/angular/projects/cms-kit/package.json
+++ b/modules/cms-kit/angular/projects/cms-kit/package.json
@@ -4,8 +4,8 @@
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
- "@abp/ng.core": ">=4.2.0",
- "@abp/ng.theme.shared": ">=4.2.0"
+ "@abp/ng.core": ">=4.2.1",
+ "@abp/ng.theme.shared": ">=4.2.1"
},
"dependencies": {
"tslib": "^2.0.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs
index 9046c60aca..b108d08b02 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs
+++ b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs
@@ -1,5 +1,6 @@
using Volo.Abp.GlobalFeatures;
using Volo.Abp.Threading;
+using Volo.CmsKit.GlobalFeatures;
namespace Volo.CmsKit
{
@@ -12,6 +13,7 @@ namespace Volo.CmsKit
OneTimeRunner.Run(() =>
{
GlobalFeatureManager.Instance.Modules.CmsKit().EnableAll();
+ GlobalFeatureManager.Instance.Modules.CmsKit().Disable();
});
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
index 1d3fc57a43..0f1ccbade2 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
@@ -3,6 +3,6 @@
"name": "my-app-identityserver",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.0"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.1"
}
}
\ No newline at end of file
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
index 2fc3f25822..a6ef25a362 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.0.tgz#01d6aab8a31fd6ea828b753805f1ba9a9165975f"
- integrity sha512-d+7YubPbuBRY8tjqBxS4I1gyxekjg8Z0X9QaDrf/SGQBoWpIdbG09AekNdddKNkimWcPg4UgUytahPuX9f17ZA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.0.tgz#a72b5e1cefa27e658b7f072a8c2c1b4ee12baef8"
- integrity sha512-bgWwBBJA/74kFGWh7O+lzb+inV5LOlYOpDoCNAL0XgQTrutrPNHwsk5ZnGVfhSYrBgk47HGVZDwsqKMCTRn1ig==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.2.0"
- "@abp/bootstrap" "~4.2.0"
- "@abp/bootstrap-datepicker" "~4.2.0"
- "@abp/datatables.net-bs4" "~4.2.0"
- "@abp/font-awesome" "~4.2.0"
- "@abp/jquery-form" "~4.2.0"
- "@abp/jquery-validation-unobtrusive" "~4.2.0"
- "@abp/lodash" "~4.2.0"
- "@abp/luxon" "~4.2.0"
- "@abp/malihu-custom-scrollbar-plugin" "~4.2.0"
- "@abp/select2" "~4.2.0"
- "@abp/sweetalert" "~4.2.0"
- "@abp/timeago" "~4.2.0"
- "@abp/toastr" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.0.tgz#9c090f64a33d31962936d8d53b345afeaa9f2ba3"
- integrity sha512-Qt3MUZ41vuvnIVEAYxyOm1mflvFwwvKYsEjFBbePBnwaYL7udooiIFxTEm4FBh3EQJOi+8T84rnXqiIXj4Pi8A==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.1.tgz#78b465ab8fcd68a38e2b868717d00e5f5d3b0c61"
+ integrity sha512-Tb0g4mtdSsjQkadvnjjRjObEhweUvigto0BTv5SzRNi0oQLW8ZVUcFmuMWB09nJAIPrbuA3QuPUlXzFcv2gsdg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.1.tgz#18205c13f137dad9876c4153f34273a7c8e69854"
+ integrity sha512-+f54CysWpEKfxjIIjhnTKW0jJ0Rg+wS6yxb9Rg3qxA5iEUkxp3B+NB5wA9rT5YcY9APrwVpiw1miNRmq5ZvFXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.2.1"
+ "@abp/bootstrap" "~4.2.1"
+ "@abp/bootstrap-datepicker" "~4.2.1"
+ "@abp/datatables.net-bs4" "~4.2.1"
+ "@abp/font-awesome" "~4.2.1"
+ "@abp/jquery-form" "~4.2.1"
+ "@abp/jquery-validation-unobtrusive" "~4.2.1"
+ "@abp/lodash" "~4.2.1"
+ "@abp/luxon" "~4.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.2.1"
+ "@abp/select2" "~4.2.1"
+ "@abp/sweetalert" "~4.2.1"
+ "@abp/timeago" "~4.2.1"
+ "@abp/toastr" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.1.tgz#2ad368af731678213ff3d8448a3dd30a2f1f66c9"
+ integrity sha512-/a/KDVQ3EuETSSe+KqmsR24w6RWHvaokvmmOjL+tCpFQyeaYAZ88E9pvM5hC9HVR24FCHTiARiXwgMTw2eZFyQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -43,145 +43,145 @@
micromatch "^4.0.2"
path "^0.12.7"
-"@abp/bootstrap-datepicker@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.0.tgz#92abebe044a91b94b8a3b85560b501120a0fa500"
- integrity sha512-bhEa/+zGVX00vkXGrbKI/hcl9o5Xgqwb27by9ZQqxk9Go4lwsEP/7lrXM49Cg8XZTT3L0/lYclneEMDrqGafaQ==
+"@abp/bootstrap-datepicker@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.1.tgz#87fe913aa6923a39206f4481af3b02309e2cebd5"
+ integrity sha512-35uaM+OBUqsBBIF08NUu7XBVIgwVQIjJard92Px7eR0EJ2AW6f5hNlJQYfPkYVdmkPIpG16qWctICB+L2W3ZKA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.0.tgz#c7ce82ead40bf0d62a318f67f180663ec76aa53c"
- integrity sha512-E1gEX0ct67KFjKiZB6eQcIYJ3TS/pF1S4CxknBVCd77Zs03bHI+eEgBNlwcYriVBbQo+vheUQAaACbi+e2mm3Q==
+"@abp/bootstrap@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.1.tgz#12d8b0cddb5fca55888e01644ff49ed7d78069e9"
+ integrity sha512-1Z4atDgHDxesjBh5uPb442NALcUucS2Lt56CaN5UPBXQvAPr72cw4hfKbW08KJ0ab7WME0uCi1vYZFM28/zqTg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
-"@abp/core@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.0.tgz#20da3d1bab30e80d8864915fdd67e99db729be71"
- integrity sha512-Cfa6Ck+Tr7isVpNxo9qT9eKByLadDErA+QVjeps7qYq9ztIpIz/7Yl85tHYEH0YPO9y2zcSOvxjy5SCBXlph5Q==
+"@abp/core@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.1.tgz#1e74b0ffbc8c938e8de2f320594637910a09cbab"
+ integrity sha512-EiJSgUytS9Mrv8GZr9pwIzxwlrP82hEcS67cAgDxBc4QOhtMXhGZBMjDBHoIkOt6Db/ua0iPC700w0Utt5kWZQ==
dependencies:
- "@abp/utils" "^4.2.0"
+ "@abp/utils" "^4.2.1"
-"@abp/datatables.net-bs4@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.0.tgz#b5cb47235079a4063c5ff8ce78e65596fa587709"
- integrity sha512-N4hp2xCst1qavt07Nf+zXlvbZfeSah64VuMjsZgaimHMlDjxg6zVsTHLgLfzwfPV/eOBrGiecPEuvfEeaqcw4A==
+"@abp/datatables.net-bs4@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.1.tgz#fa6d711e6af352672879130a931fc2d27e5fd9e7"
+ integrity sha512-T66P74F58n4P5xwfhekriSr66A35okrXw61mlMXqeet8ACtxiM55MhXw89qvsL0qo5qG/a9d9MWPYNmZgXvKSQ==
dependencies:
- "@abp/datatables.net" "~4.2.0"
+ "@abp/datatables.net" "~4.2.1"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.0.tgz#2e0273c3212e5a62fc8b4138e4570fb27143f701"
- integrity sha512-33ZkaorkVkPQ7HNtDjyIvcVbvAdFm8V+gFN+xMQZhA10wMlMGrKzVJjriv4NhNpPjtB4/owhOv6wobiuWBrGiA==
+"@abp/datatables.net@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.1.tgz#a5f3549b7b581619bbffb398b2172ed7789d0486"
+ integrity sha512-ZxpSW6PhJupjecTC25MEKTdjePvg2xNouqioL9L7V3lPJ6S3fsqNs9QFjFjpv0vltzXMaZgJTSuxilmR6s6piw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.0.tgz#a637d164634b0df862e4ea620736afae282c71c9"
- integrity sha512-P8OXp+XIZj6l7cNJ5+7Lpl8iixI/bHGSPkATggaOYZ2EWoNR3B/8pj7p44weP2bCAvUEvaxk214BKlpAslo8eQ==
+"@abp/font-awesome@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.1.tgz#81d718b08a1f08bf35dd0887f9c6c9f1ea5416ee"
+ integrity sha512-kWAOqN7OtiBA7gd3VLH7pft1A5KYnJGJCn56xoqWIqLyHrSapwI5IMOojRDr+WhQJXk5EGE+rnmqRP51MYo4NQ==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.0.tgz#12b88a79a69f7d3b15aed8c7ca3ff5bc9f526f22"
- integrity sha512-lxvXhA4kg002gmDTWgoE6TcQWDe6kBcpV4KBB7aK/6LjK3noeT29SPX0kvKxjoUKyM5TqT2Hx7rg4jgtICjFFA==
+"@abp/jquery-form@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.1.tgz#bbc21aafd88aa0f89619ce72fbafc917812d15e4"
+ integrity sha512-xnxaaOExhz7/8/P6XGvQuKitpuVjzoZz+r1Kr+W9gVy0dWZcCOfeVi4kdpxDFpqUmQJQJi0tvdVkFHx/hAkB7g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.0.tgz#05bcd303ec1e22b85389d03a8941eb898bac354f"
- integrity sha512-mtvUcoTD5XSurMFI5cybgWzFI9bn35vU1PvH5NJxJitjJ7sg9gjtLf9WOIddIy4FdqmprhbG2YnR32GITOwFhg==
+"@abp/jquery-validation-unobtrusive@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.1.tgz#36681e75e43e8f708bbd5d6e359eefd8dcce86df"
+ integrity sha512-STuVKdSUNjrW3q30GcszgzecHDdPmL3aA0jPsRJr0S2Wp5CQOe0dB7d5xyAnADIL68cPXjZWlz1OyXSQ2LixeQ==
dependencies:
- "@abp/jquery-validation" "~4.2.0"
+ "@abp/jquery-validation" "~4.2.1"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.0.tgz#a09d7cf2abf8ccf0c59f27eadacb030fb2067bbe"
- integrity sha512-/nvJrs1pt3LJX+SgH3FtDPfCDrcl4M0LDxjV7hf0Y1jtyhvWOQiyJMb8FKzMweTTEOd0pHG/GvOKd90STabSiw==
+"@abp/jquery-validation@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.1.tgz#209b0acb500ac301bb66b3f04bc18b9c574e2fcf"
+ integrity sha512-g87I0nO7Jk2d4Jt7PlLk/bHu5xQFH4+mbHwH4oRLAzflDhRNtNB+uVF35HK/1shprmSlZt6X+bHz652SEqD81g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.0.tgz#0a24488198ca6c9b84273fa028b853ee9f94f3a7"
- integrity sha512-6a42Iy7knhgzvQUvCHenrVnPDKhsOyqgZkPxs9pa9x/wNapSch+jLM7u1ezKAFj/Ai4w9yG/yqP+4YE8seZDZw==
+"@abp/jquery@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.1.tgz#b8ed11cbc02d33cdc99cacbaf5089343a0f164c5"
+ integrity sha512-xcoSu/2qc2AEF+dCTNHTCWjAo1dIcohHVPM3Yh36bb+JEcnruYYRokqZc4pzkh0GQamE1eMVGi3QOAmuURtbCg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
jquery "~3.5.1"
-"@abp/lodash@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.0.tgz#74dfac7d70f1563df2b78c5ebd0b2450e11c4c42"
- integrity sha512-5hpjxWZJPvjMIY7FCCw/v/B+JzJbB/yuoioRzcU4vrisY9uRq54vVYcX7hH1DldsJFPTuXY3Id1WBflHA5I9Aw==
+"@abp/lodash@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.1.tgz#87b7f48cf494553f7cd43dddf625a90581555ae7"
+ integrity sha512-hDwzR/Q9GqXPdQaijQ3B4GIWZ8z9clCW9vU59qbELD8xBZIJalTSrUGnIT8YNB9O5tNFb2FWJJbw5Nh8K7lu1A==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
lodash "^4.17.15"
-"@abp/luxon@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.0.tgz#9cd02faa02cda1315f3e23ae204991ef47d6ae7c"
- integrity sha512-dwtv2kqWCDyQADA1Os0aIy6Au2PhBtN6q9kukLWCvYmQZI23OKuEBMSngbJVTqEPfz0LV6CWbsWCUC3okAs46A==
+"@abp/luxon@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.1.tgz#e29c1fe9903beb0fc4d32cab90a5de4ebc768e43"
+ integrity sha512-Sussnocvw75EbJ1j0Ohn7F+SBQy9xPbiG6RJExdDFzxhUNsVp5wJF2Jm8hOZB3DYkeGAOskY5RoIG0abfE/j3w==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.0.tgz#2f8538df5567a2cf227998e4e2fb9a44b6e814eb"
- integrity sha512-3D5REdR7yw2sRRfm3Oi+qlhDABLrKvfU/l7JcCJy+vrBvadx3e3pTdTLXsGptypPN3x/Qr400LgwIrrgyefN8g==
+"@abp/malihu-custom-scrollbar-plugin@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.1.tgz#0c491d772ab0bb03d7eead0b9715bddb44252d56"
+ integrity sha512-qBnBMzj4G/dAMShmF4EXr55hkMehC1+cB6Jjl1wPHgMV8QPafznBKGyM6KWxGhrl8K6nCErBbidgQKpYqtWhNA==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.0.tgz#eb05d22b1390c037911ba25e5ca0f2ed508a93b1"
- integrity sha512-VlNoa9+F1/kGmaEI2wbL/cRNeAEpp0UdLpbadAnsmpUIODxCULCWS556Q4Y6Ff4CzYtzkYz2qaJ8T8pn+3EOcA==
+"@abp/select2@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.1.tgz#2f397cc1754135642385333bf47a1a106dd9b165"
+ integrity sha512-g1AUGof5daULbVFCokR9JS1/4gIpEWKB5/+rRJBmnje2hUgBA3llD5PCOh5WRHA7urJJOD/5BjWlFdozluUAyg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
select2 "^4.0.13"
-"@abp/sweetalert@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.0.tgz#b1daf641f27f0c8c2e246d364d6285c133faf773"
- integrity sha512-AarV/L031xNB1gk/OYEUxkKZmls7zTwovS2t3ZrmwXXoav7nBCSPjEf1ByR2yhZRU/Yo1SNY/CNQQ4dgyf7Xng==
+"@abp/sweetalert@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.1.tgz#bdbc28c3f73b314b8ca792ea73390fe9f558c03f"
+ integrity sha512-xTi0oSjAkFMIDHgF8YB+oqFCl4gNfnt7mGHvEjJwpCEQSkuML9QsiGvw1TpXyHP7npOWSjjVpoyEBS2HXC778Q==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
sweetalert "^2.1.2"
-"@abp/timeago@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.0.tgz#9b15c496b7e63df93921d41de9e9eaf35a8dccbe"
- integrity sha512-hyuLVGluHxtWEhR0VakPx5UCbyPcfq4lECEgHhI62PvH0xcSNNZ3bp1QnBTd3se/HAYvwA5sCwJY0YXQgUF2UQ==
+"@abp/timeago@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.1.tgz#38474ed4455e94c687a3124e1a6e77c3b29a87d3"
+ integrity sha512-46+2plKizUcRn2VWN5WPWvwEVz+xoKOmsH1tEJ8WKKNxjeNRAsfeOslbfIEks89hTXLQemP3txAbq9V3E8pwQw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
timeago "^1.6.7"
-"@abp/toastr@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.0.tgz#400e2f28b19c72b131ca32aa188ff5151d035752"
- integrity sha512-tuGZd3kXqj1t/Y1xN8sOUH1KxiArYKD7xkhuajoOS65Ex5ad8mHPuzCtu8Pv+KL8TVFys9x3U3Tg24DQ6ASjhQ==
+"@abp/toastr@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.1.tgz#9e30607f7ff7067588d0a660226d338003c37707"
+ integrity sha512-fdlMZjffEO/05aeG8BjTspARKGtUu2SpoFViTeHGhSPsCW55BvuehIgRhyOEQNfMqJz8m0cVR0R2q+WPFWf1XA==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
toastr "^2.1.4"
-"@abp/utils@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.0.tgz#073330e3e3f6ee61892f50260e48dbe1b05df35e"
- integrity sha512-75qR3SdiAa75wqleAx9sUMXLj4m9duuBo5+2sVv7Y29GcEyKUPvm8B1s6tksvSGA0e3vnFTHeVEc10eD1xKHSQ==
+"@abp/utils@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.1.tgz#1f5bfa7aae0065ec4dc38f1f5dc393b664c92d5c"
+ integrity sha512-V7XYC38u4C+UpXQr28KA1KHL5nNgDsFHfZULPnkwPxV8DuhzemmPYN3qmSXi5hfSfp+psNCX3GYZRMCI57kHgQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
index 010901f2f3..ba9e537bf4 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
@@ -3,6 +3,6 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.0"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.1"
}
}
\ No newline at end of file
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
index 69cec15c38..bb7b7ea2b0 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.0.tgz#01d6aab8a31fd6ea828b753805f1ba9a9165975f"
- integrity sha512-d+7YubPbuBRY8tjqBxS4I1gyxekjg8Z0X9QaDrf/SGQBoWpIdbG09AekNdddKNkimWcPg4UgUytahPuX9f17ZA==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.0.tgz#a72b5e1cefa27e658b7f072a8c2c1b4ee12baef8"
- integrity sha512-bgWwBBJA/74kFGWh7O+lzb+inV5LOlYOpDoCNAL0XgQTrutrPNHwsk5ZnGVfhSYrBgk47HGVZDwsqKMCTRn1ig==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~4.2.0"
- "@abp/bootstrap" "~4.2.0"
- "@abp/bootstrap-datepicker" "~4.2.0"
- "@abp/datatables.net-bs4" "~4.2.0"
- "@abp/font-awesome" "~4.2.0"
- "@abp/jquery-form" "~4.2.0"
- "@abp/jquery-validation-unobtrusive" "~4.2.0"
- "@abp/lodash" "~4.2.0"
- "@abp/luxon" "~4.2.0"
- "@abp/malihu-custom-scrollbar-plugin" "~4.2.0"
- "@abp/select2" "~4.2.0"
- "@abp/sweetalert" "~4.2.0"
- "@abp/timeago" "~4.2.0"
- "@abp/toastr" "~4.2.0"
-
-"@abp/aspnetcore.mvc.ui@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.0.tgz#9c090f64a33d31962936d8d53b345afeaa9f2ba3"
- integrity sha512-Qt3MUZ41vuvnIVEAYxyOm1mflvFwwvKYsEjFBbePBnwaYL7udooiIFxTEm4FBh3EQJOi+8T84rnXqiIXj4Pi8A==
+"@abp/aspnetcore.mvc.ui.theme.basic@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.2.1.tgz#78b465ab8fcd68a38e2b868717d00e5f5d3b0c61"
+ integrity sha512-Tb0g4mtdSsjQkadvnjjRjObEhweUvigto0BTv5SzRNi0oQLW8ZVUcFmuMWB09nJAIPrbuA3QuPUlXzFcv2gsdg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.2.1.tgz#18205c13f137dad9876c4153f34273a7c8e69854"
+ integrity sha512-+f54CysWpEKfxjIIjhnTKW0jJ0Rg+wS6yxb9Rg3qxA5iEUkxp3B+NB5wA9rT5YcY9APrwVpiw1miNRmq5ZvFXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~4.2.1"
+ "@abp/bootstrap" "~4.2.1"
+ "@abp/bootstrap-datepicker" "~4.2.1"
+ "@abp/datatables.net-bs4" "~4.2.1"
+ "@abp/font-awesome" "~4.2.1"
+ "@abp/jquery-form" "~4.2.1"
+ "@abp/jquery-validation-unobtrusive" "~4.2.1"
+ "@abp/lodash" "~4.2.1"
+ "@abp/luxon" "~4.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~4.2.1"
+ "@abp/select2" "~4.2.1"
+ "@abp/sweetalert" "~4.2.1"
+ "@abp/timeago" "~4.2.1"
+ "@abp/toastr" "~4.2.1"
+
+"@abp/aspnetcore.mvc.ui@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.2.1.tgz#2ad368af731678213ff3d8448a3dd30a2f1f66c9"
+ integrity sha512-/a/KDVQ3EuETSSe+KqmsR24w6RWHvaokvmmOjL+tCpFQyeaYAZ88E9pvM5hC9HVR24FCHTiARiXwgMTw2eZFyQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -43,145 +43,145 @@
micromatch "^4.0.2"
path "^0.12.7"
-"@abp/bootstrap-datepicker@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.0.tgz#92abebe044a91b94b8a3b85560b501120a0fa500"
- integrity sha512-bhEa/+zGVX00vkXGrbKI/hcl9o5Xgqwb27by9ZQqxk9Go4lwsEP/7lrXM49Cg8XZTT3L0/lYclneEMDrqGafaQ==
+"@abp/bootstrap-datepicker@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.2.1.tgz#87fe913aa6923a39206f4481af3b02309e2cebd5"
+ integrity sha512-35uaM+OBUqsBBIF08NUu7XBVIgwVQIjJard92Px7eR0EJ2AW6f5hNlJQYfPkYVdmkPIpG16qWctICB+L2W3ZKA==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.0.tgz#c7ce82ead40bf0d62a318f67f180663ec76aa53c"
- integrity sha512-E1gEX0ct67KFjKiZB6eQcIYJ3TS/pF1S4CxknBVCd77Zs03bHI+eEgBNlwcYriVBbQo+vheUQAaACbi+e2mm3Q==
+"@abp/bootstrap@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.2.1.tgz#12d8b0cddb5fca55888e01644ff49ed7d78069e9"
+ integrity sha512-1Z4atDgHDxesjBh5uPb442NALcUucS2Lt56CaN5UPBXQvAPr72cw4hfKbW08KJ0ab7WME0uCi1vYZFM28/zqTg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
-"@abp/core@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.0.tgz#20da3d1bab30e80d8864915fdd67e99db729be71"
- integrity sha512-Cfa6Ck+Tr7isVpNxo9qT9eKByLadDErA+QVjeps7qYq9ztIpIz/7Yl85tHYEH0YPO9y2zcSOvxjy5SCBXlph5Q==
+"@abp/core@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.2.1.tgz#1e74b0ffbc8c938e8de2f320594637910a09cbab"
+ integrity sha512-EiJSgUytS9Mrv8GZr9pwIzxwlrP82hEcS67cAgDxBc4QOhtMXhGZBMjDBHoIkOt6Db/ua0iPC700w0Utt5kWZQ==
dependencies:
- "@abp/utils" "^4.2.0"
+ "@abp/utils" "^4.2.1"
-"@abp/datatables.net-bs4@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.0.tgz#b5cb47235079a4063c5ff8ce78e65596fa587709"
- integrity sha512-N4hp2xCst1qavt07Nf+zXlvbZfeSah64VuMjsZgaimHMlDjxg6zVsTHLgLfzwfPV/eOBrGiecPEuvfEeaqcw4A==
+"@abp/datatables.net-bs4@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.2.1.tgz#fa6d711e6af352672879130a931fc2d27e5fd9e7"
+ integrity sha512-T66P74F58n4P5xwfhekriSr66A35okrXw61mlMXqeet8ACtxiM55MhXw89qvsL0qo5qG/a9d9MWPYNmZgXvKSQ==
dependencies:
- "@abp/datatables.net" "~4.2.0"
+ "@abp/datatables.net" "~4.2.1"
datatables.net-bs4 "^1.10.21"
-"@abp/datatables.net@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.0.tgz#2e0273c3212e5a62fc8b4138e4570fb27143f701"
- integrity sha512-33ZkaorkVkPQ7HNtDjyIvcVbvAdFm8V+gFN+xMQZhA10wMlMGrKzVJjriv4NhNpPjtB4/owhOv6wobiuWBrGiA==
+"@abp/datatables.net@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.2.1.tgz#a5f3549b7b581619bbffb398b2172ed7789d0486"
+ integrity sha512-ZxpSW6PhJupjecTC25MEKTdjePvg2xNouqioL9L7V3lPJ6S3fsqNs9QFjFjpv0vltzXMaZgJTSuxilmR6s6piw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
datatables.net "^1.10.21"
-"@abp/font-awesome@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.0.tgz#a637d164634b0df862e4ea620736afae282c71c9"
- integrity sha512-P8OXp+XIZj6l7cNJ5+7Lpl8iixI/bHGSPkATggaOYZ2EWoNR3B/8pj7p44weP2bCAvUEvaxk214BKlpAslo8eQ==
+"@abp/font-awesome@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.2.1.tgz#81d718b08a1f08bf35dd0887f9c6c9f1ea5416ee"
+ integrity sha512-kWAOqN7OtiBA7gd3VLH7pft1A5KYnJGJCn56xoqWIqLyHrSapwI5IMOojRDr+WhQJXk5EGE+rnmqRP51MYo4NQ==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
"@fortawesome/fontawesome-free" "^5.13.0"
-"@abp/jquery-form@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.0.tgz#12b88a79a69f7d3b15aed8c7ca3ff5bc9f526f22"
- integrity sha512-lxvXhA4kg002gmDTWgoE6TcQWDe6kBcpV4KBB7aK/6LjK3noeT29SPX0kvKxjoUKyM5TqT2Hx7rg4jgtICjFFA==
+"@abp/jquery-form@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.2.1.tgz#bbc21aafd88aa0f89619ce72fbafc917812d15e4"
+ integrity sha512-xnxaaOExhz7/8/P6XGvQuKitpuVjzoZz+r1Kr+W9gVy0dWZcCOfeVi4kdpxDFpqUmQJQJi0tvdVkFHx/hAkB7g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.0.tgz#05bcd303ec1e22b85389d03a8941eb898bac354f"
- integrity sha512-mtvUcoTD5XSurMFI5cybgWzFI9bn35vU1PvH5NJxJitjJ7sg9gjtLf9WOIddIy4FdqmprhbG2YnR32GITOwFhg==
+"@abp/jquery-validation-unobtrusive@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.2.1.tgz#36681e75e43e8f708bbd5d6e359eefd8dcce86df"
+ integrity sha512-STuVKdSUNjrW3q30GcszgzecHDdPmL3aA0jPsRJr0S2Wp5CQOe0dB7d5xyAnADIL68cPXjZWlz1OyXSQ2LixeQ==
dependencies:
- "@abp/jquery-validation" "~4.2.0"
+ "@abp/jquery-validation" "~4.2.1"
jquery-validation-unobtrusive "^3.2.11"
-"@abp/jquery-validation@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.0.tgz#a09d7cf2abf8ccf0c59f27eadacb030fb2067bbe"
- integrity sha512-/nvJrs1pt3LJX+SgH3FtDPfCDrcl4M0LDxjV7hf0Y1jtyhvWOQiyJMb8FKzMweTTEOd0pHG/GvOKd90STabSiw==
+"@abp/jquery-validation@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.2.1.tgz#209b0acb500ac301bb66b3f04bc18b9c574e2fcf"
+ integrity sha512-g87I0nO7Jk2d4Jt7PlLk/bHu5xQFH4+mbHwH4oRLAzflDhRNtNB+uVF35HK/1shprmSlZt6X+bHz652SEqD81g==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
jquery-validation "^1.19.2"
-"@abp/jquery@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.0.tgz#0a24488198ca6c9b84273fa028b853ee9f94f3a7"
- integrity sha512-6a42Iy7knhgzvQUvCHenrVnPDKhsOyqgZkPxs9pa9x/wNapSch+jLM7u1ezKAFj/Ai4w9yG/yqP+4YE8seZDZw==
+"@abp/jquery@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.2.1.tgz#b8ed11cbc02d33cdc99cacbaf5089343a0f164c5"
+ integrity sha512-xcoSu/2qc2AEF+dCTNHTCWjAo1dIcohHVPM3Yh36bb+JEcnruYYRokqZc4pzkh0GQamE1eMVGi3QOAmuURtbCg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
jquery "~3.5.1"
-"@abp/lodash@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.0.tgz#74dfac7d70f1563df2b78c5ebd0b2450e11c4c42"
- integrity sha512-5hpjxWZJPvjMIY7FCCw/v/B+JzJbB/yuoioRzcU4vrisY9uRq54vVYcX7hH1DldsJFPTuXY3Id1WBflHA5I9Aw==
+"@abp/lodash@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.2.1.tgz#87b7f48cf494553f7cd43dddf625a90581555ae7"
+ integrity sha512-hDwzR/Q9GqXPdQaijQ3B4GIWZ8z9clCW9vU59qbELD8xBZIJalTSrUGnIT8YNB9O5tNFb2FWJJbw5Nh8K7lu1A==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
lodash "^4.17.15"
-"@abp/luxon@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.0.tgz#9cd02faa02cda1315f3e23ae204991ef47d6ae7c"
- integrity sha512-dwtv2kqWCDyQADA1Os0aIy6Au2PhBtN6q9kukLWCvYmQZI23OKuEBMSngbJVTqEPfz0LV6CWbsWCUC3okAs46A==
+"@abp/luxon@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.2.1.tgz#e29c1fe9903beb0fc4d32cab90a5de4ebc768e43"
+ integrity sha512-Sussnocvw75EbJ1j0Ohn7F+SBQy9xPbiG6RJExdDFzxhUNsVp5wJF2Jm8hOZB3DYkeGAOskY5RoIG0abfE/j3w==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
luxon "^1.24.1"
-"@abp/malihu-custom-scrollbar-plugin@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.0.tgz#2f8538df5567a2cf227998e4e2fb9a44b6e814eb"
- integrity sha512-3D5REdR7yw2sRRfm3Oi+qlhDABLrKvfU/l7JcCJy+vrBvadx3e3pTdTLXsGptypPN3x/Qr400LgwIrrgyefN8g==
+"@abp/malihu-custom-scrollbar-plugin@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.2.1.tgz#0c491d772ab0bb03d7eead0b9715bddb44252d56"
+ integrity sha512-qBnBMzj4G/dAMShmF4EXr55hkMehC1+cB6Jjl1wPHgMV8QPafznBKGyM6KWxGhrl8K6nCErBbidgQKpYqtWhNA==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.0.tgz#eb05d22b1390c037911ba25e5ca0f2ed508a93b1"
- integrity sha512-VlNoa9+F1/kGmaEI2wbL/cRNeAEpp0UdLpbadAnsmpUIODxCULCWS556Q4Y6Ff4CzYtzkYz2qaJ8T8pn+3EOcA==
+"@abp/select2@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.2.1.tgz#2f397cc1754135642385333bf47a1a106dd9b165"
+ integrity sha512-g1AUGof5daULbVFCokR9JS1/4gIpEWKB5/+rRJBmnje2hUgBA3llD5PCOh5WRHA7urJJOD/5BjWlFdozluUAyg==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
select2 "^4.0.13"
-"@abp/sweetalert@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.0.tgz#b1daf641f27f0c8c2e246d364d6285c133faf773"
- integrity sha512-AarV/L031xNB1gk/OYEUxkKZmls7zTwovS2t3ZrmwXXoav7nBCSPjEf1ByR2yhZRU/Yo1SNY/CNQQ4dgyf7Xng==
+"@abp/sweetalert@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.2.1.tgz#bdbc28c3f73b314b8ca792ea73390fe9f558c03f"
+ integrity sha512-xTi0oSjAkFMIDHgF8YB+oqFCl4gNfnt7mGHvEjJwpCEQSkuML9QsiGvw1TpXyHP7npOWSjjVpoyEBS2HXC778Q==
dependencies:
- "@abp/core" "~4.2.0"
+ "@abp/core" "~4.2.1"
sweetalert "^2.1.2"
-"@abp/timeago@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.0.tgz#9b15c496b7e63df93921d41de9e9eaf35a8dccbe"
- integrity sha512-hyuLVGluHxtWEhR0VakPx5UCbyPcfq4lECEgHhI62PvH0xcSNNZ3bp1QnBTd3se/HAYvwA5sCwJY0YXQgUF2UQ==
+"@abp/timeago@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.2.1.tgz#38474ed4455e94c687a3124e1a6e77c3b29a87d3"
+ integrity sha512-46+2plKizUcRn2VWN5WPWvwEVz+xoKOmsH1tEJ8WKKNxjeNRAsfeOslbfIEks89hTXLQemP3txAbq9V3E8pwQw==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
timeago "^1.6.7"
-"@abp/toastr@~4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.0.tgz#400e2f28b19c72b131ca32aa188ff5151d035752"
- integrity sha512-tuGZd3kXqj1t/Y1xN8sOUH1KxiArYKD7xkhuajoOS65Ex5ad8mHPuzCtu8Pv+KL8TVFys9x3U3Tg24DQ6ASjhQ==
+"@abp/toastr@~4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.2.1.tgz#9e30607f7ff7067588d0a660226d338003c37707"
+ integrity sha512-fdlMZjffEO/05aeG8BjTspARKGtUu2SpoFViTeHGhSPsCW55BvuehIgRhyOEQNfMqJz8m0cVR0R2q+WPFWf1XA==
dependencies:
- "@abp/jquery" "~4.2.0"
+ "@abp/jquery" "~4.2.1"
toastr "^2.1.4"
-"@abp/utils@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.0.tgz#073330e3e3f6ee61892f50260e48dbe1b05df35e"
- integrity sha512-75qR3SdiAa75wqleAx9sUMXLj4m9duuBo5+2sVv7Y29GcEyKUPvm8B1s6tksvSGA0e3vnFTHeVEc10eD1xKHSQ==
+"@abp/utils@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.2.1.tgz#1f5bfa7aae0065ec4dc38f1f5dc393b664c92d5c"
+ integrity sha512-V7XYC38u4C+UpXQr28KA1KHL5nNgDsFHfZULPnkwPxV8DuhzemmPYN3qmSXi5hfSfp+psNCX3GYZRMCI57kHgQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210209082122_UrlSlugToSlug.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210209082122_UrlSlugToSlug.Designer.cs
new file mode 100644
index 0000000000..ef06bb2fd9
--- /dev/null
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210209082122_UrlSlugToSlug.Designer.cs
@@ -0,0 +1,1891 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+using Volo.CmsKit.EntityFrameworkCore;
+
+namespace Volo.CmsKit.Migrations
+{
+ [DbContext(typeof(UnifiedDbContext))]
+ [Migration("20210209082122_UrlSlugToSlug")]
+ partial class UrlSlugToSlug
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .UseIdentityColumns()
+ .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("ProductVersion", "5.0.2");
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ApplicationName")
+ .HasMaxLength(96)
+ .HasColumnType("nvarchar(96)")
+ .HasColumnName("ApplicationName");
+
+ b.Property("BrowserInfo")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)")
+ .HasColumnName("BrowserInfo");
+
+ b.Property("ClientId")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("ClientId");
+
+ b.Property("ClientIpAddress")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("ClientIpAddress");
+
+ b.Property("ClientName")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("ClientName");
+
+ b.Property("Comments")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("Comments");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property("CorrelationId")
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("CorrelationId");
+
+ b.Property("Exceptions")
+ .HasMaxLength(4000)
+ .HasColumnType("nvarchar(4000)")
+ .HasColumnName("Exceptions");
+
+ b.Property("ExecutionDuration")
+ .HasColumnType("int")
+ .HasColumnName("ExecutionDuration");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("HttpMethod")
+ .HasMaxLength(16)
+ .HasColumnType("nvarchar(16)")
+ .HasColumnName("HttpMethod");
+
+ b.Property("HttpStatusCode")
+ .HasColumnType("int")
+ .HasColumnName("HttpStatusCode");
+
+ b.Property("ImpersonatorTenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("ImpersonatorTenantId");
+
+ b.Property("ImpersonatorUserId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("ImpersonatorUserId");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.Property("TenantName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Url")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("Url");
+
+ b.Property("UserId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("UserId");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("UserName");
+
+ b.HasKey("Id");
+
+ b.HasIndex("TenantId", "ExecutionTime");
+
+ b.HasIndex("TenantId", "UserId", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogs");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditLogId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("AuditLogId");
+
+ b.Property("ExecutionDuration")
+ .HasColumnType("int")
+ .HasColumnName("ExecutionDuration");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("ExecutionTime");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("MethodName")
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("MethodName");
+
+ b.Property("Parameters")
+ .HasMaxLength(2000)
+ .HasColumnType("nvarchar(2000)")
+ .HasColumnName("Parameters");
+
+ b.Property("ServiceName")
+ .HasMaxLength(256)
+ .HasColumnType("nvarchar(256)")
+ .HasColumnName("ServiceName");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogActions");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditLogId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("AuditLogId");
+
+ b.Property("ChangeTime")
+ .HasColumnType("datetime2")
+ .HasColumnName("ChangeTime");
+
+ b.Property("ChangeType")
+ .HasColumnType("tinyint")
+ .HasColumnName("ChangeType");
+
+ b.Property("EntityId")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("EntityId");
+
+ b.Property("EntityTenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EntityTypeFullName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("EntityTypeFullName");
+
+ b.Property("ExtraProperties")
+ .HasColumnType("nvarchar(max)")
+ .HasColumnName("ExtraProperties");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "EntityTypeFullName", "EntityId");
+
+ b.ToTable("AbpEntityChanges");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EntityChangeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("NewValue")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)")
+ .HasColumnName("NewValue");
+
+ b.Property("OriginalValue")
+ .HasMaxLength(512)
+ .HasColumnType("nvarchar(512)")
+ .HasColumnName("OriginalValue");
+
+ b.Property("PropertyName")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("nvarchar(128)")
+ .HasColumnName("PropertyName");
+
+ b.Property("PropertyTypeFullName")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("nvarchar(64)")
+ .HasColumnName("PropertyTypeFullName");
+
+ b.Property("TenantId")
+ .HasColumnType("uniqueidentifier")
+ .HasColumnName("TenantId");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntityChangeId");
+
+ b.ToTable("AbpEntityPropertyChanges");
+ });
+
+ modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasMaxLength(40)
+ .HasColumnType("nvarchar(40)")
+ .HasColumnName("ConcurrencyStamp");
+
+ b.Property