From cfa4d09e36d29371c86d94236cb5aebfe9debf9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Tue, 7 Jan 2020 23:44:47 +0300 Subject: [PATCH 01/45] Create Volo.Abp.AspNetCore.Serilog package. --- framework/Volo.Abp.sln | 9 ++- ...CoreSerilogApplicationBuilderExtensions.cs | 13 ++++ .../Volo.Abp.AspNetCore.Serilog.csproj | 27 +++++++ .../AspNetCore/Serilog/AbpSerilogModule.cs | 14 ++++ .../AspNetCore/Serilog/SerilogMiddleware.cs | 70 +++++++++++++++++++ 5 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 088a9437a8..b9a27d757f 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -1,4 +1,4 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28922.388 MinimumVisualStudioVersion = 10.0.40219.1 @@ -256,6 +256,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Minify", "src\Volo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Minify.Tests", "test\Volo.Abp.Minify.Tests\Volo.Abp.Minify.Tests.csproj", "{E69182B3-350A-43F5-A935-5EBBEBECEF97}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Serilog", "src\Volo.Abp.AspNetCore.Serilog\Volo.Abp.AspNetCore.Serilog.csproj", "{3B801003-BE74-49ED-9749-DA5E99F45EBF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -762,6 +764,10 @@ Global {E69182B3-350A-43F5-A935-5EBBEBECEF97}.Debug|Any CPU.Build.0 = Debug|Any CPU {E69182B3-350A-43F5-A935-5EBBEBECEF97}.Release|Any CPU.ActiveCfg = Release|Any CPU {E69182B3-350A-43F5-A935-5EBBEBECEF97}.Release|Any CPU.Build.0 = Release|Any CPU + {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -892,6 +898,7 @@ Global {73559227-EBF0-475F-835B-1FF0CD9132AA} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {928DC30D-C078-4BB4-A9F8-FE7252C67DC6} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {E69182B3-350A-43F5-A935-5EBBEBECEF97} = {447C8A77-E5F0-4538-8687-7383196D04EA} + {3B801003-BE74-49ED-9749-DA5E99F45EBF} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs new file mode 100644 index 0000000000..f9093ffaac --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs @@ -0,0 +1,13 @@ +using Volo.Abp.AspNetCore.Serilog; + +namespace Microsoft.AspNetCore.Builder +{ + public static class AbpAspNetCoreSerilogApplicationBuilderExtensions + { + public static IApplicationBuilder UseSerilogEnrichers(this IApplicationBuilder app) + { + return app + .UseMiddleware(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj new file mode 100644 index 0000000000..f450e04423 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj @@ -0,0 +1,27 @@ + + + + + + netcoreapp3.1 + Volo.Abp.AspNetCore.Serilog + Volo.Abp.AspNetCore.Serilog + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + true + Library + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs new file mode 100644 index 0000000000..5012d54e30 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs @@ -0,0 +1,14 @@ +using Volo.Abp.AspNetCore; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.AspNetCore.Serilog +{ + [DependsOn( + typeof(AbpMultiTenancyModule), + typeof(AbpAspNetCoreModule) + )] + public class AbpSerilogModule : AbpModule + { + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs new file mode 100644 index 0000000000..10bbdb188f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Serilog.Context; +using Serilog.Core; +using Serilog.Core.Enrichers; +using Volo.Abp.Clients; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Tracing; +using Volo.Abp.Users; + +namespace Volo.Abp.AspNetCore.Serilog +{ + public class SerilogMiddleware : IMiddleware, ITransientDependency + { + private const string TenantEnricherPropertyName = "TenantId"; + private const string UserEnricherPropertyName = "UserId"; + private const string ClientEnricherPropertyName = "ClientId"; + private const string CorrelationIdPropertyName = "CorrelationId"; + + private readonly ICurrentClient _currentClient; + private readonly ICurrentTenant _currentTenant; + private readonly ICurrentUser _currentUser; + private readonly ICorrelationIdProvider _correlationIdProvider; + + public SerilogMiddleware( + ICurrentTenant currentTenant, + ICurrentUser currentUser, + ICurrentClient currentClient, + ICorrelationIdProvider correlationIdProvider) + { + _currentTenant = currentTenant; + _currentUser = currentUser; + _currentClient = currentClient; + _correlationIdProvider = correlationIdProvider; + } + + public async Task InvokeAsync(HttpContext context, RequestDelegate next) + { + var enrichers = new List(); + + if (_currentTenant?.Id != null) + { + enrichers.Add(new PropertyEnricher(TenantEnricherPropertyName, _currentTenant.Id)); + } + + if (_currentUser?.Id != null) + { + enrichers.Add(new PropertyEnricher(UserEnricherPropertyName, _currentUser.Id)); + } + + if (_currentClient?.Id != null) + { + enrichers.Add(new PropertyEnricher(ClientEnricherPropertyName, _currentClient.Id)); + } + + var correlationId = _correlationIdProvider.Get(); + if (!string.IsNullOrEmpty(correlationId)) + { + enrichers.Add(new PropertyEnricher(CorrelationIdPropertyName, correlationId)); + } + + using (LogContext.Push(enrichers.ToArray())) + { + await next(context).ConfigureAwait(false); + } + } + } +} \ No newline at end of file From c57281570177e91d4f80a00ebcf8f58d5f9cda15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Wed, 8 Jan 2020 07:41:56 +0300 Subject: [PATCH 02/45] Update application template UseSerilogEnrichers. --- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 1 + .../MyProjectNameHttpApiHostModule.cs | 5 ++++- ...yCompanyName.MyProjectName.HttpApi.HostWithIds.csproj | 1 + .../MyProjectNameHttpApiHostModule.cs | 5 ++++- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 2 ++ .../MyProjectNameIdentityServerModule.cs | 5 ++++- .../MyCompanyName.MyProjectName.Web.Host.csproj | 2 ++ .../MyProjectNameWebModule.cs | 6 ++++-- .../MyCompanyName.MyProjectName.Web.csproj | 1 + .../MyProjectNameWebModule.cs | 9 ++++----- 10 files changed, 27 insertions(+), 10 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index 19435bb1fa..173d10bbc2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -20,6 +20,7 @@ + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 59ba519ce4..3db35cd20b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -15,6 +15,7 @@ using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Caching; using Volo.Abp.Localization; @@ -28,7 +29,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpAutofacModule), typeof(AbpAspNetCoreMvcUiMultiTenancyModule), typeof(MyProjectNameApplicationModule), - typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule) + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), + typeof(AbpSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { @@ -178,6 +180,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj index 038e2e4016..f59176e5af 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj @@ -20,6 +20,7 @@ + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index a60d2ddb35..73a9d01be6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -18,6 +18,7 @@ using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Authentication.JwtBearer; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Localization; using Volo.Abp.Modularity; @@ -34,7 +35,8 @@ namespace MyCompanyName.MyProjectName typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), - typeof(AbpAccountWebIdentityServerModule) + typeof(AbpAccountWebIdentityServerModule), + typeof(AbpSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { @@ -172,6 +174,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index aecc6831be..e040f9642d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -43,6 +43,8 @@ + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 2e2211791e..117386e588 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -18,6 +18,7 @@ using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Auditing; using Volo.Abp.Autofac; using Volo.Abp.BackgroundJobs; @@ -35,7 +36,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpAccountWebIdentityServerModule), typeof(AbpAccountApplicationModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), - typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule) + typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), + typeof(AbpSerilogModule) )] public class MyProjectNameIdentityServerModule : AbpModule { @@ -149,6 +151,7 @@ namespace MyCompanyName.MyProjectName app.UseAuthorization(); app.UseAbpRequestLocalization(); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index 66864acc82..ecdd1446fa 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -29,6 +29,8 @@ + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs index 28afed0c7c..c30a3b5d88 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs @@ -22,6 +22,7 @@ using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.AutoMapper; using Volo.Abp.Caching; @@ -49,7 +50,8 @@ namespace MyCompanyName.MyProjectName.Web typeof(AbpFeatureManagementWebModule), typeof(AbpHttpClientIdentityModelModule), typeof(AbpIdentityWebModule), - typeof(AbpTenantManagementWebModule) + typeof(AbpTenantManagementWebModule), + typeof(AbpSerilogModule) )] public class MyProjectNameWebModule : AbpModule { @@ -241,7 +243,7 @@ namespace MyCompanyName.MyProjectName.Web }); app.UseAuditing(); - + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 9540447c74..6cf7d25498 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -47,6 +47,7 @@ + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 87626719f3..cd27c9ece2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -23,6 +23,7 @@ using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.AutoMapper; using Volo.Abp.FeatureManagement; @@ -47,7 +48,8 @@ namespace MyCompanyName.MyProjectName.Web typeof(AbpAccountWebIdentityServerModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), - typeof(AbpTenantManagementWebModule) + typeof(AbpTenantManagementWebModule), + typeof(AbpSerilogModule) )] public class MyProjectNameWebModule : AbpModule { @@ -198,7 +200,6 @@ namespace MyCompanyName.MyProjectName.Web { app.UseErrorPage(); } - app.UseVirtualFiles(); app.UseRouting(); app.UseAuthentication(); @@ -208,18 +209,16 @@ namespace MyCompanyName.MyProjectName.Web { app.UseMultiTenancy(); } - app.UseIdentityServer(); app.UseAuthorization(); app.UseAbpRequestLocalization(); - app.UseSwagger(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); }); - app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } From 3028b1a431c06894068382aa3d2af925935d7db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Wed, 8 Jan 2020 07:54:17 +0300 Subject: [PATCH 03/45] Update module template UseSerilogEnrichers. --- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 1 + .../MyProjectNameHttpApiHostModule.cs | 5 ++++- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 1 + .../MyProjectNameIdentityServerModule.cs | 5 ++++- .../MyCompanyName.MyProjectName.Web.Host.csproj | 6 ++++++ .../MyProjectNameWebHostModule.cs | 6 ++++-- .../MyCompanyName.MyProjectName.Web.Unified.csproj | 1 + .../MyProjectNameWebUnifiedModule.cs | 5 ++++- 8 files changed, 25 insertions(+), 5 deletions(-) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index fe10668840..07979b3f63 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -19,6 +19,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index f48706663e..972ccc9708 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -15,6 +15,7 @@ using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; using Volo.Abp.Caching; @@ -39,7 +40,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpAuditLoggingEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), - typeof(AbpSettingManagementEntityFrameworkCoreModule) + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { @@ -166,6 +168,7 @@ namespace MyCompanyName.MyProjectName options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); }); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index b25ce4b603..062dceabaf 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -21,6 +21,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 5f0f80c05e..7205fdf225 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -17,6 +17,7 @@ using Volo.Abp.AspNetCore.Authentication.JwtBearer; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Auditing; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; @@ -66,7 +67,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementHttpApiModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), - typeof(MyProjectNameApplicationContractsModule) + typeof(MyProjectNameApplicationContractsModule), + typeof(AbpSerilogModule) )] public class MyProjectNameIdentityServerModule : AbpModule { @@ -189,6 +191,7 @@ namespace MyCompanyName.MyProjectName options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); }); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); SeedData(context); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index 663a908ad8..cacefbdb7c 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -51,4 +51,10 @@ + + + ..\..\..\..\..\framework\src\Volo.Abp.AspNetCore.Serilog\bin\Debug\netcoreapp3.1\Volo.Abp.AspNetCore.Serilog.dll + + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index 473bdab2cf..cabb843736 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -21,6 +21,7 @@ using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.AutoMapper; using Volo.Abp.Caching; @@ -55,7 +56,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementWebModule), typeof(AbpTenantManagementHttpApiClientModule), typeof(AbpFeatureManagementHttpApiClientModule), - typeof(AbpPermissionManagementHttpApiClientModule) + typeof(AbpPermissionManagementHttpApiClientModule), + typeof(AbpSerilogModule) )] public class MyProjectNameWebHostModule : AbpModule { @@ -249,7 +251,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); - + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj index 1099836b9c..35fe11e53d 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj @@ -17,6 +17,7 @@ + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index 8390297a9f..ea653ca4a1 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -12,6 +12,7 @@ using Volo.Abp.Account; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; using Volo.Abp.Data; @@ -56,7 +57,8 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementWebModule), typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), - typeof(AbpAspNetCoreMvcUiBasicThemeModule) + typeof(AbpAspNetCoreMvcUiBasicThemeModule), + typeof(AbpSerilogModule) )] public class MyProjectNameWebUnifiedModule : AbpModule { @@ -137,6 +139,7 @@ namespace MyCompanyName.MyProjectName app.UseAbpRequestLocalization(); app.UseAuditing(); + app.UseSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); using (var scope = context.ServiceProvider.CreateScope()) From 3c479b952429898a1dda770a00d3c65291d1e232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 9 Jan 2020 00:20:27 +0300 Subject: [PATCH 04/45] Adding AbpAspNetCoreSerilogEnrichersOptions. --- .../AbpAspNetCoreSerilogEnrichersOptions.cs | 21 +++++++++++++++++++ .../Serilog/AbpSerilogEnrichersConsts.cs | 10 +++++++++ .../AspNetCore/Serilog/SerilogMiddleware.cs | 19 ++++++++--------- 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs new file mode 100644 index 0000000000..06453cb61f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs @@ -0,0 +1,21 @@ +namespace Volo.Abp.AspNetCore.Serilog +{ + public class AbpAspNetCoreSerilogEnrichersOptions + { + public string TenantIdEnricherPropertyName { get; set; } + + public string UserIdEnricherPropertyName { get; set; } + + public string ClientIdEnricherPropertyName { get; set; } + + public string CorrelationIdPropertyName { get; set; } + + public AbpAspNetCoreSerilogEnrichersOptions() + { + TenantIdEnricherPropertyName = AbpSerilogEnrichersConsts.TenantIdEnricherPropertyName; + UserIdEnricherPropertyName = AbpSerilogEnrichersConsts.UserIdEnricherPropertyName; + ClientIdEnricherPropertyName = AbpSerilogEnrichersConsts.ClientIdEnricherPropertyName; + CorrelationIdPropertyName = AbpSerilogEnrichersConsts.CorrelationIdPropertyName; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs new file mode 100644 index 0000000000..bf2832b553 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs @@ -0,0 +1,10 @@ +namespace Volo.Abp.AspNetCore.Serilog +{ + public class AbpSerilogEnrichersConsts + { + public const string TenantIdEnricherPropertyName = "TenantId"; + public const string UserIdEnricherPropertyName = "UserId"; + public const string ClientIdEnricherPropertyName = "ClientId"; + public const string CorrelationIdPropertyName = "CorrelationId"; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs index 10bbdb188f..e03bcd5342 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; using Serilog.Context; using Serilog.Core; using Serilog.Core.Enrichers; @@ -14,26 +15,24 @@ namespace Volo.Abp.AspNetCore.Serilog { public class SerilogMiddleware : IMiddleware, ITransientDependency { - private const string TenantEnricherPropertyName = "TenantId"; - private const string UserEnricherPropertyName = "UserId"; - private const string ClientEnricherPropertyName = "ClientId"; - private const string CorrelationIdPropertyName = "CorrelationId"; - private readonly ICurrentClient _currentClient; private readonly ICurrentTenant _currentTenant; private readonly ICurrentUser _currentUser; private readonly ICorrelationIdProvider _correlationIdProvider; + private readonly AbpAspNetCoreSerilogEnrichersOptions _options; public SerilogMiddleware( ICurrentTenant currentTenant, ICurrentUser currentUser, ICurrentClient currentClient, - ICorrelationIdProvider correlationIdProvider) + ICorrelationIdProvider correlationIdProvider, + IOptions options) { _currentTenant = currentTenant; _currentUser = currentUser; _currentClient = currentClient; _correlationIdProvider = correlationIdProvider; + _options = options.Value; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) @@ -42,23 +41,23 @@ namespace Volo.Abp.AspNetCore.Serilog if (_currentTenant?.Id != null) { - enrichers.Add(new PropertyEnricher(TenantEnricherPropertyName, _currentTenant.Id)); + enrichers.Add(new PropertyEnricher(_options.TenantIdEnricherPropertyName, _currentTenant.Id)); } if (_currentUser?.Id != null) { - enrichers.Add(new PropertyEnricher(UserEnricherPropertyName, _currentUser.Id)); + enrichers.Add(new PropertyEnricher(_options.UserIdEnricherPropertyName, _currentUser.Id)); } if (_currentClient?.Id != null) { - enrichers.Add(new PropertyEnricher(ClientEnricherPropertyName, _currentClient.Id)); + enrichers.Add(new PropertyEnricher(_options.ClientIdEnricherPropertyName, _currentClient.Id)); } var correlationId = _correlationIdProvider.Get(); if (!string.IsNullOrEmpty(correlationId)) { - enrichers.Add(new PropertyEnricher(CorrelationIdPropertyName, correlationId)); + enrichers.Add(new PropertyEnricher(_options.CorrelationIdPropertyName, correlationId)); } using (LogContext.Push(enrichers.ToArray())) From beecc1995732e37f76c49e9274dc522df541d512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 9 Jan 2020 10:39:49 +0300 Subject: [PATCH 05/45] Add test project. --- framework/Volo.Abp.sln | 7 ++ .../Volo.Abp.AspNetCore.Serilog.Tests.csproj | 24 +++++ .../AspNetCore/App/AbpSerilogTestModule.cs | 39 ++++++++ .../Volo/Abp/AspNetCore/App/CollectingSink.cs | 19 ++++ .../AspNetCore/App/SerilogTestController.cs | 27 ++++++ .../Volo/Abp/AspNetCore/App/Startup.cs | 20 ++++ .../AspNetCore/Serilog/AbpSerilogTestBase.cs | 31 ++++++ .../Serilog/Serilog_Enrichers_Tests.cs | 97 +++++++++++++++++++ 8 files changed, 264 insertions(+) create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/CollectingSink.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/SerilogTestController.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs create mode 100644 framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index b9a27d757f..b731aff187 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -258,6 +258,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Minify.Tests", "te EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Serilog", "src\Volo.Abp.AspNetCore.Serilog\Volo.Abp.AspNetCore.Serilog.csproj", "{3B801003-BE74-49ED-9749-DA5E99F45EBF}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Serilog.Tests", "test\Volo.Abp.AspNetCore.Serilog.Tests\Volo.Abp.AspNetCore.Serilog.Tests.csproj", "{9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -768,6 +770,10 @@ Global {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Debug|Any CPU.Build.0 = Debug|Any CPU {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Release|Any CPU.ActiveCfg = Release|Any CPU {3B801003-BE74-49ED-9749-DA5E99F45EBF}.Release|Any CPU.Build.0 = Release|Any CPU + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -899,6 +905,7 @@ Global {928DC30D-C078-4BB4-A9F8-FE7252C67DC6} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {E69182B3-350A-43F5-A935-5EBBEBECEF97} = {447C8A77-E5F0-4538-8687-7383196D04EA} {3B801003-BE74-49ED-9749-DA5E99F45EBF} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {9CAA07ED-FE5C-4427-A6FA-6C6CB5B4CC62} = {447C8A77-E5F0-4538-8687-7383196D04EA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj new file mode 100644 index 0000000000..740c57949d --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo.Abp.AspNetCore.Serilog.Tests.csproj @@ -0,0 +1,24 @@ + + + + + + netcoreapp3.1 + Volo.Abp.AspNetCore.Serilog.Tests + Volo.Abp.AspNetCore.Serilog.Tests + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs new file mode 100644 index 0000000000..64ac0d76bc --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs @@ -0,0 +1,39 @@ +using Microsoft.AspNetCore.Builder; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Serilog; +using Volo.Abp.AspNetCore.TestBase; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.AspNetCore.App +{ + [DependsOn( + typeof(AbpAspNetCoreTestBaseModule), + typeof(AbpAspNetCoreMvcModule), + typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpSerilogModule), + typeof(AbpAutofacModule) + )] + public class AbpSerilogTestModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => { options.IsEnabled = true; }); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + + app.UseCorrelationId(); + app.UseRouting(); + app.UseAuthorization(); + app.UseMultiTenancy(); + app.UseAuditing(); + app.UseSerilogEnrichers(); + app.UseMvcWithDefaultRouteAndArea(); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/CollectingSink.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/CollectingSink.cs new file mode 100644 index 0000000000..fe403e02ef --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/CollectingSink.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Linq; +using Serilog.Core; +using Serilog.Events; + +namespace Volo.Abp.AspNetCore.App +{ + public class CollectingSink : ILogEventSink + { + public List Events { get; } = new List(); + + public LogEvent SingleEvent => Events.Single(); + + public void Emit(LogEvent logEvent) + { + Events.Add(logEvent); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/SerilogTestController.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/SerilogTestController.cs new file mode 100644 index 0000000000..972af4c801 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/SerilogTestController.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Tracing; + +namespace Volo.Abp.AspNetCore.App +{ + public class SerilogTestController : AbpController + { + private readonly ICorrelationIdProvider _correlationIdProvider; + + public SerilogTestController(ICorrelationIdProvider correlationIdProvider) + { + _correlationIdProvider = correlationIdProvider; + } + + public ActionResult Index() + { + return Content("Index-Result"); + } + + public ActionResult CorrelationId() + { + return Content(_correlationIdProvider.Get()); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs new file mode 100644 index 0000000000..a1a58100d5 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/Startup.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Volo.Abp.AspNetCore.App +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddApplication(); + } + + public void Configure(IApplicationBuilder app, IWebHostEnvironment env,ILoggerFactory loggerFactory) + { + app.InitializeApplication(); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs new file mode 100644 index 0000000000..96a13ac45b --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/AbpSerilogTestBase.cs @@ -0,0 +1,31 @@ +using System.Linq; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; +using Volo.Abp.AspNetCore.App; + +namespace Volo.Abp.AspNetCore.Serilog +{ + public class AbpSerilogTestBase : AbpAspNetCoreTestBase + { + protected readonly CollectingSink CollectingSink = new CollectingSink(); + + protected override IHostBuilder CreateHostBuilder() + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .Enrich.FromLogContext() + .WriteTo.Sink(CollectingSink) + .CreateLogger(); + + return base.CreateHostBuilder() + .UseSerilog(); + } + + protected LogEvent GetLogEvent(string text) + { + return CollectingSink.Events.FirstOrDefault(m => m.MessageTemplate.Text == text); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs new file mode 100644 index 0000000000..bc45eb7c51 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs @@ -0,0 +1,97 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Serilog.Events; +using Shouldly; +using Volo.Abp.AspNetCore.App; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; +using Volo.Abp.MultiTenancy.ConfigurationStore; +using Xunit; + +namespace Volo.Abp.AspNetCore.Serilog +{ + public class Serilog_Enrichers_Tests : AbpSerilogTestBase + { + private const string ExecutedEndpointLogEventText = "Executed endpoint '{EndpointName}'"; + + private readonly Guid _testTenantId = Guid.NewGuid(); + private readonly string _testTenantName = "acme"; + + private readonly AbpAspNetCoreMultiTenancyOptions _tenancyOptions; + private readonly AbpAspNetCoreSerilogEnrichersOptions _serilogEnrichersOptions; + private readonly ILogger _logger; + + public Serilog_Enrichers_Tests() + { + _tenancyOptions = ServiceProvider.GetRequiredService>().Value; + _serilogEnrichersOptions = + ServiceProvider.GetRequiredService>().Value; + _logger = ServiceProvider.GetRequiredService>(); + } + + protected override IHostBuilder CreateHostBuilder() + { + return base.CreateHostBuilder().ConfigureServices(services => + { + services.Configure(options => + { + options.Tenants = new[] + { + new TenantConfiguration(_testTenantId, _testTenantName) + }; + }); + }); + } + + [Fact] + public async Task TenantId_Not_Set_Test() + { + var url = GetUrl(nameof(SerilogTestController.Index)); + var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + + var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); + + executedLogEvent.ShouldNotBeNull(); + executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.TenantIdEnricherPropertyName) + .ShouldBe(false); + } + + [Fact] + public async Task TenantId_Set_Test() + { + var url = + GetUrl(nameof(SerilogTestController.Index)) + + $"?{_tenancyOptions.TenantKey}={_testTenantName}"; + var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + + var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); + + executedLogEvent.ShouldNotBeNull(); + executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.TenantIdEnricherPropertyName) + .ShouldBe(true); + ((ScalarValue) executedLogEvent.Properties[_serilogEnrichersOptions.TenantIdEnricherPropertyName]).Value + .ShouldBe(_testTenantId); + } + + [Fact] + public async Task CorrelationId_Enrichers_Test() + { + var url = GetUrl(nameof(SerilogTestController.CorrelationId)); + var result = await GetResponseAsStringAsync(url).ConfigureAwait(false); + + var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); + + executedLogEvent.ShouldNotBeNull(); + + executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.CorrelationIdPropertyName) + .ShouldNotBeNull(); + + ((ScalarValue) executedLogEvent.Properties[_serilogEnrichersOptions.CorrelationIdPropertyName]).Value + .ShouldBe(result); + } + } +} \ No newline at end of file From c3669cc208512684adceacba8a7ccfa96731fe83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 9 Jan 2020 10:40:23 +0300 Subject: [PATCH 06/45] Add Volo.Abp.AspNetCore.Serilog to common.ps1 --- nupkg/common.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index eeac13eac8..a582f8c115 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -40,6 +40,7 @@ $projects = ( "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic", "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared", "framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets", + "framework/src/Volo.Abp.AspNetCore.Serilog", "framework/src/Volo.Abp.AspNetCore.TestBase", "framework/src/Volo.Abp.Auditing", "framework/src/Volo.Abp.Authorization", From e84dde4f76abf5ccb45036afce868bde9266e4f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Tu=CC=88ken?= Date: Thu, 9 Jan 2020 11:06:50 +0300 Subject: [PATCH 07/45] Change Serilog.Extensions.Hosting package to Serilog.AspNetCore. --- .../Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj | 2 +- .../app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj | 2 +- .../Volo.ClientSimulation.Demo.csproj | 2 +- modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj | 2 +- .../Acme.BookStore.HttpApi.Host.csproj | 2 +- .../src/Acme.BookStore.Web/Acme.BookStore.Web.csproj | 2 +- .../Acme.BookStore.BookManagement.HttpApi.Host.csproj | 2 +- .../Acme.BookStore.BookManagement.IdentityServer.csproj | 2 +- .../Acme.BookStore.BookManagement.Web.Host.csproj | 2 +- .../Acme.BookStore.BookManagement.Web.Unified.csproj | 2 +- .../BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj | 2 +- .../src/DashboardDemo.Web/DashboardDemo.Web.csproj | 2 +- .../applications/AuthServer.Host/AuthServer.Host.csproj | 2 +- .../BackendAdminApp.Host/BackendAdminApp.Host.csproj | 2 +- .../applications/PublicWebSite.Host/PublicWebSite.Host.csproj | 2 +- .../BackendAdminAppGateway.Host.csproj | 2 +- .../gateways/InternalGateway.Host/InternalGateway.Host.csproj | 2 +- .../PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj | 2 +- .../BloggingService.Host/BloggingService.Host.csproj | 2 +- .../IdentityService.Host/IdentityService.Host.csproj | 2 +- .../ProductService.Host/ProductService.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj | 2 +- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.csproj | 2 +- .../MyCompanyName.MyProjectName.HttpApi.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.IdentityServer.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.Unified.csproj | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj index 3384fcf332..931eb63088 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj @@ -9,7 +9,7 @@ - + diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index 750481d6a1..1ef5fb5c4c 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -12,7 +12,7 @@ - + diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj index 8544cf6cff..0f9f7bde5e 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/Volo.ClientSimulation.Demo.csproj @@ -8,7 +8,7 @@ - + diff --git a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj index ef8fc992e3..c5e164247b 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj +++ b/modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj @@ -14,7 +14,7 @@ - + diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj index 46638e1958..ad0861edc7 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.HttpApi.Host/Acme.BookStore.HttpApi.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index b71bc65d91..9d4115179c 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -32,7 +32,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj index db35047e19..60f118bc93 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.HttpApi.Host/Acme.BookStore.BookManagement.HttpApi.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj index c0eebd425a..d9b39f407e 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.IdentityServer/Acme.BookStore.BookManagement.IdentityServer.csproj @@ -8,7 +8,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj index 0534b56365..1df46016b4 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Host/Acme.BookStore.BookManagement.Web.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj index 9fb034d5fe..04993f9b69 100644 --- a/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj +++ b/samples/BookStore-Modular/modules/book-management/host/Acme.BookStore.BookManagement.Web.Unified/Acme.BookStore.BookManagement.Web.Unified.csproj @@ -10,7 +10,7 @@ - + diff --git a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj index 153b6f38e3..832114ce3b 100644 --- a/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj +++ b/samples/BookStore/src/Acme.BookStore.Web/Acme.BookStore.Web.csproj @@ -23,7 +23,7 @@ - + diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj index 466a7359bc..f00f144407 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj +++ b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemo.Web.csproj @@ -31,7 +31,7 @@ - + diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index 337657a831..47bf7813f8 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index 911593b16a..a22e073228 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj index 5574e33b3b..3b4780b2cd 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 9d2d4c3cae..554555940d 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj index 8d7d8bf135..73479d93ad 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj index 2c01555e87..8ece4fe5f4 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj index 5a9c5375d0..cd5bbc8b01 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj index 09e91582ab..b9dd199a6c 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj index f871ed5983..dc4f6aface 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj @@ -12,7 +12,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index 173d10bbc2..d41d991542 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj index f59176e5af..9c7f66798e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj @@ -10,7 +10,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index e040f9642d..6ff7bde240 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -32,7 +32,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index ecdd1446fa..0bff1f34fc 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -16,7 +16,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 6cf7d25498..db3998cc62 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -32,7 +32,7 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj index 07979b3f63..f041445109 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyCompanyName.MyProjectName.HttpApi.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj index 062dceabaf..2815d81262 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyCompanyName.MyProjectName.IdentityServer.csproj @@ -8,7 +8,7 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index cacefbdb7c..6d6b11231a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -10,7 +10,7 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj index 35fe11e53d..47f8629dde 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyCompanyName.MyProjectName.Web.Unified.csproj @@ -10,7 +10,7 @@ - + From 9aece8dc421cb65a26c11b54f35e0a26ad573f80 Mon Sep 17 00:00:00 2001 From: mperk Date: Thu, 9 Jan 2020 14:44:10 +0300 Subject: [PATCH 08/45] updatable permissionGrant provider key --- .../Volo.Abp.PermissionManagement.sln | 4 ++-- .../PermissionManagement/IPermissionManager.cs | 2 ++ .../Abp/PermissionManagement/PermissionGrant.cs | 2 +- .../Abp/PermissionManagement/PermissionManager.cs | 6 ++++++ ....PermissionManagement.Application.Tests.csproj | 2 +- ....Abp.PermissionManagement.Domain.Tests.csproj} | 0 .../PermissionManager_Tests.cs | 15 +++++++++++++++ 7 files changed, 27 insertions(+), 4 deletions(-) rename modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/{Volo.Abp.PermissionManagement.Tests.csproj => Volo.Abp.PermissionManagement.Domain.Tests.csproj} (100%) diff --git a/modules/permission-management/Volo.Abp.PermissionManagement.sln b/modules/permission-management/Volo.Abp.PermissionManagement.sln index 5812918a3c..16071f9e10 100644 --- a/modules/permission-management/Volo.Abp.PermissionManagement.sln +++ b/modules/permission-management/Volo.Abp.PermissionManagement.sln @@ -19,7 +19,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManageme EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.Web", "src\Volo.Abp.PermissionManagement.Web\Volo.Abp.PermissionManagement.Web.csproj", "{97A386F8-DAE0-4BEA-ADE5-1D57C3336515}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.Tests", "test\Volo.Abp.PermissionManagement.Tests\Volo.Abp.PermissionManagement.Tests.csproj", "{48297098-79D0-413B-939C-6C432142C42D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.Domain.Tests", "test\Volo.Abp.PermissionManagement.Tests\Volo.Abp.PermissionManagement.Domain.Tests.csproj", "{48297098-79D0-413B-939C-6C432142C42D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.TestBase", "test\Volo.Abp.PermissionManagement.TestBase\Volo.Abp.PermissionManagement.TestBase.csproj", "{49259427-CAEB-4FAE-81E4-848F789487EA}" EndProject @@ -33,7 +33,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManageme EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.HttpApi.Client", "src\Volo.Abp.PermissionManagement.HttpApi.Client\Volo.Abp.PermissionManagement.HttpApi.Client.csproj", "{1CD80519-9431-48DB-B0EA-291A73FF9F49}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.PermissionManagement.Application.Tests", "test\Volo.Abp.PermissionManagement.Application.Tests\Volo.Abp.PermissionManagement.Application.Tests.csproj", "{A0F72F5F-3713-4E06-ADB7-15ADFDCB79B1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.PermissionManagement.Application.Tests", "test\Volo.Abp.PermissionManagement.Application.Tests\Volo.Abp.PermissionManagement.Application.Tests.csproj", "{A0F72F5F-3713-4E06-ADB7-15ADFDCB79B1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs index 888f06235e..26310a12fe 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IPermissionManager.cs @@ -13,5 +13,7 @@ namespace Volo.Abp.PermissionManagement Task> GetAllAsync([NotNull] string providerName, [NotNull] string providerKey); Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted); + + Task UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey); } } \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrant.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrant.cs index 7ec99fbe3a..4f951a92cc 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrant.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionGrant.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.PermissionManagement public virtual string ProviderName { get; protected set; } [CanBeNull] - public virtual string ProviderKey { get; protected set; } + public virtual string ProviderKey { get; protected internal set; } protected PermissionGrant() { diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs index d7d1dd70c1..4f7d177802 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs @@ -99,6 +99,12 @@ namespace Volo.Abp.PermissionManagement await provider.SetAsync(permissionName, providerKey, isGranted).ConfigureAwait(false); } + public async Task UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey) + { + permissionGrant.ProviderKey = providerKey; + return await PermissionGrantRepository.UpdateAsync(permissionGrant).ConfigureAwait(false); + } + protected virtual async Task GetInternalAsync(PermissionDefinition permission, string providerName, string providerKey) { var result = new PermissionWithGrantedProviders(permission.Name, false); diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo.Abp.PermissionManagement.Application.Tests.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo.Abp.PermissionManagement.Application.Tests.csproj index 92cd6ddd5d..81e3861ed9 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo.Abp.PermissionManagement.Application.Tests.csproj +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Application.Tests/Volo.Abp.PermissionManagement.Application.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Tests.csproj b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj similarity index 100% rename from modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Tests.csproj rename to modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo.Abp.PermissionManagement.Domain.Tests.csproj diff --git a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs index 6b838a4fc0..66f0de1755 100644 --- a/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs +++ b/modules/permission-management/test/Volo.Abp.PermissionManagement.Tests/Volo/Abp/PermissionManagement/PermissionManager_Tests.cs @@ -104,5 +104,20 @@ namespace Volo.Abp.PermissionManagement true).ConfigureAwait(false)).ConfigureAwait(false); } + [Fact] + public async Task UpdateProviderKey() + { + await _permissionGrantRepository.InsertAsync(new PermissionGrant( + Guid.NewGuid(), + "MyPermission1", + "Test", + "Test") + ).ConfigureAwait(false); + var permissionGrant = await _permissionGrantRepository.FindAsync("MyPermission1", "Test", "Test").ConfigureAwait(false); + permissionGrant.ProviderKey.ShouldBe("Test"); + + await _permissionManager.UpdateProviderKeyAsync(permissionGrant, "NewProviderKey").ConfigureAwait(false); + (await _permissionGrantRepository.FindAsync("MyPermission1", "Test", "NewProviderKey").ConfigureAwait(false)).ShouldNotBeNull(); + } } } From 27c565fc1efde688a7c956480acaf9084563e97e Mon Sep 17 00:00:00 2001 From: mperk Date: Thu, 9 Jan 2020 14:48:20 +0300 Subject: [PATCH 09/45] event permissions update when role update --- .../Volo/Abp/Identity/IdentityRole.cs | 16 +++++ .../Identity/IdentityRoleNameChangedEvent.cs | 8 +++ .../Volo/Abp/Identity/IdentityRoleStore.cs | 2 +- ...ermissionManagement.Domain.Identity.csproj | 1 + .../Identity/RoleUpdateEventHandler.cs | 42 ++++++++++++++ .../Abp/Identity/RoleChangingEvents_Test.cs | 58 +++++++++++++++++++ 6 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleNameChangedEvent.cs create mode 100644 modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs create mode 100644 modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs index 825266e993..dac173719a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs @@ -100,6 +100,22 @@ namespace Volo.Abp.Identity Claims.RemoveAll(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value); } + public virtual void ChangeName(string name) + { + Check.NotNullOrWhiteSpace(name, nameof(name)); + + var oldName = Name; + Name = name; + + AddLocalEvent( + new IdentityRoleNameChangedEvent + { + IdentityRole = this, + OldName = oldName + } + ); + } + public override string ToString() { return $"{base.ToString()}, Name = {Name}"; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleNameChangedEvent.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleNameChangedEvent.cs new file mode 100644 index 0000000000..f14f0a71ed --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleNameChangedEvent.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.Identity +{ + public class IdentityRoleNameChangedEvent + { + public IdentityRole IdentityRole { get; set; } + public string OldName { get; set; } + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs index 1ca46b0830..004fc0c20c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleStore.cs @@ -165,7 +165,7 @@ namespace Volo.Abp.Identity Check.NotNull(role, nameof(role)); - role.Name = roleName; + role.ChangeName(roleName); return Task.CompletedTask; } diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj index ea663ba49b..ee8e336088 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo.Abp.PermissionManagement.Domain.Identity.csproj @@ -16,6 +16,7 @@ + diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs new file mode 100644 index 0000000000..8ee0d4c6d6 --- /dev/null +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs @@ -0,0 +1,42 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.EventBus; +using Volo.Abp.Identity; + +namespace Volo.Abp.PermissionManagement.Identity +{ + public class RoleUpdateEventHandler : + ILocalEventHandler, + ITransientDependency + { + protected IIdentityRoleRepository RoleRepository { get; } + protected IPermissionManager PermissionManager { get; } + protected IPermissionGrantRepository PermissionGrantRepository { get; } + + public RoleUpdateEventHandler( + IIdentityRoleRepository roleRepository, + IPermissionManager permissionManager, + IPermissionGrantRepository permissionGrantRepository) + { + RoleRepository = roleRepository; + PermissionManager = permissionManager; + PermissionGrantRepository = permissionGrantRepository; + } + + public async Task HandleEventAsync(IdentityRoleNameChangedEvent eventData) + { + var role = await RoleRepository.FindAsync(eventData.IdentityRole.Id, false).ConfigureAwait(false); + if (role == null) + { + return; + } + + var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", eventData.OldName).ConfigureAwait(false); + foreach (var permissionGrant in permissionGrantsInRole) + { + await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name).ConfigureAwait(false); + } + } + } +} diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs new file mode 100644 index 0000000000..1a4405c9e4 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/RoleChangingEvents_Test.cs @@ -0,0 +1,58 @@ +using Microsoft.AspNetCore.Identity; +using Shouldly; +using System.Threading.Tasks; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Guids; +using Volo.Abp.PermissionManagement; +using Volo.Abp.Uow; +using Xunit; + +namespace Volo.Abp.Identity +{ + public class RoleChangingEvents_Test : AbpIdentityDomainTestBase + { + protected readonly IIdentityRoleRepository RoleRepository; + protected readonly IPermissionGrantRepository PermissionGrantRepository; + protected readonly IdentityRoleManager RoleManager; + protected readonly ILookupNormalizer LookupNormalizer; + protected readonly IGuidGenerator GuidGenerator; + protected readonly IUnitOfWorkManager UowManager; + + public RoleChangingEvents_Test() + { + RoleRepository = GetRequiredService(); ; + PermissionGrantRepository = GetRequiredService(); ; + RoleManager = GetRequiredService(); ; + LookupNormalizer = GetRequiredService(); ; + GuidGenerator = GetRequiredService(); + UowManager = GetRequiredService(); + } + + [Fact] + public async Task Role_Update_Event_Test() + { + var role = await RoleRepository + .FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator")) + .ConfigureAwait(false); + + var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name).ConfigureAwait(false); + permissionGrantsInRole.ShouldNotBeNull(); + permissionGrantsInRole.Count.ShouldBeGreaterThan(0); + var count = permissionGrantsInRole.Count; + + using (var uow = UowManager.Begin()) + { + var identityResult = await RoleManager.SetRoleNameAsync(role, "TestModerator").ConfigureAwait(false); + identityResult.Succeeded.ShouldBeTrue(); + var xx = await RoleRepository.UpdateAsync(role).ConfigureAwait(false); + await uow.CompleteAsync().ConfigureAwait(false); + } + + role = await RoleRepository.GetAsync(role.Id).ConfigureAwait(false); + role.Name.ShouldBe("TestModerator"); + + permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name).ConfigureAwait(false); + permissionGrantsInRole.Count.ShouldBe(count); + } + } +} From f12b488c3fb4bda59225b37e4d2bf2173dbce5b9 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 10 Jan 2020 09:57:57 +0300 Subject: [PATCH 10/45] increase Password max length to 128 --- .../Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs | 7 ++++--- .../Volo/Abp/Identity/IdentityUserConsts.cs | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs index 5abb564b09..40b819e0e1 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Register.cshtml.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Account.Settings; +using Volo.Abp.Identity; using Volo.Abp.Settings; using Volo.Abp.Uow; using IdentityUser = Volo.Abp.Identity.IdentityUser; @@ -55,16 +56,16 @@ namespace Volo.Abp.Account.Web.Pages.Account public class PostInput { [Required] - [StringLength(32)] + [StringLength(IdentityUserConsts.MaxUserNameLength)] public string UserName { get; set; } [Required] [EmailAddress] - [StringLength(255)] + [StringLength(IdentityUserConsts.MaxEmailLength)] public string EmailAddress { get; set; } [Required] - [StringLength(32)] + [StringLength(IdentityUserConsts.MaxPasswordLength)] [DataType(DataType.Password)] public string Password { get; set; } } diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserConsts.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserConsts.cs index f56a59e967..ef2cc57ef4 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserConsts.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserConsts.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.Identity public const int MaxPhoneNumberLength = AbpUserConsts.MaxPhoneNumberLength; - public const int MaxPasswordLength = 32; + public const int MaxPasswordLength = 128; public const int MaxPasswordHashLength = 256; From 52fc8ad3323582ce36338d7c82d358784b6d9a6e Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 10 Jan 2020 09:58:39 +0300 Subject: [PATCH 11/45] re-created application template migration --- ...9_Initial.Designer.cs => 20200110065439_Initial.Designer.cs} | 2 +- .../{20200106080719_Initial.cs => 20200110065439_Initial.cs} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/{20200106080719_Initial.Designer.cs => 20200110065439_Initial.Designer.cs} (99%) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/{20200106080719_Initial.cs => 20200110065439_Initial.cs} (100%) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.Designer.cs similarity index 99% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.Designer.cs index 252d7d8c3d..9a4a1a2023 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.Designer.cs @@ -10,7 +10,7 @@ using MyCompanyName.MyProjectName.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameMigrationsDbContext))] - [Migration("20200106080719_Initial")] + [Migration("20200110065439_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.cs similarity index 100% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.cs From 3715d8c43b27700c7b7d0388555e046724e99aef Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 10 Jan 2020 10:06:44 +0300 Subject: [PATCH 12/45] Revert "re-created application template migration" This reverts commit 52fc8ad3323582ce36338d7c82d358784b6d9a6e. --- ...9_Initial.Designer.cs => 20200106080719_Initial.Designer.cs} | 2 +- .../{20200110065439_Initial.cs => 20200106080719_Initial.cs} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/{20200110065439_Initial.Designer.cs => 20200106080719_Initial.Designer.cs} (99%) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/{20200110065439_Initial.cs => 20200106080719_Initial.cs} (100%) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.Designer.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs similarity index 99% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.Designer.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs index 9a4a1a2023..252d7d8c3d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.Designer.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.Designer.cs @@ -10,7 +10,7 @@ using MyCompanyName.MyProjectName.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameMigrationsDbContext))] - [Migration("20200110065439_Initial")] + [Migration("20200106080719_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.cs similarity index 100% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200110065439_Initial.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/Migrations/20200106080719_Initial.cs From 6a1cf21cd214328e0283ee53eed35b7118b7e41e Mon Sep 17 00:00:00 2001 From: mperk Date: Fri, 10 Jan 2020 11:02:48 +0300 Subject: [PATCH 13/45] replace "R" with RolePermissionValueProvider.ProviderName --- .../PermissionManagement/Identity/RoleUpdateEventHandler.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs index 8ee0d4c6d6..54e8bec3b1 100644 --- a/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs +++ b/modules/identity/src/Volo.Abp.PermissionManagement.Domain.Identity/Volo/Abp/PermissionManagement/Identity/RoleUpdateEventHandler.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities.Events; using Volo.Abp.EventBus; @@ -32,7 +33,7 @@ namespace Volo.Abp.PermissionManagement.Identity return; } - var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", eventData.OldName).ConfigureAwait(false); + var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, eventData.OldName).ConfigureAwait(false); foreach (var permissionGrant in permissionGrantsInRole) { await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name).ConfigureAwait(false); From 22f514d1d6989f2ecc0fae65f20b07828299248a Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 17:12:21 +0300 Subject: [PATCH 14/45] fix(theme-shared): correct toast-container component z-index --- .../components/toast-container/toast-container.component.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss index facbd8b838..ee8289dc56 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.scss @@ -6,6 +6,7 @@ justify-content: flex-end; min-width: 350px; min-height: 80px; + z-index: 1900; &.new-on-top { flex-direction: column-reverse; } From d2fe08ba670b32cb0d707805ef333d215d9c63f6 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Fri, 10 Jan 2020 17:12:50 +0300 Subject: [PATCH 15/45] fix(theme-shared): change padding and width of the confirmation dialog --- .../lib/components/confirmation/confirmation.component.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss index 04bc4d6f84..752bb22eee 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.scss @@ -26,7 +26,7 @@ padding: 0; border: none; border-radius: 10px; - min-width: 450px; + width: 450px; min-height: 300px; background-color: #fff; box-shadow: 0 0 10px -5px rgba(#000, 0.5); @@ -78,7 +78,7 @@ .message { display: block; margin: 10px auto; - padding: 0; + padding: 20px; color: #777; font-size: 16px; font-weight: 400; From beb8cc113f3a171cfcabfce2ae3c37e5aad24971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 17:57:45 +0300 Subject: [PATCH 16/45] Remove unused namespace. --- .../Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs index 963459ab58..ae047fa30a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/AbpValidationActionFilter.cs @@ -1,7 +1,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.Filters; -using Volo.Abp.Aspects; using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Mvc.Validation From e231f74db141c237013c5c2e84b960653fad879a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jan 2020 19:56:57 +0300 Subject: [PATCH 17/45] Update readmes of blogging and docs modules --- modules/blogging/README.md | 9 ++++++++- modules/docs/README.md | 20 +++++++++++--------- modules/docs/screenshot.png | Bin 120637 -> 0 bytes modules/docs/screenshot2.png | Bin 0 -> 266787 bytes 4 files changed, 19 insertions(+), 10 deletions(-) delete mode 100644 modules/docs/screenshot.png create mode 100644 modules/docs/screenshot2.png diff --git a/modules/blogging/README.md b/modules/blogging/README.md index 9eda941757..716713666f 100644 --- a/modules/blogging/README.md +++ b/modules/blogging/README.md @@ -1,3 +1,10 @@ # Blogging Module -This module is used for ABP blog: https://abp.io/blog/abp/ +This module adds a simple blog to your ABP application; + +* Allows to create multiple blogs in a single application. +* Supports the Markdown format. +* Allows to write comment for a post. +* Allows to assign tags to the blog posts. + +See the [blog.abp.io](https://blog.abp.io/) website as a live example of the blogging module. \ No newline at end of file diff --git a/modules/docs/README.md b/modules/docs/README.md index ee4e33a785..99117426d3 100644 --- a/modules/docs/README.md +++ b/modules/docs/README.md @@ -1,13 +1,15 @@ # Docs Module -This module is used to create technical documentation web sites. [abp.io](https://abp.io) web site uses this module for its documentation. +This module is used to create technical documentation web sites; -### Screenshot +* Built-in **GitHub integration**: Directly write and manage documents on GitHub. +* **Versioning** support directly integrated to GitHub releases. +* Supports **multi-language** (with fallback support to the default language). +* Supports the **Markdown** and HTML formats. +* Provides a **navigation** and an **outline** section. +* Allows to host **multiple projects** documentation in a single application. +* Links to the file on GitHub, so anyone can easily contribute by clicking to the **Edit link**. +* In addition to the GitHub source, allows to simply use a folder as the documentation source. -![screenshot](screenshot.png) +ABP Framework uses this module to host its documentation. See [docs.abp.io](https://docs.abp.io/). A screenshot from the ABP documentation: -### Main Features - -* Retrieves documents from a Github repository. -* Supports Markdown document formatting. -* Supports versioning (integrated to Github releases). -* Supports multiple projects. +![screenshot](screenshot2.png) diff --git a/modules/docs/screenshot.png b/modules/docs/screenshot.png deleted file mode 100644 index 55ff411f0c3821e3b5ae0c906fa02203b29321ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120637 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
  • ;{9x4|sZH1>?Up5()pDuK*OFiS*@GQ9=*?#n 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

      ilh;)MV3H4CE4oc4+?u`! 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

      >2%2r69y;J6TF%taZAI{TH?V7PWD9pf^ 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 LYO>`o%|8Awq5?Lg diff --git a/modules/docs/screenshot2.png b/modules/docs/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..0dcdf921b9407668747a9ae68c7be456d6f560f0 GIT binary patch literal 266787 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� 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

      8o1 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

      J}(TkA>&Au}7HtaH5P?TUBK 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¨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%0D`YjVlIC_<-BU^oI%B4AGCXrv9 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

      }76@w!#Xh8C~f&!j5G~*ewjd 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 F{{#Q#xo!Xe literal 0 HcmV?d00001 From f98913202fd109423c88796aa4ce242bcdbf0134 Mon Sep 17 00:00:00 2001 From: YinChang Date: Sat, 11 Jan 2020 18:30:06 +0800 Subject: [PATCH 18/45] samples/BookStore fix #2572 --- .../Acme.BookStore.Application/BookStoreApplicationModule.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/samples/BookStore/src/Acme.BookStore.Application/BookStoreApplicationModule.cs b/samples/BookStore/src/Acme.BookStore.Application/BookStoreApplicationModule.cs index a97917f774..80488be0e8 100644 --- a/samples/BookStore/src/Acme.BookStore.Application/BookStoreApplicationModule.cs +++ b/samples/BookStore/src/Acme.BookStore.Application/BookStoreApplicationModule.cs @@ -1,4 +1,5 @@ -using Volo.Abp.AutoMapper; +using Volo.Abp.Account; +using Volo.Abp.AutoMapper; using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; using Volo.Abp.Modularity; @@ -10,6 +11,7 @@ namespace Acme.BookStore [DependsOn( typeof(BookStoreDomainModule), typeof(BookStoreApplicationContractsModule), + typeof(AbpAccountApplicationModule), typeof(AbpIdentityApplicationModule), typeof(AbpPermissionManagementApplicationModule), typeof(AbpTenantManagementApplicationModule), From 40d0586d49dc6419eac820611b30e9afeec6b569 Mon Sep 17 00:00:00 2001 From: RayMMond Date: Mon, 13 Jan 2020 11:30:08 +0800 Subject: [PATCH 19/45] correct chinese localization --- .../Volo/Abp/Validation/Localization/zh-Hans.json | 4 ++-- .../Volo/Abp/Account/Localization/Resources/zh-Hans.json | 2 +- .../Volo/Abp/Identity/Localization/zh-Hans.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json index ac0c014967..282423a44a 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json @@ -8,7 +8,7 @@ "The {0} field only accepts files with the following extensions: {1}": "{0}字段只允许以下扩展名的文件: {1}", "The field {0} must be a string or array type with a maximum length of '{1}'.": "字段{0}必须是最大长度为'{1}'的字符串或数组.", "The field {0} must be a string or array type with a minimum length of '{1}'.": "字段{0}必须是最小长度为'{1}'的字符串或数组.", - "The {0} field is not a valid phone number.": "字段{0}不是有效的身份证号码.", + "The {0} field is not a valid phone number.": "字段{0}不是有效的手机号码.", "The field {0} must be between {1} and {2}.": "字段{0}值必须在{1}和{2}范围内.", "The field {0} must match the regular expression '{1}'.": "字段{0}必须匹配正则表达式'{1}'.", "The {0} field is required.": "字段{0}不可为空.", @@ -22,7 +22,7 @@ "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "字段只允许以下扩展名的文件: {0}", "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "字段必须是最大长度为'{0}'的字符串或数组.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "字段必须是最小长度为'{0}'的字符串或数组.", - "ThisFieldIsNotAValidPhoneNumber.": "字段不是有效的身份证号码.", + "ThisFieldIsNotAValidPhoneNumber.": "字段不是有效的手机号码.", "ThisFieldMustBeBetween{0}And{1}": "字段值必须在{0}和{1}范围内.", "ThisFieldMustMatchTheRegularExpression{0}": "字段必须匹配正则表达式'{0}'.", "ThisFieldIsRequired.": "字段不可为空.", diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json index 391dee0531..c778a28dd6 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json @@ -29,7 +29,7 @@ "DisplayName:Surname": "姓", "DisplayName:Password": "密码", "DisplayName:EmailAddress": "电子邮件地址", - "DisplayName:PhoneNumber": "电话号码", + "DisplayName:PhoneNumber": "手机号码", "PersonalSettings": "个人设置", "PersonalSettingsSaved": "个人设置已保存", "PasswordChanged": "修改密码", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json index f57029eb9e..4908f170fa 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json @@ -82,7 +82,7 @@ "DisplayName:Abp.Identity.Lockout.LockoutDuration": "锁定时间(秒)", "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "最大失败访问尝试次数", "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "要求验证的电子邮箱", - "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "要求验证的电话号码", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "要求验证的手机号码", "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "启用用户名更新", "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "启用电子邮箱更新", "Description:Abp.Identity.Password.RequiredLength": "密码的最小长度.", @@ -95,7 +95,7 @@ "Description:Abp.Identity.Lockout.LockoutDuration": "当锁定发生时用户被的锁定的时间(秒).", "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "如果启用锁定, 当用户被锁定前失败的访问尝试次数.", "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "登录时是否需要验证的电子邮箱.", - "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "登录时是否需要验证的电话号码.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "登录时是否需要验证的手机号码.", "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "是否允许用户更新用户名.", "Description:Abp.Identity.User.IsEmailUpdateEnabled": "是否允许用户更新电子邮箱." From f58a127189d024eca9772a887e7305702c4806af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 11:00:44 +0300 Subject: [PATCH 20/45] Create Blogging.md --- docs/en/Modules/Blogging.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/en/Modules/Blogging.md diff --git a/docs/en/Modules/Blogging.md b/docs/en/Modules/Blogging.md new file mode 100644 index 0000000000..0d2ab35c21 --- /dev/null +++ b/docs/en/Modules/Blogging.md @@ -0,0 +1,3 @@ +# IdentityServer Module + +TODO \ No newline at end of file From da4c91cabd5650646384cb8256d1166da96646e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:10:15 +0300 Subject: [PATCH 21/45] #2597 Rename AbpSerilogModule to AbpAspNetCoreSerilogModule to bettern align the module name and the package name. --- .../Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs | 2 +- .../Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 2 +- .../MyProjectNameWebModule.cs | 2 +- .../MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 2 +- .../MyProjectNameWebHostModule.cs | 2 +- .../MyProjectNameWebUnifiedModule.cs | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs index 5012d54e30..2b718fcb84 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.AspNetCore.Serilog typeof(AbpMultiTenancyModule), typeof(AbpAspNetCoreModule) )] - public class AbpSerilogModule : AbpModule + public class AbpAspNetCoreSerilogModule : AbpModule { } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs index 64ac0d76bc..736539b5db 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs @@ -13,7 +13,7 @@ namespace Volo.Abp.AspNetCore.App typeof(AbpAspNetCoreTestBaseModule), typeof(AbpAspNetCoreMvcModule), typeof(AbpAspNetCoreMultiTenancyModule), - typeof(AbpSerilogModule), + typeof(AbpAspNetCoreSerilogModule), typeof(AbpAutofacModule) )] public class AbpSerilogTestModule : AbpModule diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 3db35cd20b..81745602d9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -30,7 +30,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAspNetCoreMvcUiMultiTenancyModule), typeof(MyProjectNameApplicationModule), typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 73a9d01be6..769208b664 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -36,7 +36,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAccountWebIdentityServerModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 117386e588..47cc80fcca 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -37,7 +37,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAccountApplicationModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(MyProjectNameEntityFrameworkCoreDbMigrationsModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameIdentityServerModule : AbpModule { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs index c30a3b5d88..f9b96fe5de 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs @@ -51,7 +51,7 @@ namespace MyCompanyName.MyProjectName.Web typeof(AbpHttpClientIdentityModelModule), typeof(AbpIdentityWebModule), typeof(AbpTenantManagementWebModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameWebModule : AbpModule { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index cd27c9ece2..43da5d0a49 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -49,7 +49,7 @@ namespace MyCompanyName.MyProjectName.Web typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpTenantManagementWebModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameWebModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 972ccc9708..9bf05a70b7 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -41,7 +41,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpAuditLoggingEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameHttpApiHostModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 7205fdf225..51e8935288 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -68,7 +68,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementHttpApiModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(MyProjectNameApplicationContractsModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameIdentityServerModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index cabb843736..8dc21d82c1 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -57,7 +57,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementHttpApiClientModule), typeof(AbpFeatureManagementHttpApiClientModule), typeof(AbpPermissionManagementHttpApiClientModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameWebHostModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index ea653ca4a1..6040d7665f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -58,7 +58,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), - typeof(AbpSerilogModule) + typeof(AbpAspNetCoreSerilogModule) )] public class MyProjectNameWebUnifiedModule : AbpModule { From c88cd2054e4b4aebafe69a97114a71d4cad9570a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:20:18 +0300 Subject: [PATCH 22/45] #2597 Refactor AbpAspNetCoreSerilogOptions --- ...CoreSerilogApplicationBuilderExtensions.cs | 2 +- .../AbpAspNetCoreSerilogEnrichersOptions.cs | 21 ------------- ...odule.cs => AbpAspNetCoreSerilogModule.cs} | 1 - .../Serilog/AbpAspNetCoreSerilogOptions.cs | 30 +++++++++++++++++++ .../Serilog/AbpSerilogEnrichersConsts.cs | 10 ------- ...gMiddleware.cs => AbpSerilogMiddleware.cs} | 16 +++++----- .../Serilog/Serilog_Enrichers_Tests.cs | 16 +++++----- 7 files changed, 47 insertions(+), 49 deletions(-) delete mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs rename framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/{AbpSerilogModule.cs => AbpAspNetCoreSerilogModule.cs} (90%) create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogOptions.cs delete mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs rename framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/{SerilogMiddleware.cs => AbpSerilogMiddleware.cs} (71%) diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs index f9093ffaac..b7a02caa5c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs @@ -7,7 +7,7 @@ namespace Microsoft.AspNetCore.Builder public static IApplicationBuilder UseSerilogEnrichers(this IApplicationBuilder app) { return app - .UseMiddleware(); + .UseMiddleware(); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs deleted file mode 100644 index 06453cb61f..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogEnrichersOptions.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace Volo.Abp.AspNetCore.Serilog -{ - public class AbpAspNetCoreSerilogEnrichersOptions - { - public string TenantIdEnricherPropertyName { get; set; } - - public string UserIdEnricherPropertyName { get; set; } - - public string ClientIdEnricherPropertyName { get; set; } - - public string CorrelationIdPropertyName { get; set; } - - public AbpAspNetCoreSerilogEnrichersOptions() - { - TenantIdEnricherPropertyName = AbpSerilogEnrichersConsts.TenantIdEnricherPropertyName; - UserIdEnricherPropertyName = AbpSerilogEnrichersConsts.UserIdEnricherPropertyName; - ClientIdEnricherPropertyName = AbpSerilogEnrichersConsts.ClientIdEnricherPropertyName; - CorrelationIdPropertyName = AbpSerilogEnrichersConsts.CorrelationIdPropertyName; - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogModule.cs similarity index 90% rename from framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs rename to framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogModule.cs index 2b718fcb84..dc8e7c1ce4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogModule.cs @@ -1,4 +1,3 @@ -using Volo.Abp.AspNetCore; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogOptions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogOptions.cs new file mode 100644 index 0000000000..84f212ff4a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpAspNetCoreSerilogOptions.cs @@ -0,0 +1,30 @@ +namespace Volo.Abp.AspNetCore.Serilog +{ + public class AbpAspNetCoreSerilogOptions + { + public AllEnricherPropertyNames EnricherPropertyNames { get; } = new AllEnricherPropertyNames(); + + public class AllEnricherPropertyNames + { + ///

      + /// Default value: "TenantId". + /// + public string TenantId { get; set; } = "TenantId"; + + /// + /// Default value: "UserId". + /// + public string UserId { get; set; } = "UserId"; + + /// + /// Default value: "ClientId". + /// + public string ClientId { get; set; } = "ClientId"; + + /// + /// Default value: "CorrelationId". + /// + public string CorrelationId { get; set; } = "CorrelationId"; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs deleted file mode 100644 index bf2832b553..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogEnrichersConsts.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Volo.Abp.AspNetCore.Serilog -{ - public class AbpSerilogEnrichersConsts - { - public const string TenantIdEnricherPropertyName = "TenantId"; - public const string UserIdEnricherPropertyName = "UserId"; - public const string ClientIdEnricherPropertyName = "ClientId"; - public const string CorrelationIdPropertyName = "CorrelationId"; - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs similarity index 71% rename from framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs rename to framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs index e03bcd5342..8a8f032766 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/SerilogMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo/Abp/AspNetCore/Serilog/AbpSerilogMiddleware.cs @@ -13,20 +13,20 @@ using Volo.Abp.Users; namespace Volo.Abp.AspNetCore.Serilog { - public class SerilogMiddleware : IMiddleware, ITransientDependency + public class AbpSerilogMiddleware : IMiddleware, ITransientDependency { private readonly ICurrentClient _currentClient; private readonly ICurrentTenant _currentTenant; private readonly ICurrentUser _currentUser; private readonly ICorrelationIdProvider _correlationIdProvider; - private readonly AbpAspNetCoreSerilogEnrichersOptions _options; + private readonly AbpAspNetCoreSerilogOptions _options; - public SerilogMiddleware( + public AbpSerilogMiddleware( ICurrentTenant currentTenant, ICurrentUser currentUser, ICurrentClient currentClient, ICorrelationIdProvider correlationIdProvider, - IOptions options) + IOptions options) { _currentTenant = currentTenant; _currentUser = currentUser; @@ -41,23 +41,23 @@ namespace Volo.Abp.AspNetCore.Serilog if (_currentTenant?.Id != null) { - enrichers.Add(new PropertyEnricher(_options.TenantIdEnricherPropertyName, _currentTenant.Id)); + enrichers.Add(new PropertyEnricher(_options.EnricherPropertyNames.TenantId, _currentTenant.Id)); } if (_currentUser?.Id != null) { - enrichers.Add(new PropertyEnricher(_options.UserIdEnricherPropertyName, _currentUser.Id)); + enrichers.Add(new PropertyEnricher(_options.EnricherPropertyNames.UserId, _currentUser.Id)); } if (_currentClient?.Id != null) { - enrichers.Add(new PropertyEnricher(_options.ClientIdEnricherPropertyName, _currentClient.Id)); + enrichers.Add(new PropertyEnricher(_options.EnricherPropertyNames.ClientId, _currentClient.Id)); } var correlationId = _correlationIdProvider.Get(); if (!string.IsNullOrEmpty(correlationId)) { - enrichers.Add(new PropertyEnricher(_options.CorrelationIdPropertyName, correlationId)); + enrichers.Add(new PropertyEnricher(_options.EnricherPropertyNames.CorrelationId, correlationId)); } using (LogContext.Push(enrichers.ToArray())) diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs index bc45eb7c51..0a7a189a35 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/Serilog/Serilog_Enrichers_Tests.cs @@ -22,14 +22,14 @@ namespace Volo.Abp.AspNetCore.Serilog private readonly string _testTenantName = "acme"; private readonly AbpAspNetCoreMultiTenancyOptions _tenancyOptions; - private readonly AbpAspNetCoreSerilogEnrichersOptions _serilogEnrichersOptions; + private readonly AbpAspNetCoreSerilogOptions _serilogOptions; private readonly ILogger _logger; public Serilog_Enrichers_Tests() { _tenancyOptions = ServiceProvider.GetRequiredService>().Value; - _serilogEnrichersOptions = - ServiceProvider.GetRequiredService>().Value; + _serilogOptions = + ServiceProvider.GetRequiredService>().Value; _logger = ServiceProvider.GetRequiredService>(); } @@ -56,7 +56,7 @@ namespace Volo.Abp.AspNetCore.Serilog var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); executedLogEvent.ShouldNotBeNull(); - executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.TenantIdEnricherPropertyName) + executedLogEvent.Properties.ContainsKey(_serilogOptions.EnricherPropertyNames.TenantId) .ShouldBe(false); } @@ -71,9 +71,9 @@ namespace Volo.Abp.AspNetCore.Serilog var executedLogEvent = GetLogEvent(ExecutedEndpointLogEventText); executedLogEvent.ShouldNotBeNull(); - executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.TenantIdEnricherPropertyName) + executedLogEvent.Properties.ContainsKey(_serilogOptions.EnricherPropertyNames.TenantId) .ShouldBe(true); - ((ScalarValue) executedLogEvent.Properties[_serilogEnrichersOptions.TenantIdEnricherPropertyName]).Value + ((ScalarValue) executedLogEvent.Properties[_serilogOptions.EnricherPropertyNames.TenantId]).Value .ShouldBe(_testTenantId); } @@ -87,10 +87,10 @@ namespace Volo.Abp.AspNetCore.Serilog executedLogEvent.ShouldNotBeNull(); - executedLogEvent.Properties.ContainsKey(_serilogEnrichersOptions.CorrelationIdPropertyName) + executedLogEvent.Properties.ContainsKey(_serilogOptions.EnricherPropertyNames.CorrelationId) .ShouldNotBeNull(); - ((ScalarValue) executedLogEvent.Properties[_serilogEnrichersOptions.CorrelationIdPropertyName]).Value + ((ScalarValue) executedLogEvent.Properties[_serilogOptions.EnricherPropertyNames.CorrelationId]).Value .ShouldBe(result); } } From 32407660da28efc4b081f04f45864dbbe00068f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:20:40 +0300 Subject: [PATCH 23/45] Create launchSettings.json --- .../Properties/launchSettings.json | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json new file mode 100644 index 0000000000..cb1bd6546c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:61851/", + "sslPort": 44301 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Volo.Abp.AspNetCore.Serilog": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:5001;http://localhost:5000" + } + } +} \ No newline at end of file From a8e8cf26f129d08c48ce7639c37ae11b0885a98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:24:38 +0300 Subject: [PATCH 24/45] #2597 Rename UseSerilogEnrichers to UseAbpSerilogEnrichers --- .../Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs | 2 +- .../Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 2 +- .../MyProjectNameWebModule.cs | 2 +- .../MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs | 2 +- .../MyProjectNameHttpApiHostModule.cs | 2 +- .../MyProjectNameIdentityServerModule.cs | 2 +- .../MyProjectNameWebHostModule.cs | 2 +- .../MyProjectNameWebUnifiedModule.cs | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs index b7a02caa5c..cf15367e15 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Microsoft/AspNetCore/Builder/AbpAspNetCoreSerilogApplicationBuilderExtensions.cs @@ -4,7 +4,7 @@ namespace Microsoft.AspNetCore.Builder { public static class AbpAspNetCoreSerilogApplicationBuilderExtensions { - public static IApplicationBuilder UseSerilogEnrichers(this IApplicationBuilder app) + public static IApplicationBuilder UseAbpSerilogEnrichers(this IApplicationBuilder app) { return app .UseMiddleware(); diff --git a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs index 736539b5db..557288cd7d 100644 --- a/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Serilog.Tests/Volo/Abp/AspNetCore/App/AbpSerilogTestModule.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.AspNetCore.App app.UseAuthorization(); app.UseMultiTenancy(); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 81745602d9..401c3641fc 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -180,7 +180,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 769208b664..beeca41292 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -174,7 +174,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 47cc80fcca..1dfe7f56eb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -151,7 +151,7 @@ namespace MyCompanyName.MyProjectName app.UseAuthorization(); app.UseAbpRequestLocalization(); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs index f9b96fe5de..d2b050644f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebModule.cs @@ -243,7 +243,7 @@ namespace MyCompanyName.MyProjectName.Web }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 43da5d0a49..697abb9ce2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -218,7 +218,7 @@ namespace MyCompanyName.MyProjectName.Web options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 9bf05a70b7..8ebec4ad9b 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -168,7 +168,7 @@ namespace MyCompanyName.MyProjectName options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 51e8935288..4be099efaa 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -191,7 +191,7 @@ namespace MyCompanyName.MyProjectName options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); SeedData(context); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index 8dc21d82c1..41fb8fc7f2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -251,7 +251,7 @@ namespace MyCompanyName.MyProjectName }); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index 6040d7665f..aa253e89d3 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -139,7 +139,7 @@ namespace MyCompanyName.MyProjectName app.UseAbpRequestLocalization(); app.UseAuditing(); - app.UseSerilogEnrichers(); + app.UseAbpSerilogEnrichers(); app.UseMvcWithDefaultRouteAndArea(); using (var scope = context.ServiceProvider.CreateScope()) From fd123ebde4a9f95fa66c41a192bcf05c8d808cf4 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 13 Jan 2020 13:32:22 +0300 Subject: [PATCH 25/45] fix: convert imports as relative --- .../core/src/lib/actions/replaceable-components.actions.ts | 3 +++ .../src/lib/components/confirmation/confirmation.component.ts | 3 ++- .../components/toast-container/toast-container.component.html | 2 +- .../components/toast-container/toast-container.component.ts | 4 ++-- .../theme-shared/src/lib/components/toast/toast.component.ts | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts b/npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts index e611459960..3b948cf63d 100644 --- a/npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts +++ b/npm/ng-packs/packages/core/src/lib/actions/replaceable-components.actions.ts @@ -1,5 +1,8 @@ import { ReplaceableComponents } from '../models/replaceable-components'; +/** + * @see usage: https://github.com/abpframework/abp/pull/2522#issue-358333183 + */ export class AddReplaceableComponent { static readonly type = '[ReplaceableComponents] Add'; constructor(public payload: ReplaceableComponents.ReplaceableComponent) {} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts index ad052a2772..afdb024888 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/confirmation/confirmation.component.ts @@ -1,7 +1,8 @@ import { Component } from '@angular/core'; import { ConfirmationService } from '../../services/confirmation.service'; -import { Confirmation, Toaster } from '../../models'; +import { Confirmation } from '../../models/confirmation'; import { LocalizationService } from '@abp/ng.core'; +import { Toaster } from '../../models/toaster'; @Component({ selector: 'abp-confirmation', diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html index c3529e99ff..88d45ff04b 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.html @@ -5,7 +5,7 @@ [style.bottom]="bottom || 'auto'" [style.left]="left || 'auto'" [style.display]="toasts.length ? 'flex' : 'none'" - [@toastInOut]="toasts.length - 1 || 0" + [@toastInOut]="toasts.length" > diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts index 72483622b6..124dcc5185 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast-container/toast-container.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; -import { Toaster } from '../../models'; -import { toastInOut } from '../../animations'; +import { Toaster } from '../../models/toaster'; +import { toastInOut } from '../../animations/toast.animations'; import { ToasterService } from '../../services/toaster.service'; @Component({ diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index 6cda67167b..b4465934b6 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; -import { Toaster } from '../../models'; +import { Toaster } from '../../models/toaster'; import { ToasterService } from '../../services/toaster.service'; import { LocalizationService } from '@abp/ng.core'; import snq from 'snq'; From 407ad749bb735eb9b6cc1ef6dd310253b9680883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:43:07 +0300 Subject: [PATCH 26/45] Upgrade ng package versions --- npm/ng-packs/lerna.version.json | 6 ++++-- npm/ng-packs/packages/account-config/package.json | 2 +- npm/ng-packs/packages/account/package.json | 6 +++--- npm/ng-packs/packages/core/package.json | 2 +- npm/ng-packs/packages/feature-management/package.json | 4 ++-- npm/ng-packs/packages/identity-config/package.json | 2 +- npm/ng-packs/packages/identity/package.json | 8 ++++---- npm/ng-packs/packages/permission-management/package.json | 4 ++-- .../packages/setting-management-config/package.json | 2 +- npm/ng-packs/packages/setting-management/package.json | 6 +++--- .../packages/tenant-management-config/package.json | 2 +- npm/ng-packs/packages/tenant-management/package.json | 8 ++++---- npm/ng-packs/packages/theme-basic/package.json | 4 ++-- npm/ng-packs/packages/theme-shared/package.json | 4 ++-- 14 files changed, 31 insertions(+), 29 deletions(-) diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index 1a9787d177..a006bfaac7 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,7 @@ { - "version": "1.1.1", - "packages": ["packages/*"], + "version": "2.0.0", + "packages": [ + "packages/*" + ], "npmClient": "yarn" } diff --git a/npm/ng-packs/packages/account-config/package.json b/npm/ng-packs/packages/account-config/package.json index aeb8d2b697..931ce1bdfe 100644 --- a/npm/ng-packs/packages/account-config/package.json +++ b/npm/ng-packs/packages/account-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.account.config", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 88f866d5a4..fc78d14d38 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.config": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.account.config": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 10063989b5..ecf9c3f2ba 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.core", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 38cd5ffa9c..511973074a 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/identity-config/package.json b/npm/ng-packs/packages/identity-config/package.json index c4a75d9fec..42916e4b08 100644 --- a/npm/ng-packs/packages/identity-config/package.json +++ b/npm/ng-packs/packages/identity-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.identity.config", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 0bebdd32b8..d2a3c7559c 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.identity", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.identity.config": "^1.1.1", - "@abp/ng.permission-management": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.identity.config": "^2.0.0", + "@abp/ng.permission-management": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index cc7fdddf2f..462d3eda7f 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/setting-management-config/package.json b/npm/ng-packs/packages/setting-management-config/package.json index 5f1606f414..6e8c0e93b1 100644 --- a/npm/ng-packs/packages/setting-management-config/package.json +++ b/npm/ng-packs/packages/setting-management-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.setting-management.config", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 6144b81903..32d5c8b0df 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.setting-management", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.setting-management.config": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.setting-management.config": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/tenant-management-config/package.json b/npm/ng-packs/packages/tenant-management-config/package.json index 9bbc6c48c7..729faea592 100644 --- a/npm/ng-packs/packages/tenant-management-config/package.json +++ b/npm/ng-packs/packages/tenant-management-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.tenant-management.config", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 0467507227..e73112a7fc 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.tenant-management", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "^1.1.1", - "@abp/ng.tenant-management.config": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.feature-management": "^2.0.0", + "@abp/ng.tenant-management.config": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 079b52ed22..d397fc5e21 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.basic", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^1.1.1" + "@abp/ng.theme.shared": "^2.0.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 999190ec73..edfdf23f66 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "1.1.1", + "version": "2.0.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "^1.1.1", + "@abp/ng.core": "^2.0.0", "@angular/cdk": "^8.2.3", "@fortawesome/fontawesome-free": "^5.11.2", "@ng-bootstrap/ng-bootstrap": "^5.1.4", From 8db15a81cb951ed8fe1cef72bee2355c3d65664c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 13:47:24 +0300 Subject: [PATCH 27/45] Increased version of the npm packages and published all. --- npm/lerna.json | 2 +- npm/ng-packs/scripts/package-lock.json | 1491 +++++++++++++++++ npm/packs/anchor-js/package.json | 6 +- .../package.json | 6 +- .../package.json | 32 +- npm/packs/aspnetcore.mvc.ui/package.json | 4 +- npm/packs/blogging/package.json | 10 +- npm/packs/bootstrap-datepicker/package.json | 4 +- npm/packs/bootstrap/package.json | 6 +- npm/packs/chart.js/package.json | 4 +- npm/packs/clipboard/package.json | 6 +- npm/packs/codemirror/package.json | 6 +- npm/packs/core/package.json | 4 +- npm/packs/datatables.net-bs4/package.json | 6 +- npm/packs/datatables.net/package.json | 6 +- npm/packs/docs/package.json | 14 +- npm/packs/flag-icon-css/package.json | 4 +- npm/packs/font-awesome/package.json | 6 +- npm/packs/highlight.js/package.json | 6 +- npm/packs/jquery-form/package.json | 6 +- .../package.json | 6 +- npm/packs/jquery-validation/package.json | 6 +- npm/packs/jquery/package.json | 6 +- npm/packs/lodash/package.json | 6 +- npm/packs/luxon/package.json | 4 +- .../package.json | 6 +- npm/packs/markdown-it/package.json | 6 +- npm/packs/owl.carousel/package.json | 6 +- npm/packs/popper.js/package.json | 6 +- npm/packs/prismjs/package.json | 6 +- npm/packs/select2/package.json | 6 +- npm/packs/sweetalert/package.json | 6 +- npm/packs/timeago/package.json | 6 +- npm/packs/toastr/package.json | 6 +- npm/packs/tui-editor/package.json | 12 +- npm/yarn.lock | 95 +- templates/app/angular/package.json | 10 +- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../MyCompanyName.MyProjectName.Web/yarn.lock | 222 +-- templates/module/angular/package.json | 10 +- .../my-project-name-config/package.json | 2 +- .../projects/my-project-name/package.json | 2 +- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../yarn.lock | 222 +-- .../package.json | 2 +- .../yarn.lock | 222 +-- 54 files changed, 2497 insertions(+), 913 deletions(-) create mode 100644 npm/ng-packs/scripts/package-lock.json diff --git a/npm/lerna.json b/npm/lerna.json index f941062e34..34b6ab898a 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/scripts/package-lock.json b/npm/ng-packs/scripts/package-lock.json new file mode 100644 index 0000000000..4a5907ee29 --- /dev/null +++ b/npm/ng-packs/scripts/package-lock.json @@ -0,0 +1,1491 @@ +{ + "name": "scripts", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/node": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.6.tgz", + "integrity": "sha512-Jg1F+bmxcpENHP23sVKkNuU3uaxPnsBMW0cLjleiikFKomJQbsn0Cqk2yDvQArqzZN6ABfBkZ0To7pQ8sLdWDg==", + "dev": true + }, + "ansi-bgblack": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgblack/-/ansi-bgblack-0.1.1.tgz", + "integrity": "sha1-poulAHiHcBtqr74/oNrf36juPKI=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgblue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgblue/-/ansi-bgblue-0.1.1.tgz", + "integrity": "sha1-Z73ATtybm1J4lp2hlt6j11yMNhM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgcyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgcyan/-/ansi-bgcyan-0.1.1.tgz", + "integrity": "sha1-WEiUJWAL3p9VBwaN2Wnr/bUP52g=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bggreen": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bggreen/-/ansi-bggreen-0.1.1.tgz", + "integrity": "sha1-TjGRJIUplD9DIelr8THRwTgWr0k=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgmagenta": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgmagenta/-/ansi-bgmagenta-0.1.1.tgz", + "integrity": "sha1-myhDLAduqpmUGGcqPvvhk5HCx6E=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgred": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgred/-/ansi-bgred-0.1.1.tgz", + "integrity": "sha1-p2+Sg4OCukMpCmwXeEJPmE1vEEE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgwhite": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgwhite/-/ansi-bgwhite-0.1.1.tgz", + "integrity": "sha1-ZQRlE3elim7OzQMxmU5IAljhG6g=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bgyellow": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bgyellow/-/ansi-bgyellow-0.1.1.tgz", + "integrity": "sha1-w/4usIzUdmSAKeaHTRWgs49h1E8=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-black": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-black/-/ansi-black-0.1.1.tgz", + "integrity": "sha1-9hheiJNgslRaHsUMC/Bj/EMDJFM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-blue": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-blue/-/ansi-blue-0.1.1.tgz", + "integrity": "sha1-FbgEmQ6S/JyoxUds6PaZd3wh7b8=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-bold": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-bold/-/ansi-bold-0.1.1.tgz", + "integrity": "sha1-PmOVCvWswq4uZw5vZ96xFdGl9QU=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-colors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-0.2.0.tgz", + "integrity": "sha1-csMd4qDZoszQysMMyYI+6y9kNLU=", + "requires": { + "ansi-bgblack": "^0.1.1", + "ansi-bgblue": "^0.1.1", + "ansi-bgcyan": "^0.1.1", + "ansi-bggreen": "^0.1.1", + "ansi-bgmagenta": "^0.1.1", + "ansi-bgred": "^0.1.1", + "ansi-bgwhite": "^0.1.1", + "ansi-bgyellow": "^0.1.1", + "ansi-black": "^0.1.1", + "ansi-blue": "^0.1.1", + "ansi-bold": "^0.1.1", + "ansi-cyan": "^0.1.1", + "ansi-dim": "^0.1.1", + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "ansi-grey": "^0.1.1", + "ansi-hidden": "^0.1.1", + "ansi-inverse": "^0.1.1", + "ansi-italic": "^0.1.1", + "ansi-magenta": "^0.1.1", + "ansi-red": "^0.1.1", + "ansi-reset": "^0.1.1", + "ansi-strikethrough": "^0.1.1", + "ansi-underline": "^0.1.1", + "ansi-white": "^0.1.1", + "ansi-yellow": "^0.1.1", + "lazy-cache": "^2.0.1" + } + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-dim": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-dim/-/ansi-dim-0.1.1.tgz", + "integrity": "sha1-QN5MYDqoCG2Oeoa4/5mNXDbu/Ww=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-green": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", + "integrity": "sha1-il2al55FjVfEDjNYCzc5C44Q0Pc=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-grey": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-grey/-/ansi-grey-0.1.1.tgz", + "integrity": "sha1-WdmLasK6GfilF5jphT+6eDOaM8E=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-hidden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-hidden/-/ansi-hidden-0.1.1.tgz", + "integrity": "sha1-7WpMSY0rt8uyidvyqNHcyFZ/rg8=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-inverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-inverse/-/ansi-inverse-0.1.1.tgz", + "integrity": "sha1-tq9Fgm/oJr+1KKbHmIV5Q1XM0mk=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-italic": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-italic/-/ansi-italic-0.1.1.tgz", + "integrity": "sha1-EEdDRj9iXBQqA2c5z4XtpoiYbyM=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-magenta": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-magenta/-/ansi-magenta-0.1.1.tgz", + "integrity": "sha1-BjtboW+z8j4c/aKwfAqJ3hHkMK4=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-reset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-reset/-/ansi-reset-0.1.1.tgz", + "integrity": "sha1-5+cSksPH3c1NYu9KbHwFmAkRw7c=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-strikethrough": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-strikethrough/-/ansi-strikethrough-0.1.1.tgz", + "integrity": "sha1-2Eh3FAss/wfRyT685pkE9oiF5Wg=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "ansi-underline": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-underline/-/ansi-underline-0.1.1.tgz", + "integrity": "sha1-38kg9Ml7WXfqFi34/7mIMIqqcaQ=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-white": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-white/-/ansi-white-0.1.1.tgz", + "integrity": "sha1-nHe3wZPF7pkuYBHTbsTJIbRXiUQ=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "ansi-yellow": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-yellow/-/ansi-yellow-0.1.1.tgz", + "integrity": "sha1-y5NW8vRscy8OMZnmEClVp32oPB0=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "arg": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", + "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-swap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arr-swap/-/arr-swap-1.0.1.tgz", + "integrity": "sha1-FHWQ7WX8gVvAf+8Jl8Llgj1kNTQ=", + "requires": { + "is-number": "^3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-node6": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-node6/-/babel-preset-node6-11.0.0.tgz", + "integrity": "sha1-CDWZRRckiYWinRj21GXasWu4p9g=", + "requires": { + "babel-plugin-syntax-trailing-function-commas": "^6.5.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.7.4" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "choices-separator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/choices-separator/-/choices-separator-2.0.0.tgz", + "integrity": "sha1-kv0XYxgteQM/XFxR0Lo1LlVnxpY=", + "requires": { + "ansi-dim": "^0.1.1", + "debug": "^2.6.6", + "strip-color": "^0.1.0" + } + }, + "clone-deep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-1.0.0.tgz", + "integrity": "sha512-hmJRX8x1QOJVV+GUjOBzi6iauhPqc9hIF6xitWRBbiPZOBb6vGo/mDRIK9P74RTKSQK7AE8B0DDWY/vpRrPmQw==", + "requires": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^5.0.0", + "shallow-clone": "^1.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "commander": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", + "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "error-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", + "integrity": "sha1-Ck2uN9YA0VopukU9jvkg8YRDM/Y=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "execa": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.0.3.tgz", + "integrity": "sha512-iM124nlyGSrXmuyZF1EMe83ESY2chIYVyDRZKgmcDynid2Q2v/+GuE7gNMl6Sy9Niwf4MC0DDxagOxeMPjuLsw==", + "requires": { + "cross-spawn": "^6.0.5", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "requires": { + "pump": "^3.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "info-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/info-symbol/-/info-symbol-0.1.0.tgz", + "integrity": "sha1-J4QdcoZ920JCzWEtecEGM4gcang=" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-number": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-6.0.0.tgz", + "integrity": "sha512-Wu1VHeILBK8KAWJUAiSZQX94GmOE45Rg6/538fKwiloUu21KncEkYGPqob2oSZ5mUT73vLGrHQjKw3KMPwfDzg==" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "koalas": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/koalas/-/koalas-1.0.2.tgz", + "integrity": "sha1-MYQz8HQjXbePrlZhoCqMpT7ilc0=" + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "requires": { + "set-getter": "^0.1.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "log-ok": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/log-ok/-/log-ok-0.1.1.tgz", + "integrity": "sha1-vqPdNqzQuKckDXhza1uXxlREozQ=", + "requires": { + "ansi-green": "^0.1.1", + "success-symbol": "^0.1.0" + } + }, + "log-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/log-utils/-/log-utils-0.2.1.tgz", + "integrity": "sha1-pMIXoN2aUFFdm5ICBgkas9TgMc8=", + "requires": { + "ansi-colors": "^0.2.0", + "error-symbol": "^0.1.0", + "info-symbol": "^0.1.0", + "log-ok": "^0.1.1", + "success-symbol": "^0.1.0", + "time-stamp": "^1.0.1", + "warning-symbol": "^0.1.0" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "npm-run-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "requires": { + "path-key": "^3.0.0" + }, + "dependencies": { + "path-key": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", + "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==" + } + } + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "pointer-symbol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pointer-symbol/-/pointer-symbol-1.0.0.tgz", + "integrity": "sha1-YPkRAgTqepKbYmRKITFVQ8uz1Ec=" + }, + "prompt-actions": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/prompt-actions/-/prompt-actions-3.0.2.tgz", + "integrity": "sha512-dhz2Fl7vK+LPpmnQ/S/eSut4BnH4NZDLyddHKi5uTU/2PDn3grEMGkgsll16V5RpVUh/yxdiam0xsM0RD4xvtg==", + "requires": { + "debug": "^2.6.8" + } + }, + "prompt-base": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/prompt-base/-/prompt-base-4.1.0.tgz", + "integrity": "sha512-svGzgLUKZoqomz9SGMkf1hBG8Wl3K7JGuRCXc/Pv7xw8239hhaTBXrmjt7EXA9P/QZzdyT8uNWt9F/iJTXq75g==", + "requires": { + "component-emitter": "^1.2.1", + "debug": "^3.0.1", + "koalas": "^1.0.2", + "log-utils": "^0.2.1", + "prompt-actions": "^3.0.2", + "prompt-question": "^5.0.1", + "readline-ui": "^2.2.3", + "readline-utils": "^2.2.3", + "static-extend": "^0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "prompt-choices": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/prompt-choices/-/prompt-choices-4.1.0.tgz", + "integrity": "sha512-ZNYLv6rW9z9n0WdwCkEuS+w5nUAGzRgtRt6GQ5aFNFz6MIcU7nHFlHOwZtzy7RQBk80KzUGPSRQphvMiQzB8pg==", + "requires": { + "arr-flatten": "^1.1.0", + "arr-swap": "^1.0.1", + "choices-separator": "^2.0.0", + "clone-deep": "^4.0.0", + "collection-visit": "^1.0.0", + "define-property": "^2.0.2", + "is-number": "^6.0.0", + "kind-of": "^6.0.2", + "koalas": "^1.0.2", + "log-utils": "^0.2.1", + "pointer-symbol": "^1.0.0", + "radio-symbol": "^2.0.0", + "set-value": "^3.0.0", + "strip-color": "^0.1.0", + "terminal-paginator": "^2.0.2", + "toggle-array": "^1.0.1" + }, + "dependencies": { + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + } + } + }, + "prompt-confirm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/prompt-confirm/-/prompt-confirm-2.0.4.tgz", + "integrity": "sha512-X5lzbC8/kMNHdPOqQPfMKpH4VV2f7v2OTRJoN69ZYBirSwTeQaf9ZhmzPEO9ybMA0YV2Pha5MV27u2/U4ahWfg==", + "requires": { + "ansi-cyan": "^0.1.1", + "prompt-base": "^4.0.1" + } + }, + "prompt-question": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/prompt-question/-/prompt-question-5.0.2.tgz", + "integrity": "sha512-wreaLbbu8f5+7zXds199uiT11Ojp59Z4iBi6hONlSLtsKGTvL2UY8VglcxQ3t/X4qWIxsNCg6aT4O8keO65v6Q==", + "requires": { + "clone-deep": "^1.0.0", + "debug": "^3.0.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "kind-of": "^5.0.2", + "koalas": "^1.0.2", + "prompt-choices": "^4.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "radio-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/radio-symbol/-/radio-symbol-2.0.0.tgz", + "integrity": "sha1-eqm/xQSFY21S3XbWqOYxspB5muE=", + "requires": { + "ansi-gray": "^0.1.1", + "ansi-green": "^0.1.1", + "is-windows": "^1.0.1" + } + }, + "readline-ui": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/readline-ui/-/readline-ui-2.2.3.tgz", + "integrity": "sha512-ix7jz0PxqQqcIuq3yQTHv1TOhlD2IHO74aNO+lSuXsRYm1d+pdyup1yF3zKyLK1wWZrVNGjkzw5tUegO2IDy+A==", + "requires": { + "component-emitter": "^1.2.1", + "debug": "^2.6.8", + "readline-utils": "^2.2.1", + "string-width": "^2.0.0" + } + }, + "readline-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/readline-utils/-/readline-utils-2.2.3.tgz", + "integrity": "sha1-b4R9a48ZFcORtYHDZ81HhzhiNRo=", + "requires": { + "arr-flatten": "^1.1.0", + "extend-shallow": "^2.0.1", + "is-buffer": "^1.1.5", + "is-number": "^3.0.0", + "is-windows": "^1.0.1", + "koalas": "^1.0.2", + "mute-stream": "0.0.7", + "strip-color": "^0.1.0", + "window-size": "^1.1.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "set-getter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "requires": { + "to-object-path": "^0.3.0" + } + }, + "set-value": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-3.0.1.tgz", + "integrity": "sha512-w6n3GUPYAWQj4ZyHWzD7K2FnFXHx9OTwJYbWg+6nXjG8sCLfs9DGv+KlqglKIIJx+ks7MlFuwFW2RBPb+8V+xg==", + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-color": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/strip-color/-/strip-color-0.1.0.tgz", + "integrity": "sha1-EG9l09PmotlAHKwOsM6LinArT3s=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "success-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz", + "integrity": "sha1-JAIuSG878c3KCUKDt2nEctO3KJc=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "terminal-paginator": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/terminal-paginator/-/terminal-paginator-2.0.2.tgz", + "integrity": "sha512-IZMT5ECF9p4s+sNCV8uvZSW9E1+9zy9Ji9xz2oee8Jfo7hUFpauyjxkhfRcIH6Lu3Wdepv5D1kVRc8Hx74/LfQ==", + "requires": { + "debug": "^2.6.6", + "extend-shallow": "^2.0.1", + "log-utils": "^0.2.1" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "toggle-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toggle-array/-/toggle-array-1.0.1.tgz", + "integrity": "sha1-y/WEB5K9UJfzMReugkyTKv/ofVg=", + "requires": { + "isobject": "^3.0.0" + } + }, + "ts-node": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.6.1.tgz", + "integrity": "sha512-KqPbO7/UuOPE4ANAOV9geZjk6tet6rK2K+DFeEJq6kIXUi0nLkrOMksozGkIlFopOorkStlwar3DdWYrdl7zCw==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^4.0.0" + } + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "typescript": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", + "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "warning-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/warning-symbol/-/warning-symbol-0.1.0.tgz", + "integrity": "sha1-uzHdEbeg+dZ6su2V9Fe2WCW7rSE=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "window-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", + "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", + "requires": { + "define-property": "^1.0.0", + "is-number": "^3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz", + "integrity": "sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==", + "dev": true + } + } +} diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index f376a1d718..0b6ff26bae 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "anchor-js": "^4.2.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 28610d1da2..14d43e8a0f 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,11 +1,11 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 399be97a28..714dd5c974 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,24 +1,24 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "^1.1.1", - "@abp/bootstrap": "^1.1.1", - "@abp/bootstrap-datepicker": "^1.1.1", - "@abp/datatables.net-bs4": "^1.1.1", - "@abp/font-awesome": "^1.1.1", - "@abp/jquery-form": "^1.1.1", - "@abp/jquery-validation-unobtrusive": "^1.1.1", - "@abp/lodash": "^1.1.1", - "@abp/luxon": "^1.1.1", - "@abp/malihu-custom-scrollbar-plugin": "^1.1.1", - "@abp/select2": "^1.1.1", - "@abp/sweetalert": "^1.1.1", - "@abp/timeago": "^1.1.1", - "@abp/toastr": "^1.1.1" + "@abp/aspnetcore.mvc.ui": "^2.0.0", + "@abp/bootstrap": "^2.0.0", + "@abp/bootstrap-datepicker": "^2.0.0", + "@abp/datatables.net-bs4": "^2.0.0", + "@abp/font-awesome": "^2.0.0", + "@abp/jquery-form": "^2.0.0", + "@abp/jquery-validation-unobtrusive": "^2.0.0", + "@abp/lodash": "^2.0.0", + "@abp/luxon": "^2.0.0", + "@abp/malihu-custom-scrollbar-plugin": "^2.0.0", + "@abp/select2": "^2.0.0", + "@abp/sweetalert": "^2.0.0", + "@abp/timeago": "^2.0.0", + "@abp/toastr": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 2701f22661..fcef935262 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/aspnetcore.mvc.ui", "publishConfig": { "access": "public" @@ -12,5 +12,5 @@ "path": "^0.12.7", "rimraf": "^3.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index 17890549e8..2cff0e28fb 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,13 +1,13 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^1.1.1", - "@abp/owl.carousel": "^1.1.1", - "@abp/tui-editor": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "^2.0.0", + "@abp/owl.carousel": "^2.0.0", + "@abp/tui-editor": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 6d3c56f0b0..801d1ae32f 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/bootstrap-datepicker", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "bootstrap-datepicker": "^1.9.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 9df45d3c42..5c52d72378 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/bootstrap", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "bootstrap": "^4.3.1" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index 460c8c161d..96f1518fd8 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/chart.js", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "chart.js": "^2.9.3" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index c3bdd2a94e..e6b080a5bd 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "clipboard": "^2.0.4" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index 87b6c5e58b..4a4d2fa320 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "codemirror": "^5.49.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index f6daa03e49..abf41de036 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,8 +1,8 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/core", "publishConfig": { "access": "public" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index eb268338ec..cc281baf39 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/datatables.net-bs4", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "^1.1.1", + "@abp/datatables.net": "^2.0.0", "datatables.net-bs4": "^1.10.20" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index 12249bb984..ad5de1b32a 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/datatables.net", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "datatables.net": "^1.10.20" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index 5ab7068fce..68266e5d2d 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "^1.1.1", - "@abp/clipboard": "^1.1.1", - "@abp/malihu-custom-scrollbar-plugin": "^1.1.1", - "@abp/popper.js": "^1.1.1", - "@abp/prismjs": "^1.1.1" + "@abp/anchor-js": "^2.0.0", + "@abp/clipboard": "^2.0.0", + "@abp/malihu-custom-scrollbar-plugin": "^2.0.0", + "@abp/popper.js": "^2.0.0", + "@abp/prismjs": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index cc53627bcd..d771e8b1d6 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "flag-icon-css": "^3.4.5" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index 939b16de10..890341e655 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/font-awesome", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "@fortawesome/fontawesome-free": "^5.11.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 75b58a809d..221e49a82f 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1" + "@abp/core": "^2.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 2601739103..1f9cdf546c 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/jquery-form", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "^2.0.0", "jquery-form": "^4.2.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index 989d3761fd..675f1a67bc 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/jquery-validation-unobtrusive", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery-validation": "^1.1.1", + "@abp/jquery-validation": "^2.0.0", "jquery-validation-unobtrusive": "^3.2.11" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index a9c77623d8..8041f6c962 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/jquery-validation", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "^2.0.0", "jquery-validation": "^1.19.1" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 4f25863686..c864b313af 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/jquery", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "jquery": "^3.4.1" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index b564805d0c..4cc42183fb 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/lodash", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "lodash": "^4.17.15" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 9d4cd350ad..79f163388b 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/luxon", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "luxon": "^1.21.3" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index fc1b413d15..d65585affc 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/malihu-custom-scrollbar-plugin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "malihu-custom-scrollbar-plugin": "^3.1.5" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index e06fe91da6..bbde823ac3 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "markdown-it": "^10.0.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index 5db205c8f6..bf6c7bbfbc 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "owl.carousel": "^2.3.4" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 24a7edc81e..66371985af 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "popper.js": "^1.16.0" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index cb55e2b086..52f2920631 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "prismjs": "^1.17.1" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index c5185cfa0c..b41559f400 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/select2", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "select2": "^4.0.12" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/sweetalert/package.json b/npm/packs/sweetalert/package.json index e0a0708034..3099b81ba1 100644 --- a/npm/packs/sweetalert/package.json +++ b/npm/packs/sweetalert/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/sweetalert", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^1.1.1", + "@abp/core": "^2.0.0", "sweetalert": "^2.1.2" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index d7369d6777..788ac14058 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/timeago", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "^2.0.0", "timeago": "^1.6.7" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index 00456bbd3e..6b806cb9b3 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,12 +1,12 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/toastr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^1.1.1", + "@abp/jquery": "^2.0.0", "toastr": "^2.1.4" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 579718be01..a745202334 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,15 +1,15 @@ { - "version": "1.1.1", + "version": "2.0.0", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "^1.1.1", - "@abp/highlight.js": "^1.1.1", - "@abp/jquery": "^1.1.1", - "@abp/markdown-it": "^1.1.1", + "@abp/codemirror": "^2.0.0", + "@abp/highlight.js": "^2.0.0", + "@abp/jquery": "^2.0.0", + "@abp/markdown-it": "^2.0.0", "tui-editor": "^1.4.8" }, - "gitHead": "b926d7a3fed6365550493ec00bdfe9da9dd6c541" + "gitHead": "407ad749bb735eb9b6cc1ef6dd310253b9680883" } diff --git a/npm/yarn.lock b/npm/yarn.lock index e0af7da193..7775403939 100644 --- a/npm/yarn.lock +++ b/npm/yarn.lock @@ -1609,6 +1609,15 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -1930,6 +1939,22 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -2207,7 +2232,7 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.1.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== @@ -2510,6 +2535,11 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -2837,6 +2867,11 @@ is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -3280,6 +3315,11 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" @@ -3320,6 +3360,11 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -3654,6 +3699,13 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -3734,6 +3786,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -3775,6 +3834,11 @@ p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -3979,6 +4043,11 @@ path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -4531,10 +4600,22 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -4821,6 +4902,11 @@ strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -5207,6 +5293,13 @@ which@1, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 83842616a7..d2cd576b43 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -13,11 +13,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "^1.1.1", - "@abp/ng.identity": "^1.1.1", - "@abp/ng.setting-management": "^1.1.1", - "@abp/ng.tenant-management": "^1.1.1", - "@abp/ng.theme.basic": "^1.1.1", + "@abp/ng.account": "^2.0.0", + "@abp/ng.identity": "^2.0.0", + "@abp/ng.setting-management": "^2.0.0", + "@abp/ng.tenant-management": "^2.0.0", + "@abp/ng.theme.basic": "^2.0.0", "@angular/animations": "~8.2.14", "@angular/common": "~8.2.14", "@angular/compiler": "~8.2.14", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index 35b0592f57..e045906f81 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock index 313032453c..677a417b16 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json index 436db35985..ee7a512dc8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 12cad6c691..cbe246e8e3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index 35b0592f57..e045906f81 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 12cad6c691..cbe246e8e3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index 35b0592f57..e045906f81 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index 313032453c..677a417b16 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 49b31d0796..462f0e3766 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -12,11 +12,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "^1.1.1", - "@abp/ng.theme.basic": "^1.1.1", - "@abp/ng.identity": "^1.1.1", - "@abp/ng.tenant-management": "^1.1.1", - "@abp/ng.setting-management": "^1.1.1", + "@abp/ng.account": "^2.0.0", + "@abp/ng.theme.basic": "^2.0.0", + "@abp/ng.identity": "^2.0.0", + "@abp/ng.tenant-management": "^2.0.0", + "@abp/ng.setting-management": "^2.0.0", "@angular/animations": "~8.2.14", "@angular/common": "~8.2.14", "@angular/compiler": "~8.2.14", diff --git a/templates/module/angular/projects/my-project-name-config/package.json b/templates/module/angular/projects/my-project-name-config/package.json index 90001f09a1..4f2733020b 100644 --- a/templates/module/angular/projects/my-project-name-config/package.json +++ b/templates/module/angular/projects/my-project-name-config/package.json @@ -2,6 +2,6 @@ "name": "my-project-name.config", "version": "0.0.1", "peerDependencies": { - "@abp/ng.core": ">=1.1.1" + "@abp/ng.core": ">=2.0.0" } } diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 0010e857cb..3a47047c11 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -2,7 +2,7 @@ "name": "my-project-name", "version": "0.0.1", "dependencies": { - "@abp/ng.theme.shared": "^1.1.1", + "@abp/ng.theme.shared": "^2.0.0", "my-project-name.config": "^0.0.1" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json index 436db35985..ee7a512dc8 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 12cad6c691..cbe246e8e3 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 35b0592f57..e045906f81 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 12cad6c691..cbe246e8e3 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 35b0592f57..e045906f81 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.0.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock index ad0afae66a..b21a160d43 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-1.1.1.tgz#a3d21f8cc5ede2e85b881fe69d9ecd5fc2268e47" - integrity sha512-ooXtCM3TWN69RU7xs6avnzOQBXzsiHY5BEIogzSBialZC4uG5H56qrIr4MbsFNae+PQM23Mw2tnJ/Z7dutURCQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.0.0.tgz#824f69bbbf868e4d72c36a0c6d0d11e18bd055b1" + integrity sha512-x3899Y+XZPj1z9aO0sqxsbwFebHCoEaLedcVEOJugJxM9JXfKuNG3tlvuurLirdaFQAs6WoMCFsQ9sbR8ZHm2w== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^1.1.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.0.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-1.1.1.tgz#b5eb57bcebcf211a75cf7d540dcc89a0f9ade013" - integrity sha512-LilSyefzT1+rcTU7vbWxcO8TwBgGZIx6QbMUrDicSTH6LLJ9S5+yNaGNJbbZKDG6qx0BEoC1u8dE8KCUshwxoQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^1.1.1" - "@abp/bootstrap" "^1.1.1" - "@abp/bootstrap-datepicker" "^1.1.1" - "@abp/datatables.net-bs4" "^1.1.1" - "@abp/font-awesome" "^1.1.1" - "@abp/jquery-form" "^1.1.1" - "@abp/jquery-validation-unobtrusive" "^1.1.1" - "@abp/lodash" "^1.1.1" - "@abp/luxon" "^1.1.1" - "@abp/malihu-custom-scrollbar-plugin" "^1.1.1" - "@abp/select2" "^1.1.1" - "@abp/sweetalert" "^1.1.1" - "@abp/timeago" "^1.1.1" - "@abp/toastr" "^1.1.1" - -"@abp/aspnetcore.mvc.ui@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-1.1.1.tgz#9d693516b6a215dfd2113db9ef52f02881a3e1d5" - integrity sha512-wZbptVCSxZzEjkJx+/sWrH9Pikp9nOy7V8Htz+L+S7/qAzfXu5PRVV8ahddfAcDHRk30buRhdbJlCVdt6hkZ6g== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.0.0.tgz#9859308a910ecd89fd008bc9622c0fd2ca10e5c6" + integrity sha512-fGIEOY3i9DgrEYay1B+IiTkBW94bBY9Fk0bou6ULxvb0jndqAnuws1mifBUrvKIF2cjKKBxO2iqBZ5n2IbHLhA== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.0.0" + "@abp/bootstrap" "^2.0.0" + "@abp/bootstrap-datepicker" "^2.0.0" + "@abp/datatables.net-bs4" "^2.0.0" + "@abp/font-awesome" "^2.0.0" + "@abp/jquery-form" "^2.0.0" + "@abp/jquery-validation-unobtrusive" "^2.0.0" + "@abp/lodash" "^2.0.0" + "@abp/luxon" "^2.0.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.0.0" + "@abp/select2" "^2.0.0" + "@abp/sweetalert" "^2.0.0" + "@abp/timeago" "^2.0.0" + "@abp/toastr" "^2.0.0" + +"@abp/aspnetcore.mvc.ui@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.0.0.tgz#d7e67b99e6c31e670337e787d55dd49f81717155" + integrity sha512-fNxQINx6COagbA2UepOMgOZg6dqXlEKbiftSt+/yhUVkMW3+c8IILJODyHxAaJfGrYjHqKAcyItqR7vVCWDYsw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-1.1.1.tgz#fb1ceec1df24f384a6349c4acfb3627e02e4a42f" - integrity sha512-RIQLSrKBu/cTAU2lFenSAoKcMp7wgF4e3nP4/iOu5ZtCgti5vUjMEcqEvBxtlwKTHMXsTG4GtNKqjTwjXMjONQ== +"@abp/bootstrap-datepicker@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.0.0.tgz#e55064d554163865c3c4871c10cc8e8416cccbf4" + integrity sha512-kz6RYUDO6txf9gJXxXLL3aboM4OjJWwtdMD0pwhwWJCujqjaQi3YJIGZFXAxO2GhUq5bqX+KaBdOqdMl0gIasA== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-1.1.1.tgz#e16fae6ff6b18096276219edf3483fd8f41c925d" - integrity sha512-OIaGJaizhI8UNfy4bnw2xT2Z0QG7BJJrjxOPGepfd4jn/AUi/vFdOpJFWvu2P9PwSzRmn/LuSlr2WONDOdPVWQ== +"@abp/bootstrap@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.0.0.tgz#1c12edc28a9400a349049ab60f43a8123da0f2b0" + integrity sha512-sim0zmmUqtTvFDn4RQxJZPHCH4kxHsuep63O86sfn3XjgU8FDw6C2AP7j0l+q2yDt94qKTUMxg17MWDr5DqEEA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" bootstrap "^4.3.1" -"@abp/core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-1.1.1.tgz#1379145980d6b142fd0123200c60ffb206149d56" - integrity sha512-OvUG7xRvk8nSqwC1s45YPnTuhC2OWe1AVa1nnC6FVHMH/g1Je7UJwnbu47K7uNS+lDRJUIktNbufYKiwutEjRg== +"@abp/core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.0.0.tgz#19368fc332eec89d6442e6b991eed72af92f8ec8" + integrity sha512-aPb4anAZhmVxJrPnBNT33bRkYLUMmCqpPIrN+NCqejwiEIg5jb4zu4bOS71/oTxViNRF5S/XzKF6ceLD+CVq4g== -"@abp/datatables.net-bs4@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-1.1.1.tgz#c7e79534c2e4b51b3e98bcc0df3292cb08ae9d2e" - integrity sha512-t40xQIGBMLPZiSbcZHW3AwE8uk+xcl7OitBT1jym0XPKVtgJsHez3ynDE5v/PjHe+ColCG8lTRjRnNoXo5dzDw== +"@abp/datatables.net-bs4@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.0.0.tgz#bb7f1eddd0dee5ba8fb7a8e760d6b6fdc9374a65" + integrity sha512-7kCD4WhszgQOCQsAvXUGdDSqi+ZRWqENzjxoPQa9oPxFD2hy3AshYMvc+JQC71Pbp6YIZU09LV3pGkFPHO7lOw== dependencies: - "@abp/datatables.net" "^1.1.1" + "@abp/datatables.net" "^2.0.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-1.1.1.tgz#de8b362c29f452188624536cdd6feccad2b533e6" - integrity sha512-y76IDBlgc0n1YgQqJ+9cfzXpLwr2arhdIfSmqX+qRXz6GfVNY7e3JijkFSgDKUzKGYo1HZMzgJmDmeNIRwMZsQ== +"@abp/datatables.net@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.0.0.tgz#43fa36590373dccffc3f4402b2c94777c9ce70cd" + integrity sha512-xSUkrpWUfzqPIbo5pI6gcrrbc2R2yBlq+TLxry064ILHfGvZI8lwmv9rEkPP/hBTvk1YnzaZScFneaA0xJn9hw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" datatables.net "^1.10.20" -"@abp/font-awesome@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-1.1.1.tgz#7f0a210eb7611d75542028b0c88a0c83f1d9db50" - integrity sha512-6RHbixi7IVWAb3JCHrUmEYD3HmAH4R75Nuo54LvFzATrh4G6gdBONIeDuTo79OTxe4Zhp+WLxeA49Y21kt77mg== +"@abp/font-awesome@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.0.0.tgz#aed2718808820f2cbe54edf09a23a65d819a798d" + integrity sha512-zfNjgnvOnCQQh4egk3NE7e6FbaDbjCzFnVDiHelM+9R6GAfDZTMS9jm3X+vDrn8vQfqQmDpzTpcz0v0IMNM8/g== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-1.1.1.tgz#1dae1145da720e222efcb396906c3fbe5a3dd29f" - integrity sha512-AIIdN36f8xwr4LgiNnBHohJ5tlxh/r+DuDtXcScpZN6GWBE+XgUotN0pZIIva82IxCyUNdDudzgluX9IjI+00w== +"@abp/jquery-form@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.0.0.tgz#b987944d1aff79c540c951cca020ec49e1a0a004" + integrity sha512-2JmXIbeTM+9RQSTFOurbL6Vk0WR2RbwU+ApKVYJhF7NxEdE9cMGTrs1Z2xF85h28VrVAtPnpApd9ORaopSqaYQ== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-1.1.1.tgz#aeba0883260f47ab22a39343817b1811fc2b81a9" - integrity sha512-q1b0KG8l3DXUiW8JXdq9l1jR/CwgzrZdxwdKGLB2J/oxHlywQIb7yrjR6WGCshjPpcx2SkOL0j/ZXMIMh533hQ== +"@abp/jquery-validation-unobtrusive@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.0.0.tgz#75d4f54732a4608542d968874e676f3de08126bf" + integrity sha512-CfU9/Q2dsaqLAWvqEb/VgMvJ5RC2IoSSW7l8SbduKOzqg7FiiBOpOd1AcqApjh0vuzZrRj+HcuoFBE+jWiberw== dependencies: - "@abp/jquery-validation" "^1.1.1" + "@abp/jquery-validation" "^2.0.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-1.1.1.tgz#03febd285ce9d7e5681619897967b0ccde7e8e04" - integrity sha512-YvAjIW8epp+ddu01BTUkZWPfEADAvNPJeUrrZ6OpcPWM15Tf+ddr4ATgJ1LCg0Bh5F09iQC855osow3lt8sc7g== +"@abp/jquery-validation@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.0.0.tgz#e8afe0e677f8a7ec1fd7818b916b1894904d3cc3" + integrity sha512-cjkk5TJyr09H6EO13/GtiIRZv/1FP94IX2tVstqtOa5x8uI8HWCgFpPrchg9ldBsBoBelyExoISjlzqiKNkIHA== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" jquery-validation "^1.19.1" -"@abp/jquery@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-1.1.1.tgz#56928814bb3df73c1c0014d4b18fef09ec06e195" - integrity sha512-kj4BTtXF0VbCzCqRXnRVEbGndR3F8NlbBhVQN6BQktOuZta3fvx7f2+pSok8vQv0ddmqUFY7FTT2Ei3l4363LQ== +"@abp/jquery@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.0.0.tgz#71781f3ad1914c1d2a516c7157080d7c82c9b7aa" + integrity sha512-2EfGIiSaXPTxfdb/jomae75Y77OlS4H+G1oWz7L6XDhBIzctVivbOKSJim3BI2no1GJWOM/U1r1TKEKzwJyY4Q== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" jquery "^3.4.1" -"@abp/lodash@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-1.1.1.tgz#aa6ef3a85b9827796e295f440b29f0611c508b5f" - integrity sha512-nH7bRS28Tf4hEXcpKHd1IM+MzYTqX8t3htGmsLX4UESQd52eODYOIldtX6gm3OW1O6ECwW6si/o0M2pTEpQqvg== +"@abp/lodash@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.0.0.tgz#ac5697a32a0ab0b3a0420c90ada1b87b853d19bc" + integrity sha512-QZWrDDfCjyW+q5lauwyrdFmsoDTC154k9ZZAkgAt9lJ6bbBWvDFgNEevg9etfh6heTBzBO7v7ftqDTt01/ArCQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" lodash "^4.17.15" -"@abp/luxon@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-1.1.1.tgz#ec389270d78bb271d52163ab3773f549aa91751e" - integrity sha512-WNu8JRSb5FDXfcDwjMYyeYeUN48uuDc/I2cdo3xd1rcY+lbmbzxoG9IYOlE8cRHdgX3z82qsZXFs2lcAy0Le2g== +"@abp/luxon@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.0.0.tgz#3bb3c3fcb0a9d74161a9f82afd840f9fdbffd42e" + integrity sha512-DloPuJrAcpgcPGkuaJCi9XfC+2JsKPxFXTtxNlgkEaTuFwKnrWeGSOZqwedfawnQA+YPGGg1hz+7+WPb0X4Fog== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-1.1.1.tgz#73f8423c29d646dc7f0f270d1d7ef05947333e2a" - integrity sha512-n4b4QK/L1Czdx0oOpUR/bWjK9VENexfUSV/aMjwzHhDmEFABAmEfhIpudCYDwewGswrd7C9agmBvakv2rwPQeA== +"@abp/malihu-custom-scrollbar-plugin@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.0.0.tgz#6df2bcf1a3413880ebcf45017fe4966ad01e4fb9" + integrity sha512-ZqfVJyEMykg7IqemxV1jZ4FXu74F3eT8Be2EobSrc0avx27Oh6sD38TvgPv3e4etDbCekZYG1J7glKY7RzNPYw== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-1.1.1.tgz#777967821cfcc4bd1c9fc895e913427fbb330abe" - integrity sha512-t0qcJhD+uo2+XWr4nmMQLAx7MRGQUBdZ81YmGty045ReoSaEKQf4haLkzBcMzpBRusiyMQO/PbxjtwMw/xJQTQ== +"@abp/select2@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.0.0.tgz#252710d172c7a7385f41292d3d3400c68ed93dbb" + integrity sha512-kRNuVdr5EbFQxXD7Fq8H3bYJo3bmE7QsIlxZQeSl6xfBK4nYGeLJ6ZGPwzKPFN9P6sfpZ4TBM2eOie9LgmHWLA== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" select2 "^4.0.12" -"@abp/sweetalert@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-1.1.1.tgz#e055ea46eb4e3d53e623ee0aada9b2d16fea5610" - integrity sha512-V6K/qg7J/bdFmom2kaXYeiLvcmLHFl+MacPX4yYAK2biZdb2pWOkUdmcAzZdOT+UruKfLRhvraVC2uXDySi9NA== +"@abp/sweetalert@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.0.0.tgz#2bb99ba7c0b6154181bce8fc5a959d4520032279" + integrity sha512-uotKepUBfQL8hrwSxSDLBLiAesIZ8low6OLsFIXqkUDDQIgKWUpPBuTbP7XGiHvHBOXXLxmpQ+YeYe72eOPtXQ== dependencies: - "@abp/core" "^1.1.1" + "@abp/core" "^2.0.0" sweetalert "^2.1.2" -"@abp/timeago@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-1.1.1.tgz#b626087ca35fb325e8e8a337552694fcbb8a6bf9" - integrity sha512-QYYih/4n6XhCqkRw7fBfyg58T5CHqJHyz7SAfq86RiKAJ4jVtjdSVxj3XKxz8eCb56wZGsO1xXXStI3vdLwwNw== +"@abp/timeago@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.0.0.tgz#6e410cbf09e252b9eb1cf03cdc7ea62424249694" + integrity sha512-rtZ/avYpCTIDq4ZjIxaSQxN9wuRnQwhZ+dS1HfHb2NZK2sqJnb+iH7Nm9IQPHk7y89mgSrMWskYW91KaABSolw== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" timeago "^1.6.7" -"@abp/toastr@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-1.1.1.tgz#aeb6a8ef8004fce136997f9ee3af7dd241890d50" - integrity sha512-GDewBppm+0FO6kTTy0huczoH9P5q6lFicHFAoEawAMkuWJFW/Ihv/YnEvKGDQwGftuVSWexfqBMN/RZ5YSOiGQ== +"@abp/toastr@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.0.0.tgz#a87591132c5586b16d521346ae9012affed0e3cd" + integrity sha512-SC8zWe87Kyec7mIsp9LRSmOlBfu+a1X658oS2eP/NscirU8tCnhvl/F2PeHWLjE8zkULLd8GZ8ht/XSU1gtTpg== dependencies: - "@abp/jquery" "^1.1.1" + "@abp/jquery" "^2.0.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": From bf7406f9d525b7f6202f02cdd04a1471f157f44d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 13 Jan 2020 16:35:33 +0300 Subject: [PATCH 28/45] docs: update ng changelog --- npm/ng-packs/CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/npm/ng-packs/CHANGELOG.md b/npm/ng-packs/CHANGELOG.md index 3ee75c623d..64777880da 100644 --- a/npm/ng-packs/CHANGELOG.md +++ b/npm/ng-packs/CHANGELOG.md @@ -1,3 +1,41 @@ +# [2.0.0](https://github.com/abpframework/abp/compare/1.1.2...2.0.0) (2020-01-13) + + +### Bug Fixes + +* **core:** fix flattedRoutes manipulation ([2b2e0be](https://github.com/abpframework/abp/commit/2b2e0be51d9fb37188348f390b56df286de7a6bc)) +* **core:** fix nullable control in the config state ([756e858](https://github.com/abpframework/abp/commit/756e8588f3dd2d1035dbc22db3773653e28b1542)) +* **core:** update flattedRoutes when patchRoute action dispatched ([15a8279](https://github.com/abpframework/abp/commit/15a82794ac5173bd080d3aec46efb43bfc0614ae)) +* **permission-management:** fix twice executing problem of visible setter([ae16916](https://github.com/abpframework/abp/commit/ae16916ae2b03dfc25d9c4c5ceeb559dee34bde2)) +* **theme-shared:** fix remember me functionality [(#2610)](https://github.com/abpframework/abp/pull/2610) ([189a77f](https://github.com/abpframework/abp/commit/189a77f4c421398b841e67280f6f19c4ef56649d)), closes [(#2602)](https://github.com/abpframework/abp/issues/2602) + + +### Code Refactoring + +* remove deprecated functions, outputs, inputs etc. ([f1d0eba](https://github.com/abpframework/abp/commit/f1d0ebae856406213023af11632ed72849928b3e)), closes [#2476](https://github.com/abpframework/abp/issues/2476) + + +### Features + +* add state actions to related state services ([#2431](https://github.com/abpframework/abp/pull/2431)), closes ([#2430](https://github.com/abpframework/abp/pull/2430)) +* make some components replaceable ([#2522](https://github.com/abpframework/abp/pull/2522)), closes ([#2404](https://github.com/abpframework/abp/issues/2404)) +* **account:** add autocomplete attiributes for chromium based browsers ([343c847](https://github.com/abpframework/abp/commit/343c847fb70d634218de1b156b3a15557e27acda)) +* **account:** add the enableLocalLogin condition to auth-wrapper ([#2537](https://github.com/abpframework/abp/pull/2573)) ([0fb7ba4](https://github.com/abpframework/abp/commit/0fb7ba4614ebb64a00f19a9bef277a0fb9bee764)) +* **core:** add init directive ([5ae1071](https://github.com/abpframework/abp/commit/5ae10717d73b1d76711dcd68201ed6b0609c4112)) +* **core:** add ExtractFromGeneric type to ABP namespace ([1fe3b35](https://github.com/abpframework/abp/commit/1fe3b35076c5daddf9edc2a8396b62288cf105da)) +* **core:** add init directive to emit an output when the element initialized ([31c224c](https://github.com/abpframework/abp/commit/31c224c9f9c015e94877d1eba382d1cd415704c7)) +* **core:** fill the parentName property in flattedRoutes for child rotues ([17dd0a2](https://github.com/abpframework/abp/commit/17dd0a25a7dc2fa6268ce68f4f2f5d78f78a1f23)) +* **core:** create AddRoute action to add new elements to top navigation ([#2425](https://github.com/abpframework/abp/pull/2425)), closes ([#2186](https://github.com/abpframework/abp/pull/2186)) +* **theme-shared:** trigger unload confirmation in the modal component when form is dirty ([f59a294](https://github.com/abpframework/abp/commit/f59a2945b223a19750afd46da7e33deff2583328)) +* **theme-shared:** create new toast and confirmation components ([#2606](https://github.com/abpframework/abp/pull/2606)), closes ([#2537](https://github.com/abpframework/abp/issues/2537)) +* **theme-shared:** create table, pagination, loading components ([#2605](https://github.com/abpframework/abp/pull/2605)), related ([#2537](https://github.com/abpframework/abp/issues/2537)) + + +### BREAKING CHANGES + +* Deprecated functions, outputs, inputs addressed in issue #2476 are removed. + + # [1.1.0](https://github.com/abpframework/abp/compare/1.0.2...1.1.0) (2019-12-06) From 1e15a541c0db72f6b5abd980fafa5a5b6e1c090c Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 13 Jan 2020 17:08:06 +0300 Subject: [PATCH 29/45] fix(theme-shared): fix table sort icon hiding problem --- .../components/sort-order-icon/sort-order-icon.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts index 1e80f8f585..7e5d62fb6a 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/sort-order-icon/sort-order-icon.component.ts @@ -36,9 +36,8 @@ export class SortOrderIconComponent { iconClass: string; get icon(): string { - if (!this.selectedSortKey) return 'sorting'; if (this.selectedSortKey === this.sortKey) return `sorting_${this.order}`; - else return ''; + else return 'sorting'; } sort(key: string) { From 969771306dd39a8a13bc72537e2209f0461647a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 13 Jan 2020 20:01:27 +0300 Subject: [PATCH 30/45] Fixed #2624: FullAuditedAggregateRootWithUser generic type wrong constraint. --- .../Entities/Auditing/FullAuditedAggregateRootWithUser.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs index cb0be46421..b2dbb8c280 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs @@ -4,12 +4,12 @@ using Volo.Abp.Auditing; namespace Volo.Abp.Domain.Entities.Auditing { /// - /// Implements to be a base class for full-audited aggregate roots. + /// Implements to be a base class for full-audited aggregate roots. /// /// Type of the user [Serializable] public abstract class FullAuditedAggregateRootWithUser : FullAuditedAggregateRoot, IFullAuditedObject - where TUser : IEntity + where TUser : IEntity { /// public virtual TUser Deleter { get; set; } @@ -22,13 +22,13 @@ namespace Volo.Abp.Domain.Entities.Auditing } /// - /// Implements to be a base class for full-audited aggregate roots. + /// Implements to be a base class for full-audited aggregate roots. /// /// Type of the primary key of the entity /// Type of the user [Serializable] public abstract class FullAuditedAggregateRootWithUser : FullAuditedAggregateRoot, IFullAuditedObject - where TUser : IEntity + where TUser : IEntity { /// public virtual TUser Deleter { get; set; } From 9e7aeb3b0bb3db122b1f88190af0bc596fb46f58 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 14 Jan 2020 10:35:48 +0300 Subject: [PATCH 31/45] style(theme-shared): fix table empty row styles --- npm/ng-packs/package.json | 26 +-- .../theme-basic/src/lib/constants/styles.ts | 4 + .../lib/components/table/table.component.html | 2 +- .../lib/components/table/table.component.ts | 4 +- .../src/lib/services/confirmation.service.ts | 2 +- .../tests/sort-order-icon.component.spec.ts | 2 +- npm/ng-packs/yarn.lock | 151 ++++++++---------- 7 files changed, 88 insertions(+), 103 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index fa9799048e..085cbc9d4f 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -21,19 +21,19 @@ "generate:changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }, "devDependencies": { - "@abp/ng.account": "^1.1.1", - "@abp/ng.account.config": "^1.1.1", - "@abp/ng.core": "^1.1.1", - "@abp/ng.feature-management": "^1.1.1", - "@abp/ng.identity": "^1.1.1", - "@abp/ng.identity.config": "^1.1.1", - "@abp/ng.permission-management": "^1.1.1", - "@abp/ng.setting-management": "^1.1.1", - "@abp/ng.setting-management.config": "^1.1.1", - "@abp/ng.tenant-management": "^1.1.1", - "@abp/ng.tenant-management.config": "^1.1.1", - "@abp/ng.theme.basic": "^1.1.1", - "@abp/ng.theme.shared": "^1.1.1", + "@abp/ng.account": "^2.0.0", + "@abp/ng.account.config": "^2.0.0", + "@abp/ng.core": "^2.0.0", + "@abp/ng.feature-management": "^2.0.0", + "@abp/ng.identity": "^2.0.0", + "@abp/ng.identity.config": "^2.0.0", + "@abp/ng.permission-management": "^2.0.0", + "@abp/ng.setting-management": "^2.0.0", + "@abp/ng.setting-management.config": "^2.0.0", + "@abp/ng.tenant-management": "^2.0.0", + "@abp/ng.tenant-management.config": "^2.0.0", + "@abp/ng.theme.basic": "^2.0.0", + "@abp/ng.theme.shared": "^2.0.0", "@angular-builders/jest": "^8.2.0", "@angular-devkit/build-angular": "~0.803.21", "@angular-devkit/build-ng-packagr": "~0.803.21", diff --git a/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts b/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts index 24c3e84e42..cacf326031 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/constants/styles.ts @@ -64,4 +64,8 @@ export default ` .field-validation-error { font-size: 0.8em; } + +.ui-table .ui-table-tbody > tr.empty-row > div.empty-row-content { + border: 1px solid #c8c8c8; + } `; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html index 6898a9964b..11f4250db8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.html @@ -71,7 +71,7 @@ -
      +
      {{ emptyMessage | abpLocalization }}
      diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts index 3c9995a388..b4ac7eec5f 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/table/table.component.ts @@ -25,8 +25,8 @@ import { filter: none; } - .ui-table .ui-table-tbody > tr.empty-row > div { - margin: 10px; + .ui-table .ui-table-tbody > tr.empty-row > div.empty-row-content { + padding: 10px; text-align: center; } `, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts index 650019392b..f66dfd768d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts @@ -50,7 +50,7 @@ export class ConfirmationService { ): Observable { this.confirmation$.next({ message, - title: title || 'AbpUi:AreYouSure', + title, severity: severity || 'neutral', options, }); diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts b/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts index d351c39a74..a91f5b76c1 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tests/sort-order-icon.component.spec.ts @@ -32,7 +32,7 @@ describe('SortOrderIconComponent', () => { component.sort(newKey); expect(component.selectedSortKey).toBe(newKey); expect(component.order).toBe('asc'); - expect(component.icon).toBe(''); + expect(component.icon).toBe('sorting'); }); test('should change order correctly when sort function called', () => { diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index e0af31cd07..01e1a62823 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,26 +2,26 @@ # yarn lockfile v1 -"@abp/ng.account.config@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.account.config/-/ng.account.config-1.1.1.tgz#43de54dd12606a6bc10caace9e430bdb136206b6" - integrity sha512-d0Gj/BtB/YtsVMsyFJI+vcX+KE2CCKNpUQ6YC2rmIwPwOkbqV7UtbzMhxgHoG4lTTfh1pxclIOL6WFzQInI4kg== +"@abp/ng.account.config@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account.config/-/ng.account.config-2.0.0.tgz#ed49d728e6cb5cac5bf562b2db6e65276a2d550c" + integrity sha512-r7n5NLaAg6xtMQK6KCoCwJALsj3+cftqbPU1mTJqoEiZQCejOUFA9Gk85i3t//MRUeD3j/ghzUYUa6b2elQwXQ== dependencies: tslib "^1.9.0" -"@abp/ng.account@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-1.1.1.tgz#eddce66856d1133c4d7c04e861be019cfea6b25e" - integrity sha512-EUG7Hiv21KuOMmVSCxUBjMOlno4oYIUtrOUMNK/A/y42cr8UwUFmsu7HEx5J30Z0KWBn7w4vWvAy6KenqzMclQ== +"@abp/ng.account@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-2.0.0.tgz#ac1ea6b51190d68c647699fb9a6d185ad728ec3e" + integrity sha512-UC/mTFermfrnAmm2Y6ZrsbKi4EyPzoASeRzoZ5LL0usyEIKb4N9l7Z7kxr5ih2+OPVSW9TmDfgw/zwn3HlrrWw== dependencies: - "@abp/ng.account.config" "^1.1.1" - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.account.config" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.core@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-1.1.1.tgz#a08a06fff8fb58a913b619820120d93fa5120a1b" - integrity sha512-oCYQJPmiYr6UjnW6L5Dhd7rl0wvE2ABjWYT70IDLSaFjxHRlQ2exA2kKft4RMkCT0iPNzEfmdHZyqX/8AHCy8Q== +"@abp/ng.core@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-2.0.0.tgz#9da38d0d3a32a5f7239034a37c3f4f14be745f30" + integrity sha512-pp3u+3bYMSygx88+t4929tkp7a5ja8k8IPeoho2SiJgC2ni546ecX10Yt02X1C8DBEhBr7b6Fn7eQI0VTA4zYA== dependencies: "@ngxs/router-plugin" "^3.5.1" "@ngxs/storage-plugin" "^3.5.1" @@ -32,86 +32,86 @@ snq "^1.0.3" tslib "^1.9.0" -"@abp/ng.feature-management@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-1.1.1.tgz#d431a62fd677229421137c83e3ce1beb44f9d92c" - integrity sha512-Pji1vp9jWQacrRawBFRh/ao1zXE3ktbGmj1X+nCQ3o6Q7EnNattC7/KC6osqvonpfFDxpjEZP4cMyb3H1wHRIA== +"@abp/ng.feature-management@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-2.0.0.tgz#a9192bb24ca66d9eb0cf653695da2502ebaa7710" + integrity sha512-7DQapIj28Bh7MtSGKJLLd98i2vWGJgA/4hx3jjQ0WT94NnuyZPKsYwSGcJbVgbTV3PyLWcDCdmhh2NloL2O0lw== dependencies: - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.identity.config@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.identity.config/-/ng.identity.config-1.1.1.tgz#da264272ecebfbce99617443048951de317c23f9" - integrity sha512-d5BJBwfHsBoeEYF6dCHeoNVX/nRy1T7HOF6sjkFQN0Jihhk/XOv/r6CpgxnUKasXF0R2wadHrZZZOme6UL7AIw== +"@abp/ng.identity.config@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity.config/-/ng.identity.config-2.0.0.tgz#4912b513e919778356cec45ceda4bc032e0cc9b6" + integrity sha512-LfEwy57+Yx8nZXvzgFn8aYVnZSFrhBxFvD1twrTrddQRKltO+wSXV8p6boem8KRU2KWpbH0NYhnBNOxPYGHF6g== dependencies: tslib "^1.9.0" -"@abp/ng.identity@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-1.1.1.tgz#0776db2a4efe96953a7d46ea697689686c75fbf2" - integrity sha512-Gzz+/kgsDhTTrEMiNqDLSJvjTgk0ATy6Ud7uswoA3RCDlfcksbS5J7kHEsc6TRh6bZ1bC368Zj1F/XS7QAj/iA== +"@abp/ng.identity@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-2.0.0.tgz#33ba9c94042a48c7c004a4df499a669f75997a25" + integrity sha512-qjtiIJy+fpn9JDZjndqtNPnGWPNc1pMQP4cV+UVm8RUG5U3nMI8RfEYyuDKluSGPAF2Qncl3husjpmZjZaEO9w== dependencies: - "@abp/ng.identity.config" "^1.1.1" - "@abp/ng.permission-management" "^1.1.1" - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.identity.config" "^2.0.0" + "@abp/ng.permission-management" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.permission-management@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-1.1.1.tgz#f0184639f9bf37a24c7dc3b18953bac0a521f926" - integrity sha512-3Omhdf/VrYjd4RA9R74ttFP4T+J4Kit8A/PjJIaiwV5j8DJ0WQeBek82P3Q3+EfhuS2ehWuSuz/DYmkcxkt1dw== +"@abp/ng.permission-management@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-2.0.0.tgz#b7956a274945bac9b3bfb16cfcacd70af531d82e" + integrity sha512-ZCuitlFgP1S/Y1Us5nIS9Fw9Jz9Jb7RRboTb6ysbMcLcOkgYJn2d806fnEQh/TkJHpTJDNZYIk27/DlaOQN2xg== dependencies: - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.setting-management.config@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management.config/-/ng.setting-management.config-1.1.1.tgz#6e19cb5f7894d2b6c5193f2e72abdac5be076356" - integrity sha512-QvWo8r+dL+IcQW0nRC7sPNhMCScSHcYPqJotUY1QCanEpXU56JIfPYkOKOtt3cJTA9U2jE2hBmv7fi8yTEy6Pg== +"@abp/ng.setting-management.config@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management.config/-/ng.setting-management.config-2.0.0.tgz#4013b5d6bf7a34fc93ab1df3734c50bb60588b0e" + integrity sha512-eVIzsSQHMz1+Y4Pri8dec31NP3pGwqeX9oFN6YdiIlXL7i0Lqvf9o1ZvMvZ6iIX7GJsOilTgd9Rw7ccZnZTaEQ== dependencies: tslib "^1.9.0" -"@abp/ng.setting-management@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-1.1.1.tgz#38cfd7c8b6cc0e29bd3a655e1aecff7e35aca10a" - integrity sha512-kwW9xC7xERo5ZDqGC4TaEXZKiHYZ3lIwGn8wVktX53ulGXrKT9N7BSVP8bBMJnJlIMNg7MpxjOYAR90gXrXdZw== +"@abp/ng.setting-management@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-2.0.0.tgz#9babb94b66aba3d95b44457e9301bbf2d7ea10b5" + integrity sha512-tRYRW/SlS52o9kO3yojJarYf0IFYNigXJaJPBOla1RPWW9fM63irCUq+NAI5bRUkxPHDQPfpE8qJC32DPM6a1Q== dependencies: - "@abp/ng.setting-management.config" "^1.1.1" - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.setting-management.config" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.tenant-management.config@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management.config/-/ng.tenant-management.config-1.1.1.tgz#1aee4705e6ec06954d5d04ad78bb02c636dc36ae" - integrity sha512-KoYPIqsm7a/VrMZumfFKBKYwzZm1zzJeyoWpf84PZ2gvhkuh45gYwvXzMHzQu/HQ6FpJ9+NL7ro/uee1ka+DzQ== +"@abp/ng.tenant-management.config@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management.config/-/ng.tenant-management.config-2.0.0.tgz#ee2357596263019eae9fcbefe8fd927242b81e87" + integrity sha512-HMZh7HBrFcMXLXGvEjwSOF0ncDcZUtUez1J4ll6oMBVbL4xgfJxIggODin9OMMdQOkLjzYY4BGS+Iwjzh5DR2g== dependencies: tslib "^1.9.0" -"@abp/ng.tenant-management@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-1.1.1.tgz#b08a9498957f8dd54a2089d7d4cffafb48753508" - integrity sha512-hjs8U+lRA0y2yVa1tVZgm02kxyQdsmyMtzG8ZB76MFJThmMtf3ogrLHRGZ0etgQHe0bmMjkpdC84wS1VtyK5VA== +"@abp/ng.tenant-management@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-2.0.0.tgz#24dfbaf234e567244bdd4cc882ed6952d873e6b3" + integrity sha512-Qn/JLJcCMYYZ+5IuF5jSHzwB9dprnQqoVv8i8vuXS1dyooBoqIIKNMs0E/GOsNu5MPABYrd24YODGi2Nso/OxA== dependencies: - "@abp/ng.feature-management" "^1.1.1" - "@abp/ng.tenant-management.config" "^1.1.1" - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.feature-management" "^2.0.0" + "@abp/ng.tenant-management.config" "^2.0.0" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.theme.basic@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-1.1.1.tgz#ee3c3a35f4254a0f727b11bb343ceab3aa975773" - integrity sha512-1z13+H2UhIGDsbsd5uyhuBi3v4lxim1yIECZ3HxFJxIKthHO1wlVb8ka8WrIrxj7JBOl6f9srMCzuCNm2rMGLg== +"@abp/ng.theme.basic@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-2.0.0.tgz#c492bd513bb8a14d4df7b1ed24316543b41cb710" + integrity sha512-WH7DKzF8MkK1fG8uCYGQWJmkJPliyKi2/UwimmFie5UxFsII05rvZZAa+/EILVfMyob+4AkDeU79gZ/EWUJeZg== dependencies: - "@abp/ng.theme.shared" "^1.1.1" + "@abp/ng.theme.shared" "^2.0.0" tslib "^1.9.0" -"@abp/ng.theme.shared@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-1.1.1.tgz#436b9c909a25cc5722c2a639399d05668a241262" - integrity sha512-eQDrznFKwD63cdO/HPSyGMwIFPmGhv4MAEgITyZkUY76g+owYa/tK+GEjpSqsvQsL//qrHqcG+nwuK9RrCBy+A== +"@abp/ng.theme.shared@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-2.0.0.tgz#d241d597d0bb58d50514522d133448f12672708f" + integrity sha512-akTvtNLKkpdWxLko6jMR261FSNEMNcRp1bvvOE2Auged9luXZYneNfaExnoLkBQhRuxmLKBYLPHyyueGRy2v2g== dependencies: - "@abp/ng.core" "^1.1.1" + "@abp/ng.core" "^2.0.0" "@angular/cdk" "^8.2.3" "@fortawesome/fontawesome-free" "^5.11.2" "@ng-bootstrap/ng-bootstrap" "^5.1.4" @@ -119,7 +119,6 @@ bootstrap "^4.3.1" chart.js "^2.9.2" font-awesome "^4.7.0" - ngx-perfect-scrollbar "^8.0.0" primeicons "^2.0.0" primeng "^8.1.1" tslib "^1.9.0" @@ -8488,14 +8487,6 @@ ng-packagr@^5.7.1: terser "^4.1.2" update-notifier "^3.0.0" -ngx-perfect-scrollbar@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/ngx-perfect-scrollbar/-/ngx-perfect-scrollbar-8.0.0.tgz#19c1bbf9b1a36d89b00a68f7834e39427d29182f" - integrity sha512-IXoFbULQnxyJj0gdCcKCLE/6OW9HCP9KARzMCKS1kNxTuzG4DghjM2AaCBRM5/sFwdbn6rqOKMCINtHA8W8YCA== - dependencies: - perfect-scrollbar "^1.4.0" - resize-observer-polyfill "^1.5.0" - ngxs-reset-plugin@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ngxs-reset-plugin/-/ngxs-reset-plugin-1.2.0.tgz#38dd8363f45cad7410e00ce346a98001241944f8" @@ -9409,11 +9400,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -perfect-scrollbar@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.4.0.tgz#5d014ef9775e1f43058a1dbae9ed1daf0e7091f1" - integrity sha512-/2Sk/khljhdrsamjJYS5NjrH+GKEHEwh7zFSiYyxROyYKagkE4kSn2zDQDRTOMo8mpT2jikxx6yI1dG7lNP/hw== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -10251,11 +10237,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resize-observer-polyfill@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" From 4b1b051a027ad6fc263f685b82cfcd1541d13826 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 14 Jan 2020 16:37:53 +0800 Subject: [PATCH 32/45] Add PostConfigure & PostConfigureAll method to AbpModule. --- .../Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs index 6153f4be97..f40c6caf12 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs @@ -121,5 +121,17 @@ namespace Volo.Abp.Modularity { ServiceConfigurationContext.Services.PreConfigure(configureOptions); } + + protected void PostConfigure(Action configureOptions) + where TOptions : class + { + ServiceConfigurationContext.Services.PostConfigure(configureOptions); + } + + protected void PostConfigureAll(Action configureOptions) + where TOptions : class + { + ServiceConfigurationContext.Services.PostConfigureAll(configureOptions); + } } } \ No newline at end of file From 530f5c6b2310394f86b4498dc437712f66f9c415 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 14 Jan 2020 11:38:48 +0300 Subject: [PATCH 33/45] Update AbpIoApiKeyService.cs --- .../Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 4ed8746ce6..e1939f37cc 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 @@ -81,8 +81,7 @@ namespace Volo.Abp.Cli.Licensing var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var apiKeyResult = JsonSerializer.Deserialize(responseContent); - if (apiKeyResult == null || - string.IsNullOrEmpty(apiKeyResult.ApiKey)) + if (string.IsNullOrEmpty(apiKeyResult?.ApiKey)) { _logger.LogError("Couldn't retrieve your NuGet API key!"); _logger.LogWarning(File.Exists(CliPaths.AccessToken) From 553508b15f835936175a8a391727698483269b70 Mon Sep 17 00:00:00 2001 From: TheDiaval Date: Tue, 14 Jan 2020 12:26:43 +0300 Subject: [PATCH 34/45] refactor(theme-shared): change toast close button style --- .../src/lib/components/toast/toast.component.html | 6 +++--- .../src/lib/components/toast/toast.component.scss | 12 +++++------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html index 985ea58888..a7d5e77fb7 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html @@ -3,14 +3,14 @@
      -
      {{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }}
      -
      +

      {{ toast.message | abpLocalization: toast.options?.messageLocalizationParams }} -

      +

      diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss index 1bd780815c..be5c871082 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss @@ -45,7 +45,7 @@ } .toast-content { position: relative; - .close-button { + .toast-close-button { position: absolute; top: 0; right: 0; @@ -53,20 +53,16 @@ align-items: center; justify-content: center; margin: 0; - padding: 5px 10px 5px 5px; + padding: 0px 5px 0 0; width: 25px; height: 25px; border: none; border-radius: 50%; background: transparent; + color: inherit; &:focus { outline: none; } - .close-icon { - width: 16px; - height: 16px; - stroke: #000; - } } .toast-title { margin: 0; @@ -75,6 +71,8 @@ font-weight: 600; } .toast-message { + margin: 0; + padding: 0; } } } From 524ed4328df276973a15b487d73e23e0737b8715 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 14 Jan 2020 12:50:23 +0300 Subject: [PATCH 35/45] fix cli incorrect license error and warning resolves https://github.com/abpframework/abp/issues/2626 --- .../Volo/Abp/Cli/Auth/AuthService.cs | 5 +++++ .../Volo/Abp/Cli/Http/CliHttpClient.cs | 3 ++- .../Volo/Abp/Cli/Licensing/AbpIoApiKeyService.cs | 16 ++++++---------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs index 3fdd0aae1d..a8ac0e0357 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Auth/AuthService.cs @@ -45,5 +45,10 @@ namespace Volo.Abp.Cli.Auth FileHelper.DeleteIfExists(CliPaths.AccessToken); return Task.CompletedTask; } + + public static bool IsLoggedIn() + { + return File.Exists(CliPaths.AccessToken); + } } } 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/CliHttpClient.cs index 81c64a3b5f..ca1a23fcfc 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/CliHttpClient.cs @@ -3,6 +3,7 @@ using System.IO; using System.Net.Http; using System.Text; using IdentityModel.Client; +using Volo.Abp.Cli.Auth; namespace Volo.Abp.Cli.Http { @@ -29,7 +30,7 @@ namespace Volo.Abp.Cli.Http private static void AddAuthentication(HttpClient client) { - if (!File.Exists(CliPaths.AccessToken)) + if (!AuthService.IsLoggedIn()) { return; } 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 e1939f37cc..a22b6bba4a 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 @@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Polly; using Polly.Extensions.Http; +using Volo.Abp.Cli.Auth; using Volo.Abp.Cli.Http; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.DependencyInjection; @@ -31,6 +32,11 @@ namespace Volo.Abp.Cli.Licensing public async Task GetApiKeyOrNullAsync(bool invalidateCache = false) { + if (!AuthService.IsLoggedIn()) + { + return null; + } + if (invalidateCache) { _apiKeyResult = null; @@ -81,16 +87,6 @@ namespace Volo.Abp.Cli.Licensing var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var apiKeyResult = JsonSerializer.Deserialize(responseContent); - if (string.IsNullOrEmpty(apiKeyResult?.ApiKey)) - { - _logger.LogError("Couldn't retrieve your NuGet API key!"); - _logger.LogWarning(File.Exists(CliPaths.AccessToken) - ? "Make sure you have an active session and license on commercial.abp.io. To re-sign in you can use the CLI command \"abp login \"." - : "You are not signed in to commercial.abp.io. Use the CLI command \"abp login \" to sign in."); - - return null; - } - return apiKeyResult; } } From c39755e281b7d74464e2c5990407120b28079a75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 14 Jan 2020 13:24:43 +0300 Subject: [PATCH 36/45] ABP Framework v2.0 blog post --- .../2020-01-15 v2_0_Release/Post.md | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md new file mode 100644 index 0000000000..36905df43c --- /dev/null +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -0,0 +1,73 @@ +# ABP Framework v2.0 Has Been Released + +ABP Framework v2.0 has been released in this week. This post explains why we've released an early major version and what is changed with the v2.0. + +## Why 2.0 instead of 1.2? + +Actually, it was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** problems on Linux, especially when you deploy your application into **Linux** containers with **low CPU and memory** resources. + +We have investigated the problem deeply and have seen that the root cause of the problem is related to the implementation of **intercepting async methods**. In addition, there were some **async over sync** usages effected the thread pool optimization. + +Finally, we **solved all the problems** with the huge help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. + +Most of the applications won't be effected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make necessary changes. + +## Breaking Changes + +### Removed Some Sync APIs + +We've [removed some sync APIs](https://github.com/abpframework/abp/pull/2464) because they eventually causes async over sync problems. Because some of the interceptors need to use async APIs and if they intercept sync methods they need to call async over sync. + +**Async over sync** problem is a classic problem of C# when you need to **call an async method inside a sync method**. While there are some solutions to this problem, they all have **disadvantages** and it is suggested to **not write** such code at all. You can find plenty of documents related to this topic on the web, so I will not write more about it. + +So, to not cause this problem; + +* Removed sync [Repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like Insert, Update... etc). +* Removed sync APIs of the [Unit Of Work](https://docs.abp.io/en/abp/latest/Unit-Of-Work). +* Removed sync API of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs). +* Removed sync APIs of [Audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging). + +Also removed some other rarely used sync APIs. If you get any compile error, just use the async versions of these APIs. + +### Always Async! + +Beginning from the v2.0, ABP framework assumes that you are writing your application code async. Otherwise, some framework funtionalities may not properly work. + +It is suggested to write async for all your [application services](https://docs.abp.io/en/abp/latest/Application-Services), [repository methods](https://docs.abp.io/en/abp/latest/Repositories), controller actions, page handlers. + +Even if your application service method doesn't need to be async, write it as async, because interceptors perform async operations (for authorization, unit of work... etc.). You can return `Task.Completed` from a method that doesn't make an async call. + +Example: + +````csharp +public Task GetValueAsync() +{ + ... + return Task.CompletedTask(42); +} +```` + +The example above doesn't need to be async because it doesn't perform an async call to any service. However, making it async helps to the ABP framework to run interceptors without async over sync calls. + +This rule doesn't force you to write every method async. This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories)) + +### Other Breaking Changes + +See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes while most of them will not effect your application code. + +## New Features + +This release also contains a few new features and tens of enhancements. Some of them are; + +* [#2597](https://github.com/abpframework/abp/pull/2597) New Volo.Abp.AspNetCore.Serilog package. +* [#2526](https://github.com/abpframework/abp/issues/2526) Client side validation for the dynamic C# client proxies. +* [#2374](https://github.com/abpframework/abp/issues/2374) Async background jobs. +* [#265](https://github.com/abpframework/abp/issues/265) Managing the application shutdown. +* [#2472](https://github.com/abpframework/abp/issues/2472) Implemented DeviceFlowCodes and TokenCleanupService for the IdentityServer module. + +See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other features, enhancements and bug fixes. + +## Documentation + +We've completed some missing documentation with the v2.0 release. In the next weeks, we will mostly focus on the basic documentation and tutorials. + From 97bc1d03bca144b658530ec021b55943aae1bd98 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 14 Jan 2020 13:51:46 +0300 Subject: [PATCH 37/45] chore: update favicon files --- npm/ng-packs/apps/dev-app/src/favicon.ico | Bin 948 -> 102968 bytes templates/app/angular/src/favicon.ico | Bin 5430 -> 102968 bytes templates/module/angular/src/favicon.ico | Bin 5430 -> 102968 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/favicon.ico b/npm/ng-packs/apps/dev-app/src/favicon.ico index 997406ad22c29aae95893fb3d666c30258a09537..39695854d21146f87f3c65b27b9baef29b609255 100644 GIT binary patch literal 102968 zcmeI537pq+{>Q&#(w&J=Nlo~pW0Qn59Wxb$bSNuPvRT%hqf4s;ZCSZ(OWK-7Y)i-r zZEQ`BWU(4$h17J>bWX=~%{0yb`I^3;@t%*GgB-i_?eTc}yx-r?{dphX@9!Ex5EGOS z^e-l;AAC?X2(CpQHEO@!pkhpLdbJ=(N(%M%L2%hITswWg{Go3(h~chiXMdP2K1AzcFXkM=vQ{WM`>iK5IQHnHPQRzt zxkvx;s7jSiY*7E1QRg0e@=fmruisv=!i!UmiT(7r-c?Q>^;)%O7fpC5@2#Ahhc^GJ zc5>$0C7GKhH6QZVg@0M|&$Vr0QyMMH=rZ<+jg^Mi%Dysf$mp&MT9hAtOjga5#7eo% zGP;fLU+3RXrM>z31*vgKJ@U>8o_Y89phy2Bf`-j1jQZ1)u}K$x6jT4?v(qwTGiKeA zHD<-h+f$OuP5Lb6qfu?Y7@Ji-V?ffhLFHz3NS$`{((5kWxw^xI2B+jSed3wQ-T>bO zj~sPJaQ+{=WDg3KW!zk;Y3|K(S*CgxBl++`JUy(6z(p?=ty|YGk=d|n7^S(%X_z(L|&WIn=HLt>ZQ_|ydUtr;T zdSyLY#Igrv4-by~9>>cSTZimE4LMSznFLY?oLkyLnpE zd)n5`UYXYPwE4GW&AoEptxvsn@modAv*ozES`5p2szyqSw75|tnh*SPR_=#sv+f=d zlXd;YV<*Sw)yg_Kt>4{U6VqF!?Yg&ZTtb^&qtfoEaN6A?nq)0b=~sSu#q5NPDi{9! z!EeU=ZAI;GUCnMqo>=FOrrDd*)+MxBwy?{Rtv608KRhmDU~0~B8C6pH#SZWN_11rn z?wXu8krq2UO-Zga>9YxGcN}@zg9(ZE&aIL)qusQ%NBpJl{mU}iT*ApMeBzBF40H2G z38NlQ!Drq%XJp*HX>X3t?6zw|a)sPpY3pXk^lG0TpRjB|w++Fi?MIf&ZaO77Cih_~ zf>*n)XrIxoL*9`Czsy{9b=vilKB#oog0)3#D0W%KC)=0CkLtRx6MnPg?*s0>vemnn zcIX%69+C08c0|)_Ip6GBS~+82-MnELucp8AHIBA#e%ix#cU`h>#+a@f`qUdcVqn8z z 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 Kp#2tJdH+9GLJime literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000Q&#(w&J=Nlo~pW0Qn59Wxb$bSNuPvRT%hqf4s;ZCSZ(OWK-7Y)i-r zZEQ`BWU(4$h17J>bWX=~%{0yb`I^3;@t%*GgB-i_?eTc}yx-r?{dphX@9!Ex5EGOS z^e-l;AAC?X2(CpQHEO@!pkhpLdbJ=(N(%M%L2%hITswWg{Go3(h~chiXMdP2K1AzcFXkM=vQ{WM`>iK5IQHnHPQRzt zxkvx;s7jSiY*7E1QRg0e@=fmruisv=!i!UmiT(7r-c?Q>^;)%O7fpC5@2#Ahhc^GJ zc5>$0C7GKhH6QZVg@0M|&$Vr0QyMMH=rZ<+jg^Mi%Dysf$mp&MT9hAtOjga5#7eo% zGP;fLU+3RXrM>z31*vgKJ@U>8o_Y89phy2Bf`-j1jQZ1)u}K$x6jT4?v(qwTGiKeA zHD<-h+f$OuP5Lb6qfu?Y7@Ji-V?ffhLFHz3NS$`{((5kWxw^xI2B+jSed3wQ-T>bO zj~sPJaQ+{=WDg3KW!zk;Y3|K(S*CgxBl++`JUy(6z(p?=ty|YGk=d|n7^S(%X_z(L|&WIn=HLt>ZQ_|ydUtr;T zdSyLY#Igrv4-by~9>>cSTZimE4LMSznFLY?oLkyLnpE zd)n5`UYXYPwE4GW&AoEptxvsn@modAv*ozES`5p2szyqSw75|tnh*SPR_=#sv+f=d zlXd;YV<*Sw)yg_Kt>4{U6VqF!?Yg&ZTtb^&qtfoEaN6A?nq)0b=~sSu#q5NPDi{9! z!EeU=ZAI;GUCnMqo>=FOrrDd*)+MxBwy?{Rtv608KRhmDU~0~B8C6pH#SZWN_11rn z?wXu8krq2UO-Zga>9YxGcN}@zg9(ZE&aIL)qusQ%NBpJl{mU}iT*ApMeBzBF40H2G z38NlQ!Drq%XJp*HX>X3t?6zw|a)sPpY3pXk^lG0TpRjB|w++Fi?MIf&ZaO77Cih_~ zf>*n)XrIxoL*9`Czsy{9b=vilKB#oog0)3#D0W%KC)=0CkLtRx6MnPg?*s0>vemnn zcIX%69+C08c0|)_Ip6GBS~+82-MnELucp8AHIBA#e%ix#cU`h>#+a@f`qUdcVqn8z z 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 Kp#2tJdH+9GLJime literal 5430 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 z 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 Kp#2tJdH+9GLJime literal 5430 zcmc(je{54#6vvCoAI3i*G5%$U7!sA3wtMZ$fH6V9C`=eXGJb@R1%(I_{vnZtpD{6n z5Pl{DmxzBDbrB>}`90e12m8T*36WoeDLA&SD_hw{H^wM!cl_RWcVA!I+x87ee975; z@4kD^=bYPn&pmG@(+JZ`rqQEKxW<}RzhW}I!|ulN=fmjVi@x{p$cC`)5$a!)X&U+blKNvN5tg=uLvuLnuqRM;Yc*swiexsoh#XPNu{9F#c`G zQLe{yWA(Y6(;>y|-efAy11k<09(@Oo1B2@0`PtZSkqK&${ zgEY}`W@t{%?9u5rF?}Y7OL{338l*JY#P!%MVQY@oqnItpZ}?s z!r?*kwuR{A@jg2Chlf0^{q*>8n5Ir~YWf*wmsh7B5&EpHfd5@xVaj&gqsdui^spyL zB|kUoblGoO7G(MuKTfa9?pGH0@QP^b#!lM1yHWLh*2iq#`C1TdrnO-d#?Oh@XV2HK zKA{`eo{--^K&MW66Lgsktfvn#cCAc*(}qsfhrvOjMGLE?`dHVipu1J3Kgr%g?cNa8 z)pkmC8DGH~fG+dlrp(5^-QBeEvkOvv#q7MBVLtm2oD^$lJZx--_=K&Ttd=-krx(Bb zcEoKJda@S!%%@`P-##$>*u%T*mh+QjV@)Qa=Mk1?#zLk+M4tIt%}wagT{5J%!tXAE;r{@=bb%nNVxvI+C+$t?!VJ@0d@HIyMJTI{vEw0Ul ze(ha!e&qANbTL1ZneNl45t=#Ot??C0MHjjgY8%*mGisN|S6%g3;Hlx#fMNcL<87MW zZ>6moo1YD?P!fJ#Jb(4)_cc50X5n0KoDYfdPoL^iV`k&o{LPyaoqMqk92wVM#_O0l z09$(A-D+gVIlq4TA&{1T@BsUH`Bm=r#l$Z51J-U&F32+hfUP-iLo=jg7Xmy+WLq6_tWv&`wDlz#`&)Jp~iQf zZP)tu>}pIIJKuw+$&t}GQuqMd%Z>0?t%&BM&Wo^4P^Y z)c6h^f2R>X8*}q|bblAF?@;%?2>$y+cMQbN{X$)^R>vtNq_5AB|0N5U*d^T?X9{xQnJYeU{ zoZL#obI;~Pp95f1`%X3D$Mh*4^?O?IT~7HqlWguezmg?Ybq|7>qQ(@pPHbE9V?f|( z+0xo!#m@Np9PljsyxBY-UA*{U*la#8Wz2sO|48_-5t8%_!n?S$zlGe+NA%?vmxjS- zHE5O3ZarU=X}$7>;Okp(UWXJxI%G_J-@IH;%5#Rt$(WUX?6*Ux!IRd$dLP6+SmPn= z8zjm4jGjN772R{FGkXwcNv8GBcZI#@Y2m{RNF_w8(Z%^A*!bS*!}s6sh*NnURytky humW;*g7R+&|Ledvc- Date: Tue, 14 Jan 2020 13:52:40 +0300 Subject: [PATCH 38/45] fix(theme-shared): fix date formatting for ngb datepicker --- .../src/lib/utils/date-parser-formatter.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts b/npm/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts index 5bae578d16..a18f6813c8 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/utils/date-parser-formatter.ts @@ -31,8 +31,17 @@ export class DateParserFormatter extends NgbDateParserFormatter { return { year: toInteger(dateParts[0]), month: null, day: null }; } else if (dateParts.length === 2 && isNumber(dateParts[0]) && isNumber(dateParts[1])) { return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: null }; - } else if (dateParts.length === 3 && isNumber(dateParts[0]) && isNumber(dateParts[1]) && isNumber(dateParts[2])) { - return { year: toInteger(dateParts[0]), month: toInteger(dateParts[1]), day: toInteger(dateParts[2]) }; + } else if ( + dateParts.length === 3 && + isNumber(dateParts[0]) && + isNumber(dateParts[1]) && + isNumber(dateParts[2]) + ) { + return { + year: toInteger(dateParts[0]), + month: toInteger(dateParts[1]), + day: toInteger(dateParts[2]), + }; } } return null; @@ -40,7 +49,7 @@ export class DateParserFormatter extends NgbDateParserFormatter { format(date: NgbDateStruct): string { if (date && this.datePipe) { - return this.datePipe.transform(new Date(date.year, date.month, date.day), 'shortDate'); + return this.datePipe.transform(new Date(date.year, date.month - 1, date.day), 'shortDate'); } else { return date ? `${date.year}-${isNumber(date.month) ? padNumber(date.month) : ''}-${ From af08ea52abc550c986a7638224d1eeadb826dd0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 14 Jan 2020 14:35:52 +0300 Subject: [PATCH 39/45] Update post --- .../2020-01-15 v2_0_Release/Post.md | 76 ++++++++++++++++--- 1 file changed, 67 insertions(+), 9 deletions(-) diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md index 36905df43c..b11ac5004e 100644 --- a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -1,8 +1,12 @@ -# ABP Framework v2.0 Has Been Released +# ABP Framework v2.0 and the ABP Commercial -ABP Framework v2.0 has been released in this week. This post explains why we've released an early major version and what is changed with the v2.0. +ABP Framework v2.0 has been released in this week. This post explains why we've released an **early major version** and what is changed with the v2.0. -## Why 2.0 instead of 1.2? +In addition to the v2.0 release, we've also announcing the **ABP Commercial** which is a set of professional modules, tools, themes and services built on top of the open source ABP framework + +## ABP Framework v2.0 + +### Why 2.0 instead of 1.2? Actually, it was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** problems on Linux, especially when you deploy your application into **Linux** containers with **low CPU and memory** resources. @@ -12,9 +16,9 @@ Finally, we **solved all the problems** with the huge help of the **community**. Most of the applications won't be effected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make necessary changes. -## Breaking Changes +### Breaking Changes -### Removed Some Sync APIs +#### Removed Some Sync APIs We've [removed some sync APIs](https://github.com/abpframework/abp/pull/2464) because they eventually causes async over sync problems. Because some of the interceptors need to use async APIs and if they intercept sync methods they need to call async over sync. @@ -29,7 +33,7 @@ So, to not cause this problem; Also removed some other rarely used sync APIs. If you get any compile error, just use the async versions of these APIs. -### Always Async! +#### Always Async! Beginning from the v2.0, ABP framework assumes that you are writing your application code async. Otherwise, some framework funtionalities may not properly work. @@ -51,11 +55,11 @@ The example above doesn't need to be async because it doesn't perform an async c This rule doesn't force you to write every method async. This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories)) -### Other Breaking Changes +#### Other Breaking Changes See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes while most of them will not effect your application code. -## New Features +### New Features This release also contains a few new features and tens of enhancements. Some of them are; @@ -67,7 +71,61 @@ This release also contains a few new features and tens of enhancements. Some of See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other features, enhancements and bug fixes. -## Documentation +### Documentation We've completed some missing documentation with the v2.0 release. In the next weeks, we will mostly focus on the basic documentation and tutorials. +## ABP Commercial + +[ABP Commercial](https://commercial.abp.io/) is a set of professional **modules, tools, themes and services** built on top of the open source ABP framework. + +* It provides [professional modules](https://commercial.abp.io/modules) in addition to ABP Framework's free & [open source modules](https://docs.abp.io/en/abp/latest/Modules/Index). +* It includes a beautiful [UI theme](https://commercial.abp.io/themes). +* It provides [ABP Suite](https://commercial.abp.io/tools/suite), a tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added by the time. +* [Premium support](https://commercial.abp.io/support) for enterprise companies. + +In addition to these standard set of features, we will provide customer basis services. See the [commercial.abp.io](https://commercial.abp.io/) web site for other details. + +### ABP Framework vs the ABP Commercial + +The ABP Commercial **is not a paid version** of the ABP Framework. You can think it as **additional benefits** for professional companies. If you have budget, you can use it to save your time and develop your product faster. + +ABP Framework is open source & free and will always be like that. + +As a principle, we build the main infrastructure as open source while we sell additional pre-built application features, themes and tools. If you were following the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & the [ASP.NET Zero](https://aspnetzero.com/) products, the main idea is similar. + +Buying a commercial license saves your significant time and effort and you can focus on your own business much more, you take a dedicated and high priority support. Also, in this way, you support the ABP core team since we are spending most of our time to develop, maintain and support the open source ABP Framework. + +### Pricing + +You can build **unlimited projects/products**, sell to **unlimited customers**, host in **unlimited of servers** without any restriction. Pricing is mostly based on your **developer count**, required **support level** and **source code** access. There are three main packages; + +* **Team license**: Includes all the modules, themes and tools. Allows to develop your product with 3 developers. You can buy additional developer licenses. +* **Business license**: Allows to download the source code of all the modules and the themes. Also, includes 5 developer licenses by default. You can buy additional developer licenses. +* **Enterprise license**: Provides unlimited and private support in addition to the benefits of the business license. + +See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have any questions. + +#### License Comparison + +The license price changes based on your developer count, required support level and source code access. + +##### The Source Code + +Team license doesn't include the source code of the pre-built modules & themes. It uses all these modules as NuGet & NPM packages. In this was, you can easily get new features and bug fixes by just updating the package dependencies. But you can't access their source code. So you don't have to possibility to embed a module's source code into your application and freely change the source code. + +Pre-built modules provides some level of customizability and extensibility and allows you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. So, if you don't need to make major changes on the pre-built modules, the team license will be ideal for you; Because it is cheaper and allows you to easily get new features and bug fixes. + +Business and Enterprise licenses allow you to download the source code of any module or theme when you need. They also uses the same startup template with the team license, so all modules are used as NuGet and NPM packages. But in case of need, you can remove the package dependencies for a module and embed its source code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely. But if you want, you should do it yourself using some merge tool or Git branch system. + +#### License Lifetime + +ABP Commercial license is **perpetual**, that means you can **use it forever** and continue to develop your applications. + +However, the following services are for one year: + +* Premium **support** ends after one year. You can continue to get the community support. +* You can not get **updates** of the modules & themes after one year. You can continue to use the last obtained version. You can even get bug fixes and enhancements for your current major version. +* You can use the ABP **Suite** tooling for one year. + +If you want to continue to get these benefits, you can extend your license period. Renewing price is 20% less than the regular price. \ No newline at end of file From ae53dc740add3120a0092802ed0ce2e07d327f0d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 14 Jan 2020 14:59:32 +0300 Subject: [PATCH 40/45] chore: install typescript to scripts folder --- npm/ng-packs/scripts/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/scripts/package.json b/npm/ng-packs/scripts/package.json index 14550a8277..c5f1527943 100644 --- a/npm/ng-packs/scripts/package.json +++ b/npm/ng-packs/scripts/package.json @@ -16,13 +16,13 @@ "commander": "^4.0.1", "execa": "^2.0.3", "fs-extra": "^8.1.0", - "prompt-confirm": "^2.0.4", - "typescript": "^3.7.4" + "prompt-confirm": "^2.0.4" }, "devDependencies": { "@types/node": "^13.1.2", "esm": "^3.2.25", "ts-node": "^8.5.4", - "tsconfig-paths": "^3.9.0" + "tsconfig-paths": "^3.9.0", + "typescript": "^3.7.4" } } From 69a03f1ece9ea2bf1e729892281d5f5a05c35dd9 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 14 Jan 2020 15:17:45 +0300 Subject: [PATCH 41/45] fix(scripts): remove version control from publish script --- npm/ng-packs/scripts/publish.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/npm/ng-packs/scripts/publish.ts b/npm/ng-packs/scripts/publish.ts index 04907b451f..b7e5d4f219 100644 --- a/npm/ng-packs/scripts/publish.ts +++ b/npm/ng-packs/scripts/publish.ts @@ -5,15 +5,6 @@ const publish = async () => { const versions = ['major', 'minor', 'patch', 'premajor', 'preminor', 'prepatch', 'prerelease']; let nextSemanticVersion = (process.argv[2] || '').toLowerCase(); - if (versions.indexOf(nextSemanticVersion) < 0) { - console.log( - "Please enter the next semantic version like this: 'npm run publish patch'. Available versions:\n " + - JSON.stringify(versions), - ); - - process.exit(1); - } - try { await execa('yarn', ['install-new-dependencies'], { stdout: 'inherit' }); From 8106ed568603a7a6576020a55c7a23c46e1892a2 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 14 Jan 2020 15:46:19 +0300 Subject: [PATCH 42/45] Improved ABP Framework v2.0 and the ABP Commercial blog post. --- .../2020-01-15 v2_0_Release/Post.md | 107 +++++++++--------- 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md index b11ac5004e..b87945f11b 100644 --- a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -1,131 +1,132 @@ # ABP Framework v2.0 and the ABP Commercial -ABP Framework v2.0 has been released in this week. This post explains why we've released an **early major version** and what is changed with the v2.0. +ABP Framework v2.0 has been released this week. This post explains why we have released an **early major version** and what is changed with version 2.0. -In addition to the v2.0 release, we've also announcing the **ABP Commercial** which is a set of professional modules, tools, themes and services built on top of the open source ABP framework +In addition to the v2.0 release, we have also announced **ABP Commercial** which is a set of professional modules, tools, themes, and services built on top of the open-source ABP framework. ## ABP Framework v2.0 ### Why 2.0 instead of 1.2? -Actually, it was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** problems on Linux, especially when you deploy your application into **Linux** containers with **low CPU and memory** resources. +It was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** issues on Linux, especially when you deploy your application to **Linux** containers with **low CPU and memory** resources. -We have investigated the problem deeply and have seen that the root cause of the problem is related to the implementation of **intercepting async methods**. In addition, there were some **async over sync** usages effected the thread pool optimization. +We have investigated the problem deeply and have seen that the root cause of the problem was related to the implementation of **intercepting `async ` methods**. Besides, there were some **`async` over `sync`** usages that effected the thread pool optimization. -Finally, we **solved all the problems** with the huge help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. +Finally, we **solved all the problems** with the great help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. -Most of the applications won't be effected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make necessary changes. +Most of the applications won't be affected by [the breaking changes](https://github.com/abpframework/abp/releases), or it will be trivial to make these necessary changes. ### Breaking Changes #### Removed Some Sync APIs -We've [removed some sync APIs](https://github.com/abpframework/abp/pull/2464) because they eventually causes async over sync problems. Because some of the interceptors need to use async APIs and if they intercept sync methods they need to call async over sync. +Some of the interceptors are required to use `async` APIs. When they intercept `sync` methods, they need to call `async` over `sync`. This eventually ends up with `async` over `sync` problem. That's why we have [removed some sync APIs](https://github.com/abpframework/abp/pull/2464). -**Async over sync** problem is a classic problem of C# when you need to **call an async method inside a sync method**. While there are some solutions to this problem, they all have **disadvantages** and it is suggested to **not write** such code at all. You can find plenty of documents related to this topic on the web, so I will not write more about it. +**`Async` over `sync`** pattern is a classical problem of `C#` when you need to **call an `async` method inside a `sync` method**. While there are some workarounds to this problem, they all have **disadvantages** and it is suggested to **not write** such code at all. You can find many documents related to this topic on the web. -So, to not cause this problem; +To avoid this problem, we have removed: -* Removed sync [Repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like Insert, Update... etc). -* Removed sync APIs of the [Unit Of Work](https://docs.abp.io/en/abp/latest/Unit-Of-Work). -* Removed sync API of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs). -* Removed sync APIs of [Audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging). +- `sync` [repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like `insert`, `update`, etc...), +- `sync` APIs of the [unit of work](https://docs.abp.io/en/abp/latest/Unit-Of-Work), +- `sync ` APIs of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs), +- `sync` APIs of the [audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging), +- some other rarely used `sync` APIs. -Also removed some other rarely used sync APIs. If you get any compile error, just use the async versions of these APIs. +If you get any compile error, just use the `async` versions of these APIs. #### Always Async! -Beginning from the v2.0, ABP framework assumes that you are writing your application code async. Otherwise, some framework funtionalities may not properly work. +Beginning from the v2.0, the ABP framework assumes that you are writing your application code `async` first. Otherwise, some framework functionalities may not properly work. -It is suggested to write async for all your [application services](https://docs.abp.io/en/abp/latest/Application-Services), [repository methods](https://docs.abp.io/en/abp/latest/Repositories), controller actions, page handlers. +It is suggested to write `async` to all your [application services](https://docs.abp.io/en/abp/latest/Application-Services), [repository methods](https://docs.abp.io/en/abp/latest/Repositories), controller actions, page handlers. -Even if your application service method doesn't need to be async, write it as async, because interceptors perform async operations (for authorization, unit of work... etc.). You can return `Task.Completed` from a method that doesn't make an async call. +Even if your application service method doesn't need to be `async` , set it as `async` , because interceptors perform `async` operations (for authorization, unit of work, etc...). You can return `Task.Completed` from a method that doesn't make an `async` call. Example: ````csharp public Task GetValueAsync() { - ... + //this method doesn't make any async call. return Task.CompletedTask(42); } ```` -The example above doesn't need to be async because it doesn't perform an async call to any service. However, making it async helps to the ABP framework to run interceptors without async over sync calls. +The example above normally doesn't need to be `async` because it doesn't perform an `async` call. However, making it `async` helps the ABP framework to run interceptors without `async` over sync calls. -This rule doesn't force you to write every method async. This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories)) +This rule doesn't force you to write every method `async` . This would not be good and would be tedious. It is only needed for the intercepted services (especially for [application services](https://docs.abp.io/en/abp/latest/Application-Services) and [repository methods](https://docs.abp.io/en/abp/latest/Repositories)) #### Other Breaking Changes -See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes while most of them will not effect your application code. +See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other breaking changes. Most of them will not affect your application code. ### New Features -This release also contains a few new features and tens of enhancements. Some of them are; +This release also contains some new features and tens of enhancements: -* [#2597](https://github.com/abpframework/abp/pull/2597) New Volo.Abp.AspNetCore.Serilog package. -* [#2526](https://github.com/abpframework/abp/issues/2526) Client side validation for the dynamic C# client proxies. -* [#2374](https://github.com/abpframework/abp/issues/2374) Async background jobs. -* [#265](https://github.com/abpframework/abp/issues/265) Managing the application shutdown. -* [#2472](https://github.com/abpframework/abp/issues/2472) Implemented DeviceFlowCodes and TokenCleanupService for the IdentityServer module. +- [#2597](https://github.com/abpframework/abp/pull/2597) New `Volo.Abp.AspNetCore.Serilog` package. +- [#2526](https://github.com/abpframework/abp/issues/2526) Client-side validation for the dynamic `C#` client proxies. +- [#2374](https://github.com/abpframework/abp/issues/2374) `Async` background jobs. +- [#265](https://github.com/abpframework/abp/issues/265) Managing the application shutdown. +- [#2472](https://github.com/abpframework/abp/issues/2472) Implemented `DeviceFlowCodes` and `TokenCleanupService` for the `IdentityServer` module. -See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the other features, enhancements and bug fixes. +See [the release notes](https://github.com/abpframework/abp/releases/tag/2.0.0) for the complete list of features, enhancements and bug fixes. ### Documentation -We've completed some missing documentation with the v2.0 release. In the next weeks, we will mostly focus on the basic documentation and tutorials. +We have completed some missing documentation with the v2.0 release. In the following weeks, we will mostly focus on the basic documentation and tutorials. ## ABP Commercial -[ABP Commercial](https://commercial.abp.io/) is a set of professional **modules, tools, themes and services** built on top of the open source ABP framework. +[ABP Commercial](https://commercial.abp.io/) is a set of professional **modules, tools, themes, and services** built on top of the open-source ABP framework. -* It provides [professional modules](https://commercial.abp.io/modules) in addition to ABP Framework's free & [open source modules](https://docs.abp.io/en/abp/latest/Modules/Index). -* It includes a beautiful [UI theme](https://commercial.abp.io/themes). -* It provides [ABP Suite](https://commercial.abp.io/tools/suite), a tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added by the time. -* [Premium support](https://commercial.abp.io/support) for enterprise companies. +- It provides [professional modules](https://commercial.abp.io/modules) in addition to the ABP Framework's free & [open source modules](https://docs.abp.io/en/abp/latest/Modules/Index). +- It includes a beautiful a [UI theme](https://commercial.abp.io/themes). +- It provides [ABP Suite](https://commercial.abp.io/tools/suite); A tool to assist your development to make you more productive. It currently can create full-stack CRUD pages in a few seconds by configuring your entity properties. More functionalities will be added over time. +- [Premium support](https://commercial.abp.io/support) for enterprise companies. In addition to these standard set of features, we will provide customer basis services. See the [commercial.abp.io](https://commercial.abp.io/) web site for other details. ### ABP Framework vs the ABP Commercial -The ABP Commercial **is not a paid version** of the ABP Framework. You can think it as **additional benefits** for professional companies. If you have budget, you can use it to save your time and develop your product faster. +The ABP Commercial **is not a paid version** of the ABP Framework. You can consider it as **set of additional benefits** for professional companies. You can use it to save your time and develop your product faster. -ABP Framework is open source & free and will always be like that. +ABP Framework is open source & free and will always be free! -As a principle, we build the main infrastructure as open source while we sell additional pre-built application features, themes and tools. If you were following the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & the [ASP.NET Zero](https://aspnetzero.com/) products, the main idea is similar. +As a principle, we build the main infrastructure as open-source and sell additional pre-built application features, themes, and tools. The main idea similar to the [ASP.NET Boilerplate](https://aspnetboilerplate.com/) & the [ASP.NET Zero](https://aspnetzero.com/) products. -Buying a commercial license saves your significant time and effort and you can focus on your own business much more, you take a dedicated and high priority support. Also, in this way, you support the ABP core team since we are spending most of our time to develop, maintain and support the open source ABP Framework. +Buying a commercial license saves you significant time and effort and you can focus on your own business, besides you get dedicated and high priority support. Also, you will be supporting the ABP core team since we are spending most of our time to develop, maintain and support the open-source ABP Framework. ### Pricing -You can build **unlimited projects/products**, sell to **unlimited customers**, host in **unlimited of servers** without any restriction. Pricing is mostly based on your **developer count**, required **support level** and **source code** access. There are three main packages; +You can build **unlimited projects/products**, sell to **unlimited customers**, host **unlimited servers** without any restriction. Pricing is mostly based on the **developer count**, **support level** and **source code** requirement. There are three main packages; -* **Team license**: Includes all the modules, themes and tools. Allows to develop your product with 3 developers. You can buy additional developer licenses. -* **Business license**: Allows to download the source code of all the modules and the themes. Also, includes 5 developer licenses by default. You can buy additional developer licenses. -* **Enterprise license**: Provides unlimited and private support in addition to the benefits of the business license. +- **Team license**: Includes all the modules, themes and tools. Allows developing your product with up to 3 developers. You can buy additional developer licenses. +- **Business license**: Allows downloading the source code of all the modules and the themes. Also, it includes 5 developer licenses by default. You can buy additional developer licenses. +- **Enterprise license**: Provides unlimited and private support in addition to the benefits of the business license. -See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have any questions. +See the [pricing page](https://commercial.abp.io/pricing) for details. In addition to the standard packages, we are also providing custom services and custom licensing. [Contact us](https://commercial.abp.io/contact) if you have further questions. #### License Comparison -The license price changes based on your developer count, required support level and source code access. +The license price changes based on your developer count, support level and source-code access. -##### The Source Code +##### The Source-Code -Team license doesn't include the source code of the pre-built modules & themes. It uses all these modules as NuGet & NPM packages. In this was, you can easily get new features and bug fixes by just updating the package dependencies. But you can't access their source code. So you don't have to possibility to embed a module's source code into your application and freely change the source code. +Team license doesn't include the source-code of the pre-built modules & themes. It uses all these modules as `NuGet` & `NPM` packages. In this way, you can easily get new features and bug fixes by just updating the package dependencies. But you can't access their source-code. So you don't have the possibility to embed a module's source code into your application and freely change the source-code. -Pre-built modules provides some level of customizability and extensibility and allows you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. So, if you don't need to make major changes on the pre-built modules, the team license will be ideal for you; Because it is cheaper and allows you to easily get new features and bug fixes. +Pre-built modules provide some level of customization and extensibility and allow you to override services, UI parts and so on. We are working on to make them much more customizable and extensible. If you don't need to make major changes in the pre-built modules, the team license will be ideal for you, because it is cheaper and allows you to easily get new features and bug fixes. -Business and Enterprise licenses allow you to download the source code of any module or theme when you need. They also uses the same startup template with the team license, so all modules are used as NuGet and NPM packages. But in case of need, you can remove the package dependencies for a module and embed its source code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely. But if you want, you should do it yourself using some merge tool or Git branch system. +Business and Enterprise licenses allow you to download the source-code of any module or the theme when you need it. They also use the same startup template with the team license, so all modules are used as `NuGet` & `NPM` packages. But in case of need, you can remove the package dependencies for a module and embed its source-code into your own solution to completely customize it. In this case, upgrading the module will not be as easy as before when a new version is available. You don't have to upgrade it, surely! But if you want, you should do it yourself using some merge tool or `Git` branch system. #### License Lifetime -ABP Commercial license is **perpetual**, that means you can **use it forever** and continue to develop your applications. +ABP Commercial license is **perpetual**, which means you can **use it forever** and continue to develop your applications. -However, the following services are for one year: +However, the following services are covered for one year: -* Premium **support** ends after one year. You can continue to get the community support. -* You can not get **updates** of the modules & themes after one year. You can continue to use the last obtained version. You can even get bug fixes and enhancements for your current major version. -* You can use the ABP **Suite** tooling for one year. +- Premium **support** ends after one year. You can continue to get community support. +- You can not get **updates** of the modules & the themes after one year. You can continue to use the last obtained version. You can even get bug fixes and enhancements for your current major version. +- You can use the **ABP Suite** tool for one year. If you want to continue to get these benefits, you can extend your license period. Renewing price is 20% less than the regular price. \ No newline at end of file From 071b3a9b32d575656efd77f4c339d36f65fe4353 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 14 Jan 2020 15:48:26 +0300 Subject: [PATCH 43/45] Update Post.md --- docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md index b87945f11b..c4646e66d1 100644 --- a/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md +++ b/docs/en/Blog-Posts/2020-01-15 v2_0_Release/Post.md @@ -10,7 +10,7 @@ In addition to the v2.0 release, we have also announced **ABP Commercial** which It was planned to release v1.2 after the [v1.1.2](https://github.com/abpframework/abp/releases/tag/1.1.2) release. However, [it is reported](https://github.com/abpframework/abp/issues/2026) that v1.x has some **performance** and **stability** issues on Linux, especially when you deploy your application to **Linux** containers with **low CPU and memory** resources. -We have investigated the problem deeply and have seen that the root cause of the problem was related to the implementation of **intercepting `async ` methods**. Besides, there were some **`async` over `sync`** usages that effected the thread pool optimization. +We have investigated the problem deeply and have seen that the root cause of the problem was related to the implementation of **intercepting `async` methods**. Besides, there were some **`async` over `sync`** usages that effected the thread pool optimization. Finally, we **solved all the problems** with the great help of the **community**. But we also had some important **design decisions** which cause some **breaking changes** and we had to change the major version number of the framework because of the **semantic versioning**. @@ -28,7 +28,7 @@ To avoid this problem, we have removed: - `sync` [repository](https://docs.abp.io/en/abp/latest/Repositories) methods (like `insert`, `update`, etc...), - `sync` APIs of the [unit of work](https://docs.abp.io/en/abp/latest/Unit-Of-Work), -- `sync ` APIs of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs), +- `sync` APIs of the [background jobs](https://docs.abp.io/en/abp/latest/Background-Jobs), - `sync` APIs of the [audit logging](https://docs.abp.io/en/abp/latest/Audit-Logging), - some other rarely used `sync` APIs. From fb4b8b8c4dcf489db4a097f433f462412f45332d Mon Sep 17 00:00:00 2001 From: olicooper Date: Tue, 14 Jan 2020 17:36:33 +0000 Subject: [PATCH 44/45] Grammatical issues on Account en.json Using "self-registration" rather than "self user registration" to align _DisplayName:Abp.Account.IsSelfRegistrationEnabled_ with _SelfRegistrationDisabledMessage_. --- .../Volo/Abp/Account/Localization/Resources/en.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json index 1f8c0f2eca..ea2d94f5f2 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json @@ -1,16 +1,16 @@ { "culture": "en", "texts": { - "UserName": "User name", + "UserName": "Username", "EmailAddress": "Email address", - "UserNameOrEmailAddress": "User name or email address", + "UserNameOrEmailAddress": "Username or email address", "Password": "Password", "RememberMe": "Remember me", "UseAnotherServiceToLogin": "Use another service to log in", "UserLockedOutMessage": "The user account has been locked out due to invalid login attempts. Please wait a while and try again.", "InvalidUserNameOrPassword": "Invalid username or password!", "LoginIsNotAllowed": "You are not allowed to login! You need to confirm your email/phone number.", - "SelfRegistrationDisabledMessage": "Self user registration is disabled for this application. Contact to the application administrator to register a new user.", + "SelfRegistrationDisabledMessage": "Self-registration is disabled for this application. Please contact the application administrator to register a new user.", "Login": "Login", "Cancel": "Cancel", "Register": "Register", @@ -23,7 +23,7 @@ "DisplayName:NewPassword": "New password", "DisplayName:NewPasswordConfirm": "Confirm new password", "PasswordChangedMessage": "Your password has been changed successfully.", - "DisplayName:UserName": "User name", + "DisplayName:UserName": "Username", "DisplayName:Email": "Email", "DisplayName:Name": "Name", "DisplayName:Surname": "Surname", @@ -39,6 +39,6 @@ "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Is self-registration enabled", "Description:Abp.Account.IsSelfRegistrationEnabled": "Whether a user can register the account by him or herself.", "DisplayName:Abp.Account.EnableLocalLogin": "Authenticate with a local account", - "Description:Abp.Account.EnableLocalLogin": "Indicates if Server will allow users to authenticate with a local account." + "Description:Abp.Account.EnableLocalLogin": "Indicates if the server will allow users to authenticate with a local account." } -} \ No newline at end of file +} From 65186e9a884944bd7a31e29a328e2333c3971dc5 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 15 Jan 2020 09:59:38 +0800 Subject: [PATCH 45/45] Output a warning if the command is not found. --- .../Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs index 060bd91cc7..70d5112e95 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs @@ -32,6 +32,13 @@ namespace Volo.Abp.Cli.Commands return Task.CompletedTask; } + if (!AbpCliOptions.Commands.ContainsKey(commandLineArgs.Target)) + { + Logger.LogWarning($"There is no command named {commandLineArgs.Target}."); + Logger.LogInformation(GetUsageInfo()); + return Task.CompletedTask; + } + var commandType = AbpCliOptions.Commands[commandLineArgs.Target]; using (var scope = ServiceScopeFactory.CreateScope())