Browse Source

Merge branch 'dev' into maliming/AbpAuthorizationException

pull/9940/head
maliming 5 years ago
parent
commit
80667180b0
  1. 12
      .github/workflows/cancel-workflow.yml
  2. 2
      docs/en/Tutorials/Part-9.md
  3. 2
      docs/en/UI/Angular/Settings.md
  4. 27
      framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Properties/launchSettings.json
  5. 1
      framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj
  6. 1
      framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj
  7. 1
      framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj
  8. 27
      framework/src/Volo.Abp.AspNetCore.Mvc.Client/Properties/launchSettings.json
  9. 1
      framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj
  10. 27
      framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json
  11. 1
      framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj
  12. 27
      framework/src/Volo.Abp.AspNetCore.SignalR/Properties/launchSettings.json
  13. 1
      framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj
  14. 27
      framework/src/Volo.Abp.AspNetCore.TestBase/Properties/launchSettings.json
  15. 1
      framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj
  16. 27
      framework/src/Volo.Abp.AspNetCore/Properties/launchSettings.json
  17. 1
      framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj
  18. 18
      framework/src/Volo.Abp.Data/Volo/Abp/Data/ConcurrencyStampExtensions.cs
  19. 25
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/BasicAggregateRoot.cs
  20. 15
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/DomainEventRecord.cs
  21. 5
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/DomainEventEntry.cs
  22. 260
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs
  23. 32
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeReport.cs
  24. 1
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs
  25. 1
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs
  26. 1
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs
  27. 22
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityEventReport.cs
  28. 1
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs
  29. 16
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs
  30. 41
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs
  31. 4
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IGeneratesDomainEvents.cs
  32. 176
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  33. 11
      framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs
  34. 12
      framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs
  35. 11
      framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs
  36. 8
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs
  37. 4
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs
  38. 29
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs
  39. 6
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs
  40. 11
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs
  41. 4
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/NullLocalEventBus.cs
  42. 40
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/UnitOfWorkEventPublisher.cs
  43. 27
      framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Properties/launchSettings.json
  44. 1
      framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj
  45. 59
      framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs
  46. 65
      framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs
  47. 13
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs
  48. 14
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs
  49. 14
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/EventOrderGenerator.cs
  50. 2
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs
  51. 10
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs
  52. 12
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkEventPublisher.cs
  53. 19
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/NullUnitOfWorkEventPublisher.cs
  54. 89
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs
  55. 29
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs
  56. 15
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs
  57. 10
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/TestUnitOfWork.cs
  58. 10
      framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DomainEvents/DomainEvents_Tests.cs
  59. 119
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs
  60. 16
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs
  61. 1
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs
  62. 4
      modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs
  63. 6
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs
  64. 2
      modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml
  65. 2
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
  66. 224
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
  67. 4
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
  68. 260
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
  69. 4
      modules/blogging/app/Volo.BloggingTestApp/package.json
  70. 332
      modules/blogging/app/Volo.BloggingTestApp/yarn.lock
  71. 5
      modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs
  72. 2
      modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs
  73. 8
      modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs
  74. 5
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CommentWithDetailsDto.cs
  75. 4
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs
  76. 2
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/IPostAppService.cs
  77. 5
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs
  78. 6
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs
  79. 2
      modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Tagging/ITagAppService.cs
  80. 2
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAppService.cs
  81. 38
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
  82. 2
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Tagging/TagAppService.cs
  83. 4
      modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs
  84. 4
      modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs
  85. 3
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml
  86. 3
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml
  87. 7
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs
  88. 4
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml.cs
  89. 3
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js
  90. 2
      modules/blogging/test/Volo.Blogging.Application.Tests/Volo/Blogging/PostAppService_Tests.cs
  91. 2
      modules/blogging/test/Volo.Blogging.Application.Tests/Volo/Blogging/TagAppService_Tests.cs
  92. 2
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
  93. 238
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
  94. 10
      modules/cms-kit/angular/package.json
  95. 4
      modules/cms-kit/angular/projects/cms-kit/package.json
  96. 2
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
  97. 238
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
  98. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
  99. 238
      modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
  100. 2036
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.Designer.cs

12
.github/workflows/cancel-workflow.yml

@ -0,0 +1,12 @@
name: cancel-workflow
on: [push]
jobs:
cancel:
name: 'Cancel Previous Runs'
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: styfle/cancel-workflow-action@0.6.0
with:
workflow_id: 10629,1299107,2792859,8268314
access_token: ${{ github.token }}

2
docs/en/Tutorials/Part-9.md

@ -1022,7 +1022,7 @@ Create a new Razor Component Page, `/Pages/Authors.razor`, in the `Acme.BookStor
</Modal>
````
* This code is similar to the `Books.razor`, except it doesn't inherit from the `BlazorisePageBase`, but uses its own implementation.
* This code is similar to the `Books.razor`, except it doesn't inherit from the `AbpCrudPageBase`, but uses its own implementation.
* Injects the `IAuthorAppService` to consume the server side HTTP APIs from the UI. We can directly inject application service interfaces and use just like regular method calls by the help of [Dynamic C# HTTP API Client Proxy System](../API/Dynamic-CSharp-API-Clients.md), which performs REST API calls for us. See the `Authors` class below to see the usage.
* Injects the `IAuthorizationService` to check [permissions](../Authorization.md).
* Injects the `IObjectMapper` for [object to object mapping](../Object-To-Object-Mapping.md).

2
docs/en/UI/Angular/Settings.md

@ -2,7 +2,7 @@
You can get settings on the client-side using the [config state service](./Config-State.md) if they are allowed by their setting definition on the server-side.
> This document only explains how settings work in the Angular UI projects. See the [settings document](../../../Settings.md) to understand the ABP setting system.
> This document only explains how settings work in the Angular UI projects. See the [settings document](../../Settings.md) to understand the ABP setting system.
## Before Use

27
framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Properties/launchSettings.json

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53601/",
"sslPort": 44330
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Volo.Abp.AspNetCore.Authentication.OAuth": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}

1
framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj

@ -13,6 +13,7 @@
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<RootNamespace />
</PropertyGroup>

1
framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj

@ -7,6 +7,7 @@
<TargetFramework>net5.0</TargetFramework>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
</PropertyGroup>
<ItemGroup>

1
framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj

@ -7,6 +7,7 @@
<TargetFramework>net5.0</TargetFramework>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<RootNamespace />
</PropertyGroup>

27
framework/src/Volo.Abp.AspNetCore.Mvc.Client/Properties/launchSettings.json

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53603/",
"sslPort": 44305
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Volo.Abp.AspNetCore.Mvc.Client": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}

1
framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj

@ -13,6 +13,7 @@
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<RootNamespace />
</PropertyGroup>

27
framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53606/",
"sslPort": 44319
}
},
"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"
}
}
}

1
framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj

@ -13,6 +13,7 @@
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<RootNamespace />
</PropertyGroup>

27
framework/src/Volo.Abp.AspNetCore.SignalR/Properties/launchSettings.json

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53611/",
"sslPort": 44331
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Volo.Abp.AspNetCore.SignalR": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}

1
framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj

@ -13,6 +13,7 @@
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<RootNamespace />
</PropertyGroup>

27
framework/src/Volo.Abp.AspNetCore.TestBase/Properties/launchSettings.json

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53599/",
"sslPort": 44358
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Volo.Abp.AspNetCore.TestBase": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}

1
framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj

@ -13,6 +13,7 @@
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<RootNamespace />
</PropertyGroup>

27
framework/src/Volo.Abp.AspNetCore/Properties/launchSettings.json

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53596/",
"sslPort": 44300
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Volo.Abp.AspNetCore": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}

1
framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj

@ -13,6 +13,7 @@
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<RootNamespace />
</PropertyGroup>

18
framework/src/Volo.Abp.Data/Volo/Abp/Data/ConcurrencyStampExtensions.cs

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using Volo.Abp.Domain.Entities;
using JetBrains.Annotations;
namespace Volo.Abp.Data
{
public static class ConcurrencyStampExtensions
{
public static void SetConcurrencyStampIfNotNull(this IHasConcurrencyStamp entity, [CanBeNull] string concurrencyStamp)
{
if (!concurrencyStamp.IsNullOrEmpty())
{
entity.ConcurrencyStamp = concurrencyStamp;
}
}
}
}

25
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/BasicAggregateRoot.cs

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Volo.Abp.Uow;
namespace Volo.Abp.Domain.Entities
{
@ -9,15 +10,15 @@ namespace Volo.Abp.Domain.Entities
IAggregateRoot,
IGeneratesDomainEvents
{
private readonly ICollection<object> _distributedEvents = new Collection<object>();
private readonly ICollection<object> _localEvents = new Collection<object>();
private readonly ICollection<DomainEventRecord> _distributedEvents = new Collection<DomainEventRecord>();
private readonly ICollection<DomainEventRecord> _localEvents = new Collection<DomainEventRecord>();
public virtual IEnumerable<object> GetLocalEvents()
public virtual IEnumerable<DomainEventRecord> GetLocalEvents()
{
return _localEvents;
}
public virtual IEnumerable<object> GetDistributedEvents()
public virtual IEnumerable<DomainEventRecord> GetDistributedEvents()
{
return _distributedEvents;
}
@ -34,12 +35,12 @@ namespace Volo.Abp.Domain.Entities
protected virtual void AddLocalEvent(object eventData)
{
_localEvents.Add(eventData);
_localEvents.Add(new DomainEventRecord(eventData, EventOrderGenerator.GetNext()));
}
protected virtual void AddDistributedEvent(object eventData)
{
_distributedEvents.Add(eventData);
_distributedEvents.Add(new DomainEventRecord(eventData, EventOrderGenerator.GetNext()));
}
}
@ -48,8 +49,8 @@ namespace Volo.Abp.Domain.Entities
IAggregateRoot<TKey>,
IGeneratesDomainEvents
{
private readonly ICollection<object> _distributedEvents = new Collection<object>();
private readonly ICollection<object> _localEvents = new Collection<object>();
private readonly ICollection<DomainEventRecord> _distributedEvents = new Collection<DomainEventRecord>();
private readonly ICollection<DomainEventRecord> _localEvents = new Collection<DomainEventRecord>();
protected BasicAggregateRoot()
{
@ -62,12 +63,12 @@ namespace Volo.Abp.Domain.Entities
}
public virtual IEnumerable<object> GetLocalEvents()
public virtual IEnumerable<DomainEventRecord> GetLocalEvents()
{
return _localEvents;
}
public virtual IEnumerable<object> GetDistributedEvents()
public virtual IEnumerable<DomainEventRecord> GetDistributedEvents()
{
return _distributedEvents;
}
@ -84,12 +85,12 @@ namespace Volo.Abp.Domain.Entities
protected virtual void AddLocalEvent(object eventData)
{
_localEvents.Add(eventData);
_localEvents.Add(new DomainEventRecord(eventData, EventOrderGenerator.GetNext()));
}
protected virtual void AddDistributedEvent(object eventData)
{
_distributedEvents.Add(eventData);
_distributedEvents.Add(new DomainEventRecord(eventData, EventOrderGenerator.GetNext()));
}
}
}

15
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/DomainEventRecord.cs

@ -0,0 +1,15 @@
namespace Volo.Abp.Domain.Entities
{
public class DomainEventRecord
{
public object EventData { get; }
public long EventOrder { get; }
public DomainEventRecord(object eventData, long eventOrder)
{
EventData = eventData;
EventOrder = eventOrder;
}
}
}

5
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/DomainEventEntry.cs

@ -8,11 +8,14 @@ namespace Volo.Abp.Domain.Entities.Events
public object SourceEntity { get; }
public object EventData { get; }
public long EventOrder { get; }
public DomainEventEntry(object sourceEntity, object eventData)
public DomainEventEntry(object sourceEntity, object eventData, long eventOrder)
{
SourceEntity = sourceEntity;
EventData = eventData;
EventOrder = eventOrder;
}
}
}

260
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs

@ -1,11 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Volo.Abp.Auditing;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.DynamicProxy;
@ -21,6 +18,8 @@ namespace Volo.Abp.Domain.Entities.Events
/// </summary>
public class EntityChangeEventHelper : IEntityChangeEventHelper, ITransientDependency
{
private const string UnitOfWorkEventRecordEntityPropName = "_Abp_Entity";
public ILogger<EntityChangeEventHelper> Logger { get; set; }
public ILocalEventBus LocalEventBus { get; set; }
public IDistributedEventBus DistributedEventBus { get; set; }
@ -43,37 +42,25 @@ namespace Volo.Abp.Domain.Entities.Events
Logger = NullLogger<EntityChangeEventHelper>.Instance;
}
public async Task TriggerEventsAsync(EntityChangeReport changeReport)
public virtual void PublishEntityCreatingEvent(object entity)
{
await TriggerEventsInternalAsync(changeReport);
if (changeReport.IsEmpty() || UnitOfWorkManager.Current == null)
{
return;
}
await UnitOfWorkManager.Current.SaveChangesAsync();
}
public virtual async Task TriggerEntityCreatingEventAsync(object entity)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
LocalEventBus,
#pragma warning disable 618
typeof(EntityCreatingEventData<>),
#pragma warning restore 618
entity,
entity,
true
entity
);
}
public virtual async Task TriggerEntityCreatedEventOnUowCompletedAsync(object entity)
public virtual void PublishEntityCreatedEvent(object entity)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
LocalEventBus,
typeof(EntityCreatedEventData<>),
entity,
entity,
false
entity
);
if (ShouldPublishDistributedEventForEntity(entity))
@ -81,12 +68,11 @@ namespace Volo.Abp.Domain.Entities.Events
var eto = EntityToEtoMapper.Map(entity);
if (eto != null)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
DistributedEventBus,
typeof(EntityCreatedEto<>),
eto,
entity,
false
entity
);
}
}
@ -103,25 +89,25 @@ namespace Volo.Abp.Domain.Entities.Events
);
}
public virtual async Task TriggerEntityUpdatingEventAsync(object entity)
public virtual void PublishEntityUpdatingEvent(object entity)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
LocalEventBus,
#pragma warning disable 618
typeof(EntityUpdatingEventData<>),
#pragma warning restore 618
entity,
entity,
true
entity
);
}
public virtual async Task TriggerEntityUpdatedEventOnUowCompletedAsync(object entity)
public virtual void PublishEntityUpdatedEvent(object entity)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
LocalEventBus,
typeof(EntityUpdatedEventData<>),
entity,
entity,
false
entity
);
if (ShouldPublishDistributedEventForEntity(entity))
@ -129,36 +115,35 @@ namespace Volo.Abp.Domain.Entities.Events
var eto = EntityToEtoMapper.Map(entity);
if (eto != null)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
DistributedEventBus,
typeof(EntityUpdatedEto<>),
eto,
entity,
false
entity
);
}
}
}
public virtual async Task TriggerEntityDeletingEventAsync(object entity)
public virtual void PublishEntityDeletingEvent(object entity)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
LocalEventBus,
#pragma warning disable 618
typeof(EntityDeletingEventData<>),
#pragma warning restore 618
entity,
entity,
true
entity
);
}
public virtual async Task TriggerEntityDeletedEventOnUowCompletedAsync(object entity)
public virtual void PublishEntityDeletedEvent(object entity)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
LocalEventBus,
typeof(EntityDeletedEventData<>),
entity,
entity,
false
entity
);
if (ShouldPublishDistributedEventForEntity(entity))
@ -166,183 +151,78 @@ namespace Volo.Abp.Domain.Entities.Events
var eto = EntityToEtoMapper.Map(entity);
if (eto != null)
{
await TriggerEventWithEntity(
TriggerEventWithEntity(
DistributedEventBus,
typeof(EntityDeletedEto<>),
eto,
entity,
false
entity
);
}
}
}
protected virtual async Task TriggerEventsInternalAsync(EntityChangeReport changeReport)
{
await TriggerEntityChangeEvents(changeReport.ChangedEntities);
await TriggerLocalEvents(changeReport.DomainEvents);
await TriggerDistributedEvents(changeReport.DistributedEvents);
}
protected virtual async Task TriggerEntityChangeEvents(List<EntityChangeEntry> changedEntities)
{
foreach (var changedEntity in changedEntities)
{
switch (changedEntity.ChangeType)
{
case EntityChangeType.Created:
await TriggerEntityCreatingEventAsync(changedEntity.Entity);
await TriggerEntityCreatedEventOnUowCompletedAsync(changedEntity.Entity);
break;
case EntityChangeType.Updated:
await TriggerEntityUpdatingEventAsync(changedEntity.Entity);
await TriggerEntityUpdatedEventOnUowCompletedAsync(changedEntity.Entity);
break;
case EntityChangeType.Deleted:
await TriggerEntityDeletingEventAsync(changedEntity.Entity);
await TriggerEntityDeletedEventOnUowCompletedAsync(changedEntity.Entity);
break;
default:
throw new AbpException("Unknown EntityChangeType: " + changedEntity.ChangeType);
}
}
}
protected virtual async Task TriggerLocalEvents(List<DomainEventEntry> localEvents)
{
foreach (var localEvent in localEvents)
{
await LocalEventBus.PublishAsync(localEvent.EventData.GetType(), localEvent.EventData);
}
}
protected virtual async Task TriggerDistributedEvents(List<DomainEventEntry> distributedEvents)
{
foreach (var distributedEvent in distributedEvents)
{
await DistributedEventBus.PublishAsync(distributedEvent.EventData.GetType(),
distributedEvent.EventData);
}
}
protected virtual async Task TriggerEventWithEntity(
protected virtual void TriggerEventWithEntity(
IEventBus eventPublisher,
Type genericEventType,
object entityOrEto,
object originalEntity,
bool triggerInCurrentUnitOfWork)
object originalEntity)
{
var entityType = ProxyHelper.UnProxy(entityOrEto).GetType();
var eventType = genericEventType.MakeGenericType(entityType);
var eventData = Activator.CreateInstance(eventType, entityOrEto);
var currentUow = UnitOfWorkManager.Current;
if (triggerInCurrentUnitOfWork || currentUow == null)
if (currentUow == null)
{
await eventPublisher.PublishAsync(
eventType,
Activator.CreateInstance(eventType, entityOrEto)
);
Logger.LogWarning("UnitOfWorkManager.Current is null! Can not publish the event.");
return;
}
var eventList = GetEventList(currentUow);
var isFirstEvent = !eventList.Any();
eventList.AddUniqueEvent(eventPublisher, eventType, entityOrEto, originalEntity);
/* Register to OnCompleted if this is the first item.
* Other items will already be in the list once the UOW completes.
var eventRecord = new UnitOfWorkEventRecord(eventType, eventData, EventOrderGenerator.GetNext())
{
Properties =
{
{ UnitOfWorkEventRecordEntityPropName, originalEntity },
}
};
/* We are trying to eliminate same events for the same entity.
* In this way, for example, we don't trigger update event for an entity multiple times
* even if it is updated multiple times in the current UOW.
*/
if (isFirstEvent)
if (eventPublisher == DistributedEventBus)
{
currentUow.OnCompleted(
async () =>
{
foreach (var eventEntry in eventList)
{
try
{
await eventEntry.EventBus.PublishAsync(
eventEntry.EventType,
Activator.CreateInstance(eventEntry.EventType, eventEntry.EntityOrEto)
);
}
catch (Exception ex)
{
Logger.LogError(
$"Caught an exception while publishing the event '{eventType.FullName}' for the entity '{entityOrEto}'");
Logger.LogException(ex);
}
}
}
currentUow.AddOrReplaceDistributedEvent(
eventRecord,
otherRecord => IsSameEntityEventRecord(eventRecord, otherRecord)
);
}
}
private EntityChangeEventList GetEventList(IUnitOfWork currentUow)
{
return (EntityChangeEventList) currentUow.Items.GetOrAdd(
"AbpEntityChangeEventList",
() => new EntityChangeEventList()
);
}
private class EntityChangeEventList : List<EntityChangeEventEntry>
{
public void AddUniqueEvent(IEventBus eventBus, Type eventType, object entityOrEto, object originalEntity)
else
{
var newEntry = new EntityChangeEventEntry(eventBus, eventType, entityOrEto, originalEntity);
//Latest "same" event overrides the previous events.
for (var i = 0; i < Count; i++)
{
if (this[i].IsSameEvent(newEntry))
{
this[i] = newEntry;
return;
}
}
//If this is a "new" event, add to the end
Add(newEntry);
currentUow.AddOrReplaceLocalEvent(
eventRecord,
otherRecord => IsSameEntityEventRecord(eventRecord, otherRecord)
);
}
}
private class EntityChangeEventEntry
public bool IsSameEntityEventRecord(UnitOfWorkEventRecord record1, UnitOfWorkEventRecord record2)
{
public IEventBus EventBus { get; }
public Type EventType { get; }
public object EntityOrEto { get; }
public object OriginalEntity { get; }
public EntityChangeEventEntry(IEventBus eventBus, Type eventType, object entityOrEto, object originalEntity)
if (record1.EventType != record2.EventType)
{
EventType = eventType;
EntityOrEto = entityOrEto;
OriginalEntity = originalEntity;
EventBus = eventBus;
return false;
}
public bool IsSameEvent(EntityChangeEventEntry otherEntry)
{
if (EventBus != otherEntry.EventBus || EventType != otherEntry.EventType)
{
return false;
}
var originalEntityRef = OriginalEntity as IEntity;
var otherOriginalEntityRef = otherEntry.OriginalEntity as IEntity;
if (originalEntityRef == null || otherOriginalEntityRef == null)
{
return false;
}
var record1OriginalEntity = record1.Properties.GetOrDefault(UnitOfWorkEventRecordEntityPropName) as IEntity;
var record2OriginalEntity = record2.Properties.GetOrDefault(UnitOfWorkEventRecordEntityPropName) as IEntity;
return EntityHelper.EntityEquals(originalEntityRef, otherOriginalEntityRef);
if (record1OriginalEntity == null || record2OriginalEntity == null)
{
return false;
}
return EntityHelper.EntityEquals(record1OriginalEntity, record2OriginalEntity);
}
}
}

32
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeReport.cs

@ -1,32 +0,0 @@
using System.Collections.Generic;
namespace Volo.Abp.Domain.Entities.Events
{
public class EntityChangeReport
{
public List<EntityChangeEntry> ChangedEntities { get; }
public List<DomainEventEntry> DomainEvents { get; }
public List<DomainEventEntry> DistributedEvents { get; }
public EntityChangeReport()
{
ChangedEntities = new List<EntityChangeEntry>();
DomainEvents = new List<DomainEventEntry>();
DistributedEvents = new List<DomainEventEntry>();
}
public bool IsEmpty()
{
return ChangedEntities.Count <= 0 &&
DomainEvents.Count <= 0 &&
DistributedEvents.Count <= 0;
}
public override string ToString()
{
return $"[EntityChangeReport] ChangedEntities: {ChangedEntities.Count}, DomainEvents: {DomainEvents.Count}, DistributedEvents: {DistributedEvents.Count}";
}
}
}

1
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs

@ -8,6 +8,7 @@ namespace Volo.Abp.Domain.Entities.Events
/// </summary>
/// <typeparam name="TEntity">Entity type</typeparam>
[Serializable]
[Obsolete("This event is no longer needed and identical to EntityChangedEventData. Please use EntityChangedEventData instead.")]
public class EntityChangingEventData<TEntity> : EntityEventData<TEntity>
{
/// <summary>

1
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs

@ -7,6 +7,7 @@ namespace Volo.Abp.Domain.Entities.Events
/// </summary>
/// <typeparam name="TEntity">Entity type</typeparam>
[Serializable]
[Obsolete("This event is no longer needed and identical to EntityCreatedEventData. Please use EntityCreatedEventData instead.")]
public class EntityCreatingEventData<TEntity> : EntityChangingEventData<TEntity>
{
/// <summary>

1
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs

@ -7,6 +7,7 @@ namespace Volo.Abp.Domain.Entities.Events
/// </summary>
/// <typeparam name="TEntity">Entity type</typeparam>
[Serializable]
[Obsolete("This event is no longer needed and identical to EntityDeleteEventData. Please use EntityDeleteEventData instead.")]
public class EntityDeletingEventData<TEntity> : EntityChangingEventData<TEntity>
{
/// <summary>

22
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityEventReport.cs

@ -0,0 +1,22 @@
using System.Collections.Generic;
namespace Volo.Abp.Domain.Entities.Events
{
public class EntityEventReport
{
public List<DomainEventEntry> DomainEvents { get; }
public List<DomainEventEntry> DistributedEvents { get; }
public EntityEventReport()
{
DomainEvents = new List<DomainEventEntry>();
DistributedEvents = new List<DomainEventEntry>();
}
public override string ToString()
{
return $"[{nameof(EntityEventReport)}] DomainEvents: {DomainEvents.Count}, DistributedEvents: {DistributedEvents.Count}";
}
}
}

1
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs

@ -7,6 +7,7 @@ namespace Volo.Abp.Domain.Entities.Events
/// </summary>
/// <typeparam name="TEntity">Entity type</typeparam>
[Serializable]
[Obsolete("This event is no longer needed and identical to EntityUpdatedEventData. Please use EntityUpdatedEventData instead.")]
public class EntityUpdatingEventData<TEntity> : EntityChangingEventData<TEntity>
{
/// <summary>

16
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs

@ -1,5 +1,3 @@
using System.Threading.Tasks;
namespace Volo.Abp.Domain.Entities.Events
{
/// <summary>
@ -7,15 +5,13 @@ namespace Volo.Abp.Domain.Entities.Events
/// </summary>
public interface IEntityChangeEventHelper
{
Task TriggerEventsAsync(EntityChangeReport changeReport);
Task TriggerEntityCreatingEventAsync(object entity);
Task TriggerEntityCreatedEventOnUowCompletedAsync(object entity);
void PublishEntityCreatingEvent(object entity);
void PublishEntityCreatedEvent(object entity);
Task TriggerEntityUpdatingEventAsync(object entity);
Task TriggerEntityUpdatedEventOnUowCompletedAsync(object entity);
void PublishEntityUpdatingEvent(object entity);
void PublishEntityUpdatedEvent(object entity);
Task TriggerEntityDeletingEventAsync(object entity);
Task TriggerEntityDeletedEventOnUowCompletedAsync(object entity);
void PublishEntityDeletingEvent(object entity);
void PublishEntityDeletedEvent(object entity);
}
}

41
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs

@ -1,5 +1,3 @@
using System.Threading.Tasks;
namespace Volo.Abp.Domain.Entities.Events
{
/// <summary>
@ -14,57 +12,30 @@ namespace Volo.Abp.Domain.Entities.Events
private NullEntityChangeEventHelper()
{
}
public Task TriggerEntityCreatingEventAsync(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEntityCreatedEventAsync(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEntityCreatedEventOnUowCompletedAsync(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEntityUpdatingEventAsync(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEntityUpdatedEventAsync(object entity)
public void PublishEntityCreatingEvent(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEntityUpdatedEventOnUowCompletedAsync(object entity)
public void PublishEntityCreatedEvent(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEntityDeletingEventAsync(object entity)
public void PublishEntityUpdatingEvent(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEntityDeletedEventAsync(object entity)
public void PublishEntityUpdatedEvent(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEntityDeletedEventOnUowCompletedAsync(object entity)
public void PublishEntityDeletingEvent(object entity)
{
return Task.CompletedTask;
}
public Task TriggerEventsAsync(EntityChangeReport changeReport)
public void PublishEntityDeletedEvent(object entity)
{
return Task.CompletedTask;
}
}
}

4
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IGeneratesDomainEvents.cs

@ -6,9 +6,9 @@ namespace Volo.Abp.Domain.Entities
public interface IGeneratesDomainEvents
{
IEnumerable<object> GetLocalEvents();
IEnumerable<DomainEventRecord> GetLocalEvents();
IEnumerable<object> GetDistributedEvents();
IEnumerable<DomainEventRecord> GetDistributedEvents();
void ClearLocalEvents();

176
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

@ -22,6 +22,8 @@ using Volo.Abp.Domain.Repositories;
using Volo.Abp.EntityFrameworkCore.EntityHistory;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Volo.Abp.EntityFrameworkCore.ValueConverters;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
using Volo.Abp.ObjectExtending;
@ -59,6 +61,10 @@ namespace Volo.Abp.EntityFrameworkCore
public IUnitOfWorkManager UnitOfWorkManager => LazyServiceProvider.LazyGetRequiredService<IUnitOfWorkManager>();
public IClock Clock => LazyServiceProvider.LazyGetRequiredService<IClock>();
public IDistributedEventBus DistributedEventBus => LazyServiceProvider.LazyGetRequiredService<IDistributedEventBus>();
public ILocalEventBus LocalEventBus => LazyServiceProvider.LazyGetRequiredService<ILocalEventBus>();
public ILogger<AbpDbContext<TDbContext>> Logger => LazyServiceProvider.LazyGetService<ILogger<AbpDbContext<TDbContext>>>(NullLogger<AbpDbContext<TDbContext>>.Instance);
@ -150,20 +156,21 @@ namespace Volo.Abp.EntityFrameworkCore
try
{
var auditLog = AuditingManager?.Current?.Log;
List<EntityChangeInfo> entityChangeList = null;
if (auditLog != null)
{
entityChangeList = EntityHistoryHelper.CreateChangeList(ChangeTracker.Entries().ToList());
}
var changeReport = ApplyAbpConcepts();
ApplyAbpConcepts();
var eventReport = CreateEventReport();
var result = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
await EntityChangeEventHelper.TriggerEventsAsync(changeReport);
if (auditLog != null)
PublishEntityEvents(eventReport);
if (entityChangeList != null)
{
EntityHistoryHelper.UpdateChangeList(entityChangeList);
auditLog.EntityChanges.AddRange(entityChangeList);
@ -182,6 +189,23 @@ namespace Volo.Abp.EntityFrameworkCore
}
}
private void PublishEntityEvents(EntityEventReport changeReport)
{
foreach (var localEvent in changeReport.DomainEvents)
{
UnitOfWorkManager.Current?.AddOrReplaceLocalEvent(
new UnitOfWorkEventRecord(localEvent.EventData.GetType(), localEvent.EventData, localEvent.EventOrder)
);
}
foreach (var distributedEvent in changeReport.DistributedEvents)
{
UnitOfWorkManager.Current?.AddOrReplaceDistributedEvent(
new UnitOfWorkEventRecord(distributedEvent.EventData.GetType(), distributedEvent.EventData, distributedEvent.EventOrder)
);
}
}
/// <summary>
/// This method will call the DbContext <see cref="SaveChangesAsync(bool, CancellationToken)"/> method directly of EF Core, which doesn't apply concepts of abp.
/// </summary>
@ -202,11 +226,18 @@ namespace Volo.Abp.EntityFrameworkCore
ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges;
ChangeTracker.Tracked += ChangeTracker_Tracked;
ChangeTracker.StateChanged += ChangeTracker_StateChanged;
}
protected virtual void ChangeTracker_Tracked(object sender, EntityTrackedEventArgs e)
{
FillExtraPropertiesForTrackedEntities(e);
PublishEventsForTrackedEntity(e.Entry);
}
protected virtual void ChangeTracker_StateChanged(object sender, EntityStateChangedEventArgs e)
{
PublishEventsForTrackedEntity(e.Entry);
}
protected virtual void FillExtraPropertiesForTrackedEntities(EntityTrackedEventArgs e)
@ -254,37 +285,107 @@ namespace Volo.Abp.EntityFrameworkCore
}
}
}
protected virtual EntityChangeReport ApplyAbpConcepts()
private void PublishEventsForTrackedEntity(EntityEntry entry)
{
var changeReport = new EntityChangeReport();
switch (entry.State)
{
case EntityState.Added:
EntityChangeEventHelper.PublishEntityCreatingEvent(entry.Entity);
EntityChangeEventHelper.PublishEntityCreatedEvent(entry.Entity);
break;
case EntityState.Modified:
if (entry.Properties.Any(x => x.IsModified && x.Metadata.ValueGenerated == ValueGenerated.Never))
{
if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
{
EntityChangeEventHelper.PublishEntityDeletingEvent(entry.Entity);
EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity);
}
else
{
EntityChangeEventHelper.PublishEntityUpdatingEvent(entry.Entity);
EntityChangeEventHelper.PublishEntityUpdatedEvent(entry.Entity);
}
}
break;
case EntityState.Deleted:
EntityChangeEventHelper.PublishEntityDeletingEvent(entry.Entity);
EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity);
break;
}
}
protected virtual void ApplyAbpConcepts()
{
foreach (var entry in ChangeTracker.Entries().ToList())
{
ApplyAbpConcepts(entry, changeReport);
ApplyAbpConcepts(entry);
}
return changeReport;
}
protected virtual EntityEventReport CreateEventReport()
{
var eventReport = new EntityEventReport();
foreach (var entry in ChangeTracker.Entries().ToList())
{
var generatesDomainEventsEntity = entry.Entity as IGeneratesDomainEvents;
if (generatesDomainEventsEntity == null)
{
continue;
}
protected virtual void ApplyAbpConcepts(EntityEntry entry, EntityChangeReport changeReport)
var localEvents = generatesDomainEventsEntity.GetLocalEvents()?.ToArray();
if (localEvents != null && localEvents.Any())
{
eventReport.DomainEvents.AddRange(
localEvents.Select(
eventRecord => new DomainEventEntry(
entry.Entity,
eventRecord.EventData,
eventRecord.EventOrder
)
)
);
generatesDomainEventsEntity.ClearLocalEvents();
}
var distributedEvents = generatesDomainEventsEntity.GetDistributedEvents()?.ToArray();
if (distributedEvents != null && distributedEvents.Any())
{
eventReport.DistributedEvents.AddRange(
distributedEvents.Select(
eventRecord => new DomainEventEntry(
entry.Entity,
eventRecord.EventData,
eventRecord.EventOrder)
)
);
generatesDomainEventsEntity.ClearDistributedEvents();
}
}
return eventReport;
}
protected virtual void ApplyAbpConcepts(EntityEntry entry)
{
switch (entry.State)
{
case EntityState.Added:
ApplyAbpConceptsForAddedEntity(entry, changeReport);
ApplyAbpConceptsForAddedEntity(entry);
break;
case EntityState.Modified:
ApplyAbpConceptsForModifiedEntity(entry, changeReport);
ApplyAbpConceptsForModifiedEntity(entry);
break;
case EntityState.Deleted:
ApplyAbpConceptsForDeletedEntity(entry, changeReport);
ApplyAbpConceptsForDeletedEntity(entry);
break;
}
HandleExtraPropertiesOnSave(entry);
AddDomainEvents(changeReport, entry.Entity);
}
protected virtual void HandleExtraPropertiesOnSave(EntityEntry entry)
@ -361,15 +462,14 @@ namespace Volo.Abp.EntityFrameworkCore
}
}
protected virtual void ApplyAbpConceptsForAddedEntity(EntityEntry entry, EntityChangeReport changeReport)
protected virtual void ApplyAbpConceptsForAddedEntity(EntityEntry entry)
{
CheckAndSetId(entry);
SetConcurrencyStampIfNull(entry);
SetCreationAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Created));
}
protected virtual void ApplyAbpConceptsForModifiedEntity(EntityEntry entry, EntityChangeReport changeReport)
protected virtual void ApplyAbpConceptsForModifiedEntity(EntityEntry entry)
{
if (entry.State == EntityState.Modified && entry.Properties.Any(x => x.IsModified && x.Metadata.ValueGenerated == ValueGenerated.Never))
{
@ -379,24 +479,17 @@ namespace Volo.Abp.EntityFrameworkCore
if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
{
SetDeletionAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
}
else
{
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Updated));
}
}
}
protected virtual void ApplyAbpConceptsForDeletedEntity(EntityEntry entry, EntityChangeReport changeReport)
protected virtual void ApplyAbpConceptsForDeletedEntity(EntityEntry entry)
{
if (TryCancelDeletionForSoftDelete(entry))
{
UpdateConcurrencyStamp(entry);
SetDeletionAuditProperties(entry);
}
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
}
protected virtual bool IsHardDeleted(EntityEntry entry)
@ -410,29 +503,6 @@ namespace Volo.Abp.EntityFrameworkCore
return hardDeletedEntities.Contains(entry.Entity);
}
protected virtual void AddDomainEvents(EntityChangeReport changeReport, object entityAsObj)
{
var generatesDomainEventsEntity = entityAsObj as IGeneratesDomainEvents;
if (generatesDomainEventsEntity == null)
{
return;
}
var localEvents = generatesDomainEventsEntity.GetLocalEvents()?.ToArray();
if (localEvents != null && localEvents.Any())
{
changeReport.DomainEvents.AddRange(localEvents.Select(eventData => new DomainEventEntry(entityAsObj, eventData)));
generatesDomainEventsEntity.ClearLocalEvents();
}
var distributedEvents = generatesDomainEventsEntity.GetDistributedEvents()?.ToArray();
if (distributedEvents != null && distributedEvents.Any())
{
changeReport.DistributedEvents.AddRange(distributedEvents.Select(eventData => new DomainEventEntry(entityAsObj, eventData)));
generatesDomainEventsEntity.ClearDistributedEvents();
}
}
protected virtual void UpdateConcurrencyStamp(EntityEntry entry)
{
var entity = entry.Entity as IHasConcurrencyStamp;

11
framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs

@ -12,6 +12,7 @@ using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Kafka;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading;
using Volo.Abp.Uow;
namespace Volo.Abp.EventBus.Kafka
{
@ -33,6 +34,7 @@ namespace Volo.Abp.EventBus.Kafka
public KafkaDistributedEventBus(
IServiceScopeFactory serviceScopeFactory,
ICurrentTenant currentTenant,
IUnitOfWorkManager unitOfWorkManager,
IOptions<AbpKafkaEventBusOptions> abpKafkaEventBusOptions,
IKafkaMessageConsumerFactory messageConsumerFactory,
IOptions<AbpDistributedEventBusOptions> abpDistributedEventBusOptions,
@ -40,7 +42,7 @@ namespace Volo.Abp.EventBus.Kafka
IProducerPool producerPool,
IEventErrorHandler errorHandler,
IOptions<AbpEventBusOptions> abpEventBusOptions)
: base(serviceScopeFactory, currentTenant, errorHandler)
: base(serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler)
{
AbpKafkaEventBusOptions = abpKafkaEventBusOptions.Value;
AbpDistributedEventBusOptions = abpDistributedEventBusOptions.Value;
@ -165,11 +167,16 @@ namespace Volo.Abp.EventBus.Kafka
GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear());
}
public override async Task PublishAsync(Type eventType, object eventData)
protected override async Task PublishToEventBusAsync(Type eventType, object eventData)
{
await PublishAsync(eventType, eventData, new Headers {{"messageId", Serializer.Serialize(Guid.NewGuid())}}, null);
}
protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord)
{
unitOfWork.AddOrReplaceDistributedEvent(eventRecord);
}
public virtual async Task PublishAsync(Type eventType, object eventData, Headers headers, Dictionary<string, object> headersArguments)
{
await PublishAsync(AbpKafkaEventBusOptions.TopicName, eventType, eventData, headers, headersArguments);

12
framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs

@ -13,6 +13,7 @@ using Volo.Abp.EventBus.Distributed;
using Volo.Abp.MultiTenancy;
using Volo.Abp.RabbitMQ;
using Volo.Abp.Threading;
using Volo.Abp.Uow;
namespace Volo.Abp.EventBus.RabbitMq
{
@ -44,9 +45,10 @@ namespace Volo.Abp.EventBus.RabbitMq
IOptions<AbpDistributedEventBusOptions> distributedEventBusOptions,
IRabbitMqMessageConsumerFactory messageConsumerFactory,
ICurrentTenant currentTenant,
IUnitOfWorkManager unitOfWorkManager,
IEventErrorHandler errorHandler,
IOptions<AbpEventBusOptions> abpEventBusOptions)
: base(serviceScopeFactory, currentTenant, errorHandler)
: base(serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler)
{
ConnectionPool = connectionPool;
Serializer = serializer;
@ -189,14 +191,18 @@ namespace Volo.Abp.EventBus.RabbitMq
GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear());
}
public override async Task PublishAsync(Type eventType, object eventData)
protected override async Task PublishToEventBusAsync(Type eventType, object eventData)
{
await PublishAsync(eventType, eventData, null);
}
public Task PublishAsync(Type eventType, object eventData, IBasicProperties properties, Dictionary<string, object> headersArguments = null)
protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord)
{
unitOfWork.AddOrReplaceDistributedEvent(eventRecord);
}
public Task PublishAsync(Type eventType, object eventData, IBasicProperties properties, Dictionary<string, object> headersArguments = null)
{
var eventName = EventNameAttribute.GetNameOrDefault(eventType);
var body = Serializer.Serialize(eventData);

11
framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs

@ -10,6 +10,7 @@ using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading;
using Volo.Abp.Uow;
namespace Volo.Abp.EventBus.Rebus
{
@ -28,11 +29,12 @@ namespace Volo.Abp.EventBus.Rebus
public RebusDistributedEventBus(
IServiceScopeFactory serviceScopeFactory,
ICurrentTenant currentTenant,
IUnitOfWorkManager unitOfWorkManager,
IBus rebus,
IOptions<AbpDistributedEventBusOptions> abpDistributedEventBusOptions,
IOptions<AbpRebusEventBusOptions> abpEventBusRebusOptions,
IEventErrorHandler errorHandler) :
base(serviceScopeFactory, currentTenant, errorHandler)
base(serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler)
{
Rebus = rebus;
AbpRebusEventBusOptions = abpEventBusRebusOptions.Value;
@ -125,11 +127,16 @@ namespace Volo.Abp.EventBus.Rebus
return Subscribe(typeof(TEvent), handler);
}
public override async Task PublishAsync(Type eventType, object eventData)
protected override async Task PublishToEventBusAsync(Type eventType, object eventData)
{
await AbpRebusEventBusOptions.Publish(Rebus, eventType, eventData);
}
protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord)
{
unitOfWork.AddOrReplaceDistributedEvent(eventRecord);
}
private List<IEventHandlerFactory> GetOrCreateHandlerFactories(Type eventType)
{
return HandlerFactories.GetOrAdd(

8
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs

@ -122,15 +122,15 @@ namespace Volo.Abp.EventBus.Distributed
_localEventBus.UnsubscribeAll(eventType);
}
public Task PublishAsync<TEvent>(TEvent eventData)
public Task PublishAsync<TEvent>(TEvent eventData, bool onUnitOfWorkComplete = true)
where TEvent : class
{
return _localEventBus.PublishAsync(eventData);
return _localEventBus.PublishAsync(eventData, onUnitOfWorkComplete);
}
public Task PublishAsync(Type eventType, object eventData)
public Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true)
{
return _localEventBus.PublishAsync(eventType, eventData);
return _localEventBus.PublishAsync(eventType, eventData, onUnitOfWorkComplete);
}
}
}

4
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs

@ -77,12 +77,12 @@ namespace Volo.Abp.EventBus.Distributed
}
public Task PublishAsync<TEvent>(TEvent eventData) where TEvent : class
public Task PublishAsync<TEvent>(TEvent eventData, bool onUnitOfWorkComplete = true) where TEvent : class
{
return Task.CompletedTask;
}
public Task PublishAsync(Type eventType, object eventData)
public Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true)
{
return Task.CompletedTask;
}

29
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs

@ -10,6 +10,7 @@ using Volo.Abp.Collections;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Reflection;
using Volo.Abp.Uow;
namespace Volo.Abp.EventBus
{
@ -19,15 +20,19 @@ namespace Volo.Abp.EventBus
protected ICurrentTenant CurrentTenant { get; }
protected IUnitOfWorkManager UnitOfWorkManager { get; }
protected IEventErrorHandler ErrorHandler { get; }
protected EventBusBase(
IServiceScopeFactory serviceScopeFactory,
ICurrentTenant currentTenant,
IUnitOfWorkManager unitOfWorkManager,
IEventErrorHandler errorHandler)
{
ServiceScopeFactory = serviceScopeFactory;
CurrentTenant = currentTenant;
UnitOfWorkManager = unitOfWorkManager;
ErrorHandler = errorHandler;
}
@ -87,13 +92,29 @@ namespace Volo.Abp.EventBus
public abstract void UnsubscribeAll(Type eventType);
/// <inheritdoc/>
public virtual Task PublishAsync<TEvent>(TEvent eventData) where TEvent : class
public Task PublishAsync<TEvent>(TEvent eventData, bool onUnitOfWorkComplete = true) where TEvent : class
{
return PublishAsync(typeof(TEvent), eventData);
return PublishAsync(typeof(TEvent), eventData, onUnitOfWorkComplete);
}
/// <inheritdoc/>
public abstract Task PublishAsync(Type eventType, object eventData);
public async Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true)
{
if (onUnitOfWorkComplete && UnitOfWorkManager.Current != null)
{
AddToUnitOfWork(
UnitOfWorkManager.Current,
new UnitOfWorkEventRecord(eventType, eventData, EventOrderGenerator.GetNext())
);
return;
}
await PublishToEventBusAsync(eventType, eventData);
}
protected abstract Task PublishToEventBusAsync(Type eventType, object eventData);
protected abstract void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord);
public virtual async Task TriggerHandlersAsync(Type eventType, object eventData, Action<EventExecutionErrorContext> onErrorAction = null)
{
@ -133,7 +154,7 @@ namespace Volo.Abp.EventBus
var baseEventType = eventType.GetGenericTypeDefinition().MakeGenericType(baseArg);
var constructorArgs = ((IEventDataWithInheritableGenericArgument)eventData).GetConstructorArgs();
var baseEventData = Activator.CreateInstance(baseEventType, constructorArgs);
await PublishAsync(baseEventType, baseEventData);
await PublishToEventBusAsync(baseEventType, baseEventData);
}
}
}

6
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs

@ -10,8 +10,9 @@ namespace Volo.Abp.EventBus
/// </summary>
/// <typeparam name="TEvent">Event type</typeparam>
/// <param name="eventData">Related data for the event</param>
/// <param name="onUnitOfWorkComplete">True, to publish the event at the end of the current unit of work, if available</param>
/// <returns>The task to handle async operation</returns>
Task PublishAsync<TEvent>(TEvent eventData)
Task PublishAsync<TEvent>(TEvent eventData, bool onUnitOfWorkComplete = true)
where TEvent : class;
/// <summary>
@ -19,8 +20,9 @@ namespace Volo.Abp.EventBus
/// </summary>
/// <param name="eventType">Event type</param>
/// <param name="eventData">Related data for the event</param>
/// <param name="onUnitOfWorkComplete">True, to publish the event at the end of the current unit of work, if available</param>
/// <returns>The task to handle async operation</returns>
Task PublishAsync(Type eventType, object eventData);
Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true);
/// <summary>
/// Registers to an event.

11
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs

@ -12,6 +12,7 @@ using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading;
using Volo.Abp.Json;
using Volo.Abp.Uow;
namespace Volo.Abp.EventBus.Local
{
@ -34,8 +35,9 @@ namespace Volo.Abp.EventBus.Local
IOptions<AbpLocalEventBusOptions> options,
IServiceScopeFactory serviceScopeFactory,
ICurrentTenant currentTenant,
IUnitOfWorkManager unitOfWorkManager,
IEventErrorHandler errorHandler)
: base(serviceScopeFactory, currentTenant, errorHandler)
: base(serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler)
{
Options = options.Value;
Logger = NullLogger<LocalEventBus>.Instance;
@ -120,11 +122,16 @@ namespace Volo.Abp.EventBus.Local
GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear());
}
public override async Task PublishAsync(Type eventType, object eventData)
protected override async Task PublishToEventBusAsync(Type eventType, object eventData)
{
await PublishAsync(new LocalEventMessage(Guid.NewGuid(), eventData, eventType));
}
protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord)
{
unitOfWork.AddOrReplaceLocalEvent(eventRecord);
}
public virtual async Task PublishAsync(LocalEventMessage localEventMessage)
{
await TriggerHandlersAsync(localEventMessage.EventType, localEventMessage.EventData, errorContext =>

4
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/NullLocalEventBus.cs

@ -77,12 +77,12 @@ namespace Volo.Abp.EventBus.Local
}
public Task PublishAsync<TEvent>(TEvent eventData) where TEvent : class
public Task PublishAsync<TEvent>(TEvent eventData, bool onUnitOfWorkComplete = true) where TEvent : class
{
return Task.CompletedTask;
}
public Task PublishAsync(Type eventType, object eventData)
public Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true)
{
return Task.CompletedTask;
}

40
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/UnitOfWorkEventPublisher.cs

@ -0,0 +1,40 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Uow;
namespace Volo.Abp.EventBus
{
[Dependency(ReplaceServices = true)]
public class UnitOfWorkEventPublisher : IUnitOfWorkEventPublisher, ITransientDependency
{
private readonly ILocalEventBus _localEventBus;
private readonly IDistributedEventBus _distributedEventBus;
public UnitOfWorkEventPublisher(
ILocalEventBus localEventBus,
IDistributedEventBus distributedEventBus)
{
_localEventBus = localEventBus;
_distributedEventBus = distributedEventBus;
}
public async Task PublishLocalEventsAsync(IEnumerable<UnitOfWorkEventRecord> localEvents)
{
foreach (var localEvent in localEvents)
{
await _localEventBus.PublishAsync(localEvent.EventType, localEvent.EventData, onUnitOfWorkComplete: false);
}
}
public async Task PublishDistributedEventsAsync(IEnumerable<UnitOfWorkEventRecord> distributedEvents)
{
foreach (var distributedEvent in distributedEvents)
{
await _distributedEventBus.PublishAsync(distributedEvent.EventType, distributedEvent.EventData, onUnitOfWorkComplete: false);
}
}
}
}

27
framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Properties/launchSettings.json

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53610/",
"sslPort": 44304
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Volo.Abp.Http.Client.IdentityModel.Web": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}

1
framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj

@ -13,6 +13,7 @@
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<RootNamespace />
</PropertyGroup>

59
framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs

@ -12,6 +12,7 @@ using Volo.Abp.EventBus.Distributed;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Guids;
using Volo.Abp.MemoryDb;
using Volo.Abp.Uow;
namespace Volo.Abp.Domain.Repositories.MemoryDb
{
@ -65,7 +66,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
return ApplyDataFilters((await GetCollectionAsync()).AsQueryable());
}
protected virtual async Task TriggerDomainEventsAsync(object entity)
protected virtual void TriggerDomainEvents(object entity)
{
var generatesDomainEventsEntity = entity as IGeneratesDomainEvents;
if (generatesDomainEventsEntity == null)
@ -78,7 +79,13 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
{
foreach (var localEvent in localEvents)
{
await LocalEventBus.PublishAsync(localEvent.GetType(), localEvent);
UnitOfWorkManager.Current?.AddOrReplaceLocalEvent(
new UnitOfWorkEventRecord(
localEvent.EventData.GetType(),
localEvent.EventData,
localEvent.EventOrder
)
);
}
generatesDomainEventsEntity.ClearLocalEvents();
@ -89,7 +96,13 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
{
foreach (var distributedEvent in distributedEvents)
{
await DistributedEventBus.PublishAsync(distributedEvent.GetType(), distributedEvent);
UnitOfWorkManager.Current?.AddOrReplaceDistributedEvent(
new UnitOfWorkEventRecord(
distributedEvent.EventData.GetType(),
distributedEvent.EventData,
distributedEvent.EventOrder
)
);
}
generatesDomainEventsEntity.ClearDistributedEvents();
@ -143,37 +156,37 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
AuditPropertySetter.SetDeletionProperties(entity);
}
protected virtual async Task TriggerEntityCreateEvents(TEntity entity)
protected virtual void TriggerEntityCreateEvents(TEntity entity)
{
await EntityChangeEventHelper.TriggerEntityCreatedEventOnUowCompletedAsync(entity);
await EntityChangeEventHelper.TriggerEntityCreatingEventAsync(entity);
EntityChangeEventHelper.PublishEntityCreatingEvent(entity);
EntityChangeEventHelper.PublishEntityCreatedEvent(entity);
}
protected virtual async Task TriggerEntityUpdateEventsAsync(TEntity entity)
protected virtual void TriggerEntityUpdateEvents(TEntity entity)
{
await EntityChangeEventHelper.TriggerEntityUpdatedEventOnUowCompletedAsync(entity);
await EntityChangeEventHelper.TriggerEntityUpdatingEventAsync(entity);
EntityChangeEventHelper.PublishEntityUpdatingEvent(entity);
EntityChangeEventHelper.PublishEntityUpdatedEvent(entity);
}
protected virtual async Task TriggerEntityDeleteEventsAsync(TEntity entity)
protected virtual void TriggerEntityDeleteEvents(TEntity entity)
{
await EntityChangeEventHelper.TriggerEntityDeletedEventOnUowCompletedAsync(entity);
await EntityChangeEventHelper.TriggerEntityDeletingEventAsync(entity);
EntityChangeEventHelper.PublishEntityDeletingEvent(entity);
EntityChangeEventHelper.PublishEntityDeletedEvent(entity);
}
protected virtual async Task ApplyAbpConceptsForAddedEntityAsync(TEntity entity)
protected virtual void ApplyAbpConceptsForAddedEntity(TEntity entity)
{
CheckAndSetId(entity);
SetCreationAuditProperties(entity);
await TriggerEntityCreateEvents(entity);
await TriggerDomainEventsAsync(entity);
TriggerEntityCreateEvents(entity);
TriggerDomainEvents(entity);
}
protected virtual async Task ApplyAbpConceptsForDeletedEntityAsync(TEntity entity)
protected virtual void ApplyAbpConceptsForDeletedEntity(TEntity entity)
{
SetDeletionAuditProperties(entity);
await TriggerEntityDeleteEventsAsync(entity);
await TriggerDomainEventsAsync(entity);
TriggerEntityDeleteEvents(entity);
TriggerDomainEvents(entity);
}
public override async Task<TEntity> FindAsync(
@ -199,7 +212,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
bool autoSave = false,
CancellationToken cancellationToken = default)
{
await ApplyAbpConceptsForAddedEntityAsync(entity);
ApplyAbpConceptsForAddedEntity(entity);
(await GetCollectionAsync()).Add(entity);
@ -216,14 +229,14 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
if (entity is ISoftDelete softDeleteEntity && softDeleteEntity.IsDeleted)
{
SetDeletionAuditProperties(entity);
await TriggerEntityDeleteEventsAsync(entity);
TriggerEntityDeleteEvents(entity);
}
else
{
await TriggerEntityUpdateEventsAsync(entity);
TriggerEntityUpdateEvents(entity);
}
await TriggerDomainEventsAsync(entity);
TriggerDomainEvents(entity);
(await GetCollectionAsync()).Update(entity);
@ -235,7 +248,7 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb
bool autoSave = false,
CancellationToken cancellationToken = default)
{
await ApplyAbpConceptsForDeletedEntityAsync(entity);
ApplyAbpConceptsForDeletedEntity(entity);
if (entity is ISoftDelete softDeleteEntity && !IsHardDeleted(entity))
{

65
framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs

@ -17,6 +17,7 @@ using Volo.Abp.EventBus.Local;
using Volo.Abp.Guids;
using Volo.Abp.MongoDB;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
namespace Volo.Abp.Domain.Repositories.MongoDB
{
@ -182,14 +183,14 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
if (entity is ISoftDelete softDeleteEntity && softDeleteEntity.IsDeleted)
{
SetDeletionAuditProperties(entity);
await TriggerEntityDeleteEventsAsync(entity);
TriggerEntityDeleteEvents(entity);
}
else
{
await TriggerEntityUpdateEventsAsync(entity);
TriggerEntityUpdateEvents(entity);
}
await TriggerDomainEventsAsync(entity);
TriggerDomainEvents(entity);
var oldConcurrencyStamp = SetNewConcurrencyStamp(entity);
ReplaceOneResult result;
@ -235,14 +236,14 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
if (isSoftDeleteEntity)
{
SetDeletionAuditProperties(entity);
await TriggerEntityDeleteEventsAsync(entity);
TriggerEntityDeleteEvents(entity);
}
else
{
await TriggerEntityUpdateEventsAsync(entity);
TriggerEntityUpdateEvents(entity);
}
await TriggerDomainEventsAsync(entity);
TriggerDomainEvents(entity);
SetNewConcurrencyStamp(entity);
}
@ -295,7 +296,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)) && !IsHardDeleted(entity))
{
((ISoftDelete)entity).IsDeleted = true;
await ApplyAbpConceptsForDeletedEntityAsync(entity);
ApplyAbpConceptsForDeletedEntity(entity);
ReplaceOneResult result;
@ -324,7 +325,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
}
else
{
await ApplyAbpConceptsForDeletedEntityAsync(entity);
ApplyAbpConceptsForDeletedEntity(entity);
DeleteResult result;
@ -374,7 +375,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
hardDeletedEntities.Add(entity);
}
await ApplyAbpConceptsForDeletedEntityAsync(entity);
ApplyAbpConceptsForDeletedEntity(entity);
}
var dbContext = await GetDbContextAsync(cancellationToken);
@ -573,33 +574,33 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
{
CheckAndSetId(entity);
SetCreationAuditProperties(entity);
await TriggerEntityCreateEvents(entity);
await TriggerDomainEventsAsync(entity);
TriggerEntityCreateEvents(entity);
TriggerDomainEvents(entity);
}
private async Task TriggerEntityCreateEvents(TEntity entity)
private void TriggerEntityCreateEvents(TEntity entity)
{
await EntityChangeEventHelper.TriggerEntityCreatedEventOnUowCompletedAsync(entity);
await EntityChangeEventHelper.TriggerEntityCreatingEventAsync(entity);
EntityChangeEventHelper.PublishEntityCreatingEvent(entity);
EntityChangeEventHelper.PublishEntityCreatedEvent(entity);
}
protected virtual async Task TriggerEntityUpdateEventsAsync(TEntity entity)
protected virtual void TriggerEntityUpdateEvents(TEntity entity)
{
await EntityChangeEventHelper.TriggerEntityUpdatedEventOnUowCompletedAsync(entity);
await EntityChangeEventHelper.TriggerEntityUpdatingEventAsync(entity);
EntityChangeEventHelper.PublishEntityUpdatingEvent(entity);
EntityChangeEventHelper.PublishEntityUpdatedEvent(entity);
}
protected virtual async Task ApplyAbpConceptsForDeletedEntityAsync(TEntity entity)
protected virtual void ApplyAbpConceptsForDeletedEntity(TEntity entity)
{
SetDeletionAuditProperties(entity);
await TriggerEntityDeleteEventsAsync(entity);
await TriggerDomainEventsAsync(entity);
TriggerEntityDeleteEvents(entity);
TriggerDomainEvents(entity);
}
protected virtual async Task TriggerEntityDeleteEventsAsync(TEntity entity)
protected virtual void TriggerEntityDeleteEvents(TEntity entity)
{
await EntityChangeEventHelper.TriggerEntityDeletedEventOnUowCompletedAsync(entity);
await EntityChangeEventHelper.TriggerEntityDeletingEventAsync(entity);
EntityChangeEventHelper.PublishEntityDeletingEvent(entity);
EntityChangeEventHelper.PublishEntityDeletedEvent(entity);
}
protected virtual void CheckAndSetId(TEntity entity)
@ -639,7 +640,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
AuditPropertySetter.SetDeletionProperties(entity);
}
protected virtual async Task TriggerDomainEventsAsync(object entity)
protected virtual void TriggerDomainEvents(object entity)
{
var generatesDomainEventsEntity = entity as IGeneratesDomainEvents;
if (generatesDomainEventsEntity == null)
@ -652,7 +653,13 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
{
foreach (var localEvent in localEvents)
{
await LocalEventBus.PublishAsync(localEvent.GetType(), localEvent);
UnitOfWorkManager.Current?.AddOrReplaceLocalEvent(
new UnitOfWorkEventRecord(
localEvent.EventData.GetType(),
localEvent.EventData,
localEvent.EventOrder
)
);
}
generatesDomainEventsEntity.ClearLocalEvents();
@ -663,7 +670,13 @@ namespace Volo.Abp.Domain.Repositories.MongoDB
{
foreach (var distributedEvent in distributedEvents)
{
await DistributedEventBus.PublishAsync(distributedEvent.GetType(), distributedEvent);
UnitOfWorkManager.Current?.AddOrReplaceDistributedEvent(
new UnitOfWorkEventRecord(
distributedEvent.EventData.GetType(),
distributedEvent.EventData,
distributedEvent.EventOrder
)
);
}
generatesDomainEventsEntity.ClearDistributedEvents();

13
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs

@ -19,5 +19,18 @@ namespace Volo.Abp.Uow
{
_currentUow.Value = unitOfWork;
}
public IUnitOfWork GetCurrentByChecking()
{
var uow = UnitOfWork;
//Skip reserved unit of work
while (uow != null && (uow.IsReserved || uow.IsDisposed || uow.IsCompleted))
{
uow = uow.Outer;
}
return uow;
}
}
}

14
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs

@ -76,6 +76,20 @@ namespace Volo.Abp.Uow
_parent.OnCompleted(handler);
}
public void AddOrReplaceLocalEvent(
UnitOfWorkEventRecord eventRecord,
Predicate<UnitOfWorkEventRecord> replacementSelector = null)
{
_parent.AddOrReplaceLocalEvent(eventRecord, replacementSelector);
}
public void AddOrReplaceDistributedEvent(
UnitOfWorkEventRecord eventRecord,
Predicate<UnitOfWorkEventRecord> replacementSelector = null)
{
_parent.AddOrReplaceDistributedEvent(eventRecord, replacementSelector);
}
public IDatabaseApi FindDatabaseApi(string key)
{
return _parent.FindDatabaseApi(key);

14
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/EventOrderGenerator.cs

@ -0,0 +1,14 @@
using System.Threading;
namespace Volo.Abp.Uow
{
public static class EventOrderGenerator
{
private static long _lastOrder;
public static long GetNext()
{
return Interlocked.Increment(ref _lastOrder);
}
}
}

2
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs

@ -2,6 +2,6 @@
{
public interface IAmbientUnitOfWork : IUnitOfWorkAccessor
{
IUnitOfWork GetCurrentByChecking();
}
}

10
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs

@ -42,5 +42,15 @@ namespace Volo.Abp.Uow
Task RollbackAsync(CancellationToken cancellationToken = default);
void OnCompleted(Func<Task> handler);
void AddOrReplaceLocalEvent(
UnitOfWorkEventRecord eventRecord,
Predicate<UnitOfWorkEventRecord> replacementSelector = null
);
void AddOrReplaceDistributedEvent(
UnitOfWorkEventRecord eventRecord,
Predicate<UnitOfWorkEventRecord> replacementSelector = null
);
}
}

12
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkEventPublisher.cs

@ -0,0 +1,12 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.Uow
{
public interface IUnitOfWorkEventPublisher
{
Task PublishLocalEventsAsync(IEnumerable<UnitOfWorkEventRecord> localEvents);
Task PublishDistributedEventsAsync(IEnumerable<UnitOfWorkEventRecord> distributedEvents);
}
}

19
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/NullUnitOfWorkEventPublisher.cs

@ -0,0 +1,19 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Uow
{
public class NullUnitOfWorkEventPublisher : IUnitOfWorkEventPublisher, ISingletonDependency
{
public Task PublishLocalEventsAsync(IEnumerable<UnitOfWorkEventRecord> localEvents)
{
return Task.CompletedTask;
}
public Task PublishDistributedEventsAsync(IEnumerable<UnitOfWorkEventRecord> distributedEvents)
{
return Task.CompletedTask;
}
}
}

89
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
@ -33,11 +34,14 @@ namespace Volo.Abp.Uow
public string ReservationName { get; set; }
protected List<Func<Task>> CompletedHandlers { get; } = new List<Func<Task>>();
protected List<UnitOfWorkEventRecord> DistributedEvents { get; } = new List<UnitOfWorkEventRecord>();
protected List<UnitOfWorkEventRecord> LocalEvents { get; } = new List<UnitOfWorkEventRecord>();
public event EventHandler<UnitOfWorkFailedEventArgs> Failed;
public event EventHandler<UnitOfWorkEventArgs> Disposed;
public IServiceProvider ServiceProvider { get; }
protected IUnitOfWorkEventPublisher UnitOfWorkEventPublisher { get; }
[NotNull]
public Dictionary<string, object> Items { get; }
@ -50,9 +54,13 @@ namespace Volo.Abp.Uow
private bool _isCompleting;
private bool _isRolledback;
public UnitOfWork(IServiceProvider serviceProvider, IOptions<AbpUnitOfWorkDefaultOptions> options)
public UnitOfWork(
IServiceProvider serviceProvider,
IUnitOfWorkEventPublisher unitOfWorkEventPublisher,
IOptions<AbpUnitOfWorkDefaultOptions> options)
{
ServiceProvider = serviceProvider;
UnitOfWorkEventPublisher = unitOfWorkEventPublisher;
_defaultOptions = options.Value;
_databaseApis = new Dictionary<string, IDatabaseApi>();
@ -103,12 +111,12 @@ namespace Volo.Abp.Uow
}
}
public IReadOnlyList<IDatabaseApi> GetAllActiveDatabaseApis()
public virtual IReadOnlyList<IDatabaseApi> GetAllActiveDatabaseApis()
{
return _databaseApis.Values.ToImmutableList();
}
public IReadOnlyList<ITransactionApi> GetAllActiveTransactionApis()
public virtual IReadOnlyList<ITransactionApi> GetAllActiveTransactionApis()
{
return _transactionApis.Values.ToImmutableList();
}
@ -126,6 +134,30 @@ namespace Volo.Abp.Uow
{
_isCompleting = true;
await SaveChangesAsync(cancellationToken);
while (LocalEvents.Any() || DistributedEvents.Any())
{
if (LocalEvents.Any())
{
var localEventsToBePublished = LocalEvents.OrderBy(e => e.EventOrder).ToArray();
LocalEvents.Clear();
await UnitOfWorkEventPublisher.PublishLocalEventsAsync(
localEventsToBePublished
);
}
if (DistributedEvents.Any())
{
var distributedEventsToBePublished = DistributedEvents.OrderBy(e => e.EventOrder).ToArray();
DistributedEvents.Clear();
await UnitOfWorkEventPublisher.PublishDistributedEventsAsync(
distributedEventsToBePublished
);
}
await SaveChangesAsync(cancellationToken);
}
await CommitTransactionsAsync();
IsCompleted = true;
await OnCompletedAsync();
@ -149,12 +181,12 @@ namespace Volo.Abp.Uow
await RollbackAllAsync(cancellationToken);
}
public IDatabaseApi FindDatabaseApi(string key)
public virtual IDatabaseApi FindDatabaseApi(string key)
{
return _databaseApis.GetOrDefault(key);
}
public void AddDatabaseApi(string key, IDatabaseApi api)
public virtual void AddDatabaseApi(string key, IDatabaseApi api)
{
Check.NotNull(key, nameof(key));
Check.NotNull(api, nameof(api));
@ -167,7 +199,7 @@ namespace Volo.Abp.Uow
_databaseApis.Add(key, api);
}
public IDatabaseApi GetOrAddDatabaseApi(string key, Func<IDatabaseApi> factory)
public virtual IDatabaseApi GetOrAddDatabaseApi(string key, Func<IDatabaseApi> factory)
{
Check.NotNull(key, nameof(key));
Check.NotNull(factory, nameof(factory));
@ -175,14 +207,14 @@ namespace Volo.Abp.Uow
return _databaseApis.GetOrAdd(key, factory);
}
public ITransactionApi FindTransactionApi(string key)
public virtual ITransactionApi FindTransactionApi(string key)
{
Check.NotNull(key, nameof(key));
return _transactionApis.GetOrDefault(key);
}
public void AddTransactionApi(string key, ITransactionApi api)
public virtual void AddTransactionApi(string key, ITransactionApi api)
{
Check.NotNull(key, nameof(key));
Check.NotNull(api, nameof(api));
@ -195,7 +227,7 @@ namespace Volo.Abp.Uow
_transactionApis.Add(key, api);
}
public ITransactionApi GetOrAddTransactionApi(string key, Func<ITransactionApi> factory)
public virtual ITransactionApi GetOrAddTransactionApi(string key, Func<ITransactionApi> factory)
{
Check.NotNull(key, nameof(key));
Check.NotNull(factory, nameof(factory));
@ -203,11 +235,48 @@ namespace Volo.Abp.Uow
return _transactionApis.GetOrAdd(key, factory);
}
public void OnCompleted(Func<Task> handler)
public virtual void OnCompleted(Func<Task> handler)
{
CompletedHandlers.Add(handler);
}
public virtual void AddOrReplaceLocalEvent(
UnitOfWorkEventRecord eventRecord,
Predicate<UnitOfWorkEventRecord> replacementSelector = null)
{
AddOrReplaceEvent(LocalEvents, eventRecord, replacementSelector);
}
public virtual void AddOrReplaceDistributedEvent(
UnitOfWorkEventRecord eventRecord,
Predicate<UnitOfWorkEventRecord> replacementSelector = null)
{
AddOrReplaceEvent(DistributedEvents, eventRecord, replacementSelector);
}
public virtual void AddOrReplaceEvent(
List<UnitOfWorkEventRecord> eventRecords,
UnitOfWorkEventRecord eventRecord,
Predicate<UnitOfWorkEventRecord> replacementSelector = null)
{
if (replacementSelector == null)
{
eventRecords.Add(eventRecord);
}
else
{
var foundIndex = eventRecords.FindIndex(replacementSelector);
if (foundIndex < 0)
{
eventRecords.Add(eventRecord);
}
else
{
eventRecords[foundIndex] = eventRecord;
}
}
}
protected virtual async Task OnCompletedAsync()
{
foreach (var handler in CompletedHandlers)

29
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
namespace Volo.Abp.Uow
{
public class UnitOfWorkEventRecord
{
public object EventData { get; }
public Type EventType { get; }
public long EventOrder { get; }
/// <summary>
/// Extra properties can be used if needed.
/// </summary>
public Dictionary<string, object> Properties { get; } = new Dictionary<string, object>();
public UnitOfWorkEventRecord(
Type eventType,
object eventData,
long eventOrder)
{
EventType = eventType;
EventData = eventData;
EventOrder = eventOrder;
}
}
}

15
framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs

@ -10,7 +10,7 @@ namespace Volo.Abp.Uow
[Obsolete("This will be removed in next versions.")]
public static AsyncLocal<bool> DisableObsoleteDbContextCreationWarning { get; } = new AsyncLocal<bool>();
public IUnitOfWork Current => GetCurrentUnitOfWork();
public IUnitOfWork Current => _ambientUnitOfWork.GetCurrentByChecking();
private readonly IServiceScopeFactory _serviceScopeFactory;
private readonly IAmbientUnitOfWork _ambientUnitOfWork;
@ -86,19 +86,6 @@ namespace Volo.Abp.Uow
return true;
}
private IUnitOfWork GetCurrentUnitOfWork()
{
var uow = _ambientUnitOfWork.UnitOfWork;
//Skip reserved unit of work
while (uow != null && (uow.IsReserved || uow.IsDisposed || uow.IsCompleted))
{
uow = uow.Outer;
}
return uow;
}
private IUnitOfWork CreateNewUnitOfWork()
{
var scope = _serviceScopeFactory.CreateScope();

10
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/TestUnitOfWork.cs

@ -13,8 +13,14 @@ namespace Volo.Abp.AspNetCore.Mvc.Uow
{
private readonly TestUnitOfWorkConfig _config;
public TestUnitOfWork(IServiceProvider serviceProvider, IOptions<AbpUnitOfWorkDefaultOptions> options, TestUnitOfWorkConfig config)
: base(serviceProvider, options)
public TestUnitOfWork(
IServiceProvider serviceProvider,
IUnitOfWorkEventPublisher unitOfWorkEventPublisher,
IOptions<AbpUnitOfWorkDefaultOptions> options, TestUnitOfWorkConfig config)
: base(
serviceProvider,
unitOfWorkEventPublisher,
options)
{
_config = config;
}

10
framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DomainEvents/DomainEvents_Tests.cs

@ -1,9 +1,15 @@
using Volo.Abp.TestApp.Testing;
using System.Threading.Tasks;
using Volo.Abp.TestApp.Testing;
using Xunit;
namespace Volo.Abp.MemoryDb.DomainEvents
{
public class DomainEvents_Tests : DomainEvents_Tests<AbpMemoryDbTestModule>
{
[Fact(Skip = "MemoryDB doesn't support transactions.")]
public override Task Should_Rollback_Uow_If_Event_Handler_Throws_Exception()
{
return base.Should_Rollback_Uow_If_Event_Handler_Throws_Exception();
}
}
}

119
framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs

@ -2,11 +2,13 @@
using System.Linq;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Domain.Entities.Events;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Modularity;
using Volo.Abp.TestApp.Domain;
using Volo.Abp.Uow;
using Xunit;
namespace Volo.Abp.TestApp.Testing
@ -25,6 +27,113 @@ namespace Volo.Abp.TestApp.Testing
DistributedEventBus = GetRequiredService<IDistributedEventBus>();
}
[Fact]
public virtual async Task Should_Publish_Events_In_Order()
{
bool testPersonCreateHandled = false;
bool douglesUpdateHandled = false;
bool douglesNameChangeHandled = false;
bool customEventHandled = false;
bool customEvent2Handled = false;
LocalEventBus.Subscribe<EntityCreatedEventData<Person>>(data =>
{
data.Entity.Name.ShouldBe("TestPerson1");
testPersonCreateHandled = true;
douglesUpdateHandled.ShouldBeFalse();
douglesNameChangeHandled.ShouldBeFalse();
customEventHandled.ShouldBeFalse();
customEvent2Handled.ShouldBeFalse();
return Task.CompletedTask;
});
LocalEventBus.Subscribe<MyCustomEventData>(data =>
{
data.Value.ShouldBe("42");
customEventHandled = true;
testPersonCreateHandled.ShouldBeTrue();
douglesUpdateHandled.ShouldBeFalse();
douglesNameChangeHandled.ShouldBeFalse();
customEvent2Handled.ShouldBeFalse();
return Task.CompletedTask;
});
LocalEventBus.Subscribe<PersonNameChangedEvent>(data =>
{
data.OldName.ShouldBe("Douglas");
data.Person.Name.ShouldBe("Douglas-Updated");
douglesNameChangeHandled = true;
testPersonCreateHandled.ShouldBeTrue();
customEventHandled.ShouldBeTrue();
douglesUpdateHandled.ShouldBeFalse();
customEvent2Handled.ShouldBeFalse();
return Task.CompletedTask;
});
LocalEventBus.Subscribe<EntityUpdatedEventData<Person>>(data =>
{
data.Entity.Name.ShouldBe("Douglas-Updated");
douglesUpdateHandled = true;
testPersonCreateHandled.ShouldBeTrue();
customEventHandled.ShouldBeTrue();
douglesNameChangeHandled.ShouldBeTrue();
customEvent2Handled.ShouldBeFalse();
return Task.CompletedTask;
});
LocalEventBus.Subscribe<MyCustomEventData2>(data =>
{
data.Value.ShouldBe("44");
customEvent2Handled = true;
testPersonCreateHandled.ShouldBeTrue();
customEventHandled.ShouldBeTrue();
douglesUpdateHandled.ShouldBeTrue();
douglesNameChangeHandled.ShouldBeTrue();
return Task.CompletedTask;
});
await WithUnitOfWorkAsync(new AbpUnitOfWorkOptions{IsTransactional = true}, async () =>
{
await PersonRepository.InsertAsync(
new Person(Guid.NewGuid(), "TestPerson1", 42)
);
await LocalEventBus.PublishAsync(new MyCustomEventData { Value = "42" });
var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId);
douglas.ChangeName("Douglas-Updated");
await PersonRepository.UpdateAsync(douglas);
await LocalEventBus.PublishAsync(new MyCustomEventData2 { Value = "44" });
});
}
[Fact]
public virtual async Task Should_Rollback_Uow_If_Event_Handler_Throws_Exception()
{
(await PersonRepository.FindAsync(x => x.Name == "TestPerson1")).ShouldBeNull();
LocalEventBus.Subscribe<EntityCreatedEventData<Person>>(data =>
{
data.Entity.Name.ShouldBe("TestPerson1");
throw new ApplicationException("Just to rollback the UOW");
});
var exception = await Assert.ThrowsAsync<ApplicationException>(async () =>
{
await WithUnitOfWorkAsync(new AbpUnitOfWorkOptions{IsTransactional = true}, async () =>
{
await PersonRepository.InsertAsync(
new Person(Guid.NewGuid(), "TestPerson1", 42)
);
});
});
exception.Message.ShouldBe("Just to rollback the UOW");
(await PersonRepository.FindAsync(x => x.Name == "TestPerson1")).ShouldBeNull();
}
[Fact]
public async Task Should_Trigger_Domain_Events_For_Aggregate_Root()
{
@ -63,5 +172,15 @@ namespace Volo.Abp.TestApp.Testing
isLocalEventTriggered.ShouldBeTrue();
isDistributedEventTriggered.ShouldBeTrue();
}
private class MyCustomEventData
{
public string Value { get; set; }
}
private class MyCustomEventData2
{
public string Value { get; set; }
}
}
}

16
framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs

@ -38,7 +38,9 @@ namespace Volo.Abp.TestApp.Testing
using (var uow = GetRequiredService<IUnitOfWorkManager>().Begin())
{
#pragma warning disable 618
LocalEventBus.Subscribe<EntityCreatingEventData<Person>>(data =>
#pragma warning restore 618
{
creatingEventTriggered.ShouldBeFalse();
createdEventTriggered.ShouldBeFalse();
@ -88,12 +90,16 @@ namespace Volo.Abp.TestApp.Testing
[Fact]
public async Task Multiple_Update_Should_Result_With_Single_Updated_Event_In_The_Same_Uow()
{
var personId = Guid.NewGuid();
await PersonRepository.InsertAsync(new Person(personId, Guid.NewGuid().ToString("D"), 42));
var createEventCount = 0;
var updateEventCount = 0;
var updatedAge = 0;
DistributedEventBus.Subscribe<EntityCreatedEto<PersonEto>>(eto =>
{
createEventCount++;
return Task.CompletedTask;
});
DistributedEventBus.Subscribe<EntityUpdatedEto<PersonEto>>(eto =>
{
updateEventCount++;
@ -101,6 +107,9 @@ namespace Volo.Abp.TestApp.Testing
return Task.CompletedTask;
});
var personId = Guid.NewGuid();
await PersonRepository.InsertAsync(new Person(personId, Guid.NewGuid().ToString("D"), 42));
using (var uow = GetRequiredService<IUnitOfWorkManager>().Begin())
{
var person = await PersonRepository.GetAsync(personId);
@ -120,6 +129,7 @@ namespace Volo.Abp.TestApp.Testing
await uow.CompleteAsync();
}
createEventCount.ShouldBe(1);
updateEventCount.ShouldBe(1);
updatedAge.ShouldBe(45);
}

1
framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs

@ -31,7 +31,6 @@ namespace Volo.Abp.TestApp.Testing
using (var uow = uowManager.Begin(options))
{
await action();
await uow.CompleteAsync();
}
}

4
modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs

@ -55,7 +55,7 @@ namespace Volo.Abp.Account
public virtual async Task SendPasswordResetCodeAsync(SendPasswordResetCodeDto input)
{
var user = await GetUserByEmail(input.Email);
var user = await GetUserByEmailAsync(input.Email);
var resetToken = await UserManager.GeneratePasswordResetTokenAsync(user);
await AccountEmailer.SendPasswordResetLinkAsync(user, resetToken, input.AppName, input.ReturnUrl, input.ReturnUrlHash);
}
@ -74,7 +74,7 @@ namespace Volo.Abp.Account
});
}
protected virtual async Task<IdentityUser> GetUserByEmail(string email)
protected virtual async Task<IdentityUser> GetUserByEmailAsync(string email)
{
var user = await UserManager.FindByEmailAsync(email);
if (user == null)

6
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs

@ -2,6 +2,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Identity;
using Volo.Abp.Validation;
@ -28,7 +29,7 @@ namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.P
return View("~/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml", model);
}
public class PersonalInfoModel
public class PersonalInfoModel : IHasConcurrencyStamp
{
[Required]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxUserNameLength))]
@ -51,6 +52,9 @@ namespace Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.P
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPhoneNumberLength))]
[Display(Name = "DisplayName:PhoneNumber")]
public string PhoneNumber { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}
}

2
modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml

@ -19,6 +19,8 @@
<h4>@L["PersonalSettings"]</h4><hr/>
<form method="post" id="PersonalSettingsForm">
<abp-input asp-for="ConcurrencyStamp" />
<abp-input asp-for="UserName" readonly="!isUserNameUpdateEnabled"/>

2
modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json

@ -3,7 +3,7 @@
"name": "asp.net",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.shared": "^4.4.0",
"@abp/aspnetcore.mvc.ui.theme.shared": "^4.4.1",
"highlight.js": "^9.13.1"
},
"devDependencies": {}

224
modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock

@ -2,30 +2,30 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.shared@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.0.tgz#59408675448cd0892478f27b5fef2e317676b12c"
integrity sha512-iqHKk2Ada/c64T+ZRKuj+lc9xWO139vDCs4vi/KPNAtE7KFxU3/ogHWxFRTinZdxkhK9WBgOcsg8bbxjZmVm7g==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.0"
"@abp/bootstrap" "~4.4.0"
"@abp/bootstrap-datepicker" "~4.4.0"
"@abp/datatables.net-bs4" "~4.4.0"
"@abp/font-awesome" "~4.4.0"
"@abp/jquery-form" "~4.4.0"
"@abp/jquery-validation-unobtrusive" "~4.4.0"
"@abp/lodash" "~4.4.0"
"@abp/luxon" "~4.4.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.0"
"@abp/select2" "~4.4.0"
"@abp/sweetalert" "~4.4.0"
"@abp/timeago" "~4.4.0"
"@abp/toastr" "~4.4.0"
"@abp/aspnetcore.mvc.ui@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.0.tgz#66d1255cf0c3bb416ab6fcb08a2389a6fdd28b62"
integrity sha512-GtF0KUTmp8pT94BLCSuzv/LQuyD9xFJCeAy7mJsqlACK/P2BFhX37zD8fDgObLlNyBMS0r3a7GpAVh3uPgaXcQ==
"@abp/aspnetcore.mvc.ui.theme.shared@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.1.tgz#9f43a389f602d34d4bdc4d5e5fdd142ac1af40ef"
integrity sha512-67mj6BEpbfM7UwtKlxW7RXyqf+hfwIxlk35RPIPYkQRx3663d87vq9k9UA8z/Nr3qLt5pzTvU6bC/w3yv/rVIw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.1"
"@abp/bootstrap" "~4.4.1"
"@abp/bootstrap-datepicker" "~4.4.1"
"@abp/datatables.net-bs4" "~4.4.1"
"@abp/font-awesome" "~4.4.1"
"@abp/jquery-form" "~4.4.1"
"@abp/jquery-validation-unobtrusive" "~4.4.1"
"@abp/lodash" "~4.4.1"
"@abp/luxon" "~4.4.1"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.1"
"@abp/select2" "~4.4.1"
"@abp/sweetalert" "~4.4.1"
"@abp/timeago" "~4.4.1"
"@abp/toastr" "~4.4.1"
"@abp/aspnetcore.mvc.ui@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.1.tgz#c637a42a005f7d2418b257ef599cf71498c6b14f"
integrity sha512-IC623BES0om8YGZzqWuQAtydE8umN0gaZ4kwcWbhQKcsdm+rtI1+V/CwYeS5xOPYCWa3XSyFPSxZhHzwgZ261w==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -34,145 +34,145 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
"@abp/bootstrap-datepicker@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.0.tgz#13c5b40601bcd298a6c73c821d3afb6d6225b34a"
integrity sha512-RKjoUMZLU+2ki2pRYb4Ubu5v//5NfyisY95cw0Ljwj2Agb3ZmHVMP2Ptzd2KR8bvIqkyDLdfkE6n1NKPR/L1wA==
"@abp/bootstrap-datepicker@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.1.tgz#45c96fd20666a701415ff52459b51987bb3bca73"
integrity sha512-uFIrj+dRSfNAxPc73xvHIx1Zo3J0zVOxj0vrDCvMsMe6g2+LzSPZM8bEQZj86Ggcd4XVRS1GriQHgj4O3k8N9A==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.0.tgz#51131b48978b1bf0cbd726f0c13349efc3641907"
integrity sha512-CRDW/b7JXR8+LMb6mOWQyHbLwfbTZHL7hNPE3jJC6+TaMjWZlS0pulPkG1dBXn88+y0VaVFrzuuOYE02B1QH9w==
"@abp/bootstrap@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.1.tgz#308f72a9e1ef2e86bbe8091aec83fcadff20dcdc"
integrity sha512-vS5f1UmK/bx4Nle+fjNcVUJnOQvc0uWb/YsybFyCzBv6Nadh/VV1Uva1FDPOsvU47r5LBAU272vO4LBX+JoxMg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
"@abp/core@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.0.tgz#717d4e0191062ec0ad74c46c2db6bb8097bd9675"
integrity sha512-p+CBel9BVcefS4R4njfvIEMBuleqXxiSxGAJKdgEo0stFVc1iPa0Q8PqBWhuP6hWGzJpk4lspszMqA6LIW3oyg==
"@abp/core@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.1.tgz#6e9f1e27b4495361f6901b7fd1c393b43cad2cfe"
integrity sha512-T6FuVs/cfYBDobtsf+HZVYViFng0FhoM3qWuRgz7r8tY/U2dYXspHU77hf9PPgqoqb4yWhn8fRrG5hFLjLvzXQ==
dependencies:
"@abp/utils" "^4.4.0"
"@abp/utils" "^4.4.1"
"@abp/datatables.net-bs4@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.0.tgz#f881c34c8d7675473c9e964821bc0201db321142"
integrity sha512-fdEZ+z6CQMQfYsOmqvNaUg1+8nssGxDtHvS10m99ALvXbCsnY4Na8NdLo1soZ8Q24FMhA5wOoLsf3CnyNEFTrw==
"@abp/datatables.net-bs4@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.1.tgz#ac25f7ddfa8bbc0f1543ab0fd59b34131375c959"
integrity sha512-sqrheS9KgtmSD3cG7/Y/6ke9QGz3gUN/a8YkOO4qYvgHcuagu1/HWycN91sP44aDkMt+VrbRMS2VyeuBcwj+cg==
dependencies:
"@abp/datatables.net" "~4.4.0"
"@abp/datatables.net" "~4.4.1"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.0.tgz#ba9d5cc241a106d3914cdf4903e284cdd7809d8b"
integrity sha512-bsrbBp2O2H3mN+Bina1KO5q976emfRssNKKHFea4wpJPf6cuyJU7EvwNRKnu/aalXxhq9XTN1+ADkX4sdoco7g==
"@abp/datatables.net@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.1.tgz#a6ae0b516f28e9cbd8234e82f9814e8eea50e8f1"
integrity sha512-66zoo6AkuH6dgW9BhDlGNVj9HmzqVVPhKdjykvy0UQBl06SGBuyd4d4BNjIa+pS5u8h9ZE8PiZzCTpUTDYw4MA==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.0.tgz#57f87b865a823d832b82405a82eb40cb78a05edb"
integrity sha512-yl69vEcX1C1mjlU8+dNgLHnOcnPqx3pQvmmLQ2GJIBAsOEZPweHVVD4aEvcmAdJOm+Vbq1j5f3TlmZcWo42SVQ==
"@abp/font-awesome@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.1.tgz#13ca84622edc96a5444d85cdaa72b91c7f987e23"
integrity sha512-NyEs/yOHqdrN4QkgvAFvqFfUGEpnKYb/rKgrSVAzCY+40D7Z0PJbMx3PP/dNKRC3wUHKUoVJSctWf6KQ947j4w==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.0.tgz#b87edebbdde6f3c286ca9d7c2911609b37105ab1"
integrity sha512-PJ1A5wipPSAYAfcqe9FBCPcnxhQo4vssIcSWLfzTolngq1gX4J4fylGHKlO9AfgpsI0oXB+3MGNgXpgR6uakwA==
"@abp/jquery-form@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.1.tgz#ffd3dd4b096a336fd27719b24a0a003d6f2ab30a"
integrity sha512-U6TcJ8pCUBvCkaytYbJtsUEc9H3VePWFXJBaV8mdlP7wyh2FoOUw+9wVKAej1MZCLuRyKDbEXQbVx3nIcEWC7A==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.0.tgz#d7cba6f4888efb1d640bca2ba5a15a2ef4fb3ab0"
integrity sha512-CNwDVjGU99kDTtoyjObKcBhWNUrxXC9BeatEJn4/6uNAKA2TX32l7cFUeUL+AzVL2KeXjhzkK7/ZtsmaZ9yeRg==
"@abp/jquery-validation-unobtrusive@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.1.tgz#8d4f6c70b8279b4f97074577e9b7d1646390e223"
integrity sha512-bLBWpg/4hkBFpuE/8+itFtWMRWrQ5EJWg14qz6y8CuP9aHNL6wJummTGS2tac1T/fvUAAMT1BIGL4/ZTW2eVCQ==
dependencies:
"@abp/jquery-validation" "~4.4.0"
"@abp/jquery-validation" "~4.4.1"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.0.tgz#5cb69e3253c31bdd01dd2664940dea47198acfc9"
integrity sha512-EkO+FjdxVzLyY0zN3UWcxJKATVEhXBrmyBBVT5YoVZ4bDaR4D2/YrmL73IZaIOJC1mKbFiNcn3B8whp3a7yRNg==
"@abp/jquery-validation@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.1.tgz#d0dc26188d8ab774ef938f4ed98869ec58caf19d"
integrity sha512-AQZidEk6FAWe/kVkXLsCytE8V44+FbXat2LW9Ey6aX8Q0j3illtJ5lHzS7oROshRMPbSNYB7Jb6xkJwPIfFA7Q==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-validation "^1.19.2"
"@abp/jquery@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.0.tgz#8818eac1e4c6cccc525c51b46ea7ed2b43ca992c"
integrity sha512-VjDrV0rINmj496dpp6VjmmQWtQE1uAGN1oMDLFuSEyL6lPfqrzMnrAhmlPnxEJwyBMo4y8N3xeVgSX+ioS3dCw==
"@abp/jquery@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.1.tgz#87f3f5a4364075350c2df900a12a35a3dd003890"
integrity sha512-cR5dXlbjpjjv8w9d6alaHWP/Maa7DcEUCwDp+tqeZalSBQN++/jx7xcjsKYX2oTDZTUZAMpAgJiuJM3z9eQYVQ==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
jquery "~3.6.0"
"@abp/lodash@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.0.tgz#492ec0f4c39dcd49689545aa013bdeb52db01ea3"
integrity sha512-5Snk8WxF0Jf/CoDvzIpzTi2Y9FcVIj8kGyZ47CeIg5sYFa/NZpDij/CGhy/5QBnPOL74M9Q23NLdUTEVZPJMkA==
"@abp/lodash@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.1.tgz#e0c613aebde8aa108b85b182c4c8adbe4063ff11"
integrity sha512-TYY6nL62hNwcFT+sMTW9EfyDJEhZfhm9XJM7WEGz8Lb6BG4aTJm6eqzgvl1naThUE0ULycQykRASj5hiDR+yZw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
lodash "^4.17.15"
"@abp/luxon@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.0.tgz#4dabe1929640b1704a4a73e0ecbd9b3b03438353"
integrity sha512-fQE8aTxRyXlPyk5PD9XiuJbc3XxmkSsXMtl9u4JZYlusVyZ6o46or6LLf9KsgMwEs1C02CJyGQKqk6Gkivl7Ug==
"@abp/luxon@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.1.tgz#bd212a099c6697aca0fe7092d50441f50343b847"
integrity sha512-GrW/dlzv0L9yoCiqQxGBi+juJi4t9YEesAM//22Q7rDeslHAExf6qqjClAQZRaZJaRS6SWhyV6WU4+RP/OXKSw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.0.tgz#94cf234adca15391dc373591296ed2468dfbc0cf"
integrity sha512-de8DSEPLu+1pt9j4U1Md+6MOxV7RsxbZOs0vrRPHTdVQepxsavNncUOuKHNs0qXrsPOVBfgRzizUZGGaOpvlng==
"@abp/malihu-custom-scrollbar-plugin@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.1.tgz#5604d5e5f628a539c0fafba9e58a846cb7a5a32b"
integrity sha512-pnFX+axb6fdX1AfQPo8IIn9acgLJXCopalUTnTSXFpJYRuikXAjGRrNfqM5Wirgzthy+q7iANqPxwTqqXGi8uw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.0.tgz#a8db05f647aaa4f792dd5203e48666f51b340407"
integrity sha512-CWAFk9NUp03PUBfMqrek5cAQo5vXva5cqcAAl03NYn/OtCsrlc48WW0O4Lfq69VO/cPgg8fLMlNplmCAEXNAlA==
"@abp/select2@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.1.tgz#731c3ccc9bd3532eb81f77fa4416fc8c4a567d6a"
integrity sha512-wVKLU3rdUOUZT7kGX0p+Xzqs+6IGtW1FgdMLOlgGlWWuqsruw1Ix2EbvezNSFgndPYCF0A1lkVW9rst3mpo/+Q==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
select2 "^4.0.13"
"@abp/sweetalert@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.0.tgz#9feb16a54c369fd5f04276db45c36fde93ff2b22"
integrity sha512-EX3xpgIWUjTz+eFQIswJzJx9jToGSv8ohAjtFaCvV3oAlSsbxDlsqSNujyzMNa7xjL449YgLXbyYavtj+TTLKw==
"@abp/sweetalert@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.1.tgz#3defdda104c690ffc66749b023daac46b82a123c"
integrity sha512-xnG5SFhIQBT5t1AEZCSGzUSIJZ7BDWiVb1j5v4mBWgmOnNOF7/u08/MIK0RymOmRJfL+jHUR0jJBBHjnjhl4Vg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
sweetalert "^2.1.2"
"@abp/timeago@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.0.tgz#0973e0ef3caadb5101e75506367fe8b9d4b2dcfd"
integrity sha512-svHVKzQNAg4SNSv8QBh5cg7HT00/YrwUBjTg7QE6/DBfSayKYgx0lntEb02oVmR0urhw3P11FEtezKzPHZc4Mw==
"@abp/timeago@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.1.tgz#6d87919c88702e48188dc2aa0f63a17ad63e0269"
integrity sha512-pO/kkU7awjkuHHZi2NjUMy7vBWf7bYtb5wcPNvDjhm4rIly/81iSO3TTqUgmRKVZMS0V6A55cbXH3ynduecelQ==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
timeago "^1.6.7"
"@abp/toastr@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.0.tgz#0bfc809a485863d37b8b7d535d9526ea177f27d0"
integrity sha512-tc8s3nKroC2bWG2YwlTd68zsnToaAkFX3FwjfcpFknB9OGGxcAW9Iijn4Vjh41CZi9rXhBaYTZRDv0Ve0cWJbQ==
"@abp/toastr@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.1.tgz#1b5c10cb8bd43426fdac367de956105dc283a1dd"
integrity sha512-Zdpcp6q7mD8Jrtfd2YKQx0XKyiXI+1NHK5HbB4U3Z1LVpz4cb2rB3y9NS8VhS8m/hpB/eFTKSuOsVmRAKUcf+w==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
toastr "^2.1.4"
"@abp/utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0.tgz#b74b5cfb8e9b078d8b7a724cac73d348f854e89c"
integrity sha512-EgLqGmfwNuDgPIoqrSJZMWvXKhScj3FE2hG0kmIBtCyj3SOaHgYVFuTqs4hx2WoBB6YUNhG3U1hn6c1EzIrIcQ==
"@abp/utils@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.1.tgz#647f952acbded1d469ca7fe00c3a37ebc5b20a2d"
integrity sha512-3h3aSel8u88qI54ZEmd6+3ZK/95E4pu/BlodPEtujHK3KC+RVriSIpty195Gr2LkrCRcNNpOgc09wI2aEx1nDw==
dependencies:
just-compare "^1.3.0"

4
modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json

@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.0",
"@abp/prismjs": "^4.4.0"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.1",
"@abp/prismjs": "^4.4.1"
},
"devDependencies": {}
}

260
modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.0.tgz#dbb8add10a5d5c01fa1f7f9a918ebf87f6f9ae2b"
integrity sha512-SOBgni/T6SzIOx8vRcI7nl7vBpXrBh8yEuf9KTnjifqLIHPNv5CCyurgwLvhYayB7ST87UXBpNWwOJM1ywVtcA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.0.tgz#59408675448cd0892478f27b5fef2e317676b12c"
integrity sha512-iqHKk2Ada/c64T+ZRKuj+lc9xWO139vDCs4vi/KPNAtE7KFxU3/ogHWxFRTinZdxkhK9WBgOcsg8bbxjZmVm7g==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.0"
"@abp/bootstrap" "~4.4.0"
"@abp/bootstrap-datepicker" "~4.4.0"
"@abp/datatables.net-bs4" "~4.4.0"
"@abp/font-awesome" "~4.4.0"
"@abp/jquery-form" "~4.4.0"
"@abp/jquery-validation-unobtrusive" "~4.4.0"
"@abp/lodash" "~4.4.0"
"@abp/luxon" "~4.4.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.0"
"@abp/select2" "~4.4.0"
"@abp/sweetalert" "~4.4.0"
"@abp/timeago" "~4.4.0"
"@abp/toastr" "~4.4.0"
"@abp/aspnetcore.mvc.ui@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.0.tgz#66d1255cf0c3bb416ab6fcb08a2389a6fdd28b62"
integrity sha512-GtF0KUTmp8pT94BLCSuzv/LQuyD9xFJCeAy7mJsqlACK/P2BFhX37zD8fDgObLlNyBMS0r3a7GpAVh3uPgaXcQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.1.tgz#11958b578ddcfe89510b943aa1d54ba9804c1db7"
integrity sha512-4UmYkvrkCGwb6xnW3vW8fOqS7eBaLX8+8IVIJJghHaMWPG0Vq1A69rXR5y2WN9JNLt6vCGqXBbR+Ly5FJu1x5w==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.1"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.1.tgz#9f43a389f602d34d4bdc4d5e5fdd142ac1af40ef"
integrity sha512-67mj6BEpbfM7UwtKlxW7RXyqf+hfwIxlk35RPIPYkQRx3663d87vq9k9UA8z/Nr3qLt5pzTvU6bC/w3yv/rVIw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.1"
"@abp/bootstrap" "~4.4.1"
"@abp/bootstrap-datepicker" "~4.4.1"
"@abp/datatables.net-bs4" "~4.4.1"
"@abp/font-awesome" "~4.4.1"
"@abp/jquery-form" "~4.4.1"
"@abp/jquery-validation-unobtrusive" "~4.4.1"
"@abp/lodash" "~4.4.1"
"@abp/luxon" "~4.4.1"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.1"
"@abp/select2" "~4.4.1"
"@abp/sweetalert" "~4.4.1"
"@abp/timeago" "~4.4.1"
"@abp/toastr" "~4.4.1"
"@abp/aspnetcore.mvc.ui@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.1.tgz#c637a42a005f7d2418b257ef599cf71498c6b14f"
integrity sha512-IC623BES0om8YGZzqWuQAtydE8umN0gaZ4kwcWbhQKcsdm+rtI1+V/CwYeS5xOPYCWa3XSyFPSxZhHzwgZ261w==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,162 +41,162 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
"@abp/bootstrap-datepicker@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.0.tgz#13c5b40601bcd298a6c73c821d3afb6d6225b34a"
integrity sha512-RKjoUMZLU+2ki2pRYb4Ubu5v//5NfyisY95cw0Ljwj2Agb3ZmHVMP2Ptzd2KR8bvIqkyDLdfkE6n1NKPR/L1wA==
"@abp/bootstrap-datepicker@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.1.tgz#45c96fd20666a701415ff52459b51987bb3bca73"
integrity sha512-uFIrj+dRSfNAxPc73xvHIx1Zo3J0zVOxj0vrDCvMsMe6g2+LzSPZM8bEQZj86Ggcd4XVRS1GriQHgj4O3k8N9A==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.0.tgz#51131b48978b1bf0cbd726f0c13349efc3641907"
integrity sha512-CRDW/b7JXR8+LMb6mOWQyHbLwfbTZHL7hNPE3jJC6+TaMjWZlS0pulPkG1dBXn88+y0VaVFrzuuOYE02B1QH9w==
"@abp/bootstrap@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.1.tgz#308f72a9e1ef2e86bbe8091aec83fcadff20dcdc"
integrity sha512-vS5f1UmK/bx4Nle+fjNcVUJnOQvc0uWb/YsybFyCzBv6Nadh/VV1Uva1FDPOsvU47r5LBAU272vO4LBX+JoxMg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
"@abp/clipboard@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.4.0.tgz#28fd30fbe171470703201e5c19bad612d11842ff"
integrity sha512-rfLjuwDbq2gHojzG2MI9toQZIUKrF17r6EkvpbBprSsr/ch5fBrSn8k9MSDUd9t9agezN8tTL3KI4aduU+A1cQ==
"@abp/clipboard@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.4.1.tgz#a658eeccffe696ef97ce2b9f86bc77b30825303f"
integrity sha512-XG40j7juzIUwmudT/I69cVnkA8o+m8INgT8y+dL+yJ/Wpsu+z8hwPKUmStyjdfKU90MB86Yj5GMy85i8gJG/Tg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
clipboard "^2.0.6"
"@abp/core@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.0.tgz#717d4e0191062ec0ad74c46c2db6bb8097bd9675"
integrity sha512-p+CBel9BVcefS4R4njfvIEMBuleqXxiSxGAJKdgEo0stFVc1iPa0Q8PqBWhuP6hWGzJpk4lspszMqA6LIW3oyg==
"@abp/core@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.1.tgz#6e9f1e27b4495361f6901b7fd1c393b43cad2cfe"
integrity sha512-T6FuVs/cfYBDobtsf+HZVYViFng0FhoM3qWuRgz7r8tY/U2dYXspHU77hf9PPgqoqb4yWhn8fRrG5hFLjLvzXQ==
dependencies:
"@abp/utils" "^4.4.0"
"@abp/utils" "^4.4.1"
"@abp/datatables.net-bs4@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.0.tgz#f881c34c8d7675473c9e964821bc0201db321142"
integrity sha512-fdEZ+z6CQMQfYsOmqvNaUg1+8nssGxDtHvS10m99ALvXbCsnY4Na8NdLo1soZ8Q24FMhA5wOoLsf3CnyNEFTrw==
"@abp/datatables.net-bs4@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.1.tgz#ac25f7ddfa8bbc0f1543ab0fd59b34131375c959"
integrity sha512-sqrheS9KgtmSD3cG7/Y/6ke9QGz3gUN/a8YkOO4qYvgHcuagu1/HWycN91sP44aDkMt+VrbRMS2VyeuBcwj+cg==
dependencies:
"@abp/datatables.net" "~4.4.0"
"@abp/datatables.net" "~4.4.1"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.0.tgz#ba9d5cc241a106d3914cdf4903e284cdd7809d8b"
integrity sha512-bsrbBp2O2H3mN+Bina1KO5q976emfRssNKKHFea4wpJPf6cuyJU7EvwNRKnu/aalXxhq9XTN1+ADkX4sdoco7g==
"@abp/datatables.net@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.1.tgz#a6ae0b516f28e9cbd8234e82f9814e8eea50e8f1"
integrity sha512-66zoo6AkuH6dgW9BhDlGNVj9HmzqVVPhKdjykvy0UQBl06SGBuyd4d4BNjIa+pS5u8h9ZE8PiZzCTpUTDYw4MA==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.0.tgz#57f87b865a823d832b82405a82eb40cb78a05edb"
integrity sha512-yl69vEcX1C1mjlU8+dNgLHnOcnPqx3pQvmmLQ2GJIBAsOEZPweHVVD4aEvcmAdJOm+Vbq1j5f3TlmZcWo42SVQ==
"@abp/font-awesome@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.1.tgz#13ca84622edc96a5444d85cdaa72b91c7f987e23"
integrity sha512-NyEs/yOHqdrN4QkgvAFvqFfUGEpnKYb/rKgrSVAzCY+40D7Z0PJbMx3PP/dNKRC3wUHKUoVJSctWf6KQ947j4w==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.0.tgz#b87edebbdde6f3c286ca9d7c2911609b37105ab1"
integrity sha512-PJ1A5wipPSAYAfcqe9FBCPcnxhQo4vssIcSWLfzTolngq1gX4J4fylGHKlO9AfgpsI0oXB+3MGNgXpgR6uakwA==
"@abp/jquery-form@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.1.tgz#ffd3dd4b096a336fd27719b24a0a003d6f2ab30a"
integrity sha512-U6TcJ8pCUBvCkaytYbJtsUEc9H3VePWFXJBaV8mdlP7wyh2FoOUw+9wVKAej1MZCLuRyKDbEXQbVx3nIcEWC7A==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.0.tgz#d7cba6f4888efb1d640bca2ba5a15a2ef4fb3ab0"
integrity sha512-CNwDVjGU99kDTtoyjObKcBhWNUrxXC9BeatEJn4/6uNAKA2TX32l7cFUeUL+AzVL2KeXjhzkK7/ZtsmaZ9yeRg==
"@abp/jquery-validation-unobtrusive@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.1.tgz#8d4f6c70b8279b4f97074577e9b7d1646390e223"
integrity sha512-bLBWpg/4hkBFpuE/8+itFtWMRWrQ5EJWg14qz6y8CuP9aHNL6wJummTGS2tac1T/fvUAAMT1BIGL4/ZTW2eVCQ==
dependencies:
"@abp/jquery-validation" "~4.4.0"
"@abp/jquery-validation" "~4.4.1"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.0.tgz#5cb69e3253c31bdd01dd2664940dea47198acfc9"
integrity sha512-EkO+FjdxVzLyY0zN3UWcxJKATVEhXBrmyBBVT5YoVZ4bDaR4D2/YrmL73IZaIOJC1mKbFiNcn3B8whp3a7yRNg==
"@abp/jquery-validation@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.1.tgz#d0dc26188d8ab774ef938f4ed98869ec58caf19d"
integrity sha512-AQZidEk6FAWe/kVkXLsCytE8V44+FbXat2LW9Ey6aX8Q0j3illtJ5lHzS7oROshRMPbSNYB7Jb6xkJwPIfFA7Q==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-validation "^1.19.2"
"@abp/jquery@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.0.tgz#8818eac1e4c6cccc525c51b46ea7ed2b43ca992c"
integrity sha512-VjDrV0rINmj496dpp6VjmmQWtQE1uAGN1oMDLFuSEyL6lPfqrzMnrAhmlPnxEJwyBMo4y8N3xeVgSX+ioS3dCw==
"@abp/jquery@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.1.tgz#87f3f5a4364075350c2df900a12a35a3dd003890"
integrity sha512-cR5dXlbjpjjv8w9d6alaHWP/Maa7DcEUCwDp+tqeZalSBQN++/jx7xcjsKYX2oTDZTUZAMpAgJiuJM3z9eQYVQ==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
jquery "~3.6.0"
"@abp/lodash@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.0.tgz#492ec0f4c39dcd49689545aa013bdeb52db01ea3"
integrity sha512-5Snk8WxF0Jf/CoDvzIpzTi2Y9FcVIj8kGyZ47CeIg5sYFa/NZpDij/CGhy/5QBnPOL74M9Q23NLdUTEVZPJMkA==
"@abp/lodash@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.1.tgz#e0c613aebde8aa108b85b182c4c8adbe4063ff11"
integrity sha512-TYY6nL62hNwcFT+sMTW9EfyDJEhZfhm9XJM7WEGz8Lb6BG4aTJm6eqzgvl1naThUE0ULycQykRASj5hiDR+yZw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
lodash "^4.17.15"
"@abp/luxon@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.0.tgz#4dabe1929640b1704a4a73e0ecbd9b3b03438353"
integrity sha512-fQE8aTxRyXlPyk5PD9XiuJbc3XxmkSsXMtl9u4JZYlusVyZ6o46or6LLf9KsgMwEs1C02CJyGQKqk6Gkivl7Ug==
"@abp/luxon@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.1.tgz#bd212a099c6697aca0fe7092d50441f50343b847"
integrity sha512-GrW/dlzv0L9yoCiqQxGBi+juJi4t9YEesAM//22Q7rDeslHAExf6qqjClAQZRaZJaRS6SWhyV6WU4+RP/OXKSw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.0.tgz#94cf234adca15391dc373591296ed2468dfbc0cf"
integrity sha512-de8DSEPLu+1pt9j4U1Md+6MOxV7RsxbZOs0vrRPHTdVQepxsavNncUOuKHNs0qXrsPOVBfgRzizUZGGaOpvlng==
"@abp/malihu-custom-scrollbar-plugin@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.1.tgz#5604d5e5f628a539c0fafba9e58a846cb7a5a32b"
integrity sha512-pnFX+axb6fdX1AfQPo8IIn9acgLJXCopalUTnTSXFpJYRuikXAjGRrNfqM5Wirgzthy+q7iANqPxwTqqXGi8uw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/prismjs@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.4.0.tgz#fc387ff3eaa1ee2e5b331584b9863234392346dd"
integrity sha512-ndrGOaVu43YAVnMz7IZ6HfAk/I9Ffe1tjIm5+KAIn5+x2Dmr0/U/CXcGlFjm4L6DCOzjUOh3EVgxZXHIDBTw+w==
"@abp/prismjs@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.4.1.tgz#d5f2271ceba0dc8c297805e644a40e70a4de56ec"
integrity sha512-x7itQuuSMn468kEH2t3+hgUsm+GsvcxgXBI7vfPcCGUJjmX4GBL1e0anB0FF3pdeBMVXYOos3PofcNki0dsFWQ==
dependencies:
"@abp/clipboard" "~4.4.0"
"@abp/core" "~4.4.0"
"@abp/clipboard" "~4.4.1"
"@abp/core" "~4.4.1"
prismjs "^1.20.0"
"@abp/select2@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.0.tgz#a8db05f647aaa4f792dd5203e48666f51b340407"
integrity sha512-CWAFk9NUp03PUBfMqrek5cAQo5vXva5cqcAAl03NYn/OtCsrlc48WW0O4Lfq69VO/cPgg8fLMlNplmCAEXNAlA==
"@abp/select2@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.1.tgz#731c3ccc9bd3532eb81f77fa4416fc8c4a567d6a"
integrity sha512-wVKLU3rdUOUZT7kGX0p+Xzqs+6IGtW1FgdMLOlgGlWWuqsruw1Ix2EbvezNSFgndPYCF0A1lkVW9rst3mpo/+Q==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
select2 "^4.0.13"
"@abp/sweetalert@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.0.tgz#9feb16a54c369fd5f04276db45c36fde93ff2b22"
integrity sha512-EX3xpgIWUjTz+eFQIswJzJx9jToGSv8ohAjtFaCvV3oAlSsbxDlsqSNujyzMNa7xjL449YgLXbyYavtj+TTLKw==
"@abp/sweetalert@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.1.tgz#3defdda104c690ffc66749b023daac46b82a123c"
integrity sha512-xnG5SFhIQBT5t1AEZCSGzUSIJZ7BDWiVb1j5v4mBWgmOnNOF7/u08/MIK0RymOmRJfL+jHUR0jJBBHjnjhl4Vg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
sweetalert "^2.1.2"
"@abp/timeago@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.0.tgz#0973e0ef3caadb5101e75506367fe8b9d4b2dcfd"
integrity sha512-svHVKzQNAg4SNSv8QBh5cg7HT00/YrwUBjTg7QE6/DBfSayKYgx0lntEb02oVmR0urhw3P11FEtezKzPHZc4Mw==
"@abp/timeago@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.1.tgz#6d87919c88702e48188dc2aa0f63a17ad63e0269"
integrity sha512-pO/kkU7awjkuHHZi2NjUMy7vBWf7bYtb5wcPNvDjhm4rIly/81iSO3TTqUgmRKVZMS0V6A55cbXH3ynduecelQ==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
timeago "^1.6.7"
"@abp/toastr@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.0.tgz#0bfc809a485863d37b8b7d535d9526ea177f27d0"
integrity sha512-tc8s3nKroC2bWG2YwlTd68zsnToaAkFX3FwjfcpFknB9OGGxcAW9Iijn4Vjh41CZi9rXhBaYTZRDv0Ve0cWJbQ==
"@abp/toastr@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.1.tgz#1b5c10cb8bd43426fdac367de956105dc283a1dd"
integrity sha512-Zdpcp6q7mD8Jrtfd2YKQx0XKyiXI+1NHK5HbB4U3Z1LVpz4cb2rB3y9NS8VhS8m/hpB/eFTKSuOsVmRAKUcf+w==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
toastr "^2.1.4"
"@abp/utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0.tgz#b74b5cfb8e9b078d8b7a724cac73d348f854e89c"
integrity sha512-EgLqGmfwNuDgPIoqrSJZMWvXKhScj3FE2hG0kmIBtCyj3SOaHgYVFuTqs4hx2WoBB6YUNhG3U1hn6c1EzIrIcQ==
"@abp/utils@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.1.tgz#647f952acbded1d469ca7fe00c3a37ebc5b20a2d"
integrity sha512-3h3aSel8u88qI54ZEmd6+3ZK/95E4pu/BlodPEtujHK3KC+RVriSIpty195Gr2LkrCRcNNpOgc09wI2aEx1nDw==
dependencies:
just-compare "^1.3.0"

4
modules/blogging/app/Volo.BloggingTestApp/package.json

@ -3,7 +3,7 @@
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.0",
"@abp/blogging": "^4.4.0"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.1",
"@abp/blogging": "^4.4.1"
}
}

332
modules/blogging/app/Volo.BloggingTestApp/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.0.tgz#dbb8add10a5d5c01fa1f7f9a918ebf87f6f9ae2b"
integrity sha512-SOBgni/T6SzIOx8vRcI7nl7vBpXrBh8yEuf9KTnjifqLIHPNv5CCyurgwLvhYayB7ST87UXBpNWwOJM1ywVtcA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.0.tgz#59408675448cd0892478f27b5fef2e317676b12c"
integrity sha512-iqHKk2Ada/c64T+ZRKuj+lc9xWO139vDCs4vi/KPNAtE7KFxU3/ogHWxFRTinZdxkhK9WBgOcsg8bbxjZmVm7g==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.0"
"@abp/bootstrap" "~4.4.0"
"@abp/bootstrap-datepicker" "~4.4.0"
"@abp/datatables.net-bs4" "~4.4.0"
"@abp/font-awesome" "~4.4.0"
"@abp/jquery-form" "~4.4.0"
"@abp/jquery-validation-unobtrusive" "~4.4.0"
"@abp/lodash" "~4.4.0"
"@abp/luxon" "~4.4.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.0"
"@abp/select2" "~4.4.0"
"@abp/sweetalert" "~4.4.0"
"@abp/timeago" "~4.4.0"
"@abp/toastr" "~4.4.0"
"@abp/aspnetcore.mvc.ui@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.0.tgz#66d1255cf0c3bb416ab6fcb08a2389a6fdd28b62"
integrity sha512-GtF0KUTmp8pT94BLCSuzv/LQuyD9xFJCeAy7mJsqlACK/P2BFhX37zD8fDgObLlNyBMS0r3a7GpAVh3uPgaXcQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.1.tgz#11958b578ddcfe89510b943aa1d54ba9804c1db7"
integrity sha512-4UmYkvrkCGwb6xnW3vW8fOqS7eBaLX8+8IVIJJghHaMWPG0Vq1A69rXR5y2WN9JNLt6vCGqXBbR+Ly5FJu1x5w==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.1"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.1.tgz#9f43a389f602d34d4bdc4d5e5fdd142ac1af40ef"
integrity sha512-67mj6BEpbfM7UwtKlxW7RXyqf+hfwIxlk35RPIPYkQRx3663d87vq9k9UA8z/Nr3qLt5pzTvU6bC/w3yv/rVIw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.1"
"@abp/bootstrap" "~4.4.1"
"@abp/bootstrap-datepicker" "~4.4.1"
"@abp/datatables.net-bs4" "~4.4.1"
"@abp/font-awesome" "~4.4.1"
"@abp/jquery-form" "~4.4.1"
"@abp/jquery-validation-unobtrusive" "~4.4.1"
"@abp/lodash" "~4.4.1"
"@abp/luxon" "~4.4.1"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.1"
"@abp/select2" "~4.4.1"
"@abp/sweetalert" "~4.4.1"
"@abp/timeago" "~4.4.1"
"@abp/toastr" "~4.4.1"
"@abp/aspnetcore.mvc.ui@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.1.tgz#c637a42a005f7d2418b257ef599cf71498c6b14f"
integrity sha512-IC623BES0om8YGZzqWuQAtydE8umN0gaZ4kwcWbhQKcsdm+rtI1+V/CwYeS5xOPYCWa3XSyFPSxZhHzwgZ261w==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,214 +41,214 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
"@abp/blogging@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.4.0.tgz#63dec8ca615343f109f82ac9ed8f48ba449fbdab"
integrity sha512-eZeQmcTFPLpr09KjCepzU1NwuF9PULXYFt/GhN03sCNBVpBauPEcqFQhAlU+gda55E6yYGkqk1YGdkfTPVtbpg==
"@abp/blogging@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-4.4.1.tgz#f9f46b083127e35fc9f9a0cd007e2915a541143b"
integrity sha512-5/EnbqN+fQPAs5Hf8eDgIcYQp2OjRowzgWgnCif3Lxvy/8Vfa06Q7Rcd9ePuKNnGb6VNYaIxcG+QNwd2IX7h9g==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.0"
"@abp/owl.carousel" "~4.4.0"
"@abp/prismjs" "~4.4.0"
"@abp/tui-editor" "~4.4.0"
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.1"
"@abp/owl.carousel" "~4.4.1"
"@abp/prismjs" "~4.4.1"
"@abp/tui-editor" "~4.4.1"
"@abp/bootstrap-datepicker@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.0.tgz#13c5b40601bcd298a6c73c821d3afb6d6225b34a"
integrity sha512-RKjoUMZLU+2ki2pRYb4Ubu5v//5NfyisY95cw0Ljwj2Agb3ZmHVMP2Ptzd2KR8bvIqkyDLdfkE6n1NKPR/L1wA==
"@abp/bootstrap-datepicker@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.1.tgz#45c96fd20666a701415ff52459b51987bb3bca73"
integrity sha512-uFIrj+dRSfNAxPc73xvHIx1Zo3J0zVOxj0vrDCvMsMe6g2+LzSPZM8bEQZj86Ggcd4XVRS1GriQHgj4O3k8N9A==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.0.tgz#51131b48978b1bf0cbd726f0c13349efc3641907"
integrity sha512-CRDW/b7JXR8+LMb6mOWQyHbLwfbTZHL7hNPE3jJC6+TaMjWZlS0pulPkG1dBXn88+y0VaVFrzuuOYE02B1QH9w==
"@abp/bootstrap@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.1.tgz#308f72a9e1ef2e86bbe8091aec83fcadff20dcdc"
integrity sha512-vS5f1UmK/bx4Nle+fjNcVUJnOQvc0uWb/YsybFyCzBv6Nadh/VV1Uva1FDPOsvU47r5LBAU272vO4LBX+JoxMg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
"@abp/clipboard@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.4.0.tgz#28fd30fbe171470703201e5c19bad612d11842ff"
integrity sha512-rfLjuwDbq2gHojzG2MI9toQZIUKrF17r6EkvpbBprSsr/ch5fBrSn8k9MSDUd9t9agezN8tTL3KI4aduU+A1cQ==
"@abp/clipboard@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-4.4.1.tgz#a658eeccffe696ef97ce2b9f86bc77b30825303f"
integrity sha512-XG40j7juzIUwmudT/I69cVnkA8o+m8INgT8y+dL+yJ/Wpsu+z8hwPKUmStyjdfKU90MB86Yj5GMy85i8gJG/Tg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
clipboard "^2.0.6"
"@abp/codemirror@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.4.0.tgz#139a71702a9b08ef655eb2eecfbc63ebb6f53fd2"
integrity sha512-0nrrTzYCbth+6Y09/T8tKHAdszTE4LVlF911dsptn7Draw1c8lI1nafLcrC/E0xAiH6Qwdp3w34IFsZRxsy6NQ==
"@abp/codemirror@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-4.4.1.tgz#69f21940be669026e2723a729a362dbb195132ad"
integrity sha512-LmxaMzfTi+c7zsc2K5lBB3mBIIrOrEdCVOvrkAKM0PcYg8XlOm4XjDQyN/5NCxpl7HSEkK35z484XSk2DSix8w==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
codemirror "^5.54.0"
"@abp/core@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.0.tgz#717d4e0191062ec0ad74c46c2db6bb8097bd9675"
integrity sha512-p+CBel9BVcefS4R4njfvIEMBuleqXxiSxGAJKdgEo0stFVc1iPa0Q8PqBWhuP6hWGzJpk4lspszMqA6LIW3oyg==
"@abp/core@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.1.tgz#6e9f1e27b4495361f6901b7fd1c393b43cad2cfe"
integrity sha512-T6FuVs/cfYBDobtsf+HZVYViFng0FhoM3qWuRgz7r8tY/U2dYXspHU77hf9PPgqoqb4yWhn8fRrG5hFLjLvzXQ==
dependencies:
"@abp/utils" "^4.4.0"
"@abp/utils" "^4.4.1"
"@abp/datatables.net-bs4@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.0.tgz#f881c34c8d7675473c9e964821bc0201db321142"
integrity sha512-fdEZ+z6CQMQfYsOmqvNaUg1+8nssGxDtHvS10m99ALvXbCsnY4Na8NdLo1soZ8Q24FMhA5wOoLsf3CnyNEFTrw==
"@abp/datatables.net-bs4@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.1.tgz#ac25f7ddfa8bbc0f1543ab0fd59b34131375c959"
integrity sha512-sqrheS9KgtmSD3cG7/Y/6ke9QGz3gUN/a8YkOO4qYvgHcuagu1/HWycN91sP44aDkMt+VrbRMS2VyeuBcwj+cg==
dependencies:
"@abp/datatables.net" "~4.4.0"
"@abp/datatables.net" "~4.4.1"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.0.tgz#ba9d5cc241a106d3914cdf4903e284cdd7809d8b"
integrity sha512-bsrbBp2O2H3mN+Bina1KO5q976emfRssNKKHFea4wpJPf6cuyJU7EvwNRKnu/aalXxhq9XTN1+ADkX4sdoco7g==
"@abp/datatables.net@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.1.tgz#a6ae0b516f28e9cbd8234e82f9814e8eea50e8f1"
integrity sha512-66zoo6AkuH6dgW9BhDlGNVj9HmzqVVPhKdjykvy0UQBl06SGBuyd4d4BNjIa+pS5u8h9ZE8PiZzCTpUTDYw4MA==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.0.tgz#57f87b865a823d832b82405a82eb40cb78a05edb"
integrity sha512-yl69vEcX1C1mjlU8+dNgLHnOcnPqx3pQvmmLQ2GJIBAsOEZPweHVVD4aEvcmAdJOm+Vbq1j5f3TlmZcWo42SVQ==
"@abp/font-awesome@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.1.tgz#13ca84622edc96a5444d85cdaa72b91c7f987e23"
integrity sha512-NyEs/yOHqdrN4QkgvAFvqFfUGEpnKYb/rKgrSVAzCY+40D7Z0PJbMx3PP/dNKRC3wUHKUoVJSctWf6KQ947j4w==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/highlight.js@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.4.0.tgz#7805ecffe037be45b9d2e3b79b2351cd51fd3e51"
integrity sha512-j3+AP1t4v8lnh+8CXvYWRkWbs7hzz+587/jN/lgCPvqz4RrvRo81kNulEpLNj4sxsoOgLYYyJAH7yreZ1h0Obg==
"@abp/highlight.js@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-4.4.1.tgz#c3cf35ebe0d5a786240c5dbfe339d27f61014c91"
integrity sha512-IrfshZPapCr/9qJxC1BrxsPXxY7FhZa4+Adib63+kZsBsTuxYdcDktWaAPtFFVIqgw4LIbupkPpWyZ/7YxiiNQ==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
"@abp/jquery-form@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.0.tgz#b87edebbdde6f3c286ca9d7c2911609b37105ab1"
integrity sha512-PJ1A5wipPSAYAfcqe9FBCPcnxhQo4vssIcSWLfzTolngq1gX4J4fylGHKlO9AfgpsI0oXB+3MGNgXpgR6uakwA==
"@abp/jquery-form@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.1.tgz#ffd3dd4b096a336fd27719b24a0a003d6f2ab30a"
integrity sha512-U6TcJ8pCUBvCkaytYbJtsUEc9H3VePWFXJBaV8mdlP7wyh2FoOUw+9wVKAej1MZCLuRyKDbEXQbVx3nIcEWC7A==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.0.tgz#d7cba6f4888efb1d640bca2ba5a15a2ef4fb3ab0"
integrity sha512-CNwDVjGU99kDTtoyjObKcBhWNUrxXC9BeatEJn4/6uNAKA2TX32l7cFUeUL+AzVL2KeXjhzkK7/ZtsmaZ9yeRg==
"@abp/jquery-validation-unobtrusive@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.1.tgz#8d4f6c70b8279b4f97074577e9b7d1646390e223"
integrity sha512-bLBWpg/4hkBFpuE/8+itFtWMRWrQ5EJWg14qz6y8CuP9aHNL6wJummTGS2tac1T/fvUAAMT1BIGL4/ZTW2eVCQ==
dependencies:
"@abp/jquery-validation" "~4.4.0"
"@abp/jquery-validation" "~4.4.1"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.0.tgz#5cb69e3253c31bdd01dd2664940dea47198acfc9"
integrity sha512-EkO+FjdxVzLyY0zN3UWcxJKATVEhXBrmyBBVT5YoVZ4bDaR4D2/YrmL73IZaIOJC1mKbFiNcn3B8whp3a7yRNg==
"@abp/jquery-validation@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.1.tgz#d0dc26188d8ab774ef938f4ed98869ec58caf19d"
integrity sha512-AQZidEk6FAWe/kVkXLsCytE8V44+FbXat2LW9Ey6aX8Q0j3illtJ5lHzS7oROshRMPbSNYB7Jb6xkJwPIfFA7Q==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-validation "^1.19.2"
"@abp/jquery@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.0.tgz#8818eac1e4c6cccc525c51b46ea7ed2b43ca992c"
integrity sha512-VjDrV0rINmj496dpp6VjmmQWtQE1uAGN1oMDLFuSEyL6lPfqrzMnrAhmlPnxEJwyBMo4y8N3xeVgSX+ioS3dCw==
"@abp/jquery@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.1.tgz#87f3f5a4364075350c2df900a12a35a3dd003890"
integrity sha512-cR5dXlbjpjjv8w9d6alaHWP/Maa7DcEUCwDp+tqeZalSBQN++/jx7xcjsKYX2oTDZTUZAMpAgJiuJM3z9eQYVQ==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
jquery "~3.6.0"
"@abp/lodash@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.0.tgz#492ec0f4c39dcd49689545aa013bdeb52db01ea3"
integrity sha512-5Snk8WxF0Jf/CoDvzIpzTi2Y9FcVIj8kGyZ47CeIg5sYFa/NZpDij/CGhy/5QBnPOL74M9Q23NLdUTEVZPJMkA==
"@abp/lodash@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.1.tgz#e0c613aebde8aa108b85b182c4c8adbe4063ff11"
integrity sha512-TYY6nL62hNwcFT+sMTW9EfyDJEhZfhm9XJM7WEGz8Lb6BG4aTJm6eqzgvl1naThUE0ULycQykRASj5hiDR+yZw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
lodash "^4.17.15"
"@abp/luxon@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.0.tgz#4dabe1929640b1704a4a73e0ecbd9b3b03438353"
integrity sha512-fQE8aTxRyXlPyk5PD9XiuJbc3XxmkSsXMtl9u4JZYlusVyZ6o46or6LLf9KsgMwEs1C02CJyGQKqk6Gkivl7Ug==
"@abp/luxon@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.1.tgz#bd212a099c6697aca0fe7092d50441f50343b847"
integrity sha512-GrW/dlzv0L9yoCiqQxGBi+juJi4t9YEesAM//22Q7rDeslHAExf6qqjClAQZRaZJaRS6SWhyV6WU4+RP/OXKSw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.0.tgz#94cf234adca15391dc373591296ed2468dfbc0cf"
integrity sha512-de8DSEPLu+1pt9j4U1Md+6MOxV7RsxbZOs0vrRPHTdVQepxsavNncUOuKHNs0qXrsPOVBfgRzizUZGGaOpvlng==
"@abp/malihu-custom-scrollbar-plugin@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.1.tgz#5604d5e5f628a539c0fafba9e58a846cb7a5a32b"
integrity sha512-pnFX+axb6fdX1AfQPo8IIn9acgLJXCopalUTnTSXFpJYRuikXAjGRrNfqM5Wirgzthy+q7iANqPxwTqqXGi8uw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/markdown-it@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.4.0.tgz#1956bb1acba15bf96cb4e997dc4172a01e70bfe5"
integrity sha512-uOwzBPsd4h9wbr3hBrMZJ3kcOmqEuA3TDTJ6WQcvydqTPRmVW+f3iPZGtpz7YR10PybooXR+1HtPfJf31rAmag==
"@abp/markdown-it@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-4.4.1.tgz#7e70d15fc182a753ed56de69fd3c522529ba241f"
integrity sha512-dC0modPU4sS4xahgKnPjHiuSM6MfmUkpCykgoVoHhmwNzO8yDPHRrx2Ifi5TKOSRlGuMjAiDNKSS2LdmD/zMvg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
markdown-it "^11.0.0"
"@abp/owl.carousel@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.4.0.tgz#2153b297979c1cc065d6937ee33fb1172715b890"
integrity sha512-uVzZG7m+JfW+yPDfmzn3YNXGhZ9tAqTkwqvZMCLmWTozqE73SDp+UztOZsMta9UY4hJu8J+UquMgDttypFo6zw==
"@abp/owl.carousel@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-4.4.1.tgz#3107b4aeb55bb78a89f7e01cac2e6adaab1e8472"
integrity sha512-Qw7L0ZbRaZiz8Z0dndGi61MLL+gwxVVTkYHQcZ/5tzPMa736FzJLnK86VtxHzZGEdbhefYuZcIPc6TrUUxUJTQ==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
owl.carousel "^2.3.4"
"@abp/prismjs@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.4.0.tgz#fc387ff3eaa1ee2e5b331584b9863234392346dd"
integrity sha512-ndrGOaVu43YAVnMz7IZ6HfAk/I9Ffe1tjIm5+KAIn5+x2Dmr0/U/CXcGlFjm4L6DCOzjUOh3EVgxZXHIDBTw+w==
"@abp/prismjs@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-4.4.1.tgz#d5f2271ceba0dc8c297805e644a40e70a4de56ec"
integrity sha512-x7itQuuSMn468kEH2t3+hgUsm+GsvcxgXBI7vfPcCGUJjmX4GBL1e0anB0FF3pdeBMVXYOos3PofcNki0dsFWQ==
dependencies:
"@abp/clipboard" "~4.4.0"
"@abp/core" "~4.4.0"
"@abp/clipboard" "~4.4.1"
"@abp/core" "~4.4.1"
prismjs "^1.20.0"
"@abp/select2@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.0.tgz#a8db05f647aaa4f792dd5203e48666f51b340407"
integrity sha512-CWAFk9NUp03PUBfMqrek5cAQo5vXva5cqcAAl03NYn/OtCsrlc48WW0O4Lfq69VO/cPgg8fLMlNplmCAEXNAlA==
"@abp/select2@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.1.tgz#731c3ccc9bd3532eb81f77fa4416fc8c4a567d6a"
integrity sha512-wVKLU3rdUOUZT7kGX0p+Xzqs+6IGtW1FgdMLOlgGlWWuqsruw1Ix2EbvezNSFgndPYCF0A1lkVW9rst3mpo/+Q==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
select2 "^4.0.13"
"@abp/sweetalert@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.0.tgz#9feb16a54c369fd5f04276db45c36fde93ff2b22"
integrity sha512-EX3xpgIWUjTz+eFQIswJzJx9jToGSv8ohAjtFaCvV3oAlSsbxDlsqSNujyzMNa7xjL449YgLXbyYavtj+TTLKw==
"@abp/sweetalert@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.1.tgz#3defdda104c690ffc66749b023daac46b82a123c"
integrity sha512-xnG5SFhIQBT5t1AEZCSGzUSIJZ7BDWiVb1j5v4mBWgmOnNOF7/u08/MIK0RymOmRJfL+jHUR0jJBBHjnjhl4Vg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
sweetalert "^2.1.2"
"@abp/timeago@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.0.tgz#0973e0ef3caadb5101e75506367fe8b9d4b2dcfd"
integrity sha512-svHVKzQNAg4SNSv8QBh5cg7HT00/YrwUBjTg7QE6/DBfSayKYgx0lntEb02oVmR0urhw3P11FEtezKzPHZc4Mw==
"@abp/timeago@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.1.tgz#6d87919c88702e48188dc2aa0f63a17ad63e0269"
integrity sha512-pO/kkU7awjkuHHZi2NjUMy7vBWf7bYtb5wcPNvDjhm4rIly/81iSO3TTqUgmRKVZMS0V6A55cbXH3ynduecelQ==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
timeago "^1.6.7"
"@abp/toastr@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.0.tgz#0bfc809a485863d37b8b7d535d9526ea177f27d0"
integrity sha512-tc8s3nKroC2bWG2YwlTd68zsnToaAkFX3FwjfcpFknB9OGGxcAW9Iijn4Vjh41CZi9rXhBaYTZRDv0Ve0cWJbQ==
"@abp/toastr@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.1.tgz#1b5c10cb8bd43426fdac367de956105dc283a1dd"
integrity sha512-Zdpcp6q7mD8Jrtfd2YKQx0XKyiXI+1NHK5HbB4U3Z1LVpz4cb2rB3y9NS8VhS8m/hpB/eFTKSuOsVmRAKUcf+w==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
toastr "^2.1.4"
"@abp/tui-editor@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.4.0.tgz#3e6c9bab92ea843a604a46c70b707e5fe7fd85bb"
integrity sha512-NmXvh5Qwts9CECD1QEgfwAxYNqmdKV9qUWESgH9SUOmZvai+lZRxM5mdGPmfDGGh2OT1nJ2iy9HpTFNeju4TVA==
"@abp/tui-editor@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-4.4.1.tgz#062b1c10bfdfc9509c62cc3389636693cc94876e"
integrity sha512-mMTRihqE4M+lVmGj/maHavkgL1GfwMzv1k9+6mjTaBikI4hIxg3MAY5w4eBmZPuwtPecReuLPXLPDnvG+RIFIw==
dependencies:
"@abp/codemirror" "~4.4.0"
"@abp/highlight.js" "~4.4.0"
"@abp/jquery" "~4.4.0"
"@abp/markdown-it" "~4.4.0"
"@abp/codemirror" "~4.4.1"
"@abp/highlight.js" "~4.4.1"
"@abp/jquery" "~4.4.1"
"@abp/markdown-it" "~4.4.1"
"@toast-ui/editor" "^2.5.1"
"@abp/utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0.tgz#b74b5cfb8e9b078d8b7a724cac73d348f854e89c"
integrity sha512-EgLqGmfwNuDgPIoqrSJZMWvXKhScj3FE2hG0kmIBtCyj3SOaHgYVFuTqs4hx2WoBB6YUNhG3U1hn6c1EzIrIcQ==
"@abp/utils@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.1.tgz#647f952acbded1d469ca7fe00c3a37ebc5b20a2d"
integrity sha512-3h3aSel8u88qI54ZEmd6+3ZK/95E4pu/BlodPEtujHK3KC+RVriSIpty195Gr2LkrCRcNNpOgc09wI2aEx1nDw==
dependencies:
just-compare "^1.3.0"

5
modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs

@ -1,8 +1,9 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Admin.Blogs
{
public class UpdateBlogDto
public class UpdateBlogDto : IHasConcurrencyStamp
{
[Required]
public string Name { get; set; }
@ -11,5 +12,7 @@ namespace Volo.Blogging.Admin.Blogs
public string ShortName { get; set; }
public string Description { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

2
modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Blogging.Blogs;
using Volo.Blogging.Blogs.Dtos;
using Volo.Blogging.Posts;
@ -58,6 +59,7 @@ namespace Volo.Blogging.Admin.Blogs
blog.SetName(input.Name);
blog.SetShortName(input.ShortName);
blog.Description = input.Description;
blog.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
return ObjectMapper.Map<Blog, BlogDto>(blog);
}

8
modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs

@ -3,6 +3,7 @@ using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.Blogging.Admin.Blogs;
using Volo.Blogging.Blogs;
@ -53,7 +54,7 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs
return Page();
}
public class BlogEditViewModel
public class BlogEditViewModel : IHasConcurrencyStamp
{
[HiddenInput]
[Required]
@ -69,8 +70,9 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs
[DynamicStringLength(typeof(BlogConsts), nameof(BlogConsts.MaxDescriptionLength))]
public string Description { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}
}

5
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CommentWithDetailsDto.cs

@ -1,15 +1,18 @@
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Blogging.Posts;
namespace Volo.Blogging.Comments.Dtos
{
public class CommentWithDetailsDto : FullAuditedEntityDto<Guid>
public class CommentWithDetailsDto : FullAuditedEntityDto<Guid>, IHasConcurrencyStamp
{
public Guid? RepliedCommentId { get; set; }
public string Text { get; set; }
public BlogUserDto Writer { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

4
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs

@ -1,10 +1,12 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Comments.Dtos
{
public class UpdateCommentDto
public class UpdateCommentDto : IHasConcurrencyStamp
{
[Required]
public string Text { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

2
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/IPostAppService.cs

@ -7,7 +7,7 @@ namespace Volo.Blogging.Posts
{
public interface IPostAppService : IApplicationService
{
Task<ListResultDto<PostWithDetailsDto>> GetListByBlogIdAndTagName(Guid blogId, string tagName);
Task<ListResultDto<PostWithDetailsDto>> GetListByBlogIdAndTagNameAsync(Guid blogId, string tagName);
Task<ListResultDto<PostWithDetailsDto>> GetTimeOrderedListAsync(Guid blogId);

5
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs

@ -2,11 +2,12 @@
using System.Collections.Generic;
using JetBrains.Annotations;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Blogging.Tagging.Dtos;
namespace Volo.Blogging.Posts
{
public class PostWithDetailsDto : FullAuditedEntityDto<Guid>
public class PostWithDetailsDto : FullAuditedEntityDto<Guid>, IHasConcurrencyStamp
{
public Guid BlogId { get; set; }
@ -28,5 +29,7 @@ namespace Volo.Blogging.Posts
public BlogUserDto Writer { get; set; }
public List<TagDto> Tags { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

6
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs

@ -1,10 +1,10 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.Reflection;
using Volo.Abp.Domain.Entities;
namespace Volo.Blogging.Posts
{
public class UpdatePostDto
public class UpdatePostDto : IHasConcurrencyStamp
{
public Guid BlogId { get; set; }
@ -23,5 +23,7 @@ namespace Volo.Blogging.Posts
public string Description { get; set; }
public string Tags { get; set; }
public string ConcurrencyStamp { get; set; }
}
}

2
modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Tagging/ITagAppService.cs

@ -8,7 +8,7 @@ namespace Volo.Blogging.Tagging
{
public interface ITagAppService : IApplicationService
{
Task<List<TagDto>> GetPopularTags(Guid blogId, GetPopularTagsInput input);
Task<List<TagDto>> GetPopularTagsAsync(Guid blogId, GetPopularTagsInput input);
}
}

2
modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAppService.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Data;
using Volo.Abp.Guids;
using Volo.Blogging.Comments.Dtos;
using Volo.Blogging.Posts;
@ -99,6 +100,7 @@ namespace Volo.Blogging.Comments
await AuthorizationService.CheckAsync(comment, CommonOperations.Update);
comment.SetText(input.Text);
comment.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
comment = await _commentRepository.UpdateAsync(comment);

38
modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs

@ -11,6 +11,7 @@ using Volo.Blogging.Comments;
using Volo.Blogging.Tagging;
using Volo.Blogging.Tagging.Dtos;
using Volo.Blogging.Users;
using Volo.Abp.Data;
namespace Volo.Blogging.Posts
{
@ -40,24 +41,24 @@ namespace Volo.Blogging.Posts
_postsCache = postsCache;
_localEventBus = localEventBus;
}
public async Task<ListResultDto<PostWithDetailsDto>> GetListByBlogIdAndTagName(Guid id, string tagName)
public async Task<ListResultDto<PostWithDetailsDto>> GetListByBlogIdAndTagNameAsync(Guid id, string tagName)
{
var posts = await _postRepository.GetPostsByBlogId(id);
var tag = tagName.IsNullOrWhiteSpace() ? null : await _tagRepository.FindByNameAsync(id, tagName);
var userDictionary = new Dictionary<Guid, BlogUserDto>();
var postDtos = new List<PostWithDetailsDto>(ObjectMapper.Map<List<Post>, List<PostWithDetailsDto>>(posts));
foreach (var postDto in postDtos)
{
postDto.Tags = await GetTagsOfPost(postDto.Id);
postDto.Tags = await GetTagsOfPostAsync(postDto.Id);
}
if (tag != null)
{
postDtos = await FilterPostsByTag(postDtos, tag);
postDtos = await FilterPostsByTagAsync(postDtos, tag);
}
foreach (var postDto in postDtos)
{
if (postDto.CreatorId.HasValue)
@ -70,17 +71,17 @@ namespace Volo.Blogging.Posts
userDictionary[creatorUser.Id] = ObjectMapper.Map<BlogUser, BlogUserDto>(creatorUser);
}
}
if (userDictionary.ContainsKey(postDto.CreatorId.Value))
{
postDto.Writer = userDictionary[(Guid)postDto.CreatorId];
}
}
}
return new ListResultDto<PostWithDetailsDto>(postDtos);
}
public async Task<ListResultDto<PostWithDetailsDto>> GetTimeOrderedListAsync(Guid blogId)
{
var postCacheItems = await _postsCache.GetOrAddAsync(
@ -93,7 +94,7 @@ namespace Volo.Blogging.Posts
);
var postsWithDetails = ObjectMapper.Map<List<PostCacheItem>, List<PostWithDetailsDto>>(postCacheItems);
foreach (var post in postsWithDetails)
{
if (post.CreatorId.HasValue)
@ -105,7 +106,7 @@ namespace Volo.Blogging.Posts
}
}
}
return new ListResultDto<PostWithDetailsDto>(postsWithDetails);
}
@ -117,7 +118,7 @@ namespace Volo.Blogging.Posts
var postDto = ObjectMapper.Map<Post, PostWithDetailsDto>(post);
postDto.Tags = await GetTagsOfPost(postDto.Id);
postDto.Tags = await GetTagsOfPostAsync(postDto.Id);
if (postDto.CreatorId.HasValue)
{
@ -135,7 +136,7 @@ namespace Volo.Blogging.Posts
var postDto = ObjectMapper.Map<Post, PostWithDetailsDto>(post);
postDto.Tags = await GetTagsOfPost(postDto.Id);
postDto.Tags = await GetTagsOfPostAsync(postDto.Id);
if (postDto.CreatorId.HasValue)
{
@ -154,7 +155,7 @@ namespace Volo.Blogging.Posts
await AuthorizationService.CheckAsync(post, CommonOperations.Delete);
var tags = await GetTagsOfPost(id);
var tags = await GetTagsOfPostAsync(id);
await _tagRepository.DecreaseUsageCountOfTagsAsync(tags.Select(t => t.Id).ToList());
await _commentRepository.DeleteOfPost(id);
@ -173,6 +174,7 @@ namespace Volo.Blogging.Posts
post.SetTitle(input.Title);
post.SetUrl(input.Url);
post.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
post.Content = input.Content;
post.Description = input.Description;
post.CoverImage = input.CoverImage;
@ -218,7 +220,7 @@ namespace Volo.Blogging.Posts
return ObjectMapper.Map<List<Post>, List<PostCacheItem>>(posts);
}
private async Task<string> RenameUrlIfItAlreadyExistAsync(Guid blogId, string url, Post existingPost = null)
{
if (await _postRepository.IsPostUrlInUseAsync(blogId, url, existingPost?.Id))
@ -280,7 +282,7 @@ namespace Volo.Blogging.Posts
}
}
private async Task<List<TagDto>> GetTagsOfPost(Guid id)
private async Task<List<TagDto>> GetTagsOfPostAsync(Guid id)
{
var tagIds = (await _postRepository.GetAsync(id)).Tags;
@ -298,7 +300,7 @@ namespace Volo.Blogging.Posts
return new List<string>(tags.Split(",").Select(t => t.Trim()));
}
private Task<List<PostWithDetailsDto>> FilterPostsByTag(IEnumerable<PostWithDetailsDto> allPostDtos, Tag tag)
private Task<List<PostWithDetailsDto>> FilterPostsByTagAsync(IEnumerable<PostWithDetailsDto> allPostDtos, Tag tag)
{
var filteredPostDtos = allPostDtos.Where(p => p.Tags?.Any(t => t.Id == tag.Id) ?? false).ToList();

2
modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Tagging/TagAppService.cs

@ -15,7 +15,7 @@ namespace Volo.Blogging.Tagging
_tagRepository = tagRepository;
}
public async Task<List<TagDto>> GetPopularTags(Guid blogId, GetPopularTagsInput input)
public async Task<List<TagDto>> GetPopularTagsAsync(Guid blogId, GetPopularTagsInput input)
{
var postTags = (await _tagRepository.GetListAsync(blogId)).OrderByDescending(t=>t.UsageCount)
.WhereIf(input.MinimumPostCount != null, t=>t.UsageCount >= input.MinimumPostCount)

4
modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs

@ -22,9 +22,9 @@ namespace Volo.Blogging
[HttpGet]
[Route("{blogId}/all")]
public Task<ListResultDto<PostWithDetailsDto>> GetListByBlogIdAndTagName(Guid blogId, string tagName)
public Task<ListResultDto<PostWithDetailsDto>> GetListByBlogIdAndTagNameAsync(Guid blogId, string tagName)
{
return _postAppService.GetListByBlogIdAndTagName(blogId, tagName);
return _postAppService.GetListByBlogIdAndTagNameAsync(blogId, tagName);
}
[HttpGet]

4
modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs

@ -23,9 +23,9 @@ namespace Volo.Blogging
[HttpGet]
[Route("popular/{blogId}")]
public Task<List<TagDto>> GetPopularTags(Guid blogId, GetPopularTagsInput input)
public Task<List<TagDto>> GetPopularTagsAsync(Guid blogId, GetPopularTagsInput input)
{
return _tagAppService.GetPopularTags(blogId, input);
return _tagAppService.GetPopularTagsAsync(blogId, input);
}
}
}

3
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml

@ -210,7 +210,7 @@
</h3>
<div>
<form method="post">
<input name="postId" value="@Model.Post.Id" hidden />
<input name="postId" value="@Model.Post.Id" type="hidden" />
<input name="repliedCommentId" value="@commentWithRepliesDto.Comment.Id" hidden />
<div class="form-group">
@ -230,6 +230,7 @@
<div>
<form class="editFormClass">
<input name="commentId" value="@commentWithRepliesDto.Comment.Id" hidden />
<input name="concurrencyStamp" value="@commentWithRepliesDto.Comment.ConcurrencyStamp" hidden />
<div class="form-group">
<textarea class="form-control" name="text" id="textBoxId" rows="4">@commentWithRepliesDto.Comment.Text</textarea>
</div>

3
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml

@ -28,6 +28,9 @@
<div class="card">
<div class="card-body">
<form method="post" id="edit-post-form">
<abp-input asp-for="Post.ConcurrencyStamp" />
<abp-input asp-for="Post.Title" auto-focus="true" />
<abp-alert

7
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs

@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
using Volo.Blogging.Blogs;
using Volo.Blogging.Pages.Blogs.Shared.Helpers;
@ -75,7 +76,8 @@ namespace Volo.Blogging.Pages.Blog.Posts
}
}
public class EditPostViewModel
public class EditPostViewModel : IHasConcurrencyStamp
{
[Required]
[HiddenInput]
@ -106,5 +108,8 @@ namespace Volo.Blogging.Pages.Blog.Posts
public string Description { get; set; }
public string Tags { get; set; }
[HiddenInput]
public string ConcurrencyStamp { get; set; }
}
}

4
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Index.cshtml.cs

@ -44,8 +44,8 @@ namespace Volo.Blogging.Pages.Blog.Posts
}
Blog = await _blogAppService.GetByShortNameAsync(BlogShortName);
Posts = (await _postAppService.GetListByBlogIdAndTagName(Blog.Id, TagName)).Items;
PopularTags = (await _tagAppService.GetPopularTags(Blog.Id, new GetPopularTagsInput {ResultCount = 10, MinimumPostCount = 2}));
Posts = (await _postAppService.GetListByBlogIdAndTagNameAsync(Blog.Id, TagName)).Items;
PopularTags = (await _tagAppService.GetPopularTagsAsync(Blog.Id, new GetPopularTagsInput {ResultCount = 10, MinimumPostCount = 2}));
return Page();
}

3
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js

@ -60,11 +60,14 @@
id: form.commentId,
commentDto: {
text: form.text,
// TODO: Implement concurrencyStamp here:
//concurrencyStamp: form.concurrencyStamp
},
},
success: function (response) {
$('div .editForm').hide();
$('#' + form.commentId).text(form.text);
//$(this).find('[name=concurrencyStamp]').val(response.concurrencyStamp);
},
});
});

2
modules/blogging/test/Volo.Blogging.Application.Tests/Volo/Blogging/PostAppService_Tests.cs

@ -25,7 +25,7 @@ namespace Volo.Blogging
public async Task Should_Get_List_Of_Posts()
{
var blogId = (await _blogRepository.GetListAsync()).First().Id;
var posts = await _postAppService.GetListByBlogIdAndTagName(blogId, null);
var posts = await _postAppService.GetListByBlogIdAndTagNameAsync(blogId, null);
posts.Items.Count.ShouldBeGreaterThan(0);
}

2
modules/blogging/test/Volo.Blogging.Application.Tests/Volo/Blogging/TagAppService_Tests.cs

@ -23,7 +23,7 @@ namespace Volo.Blogging
[Fact]
public async Task Should_Get_Popular_Tags()
{
var tags = await _tagAppService.GetPopularTags(_bloggingTestData.Blog1Id, new GetPopularTagsInput() {ResultCount = 5, MinimumPostCount = 0 });
var tags = await _tagAppService.GetPopularTagsAsync(_bloggingTestData.Blog1Id, new GetPopularTagsInput() {ResultCount = 5, MinimumPostCount = 0 });
tags.Count.ShouldBeGreaterThan(0);
}

2
modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json

@ -3,6 +3,6 @@
"name": "client-simulation-web",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.0"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.1"
}
}

238
modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.0.tgz#dbb8add10a5d5c01fa1f7f9a918ebf87f6f9ae2b"
integrity sha512-SOBgni/T6SzIOx8vRcI7nl7vBpXrBh8yEuf9KTnjifqLIHPNv5CCyurgwLvhYayB7ST87UXBpNWwOJM1ywVtcA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.0.tgz#59408675448cd0892478f27b5fef2e317676b12c"
integrity sha512-iqHKk2Ada/c64T+ZRKuj+lc9xWO139vDCs4vi/KPNAtE7KFxU3/ogHWxFRTinZdxkhK9WBgOcsg8bbxjZmVm7g==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.0"
"@abp/bootstrap" "~4.4.0"
"@abp/bootstrap-datepicker" "~4.4.0"
"@abp/datatables.net-bs4" "~4.4.0"
"@abp/font-awesome" "~4.4.0"
"@abp/jquery-form" "~4.4.0"
"@abp/jquery-validation-unobtrusive" "~4.4.0"
"@abp/lodash" "~4.4.0"
"@abp/luxon" "~4.4.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.0"
"@abp/select2" "~4.4.0"
"@abp/sweetalert" "~4.4.0"
"@abp/timeago" "~4.4.0"
"@abp/toastr" "~4.4.0"
"@abp/aspnetcore.mvc.ui@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.0.tgz#66d1255cf0c3bb416ab6fcb08a2389a6fdd28b62"
integrity sha512-GtF0KUTmp8pT94BLCSuzv/LQuyD9xFJCeAy7mJsqlACK/P2BFhX37zD8fDgObLlNyBMS0r3a7GpAVh3uPgaXcQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.1.tgz#11958b578ddcfe89510b943aa1d54ba9804c1db7"
integrity sha512-4UmYkvrkCGwb6xnW3vW8fOqS7eBaLX8+8IVIJJghHaMWPG0Vq1A69rXR5y2WN9JNLt6vCGqXBbR+Ly5FJu1x5w==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.1"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.1.tgz#9f43a389f602d34d4bdc4d5e5fdd142ac1af40ef"
integrity sha512-67mj6BEpbfM7UwtKlxW7RXyqf+hfwIxlk35RPIPYkQRx3663d87vq9k9UA8z/Nr3qLt5pzTvU6bC/w3yv/rVIw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.1"
"@abp/bootstrap" "~4.4.1"
"@abp/bootstrap-datepicker" "~4.4.1"
"@abp/datatables.net-bs4" "~4.4.1"
"@abp/font-awesome" "~4.4.1"
"@abp/jquery-form" "~4.4.1"
"@abp/jquery-validation-unobtrusive" "~4.4.1"
"@abp/lodash" "~4.4.1"
"@abp/luxon" "~4.4.1"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.1"
"@abp/select2" "~4.4.1"
"@abp/sweetalert" "~4.4.1"
"@abp/timeago" "~4.4.1"
"@abp/toastr" "~4.4.1"
"@abp/aspnetcore.mvc.ui@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.1.tgz#c637a42a005f7d2418b257ef599cf71498c6b14f"
integrity sha512-IC623BES0om8YGZzqWuQAtydE8umN0gaZ4kwcWbhQKcsdm+rtI1+V/CwYeS5xOPYCWa3XSyFPSxZhHzwgZ261w==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,145 +41,145 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
"@abp/bootstrap-datepicker@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.0.tgz#13c5b40601bcd298a6c73c821d3afb6d6225b34a"
integrity sha512-RKjoUMZLU+2ki2pRYb4Ubu5v//5NfyisY95cw0Ljwj2Agb3ZmHVMP2Ptzd2KR8bvIqkyDLdfkE6n1NKPR/L1wA==
"@abp/bootstrap-datepicker@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.1.tgz#45c96fd20666a701415ff52459b51987bb3bca73"
integrity sha512-uFIrj+dRSfNAxPc73xvHIx1Zo3J0zVOxj0vrDCvMsMe6g2+LzSPZM8bEQZj86Ggcd4XVRS1GriQHgj4O3k8N9A==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.0.tgz#51131b48978b1bf0cbd726f0c13349efc3641907"
integrity sha512-CRDW/b7JXR8+LMb6mOWQyHbLwfbTZHL7hNPE3jJC6+TaMjWZlS0pulPkG1dBXn88+y0VaVFrzuuOYE02B1QH9w==
"@abp/bootstrap@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.1.tgz#308f72a9e1ef2e86bbe8091aec83fcadff20dcdc"
integrity sha512-vS5f1UmK/bx4Nle+fjNcVUJnOQvc0uWb/YsybFyCzBv6Nadh/VV1Uva1FDPOsvU47r5LBAU272vO4LBX+JoxMg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
"@abp/core@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.0.tgz#717d4e0191062ec0ad74c46c2db6bb8097bd9675"
integrity sha512-p+CBel9BVcefS4R4njfvIEMBuleqXxiSxGAJKdgEo0stFVc1iPa0Q8PqBWhuP6hWGzJpk4lspszMqA6LIW3oyg==
"@abp/core@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.1.tgz#6e9f1e27b4495361f6901b7fd1c393b43cad2cfe"
integrity sha512-T6FuVs/cfYBDobtsf+HZVYViFng0FhoM3qWuRgz7r8tY/U2dYXspHU77hf9PPgqoqb4yWhn8fRrG5hFLjLvzXQ==
dependencies:
"@abp/utils" "^4.4.0"
"@abp/utils" "^4.4.1"
"@abp/datatables.net-bs4@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.0.tgz#f881c34c8d7675473c9e964821bc0201db321142"
integrity sha512-fdEZ+z6CQMQfYsOmqvNaUg1+8nssGxDtHvS10m99ALvXbCsnY4Na8NdLo1soZ8Q24FMhA5wOoLsf3CnyNEFTrw==
"@abp/datatables.net-bs4@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.1.tgz#ac25f7ddfa8bbc0f1543ab0fd59b34131375c959"
integrity sha512-sqrheS9KgtmSD3cG7/Y/6ke9QGz3gUN/a8YkOO4qYvgHcuagu1/HWycN91sP44aDkMt+VrbRMS2VyeuBcwj+cg==
dependencies:
"@abp/datatables.net" "~4.4.0"
"@abp/datatables.net" "~4.4.1"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.0.tgz#ba9d5cc241a106d3914cdf4903e284cdd7809d8b"
integrity sha512-bsrbBp2O2H3mN+Bina1KO5q976emfRssNKKHFea4wpJPf6cuyJU7EvwNRKnu/aalXxhq9XTN1+ADkX4sdoco7g==
"@abp/datatables.net@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.1.tgz#a6ae0b516f28e9cbd8234e82f9814e8eea50e8f1"
integrity sha512-66zoo6AkuH6dgW9BhDlGNVj9HmzqVVPhKdjykvy0UQBl06SGBuyd4d4BNjIa+pS5u8h9ZE8PiZzCTpUTDYw4MA==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.0.tgz#57f87b865a823d832b82405a82eb40cb78a05edb"
integrity sha512-yl69vEcX1C1mjlU8+dNgLHnOcnPqx3pQvmmLQ2GJIBAsOEZPweHVVD4aEvcmAdJOm+Vbq1j5f3TlmZcWo42SVQ==
"@abp/font-awesome@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.1.tgz#13ca84622edc96a5444d85cdaa72b91c7f987e23"
integrity sha512-NyEs/yOHqdrN4QkgvAFvqFfUGEpnKYb/rKgrSVAzCY+40D7Z0PJbMx3PP/dNKRC3wUHKUoVJSctWf6KQ947j4w==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.0.tgz#b87edebbdde6f3c286ca9d7c2911609b37105ab1"
integrity sha512-PJ1A5wipPSAYAfcqe9FBCPcnxhQo4vssIcSWLfzTolngq1gX4J4fylGHKlO9AfgpsI0oXB+3MGNgXpgR6uakwA==
"@abp/jquery-form@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.1.tgz#ffd3dd4b096a336fd27719b24a0a003d6f2ab30a"
integrity sha512-U6TcJ8pCUBvCkaytYbJtsUEc9H3VePWFXJBaV8mdlP7wyh2FoOUw+9wVKAej1MZCLuRyKDbEXQbVx3nIcEWC7A==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.0.tgz#d7cba6f4888efb1d640bca2ba5a15a2ef4fb3ab0"
integrity sha512-CNwDVjGU99kDTtoyjObKcBhWNUrxXC9BeatEJn4/6uNAKA2TX32l7cFUeUL+AzVL2KeXjhzkK7/ZtsmaZ9yeRg==
"@abp/jquery-validation-unobtrusive@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.1.tgz#8d4f6c70b8279b4f97074577e9b7d1646390e223"
integrity sha512-bLBWpg/4hkBFpuE/8+itFtWMRWrQ5EJWg14qz6y8CuP9aHNL6wJummTGS2tac1T/fvUAAMT1BIGL4/ZTW2eVCQ==
dependencies:
"@abp/jquery-validation" "~4.4.0"
"@abp/jquery-validation" "~4.4.1"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.0.tgz#5cb69e3253c31bdd01dd2664940dea47198acfc9"
integrity sha512-EkO+FjdxVzLyY0zN3UWcxJKATVEhXBrmyBBVT5YoVZ4bDaR4D2/YrmL73IZaIOJC1mKbFiNcn3B8whp3a7yRNg==
"@abp/jquery-validation@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.1.tgz#d0dc26188d8ab774ef938f4ed98869ec58caf19d"
integrity sha512-AQZidEk6FAWe/kVkXLsCytE8V44+FbXat2LW9Ey6aX8Q0j3illtJ5lHzS7oROshRMPbSNYB7Jb6xkJwPIfFA7Q==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-validation "^1.19.2"
"@abp/jquery@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.0.tgz#8818eac1e4c6cccc525c51b46ea7ed2b43ca992c"
integrity sha512-VjDrV0rINmj496dpp6VjmmQWtQE1uAGN1oMDLFuSEyL6lPfqrzMnrAhmlPnxEJwyBMo4y8N3xeVgSX+ioS3dCw==
"@abp/jquery@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.1.tgz#87f3f5a4364075350c2df900a12a35a3dd003890"
integrity sha512-cR5dXlbjpjjv8w9d6alaHWP/Maa7DcEUCwDp+tqeZalSBQN++/jx7xcjsKYX2oTDZTUZAMpAgJiuJM3z9eQYVQ==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
jquery "~3.6.0"
"@abp/lodash@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.0.tgz#492ec0f4c39dcd49689545aa013bdeb52db01ea3"
integrity sha512-5Snk8WxF0Jf/CoDvzIpzTi2Y9FcVIj8kGyZ47CeIg5sYFa/NZpDij/CGhy/5QBnPOL74M9Q23NLdUTEVZPJMkA==
"@abp/lodash@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.1.tgz#e0c613aebde8aa108b85b182c4c8adbe4063ff11"
integrity sha512-TYY6nL62hNwcFT+sMTW9EfyDJEhZfhm9XJM7WEGz8Lb6BG4aTJm6eqzgvl1naThUE0ULycQykRASj5hiDR+yZw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
lodash "^4.17.15"
"@abp/luxon@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.0.tgz#4dabe1929640b1704a4a73e0ecbd9b3b03438353"
integrity sha512-fQE8aTxRyXlPyk5PD9XiuJbc3XxmkSsXMtl9u4JZYlusVyZ6o46or6LLf9KsgMwEs1C02CJyGQKqk6Gkivl7Ug==
"@abp/luxon@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.1.tgz#bd212a099c6697aca0fe7092d50441f50343b847"
integrity sha512-GrW/dlzv0L9yoCiqQxGBi+juJi4t9YEesAM//22Q7rDeslHAExf6qqjClAQZRaZJaRS6SWhyV6WU4+RP/OXKSw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.0.tgz#94cf234adca15391dc373591296ed2468dfbc0cf"
integrity sha512-de8DSEPLu+1pt9j4U1Md+6MOxV7RsxbZOs0vrRPHTdVQepxsavNncUOuKHNs0qXrsPOVBfgRzizUZGGaOpvlng==
"@abp/malihu-custom-scrollbar-plugin@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.1.tgz#5604d5e5f628a539c0fafba9e58a846cb7a5a32b"
integrity sha512-pnFX+axb6fdX1AfQPo8IIn9acgLJXCopalUTnTSXFpJYRuikXAjGRrNfqM5Wirgzthy+q7iANqPxwTqqXGi8uw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.0.tgz#a8db05f647aaa4f792dd5203e48666f51b340407"
integrity sha512-CWAFk9NUp03PUBfMqrek5cAQo5vXva5cqcAAl03NYn/OtCsrlc48WW0O4Lfq69VO/cPgg8fLMlNplmCAEXNAlA==
"@abp/select2@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.1.tgz#731c3ccc9bd3532eb81f77fa4416fc8c4a567d6a"
integrity sha512-wVKLU3rdUOUZT7kGX0p+Xzqs+6IGtW1FgdMLOlgGlWWuqsruw1Ix2EbvezNSFgndPYCF0A1lkVW9rst3mpo/+Q==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
select2 "^4.0.13"
"@abp/sweetalert@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.0.tgz#9feb16a54c369fd5f04276db45c36fde93ff2b22"
integrity sha512-EX3xpgIWUjTz+eFQIswJzJx9jToGSv8ohAjtFaCvV3oAlSsbxDlsqSNujyzMNa7xjL449YgLXbyYavtj+TTLKw==
"@abp/sweetalert@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.1.tgz#3defdda104c690ffc66749b023daac46b82a123c"
integrity sha512-xnG5SFhIQBT5t1AEZCSGzUSIJZ7BDWiVb1j5v4mBWgmOnNOF7/u08/MIK0RymOmRJfL+jHUR0jJBBHjnjhl4Vg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
sweetalert "^2.1.2"
"@abp/timeago@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.0.tgz#0973e0ef3caadb5101e75506367fe8b9d4b2dcfd"
integrity sha512-svHVKzQNAg4SNSv8QBh5cg7HT00/YrwUBjTg7QE6/DBfSayKYgx0lntEb02oVmR0urhw3P11FEtezKzPHZc4Mw==
"@abp/timeago@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.1.tgz#6d87919c88702e48188dc2aa0f63a17ad63e0269"
integrity sha512-pO/kkU7awjkuHHZi2NjUMy7vBWf7bYtb5wcPNvDjhm4rIly/81iSO3TTqUgmRKVZMS0V6A55cbXH3ynduecelQ==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
timeago "^1.6.7"
"@abp/toastr@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.0.tgz#0bfc809a485863d37b8b7d535d9526ea177f27d0"
integrity sha512-tc8s3nKroC2bWG2YwlTd68zsnToaAkFX3FwjfcpFknB9OGGxcAW9Iijn4Vjh41CZi9rXhBaYTZRDv0Ve0cWJbQ==
"@abp/toastr@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.1.tgz#1b5c10cb8bd43426fdac367de956105dc283a1dd"
integrity sha512-Zdpcp6q7mD8Jrtfd2YKQx0XKyiXI+1NHK5HbB4U3Z1LVpz4cb2rB3y9NS8VhS8m/hpB/eFTKSuOsVmRAKUcf+w==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
toastr "^2.1.4"
"@abp/utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0.tgz#b74b5cfb8e9b078d8b7a724cac73d348f854e89c"
integrity sha512-EgLqGmfwNuDgPIoqrSJZMWvXKhScj3FE2hG0kmIBtCyj3SOaHgYVFuTqs4hx2WoBB6YUNhG3U1hn6c1EzIrIcQ==
"@abp/utils@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.1.tgz#647f952acbded1d469ca7fe00c3a37ebc5b20a2d"
integrity sha512-3h3aSel8u88qI54ZEmd6+3ZK/95E4pu/BlodPEtujHK3KC+RVriSIpty195Gr2LkrCRcNNpOgc09wI2aEx1nDw==
dependencies:
just-compare "^1.3.0"

10
modules/cms-kit/angular/package.json

@ -15,11 +15,11 @@
},
"private": true,
"dependencies": {
"@abp/ng.account": "~4.4.0",
"@abp/ng.identity": "~4.4.0",
"@abp/ng.setting-management": "~4.4.0",
"@abp/ng.tenant-management": "~4.4.0",
"@abp/ng.theme.basic": "~4.4.0",
"@abp/ng.account": "~4.4.1",
"@abp/ng.identity": "~4.4.1",
"@abp/ng.setting-management": "~4.4.1",
"@abp/ng.tenant-management": "~4.4.1",
"@abp/ng.theme.basic": "~4.4.1",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",

4
modules/cms-kit/angular/projects/cms-kit/package.json

@ -4,8 +4,8 @@
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
"@abp/ng.core": ">=4.4.0",
"@abp/ng.theme.shared": ">=4.4.0"
"@abp/ng.core": ">=4.4.1",
"@abp/ng.theme.shared": ">=4.4.1"
},
"dependencies": {
"tslib": "^2.0.0"

2
modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json

@ -3,6 +3,6 @@
"name": "my-app-identityserver",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.0"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.1"
}
}

238
modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.0.tgz#dbb8add10a5d5c01fa1f7f9a918ebf87f6f9ae2b"
integrity sha512-SOBgni/T6SzIOx8vRcI7nl7vBpXrBh8yEuf9KTnjifqLIHPNv5CCyurgwLvhYayB7ST87UXBpNWwOJM1ywVtcA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.0.tgz#59408675448cd0892478f27b5fef2e317676b12c"
integrity sha512-iqHKk2Ada/c64T+ZRKuj+lc9xWO139vDCs4vi/KPNAtE7KFxU3/ogHWxFRTinZdxkhK9WBgOcsg8bbxjZmVm7g==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.0"
"@abp/bootstrap" "~4.4.0"
"@abp/bootstrap-datepicker" "~4.4.0"
"@abp/datatables.net-bs4" "~4.4.0"
"@abp/font-awesome" "~4.4.0"
"@abp/jquery-form" "~4.4.0"
"@abp/jquery-validation-unobtrusive" "~4.4.0"
"@abp/lodash" "~4.4.0"
"@abp/luxon" "~4.4.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.0"
"@abp/select2" "~4.4.0"
"@abp/sweetalert" "~4.4.0"
"@abp/timeago" "~4.4.0"
"@abp/toastr" "~4.4.0"
"@abp/aspnetcore.mvc.ui@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.0.tgz#66d1255cf0c3bb416ab6fcb08a2389a6fdd28b62"
integrity sha512-GtF0KUTmp8pT94BLCSuzv/LQuyD9xFJCeAy7mJsqlACK/P2BFhX37zD8fDgObLlNyBMS0r3a7GpAVh3uPgaXcQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.1.tgz#11958b578ddcfe89510b943aa1d54ba9804c1db7"
integrity sha512-4UmYkvrkCGwb6xnW3vW8fOqS7eBaLX8+8IVIJJghHaMWPG0Vq1A69rXR5y2WN9JNLt6vCGqXBbR+Ly5FJu1x5w==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.1"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.1.tgz#9f43a389f602d34d4bdc4d5e5fdd142ac1af40ef"
integrity sha512-67mj6BEpbfM7UwtKlxW7RXyqf+hfwIxlk35RPIPYkQRx3663d87vq9k9UA8z/Nr3qLt5pzTvU6bC/w3yv/rVIw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.1"
"@abp/bootstrap" "~4.4.1"
"@abp/bootstrap-datepicker" "~4.4.1"
"@abp/datatables.net-bs4" "~4.4.1"
"@abp/font-awesome" "~4.4.1"
"@abp/jquery-form" "~4.4.1"
"@abp/jquery-validation-unobtrusive" "~4.4.1"
"@abp/lodash" "~4.4.1"
"@abp/luxon" "~4.4.1"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.1"
"@abp/select2" "~4.4.1"
"@abp/sweetalert" "~4.4.1"
"@abp/timeago" "~4.4.1"
"@abp/toastr" "~4.4.1"
"@abp/aspnetcore.mvc.ui@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.1.tgz#c637a42a005f7d2418b257ef599cf71498c6b14f"
integrity sha512-IC623BES0om8YGZzqWuQAtydE8umN0gaZ4kwcWbhQKcsdm+rtI1+V/CwYeS5xOPYCWa3XSyFPSxZhHzwgZ261w==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,145 +41,145 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
"@abp/bootstrap-datepicker@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.0.tgz#13c5b40601bcd298a6c73c821d3afb6d6225b34a"
integrity sha512-RKjoUMZLU+2ki2pRYb4Ubu5v//5NfyisY95cw0Ljwj2Agb3ZmHVMP2Ptzd2KR8bvIqkyDLdfkE6n1NKPR/L1wA==
"@abp/bootstrap-datepicker@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.1.tgz#45c96fd20666a701415ff52459b51987bb3bca73"
integrity sha512-uFIrj+dRSfNAxPc73xvHIx1Zo3J0zVOxj0vrDCvMsMe6g2+LzSPZM8bEQZj86Ggcd4XVRS1GriQHgj4O3k8N9A==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.0.tgz#51131b48978b1bf0cbd726f0c13349efc3641907"
integrity sha512-CRDW/b7JXR8+LMb6mOWQyHbLwfbTZHL7hNPE3jJC6+TaMjWZlS0pulPkG1dBXn88+y0VaVFrzuuOYE02B1QH9w==
"@abp/bootstrap@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.1.tgz#308f72a9e1ef2e86bbe8091aec83fcadff20dcdc"
integrity sha512-vS5f1UmK/bx4Nle+fjNcVUJnOQvc0uWb/YsybFyCzBv6Nadh/VV1Uva1FDPOsvU47r5LBAU272vO4LBX+JoxMg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
"@abp/core@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.0.tgz#717d4e0191062ec0ad74c46c2db6bb8097bd9675"
integrity sha512-p+CBel9BVcefS4R4njfvIEMBuleqXxiSxGAJKdgEo0stFVc1iPa0Q8PqBWhuP6hWGzJpk4lspszMqA6LIW3oyg==
"@abp/core@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.1.tgz#6e9f1e27b4495361f6901b7fd1c393b43cad2cfe"
integrity sha512-T6FuVs/cfYBDobtsf+HZVYViFng0FhoM3qWuRgz7r8tY/U2dYXspHU77hf9PPgqoqb4yWhn8fRrG5hFLjLvzXQ==
dependencies:
"@abp/utils" "^4.4.0"
"@abp/utils" "^4.4.1"
"@abp/datatables.net-bs4@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.0.tgz#f881c34c8d7675473c9e964821bc0201db321142"
integrity sha512-fdEZ+z6CQMQfYsOmqvNaUg1+8nssGxDtHvS10m99ALvXbCsnY4Na8NdLo1soZ8Q24FMhA5wOoLsf3CnyNEFTrw==
"@abp/datatables.net-bs4@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.1.tgz#ac25f7ddfa8bbc0f1543ab0fd59b34131375c959"
integrity sha512-sqrheS9KgtmSD3cG7/Y/6ke9QGz3gUN/a8YkOO4qYvgHcuagu1/HWycN91sP44aDkMt+VrbRMS2VyeuBcwj+cg==
dependencies:
"@abp/datatables.net" "~4.4.0"
"@abp/datatables.net" "~4.4.1"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.0.tgz#ba9d5cc241a106d3914cdf4903e284cdd7809d8b"
integrity sha512-bsrbBp2O2H3mN+Bina1KO5q976emfRssNKKHFea4wpJPf6cuyJU7EvwNRKnu/aalXxhq9XTN1+ADkX4sdoco7g==
"@abp/datatables.net@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.1.tgz#a6ae0b516f28e9cbd8234e82f9814e8eea50e8f1"
integrity sha512-66zoo6AkuH6dgW9BhDlGNVj9HmzqVVPhKdjykvy0UQBl06SGBuyd4d4BNjIa+pS5u8h9ZE8PiZzCTpUTDYw4MA==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.0.tgz#57f87b865a823d832b82405a82eb40cb78a05edb"
integrity sha512-yl69vEcX1C1mjlU8+dNgLHnOcnPqx3pQvmmLQ2GJIBAsOEZPweHVVD4aEvcmAdJOm+Vbq1j5f3TlmZcWo42SVQ==
"@abp/font-awesome@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.1.tgz#13ca84622edc96a5444d85cdaa72b91c7f987e23"
integrity sha512-NyEs/yOHqdrN4QkgvAFvqFfUGEpnKYb/rKgrSVAzCY+40D7Z0PJbMx3PP/dNKRC3wUHKUoVJSctWf6KQ947j4w==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.0.tgz#b87edebbdde6f3c286ca9d7c2911609b37105ab1"
integrity sha512-PJ1A5wipPSAYAfcqe9FBCPcnxhQo4vssIcSWLfzTolngq1gX4J4fylGHKlO9AfgpsI0oXB+3MGNgXpgR6uakwA==
"@abp/jquery-form@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.1.tgz#ffd3dd4b096a336fd27719b24a0a003d6f2ab30a"
integrity sha512-U6TcJ8pCUBvCkaytYbJtsUEc9H3VePWFXJBaV8mdlP7wyh2FoOUw+9wVKAej1MZCLuRyKDbEXQbVx3nIcEWC7A==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.0.tgz#d7cba6f4888efb1d640bca2ba5a15a2ef4fb3ab0"
integrity sha512-CNwDVjGU99kDTtoyjObKcBhWNUrxXC9BeatEJn4/6uNAKA2TX32l7cFUeUL+AzVL2KeXjhzkK7/ZtsmaZ9yeRg==
"@abp/jquery-validation-unobtrusive@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.1.tgz#8d4f6c70b8279b4f97074577e9b7d1646390e223"
integrity sha512-bLBWpg/4hkBFpuE/8+itFtWMRWrQ5EJWg14qz6y8CuP9aHNL6wJummTGS2tac1T/fvUAAMT1BIGL4/ZTW2eVCQ==
dependencies:
"@abp/jquery-validation" "~4.4.0"
"@abp/jquery-validation" "~4.4.1"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.0.tgz#5cb69e3253c31bdd01dd2664940dea47198acfc9"
integrity sha512-EkO+FjdxVzLyY0zN3UWcxJKATVEhXBrmyBBVT5YoVZ4bDaR4D2/YrmL73IZaIOJC1mKbFiNcn3B8whp3a7yRNg==
"@abp/jquery-validation@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.1.tgz#d0dc26188d8ab774ef938f4ed98869ec58caf19d"
integrity sha512-AQZidEk6FAWe/kVkXLsCytE8V44+FbXat2LW9Ey6aX8Q0j3illtJ5lHzS7oROshRMPbSNYB7Jb6xkJwPIfFA7Q==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-validation "^1.19.2"
"@abp/jquery@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.0.tgz#8818eac1e4c6cccc525c51b46ea7ed2b43ca992c"
integrity sha512-VjDrV0rINmj496dpp6VjmmQWtQE1uAGN1oMDLFuSEyL6lPfqrzMnrAhmlPnxEJwyBMo4y8N3xeVgSX+ioS3dCw==
"@abp/jquery@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.1.tgz#87f3f5a4364075350c2df900a12a35a3dd003890"
integrity sha512-cR5dXlbjpjjv8w9d6alaHWP/Maa7DcEUCwDp+tqeZalSBQN++/jx7xcjsKYX2oTDZTUZAMpAgJiuJM3z9eQYVQ==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
jquery "~3.6.0"
"@abp/lodash@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.0.tgz#492ec0f4c39dcd49689545aa013bdeb52db01ea3"
integrity sha512-5Snk8WxF0Jf/CoDvzIpzTi2Y9FcVIj8kGyZ47CeIg5sYFa/NZpDij/CGhy/5QBnPOL74M9Q23NLdUTEVZPJMkA==
"@abp/lodash@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.1.tgz#e0c613aebde8aa108b85b182c4c8adbe4063ff11"
integrity sha512-TYY6nL62hNwcFT+sMTW9EfyDJEhZfhm9XJM7WEGz8Lb6BG4aTJm6eqzgvl1naThUE0ULycQykRASj5hiDR+yZw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
lodash "^4.17.15"
"@abp/luxon@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.0.tgz#4dabe1929640b1704a4a73e0ecbd9b3b03438353"
integrity sha512-fQE8aTxRyXlPyk5PD9XiuJbc3XxmkSsXMtl9u4JZYlusVyZ6o46or6LLf9KsgMwEs1C02CJyGQKqk6Gkivl7Ug==
"@abp/luxon@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.1.tgz#bd212a099c6697aca0fe7092d50441f50343b847"
integrity sha512-GrW/dlzv0L9yoCiqQxGBi+juJi4t9YEesAM//22Q7rDeslHAExf6qqjClAQZRaZJaRS6SWhyV6WU4+RP/OXKSw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.0.tgz#94cf234adca15391dc373591296ed2468dfbc0cf"
integrity sha512-de8DSEPLu+1pt9j4U1Md+6MOxV7RsxbZOs0vrRPHTdVQepxsavNncUOuKHNs0qXrsPOVBfgRzizUZGGaOpvlng==
"@abp/malihu-custom-scrollbar-plugin@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.1.tgz#5604d5e5f628a539c0fafba9e58a846cb7a5a32b"
integrity sha512-pnFX+axb6fdX1AfQPo8IIn9acgLJXCopalUTnTSXFpJYRuikXAjGRrNfqM5Wirgzthy+q7iANqPxwTqqXGi8uw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.0.tgz#a8db05f647aaa4f792dd5203e48666f51b340407"
integrity sha512-CWAFk9NUp03PUBfMqrek5cAQo5vXva5cqcAAl03NYn/OtCsrlc48WW0O4Lfq69VO/cPgg8fLMlNplmCAEXNAlA==
"@abp/select2@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.1.tgz#731c3ccc9bd3532eb81f77fa4416fc8c4a567d6a"
integrity sha512-wVKLU3rdUOUZT7kGX0p+Xzqs+6IGtW1FgdMLOlgGlWWuqsruw1Ix2EbvezNSFgndPYCF0A1lkVW9rst3mpo/+Q==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
select2 "^4.0.13"
"@abp/sweetalert@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.0.tgz#9feb16a54c369fd5f04276db45c36fde93ff2b22"
integrity sha512-EX3xpgIWUjTz+eFQIswJzJx9jToGSv8ohAjtFaCvV3oAlSsbxDlsqSNujyzMNa7xjL449YgLXbyYavtj+TTLKw==
"@abp/sweetalert@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.1.tgz#3defdda104c690ffc66749b023daac46b82a123c"
integrity sha512-xnG5SFhIQBT5t1AEZCSGzUSIJZ7BDWiVb1j5v4mBWgmOnNOF7/u08/MIK0RymOmRJfL+jHUR0jJBBHjnjhl4Vg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
sweetalert "^2.1.2"
"@abp/timeago@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.0.tgz#0973e0ef3caadb5101e75506367fe8b9d4b2dcfd"
integrity sha512-svHVKzQNAg4SNSv8QBh5cg7HT00/YrwUBjTg7QE6/DBfSayKYgx0lntEb02oVmR0urhw3P11FEtezKzPHZc4Mw==
"@abp/timeago@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.1.tgz#6d87919c88702e48188dc2aa0f63a17ad63e0269"
integrity sha512-pO/kkU7awjkuHHZi2NjUMy7vBWf7bYtb5wcPNvDjhm4rIly/81iSO3TTqUgmRKVZMS0V6A55cbXH3ynduecelQ==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
timeago "^1.6.7"
"@abp/toastr@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.0.tgz#0bfc809a485863d37b8b7d535d9526ea177f27d0"
integrity sha512-tc8s3nKroC2bWG2YwlTd68zsnToaAkFX3FwjfcpFknB9OGGxcAW9Iijn4Vjh41CZi9rXhBaYTZRDv0Ve0cWJbQ==
"@abp/toastr@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.1.tgz#1b5c10cb8bd43426fdac367de956105dc283a1dd"
integrity sha512-Zdpcp6q7mD8Jrtfd2YKQx0XKyiXI+1NHK5HbB4U3Z1LVpz4cb2rB3y9NS8VhS8m/hpB/eFTKSuOsVmRAKUcf+w==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
toastr "^2.1.4"
"@abp/utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0.tgz#b74b5cfb8e9b078d8b7a724cac73d348f854e89c"
integrity sha512-EgLqGmfwNuDgPIoqrSJZMWvXKhScj3FE2hG0kmIBtCyj3SOaHgYVFuTqs4hx2WoBB6YUNhG3U1hn6c1EzIrIcQ==
"@abp/utils@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.1.tgz#647f952acbded1d469ca7fe00c3a37ebc5b20a2d"
integrity sha512-3h3aSel8u88qI54ZEmd6+3ZK/95E4pu/BlodPEtujHK3KC+RVriSIpty195Gr2LkrCRcNNpOgc09wI2aEx1nDw==
dependencies:
just-compare "^1.3.0"

2
modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json

@ -3,6 +3,6 @@
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.0"
"@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.1"
}
}

238
modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.0.tgz#dbb8add10a5d5c01fa1f7f9a918ebf87f6f9ae2b"
integrity sha512-SOBgni/T6SzIOx8vRcI7nl7vBpXrBh8yEuf9KTnjifqLIHPNv5CCyurgwLvhYayB7ST87UXBpNWwOJM1ywVtcA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.0.tgz#59408675448cd0892478f27b5fef2e317676b12c"
integrity sha512-iqHKk2Ada/c64T+ZRKuj+lc9xWO139vDCs4vi/KPNAtE7KFxU3/ogHWxFRTinZdxkhK9WBgOcsg8bbxjZmVm7g==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.0"
"@abp/bootstrap" "~4.4.0"
"@abp/bootstrap-datepicker" "~4.4.0"
"@abp/datatables.net-bs4" "~4.4.0"
"@abp/font-awesome" "~4.4.0"
"@abp/jquery-form" "~4.4.0"
"@abp/jquery-validation-unobtrusive" "~4.4.0"
"@abp/lodash" "~4.4.0"
"@abp/luxon" "~4.4.0"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.0"
"@abp/select2" "~4.4.0"
"@abp/sweetalert" "~4.4.0"
"@abp/timeago" "~4.4.0"
"@abp/toastr" "~4.4.0"
"@abp/aspnetcore.mvc.ui@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.0.tgz#66d1255cf0c3bb416ab6fcb08a2389a6fdd28b62"
integrity sha512-GtF0KUTmp8pT94BLCSuzv/LQuyD9xFJCeAy7mJsqlACK/P2BFhX37zD8fDgObLlNyBMS0r3a7GpAVh3uPgaXcQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-4.4.1.tgz#11958b578ddcfe89510b943aa1d54ba9804c1db7"
integrity sha512-4UmYkvrkCGwb6xnW3vW8fOqS7eBaLX8+8IVIJJghHaMWPG0Vq1A69rXR5y2WN9JNLt6vCGqXBbR+Ly5FJu1x5w==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~4.4.1"
"@abp/aspnetcore.mvc.ui.theme.shared@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-4.4.1.tgz#9f43a389f602d34d4bdc4d5e5fdd142ac1af40ef"
integrity sha512-67mj6BEpbfM7UwtKlxW7RXyqf+hfwIxlk35RPIPYkQRx3663d87vq9k9UA8z/Nr3qLt5pzTvU6bC/w3yv/rVIw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~4.4.1"
"@abp/bootstrap" "~4.4.1"
"@abp/bootstrap-datepicker" "~4.4.1"
"@abp/datatables.net-bs4" "~4.4.1"
"@abp/font-awesome" "~4.4.1"
"@abp/jquery-form" "~4.4.1"
"@abp/jquery-validation-unobtrusive" "~4.4.1"
"@abp/lodash" "~4.4.1"
"@abp/luxon" "~4.4.1"
"@abp/malihu-custom-scrollbar-plugin" "~4.4.1"
"@abp/select2" "~4.4.1"
"@abp/sweetalert" "~4.4.1"
"@abp/timeago" "~4.4.1"
"@abp/toastr" "~4.4.1"
"@abp/aspnetcore.mvc.ui@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-4.4.1.tgz#c637a42a005f7d2418b257ef599cf71498c6b14f"
integrity sha512-IC623BES0om8YGZzqWuQAtydE8umN0gaZ4kwcWbhQKcsdm+rtI1+V/CwYeS5xOPYCWa3XSyFPSxZhHzwgZ261w==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,145 +41,145 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
"@abp/bootstrap-datepicker@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.0.tgz#13c5b40601bcd298a6c73c821d3afb6d6225b34a"
integrity sha512-RKjoUMZLU+2ki2pRYb4Ubu5v//5NfyisY95cw0Ljwj2Agb3ZmHVMP2Ptzd2KR8bvIqkyDLdfkE6n1NKPR/L1wA==
"@abp/bootstrap-datepicker@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-4.4.1.tgz#45c96fd20666a701415ff52459b51987bb3bca73"
integrity sha512-uFIrj+dRSfNAxPc73xvHIx1Zo3J0zVOxj0vrDCvMsMe6g2+LzSPZM8bEQZj86Ggcd4XVRS1GriQHgj4O3k8N9A==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.0.tgz#51131b48978b1bf0cbd726f0c13349efc3641907"
integrity sha512-CRDW/b7JXR8+LMb6mOWQyHbLwfbTZHL7hNPE3jJC6+TaMjWZlS0pulPkG1dBXn88+y0VaVFrzuuOYE02B1QH9w==
"@abp/bootstrap@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-4.4.1.tgz#308f72a9e1ef2e86bbe8091aec83fcadff20dcdc"
integrity sha512-vS5f1UmK/bx4Nle+fjNcVUJnOQvc0uWb/YsybFyCzBv6Nadh/VV1Uva1FDPOsvU47r5LBAU272vO4LBX+JoxMg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
bootstrap "^4.6.0"
bootstrap-v4-rtl "4.6.0-1"
"@abp/core@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.0.tgz#717d4e0191062ec0ad74c46c2db6bb8097bd9675"
integrity sha512-p+CBel9BVcefS4R4njfvIEMBuleqXxiSxGAJKdgEo0stFVc1iPa0Q8PqBWhuP6hWGzJpk4lspszMqA6LIW3oyg==
"@abp/core@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-4.4.1.tgz#6e9f1e27b4495361f6901b7fd1c393b43cad2cfe"
integrity sha512-T6FuVs/cfYBDobtsf+HZVYViFng0FhoM3qWuRgz7r8tY/U2dYXspHU77hf9PPgqoqb4yWhn8fRrG5hFLjLvzXQ==
dependencies:
"@abp/utils" "^4.4.0"
"@abp/utils" "^4.4.1"
"@abp/datatables.net-bs4@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.0.tgz#f881c34c8d7675473c9e964821bc0201db321142"
integrity sha512-fdEZ+z6CQMQfYsOmqvNaUg1+8nssGxDtHvS10m99ALvXbCsnY4Na8NdLo1soZ8Q24FMhA5wOoLsf3CnyNEFTrw==
"@abp/datatables.net-bs4@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-4.4.1.tgz#ac25f7ddfa8bbc0f1543ab0fd59b34131375c959"
integrity sha512-sqrheS9KgtmSD3cG7/Y/6ke9QGz3gUN/a8YkOO4qYvgHcuagu1/HWycN91sP44aDkMt+VrbRMS2VyeuBcwj+cg==
dependencies:
"@abp/datatables.net" "~4.4.0"
"@abp/datatables.net" "~4.4.1"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.0.tgz#ba9d5cc241a106d3914cdf4903e284cdd7809d8b"
integrity sha512-bsrbBp2O2H3mN+Bina1KO5q976emfRssNKKHFea4wpJPf6cuyJU7EvwNRKnu/aalXxhq9XTN1+ADkX4sdoco7g==
"@abp/datatables.net@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-4.4.1.tgz#a6ae0b516f28e9cbd8234e82f9814e8eea50e8f1"
integrity sha512-66zoo6AkuH6dgW9BhDlGNVj9HmzqVVPhKdjykvy0UQBl06SGBuyd4d4BNjIa+pS5u8h9ZE8PiZzCTpUTDYw4MA==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
datatables.net "^1.10.21"
"@abp/font-awesome@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.0.tgz#57f87b865a823d832b82405a82eb40cb78a05edb"
integrity sha512-yl69vEcX1C1mjlU8+dNgLHnOcnPqx3pQvmmLQ2GJIBAsOEZPweHVVD4aEvcmAdJOm+Vbq1j5f3TlmZcWo42SVQ==
"@abp/font-awesome@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-4.4.1.tgz#13ca84622edc96a5444d85cdaa72b91c7f987e23"
integrity sha512-NyEs/yOHqdrN4QkgvAFvqFfUGEpnKYb/rKgrSVAzCY+40D7Z0PJbMx3PP/dNKRC3wUHKUoVJSctWf6KQ947j4w==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.0.tgz#b87edebbdde6f3c286ca9d7c2911609b37105ab1"
integrity sha512-PJ1A5wipPSAYAfcqe9FBCPcnxhQo4vssIcSWLfzTolngq1gX4J4fylGHKlO9AfgpsI0oXB+3MGNgXpgR6uakwA==
"@abp/jquery-form@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-4.4.1.tgz#ffd3dd4b096a336fd27719b24a0a003d6f2ab30a"
integrity sha512-U6TcJ8pCUBvCkaytYbJtsUEc9H3VePWFXJBaV8mdlP7wyh2FoOUw+9wVKAej1MZCLuRyKDbEXQbVx3nIcEWC7A==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.0.tgz#d7cba6f4888efb1d640bca2ba5a15a2ef4fb3ab0"
integrity sha512-CNwDVjGU99kDTtoyjObKcBhWNUrxXC9BeatEJn4/6uNAKA2TX32l7cFUeUL+AzVL2KeXjhzkK7/ZtsmaZ9yeRg==
"@abp/jquery-validation-unobtrusive@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.4.1.tgz#8d4f6c70b8279b4f97074577e9b7d1646390e223"
integrity sha512-bLBWpg/4hkBFpuE/8+itFtWMRWrQ5EJWg14qz6y8CuP9aHNL6wJummTGS2tac1T/fvUAAMT1BIGL4/ZTW2eVCQ==
dependencies:
"@abp/jquery-validation" "~4.4.0"
"@abp/jquery-validation" "~4.4.1"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.0.tgz#5cb69e3253c31bdd01dd2664940dea47198acfc9"
integrity sha512-EkO+FjdxVzLyY0zN3UWcxJKATVEhXBrmyBBVT5YoVZ4bDaR4D2/YrmL73IZaIOJC1mKbFiNcn3B8whp3a7yRNg==
"@abp/jquery-validation@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-4.4.1.tgz#d0dc26188d8ab774ef938f4ed98869ec58caf19d"
integrity sha512-AQZidEk6FAWe/kVkXLsCytE8V44+FbXat2LW9Ey6aX8Q0j3illtJ5lHzS7oROshRMPbSNYB7Jb6xkJwPIfFA7Q==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
jquery-validation "^1.19.2"
"@abp/jquery@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.0.tgz#8818eac1e4c6cccc525c51b46ea7ed2b43ca992c"
integrity sha512-VjDrV0rINmj496dpp6VjmmQWtQE1uAGN1oMDLFuSEyL6lPfqrzMnrAhmlPnxEJwyBMo4y8N3xeVgSX+ioS3dCw==
"@abp/jquery@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-4.4.1.tgz#87f3f5a4364075350c2df900a12a35a3dd003890"
integrity sha512-cR5dXlbjpjjv8w9d6alaHWP/Maa7DcEUCwDp+tqeZalSBQN++/jx7xcjsKYX2oTDZTUZAMpAgJiuJM3z9eQYVQ==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
jquery "~3.6.0"
"@abp/lodash@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.0.tgz#492ec0f4c39dcd49689545aa013bdeb52db01ea3"
integrity sha512-5Snk8WxF0Jf/CoDvzIpzTi2Y9FcVIj8kGyZ47CeIg5sYFa/NZpDij/CGhy/5QBnPOL74M9Q23NLdUTEVZPJMkA==
"@abp/lodash@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-4.4.1.tgz#e0c613aebde8aa108b85b182c4c8adbe4063ff11"
integrity sha512-TYY6nL62hNwcFT+sMTW9EfyDJEhZfhm9XJM7WEGz8Lb6BG4aTJm6eqzgvl1naThUE0ULycQykRASj5hiDR+yZw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
lodash "^4.17.15"
"@abp/luxon@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.0.tgz#4dabe1929640b1704a4a73e0ecbd9b3b03438353"
integrity sha512-fQE8aTxRyXlPyk5PD9XiuJbc3XxmkSsXMtl9u4JZYlusVyZ6o46or6LLf9KsgMwEs1C02CJyGQKqk6Gkivl7Ug==
"@abp/luxon@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-4.4.1.tgz#bd212a099c6697aca0fe7092d50441f50343b847"
integrity sha512-GrW/dlzv0L9yoCiqQxGBi+juJi4t9YEesAM//22Q7rDeslHAExf6qqjClAQZRaZJaRS6SWhyV6WU4+RP/OXKSw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.0.tgz#94cf234adca15391dc373591296ed2468dfbc0cf"
integrity sha512-de8DSEPLu+1pt9j4U1Md+6MOxV7RsxbZOs0vrRPHTdVQepxsavNncUOuKHNs0qXrsPOVBfgRzizUZGGaOpvlng==
"@abp/malihu-custom-scrollbar-plugin@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-4.4.1.tgz#5604d5e5f628a539c0fafba9e58a846cb7a5a32b"
integrity sha512-pnFX+axb6fdX1AfQPo8IIn9acgLJXCopalUTnTSXFpJYRuikXAjGRrNfqM5Wirgzthy+q7iANqPxwTqqXGi8uw==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.0.tgz#a8db05f647aaa4f792dd5203e48666f51b340407"
integrity sha512-CWAFk9NUp03PUBfMqrek5cAQo5vXva5cqcAAl03NYn/OtCsrlc48WW0O4Lfq69VO/cPgg8fLMlNplmCAEXNAlA==
"@abp/select2@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-4.4.1.tgz#731c3ccc9bd3532eb81f77fa4416fc8c4a567d6a"
integrity sha512-wVKLU3rdUOUZT7kGX0p+Xzqs+6IGtW1FgdMLOlgGlWWuqsruw1Ix2EbvezNSFgndPYCF0A1lkVW9rst3mpo/+Q==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
select2 "^4.0.13"
"@abp/sweetalert@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.0.tgz#9feb16a54c369fd5f04276db45c36fde93ff2b22"
integrity sha512-EX3xpgIWUjTz+eFQIswJzJx9jToGSv8ohAjtFaCvV3oAlSsbxDlsqSNujyzMNa7xjL449YgLXbyYavtj+TTLKw==
"@abp/sweetalert@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-4.4.1.tgz#3defdda104c690ffc66749b023daac46b82a123c"
integrity sha512-xnG5SFhIQBT5t1AEZCSGzUSIJZ7BDWiVb1j5v4mBWgmOnNOF7/u08/MIK0RymOmRJfL+jHUR0jJBBHjnjhl4Vg==
dependencies:
"@abp/core" "~4.4.0"
"@abp/core" "~4.4.1"
sweetalert "^2.1.2"
"@abp/timeago@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.0.tgz#0973e0ef3caadb5101e75506367fe8b9d4b2dcfd"
integrity sha512-svHVKzQNAg4SNSv8QBh5cg7HT00/YrwUBjTg7QE6/DBfSayKYgx0lntEb02oVmR0urhw3P11FEtezKzPHZc4Mw==
"@abp/timeago@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-4.4.1.tgz#6d87919c88702e48188dc2aa0f63a17ad63e0269"
integrity sha512-pO/kkU7awjkuHHZi2NjUMy7vBWf7bYtb5wcPNvDjhm4rIly/81iSO3TTqUgmRKVZMS0V6A55cbXH3ynduecelQ==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
timeago "^1.6.7"
"@abp/toastr@~4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.0.tgz#0bfc809a485863d37b8b7d535d9526ea177f27d0"
integrity sha512-tc8s3nKroC2bWG2YwlTd68zsnToaAkFX3FwjfcpFknB9OGGxcAW9Iijn4Vjh41CZi9rXhBaYTZRDv0Ve0cWJbQ==
"@abp/toastr@~4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-4.4.1.tgz#1b5c10cb8bd43426fdac367de956105dc283a1dd"
integrity sha512-Zdpcp6q7mD8Jrtfd2YKQx0XKyiXI+1NHK5HbB4U3Z1LVpz4cb2rB3y9NS8VhS8m/hpB/eFTKSuOsVmRAKUcf+w==
dependencies:
"@abp/jquery" "~4.4.0"
"@abp/jquery" "~4.4.1"
toastr "^2.1.4"
"@abp/utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.0.tgz#b74b5cfb8e9b078d8b7a724cac73d348f854e89c"
integrity sha512-EgLqGmfwNuDgPIoqrSJZMWvXKhScj3FE2hG0kmIBtCyj3SOaHgYVFuTqs4hx2WoBB6YUNhG3U1hn6c1EzIrIcQ==
"@abp/utils@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.4.1.tgz#647f952acbded1d469ca7fe00c3a37ebc5b20a2d"
integrity sha512-3h3aSel8u88qI54ZEmd6+3ZK/95E4pu/BlodPEtujHK3KC+RVriSIpty195Gr2LkrCRcNNpOgc09wI2aEx1nDw==
dependencies:
just-compare "^1.3.0"

2036
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.Designer.cs

File diff suppressed because it is too large

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save