diff --git a/.github/workflows/cancel-workflow.yml b/.github/workflows/cancel-workflow.yml new file mode 100644 index 0000000000..78bbf94b3b --- /dev/null +++ b/.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 }} diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md index 2a3e43c736..e2df7c262e 100644 --- a/docs/en/Tutorials/Part-9.md +++ b/docs/en/Tutorials/Part-9.md @@ -1022,7 +1022,7 @@ Create a new Razor Component Page, `/Pages/Authors.razor`, in the `Acme.BookStor ```` -* 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). diff --git a/docs/en/UI/Angular/Settings.md b/docs/en/UI/Angular/Settings.md index 0dd29025e5..69794d5d5b 100644 --- a/docs/en/UI/Angular/Settings.md +++ b/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 diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Properties/launchSettings.json deleted file mode 100644 index f52562c96c..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Properties/launchSettings.json +++ /dev/null @@ -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" - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj index 18e9a271dc..fc925f4a60 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Volo.Abp.AspNetCore.Authentication.OAuth.csproj @@ -13,6 +13,7 @@ false true Library + true diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj index 8f5984fe81..2810a113c4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming/Volo.Abp.AspNetCore.Components.Server.Theming.csproj @@ -7,6 +7,7 @@ net5.0 true Library + true diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj index 86d870d2ca..09bf406c74 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj @@ -7,6 +7,7 @@ net5.0 true Library + true diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Properties/launchSettings.json deleted file mode 100644 index b9542fa082..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Properties/launchSettings.json +++ /dev/null @@ -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" - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj index aae260d7e8..e9cac92c0e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo.Abp.AspNetCore.Mvc.Client.csproj @@ -13,6 +13,7 @@ false true Library + true diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json deleted file mode 100644 index afff9bb30b..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Properties/launchSettings.json +++ /dev/null @@ -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" - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj index f42418a107..538b3660c5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Serilog/Volo.Abp.AspNetCore.Serilog.csproj @@ -13,6 +13,7 @@ false true Library + true diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.SignalR/Properties/launchSettings.json deleted file mode 100644 index f5e00240d4..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.SignalR/Properties/launchSettings.json +++ /dev/null @@ -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" - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj index 9fc69b34cc..54610a20a3 100644 --- a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj +++ b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo.Abp.AspNetCore.SignalR.csproj @@ -13,6 +13,7 @@ false true Library + true diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore.TestBase/Properties/launchSettings.json deleted file mode 100644 index fca23e6182..0000000000 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/Properties/launchSettings.json +++ /dev/null @@ -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" - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj index a73f2c6245..137c78ca90 100644 --- a/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj +++ b/framework/src/Volo.Abp.AspNetCore.TestBase/Volo.Abp.AspNetCore.TestBase.csproj @@ -13,6 +13,7 @@ false true Library + true diff --git a/framework/src/Volo.Abp.AspNetCore/Properties/launchSettings.json b/framework/src/Volo.Abp.AspNetCore/Properties/launchSettings.json deleted file mode 100644 index 78196102ba..0000000000 --- a/framework/src/Volo.Abp.AspNetCore/Properties/launchSettings.json +++ /dev/null @@ -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" - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj index b191872339..e8f290f294 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj +++ b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj @@ -13,6 +13,7 @@ false true Library + true diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/ConcurrencyStampExtensions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/ConcurrencyStampExtensions.cs new file mode 100644 index 0000000000..0d97d3a68a --- /dev/null +++ b/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; + } + } + } +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/BasicAggregateRoot.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/BasicAggregateRoot.cs index 42b0ba1320..a4a90d1504 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/BasicAggregateRoot.cs +++ b/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 _distributedEvents = new Collection(); - private readonly ICollection _localEvents = new Collection(); + private readonly ICollection _distributedEvents = new Collection(); + private readonly ICollection _localEvents = new Collection(); - public virtual IEnumerable GetLocalEvents() + public virtual IEnumerable GetLocalEvents() { return _localEvents; } - public virtual IEnumerable GetDistributedEvents() + public virtual IEnumerable 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, IGeneratesDomainEvents { - private readonly ICollection _distributedEvents = new Collection(); - private readonly ICollection _localEvents = new Collection(); + private readonly ICollection _distributedEvents = new Collection(); + private readonly ICollection _localEvents = new Collection(); protected BasicAggregateRoot() { @@ -62,12 +63,12 @@ namespace Volo.Abp.Domain.Entities } - public virtual IEnumerable GetLocalEvents() + public virtual IEnumerable GetLocalEvents() { return _localEvents; } - public virtual IEnumerable GetDistributedEvents() + public virtual IEnumerable 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())); } } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/DomainEventRecord.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/DomainEventRecord.cs new file mode 100644 index 0000000000..bfe8988417 --- /dev/null +++ b/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; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/DomainEventEntry.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/DomainEventEntry.cs index e0b645d1c5..5400a2f199 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/DomainEventEntry.cs +++ b/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; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs index 2747257001..1d16909d1f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs +++ b/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 /// public class EntityChangeEventHelper : IEntityChangeEventHelper, ITransientDependency { + private const string UnitOfWorkEventRecordEntityPropName = "_Abp_Entity"; + public ILogger 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.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 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 localEvents) - { - foreach (var localEvent in localEvents) - { - await LocalEventBus.PublishAsync(localEvent.EventData.GetType(), localEvent.EventData); - } - } - - protected virtual async Task TriggerDistributedEvents(List 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 - { - 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); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeReport.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeReport.cs deleted file mode 100644 index 921de844c7..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeReport.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; - -namespace Volo.Abp.Domain.Entities.Events -{ - public class EntityChangeReport - { - public List ChangedEntities { get; } - - public List DomainEvents { get; } - - public List DistributedEvents { get; } - - public EntityChangeReport() - { - ChangedEntities = new List(); - DomainEvents = new List(); - DistributedEvents = new List(); - } - - 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}"; - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs index fb914ed46d..a965a996b7 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs @@ -8,6 +8,7 @@ namespace Volo.Abp.Domain.Entities.Events /// /// Entity type [Serializable] + [Obsolete("This event is no longer needed and identical to EntityChangedEventData. Please use EntityChangedEventData instead.")] public class EntityChangingEventData : EntityEventData { /// diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs index 39ad3c4480..d5c7b21a24 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs @@ -7,6 +7,7 @@ namespace Volo.Abp.Domain.Entities.Events /// /// Entity type [Serializable] + [Obsolete("This event is no longer needed and identical to EntityCreatedEventData. Please use EntityCreatedEventData instead.")] public class EntityCreatingEventData : EntityChangingEventData { /// diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs index b8e336ed3e..4fd571ca7f 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs @@ -7,6 +7,7 @@ namespace Volo.Abp.Domain.Entities.Events /// /// Entity type [Serializable] + [Obsolete("This event is no longer needed and identical to EntityDeleteEventData. Please use EntityDeleteEventData instead.")] public class EntityDeletingEventData : EntityChangingEventData { /// diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityEventReport.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityEventReport.cs new file mode 100644 index 0000000000..093a389206 --- /dev/null +++ b/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 DomainEvents { get; } + + public List DistributedEvents { get; } + + public EntityEventReport() + { + DomainEvents = new List(); + DistributedEvents = new List(); + } + + public override string ToString() + { + return $"[{nameof(EntityEventReport)}] DomainEvents: {DomainEvents.Count}, DistributedEvents: {DistributedEvents.Count}"; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs index 72a401fb34..74ed41c157 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs @@ -7,6 +7,7 @@ namespace Volo.Abp.Domain.Entities.Events /// /// Entity type [Serializable] + [Obsolete("This event is no longer needed and identical to EntityUpdatedEventData. Please use EntityUpdatedEventData instead.")] public class EntityUpdatingEventData : EntityChangingEventData { /// diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs index 59fa72ba09..1c54dc4578 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs +++ b/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 { /// @@ -7,15 +5,13 @@ namespace Volo.Abp.Domain.Entities.Events /// 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); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs index 85b660ed08..7f8adb575e 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs +++ b/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 { /// @@ -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; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IGeneratesDomainEvents.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IGeneratesDomainEvents.cs index 5d0d5c7959..a101f6b3e9 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/IGeneratesDomainEvents.cs +++ b/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 GetLocalEvents(); + IEnumerable GetLocalEvents(); - IEnumerable GetDistributedEvents(); + IEnumerable GetDistributedEvents(); void ClearLocalEvents(); diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 9b488924e8..b86f9b83b1 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/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(); public IClock Clock => LazyServiceProvider.LazyGetRequiredService(); + + public IDistributedEventBus DistributedEventBus => LazyServiceProvider.LazyGetRequiredService(); + + public ILocalEventBus LocalEventBus => LazyServiceProvider.LazyGetRequiredService(); public ILogger> Logger => LazyServiceProvider.LazyGetService>>(NullLogger>.Instance); @@ -150,20 +156,21 @@ namespace Volo.Abp.EntityFrameworkCore try { var auditLog = AuditingManager?.Current?.Log; - List 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) + ); + } + } + /// /// This method will call the DbContext method directly of EF Core, which doesn't apply concepts of abp. /// @@ -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().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().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; diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs index 0b228d676c..0be3a326b6 100644 --- a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaDistributedEventBus.cs +++ b/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, IKafkaMessageConsumerFactory messageConsumerFactory, IOptions abpDistributedEventBusOptions, @@ -40,7 +42,7 @@ namespace Volo.Abp.EventBus.Kafka IProducerPool producerPool, IEventErrorHandler errorHandler, IOptions 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 headersArguments) { await PublishAsync(AbpKafkaEventBusOptions.TopicName, eventType, eventData, headers, headersArguments); diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 541fce1334..f5e3682a7a 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/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 distributedEventBusOptions, IRabbitMqMessageConsumerFactory messageConsumerFactory, ICurrentTenant currentTenant, + IUnitOfWorkManager unitOfWorkManager, IEventErrorHandler errorHandler, IOptions 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 headersArguments = null) + protected override void AddToUnitOfWork(IUnitOfWork unitOfWork, UnitOfWorkEventRecord eventRecord) { + unitOfWork.AddOrReplaceDistributedEvent(eventRecord); + } + public Task PublishAsync(Type eventType, object eventData, IBasicProperties properties, Dictionary headersArguments = null) + { var eventName = EventNameAttribute.GetNameOrDefault(eventType); var body = Serializer.Serialize(eventData); diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs index 97bedaf8fb..0206b5fefc 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusDistributedEventBus.cs +++ b/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, IOptions 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 GetOrCreateHandlerFactories(Type eventType) { return HandlerFactories.GetOrAdd( diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs index 0d0ea6b107..3ee3700a0d 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/LocalDistributedEventBus.cs +++ b/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 eventData) + public Task PublishAsync(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); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs index cfec832893..60be7a147c 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/NullDistributedEventBus.cs @@ -77,12 +77,12 @@ namespace Volo.Abp.EventBus.Distributed } - public Task PublishAsync(TEvent eventData) where TEvent : class + public Task PublishAsync(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; } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs index 78d226538e..f29a169cb5 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs +++ b/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); /// - public virtual Task PublishAsync(TEvent eventData) where TEvent : class + public Task PublishAsync(TEvent eventData, bool onUnitOfWorkComplete = true) where TEvent : class { - return PublishAsync(typeof(TEvent), eventData); + return PublishAsync(typeof(TEvent), eventData, onUnitOfWorkComplete); } /// - 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 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); } } } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs index d28b3ab2a4..6fb424c550 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventBus.cs @@ -10,8 +10,9 @@ namespace Volo.Abp.EventBus /// /// Event type /// Related data for the event + /// True, to publish the event at the end of the current unit of work, if available /// The task to handle async operation - Task PublishAsync(TEvent eventData) + Task PublishAsync(TEvent eventData, bool onUnitOfWorkComplete = true) where TEvent : class; /// @@ -19,8 +20,9 @@ namespace Volo.Abp.EventBus /// /// Event type /// Related data for the event + /// True, to publish the event at the end of the current unit of work, if available /// The task to handle async operation - Task PublishAsync(Type eventType, object eventData); + Task PublishAsync(Type eventType, object eventData, bool onUnitOfWorkComplete = true); /// /// Registers to an event. diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs index 3dc6045250..77bf5b43bd 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventBus.cs +++ b/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 options, IServiceScopeFactory serviceScopeFactory, ICurrentTenant currentTenant, + IUnitOfWorkManager unitOfWorkManager, IEventErrorHandler errorHandler) - : base(serviceScopeFactory, currentTenant, errorHandler) + : base(serviceScopeFactory, currentTenant, unitOfWorkManager, errorHandler) { Options = options.Value; Logger = NullLogger.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 => diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/NullLocalEventBus.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/NullLocalEventBus.cs index 5c74af2195..f3eab30dc1 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/NullLocalEventBus.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/NullLocalEventBus.cs @@ -77,12 +77,12 @@ namespace Volo.Abp.EventBus.Local } - public Task PublishAsync(TEvent eventData) where TEvent : class + public Task PublishAsync(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; } diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/UnitOfWorkEventPublisher.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/UnitOfWorkEventPublisher.cs new file mode 100644 index 0000000000..65e271afa8 --- /dev/null +++ b/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 localEvents) + { + foreach (var localEvent in localEvents) + { + await _localEventBus.PublishAsync(localEvent.EventType, localEvent.EventData, onUnitOfWorkComplete: false); + } + } + + public async Task PublishDistributedEventsAsync(IEnumerable distributedEvents) + { + foreach (var distributedEvent in distributedEvents) + { + await _distributedEventBus.PublishAsync(distributedEvent.EventType, distributedEvent.EventData, onUnitOfWorkComplete: false); + } + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Properties/launchSettings.json b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Properties/launchSettings.json deleted file mode 100644 index c5f82293b3..0000000000 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Properties/launchSettings.json +++ /dev/null @@ -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" - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj index 81a3d0ab9e..af28fdfba8 100644 --- a/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj +++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.Web/Volo.Abp.Http.Client.IdentityModel.Web.csproj @@ -13,6 +13,7 @@ false true Library + true diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index b915e968ca..cf3479de67 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/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 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)) { diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 99e732cf9c..a40117e0ff 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/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(); diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs index 7b3a45b20c..3418b1d897 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs +++ b/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; + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs index 882c8d6a70..1f7b07f1c5 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs +++ b/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 replacementSelector = null) + { + _parent.AddOrReplaceLocalEvent(eventRecord, replacementSelector); + } + + public void AddOrReplaceDistributedEvent( + UnitOfWorkEventRecord eventRecord, + Predicate replacementSelector = null) + { + _parent.AddOrReplaceDistributedEvent(eventRecord, replacementSelector); + } + public IDatabaseApi FindDatabaseApi(string key) { return _parent.FindDatabaseApi(key); diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/EventOrderGenerator.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/EventOrderGenerator.cs new file mode 100644 index 0000000000..feb5dbfd08 --- /dev/null +++ b/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); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs index b613ccec59..524a92e63d 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs @@ -2,6 +2,6 @@ { public interface IAmbientUnitOfWork : IUnitOfWorkAccessor { - + IUnitOfWork GetCurrentByChecking(); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs index ee5baa58bc..0b8a96297e 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs +++ b/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 handler); + + void AddOrReplaceLocalEvent( + UnitOfWorkEventRecord eventRecord, + Predicate replacementSelector = null + ); + + void AddOrReplaceDistributedEvent( + UnitOfWorkEventRecord eventRecord, + Predicate replacementSelector = null + ); } } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkEventPublisher.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkEventPublisher.cs new file mode 100644 index 0000000000..a060d2903e --- /dev/null +++ b/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 localEvents); + + Task PublishDistributedEventsAsync(IEnumerable distributedEvents); + } +} diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/NullUnitOfWorkEventPublisher.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/NullUnitOfWorkEventPublisher.cs new file mode 100644 index 0000000000..533695f902 --- /dev/null +++ b/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 localEvents) + { + return Task.CompletedTask; + } + + public Task PublishDistributedEventsAsync(IEnumerable distributedEvents) + { + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index 7b4f8fda33..520fa69392 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/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> CompletedHandlers { get; } = new List>(); + protected List DistributedEvents { get; } = new List(); + protected List LocalEvents { get; } = new List(); public event EventHandler Failed; public event EventHandler Disposed; public IServiceProvider ServiceProvider { get; } + protected IUnitOfWorkEventPublisher UnitOfWorkEventPublisher { get; } [NotNull] public Dictionary Items { get; } @@ -50,9 +54,13 @@ namespace Volo.Abp.Uow private bool _isCompleting; private bool _isRolledback; - public UnitOfWork(IServiceProvider serviceProvider, IOptions options) + public UnitOfWork( + IServiceProvider serviceProvider, + IUnitOfWorkEventPublisher unitOfWorkEventPublisher, + IOptions options) { ServiceProvider = serviceProvider; + UnitOfWorkEventPublisher = unitOfWorkEventPublisher; _defaultOptions = options.Value; _databaseApis = new Dictionary(); @@ -103,12 +111,12 @@ namespace Volo.Abp.Uow } } - public IReadOnlyList GetAllActiveDatabaseApis() + public virtual IReadOnlyList GetAllActiveDatabaseApis() { return _databaseApis.Values.ToImmutableList(); } - public IReadOnlyList GetAllActiveTransactionApis() + public virtual IReadOnlyList 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 factory) + public virtual IDatabaseApi GetOrAddDatabaseApi(string key, Func 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 factory) + public virtual ITransactionApi GetOrAddTransactionApi(string key, Func 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 handler) + public virtual void OnCompleted(Func handler) { CompletedHandlers.Add(handler); } + public virtual void AddOrReplaceLocalEvent( + UnitOfWorkEventRecord eventRecord, + Predicate replacementSelector = null) + { + AddOrReplaceEvent(LocalEvents, eventRecord, replacementSelector); + } + + public virtual void AddOrReplaceDistributedEvent( + UnitOfWorkEventRecord eventRecord, + Predicate replacementSelector = null) + { + AddOrReplaceEvent(DistributedEvents, eventRecord, replacementSelector); + } + + public virtual void AddOrReplaceEvent( + List eventRecords, + UnitOfWorkEventRecord eventRecord, + Predicate 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) diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkEventRecord.cs new file mode 100644 index 0000000000..11ae4920cd --- /dev/null +++ b/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; } + + /// + /// Extra properties can be used if needed. + /// + public Dictionary Properties { get; } = new Dictionary(); + + public UnitOfWorkEventRecord( + Type eventType, + object eventData, + long eventOrder) + { + EventType = eventType; + EventData = eventData; + EventOrder = eventOrder; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs index de0d8daa0a..9a9b3c7b38 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs +++ b/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 DisableObsoleteDbContextCreationWarning { get; } = new AsyncLocal(); - 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(); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/TestUnitOfWork.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/TestUnitOfWork.cs index 3b9ec55e75..bf0d0c8781 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Uow/TestUnitOfWork.cs +++ b/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 options, TestUnitOfWorkConfig config) - : base(serviceProvider, options) + public TestUnitOfWork( + IServiceProvider serviceProvider, + IUnitOfWorkEventPublisher unitOfWorkEventPublisher, + IOptions options, TestUnitOfWorkConfig config) + : base( + serviceProvider, + unitOfWorkEventPublisher, + options) { _config = config; } diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DomainEvents/DomainEvents_Tests.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DomainEvents/DomainEvents_Tests.cs index 52af309369..eae88cab0a 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/DomainEvents/DomainEvents_Tests.cs +++ b/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 { - + [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(); + } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs index 3ca7eaf8e4..04d0dda3c4 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/DomainEvents_Tests.cs +++ b/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(); } + [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>(data => + { + data.Entity.Name.ShouldBe("TestPerson1"); + testPersonCreateHandled = true; + douglesUpdateHandled.ShouldBeFalse(); + douglesNameChangeHandled.ShouldBeFalse(); + customEventHandled.ShouldBeFalse(); + customEvent2Handled.ShouldBeFalse(); + return Task.CompletedTask; + }); + + LocalEventBus.Subscribe(data => + { + data.Value.ShouldBe("42"); + customEventHandled = true; + testPersonCreateHandled.ShouldBeTrue(); + douglesUpdateHandled.ShouldBeFalse(); + douglesNameChangeHandled.ShouldBeFalse(); + customEvent2Handled.ShouldBeFalse(); + return Task.CompletedTask; + }); + + LocalEventBus.Subscribe(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>(data => + { + data.Entity.Name.ShouldBe("Douglas-Updated"); + douglesUpdateHandled = true; + testPersonCreateHandled.ShouldBeTrue(); + customEventHandled.ShouldBeTrue(); + douglesNameChangeHandled.ShouldBeTrue(); + customEvent2Handled.ShouldBeFalse(); + return Task.CompletedTask; + }); + + LocalEventBus.Subscribe(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>(data => + { + data.Entity.Name.ShouldBe("TestPerson1"); + throw new ApplicationException("Just to rollback the UOW"); + }); + + var exception = await Assert.ThrowsAsync(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; } + } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs index cb16a46439..b87f23774a 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs +++ b/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().Begin()) { +#pragma warning disable 618 LocalEventBus.Subscribe>(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>(eto => + { + createEventCount++; + return Task.CompletedTask; + }); + DistributedEventBus.Subscribe>(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().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); } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs index f21cc7371b..0fdcd5a2ba 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/TestAppTestBase.cs +++ b/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(); } } diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs index 05ff98b35b..5c6612d1cc 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs +++ b/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 GetUserByEmail(string email) + protected virtual async Task GetUserByEmailAsync(string email) { var user = await UserManager.FindByEmailAsync(email); if (user == null) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs index 512d646ff2..7b86f8f3fd 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/AccountProfilePersonalInfoManagementGroupViewComponent.cs +++ b/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; } } } } diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml index 33ca670b0c..ec65f49834 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo/Default.cshtml @@ -19,6 +19,8 @@ @L["PersonalSettings"] + + diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json index 6690fc6f4e..5b5158261b 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json +++ b/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": {} diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock index 1d937f1286..fc509230a3 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock +++ b/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" diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json index 3c10d710a1..70488d06c7 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json +++ b/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": {} } diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock index 90a2aa7123..68de59bedf 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock +++ b/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" diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json index c17157cac1..8a4749b07f 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/package.json +++ b/modules/blogging/app/Volo.BloggingTestApp/package.json @@ -3,7 +3,7 @@ "name": "volo.blogtestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.0", - "@abp/blogging": "^4.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.1", + "@abp/blogging": "^4.4.1" } } \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index db319582e1..181278961b 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock +++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^4.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" diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs index 759bdf31aa..dc67539b22 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Blogs/UpdateBlogDto.cs +++ b/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; } } } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs index 1c5f282d7c..d24240b64c 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs +++ b/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); } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs index 9c752e6c44..ec6bed5883 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs +++ b/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; } } } - - } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CommentWithDetailsDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CommentWithDetailsDto.cs index 7c39dc5142..58e529190b 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/CommentWithDetailsDto.cs +++ b/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 + public class CommentWithDetailsDto : FullAuditedEntityDto, IHasConcurrencyStamp { public Guid? RepliedCommentId { get; set; } public string Text { get; set; } public BlogUserDto Writer { get; set; } + + public string ConcurrencyStamp { get; set; } } } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs index 0385feb9b8..f8a4b55819 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Comments/Dtos/UpdateCommentDto.cs +++ b/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; } } } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/IPostAppService.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/IPostAppService.cs index 55b64d29de..8f1f2c251d 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/IPostAppService.cs +++ b/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> GetListByBlogIdAndTagName(Guid blogId, string tagName); + Task> GetListByBlogIdAndTagNameAsync(Guid blogId, string tagName); Task> GetTimeOrderedListAsync(Guid blogId); diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs index 15401afbc6..91898d5db1 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs +++ b/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 + public class PostWithDetailsDto : FullAuditedEntityDto, IHasConcurrencyStamp { public Guid BlogId { get; set; } @@ -28,5 +29,7 @@ namespace Volo.Blogging.Posts public BlogUserDto Writer { get; set; } public List Tags { get; set; } + + public string ConcurrencyStamp { get; set; } } } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs index 988d708440..459d04af7d 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs +++ b/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; } } } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Tagging/ITagAppService.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Tagging/ITagAppService.cs index 8ee283dbcd..b2013bc2fd 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Tagging/ITagAppService.cs +++ b/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> GetPopularTags(Guid blogId, GetPopularTagsInput input); + Task> GetPopularTagsAsync(Guid blogId, GetPopularTagsInput input); } } diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAppService.cs index 8ceb20427e..0b36f8ec37 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Comments/CommentAppService.cs +++ b/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); diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs index 7b42d25f84..a886649104 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs +++ b/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> GetListByBlogIdAndTagName(Guid id, string tagName) + + public async Task> 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(); var postDtos = new List(ObjectMapper.Map, List>(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(creatorUser); } } - + if (userDictionary.ContainsKey(postDto.CreatorId.Value)) { postDto.Writer = userDictionary[(Guid)postDto.CreatorId]; } } } - + return new ListResultDto(postDtos); } - + public async Task> GetTimeOrderedListAsync(Guid blogId) { var postCacheItems = await _postsCache.GetOrAddAsync( @@ -93,7 +94,7 @@ namespace Volo.Blogging.Posts ); var postsWithDetails = ObjectMapper.Map, List>(postCacheItems); - + foreach (var post in postsWithDetails) { if (post.CreatorId.HasValue) @@ -105,7 +106,7 @@ namespace Volo.Blogging.Posts } } } - + return new ListResultDto(postsWithDetails); } @@ -117,7 +118,7 @@ namespace Volo.Blogging.Posts var postDto = ObjectMapper.Map(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); - 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>(posts); } - + private async Task 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> GetTagsOfPost(Guid id) + private async Task> GetTagsOfPostAsync(Guid id) { var tagIds = (await _postRepository.GetAsync(id)).Tags; @@ -298,7 +300,7 @@ namespace Volo.Blogging.Posts return new List(tags.Split(",").Select(t => t.Trim())); } - private Task> FilterPostsByTag(IEnumerable allPostDtos, Tag tag) + private Task> FilterPostsByTagAsync(IEnumerable allPostDtos, Tag tag) { var filteredPostDtos = allPostDtos.Where(p => p.Tags?.Any(t => t.Id == tag.Id) ?? false).ToList(); diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Tagging/TagAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Tagging/TagAppService.cs index 7ea56ea2c8..440d245946 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Tagging/TagAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Tagging/TagAppService.cs @@ -15,7 +15,7 @@ namespace Volo.Blogging.Tagging _tagRepository = tagRepository; } - public async Task> GetPopularTags(Guid blogId, GetPopularTagsInput input) + public async Task> GetPopularTagsAsync(Guid blogId, GetPopularTagsInput input) { var postTags = (await _tagRepository.GetListAsync(blogId)).OrderByDescending(t=>t.UsageCount) .WhereIf(input.MinimumPostCount != null, t=>t.UsageCount >= input.MinimumPostCount) diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs index f7a1c01703..f3d67af815 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/PostsController.cs @@ -22,9 +22,9 @@ namespace Volo.Blogging [HttpGet] [Route("{blogId}/all")] - public Task> GetListByBlogIdAndTagName(Guid blogId, string tagName) + public Task> GetListByBlogIdAndTagNameAsync(Guid blogId, string tagName) { - return _postAppService.GetListByBlogIdAndTagName(blogId, tagName); + return _postAppService.GetListByBlogIdAndTagNameAsync(blogId, tagName); } [HttpGet] diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs index 6f17623a5e..4c2c34db44 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo/Blogging/TagsController.cs @@ -23,9 +23,9 @@ namespace Volo.Blogging [HttpGet] [Route("popular/{blogId}")] - public Task> GetPopularTags(Guid blogId, GetPopularTagsInput input) + public Task> GetPopularTagsAsync(Guid blogId, GetPopularTagsInput input) { - return _tagAppService.GetPopularTags(blogId, input); + return _tagAppService.GetPopularTagsAsync(blogId, input); } } } diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml index e94b9ba7a8..adade3e603 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml @@ -210,7 +210,7 @@ - + @@ -230,6 +230,7 @@ + @commentWithRepliesDto.Comment.Text diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml index a4fcbc0414..7054895df0 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml @@ -28,6 +28,9 @@ + + + =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" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json index 70bc19f4db..9e94dcb2b2 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock index db6c768963..b4040c90ba 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^4.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" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json index 3b5fc0e6e6..58395926ea 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.4.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock index 364961f53f..c06696242f 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^4.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" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.Designer.cs new file mode 100644 index 0000000000..70d456f3ac --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210817095158_ConcurrencyStampUpdate.Designer.cs @@ -0,0 +1,2036 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Migrations +{ + [DbContext(typeof(UnifiedDbContext))] + [Migration("20210817095158_ConcurrencyStampUpdate")] + partial class ConcurrencyStampUpdate + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.9") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("nvarchar(max)"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("varbinary(max)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("TenantId", "ContainerId", "Name"); + + b.ToTable("AbpBlobs"); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers"); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpFeatureValues"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("bit") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("bit") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("bit") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property