diff --git a/docs/en/UI/AspNetCore/Customization-User-Interface.md b/docs/en/UI/AspNetCore/Customization-User-Interface.md index 111a43ddcb..64184bf806 100644 --- a/docs/en/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/en/UI/AspNetCore/Customization-User-Interface.md @@ -134,7 +134,7 @@ The screenshot below was taken from the [Basic Theme](Basic-Theme.md) comes with The [Basic Theme](Basic-Theme.md) defines some view components for the layout. For example, the highlighted area with the red rectangle above is called **Brand component**. You probably want to customize this component by adding your **own application logo**. Let's see how to do it. -First, create your logo and place under a folder in your web application. We used `wwwroot/logos/bookstore-logo.png` path. Then copy the Brand component's view ([from here](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/Default.cshtml)) from the basic theme files under the `Themes/Basic/Components/Brand` folder. The result should be similar the picture below: +First, create your logo and place under a folder in your web application. We used `wwwroot/logos/bookstore-logo.png` path. Then copy the Brand component's view ([from here](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/Default.cshtml)) from the basic theme files under the `Themes/Basic/Components/Brand` folder. The result should be similar the picture below: ![bookstore-added-brand-files](../../images/bookstore-added-brand-files.png) @@ -150,7 +150,7 @@ Now, you can run the application to see the result: ![bookstore-added-logo](../../images/bookstore-added-logo.png) -If you need, you can also replace [the code behind c# class](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/MainNavbarBrandViewComponent.cs) of the component just using the dependency injection system. +If you need, you can also replace [the code behind c# class](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/MainNavbarBrandViewComponent.cs) of the component just using the dependency injection system. ### Overriding the Theme @@ -445,7 +445,7 @@ These names are defined in the `StandardLayouts` class as constants. You can def #### Layout Location -You can find the layout files [here](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts) for the basic theme. You can take them as references to build your own layouts or you can override them if necessary. +You can find the layout files [here](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts) for the basic theme. You can take them as references to build your own layouts or you can override them if necessary. #### ITheme diff --git a/docs/en/UI/AspNetCore/Layout-Hooks.md b/docs/en/UI/AspNetCore/Layout-Hooks.md index 168454a7c2..1c2df5e7be 100644 --- a/docs/en/UI/AspNetCore/Layout-Hooks.md +++ b/docs/en/UI/AspNetCore/Layout-Hooks.md @@ -98,7 +98,7 @@ These names are defined in the `StandardLayouts` class as constants. You can def ### Layout Location -You can find the layout files [here](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts) for the basic theme. You can take them as references to build your own layouts or you can override them if necessary. +You can find the layout files [here](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts) for the basic theme. You can take them as references to build your own layouts or you can override them if necessary. ## See Also diff --git a/docs/en/UI/AspNetCore/Theming.md b/docs/en/UI/AspNetCore/Theming.md index 85acf65433..43f521a16b 100644 --- a/docs/en/UI/AspNetCore/Theming.md +++ b/docs/en/UI/AspNetCore/Theming.md @@ -124,7 +124,7 @@ The empty layout provides an empty page. It typically includes the following par ### The Easy Way -The easiest way to create a new theme is to copy the [Basic Theme Source Code](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic) and customize it. Once you get a copy of the theme in your solution, remove the `Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic` NuGet package and reference to the local project. +The easiest way to create a new theme is to copy the [Basic Theme Source Code](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic) and customize it. Once you get a copy of the theme in your solution, remove the `Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic` NuGet package and reference to the local project. ### The ITheme Interface @@ -410,7 +410,7 @@ See the [Page Header](Page-Header.md) document for more. #### Tenant Switch -The Account Layout should allow the user to switch the current tenant if the application is multi-tenant and the tenant was resolved from the cookies. See the [Basic Theme Account Layout](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml) as an example implementation. +The Account Layout should allow the user to switch the current tenant if the application is multi-tenant and the tenant was resolved from the cookies. See the [Basic Theme Account Layout](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts/Account.cshtml) as an example implementation. ### Layout Classes diff --git a/docs/en/UI/Blazor/Basic-Theme.md b/docs/en/UI/Blazor/Basic-Theme.md index da26a6d64a..6a71e50c84 100644 --- a/docs/en/UI/Blazor/Basic-Theme.md +++ b/docs/en/UI/Blazor/Basic-Theme.md @@ -60,7 +60,7 @@ Then, navigate to downloaded `Volo.Abp.AspNetCore.Components.WebAssembly.BasicTh ---- -Or, you can download the [source code](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme) of the Basic Theme, manually copy the project content into your solution, re-arrange the package/module dependencies (see the Installation section above to understand how it was installed to the project) and freely customize the theme based on your application requirements. +Or, you can download the [source code](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme) of the Basic Theme, manually copy the project content into your solution, re-arrange the package/module dependencies (see the Installation section above to understand how it was installed to the project) and freely customize the theme based on your application requirements. ## See Also diff --git a/docs/en/UI/Blazor/Theming.md b/docs/en/UI/Blazor/Theming.md index 00bf911ff9..067052e322 100644 --- a/docs/en/UI/Blazor/Theming.md +++ b/docs/en/UI/Blazor/Theming.md @@ -63,7 +63,7 @@ A theme is simply a Razor Class Library. ### The Easy Way -The easiest way to create a new theme is to copy the [Basic Theme Source Code](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme) and customize it. Once you get a copy of the theme in your solution, remove the `Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme` NuGet package and reference to the local project. +The easiest way to create a new theme is to copy the [Basic Theme Source Code](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme) and customize it. Once you get a copy of the theme in your solution, remove the `Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme` NuGet package and reference to the local project. ### Global Styles / Scripts diff --git a/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md b/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md index 44eb9b6e26..f10ccabaff 100644 --- a/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md +++ b/docs/zh-Hans/UI/AspNetCore/Customization-User-Interface.md @@ -133,7 +133,7 @@ public class MyLoginModel : LoginModel [基本主题](../../Themes/Basic.md) 为layout定义了一些视图组件. 例如上面带有红色矩形的突出显示区域称为 **Brand组件**, 你可能想添加自己的**自己的应用程序logo**来自定义此组件. 让我们来看看如何去做. -首先创建你的logo并且放到你的web应用程序文件夹中,我们使用 `wwwroot/logos/bookstore-logo.png` 路径. 然后在 `Themes/Basic/Components/Brand` 文件夹下复制[Brand组件视图](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/Default.cshtml). 结果应该是类似下面的图片: +首先创建你的logo并且放到你的web应用程序文件夹中,我们使用 `wwwroot/logos/bookstore-logo.png` 路径. 然后在 `Themes/Basic/Components/Brand` 文件夹下复制[Brand组件视图](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/Default.cshtml). 结果应该是类似下面的图片: ![bookstore-added-brand-files](../../images/bookstore-added-brand-files.png) @@ -149,7 +149,7 @@ public class MyLoginModel : LoginModel ![bookstore-added-logo](../../images/bookstore-added-logo.png) -如果你需要,你也可以仅使用依赖注入系统替换组件[背后的C#类代码](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/MainNavbarBrandViewComponent.cs) +如果你需要,你也可以仅使用依赖注入系统替换组件[背后的C#类代码](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Components/Brand/MainNavbarBrandViewComponent.cs) ### 重写主题 @@ -444,7 +444,7 @@ Configure(options => #### 布局位置 -你可以在[这里](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts)找到基本主题的布局文件. 你可以将它们作用构建自己的布局的参考,也可以在必要时覆盖它们. +你可以在[这里](https://github.com/abpframework/abp/blob/dev/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Themes/Basic/Layouts)找到基本主题的布局文件. 你可以将它们作用构建自己的布局的参考,也可以在必要时覆盖它们. #### ITheme diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs index 5d1f6d8414..b1b97c4b91 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs @@ -11,6 +11,10 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations public Guid? TenantId { get; set; } + public Guid? ImpersonatorUserId { get; set; } + + public Guid? ImpersonatorTenantId { get; set; } + public string UserName { get; set; } public string Name { get; set; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index eab7d968a9..c60fdeac93 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -127,6 +127,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations IsAuthenticated = _currentUser.IsAuthenticated, Id = _currentUser.Id, TenantId = _currentUser.TenantId, + ImpersonatorUserId = _currentUser.FindImpersonatorUserId(), + ImpersonatorTenantId = _currentUser.FindImpersonatorTenantId(), UserName = _currentUser.UserName, SurName = _currentUser.SurName, Name = _currentUser.Name, diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs index 2e1ef471a2..141fa3a7f4 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultHttpExceptionStatusCodeFinder.cs @@ -3,6 +3,7 @@ using System.Net; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; using Volo.Abp.Authorization; +using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities; using Volo.Abp.ExceptionHandling; @@ -55,6 +56,11 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling { return HttpStatusCode.NotFound; } + + if (exception is AbpDbConcurrencyException) + { + return HttpStatusCode.Conflict; + } if (exception is NotImplementedException) { diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs index 50de4f1b56..4ef6057943 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EntityHistory/EntityHistoryHelper.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Volo.Abp.Auditing; +using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities; using Volo.Abp.Json; @@ -26,8 +27,7 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory protected IJsonSerializer JsonSerializer { get; } protected AbpAuditingOptions Options { get; } protected IAuditingHelper AuditingHelper { get; } - - private readonly IClock _clock; + protected IClock Clock{ get; } public EntityHistoryHelper( IAuditingStore auditingStore, @@ -36,7 +36,7 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory IJsonSerializer jsonSerializer, IAuditingHelper auditingHelper) { - _clock = clock; + Clock = clock; AuditingStore = auditingStore; JsonSerializer = jsonSerializer; AuditingHelper = auditingHelper; @@ -69,7 +69,7 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory } [CanBeNull] - private EntityChangeInfo CreateEntityChangeOrNull(EntityEntry entityEntry) + protected virtual EntityChangeInfo CreateEntityChangeOrNull(EntityEntry entityEntry) { var entity = entityEntry.Entity; @@ -121,23 +121,23 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory return multiTenantEntity.TenantId; } - private DateTime GetChangeTime(EntityChangeInfo entityChange) + protected virtual DateTime GetChangeTime(EntityChangeInfo entityChange) { var entity = entityChange.EntityEntry.As().Entity; switch (entityChange.ChangeType) { case EntityChangeType.Created: - return (entity as IHasCreationTime)?.CreationTime ?? _clock.Now; + return (entity as IHasCreationTime)?.CreationTime ?? Clock.Now; case EntityChangeType.Deleted: - return (entity as IHasDeletionTime)?.DeletionTime ?? _clock.Now; + return (entity as IHasDeletionTime)?.DeletionTime ?? Clock.Now; case EntityChangeType.Updated: - return (entity as IHasModificationTime)?.LastModificationTime ?? _clock.Now; + return (entity as IHasModificationTime)?.LastModificationTime ?? Clock.Now; default: throw new AbpException($"Unknown {nameof(EntityChangeInfo)}: {entityChange}"); } } - private string GetEntityId(object entityAsObj) + protected virtual string GetEntityId(object entityAsObj) { if (!(entityAsObj is IEntity entity)) { @@ -156,7 +156,7 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory /// /// Gets the property changes for this entry. /// - private List GetPropertyChanges(EntityEntry entityEntry) + protected virtual List GetPropertyChanges(EntityEntry entityEntry) { var propertyChanges = new List(); var properties = entityEntry.Metadata.GetProperties(); @@ -181,12 +181,12 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory return propertyChanges; } - private bool IsCreated(EntityEntry entityEntry) + protected virtual bool IsCreated(EntityEntry entityEntry) { return entityEntry.State == EntityState.Added; } - private bool IsDeleted(EntityEntry entityEntry) + protected virtual bool IsDeleted(EntityEntry entityEntry) { if (entityEntry.State == EntityState.Deleted) { @@ -197,7 +197,7 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory return entity is ISoftDelete && entity.As().IsDeleted; } - private bool ShouldSaveEntityHistory(EntityEntry entityEntry, bool defaultValue = false) + protected virtual bool ShouldSaveEntityHistory(EntityEntry entityEntry, bool defaultValue = false) { if (entityEntry.State == EntityState.Detached || entityEntry.State == EntityState.Unchanged) @@ -220,7 +220,7 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory return defaultValue; } - private bool ShouldSavePropertyHistory(PropertyEntry propertyEntry, bool defaultValue) + protected virtual bool ShouldSavePropertyHistory(PropertyEntry propertyEntry, bool defaultValue) { if (propertyEntry.Metadata.Name == "Id") { @@ -247,6 +247,26 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory return false; } + if (propertyEntry.OriginalValue is ExtraPropertyDictionary originalValue && propertyEntry.CurrentValue is ExtraPropertyDictionary currentValue) + { + if (originalValue.IsNullOrEmpty() && currentValue.IsNullOrEmpty()) + { + return false; + } + + if (!originalValue.Select(x => x.Key).SequenceEqual(currentValue.Select(x => x.Key))) + { + return true; + } + + if (!originalValue.Select(x => x.Value).SequenceEqual(currentValue.Select(x => x.Value))) + { + return true; + } + + return defaultValue; + } + var isModified = !(propertyEntry.OriginalValue?.Equals(propertyEntry.CurrentValue) ?? propertyEntry.CurrentValue == null); if (isModified) { @@ -256,7 +276,7 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory return defaultValue; } - private bool IsBaseAuditProperty(PropertyInfo propertyInfo, Type entityType) + protected virtual bool IsBaseAuditProperty(PropertyInfo propertyInfo, Type entityType) { if (entityType.IsAssignableTo() && propertyInfo.Name == nameof(IHasCreationTime.CreationTime)) @@ -308,11 +328,11 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory return false; } - + /// /// Updates change time, entity id and foreign keys after SaveChanges is called. /// - public void UpdateChangeList(List entityChanges) + public virtual void UpdateChangeList(List entityChanges) { foreach (var entityChange in entityChanges) { @@ -372,4 +392,4 @@ namespace Volo.Abp.EntityFrameworkCore.EntityHistory } } } -} \ No newline at end of file +} 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 fd6d773952..0b228d676c 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 @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Confluent.Kafka; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; +using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Kafka; @@ -18,6 +19,7 @@ namespace Volo.Abp.EventBus.Kafka [ExposeServices(typeof(IDistributedEventBus), typeof(KafkaDistributedEventBus))] public class KafkaDistributedEventBus : EventBusBase, IDistributedEventBus, ISingletonDependency { + protected AbpEventBusOptions AbpEventBusOptions { get; } protected AbpKafkaEventBusOptions AbpKafkaEventBusOptions { get; } protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } protected IKafkaMessageConsumerFactory MessageConsumerFactory { get; } @@ -26,6 +28,7 @@ namespace Volo.Abp.EventBus.Kafka protected ConcurrentDictionary> HandlerFactories { get; } protected ConcurrentDictionary EventTypes { get; } protected IKafkaMessageConsumer Consumer { get; private set; } + protected string DeadLetterTopicName { get; } public KafkaDistributedEventBus( IServiceScopeFactory serviceScopeFactory, @@ -34,14 +37,19 @@ namespace Volo.Abp.EventBus.Kafka IKafkaMessageConsumerFactory messageConsumerFactory, IOptions abpDistributedEventBusOptions, IKafkaSerializer serializer, - IProducerPool producerPool) - : base(serviceScopeFactory, currentTenant) + IProducerPool producerPool, + IEventErrorHandler errorHandler, + IOptions abpEventBusOptions) + : base(serviceScopeFactory, currentTenant, errorHandler) { AbpKafkaEventBusOptions = abpKafkaEventBusOptions.Value; AbpDistributedEventBusOptions = abpDistributedEventBusOptions.Value; + AbpEventBusOptions = abpEventBusOptions.Value; MessageConsumerFactory = messageConsumerFactory; Serializer = serializer; ProducerPool = producerPool; + DeadLetterTopicName = + AbpEventBusOptions.DeadLetterName ?? AbpKafkaEventBusOptions.TopicName + "_dead_letter"; HandlerFactories = new ConcurrentDictionary>(); EventTypes = new ConcurrentDictionary(); @@ -51,9 +59,9 @@ namespace Volo.Abp.EventBus.Kafka { Consumer = MessageConsumerFactory.Create( AbpKafkaEventBusOptions.TopicName, + DeadLetterTopicName, AbpKafkaEventBusOptions.GroupId, AbpKafkaEventBusOptions.ConnectionName); - Consumer.OnMessageReceived(ProcessEventAsync); SubscribeHandlers(AbpDistributedEventBusOptions.Handlers); @@ -70,7 +78,18 @@ namespace Volo.Abp.EventBus.Kafka var eventData = Serializer.Deserialize(message.Value, eventType); - await TriggerHandlersAsync(eventType, eventData); + await TriggerHandlersAsync(eventType, eventData, errorContext => + { + var retryAttempt = 0; + if (message.Headers.TryGetLastBytes(EventErrorHandlerBase.RetryAttemptKey, out var retryAttemptBytes)) + { + retryAttempt = Serializer.Deserialize(retryAttemptBytes); + } + + errorContext.EventData = Serializer.Deserialize(message.Value, eventType); + errorContext.SetProperty(EventErrorHandlerBase.HeadersKey, message.Headers); + errorContext.SetProperty(EventErrorHandlerBase.RetryAttemptKey, retryAttempt); + }); } public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class @@ -147,20 +166,51 @@ namespace Volo.Abp.EventBus.Kafka } public override async Task PublishAsync(Type eventType, object eventData) + { + await PublishAsync(eventType, eventData, new Headers {{"messageId", Serializer.Serialize(Guid.NewGuid())}}, null); + } + + public virtual async Task PublishAsync(Type eventType, object eventData, Headers headers, Dictionary headersArguments) + { + await PublishAsync(AbpKafkaEventBusOptions.TopicName, eventType, eventData, headers, headersArguments); + } + + public virtual async Task PublishToDeadLetterAsync(Type eventType, object eventData, Headers headers, Dictionary headersArguments) + { + await PublishAsync(DeadLetterTopicName, eventType, eventData, headers, headersArguments); + } + + private async Task PublishAsync(string topicName, Type eventType, object eventData, Headers headers, Dictionary headersArguments) { var eventName = EventNameAttribute.GetNameOrDefault(eventType); var body = Serializer.Serialize(eventData); var producer = ProducerPool.Get(AbpKafkaEventBusOptions.ConnectionName); + SetEventMessageHeaders(headers, headersArguments); + await producer.ProduceAsync( - AbpKafkaEventBusOptions.TopicName, + topicName, new Message { - Key = eventName, Value = body + Key = eventName, Value = body, Headers = headers }); } + private void SetEventMessageHeaders(Headers headers, Dictionary headersArguments) + { + if (headersArguments == null) + { + return; + } + + foreach (var header in headersArguments) + { + headers.Remove(header.Key); + headers.Add(header.Key, Serializer.Serialize(header.Value)); + } + } + private List GetOrCreateHandlerFactories(Type eventType) { return HandlerFactories.GetOrAdd( diff --git a/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaEventErrorHandler.cs b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaEventErrorHandler.cs new file mode 100644 index 0000000000..aee21f75a9 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Kafka/Volo/Abp/EventBus/Kafka/KafkaEventErrorHandler.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Confluent.Kafka; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.EventBus.Kafka +{ + public class KafkaEventErrorHandler : EventErrorHandlerBase, ISingletonDependency + { + protected ILogger Logger { get; set; } + + public KafkaEventErrorHandler( + IOptions options) : base(options) + { + Logger = NullLogger.Instance; + } + + protected override async Task RetryAsync(EventExecutionErrorContext context) + { + if (Options.RetryStrategyOptions.IntervalMillisecond > 0) + { + await Task.Delay(Options.RetryStrategyOptions.IntervalMillisecond); + } + + context.TryGetRetryAttempt(out var retryAttempt); + + await context.EventBus.As().PublishAsync( + context.EventType, + context.EventData, + context.GetProperty(HeadersKey).As(), + new Dictionary {{RetryAttemptKey, ++retryAttempt}}); + } + + protected override async Task MoveToDeadLetterAsync(EventExecutionErrorContext context) + { + Logger.LogException( + context.Exceptions.Count == 1 ? context.Exceptions.First() : new AggregateException(context.Exceptions), + LogLevel.Error); + + await context.EventBus.As().PublishToDeadLetterAsync( + context.EventType, + context.EventData, + context.GetProperty(HeadersKey).As(), + new Dictionary {{"exceptions", context.Exceptions.Select(x => x.ToString()).ToList()}}); + } + } +} 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 e8c7fc6c5b..541fce1334 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 @@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using RabbitMQ.Client; using RabbitMQ.Client.Events; +using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; using Volo.Abp.MultiTenancy; @@ -25,6 +26,7 @@ namespace Volo.Abp.EventBus.RabbitMq { protected AbpRabbitMqEventBusOptions AbpRabbitMqEventBusOptions { get; } protected AbpDistributedEventBusOptions AbpDistributedEventBusOptions { get; } + protected AbpEventBusOptions AbpEventBusOptions { get; } protected IConnectionPool ConnectionPool { get; } protected IRabbitMqSerializer Serializer { get; } @@ -41,12 +43,15 @@ namespace Volo.Abp.EventBus.RabbitMq IServiceScopeFactory serviceScopeFactory, IOptions distributedEventBusOptions, IRabbitMqMessageConsumerFactory messageConsumerFactory, - ICurrentTenant currentTenant) - : base(serviceScopeFactory, currentTenant) + ICurrentTenant currentTenant, + IEventErrorHandler errorHandler, + IOptions abpEventBusOptions) + : base(serviceScopeFactory, currentTenant, errorHandler) { ConnectionPool = connectionPool; Serializer = serializer; MessageConsumerFactory = messageConsumerFactory; + AbpEventBusOptions = abpEventBusOptions.Value; AbpDistributedEventBusOptions = distributedEventBusOptions.Value; AbpRabbitMqEventBusOptions = options.Value; @@ -56,17 +61,21 @@ namespace Volo.Abp.EventBus.RabbitMq public void Initialize() { + const string suffix = "_dead_letter"; + Consumer = MessageConsumerFactory.Create( new ExchangeDeclareConfiguration( AbpRabbitMqEventBusOptions.ExchangeName, type: "direct", - durable: true + durable: true, + deadLetterExchangeName: AbpRabbitMqEventBusOptions.ExchangeName + suffix ), new QueueDeclareConfiguration( AbpRabbitMqEventBusOptions.ClientName, durable: true, exclusive: false, - autoDelete: false + autoDelete: false, + AbpEventBusOptions.DeadLetterName ?? AbpRabbitMqEventBusOptions.ClientName + suffix ), AbpRabbitMqEventBusOptions.ConnectionName ); @@ -87,7 +96,19 @@ namespace Volo.Abp.EventBus.RabbitMq var eventData = Serializer.Deserialize(ea.Body.ToArray(), eventType); - await TriggerHandlersAsync(eventType, eventData); + await TriggerHandlersAsync(eventType, eventData, errorContext => + { + var retryAttempt = 0; + if (ea.BasicProperties.Headers != null && + ea.BasicProperties.Headers.ContainsKey(EventErrorHandlerBase.RetryAttemptKey)) + { + retryAttempt = (int)ea.BasicProperties.Headers[EventErrorHandlerBase.RetryAttemptKey]; + } + + errorContext.EventData = Serializer.Deserialize(ea.Body.ToArray(), eventType); + errorContext.SetProperty(EventErrorHandlerBase.HeadersKey, ea.BasicProperties); + errorContext.SetProperty(EventErrorHandlerBase.RetryAttemptKey, retryAttempt); + }); } public IDisposable Subscribe(IDistributedEventHandler handler) where TEvent : class @@ -168,8 +189,14 @@ namespace Volo.Abp.EventBus.RabbitMq GetOrCreateHandlerFactories(eventType).Locking(factories => factories.Clear()); } - public override Task PublishAsync(Type eventType, object eventData) + public override async Task PublishAsync(Type eventType, object eventData) + { + await PublishAsync(eventType, eventData, null); + } + + public Task PublishAsync(Type eventType, object eventData, IBasicProperties properties, Dictionary headersArguments = null) { + var eventName = EventNameAttribute.GetNameOrDefault(eventType); var body = Serializer.Serialize(eventData); @@ -181,11 +208,17 @@ namespace Volo.Abp.EventBus.RabbitMq durable: true ); - var properties = channel.CreateBasicProperties(); - properties.DeliveryMode = RabbitMqConsts.DeliveryModes.Persistent; + if (properties == null) + { + properties = channel.CreateBasicProperties(); + properties.DeliveryMode = RabbitMqConsts.DeliveryModes.Persistent; + properties.MessageId = Guid.NewGuid().ToString("N"); + } + + SetEventMessageHeaders(properties, headersArguments); channel.BasicPublish( - exchange: AbpRabbitMqEventBusOptions.ExchangeName, + exchange: AbpRabbitMqEventBusOptions.ExchangeName, routingKey: eventName, mandatory: true, basicProperties: properties, @@ -196,6 +229,21 @@ namespace Volo.Abp.EventBus.RabbitMq return Task.CompletedTask; } + private void SetEventMessageHeaders(IBasicProperties properties, Dictionary headersArguments) + { + if (headersArguments == null) + { + return; + } + + properties.Headers ??= new Dictionary(); + + foreach (var header in headersArguments) + { + properties.Headers[header.Key] = header.Value; + } + } + private List GetOrCreateHandlerFactories(Type eventType) { return HandlerFactories.GetOrAdd( @@ -213,9 +261,11 @@ namespace Volo.Abp.EventBus.RabbitMq { var handlerFactoryList = new List(); - foreach (var handlerFactory in HandlerFactories.Where(hf => ShouldTriggerEventForHandler(eventType, hf.Key))) + foreach (var handlerFactory in + HandlerFactories.Where(hf => ShouldTriggerEventForHandler(eventType, hf.Key))) { - handlerFactoryList.Add(new EventTypeWithEventHandlerFactories(handlerFactory.Key, handlerFactory.Value)); + handlerFactoryList.Add( + new EventTypeWithEventHandlerFactories(handlerFactory.Key, handlerFactory.Value)); } return handlerFactoryList.ToArray(); diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqEventErrorHandler.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqEventErrorHandler.cs new file mode 100644 index 0000000000..e8848bee72 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqEventErrorHandler.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.Options; +using RabbitMQ.Client; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.EventBus.RabbitMq +{ + public class RabbitMqEventErrorHandler : EventErrorHandlerBase, ISingletonDependency + { + public RabbitMqEventErrorHandler( + IOptions options) + : base(options) + { + } + + protected override async Task RetryAsync(EventExecutionErrorContext context) + { + if (Options.RetryStrategyOptions.IntervalMillisecond > 0) + { + await Task.Delay(Options.RetryStrategyOptions.IntervalMillisecond); + } + + context.TryGetRetryAttempt(out var retryAttempt); + + await context.EventBus.As().PublishAsync( + context.EventType, + context.EventData, + context.GetProperty(HeadersKey).As(), + new Dictionary + { + {RetryAttemptKey, ++retryAttempt}, + {"exceptions", context.Exceptions.Select(x => x.ToString()).ToList()} + }); + } + + protected override Task MoveToDeadLetterAsync(EventExecutionErrorContext context) + { + ThrowOriginalExceptions(context); + + return Task.CompletedTask; + } + } +} diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs index 9ebd91a6a5..a13f964d3f 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpEventBusRebusModule.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using Rebus.Handlers; +using Rebus.Retry.Simple; using Rebus.ServiceProvider; using Volo.Abp.Modularity; @@ -11,23 +12,29 @@ namespace Volo.Abp.EventBus.Rebus { public override void ConfigureServices(ServiceConfigurationContext context) { - var options = context.Services.ExecutePreConfiguredActions(); + var abpEventBusOptions = context.Services.ExecutePreConfiguredActions(); + var options = context.Services.ExecutePreConfiguredActions();; context.Services.AddTransient(typeof(IHandleMessages<>), typeof(RebusDistributedEventHandlerAdapter<>)); Configure(rebusOptions => { - rebusOptions.Configurer = options.Configurer; - rebusOptions.Publish = options.Publish; - rebusOptions.InputQueueName = options.InputQueueName; + context.Services.ExecutePreConfiguredActions(rebusOptions); }); - context.Services.AddRebus(configurer => + context.Services.AddRebus(configure => { - options.Configurer?.Invoke(configurer); - return configurer; - }); + if (abpEventBusOptions.RetryStrategyOptions != null) + { + configure.Options(b => + b.SimpleRetryStrategy( + errorQueueAddress: abpEventBusOptions.DeadLetterName ?? options.InputQueueName + "_dead_letter", + maxDeliveryAttempts: abpEventBusOptions.RetryStrategyOptions.MaxRetryAttempts)); + } + options.Configurer?.Invoke(configure); + return configure; + }); } public override void OnApplicationInitialization(ApplicationInitializationContext context) diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs index 8aaee7bd63..b6343204c0 100644 --- a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/AbpRebusEventBusOptions.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.EventBus.Rebus public AbpRebusEventBusOptions() { _publish = DefaultPublish; - _configurer = DefaultConfigurer; + _configurer = DefaultConfigure; } private async Task DefaultPublish(IBus bus, Type eventType, object eventData) @@ -40,10 +40,10 @@ namespace Volo.Abp.EventBus.Rebus await bus.Advanced.Routing.Send(InputQueueName, eventData); } - private void DefaultConfigurer(RebusConfigurer configurer) + private void DefaultConfigure(RebusConfigurer configure) { - configurer.Subscriptions(s => s.StoreInMemory()); - configurer.Transport(t => t.UseInMemoryTransport(new InMemNetwork(), InputQueueName)); + configure.Subscriptions(s => s.StoreInMemory()); + configure.Transport(t => t.UseInMemoryTransport(new InMemNetwork(), InputQueueName)); } } } 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 ce3549646e..97bedaf8fb 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 @@ -30,8 +30,9 @@ namespace Volo.Abp.EventBus.Rebus ICurrentTenant currentTenant, IBus rebus, IOptions abpDistributedEventBusOptions, - IOptions abpEventBusRebusOptions) : - base(serviceScopeFactory, currentTenant) + IOptions abpEventBusRebusOptions, + IEventErrorHandler errorHandler) : + base(serviceScopeFactory, currentTenant, errorHandler) { Rebus = rebus; AbpRebusEventBusOptions = abpEventBusRebusOptions.Value; diff --git a/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusEventErrorHandler.cs b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusEventErrorHandler.cs new file mode 100644 index 0000000000..8fe6a53dbb --- /dev/null +++ b/framework/src/Volo.Abp.EventBus.Rebus/Volo/Abp/EventBus/Rebus/RebusEventErrorHandler.cs @@ -0,0 +1,32 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.EventBus.Rebus +{ + /// + /// Rebus will automatic retries and error handling: https://github.com/rebus-org/Rebus/wiki/Automatic-retries-and-error-handling + /// + public class RebusEventErrorHandler : EventErrorHandlerBase, ISingletonDependency + { + public RebusEventErrorHandler( + IOptions options) + : base(options) + { + } + + protected override Task RetryAsync(EventExecutionErrorContext context) + { + ThrowOriginalExceptions(context); + + return Task.CompletedTask; + } + + protected override Task MoveToDeadLetterAsync(EventExecutionErrorContext context) + { + ThrowOriginalExceptions(context); + + return Task.CompletedTask; + } + } +} diff --git a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj index 221454bed3..261b10d8ae 100644 --- a/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj +++ b/framework/src/Volo.Abp.EventBus/Volo.Abp.EventBus.csproj @@ -16,6 +16,7 @@ + diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs index eb9c17b129..329c26c93f 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusModule.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using Volo.Abp.EventBus.Abstractions; using Volo.Abp.EventBus.Distributed; using Volo.Abp.EventBus.Local; +using Volo.Abp.Json; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.Reflection; @@ -12,7 +13,8 @@ namespace Volo.Abp.EventBus { [DependsOn( typeof(AbpEventBusAbstractionsModule), - typeof(AbpMultiTenancyModule))] + typeof(AbpMultiTenancyModule), + typeof(AbpJsonModule))] public class AbpEventBusModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) @@ -20,6 +22,14 @@ namespace Volo.Abp.EventBus AddEventHandlers(context.Services); } + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + context.Services.ExecutePreConfiguredActions(options); + }); + } + private static void AddEventHandlers(IServiceCollection services) { var localHandlers = new List(); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusOptions.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusOptions.cs new file mode 100644 index 0000000000..39631c7e18 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusOptions.cs @@ -0,0 +1,22 @@ +using System; + +namespace Volo.Abp.EventBus +{ + public class AbpEventBusOptions + { + public bool EnabledErrorHandle { get; set; } + + public Func ErrorHandleSelector { get; set; } + + public string DeadLetterName { get; set; } + + public AbpEventBusRetryStrategyOptions RetryStrategyOptions { get; set; } + + public void UseRetryStrategy(Action action = null) + { + EnabledErrorHandle = true; + RetryStrategyOptions = new AbpEventBusRetryStrategyOptions(); + action?.Invoke(RetryStrategyOptions); + } + } +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusRetryStrategyOptions.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusRetryStrategyOptions.cs new file mode 100644 index 0000000000..4b5b722e96 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/AbpEventBusRetryStrategyOptions.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.EventBus +{ + public class AbpEventBusRetryStrategyOptions + { + public int IntervalMillisecond { get; set; } = 3000; + + public int MaxRetryAttempts { get; set; } = 3; + } +} 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 80d4134db2..78d226538e 100644 --- a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventBusBase.cs @@ -19,10 +19,16 @@ namespace Volo.Abp.EventBus protected ICurrentTenant CurrentTenant { get; } - protected EventBusBase(IServiceScopeFactory serviceScopeFactory, ICurrentTenant currentTenant) + protected IEventErrorHandler ErrorHandler { get; } + + protected EventBusBase( + IServiceScopeFactory serviceScopeFactory, + ICurrentTenant currentTenant, + IEventErrorHandler errorHandler) { ServiceScopeFactory = serviceScopeFactory; CurrentTenant = currentTenant; + ErrorHandler = errorHandler; } /// @@ -89,7 +95,7 @@ namespace Volo.Abp.EventBus /// public abstract Task PublishAsync(Type eventType, object eventData); - public virtual async Task TriggerHandlersAsync(Type eventType, object eventData) + public virtual async Task TriggerHandlersAsync(Type eventType, object eventData, Action onErrorAction = null) { var exceptions = new List(); @@ -97,16 +103,13 @@ namespace Volo.Abp.EventBus if (exceptions.Any()) { - if (exceptions.Count == 1) - { - exceptions[0].ReThrow(); - } - - throw new AggregateException("More than one error has occurred while triggering the event: " + eventType, exceptions); + var context = new EventExecutionErrorContext(exceptions, eventType, this); + onErrorAction?.Invoke(context); + await ErrorHandler.HandleAsync(context); } } - protected virtual async Task TriggerHandlersAsync(Type eventType, object eventData, List exceptions) + protected virtual async Task TriggerHandlersAsync(Type eventType, object eventData , List exceptions) { await new SynchronizationContextRemover(); diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventErrorHandlerBase.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventErrorHandlerBase.cs new file mode 100644 index 0000000000..ba4527fc70 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventErrorHandlerBase.cs @@ -0,0 +1,76 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Options; + +namespace Volo.Abp.EventBus +{ + public abstract class EventErrorHandlerBase : IEventErrorHandler + { + public const string HeadersKey = "headers"; + public const string RetryAttemptKey = "retryAttempt"; + + protected AbpEventBusOptions Options { get; } + + protected EventErrorHandlerBase(IOptions options) + { + Options = options.Value; + } + + public virtual async Task HandleAsync(EventExecutionErrorContext context) + { + if (!await ShouldHandleAsync(context)) + { + ThrowOriginalExceptions(context); + } + + if (await ShouldRetryAsync(context)) + { + await RetryAsync(context); + return; + } + + await MoveToDeadLetterAsync(context); + } + + protected abstract Task RetryAsync(EventExecutionErrorContext context); + + protected abstract Task MoveToDeadLetterAsync(EventExecutionErrorContext context); + + protected virtual Task ShouldHandleAsync(EventExecutionErrorContext context) + { + if (!Options.EnabledErrorHandle) + { + return Task.FromResult(false); + } + + return Task.FromResult(Options.ErrorHandleSelector == null || Options.ErrorHandleSelector.Invoke(context.EventType)); + } + + protected virtual Task ShouldRetryAsync(EventExecutionErrorContext context) + { + if (Options.RetryStrategyOptions == null) + { + return Task.FromResult(false); + } + + if (!context.TryGetRetryAttempt(out var retryAttempt)) + { + return Task.FromResult(false); + } + + return Task.FromResult(Options.RetryStrategyOptions.MaxRetryAttempts > retryAttempt); + } + + protected virtual void ThrowOriginalExceptions(EventExecutionErrorContext context) + { + if (context.Exceptions.Count == 1) + { + context.Exceptions[0].ReThrow(); + } + + throw new AggregateException( + "More than one error has occurred while triggering the event: " + context.EventType, + context.Exceptions); + } + } +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventExecutionErrorContext.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventExecutionErrorContext.cs new file mode 100644 index 0000000000..e192f61cbe --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/EventExecutionErrorContext.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Data; +using Volo.Abp.ObjectExtending; + +namespace Volo.Abp.EventBus +{ + public class EventExecutionErrorContext : ExtensibleObject + { + public IReadOnlyList Exceptions { get; } + + public object EventData { get; set; } + + public Type EventType { get; } + + public IEventBus EventBus { get; } + + public EventExecutionErrorContext(List exceptions, Type eventType, IEventBus eventBus) + { + Exceptions = exceptions; + EventType = eventType; + EventBus = eventBus; + } + + public bool TryGetRetryAttempt(out int retryAttempt) + { + retryAttempt = 0; + if (!this.HasProperty(EventErrorHandlerBase.RetryAttemptKey)) + { + return false; + } + + retryAttempt = this.GetProperty(EventErrorHandlerBase.RetryAttemptKey); + return true; + + } + } +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventErrorHandler.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventErrorHandler.cs new file mode 100644 index 0000000000..f1b4a40f15 --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/IEventErrorHandler.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.EventBus +{ + public interface IEventErrorHandler + { + Task HandleAsync(EventExecutionErrorContext context); + } +} 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 8c7bef6f2d..16246a892f 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 @@ -7,9 +7,11 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.MultiTenancy; using Volo.Abp.Threading; +using Volo.Abp.Json; namespace Volo.Abp.EventBus.Local { @@ -28,12 +30,17 @@ namespace Volo.Abp.EventBus.Local protected ConcurrentDictionary> HandlerFactories { get; } + protected IJsonSerializer Serializer { get; } + public LocalEventBus( IOptions options, IServiceScopeFactory serviceScopeFactory, - ICurrentTenant currentTenant) - : base(serviceScopeFactory, currentTenant) + ICurrentTenant currentTenant, + IEventErrorHandler errorHandler, + IJsonSerializer serializer) + : base(serviceScopeFactory, currentTenant, errorHandler) { + Serializer = serializer; Options = options.Value; Logger = NullLogger.Instance; @@ -119,19 +126,17 @@ namespace Volo.Abp.EventBus.Local public override async Task PublishAsync(Type eventType, object eventData) { - var exceptions = new List(); - - await TriggerHandlersAsync(eventType, eventData, exceptions); + await PublishAsync(new LocalEventMessage(Guid.NewGuid(), eventData, eventType)); + } - if (exceptions.Any()) + public virtual async Task PublishAsync(LocalEventMessage localEventMessage) + { + var rawEventData = Serializer.Serialize(localEventMessage.EventData); + await TriggerHandlersAsync(localEventMessage.EventType, localEventMessage.EventData, errorContext => { - if (exceptions.Count == 1) - { - exceptions[0].ReThrow(); - } - - throw new AggregateException("More than one error has occurred while triggering the event: " + eventType, exceptions); - } + errorContext.EventData = Serializer.Deserialize(localEventMessage.EventType, rawEventData); + errorContext.SetProperty(nameof(LocalEventMessage.MessageId), localEventMessage.MessageId); + }); } protected override IEnumerable GetHandlerFactories(Type eventType) diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventErrorHandler.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventErrorHandler.cs new file mode 100644 index 0000000000..c08bca019f --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventErrorHandler.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.Options; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.EventBus.Local +{ + [ExposeServices(typeof(LocalEventErrorHandler), typeof(IEventErrorHandler))] + public class LocalEventErrorHandler : EventErrorHandlerBase, ISingletonDependency + { + protected Dictionary RetryTracking { get; } + + public LocalEventErrorHandler( + IOptions options) + : base(options) + { + RetryTracking = new Dictionary(); + } + + protected override async Task RetryAsync(EventExecutionErrorContext context) + { + if (Options.RetryStrategyOptions.IntervalMillisecond > 0) + { + await Task.Delay(Options.RetryStrategyOptions.IntervalMillisecond); + } + + var messageId = context.GetProperty(nameof(LocalEventMessage.MessageId)); + + context.TryGetRetryAttempt(out var retryAttempt); + RetryTracking[messageId] = ++retryAttempt; + + await context.EventBus.As().PublishAsync(new LocalEventMessage(messageId, context.EventData, context.EventType)); + + RetryTracking.Remove(messageId); + } + + protected override Task MoveToDeadLetterAsync(EventExecutionErrorContext context) + { + ThrowOriginalExceptions(context); + + return Task.CompletedTask; + } + + protected override async Task ShouldRetryAsync(EventExecutionErrorContext context) + { + var messageId = context.GetProperty(nameof(LocalEventMessage.MessageId)); + context.SetProperty(RetryAttemptKey, RetryTracking.GetOrDefault(messageId)); + + if (await base.ShouldRetryAsync(context)) + { + return true; + } + + RetryTracking.Remove(messageId); + return false; + } + } +} diff --git a/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventMessage.cs b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventMessage.cs new file mode 100644 index 0000000000..550de897bd --- /dev/null +++ b/framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Local/LocalEventMessage.cs @@ -0,0 +1,20 @@ +using System; + +namespace Volo.Abp.EventBus.Local +{ + public class LocalEventMessage + { + public Guid MessageId { get; } + + public object EventData { get; } + + public Type EventType { get; } + + public LocalEventMessage(Guid messageId, object eventData, Type eventType) + { + MessageId = messageId; + EventData = eventData; + EventType = eventType; + } + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs index 7d6da59e81..a96797ce40 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; using Volo.Abp.Authorization; +using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities; using Volo.Abp.ExceptionHandling; @@ -58,14 +59,19 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling exception = TryToGetActualException(exception); - if (exception is EntityNotFoundException) + if (exception is AbpRemoteCallException remoteCallException) { - return CreateEntityNotFoundError(exception as EntityNotFoundException); + return remoteCallException.Error; } - if (exception is AbpRemoteCallException remoteCallException) + if (exception is AbpDbConcurrencyException) { - return remoteCallException.Error; + return new RemoteServiceErrorInfo(L["AbpDbConcurrencyErrorMessage"]); + } + + if (exception is EntityNotFoundException) + { + return CreateEntityNotFoundError(exception as EntityNotFoundException); } var errorInfo = new RemoteServiceErrorInfo(); @@ -169,7 +175,7 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling return new RemoteServiceErrorInfo(exception.Message); } - + protected virtual Exception TryToGetActualException(Exception exception) { if (exception is AggregateException && exception.InnerException != null) diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en.json index 62b599b7d1..5b50d19b3a 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en.json @@ -13,6 +13,7 @@ "DefaultErrorMessage404": "Resource not found!", "DefaultErrorMessage404Detail": "The resource requested could not found on the server!", "EntityNotFoundErrorMessage": "There is no entity {0} with id = {1}!", + "AbpDbConcurrencyErrorMessage": "The data you have submitted has already changed by another user/client. Please discard the changes you've done and try from the beginning.", "Error": "Error", "UnhandledException": "Unhandled exception!", "401Message": "Unauthorized", diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json index da199b2707..a1c10f3d13 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json @@ -13,6 +13,7 @@ "DefaultErrorMessage404": "Kaynak bulunamadı!", "DefaultErrorMessage404Detail": "İstenilen kaynak sunucuda bulunamadı.", "EntityNotFoundErrorMessage": "Id değeri {1} olan {0} türünden bir nesne bulunamadı!", + "AbpDbConcurrencyErrorMessage": "Gönderdiğiniz veri başka bir kullanıcı/istemci tarafından değiştirilmiş. Lütfen işlemi iptal edip baştan deneyin.", "Error": "Hata", "UnhandledException": "Yakalanmamış hata!", "401Message": "Yetkisiz İşlem", diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs index 26d15ce818..f6679aec3c 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/AbpKafkaOptions.cs @@ -14,8 +14,6 @@ namespace Volo.Abp.Kafka public Action ConfigureTopic { get; set; } - public bool ReQueue { get; set; } = true; - public AbpKafkaOptions() { Connections = new KafkaConnections(); diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs index 2b01b5a935..96ec753dc2 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaMessageConsumerFactory.cs @@ -8,11 +8,13 @@ /// not disposed until end of the application. /// /// + /// /// /// /// IKafkaMessageConsumer Create( string topicName, + string deadLetterTopicName, string groupId, string connectionName = null); } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaSerializer.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaSerializer.cs index 58e718831c..a283eb7e50 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaSerializer.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/IKafkaSerializer.cs @@ -7,5 +7,7 @@ namespace Volo.Abp.Kafka byte[] Serialize(object obj); object Deserialize(byte[] value, Type type); + + T Deserialize(byte[] value); } } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs index 3b8f022012..d1bad00533 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Confluent.Kafka; @@ -26,6 +27,8 @@ namespace Volo.Abp.Kafka protected AbpKafkaOptions Options { get; } + protected AbpAsyncTimer Timer { get; } + protected ConcurrentBag, Task>> Callbacks { get; } protected IConsumer Consumer { get; private set; } @@ -36,34 +39,43 @@ namespace Volo.Abp.Kafka protected string TopicName { get; private set; } + protected string DeadLetterTopicName { get; private set; } + public KafkaMessageConsumer( IConsumerPool consumerPool, IExceptionNotifier exceptionNotifier, IOptions options, - IProducerPool producerPool) + IProducerPool producerPool, + AbpAsyncTimer timer) { ConsumerPool = consumerPool; ExceptionNotifier = exceptionNotifier; ProducerPool = producerPool; + Timer = timer; Options = options.Value; Logger = NullLogger.Instance; Callbacks = new ConcurrentBag, Task>>(); + + Timer.Period = 5000; //5 sec. + Timer.Elapsed = Timer_Elapsed; + Timer.RunOnStart = true; } public virtual void Initialize( [NotNull] string topicName, + [NotNull] string deadLetterTopicName, [NotNull] string groupId, string connectionName = null) { Check.NotNull(topicName, nameof(topicName)); + Check.NotNull(deadLetterTopicName, nameof(deadLetterTopicName)); Check.NotNull(groupId, nameof(groupId)); TopicName = topicName; + DeadLetterTopicName = deadLetterTopicName; ConnectionName = connectionName ?? KafkaConnections.DefaultConnectionName; GroupId = groupId; - - AsyncHelper.RunSync(CreateTopicAsync); - Consume(); + Timer.Start(); } public virtual void OnMessageReceived(Func, Task> callback) @@ -71,26 +83,45 @@ namespace Volo.Abp.Kafka Callbacks.Add(callback); } + protected virtual async Task Timer_Elapsed(AbpAsyncTimer timer) + { + await CreateTopicAsync(); + Consume(); + Timer.Stop(); + } + protected virtual async Task CreateTopicAsync() { using (var adminClient = new AdminClientBuilder(Options.Connections.GetOrDefault(ConnectionName)).Build()) { - var topic = new TopicSpecification + var topics = new List { - Name = TopicName, - NumPartitions = 1, - ReplicationFactor = 1 + new() + { + Name = TopicName, + NumPartitions = 1, + ReplicationFactor = 1 + }, + new() + { + Name = DeadLetterTopicName, + NumPartitions = 1, + ReplicationFactor = 1 + } }; - Options.ConfigureTopic?.Invoke(topic); + topics.ForEach(topic => + { + Options.ConfigureTopic?.Invoke(topic); + }); try { - await adminClient.CreateTopicsAsync(new[] {topic}); + await adminClient.CreateTopicsAsync(topics); } catch (CreateTopicsException e) { - if(e.Results.First().Error.Code != ErrorCode.TopicAlreadyExists) + if(e.Results.Any(x => x.Error.Code != ErrorCode.TopicAlreadyExists)) { throw; } @@ -139,8 +170,6 @@ namespace Volo.Abp.Kafka } catch (Exception ex) { - await RequeueAsync(consumeResult); - Logger.LogException(ex); await ExceptionNotifier.NotifyAsync(ex); } @@ -150,17 +179,6 @@ namespace Volo.Abp.Kafka } } - protected virtual async Task RequeueAsync(ConsumeResult consumeResult) - { - if (!Options.ReQueue) - { - return; - } - - var producer = ProducerPool.Get(ConnectionName); - await producer.ProduceAsync(consumeResult.Topic, consumeResult.Message); - } - public virtual void Dispose() { if (Consumer == null) diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs index fb08aa4144..4a22fd04f6 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/KafkaMessageConsumerFactory.cs @@ -16,11 +16,12 @@ namespace Volo.Abp.Kafka public IKafkaMessageConsumer Create( string topicName, + string deadLetterTopicName, string groupId, string connectionName = null) { var consumer = ServiceScope.ServiceProvider.GetRequiredService(); - consumer.Initialize(topicName, groupId, connectionName); + consumer.Initialize(topicName, deadLetterTopicName, groupId, connectionName); return consumer; } diff --git a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/Utf8JsonKafkaSerializer.cs b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/Utf8JsonKafkaSerializer.cs index a04125f8a6..a8a199c140 100644 --- a/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/Utf8JsonKafkaSerializer.cs +++ b/framework/src/Volo.Abp.Kafka/Volo/Abp/Kafka/Utf8JsonKafkaSerializer.cs @@ -23,5 +23,10 @@ namespace Volo.Abp.Kafka { return _jsonSerializer.Deserialize(type, Encoding.UTF8.GetString(value)); } + + public T Deserialize(byte[] value) + { + return _jsonSerializer.Deserialize(Encoding.UTF8.GetString(value)); + } } } diff --git a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs index 41ba7873ac..631646eaca 100644 --- a/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs +++ b/framework/src/Volo.Abp.MultiTenancy/Volo/Abp/MultiTenancy/MultiTenantConnectionStringResolver.cs @@ -41,7 +41,7 @@ namespace Volo.Abp.MultiTenancy } var tenantDefaultConnectionString = tenant.ConnectionStrings.Default; - + //Requesting default connection string... if (connectionStringName == null || connectionStringName == ConnectionStrings.DefaultConnectionStringName) @@ -59,10 +59,10 @@ namespace Volo.Abp.MultiTenancy //Found for the tenant return connString; } - + //Fallback to the mapped database for the specific connection string var database = Options.Databases.GetMappedDatabaseOrNull(connectionStringName); - if (database != null) + if (database != null && database.IsUsedByTenants) { connString = tenant.ConnectionStrings.GetOrDefault(database.DatabaseName); if (!connString.IsNullOrWhiteSpace()) @@ -166,4 +166,4 @@ namespace Volo.Abp.MultiTenancy } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ExchangeDeclareConfiguration.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ExchangeDeclareConfiguration.cs index 67f234aec4..b9e762abbe 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ExchangeDeclareConfiguration.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ExchangeDeclareConfiguration.cs @@ -6,6 +6,8 @@ namespace Volo.Abp.RabbitMQ { public string ExchangeName { get; } + public string DeadLetterExchangeName { get; set; } + public string Type { get; } public bool Durable { get; set; } @@ -15,16 +17,18 @@ namespace Volo.Abp.RabbitMQ public IDictionary Arguments { get; } public ExchangeDeclareConfiguration( - string exchangeName, - string type, - bool durable = false, - bool autoDelete = false) + string exchangeName, + string type, + bool durable = false, + bool autoDelete = false, + string deadLetterExchangeName = null) { ExchangeName = exchangeName; + DeadLetterExchangeName = deadLetterExchangeName; Type = type; Durable = durable; AutoDelete = autoDelete; Arguments = new Dictionary(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/IRabbitMqSerializer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/IRabbitMqSerializer.cs index 771d1a05a6..2de5cd2191 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/IRabbitMqSerializer.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/IRabbitMqSerializer.cs @@ -7,5 +7,7 @@ namespace Volo.Abp.RabbitMQ byte[] Serialize(object obj); object Deserialize(byte[] value, Type type); + + T Deserialize(byte[] value); } } diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/QueueDeclareConfiguration.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/QueueDeclareConfiguration.cs index 8cc07b7bb9..b84f08ec42 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/QueueDeclareConfiguration.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/QueueDeclareConfiguration.cs @@ -6,8 +6,9 @@ namespace Volo.Abp.RabbitMQ { public class QueueDeclareConfiguration { - [NotNull] - public string QueueName { get; } + [NotNull] public string QueueName { get; } + + public string DeadLetterQueueName { get; set; } public bool Durable { get; set; } @@ -18,12 +19,14 @@ namespace Volo.Abp.RabbitMQ public IDictionary Arguments { get; } public QueueDeclareConfiguration( - [NotNull] string queueName, - bool durable = true, - bool exclusive = false, - bool autoDelete = false) + [NotNull] string queueName, + bool durable = true, + bool exclusive = false, + bool autoDelete = false, + string deadLetterQueueName = null) { QueueName = queueName; + DeadLetterQueueName = deadLetterQueueName; Durable = durable; Exclusive = exclusive; AutoDelete = autoDelete; @@ -41,4 +44,4 @@ namespace Volo.Abp.RabbitMQ ); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs index 894f68d097..671445e00d 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs @@ -6,6 +6,7 @@ using RabbitMQ.Client.Events; using System; using System.Collections.Concurrent; using System.Threading.Tasks; +using RabbitMQ.Client.Exceptions; using Volo.Abp.DependencyInjection; using Volo.Abp.ExceptionHandling; using Volo.Abp.Threading; @@ -147,6 +148,7 @@ namespace Volo.Abp.RabbitMQ Channel = ConnectionPool .Get(ConnectionName) .CreateModel(); + Channel.ExchangeDeclare( exchange: Exchange.ExchangeName, type: Exchange.Type, @@ -155,7 +157,29 @@ namespace Volo.Abp.RabbitMQ arguments: Exchange.Arguments ); - Channel.QueueDeclare( + if (!Exchange.DeadLetterExchangeName.IsNullOrWhiteSpace() && + !Queue.DeadLetterQueueName.IsNullOrWhiteSpace()) + { + Channel.ExchangeDeclare( + Exchange.DeadLetterExchangeName, + Exchange.Type, + Exchange.Durable, + Exchange.AutoDelete + ); + + Channel.QueueDeclare( + Queue.DeadLetterQueueName, + Queue.Durable, + Queue.Exclusive, + Queue.AutoDelete); + + Queue.Arguments["x-dead-letter-exchange"] = Exchange.DeadLetterExchangeName; + Queue.Arguments["x-dead-letter-routing-key"] = Queue.DeadLetterQueueName; + + Channel.QueueBind(Queue.DeadLetterQueueName, Exchange.DeadLetterExchangeName, Queue.DeadLetterQueueName); + } + + var result = Channel.QueueDeclare( queue: Queue.QueueName, durable: Queue.Durable, exclusive: Queue.Exclusive, @@ -174,6 +198,17 @@ namespace Volo.Abp.RabbitMQ } catch (Exception ex) { + if (ex is OperationInterruptedException operationInterruptedException && + operationInterruptedException.ShutdownReason.ReplyCode == 406 && + operationInterruptedException.Message.Contains("arg 'x-dead-letter-exchange'")) + { + Exchange.DeadLetterExchangeName = null; + Queue.DeadLetterQueueName = null; + Queue.Arguments.Remove("x-dead-letter-exchange"); + Queue.Arguments.Remove("x-dead-letter-routing-key"); + Logger.LogWarning("Unable to bind the dead letter queue to an existing queue. You can delete the queue or add policy. See: https://www.rabbitmq.com/parameters.html"); + } + Logger.LogException(ex, LogLevel.Warning); await ExceptionNotifier.NotifyAsync(ex, logLevel: LogLevel.Warning); } @@ -194,14 +229,10 @@ namespace Volo.Abp.RabbitMQ { try { - Channel.BasicNack( - basicDeliverEventArgs.DeliveryTag, - multiple: false, - requeue: true - ); + Channel.BasicReject(basicDeliverEventArgs.DeliveryTag, false); } catch { } - + Logger.LogException(ex); await ExceptionNotifier.NotifyAsync(ex); } diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/Utf8JsonRabbitMqSerializer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/Utf8JsonRabbitMqSerializer.cs index c179193fdd..cc815f686a 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/Utf8JsonRabbitMqSerializer.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/Utf8JsonRabbitMqSerializer.cs @@ -23,5 +23,10 @@ namespace Volo.Abp.RabbitMQ { return _jsonSerializer.Deserialize(type, Encoding.UTF8.GetString(value)); } + + public T Deserialize(byte[] value) + { + return _jsonSerializer.Deserialize(Encoding.UTF8.GetString(value)); + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Security/System/Security/Principal/AbpClaimsIdentityExtensions.cs b/framework/src/Volo.Abp.Security/System/Security/Principal/AbpClaimsIdentityExtensions.cs index cf2169883c..83a587cc25 100644 --- a/framework/src/Volo.Abp.Security/System/Security/Principal/AbpClaimsIdentityExtensions.cs +++ b/framework/src/Volo.Abp.Security/System/Security/Principal/AbpClaimsIdentityExtensions.cs @@ -17,10 +17,12 @@ namespace System.Security.Principal { return null; } - if (Guid.TryParse(userIdOrNull.Value, out Guid result)) + + if (Guid.TryParse(userIdOrNull.Value, out Guid guid)) { - return result; + return guid; } + return null; } @@ -36,7 +38,12 @@ namespace System.Security.Principal return null; } - return Guid.Parse(userIdOrNull.Value); + if (Guid.TryParse(userIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; } public static Guid? FindTenantId([NotNull] this ClaimsPrincipal principal) @@ -49,7 +56,12 @@ namespace System.Security.Principal return null; } - return Guid.Parse(tenantIdOrNull.Value); + if (Guid.TryParse(tenantIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; } public static Guid? FindTenantId([NotNull] this IIdentity identity) @@ -64,7 +76,12 @@ namespace System.Security.Principal return null; } - return Guid.Parse(tenantIdOrNull.Value); + if (Guid.TryParse(tenantIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; } public static string FindClientId([NotNull] this ClaimsPrincipal principal) @@ -105,7 +122,12 @@ namespace System.Security.Principal return null; } - return Guid.Parse(editionIdOrNull.Value); + if (Guid.TryParse(editionIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; } public static Guid? FindEditionId([NotNull] this IIdentity identity) @@ -120,7 +142,88 @@ namespace System.Security.Principal return null; } - return Guid.Parse(editionIdOrNull.Value); + if (Guid.TryParse(editionIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; + } + + public static Guid? FindImpersonatorTenantId([NotNull] this ClaimsPrincipal principal) + { + Check.NotNull(principal, nameof(principal)); + + var impersonatorTenantIdOrNull = principal.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorTenantId); + if (impersonatorTenantIdOrNull == null || impersonatorTenantIdOrNull.Value.IsNullOrWhiteSpace()) + { + return null; + } + + if (Guid.TryParse(impersonatorTenantIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; + } + + public static Guid? FindImpersonatorTenantId([NotNull] this IIdentity identity) + { + Check.NotNull(identity, nameof(identity)); + + var claimsIdentity = identity as ClaimsIdentity; + + var impersonatorTenantIdOrNull = claimsIdentity?.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorTenantId); + if (impersonatorTenantIdOrNull == null || impersonatorTenantIdOrNull.Value.IsNullOrWhiteSpace()) + { + return null; + } + + if (Guid.TryParse(impersonatorTenantIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; + } + + public static Guid? FindImpersonatorUserId([NotNull] this ClaimsPrincipal principal) + { + Check.NotNull(principal, nameof(principal)); + + var impersonatorUserIdOrNull = principal.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorUserId); + if (impersonatorUserIdOrNull == null || impersonatorUserIdOrNull.Value.IsNullOrWhiteSpace()) + { + return null; + } + + if (Guid.TryParse(impersonatorUserIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; + } + + public static Guid? FindImpersonatorUserId([NotNull] this IIdentity identity) + { + Check.NotNull(identity, nameof(identity)); + + var claimsIdentity = identity as ClaimsIdentity; + + var impersonatorUserIdOrNull = claimsIdentity?.Claims?.FirstOrDefault(c => c.Type == AbpClaimTypes.ImpersonatorUserId); + if (impersonatorUserIdOrNull == null || impersonatorUserIdOrNull.Value.IsNullOrWhiteSpace()) + { + return null; + } + + if (Guid.TryParse(impersonatorUserIdOrNull.Value, out var guid)) + { + return guid; + } + + return null; } public static ClaimsIdentity AddIfNotContains(this ClaimsIdentity claimsIdentity, Claim claim) diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs index 271d5d3d94..da87e89946 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs @@ -67,5 +67,15 @@ namespace Volo.Abp.Security.Claims /// Default: "client_id". /// public static string ClientId { get; set; } = "client_id"; + + /// + /// Default: "impersonator_tenantid". + /// + public static string ImpersonatorTenantId { get; set; } = "impersonator_tenantid"; + + /// + /// Default: "impersonator_userid". + /// + public static string ImpersonatorUserId { get; set; } = "impersonator_userid"; } } diff --git a/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUserExtensions.cs b/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUserExtensions.cs index 43032fe214..d1d75bf16d 100644 --- a/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUserExtensions.cs +++ b/framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUserExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using JetBrains.Annotations; +using Volo.Abp.Security.Claims; namespace Volo.Abp.Users { @@ -30,5 +31,35 @@ namespace Volo.Abp.Users return currentUser.Id.Value; } + + public static Guid? FindImpersonatorTenantId([NotNull] this ICurrentUser currentUser) + { + var impersonatorTenantId = currentUser.FindClaimValue(AbpClaimTypes.ImpersonatorTenantId); + if (impersonatorTenantId == null || impersonatorTenantId.IsNullOrWhiteSpace()) + { + return null; + } + if (Guid.TryParse(impersonatorTenantId, out var guid)) + { + return guid; + } + + return null; + } + + public static Guid? FindImpersonatorUserId([NotNull] this ICurrentUser currentUser) + { + var impersonatorUserId = currentUser.FindClaimValue(AbpClaimTypes.ImpersonatorUserId); + if (impersonatorUserId == null || impersonatorUserId.IsNullOrWhiteSpace()) + { + return null; + } + if (Guid.TryParse(impersonatorUserId, out var guid)) + { + return guid; + } + + return null; + } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs index 53a5a7ec2e..e72f67bbc3 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/Auditing_Tests.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using NSubstitute; using Volo.Abp.Auditing.App.Entities; +using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Repositories; using Volo.Abp.Uow; @@ -44,7 +45,7 @@ namespace Volo.Abp.Auditing await _auditingStore.Received().SaveAsync(Arg.Any()); } - + [Fact] public async Task Should_Write_AuditLog_For_Classes_That_Implement_IAuditingEnabled_Without_An_Explicit_Scope() { @@ -280,6 +281,37 @@ namespace Volo.Abp.Auditing .Where(y => y.PropertyName != nameof(AppEntityWithAuditedAndHasCustomAuditingProperties .ExtraProperties)) .All(y => GetBaseAuditPropertyNames().Contains(y.PropertyName)))); +#pragma warning restore 4014 + } + + [Fact] + public virtual async Task Should_Write_AuditLog_Without_ExtraPropertyDictionary() + { + var entityId = Guid.NewGuid(); + var repository = ServiceProvider.GetRequiredService>(); + var appEntityWithAudited = new AppEntityWithAudited(entityId, "test name"); + appEntityWithAudited.SetProperty("No", 123456); + await repository.InsertAsync(appEntityWithAudited); + + using (var scope = _auditingManager.BeginScope()) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var entity = await repository.GetAsync(entityId); + entity.Name = "new test name"; + + await repository.UpdateAsync(entity); + + await uow.CompleteAsync(); + } + + await scope.SaveAsync(); + } + +#pragma warning disable 4014 + _auditingStore.Received().SaveAsync(Arg.Is(x => x.EntityChanges.Count == 1 + && x.EntityChanges[0].PropertyChanges.Count == 1 + && x.EntityChanges[0].PropertyChanges[0].PropertyName == nameof(AppEntityWithAudited.Name))); #pragma warning restore 4014 } } diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/EventBusTestModule.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/EventBusTestModule.cs index f514f37018..f260fecbea 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/EventBusTestModule.cs +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/EventBusTestModule.cs @@ -5,6 +5,17 @@ namespace Volo.Abp.EventBus [DependsOn(typeof(AbpEventBusModule))] public class EventBusTestModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(options => + { + options.UseRetryStrategy(retryStrategyOptions => + { + retryStrategyOptions.IntervalMillisecond = 0; + }); + options.ErrorHandleSelector = type => type == typeof(MyExceptionHandleEventData); + }); + } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_Exception_Handler_Tests.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_Exception_Handler_Tests.cs new file mode 100644 index 0000000000..d6b61ee863 --- /dev/null +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/Local/EventBus_Exception_Handler_Tests.cs @@ -0,0 +1,75 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Xunit; + +namespace Volo.Abp.EventBus.Local +{ + public class EventBus_Exception_Handler_Tests : EventBusTestBase + { + [Fact] + public async Task Should_Not_Handle_Exception() + { + var retryAttempt = 0; + LocalEventBus.Subscribe(eventData => + { + retryAttempt++; + throw new Exception("This exception is intentionally thrown!"); + }); + + var appException = await Assert.ThrowsAsync(async () => + { + await LocalEventBus.PublishAsync(new MySimpleEventData(1)); + }); + + retryAttempt.ShouldBe(1); + appException.Message.ShouldBe("This exception is intentionally thrown!"); + } + + [Fact] + public async Task Should_Handle_Exception() + { + var retryAttempt = 0; + LocalEventBus.Subscribe(eventData => + { + eventData.Value.ShouldBe(0); + + retryAttempt++; + eventData.Value++; + if (retryAttempt < 2) + { + throw new Exception("This exception is intentionally thrown!"); + } + + return Task.CompletedTask; + + }); + + await LocalEventBus.PublishAsync(new MyExceptionHandleEventData(0)); + retryAttempt.ShouldBe(2); + } + + [Fact] + public async Task Should_Throw_Exception_After_Error_Handle() + { + var retryAttempt = 0; + LocalEventBus.Subscribe(eventData => + { + eventData.Value.ShouldBe(0); + + retryAttempt++; + eventData.Value++; + + throw new Exception("This exception is intentionally thrown!"); + }); + + var appException = await Assert.ThrowsAsync(async () => + { + await LocalEventBus.PublishAsync(new MyExceptionHandleEventData(0)); + }); + + retryAttempt.ShouldBe(4); + appException.Message.ShouldBe("This exception is intentionally thrown!"); + } + } +} diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/MyExceptionHandleEventData.cs b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/MyExceptionHandleEventData.cs new file mode 100644 index 0000000000..f490d58211 --- /dev/null +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo/Abp/EventBus/MyExceptionHandleEventData.cs @@ -0,0 +1,12 @@ +namespace Volo.Abp.EventBus +{ + public class MyExceptionHandleEventData + { + public int Value { get; set; } + + public MyExceptionHandleEventData(int value) + { + Value = value; + } + } +} diff --git a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs index f6af2bde72..57f13cd057 100644 --- a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs +++ b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo/Abp/Data/MultiTenancy/MultiTenantConnectionStringResolver_Tests.cs @@ -30,6 +30,21 @@ namespace Volo.Abp.Data.MultiTenancy { options.ConnectionStrings.Default = "default-value"; options.ConnectionStrings["db1"] = "db1-default-value"; + options.ConnectionStrings["Saas"] = "Saas-default-value"; + options.ConnectionStrings["Admin"] = "Admin-default-value"; + + options.Databases.Configure("Saas", database => + { + database.MappedConnections.Add("Saas1"); + database.MappedConnections.Add("Saas2"); + database.IsUsedByTenants = false; + }); + + options.Databases.Configure("Admin", database => + { + database.MappedConnections.Add("Admin1"); + database.MappedConnections.Add("Admin2"); + }); }); services.Configure(options => @@ -41,7 +56,8 @@ namespace Volo.Abp.Data.MultiTenancy ConnectionStrings = { { ConnectionStrings.DefaultConnectionStringName, "tenant1-default-value"}, - {"db1", "tenant1-db1-value"} + {"db1", "tenant1-db1-value"}, + {"Admin", "tenant1-Admin-value"} } }, new TenantConfiguration(_tenant2Id, "tenant2") @@ -55,12 +71,16 @@ namespace Volo.Abp.Data.MultiTenancy //No tenant in current context (await _connectionResolver.ResolveAsync()).ShouldBe("default-value"); (await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value"); + (await _connectionResolver.ResolveAsync("Saas1")).ShouldBe("Saas-default-value"); + (await _connectionResolver.ResolveAsync("Admin2")).ShouldBe("Admin-default-value"); //Overriden connection strings for tenant1 using (_currentTenant.Change(_tenant1Id)) { (await _connectionResolver.ResolveAsync()).ShouldBe("tenant1-default-value"); (await _connectionResolver.ResolveAsync("db1")).ShouldBe("tenant1-db1-value"); + (await _connectionResolver.ResolveAsync("Saas1")).ShouldBe("tenant1-default-value"); + (await _connectionResolver.ResolveAsync("Admin2")).ShouldBe("tenant1-Admin-value"); } //No tenant in current context @@ -72,6 +92,8 @@ namespace Volo.Abp.Data.MultiTenancy { (await _connectionResolver.ResolveAsync()).ShouldBe("default-value"); (await _connectionResolver.ResolveAsync("db1")).ShouldBe("db1-default-value"); + (await _connectionResolver.ResolveAsync("Saas1")).ShouldBe("Saas-default-value"); + (await _connectionResolver.ResolveAsync("Admin2")).ShouldBe("Admin-default-value"); } } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/AuditLogConsts.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/AuditLogConsts.cs index 4a8c723b76..5b2e2dd226 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/AuditLogConsts.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/AuditLogConsts.cs @@ -32,14 +32,6 @@ /// public static int MaxBrowserInfoLength { get; set; } = 512; - /// - /// Default value: 4000 - /// - public static int MaxExceptionsLength { get; set; } = 4000; - - //TODO: Replace with MaxExceptionsLength in v3.0 - public static int MaxExceptionsLengthValue { get; set; } = MaxExceptionsLength; - /// /// Default value: 256 /// diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AbpAuditLoggingDomainModule.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AbpAuditLoggingDomainModule.cs index c5e94f633a..c61fb2c855 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AbpAuditLoggingDomainModule.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AbpAuditLoggingDomainModule.cs @@ -1,5 +1,7 @@ using Volo.Abp.Auditing; using Volo.Abp.Domain; +using Volo.Abp.ExceptionHandling; +using Volo.Abp.Json; using Volo.Abp.Modularity; using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending.Modularity; @@ -10,13 +12,15 @@ namespace Volo.Abp.AuditLogging [DependsOn(typeof(AbpAuditingModule))] [DependsOn(typeof(AbpDddDomainModule))] [DependsOn(typeof(AbpAuditLoggingDomainSharedModule))] + [DependsOn(typeof(AbpExceptionHandlingModule))] + [DependsOn(typeof(AbpJsonModule))] public class AbpAuditLoggingDomainModule : AbpModule { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); public override void PostConfigureServices(ServiceConfigurationContext context) { - OneTimeRunner.Run(() => + OneTimeRunner.Run(() => { ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity( AuditLoggingModuleExtensionConsts.ModuleName, diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLog.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLog.cs index 25e0c9d9dc..26b8b6650d 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLog.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLog.cs @@ -59,57 +59,55 @@ namespace Volo.Abp.AuditLogging } - public AuditLog(IGuidGenerator guidGenerator, AuditLogInfo auditInfo) - : base(guidGenerator.Create()) + public AuditLog( + Guid id, + string applicationName, + Guid? tenantId, + string tenantName, + Guid? userId, + string userName, + DateTime executionTime, + int executionDuration, + string clientIpAddress, + string clientName, + string clientId, + string correlationId, + string browserInfo, + string httpMethod, + string url, + int? httpStatusCode, + Guid? impersonatorUserId, + Guid? impersonatorTenantId, + ExtraPropertyDictionary extraPropertyDictionary, + List entityChanges, + List actions, + string exceptions, + string comments) + : base(id) { - ApplicationName = auditInfo.ApplicationName.Truncate(AuditLogConsts.MaxApplicationNameLength); - TenantId = auditInfo.TenantId; - TenantName = auditInfo.TenantName.Truncate(AuditLogConsts.MaxTenantNameLength); - UserId = auditInfo.UserId; - UserName = auditInfo.UserName.Truncate(AuditLogConsts.MaxUserNameLength); - ExecutionTime = auditInfo.ExecutionTime; - ExecutionDuration = auditInfo.ExecutionDuration; - ClientIpAddress = auditInfo.ClientIpAddress.Truncate(AuditLogConsts.MaxClientIpAddressLength); - ClientName = auditInfo.ClientName.Truncate(AuditLogConsts.MaxClientNameLength); - ClientId = auditInfo.ClientId.Truncate(AuditLogConsts.MaxClientIdLength); - CorrelationId = auditInfo.CorrelationId.Truncate(AuditLogConsts.MaxCorrelationIdLength); - BrowserInfo = auditInfo.BrowserInfo.Truncate(AuditLogConsts.MaxBrowserInfoLength); - HttpMethod = auditInfo.HttpMethod.Truncate(AuditLogConsts.MaxHttpMethodLength); - Url = auditInfo.Url.Truncate(AuditLogConsts.MaxUrlLength); - HttpStatusCode = auditInfo.HttpStatusCode; - ImpersonatorUserId = auditInfo.ImpersonatorUserId; - ImpersonatorTenantId = auditInfo.ImpersonatorTenantId; - - ExtraProperties = new ExtraPropertyDictionary(); - if (auditInfo.ExtraProperties != null) - { - foreach (var pair in auditInfo.ExtraProperties) - { - ExtraProperties.Add(pair.Key, pair.Value); - } - } - - EntityChanges = auditInfo - .EntityChanges? - .Select(entityChangeInfo => new EntityChange(guidGenerator, Id, entityChangeInfo, tenantId: auditInfo.TenantId)) - .ToList() - ?? new List(); - - Actions = auditInfo - .Actions? - .Select(auditLogActionInfo => new AuditLogAction(guidGenerator.Create(), Id, auditLogActionInfo, tenantId: auditInfo.TenantId)) - .ToList() - ?? new List(); - - Exceptions = auditInfo - .Exceptions? - .JoinAsString(Environment.NewLine) - .Truncate(AuditLogConsts.MaxExceptionsLengthValue); - - Comments = auditInfo - .Comments? - .JoinAsString(Environment.NewLine) - .Truncate(AuditLogConsts.MaxCommentsLength); + ApplicationName = applicationName.Truncate(AuditLogConsts.MaxApplicationNameLength); + TenantId = tenantId; + TenantName = tenantName.Truncate(AuditLogConsts.MaxTenantNameLength); + UserId = userId; + UserName = userName.Truncate(AuditLogConsts.MaxUserNameLength); + ExecutionTime = executionTime; + ExecutionDuration = executionDuration; + ClientIpAddress = clientIpAddress.Truncate(AuditLogConsts.MaxClientIpAddressLength); + ClientName = clientName.Truncate(AuditLogConsts.MaxClientNameLength); + ClientId = clientId.Truncate(AuditLogConsts.MaxClientIdLength); + CorrelationId = correlationId.Truncate(AuditLogConsts.MaxCorrelationIdLength); + BrowserInfo = browserInfo.Truncate(AuditLogConsts.MaxBrowserInfoLength); + HttpMethod = httpMethod.Truncate(AuditLogConsts.MaxHttpMethodLength); + Url = url.Truncate(AuditLogConsts.MaxUrlLength); + HttpStatusCode = httpStatusCode; + ImpersonatorUserId = impersonatorUserId; + ImpersonatorTenantId = impersonatorTenantId; + + ExtraProperties = extraPropertyDictionary; + EntityChanges = entityChanges; + Actions = actions; + Exceptions = exceptions; + Comments = comments.Truncate(AuditLogConsts.MaxCommentsLength); } } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLogInfoToAuditLogConverter.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLogInfoToAuditLogConverter.cs new file mode 100644 index 0000000000..f27497324e --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditLogInfoToAuditLogConverter.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.ExceptionHandling; +using Volo.Abp.Auditing; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; +using Volo.Abp.Http; +using Volo.Abp.Json; + +namespace Volo.Abp.AuditLogging +{ + public class AuditLogInfoToAuditLogConverter : IAuditLogInfoToAuditLogConverter, ITransientDependency + { + protected IGuidGenerator GuidGenerator { get; } + protected IExceptionToErrorInfoConverter ExceptionToErrorInfoConverter { get; } + protected IJsonSerializer JsonSerializer { get; } + + public AuditLogInfoToAuditLogConverter(IGuidGenerator guidGenerator, IExceptionToErrorInfoConverter exceptionToErrorInfoConverter, IJsonSerializer jsonSerializer) + { + GuidGenerator = guidGenerator; + ExceptionToErrorInfoConverter = exceptionToErrorInfoConverter; + JsonSerializer = jsonSerializer; + } + + public virtual Task ConvertAsync(AuditLogInfo auditLogInfo) + { + var auditLogId = GuidGenerator.Create(); + + var extraProperties = new ExtraPropertyDictionary(); + if (auditLogInfo.ExtraProperties != null) + { + foreach (var pair in auditLogInfo.ExtraProperties) + { + extraProperties.Add(pair.Key, pair.Value); + } + } + + var entityChanges = auditLogInfo + .EntityChanges? + .Select(entityChangeInfo => new EntityChange(GuidGenerator, auditLogId, entityChangeInfo, tenantId: auditLogInfo.TenantId)) + .ToList() + ?? new List(); + + var actions = auditLogInfo + .Actions? + .Select(auditLogActionInfo => new AuditLogAction(GuidGenerator.Create(), auditLogId, auditLogActionInfo, tenantId: auditLogInfo.TenantId)) + .ToList() + ?? new List(); + + var remoteServiceErrorInfos = auditLogInfo.Exceptions?.Select(exception => ExceptionToErrorInfoConverter.Convert(exception, true)) + ?? new List(); + + var exceptions = remoteServiceErrorInfos.Any() + ? JsonSerializer.Serialize(remoteServiceErrorInfos, indented: true) + : null; + + var comments = auditLogInfo + .Comments? + .JoinAsString(Environment.NewLine); + + var auditLog = new AuditLog( + auditLogId, + auditLogInfo.ApplicationName, + auditLogInfo.TenantId, + auditLogInfo.TenantName, + auditLogInfo.UserId, + auditLogInfo.UserName, + auditLogInfo.ExecutionTime, + auditLogInfo.ExecutionDuration, + auditLogInfo.ClientIpAddress, + auditLogInfo.ClientName, + auditLogInfo.ClientId, + auditLogInfo.CorrelationId, + auditLogInfo.BrowserInfo, + auditLogInfo.HttpMethod, + auditLogInfo.Url, + auditLogInfo.HttpStatusCode, + auditLogInfo.ImpersonatorUserId, + auditLogInfo.ImpersonatorTenantId, + extraProperties, + entityChanges, + actions, + exceptions, + comments + ); + + return Task.FromResult(auditLog); + } + } +} diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs index f6c4343261..ccc76a4bad 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs @@ -5,7 +5,6 @@ using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Volo.Abp.Auditing; using Volo.Abp.DependencyInjection; -using Volo.Abp.Guids; using Volo.Abp.Uow; namespace Volo.Abp.AuditLogging @@ -13,21 +12,19 @@ namespace Volo.Abp.AuditLogging public class AuditingStore : IAuditingStore, ITransientDependency { public ILogger Logger { get; set; } - protected IAuditLogRepository AuditLogRepository { get; } - protected IGuidGenerator GuidGenerator { get; } protected IUnitOfWorkManager UnitOfWorkManager { get; } protected AbpAuditingOptions Options { get; } - + protected IAuditLogInfoToAuditLogConverter Converter { get; } public AuditingStore( IAuditLogRepository auditLogRepository, - IGuidGenerator guidGenerator, IUnitOfWorkManager unitOfWorkManager, - IOptions options) + IOptions options, + IAuditLogInfoToAuditLogConverter converter) { AuditLogRepository = auditLogRepository; - GuidGenerator = guidGenerator; UnitOfWorkManager = unitOfWorkManager; + Converter = converter; Options = options.Value; Logger = NullLogger.Instance; @@ -56,9 +53,9 @@ namespace Volo.Abp.AuditLogging { using (var uow = UnitOfWorkManager.Begin(true)) { - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, auditInfo)); + await AuditLogRepository.InsertAsync(await Converter.ConvertAsync(auditInfo)); await uow.CompleteAsync(); } } } -} \ No newline at end of file +} diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogInfoToAuditLogConverter.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogInfoToAuditLogConverter.cs new file mode 100644 index 0000000000..faba811d4f --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogInfoToAuditLogConverter.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using Volo.Abp.Auditing; + +namespace Volo.Abp.AuditLogging +{ + public interface IAuditLogInfoToAuditLogConverter + { + Task ConvertAsync(AuditLogInfo auditLogInfo); + } +} diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs index 494e4cefde..51c30ef0a1 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/AbpAuditLoggingDbContextModelBuilderExtensions.cs @@ -37,9 +37,6 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore b.Property(x => x.Url).HasMaxLength(AuditLogConsts.MaxUrlLength).HasColumnName(nameof(AuditLog.Url)); b.Property(x => x.HttpStatusCode).HasColumnName(nameof(AuditLog.HttpStatusCode)); - if (builder.IsUsingOracle()) { AuditLogConsts.MaxExceptionsLengthValue = 2000; } - b.Property(x => x.Exceptions).HasMaxLength(AuditLogConsts.MaxExceptionsLengthValue).HasColumnName(nameof(AuditLog.Exceptions)); - b.Property(x => x.Comments).HasMaxLength(AuditLogConsts.MaxCommentsLength).HasColumnName(nameof(AuditLog.Comments)); b.Property(x => x.ExecutionDuration).HasColumnName(nameof(AuditLog.ExecutionDuration)); b.Property(x => x.ImpersonatorTenantId).HasColumnName(nameof(AuditLog.ImpersonatorTenantId)); diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs index 3214ee75af..6716b87cda 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs @@ -1,13 +1,10 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Linq; using System.Net; using System.Threading.Tasks; -using Microsoft.VisualBasic; using Shouldly; using Volo.Abp.Auditing; -using Volo.Abp.Guids; using Volo.Abp.Modularity; using Xunit; @@ -17,12 +14,12 @@ namespace Volo.Abp.AuditLogging where TStartupModule : IAbpModule { protected IAuditLogRepository AuditLogRepository { get; } - protected IGuidGenerator GuidGenerator { get; } + protected IAuditLogInfoToAuditLogConverter AuditLogInfoToAuditLogConverter { get; } protected AuditLogRepository_Tests() { AuditLogRepository = GetRequiredService(); - GuidGenerator = GetRequiredService(); + AuditLogInfoToAuditLogConverter = GetRequiredService(); } [Fact] @@ -119,8 +116,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); //Assert var logs = await AuditLogRepository.GetListAsync(); @@ -223,8 +220,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); //Assert var logs = await AuditLogRepository.GetCountAsync(); @@ -325,8 +322,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); //Assert var date = DateTime.Parse("2020-01-01"); @@ -428,8 +425,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); //Assert var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(); @@ -534,8 +531,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(); var entityChange = @@ -641,8 +638,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); //Assert var entityChangesDesc = await AuditLogRepository.GetEntityChangeListAsync(); @@ -754,8 +751,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); //Assert var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(changeType: EntityChangeType.Created); @@ -864,8 +861,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); //Assert var entityHistory = await AuditLogRepository.GetEntityChangesWithUsernameAsync(entityId, entityType); @@ -976,8 +973,8 @@ namespace Volo.Abp.AuditLogging } }; - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); - await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log1)); + await AuditLogRepository.InsertAsync(await AuditLogInfoToAuditLogConverter.ConvertAsync(log2)); var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(); var entityHistory = diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css index 92834197e6..118e70848c 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css @@ -22,7 +22,7 @@ border-radius: 5px; overflow: hidden; } .docs-page .docs-sidebar .docs-sidebar-wrapper { - width: 270px; + width: 300px; float: right; } .docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control { border: 0; } @@ -70,7 +70,7 @@ margin-right: 12px !important; margin-top: 20px !important; } .docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul { - font-size: .9em; + font-size: 14px; list-style: none; padding: 0 1rem; margin: 0; } @@ -555,6 +555,9 @@ div.code-toolbar > .toolbar span { div.code-toolbar > .toolbar a { cursor: copy; } +.logo-nav ul { + width: 300px !important; } + @media (max-width: 767px) { body { font-size: 14px; } diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css index 9c02e19529..ca0a754a36 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css @@ -1 +1 @@ -body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{text-decoration:none;}.docs-page .docs-sidebar{padding-right:1rem;position:relative;top:0;left:0;position:fixed;background:#1d1d1d;}.docs-page .docs-sidebar .input-group{border-radius:5px;overflow:hidden;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:270px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.25rem 0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:3px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{padding:0 10px;font-size:.9rem;width:26px;height:34px;line-height:1;border-radius:0;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text i{color:#666;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{padding:0 10px 2px 10px;border:0;min-height:34px;height:34px;font-size:.9em;border-radius:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{padding:0 10px 2px 6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 230px);overflow-y:auto;margin-right:12px !important;margin-top:20px !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:.9em;list-style:none;padding:0 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .badge{text-transform:uppercase;font-size:9px;position:relative;letter-spacing:.125px;top:-2px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.35rem;color:#000;font-weight:700;padding:15px 0 15px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.7em;letter-spacing:1px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.65;transition:.2s;font-size:.8em;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;min-height:100vh;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{background:#f5f7fa;padding:15px 30px;margin:0 -15px;text-align:right;font-size:.8em;min-height:48px;}.docs-page .docs-content .docs-link-btns a{color:#222;}.docs-page .docs-content .docs-link-btns a .text-muted{color:#ccc !important;}.docs-page .docs-content .docs-link-btns a:hover{color:#000;text-decoration:none;}.docs-page .docs-content .docs-link-btns .search-area{margin:-5px 0 -5px -10px;box-shadow:0 0 10px #e8e8e8;}.docs-page .docs-content .docs-link-btns .search-area .input-group-text{background:#fff;border:0;color:#000;font-size:1em;}.docs-page .docs-content .docs-link-btns .search-area .form-control{background:#fff;border:0;font-size:1em;padding-left:0;outline:0;box-shadow:none;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body{word-break:break-word;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body .blockquote{margin-bottom:1rem;margin-left:0;border-left:3px solid #d2dbe4;padding:1em 1.5em;background-color:#e9edf1;padding-bottom:.2em;font-size:1em;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .doc-social-btns{margin:0 -15px 0;font-size:.8em;background:#e9ecf0;height:53px;padding:15px 20px;position:fixed;top:0;width:100%;}.docs-page .doc-social-btns a:hover{text-decoration:none;}.docs-page .doc-social-btns .twitter{color:#00acee;}.docs-page .doc-social-btns .linkedin{color:#0077b5;}.docs-page .doc-social-btns .email{color:#5a5a5a;}.docs-page .doc-social-btns .share-button{margin-left:10px;}.docs-page .cont-container a.cont-avatar{position:relative;}.docs-page .cont-container a.cont-avatar img{width:24px;height:24px;box-shadow:0 0 8px #c1bbbb;border:2px solid #fff;margin-left:-10px;display:inline-block;margin-top:-2px;transition:.2s;}.docs-page .cont-container:hover a.cont-avatar img{margin-left:-2px;}.docs-page .docs-page-index{min-height:90vh;background-color:#f5f7fa !important;}.docs-page .docs-page-index #scroll-index{max-height:90vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:50px;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:1px solid #007bff;background:none;color:#007bff;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control::placeholder{color:#fff;opacity:.5;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#000;border-color:#000;color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;white-space:unset;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;text-align:center;display:block;width:100%;background:#444;padding:6px 0 8px;border-radius:5px;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}@media(min-width:1100px){.container{max-width:1080px;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#1d1d1d;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.25rem;font-weight:700;display:block;margin-right:0;padding:10px 0 15px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}}@media screen and (max-width:767px){.navbar-logo .navbar-brand{display:inline-block;margin:0 auto !important;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}}.alert-criteria{padding:1.25em 1.5em;max-width:100%;}.alert-criteria p.alert-p{font-size:.96em;}.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.96em;}@media screen and (max-width:767px){.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.88em;}}.alert-criteria .input-group .input-group-text{color:#004085;background-color:#bddcfd;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .input-group-text{display:none;}}.alert-criteria .input-group .form-control{color:#004085;background-color:#fff;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .form-control{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;}}.scrolledMore{padding-top:107px;}.scrolledMore .alert-criteria{position:fixed;top:0;z-index:10;border:0;border-radius:0;margin-left:-47px;padding:.5em .75em;}@media screen and (max-width:767px){.scrolledMore .alert-criteria{top:72px;margin-left:-36px;}}.scrolledMore .alert-criteria p.alert-p{display:none;}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:1 !important;filter:"alpha(opacity=1)";-ms-filter:"alpha(opacity=1)";} \ No newline at end of file +body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{text-decoration:none;}.docs-page .docs-sidebar{padding-right:1rem;position:relative;top:0;left:0;position:fixed;background:#1d1d1d;}.docs-page .docs-sidebar .input-group{border-radius:5px;overflow:hidden;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:300px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.25rem 0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:3px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{padding:0 10px;font-size:.9rem;width:26px;height:34px;line-height:1;border-radius:0;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text i{color:#666;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{padding:0 10px 2px 10px;border:0;min-height:34px;height:34px;font-size:.9em;border-radius:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{padding:0 10px 2px 6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 230px);overflow-y:auto;margin-right:12px !important;margin-top:20px !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:14px;list-style:none;padding:0 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .badge{text-transform:uppercase;font-size:9px;position:relative;letter-spacing:.125px;top:-2px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.35rem;color:#000;font-weight:700;padding:15px 0 15px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.7em;letter-spacing:1px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.65;transition:.2s;font-size:.8em;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;min-height:100vh;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{background:#f5f7fa;padding:15px 30px;margin:0 -15px;text-align:right;font-size:.8em;min-height:48px;}.docs-page .docs-content .docs-link-btns a{color:#222;}.docs-page .docs-content .docs-link-btns a .text-muted{color:#ccc !important;}.docs-page .docs-content .docs-link-btns a:hover{color:#000;text-decoration:none;}.docs-page .docs-content .docs-link-btns .search-area{margin:-5px 0 -5px -10px;box-shadow:0 0 10px #e8e8e8;}.docs-page .docs-content .docs-link-btns .search-area .input-group-text{background:#fff;border:0;color:#000;font-size:1em;}.docs-page .docs-content .docs-link-btns .search-area .form-control{background:#fff;border:0;font-size:1em;padding-left:0;outline:0;box-shadow:none;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body{word-break:break-word;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body .blockquote{margin-bottom:1rem;margin-left:0;border-left:3px solid #d2dbe4;padding:1em 1.5em;background-color:#e9edf1;padding-bottom:.2em;font-size:1em;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .doc-social-btns{margin:0 -15px 0;font-size:.8em;background:#e9ecf0;height:53px;padding:15px 20px;position:fixed;top:0;width:100%;}.docs-page .doc-social-btns a:hover{text-decoration:none;}.docs-page .doc-social-btns .twitter{color:#00acee;}.docs-page .doc-social-btns .linkedin{color:#0077b5;}.docs-page .doc-social-btns .email{color:#5a5a5a;}.docs-page .doc-social-btns .share-button{margin-left:10px;}.docs-page .cont-container a.cont-avatar{position:relative;}.docs-page .cont-container a.cont-avatar img{width:24px;height:24px;box-shadow:0 0 8px #c1bbbb;border:2px solid #fff;margin-left:-10px;display:inline-block;margin-top:-2px;transition:.2s;}.docs-page .cont-container:hover a.cont-avatar img{margin-left:-2px;}.docs-page .docs-page-index{min-height:90vh;background-color:#f5f7fa !important;}.docs-page .docs-page-index #scroll-index{max-height:90vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:50px;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:1px solid #007bff;background:none;color:#007bff;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control::placeholder{color:#fff;opacity:.5;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#000;border-color:#000;color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;white-space:unset;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;text-align:center;display:block;width:100%;background:#444;padding:6px 0 8px;border-radius:5px;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}@media(min-width:1100px){.container{max-width:1080px;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#1d1d1d;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.25rem;font-weight:700;display:block;margin-right:0;padding:10px 0 15px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}.logo-nav ul{width:300px !important;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}}@media screen and (max-width:767px){.navbar-logo .navbar-brand{display:inline-block;margin:0 auto !important;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}}.alert-criteria{padding:1.25em 1.5em;max-width:100%;}.alert-criteria p.alert-p{font-size:.96em;}.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.96em;}@media screen and (max-width:767px){.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.88em;}}.alert-criteria .input-group .input-group-text{color:#004085;background-color:#bddcfd;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .input-group-text{display:none;}}.alert-criteria .input-group .form-control{color:#004085;background-color:#fff;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .form-control{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;}}.scrolledMore{padding-top:107px;}.scrolledMore .alert-criteria{position:fixed;top:0;z-index:10;border:0;border-radius:0;margin-left:-47px;padding:.5em .75em;}@media screen and (max-width:767px){.scrolledMore .alert-criteria{top:72px;margin-left:-36px;}}.scrolledMore .alert-criteria p.alert-p{display:none;}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:1 !important;filter:"alpha(opacity=1)";-ms-filter:"alpha(opacity=1)";} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss index cf25d91c4d..ec877a119b 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss @@ -33,7 +33,7 @@ body { } .docs-sidebar-wrapper { - width: 270px; + width: 300px; float: right; input.form-control { @@ -110,7 +110,7 @@ body { } ul { - font-size: .9em; + font-size: 14px; list-style: none; padding: 0 1rem; margin: 0; @@ -943,6 +943,10 @@ div.code-toolbar > .toolbar a { cursor: copy; } +.logo-nav ul { + width: 300px !important; +} + @media (max-width: 767px) { body { font-size: 14px; diff --git a/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidatorCallback.cs b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidatorCallback.cs new file mode 100644 index 0000000000..2adc65d497 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidatorCallback.cs @@ -0,0 +1,33 @@ +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; + +namespace Volo.Abp.Identity.AspNetCore +{ + public class AbpSecurityStampValidatorCallback + { + /// + /// Implements callback for SecurityStampValidator's OnRefreshingPrincipal event. + /// https://github.com/IdentityServer/IdentityServer4/blob/main/src/AspNetIdentity/src/SecurityStampValidatorCallback.cs + /// + public class SecurityStampValidatorCallback + { + /// + /// Maintains the claims captured at login time that are not being created by ASP.NET Identity. + /// This is needed to preserve claims such as idp, auth_time, amr. + /// + /// The context. + /// + public static Task UpdatePrincipal(SecurityStampRefreshingPrincipalContext context) + { + var newClaimTypes = context.NewPrincipal.Claims.Select(x => x.Type).ToArray(); + var currentClaimsToKeep = context.CurrentPrincipal.Claims.Where(x => !newClaimTypes.Contains(x.Type)).ToArray(); + + var id = context.NewPrincipal.Identities.First(); + id.AddClaims(currentClaimsToKeep); + + return Task.CompletedTask; + } + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs index 80c275252c..a977afd2e9 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpClaimsService.cs @@ -16,6 +16,8 @@ namespace Volo.Abp.IdentityServer private static readonly string[] AdditionalOptionalClaimNames = { AbpClaimTypes.TenantId, + AbpClaimTypes.ImpersonatorTenantId, + AbpClaimTypes.ImpersonatorUserId, AbpClaimTypes.Name, AbpClaimTypes.SurName, JwtClaimTypes.PreferredUserName, diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index 55121aec99..f75f10d687 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -107,8 +107,6 @@ namespace Volo.Abp.IdentityServer identityServerBuilder.AddInMemoryApiResources(configuration.GetSection("IdentityServer:ApiResources")); identityServerBuilder.AddInMemoryIdentityResources(configuration.GetSection("IdentityServer:IdentityResources")); } - - identityServerBuilder.AddExtensionGrantValidator(); } public override void PostConfigureServices(ServiceConfigurationContext context) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/LinkLoginExtensionGrantValidator.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/LinkLoginExtensionGrantValidator.cs deleted file mode 100644 index f7422c6a77..0000000000 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/LinkLoginExtensionGrantValidator.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Claims; -using System.Threading.Tasks; -using IdentityServer4.Validation; -using Microsoft.Extensions.Localization; -using Microsoft.Extensions.Logging; -using Volo.Abp.Identity; -using Volo.Abp.IdentityServer.Localization; -using Volo.Abp.MultiTenancy; -using Volo.Abp.Security.Claims; -using Volo.Abp.Users; -using IdentityUser = Volo.Abp.Identity.IdentityUser; - -namespace Volo.Abp.IdentityServer.AspNetIdentity -{ - public class LinkLoginExtensionGrantValidator : IExtensionGrantValidator - { - public const string ExtensionGrantType = "LinkLogin"; - - public string GrantType => ExtensionGrantType; - - protected ITokenValidator TokenValidator { get; } - protected IdentityLinkUserManager IdentityLinkUserManager { get; } - protected ICurrentTenant CurrentTenant { get; } - protected ICurrentUser CurrentUser { get; } - protected ICurrentPrincipalAccessor CurrentPrincipalAccessor { get; } - protected IdentityUserManager UserManager { get; } - protected IdentitySecurityLogManager IdentitySecurityLogManager { get; } - protected ILogger Logger { get; } - protected IStringLocalizer Localizer { get; } - - public LinkLoginExtensionGrantValidator( - ITokenValidator tokenValidator, - IdentityLinkUserManager identityLinkUserManager, - ICurrentTenant currentTenant, - ICurrentUser currentUser, - IdentityUserManager userManager, - ICurrentPrincipalAccessor currentPrincipalAccessor, - IdentitySecurityLogManager identitySecurityLogManager, - ILogger logger, - IStringLocalizer localizer) - { - TokenValidator = tokenValidator; - IdentityLinkUserManager = identityLinkUserManager; - CurrentTenant = currentTenant; - CurrentUser = currentUser; - UserManager = userManager; - CurrentPrincipalAccessor = currentPrincipalAccessor; - IdentitySecurityLogManager = identitySecurityLogManager; - Logger = logger; - Localizer = localizer; - } - - public virtual async Task ValidateAsync(ExtensionGrantValidationContext context) - { - var accessToken = context.Request.Raw["access_token"]; - if (accessToken.IsNullOrWhiteSpace()) - { - context.Result = new GrantValidationResult - { - IsError = true, - Error = "invalid_access_token" - }; - return; - } - - var result = await TokenValidator.ValidateAccessTokenAsync(accessToken); - if (result.IsError) - { - context.Result = new GrantValidationResult - { - IsError = true, - Error = result.Error, - ErrorDescription = result.ErrorDescription - }; - return; - } - - using (CurrentPrincipalAccessor.Change(result.Claims)) - { - if (!Guid.TryParse(context.Request.Raw["LinkUserId"], out var linkUserId)) - { - context.Result = new GrantValidationResult - { - IsError = true, - Error = "invalid_link_user_id" - }; - return; - } - - Guid? linkTenantId = null; - if (!context.Request.Raw["LinkTenantId"].IsNullOrWhiteSpace()) - { - if (!Guid.TryParse(context.Request.Raw["LinkTenantId"], out var parsedGuid)) - { - context.Result = new GrantValidationResult - { - IsError = true, - Error = "invalid_link_tenant_id" - }; - return; - } - - linkTenantId = parsedGuid; - } - - var isLinked = await IdentityLinkUserManager.IsLinkedAsync( - new IdentityLinkUserInfo(CurrentUser.GetId(), CurrentTenant.Id), - new IdentityLinkUserInfo(linkUserId, linkTenantId), - true); - - if (isLinked) - { - using (CurrentTenant.Change(linkTenantId)) - { - var user = await UserManager.GetByIdAsync(linkUserId); - var sub = await UserManager.GetUserIdAsync(user); - - var additionalClaims = new List(); - await AddCustomClaimsAsync(additionalClaims, user, context); - - context.Result = new GrantValidationResult( - sub, - GrantType, - additionalClaims.ToArray() - ); - } - } - else - { - context.Result = new GrantValidationResult - { - IsError = true, - Error = Localizer["TheTargetUserIsNotLinkedToYou"] - }; - } - } - } - - protected virtual Task AddCustomClaimsAsync(List customClaims, IdentityUser user, ExtensionGrantValidationContext context) - { - if (user.TenantId.HasValue) - { - customClaims.Add(new Claim(AbpClaimTypes.TenantId, user.TenantId?.ToString())); - } - - return Task.CompletedTask; - } - } -} diff --git a/npm/ng-packs/apps/dev-app/src/environments/environment.ts b/npm/ng-packs/apps/dev-app/src/environments/environment.ts index 853e2a69d9..d3aa48f6ad 100644 --- a/npm/ng-packs/apps/dev-app/src/environments/environment.ts +++ b/npm/ng-packs/apps/dev-app/src/environments/environment.ts @@ -23,6 +23,9 @@ export const environment = { url: 'https://localhost:44305', rootNamespace: 'MyCompanyName.MyProjectName', }, + AbpAccount: { + rootNamespace: 'Volo.Abp', + }, AbpFeatureManagement: { rootNamespace: 'Volo.Abp', }, diff --git a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts index 3eee83c781..c2bba2189e 100644 --- a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts @@ -69,6 +69,7 @@ const routes: Routes = [ component: ReplaceableRouteContainerComponent, canActivate: [AuthenticationFlowGuard], data: { + tenantBoxVisible: false, replaceableComponent: { key: eAccountComponents.ResetPassword, defaultComponent: ResetPasswordComponent, diff --git a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html index b932025c3d..decf6a54b6 100644 --- a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html @@ -1,6 +1,6 @@
- + diff --git a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.ts b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.ts index 245d1c4c25..b436d23e95 100644 --- a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.ts @@ -1,8 +1,9 @@ import { ConfigStateService, MultiTenancyService, SubscriptionService } from '@abp/ng.core'; -import { Component } from '@angular/core'; +import { Component, Injector } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { eAccountComponents } from '../../enums/components'; +import { ActivatedRoute } from '@angular/router'; @Component({ selector: 'abp-auth-wrapper', @@ -20,9 +21,24 @@ export class AuthWrapperComponent { } tenantBoxKey = eAccountComponents.TenantBox; + route: ActivatedRoute; + + private _tenantBoxVisible = true; + + private setTenantBoxVisibility = () => { + this._tenantBoxVisible = this.route.snapshot.firstChild.data.tenantBoxVisible ?? true; + }; + + get isTenantBoxVisible() { + return this._tenantBoxVisible && this.multiTenancy.isTenantBoxVisible; + } constructor( public readonly multiTenancy: MultiTenancyService, private configState: ConfigStateService, - ) {} + injector: Injector, + ) { + this.route = injector.get(ActivatedRoute); + this.setTenantBoxVisibility(); + } } diff --git a/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts b/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts index 5e311e7b83..b84c6db3a3 100644 --- a/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts @@ -18,6 +18,7 @@ export class ResetPasswordComponent implements OnInit { inProgress = false; isPasswordReset = false; + tenantId = ''; mapErrorsFn: Validation.MapErrorsFn = (errors, groupErrors, control) => { if (PASSWORD_FIELDS.indexOf(String(control.name)) < 0) return errors; @@ -34,7 +35,8 @@ export class ResetPasswordComponent implements OnInit { ) {} ngOnInit(): void { - this.route.queryParams.subscribe(({ userId, resetToken }) => { + this.route.queryParams.subscribe(({ userId, resetToken, tenantId }) => { + this.tenantId = tenantId; if (!userId || !resetToken) this.router.navigateByUrl('/account/login'); this.form = this.fb.group( @@ -61,6 +63,7 @@ export class ResetPasswordComponent implements OnInit { userId: this.form.get('userId').value, resetToken: this.form.get('resetToken').value, password: this.form.get('password').value, + tenantId: this.tenantId || undefined, // if this.tenantId is empty, we should not send it at all }) .pipe(finalize(() => (this.inProgress = false))) .subscribe(() => { diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/index.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/index.ts index 7fee3af727..ea0f7df7a4 100644 --- a/npm/ng-packs/packages/account/src/lib/proxy/account/index.ts +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/index.ts @@ -1,2 +1,4 @@ +import * as Web from './web'; export * from './account.service'; export * from './models'; +export { Web }; diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/models.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/models.ts index e15c8fed1b..0c4fe0c03d 100644 --- a/npm/ng-packs/packages/account/src/lib/proxy/account/models.ts +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/models.ts @@ -1,5 +1,6 @@ +import type { ExtensibleObject } from '@abp/ng.core'; -export interface RegisterDto { +export interface RegisterDto extends ExtensibleObject { userName: string; emailAddress: string; password: string; @@ -8,6 +9,7 @@ export interface RegisterDto { export interface ResetPasswordDto { userId?: string; + tenantId?: string; resetToken: string; password: string; } diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts new file mode 100644 index 0000000000..8adf5385b0 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/account.service.ts @@ -0,0 +1,35 @@ +import type { AbpLoginResult, UserLoginInfo } from './models/models'; +import { RestService } from '@abp/ng.core'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class AccountService { + apiName = 'AbpAccount'; + + checkPasswordByLogin = (login: UserLoginInfo) => + this.restService.request({ + method: 'POST', + url: '/api/account/check-password', + body: login, + }, + { apiName: this.apiName }); + + loginByLogin = (login: UserLoginInfo) => + this.restService.request({ + method: 'POST', + url: '/api/account/login', + body: login, + }, + { apiName: this.apiName }); + + logout = () => + this.restService.request({ + method: 'GET', + url: '/api/account/logout', + }, + { apiName: this.apiName }); + + constructor(private restService: RestService) {} +} diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/index.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/index.ts new file mode 100644 index 0000000000..ac69fdf004 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/index.ts @@ -0,0 +1,3 @@ +import * as Models from './models'; +export * from './account.service'; +export { Models }; diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/index.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/index.ts new file mode 100644 index 0000000000..f44aa5efd0 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/index.ts @@ -0,0 +1,2 @@ +export * from './login-result-type.enum'; +export * from './models'; diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/login-result-type.enum.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/login-result-type.enum.ts new file mode 100644 index 0000000000..4aa00aa202 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/login-result-type.enum.ts @@ -0,0 +1,11 @@ +import { mapEnumToOptions } from '@abp/ng.core'; + +export enum LoginResultType { + Success = 1, + InvalidUserNameOrPassword = 2, + NotAllowed = 3, + LockedOut = 4, + RequiresTwoFactor = 5, +} + +export const loginResultTypeOptions = mapEnumToOptions(LoginResultType); diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/models.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/models.ts new file mode 100644 index 0000000000..1736180035 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/controllers/models/models.ts @@ -0,0 +1,12 @@ +import type { LoginResultType } from './login-result-type.enum'; + +export interface AbpLoginResult { + result: LoginResultType; + description?: string; +} + +export interface UserLoginInfo { + userNameOrEmailAddress: string; + password: string; + rememberMe: boolean; +} diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/index.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/index.ts new file mode 100644 index 0000000000..0c9a059984 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/account/index.ts @@ -0,0 +1,2 @@ +import * as Controllers from './controllers'; +export { Controllers }; diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/index.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/index.ts new file mode 100644 index 0000000000..065774a205 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/web/areas/index.ts @@ -0,0 +1,2 @@ +import * as Account from './account'; +export { Account }; diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/web/index.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/web/index.ts new file mode 100644 index 0000000000..f77d33c351 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/web/index.ts @@ -0,0 +1,2 @@ +import * as Areas from './areas'; +export { Areas }; diff --git a/npm/ng-packs/packages/account/src/lib/proxy/generate-proxy.json b/npm/ng-packs/packages/account/src/lib/proxy/generate-proxy.json index bd8251f5fd..f9703aad8a 100644 --- a/npm/ng-packs/packages/account/src/lib/proxy/generate-proxy.json +++ b/npm/ng-packs/packages/account/src/lib/proxy/generate-proxy.json @@ -3,36 +3,28 @@ "account" ], "modules": { - "permissionManagement": { - "rootPath": "permissionManagement", - "remoteServiceName": "AbpPermissionManagement", + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", "controllers": { - "Volo.Abp.PermissionManagement.PermissionsController": { - "controllerName": "Permissions", - "type": "Volo.Abp.PermissionManagement.PermissionsController", + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", "interfaces": [ { - "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" } ], "actions": { - "GetAsyncByProviderNameAndProviderKey": { - "uniqueName": "GetAsyncByProviderNameAndProviderKey", - "name": "GetAsync", + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", "httpMethod": "GET", - "url": "api/permission-management/permissions", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", + "name": "name", "typeAsString": "System.String, System.Private.CoreLib", "type": "System.String", "typeSimple": "string", @@ -42,246 +34,127 @@ ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "providerKey", - "name": "providerKey", + "nameOnMethod": "name", + "name": "name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", - "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" - } + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + }, + "allowAnonymous": null }, - "UpdateAsyncByProviderNameAndProviderKeyAndInput": { - "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/permission-management/permissions", + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", - "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", - "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", - "isOptional": false, - "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "providerKey", - "name": "providerKey", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", - "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + }, + "allowAnonymous": null } } - } - } - }, - "featureManagement": { - "rootPath": "featureManagement", - "remoteServiceName": "AbpFeatureManagement", - "controllers": { - "Volo.Abp.FeatureManagement.FeaturesController": { - "controllerName": "Features", - "type": "Volo.Abp.FeatureManagement.FeaturesController", + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", "interfaces": [ { - "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" } ], "actions": { - "GetAsyncByProviderNameAndProviderKey": { - "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "GetAsync": { + "uniqueName": "GetAsync", "name": "GetAsync", "httpMethod": "GET", - "url": "api/feature-management/features", + "url": "api/abp/application-configuration", "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "providerName", - "name": "providerName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "providerKey", - "name": "providerKey", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - } - ], + "parametersOnMethod": [], + "parameters": [], "returnValue": { - "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", - "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" - } - }, - "UpdateAsyncByProviderNameAndProviderKeyAndInput": { - "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/feature-management/features", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + }, + "allowAnonymous": null + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", "supportedVersions": [], "parametersOnMethod": [ { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", - "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", - "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "providerKey", - "name": "providerKey", - "type": "System.String", - "typeSimple": "string", + "nameOnMethod": "model", + "name": "IncludeTypes", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", - "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "descriptorName": "model" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + }, + "allowAnonymous": null } } } @@ -320,6 +193,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -332,7 +206,8 @@ "returnValue": { "type": "Volo.Abp.TenantManagement.TenantDto", "typeSimple": "Volo.Abp.TenantManagement.TenantDto" - } + }, + "allowAnonymous": null }, "GetListAsyncByInput": { "uniqueName": "GetListAsyncByInput", @@ -354,6 +229,7 @@ { "nameOnMethod": "input", "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -365,6 +241,7 @@ { "nameOnMethod": "input", "name": "Sorting", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -376,6 +253,7 @@ { "nameOnMethod": "input", "name": "SkipCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isOptional": false, @@ -387,6 +265,7 @@ { "nameOnMethod": "input", "name": "MaxResultCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isOptional": false, @@ -399,7 +278,8 @@ "returnValue": { "type": "Volo.Abp.Application.Dtos.PagedResultDto", "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } + }, + "allowAnonymous": null }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", @@ -421,6 +301,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.TenantManagement.TenantCreateDto", "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", "isOptional": false, @@ -433,7 +314,8 @@ "returnValue": { "type": "Volo.Abp.TenantManagement.TenantDto", "typeSimple": "Volo.Abp.TenantManagement.TenantDto" - } + }, + "allowAnonymous": null }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", @@ -463,6 +345,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -474,6 +357,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.TenantManagement.TenantUpdateDto", "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", "isOptional": false, @@ -486,7 +370,8 @@ "returnValue": { "type": "Volo.Abp.TenantManagement.TenantDto", "typeSimple": "Volo.Abp.TenantManagement.TenantDto" - } + }, + "allowAnonymous": null }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", @@ -508,6 +393,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -520,7 +406,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null }, "GetDefaultConnectionStringAsyncById": { "uniqueName": "GetDefaultConnectionStringAsyncById", @@ -542,6 +429,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -554,7 +442,8 @@ "returnValue": { "type": "System.String", "typeSimple": "string" - } + }, + "allowAnonymous": null }, "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", @@ -584,6 +473,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -595,6 +485,7 @@ { "nameOnMethod": "defaultConnectionString", "name": "defaultConnectionString", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -607,7 +498,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null }, "DeleteDefaultConnectionStringAsyncById": { "uniqueName": "DeleteDefaultConnectionStringAsyncById", @@ -629,6 +521,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -641,7 +534,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null } } } @@ -664,20 +558,21 @@ "uniqueName": "GetAsync", "name": "GetAsync", "httpMethod": "GET", - "url": "api/settingManagement/emailSettings", + "url": "api/setting-management/emailing", "supportedVersions": [], "parametersOnMethod": [], "parameters": [], "returnValue": { "type": "Volo.Abp.SettingManagement.EmailSettingsDto", "typeSimple": "Volo.Abp.SettingManagement.EmailSettingsDto" - } + }, + "allowAnonymous": null }, "UpdateAsyncByInput": { "uniqueName": "UpdateAsyncByInput", "name": "UpdateAsync", "httpMethod": "POST", - "url": "api/settingManagement/emailSettings", + "url": "api/setting-management/emailing", "supportedVersions": [], "parametersOnMethod": [ { @@ -693,6 +588,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", "isOptional": false, @@ -705,7 +601,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null } } } @@ -740,6 +637,7 @@ { "nameOnMethod": "login", "name": "login", + "jsonName": null, "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", "isOptional": false, @@ -752,7 +650,8 @@ "returnValue": { "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" - } + }, + "allowAnonymous": null }, "Logout": { "uniqueName": "Logout", @@ -765,7 +664,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null }, "CheckPasswordByLogin": { "uniqueName": "CheckPasswordByLogin", @@ -787,6 +687,7 @@ { "nameOnMethod": "login", "name": "login", + "jsonName": null, "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo", "isOptional": false, @@ -799,7 +700,8 @@ "returnValue": { "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult" - } + }, + "allowAnonymous": null } } }, @@ -832,6 +734,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Account.RegisterDto", "typeSimple": "Volo.Abp.Account.RegisterDto", "isOptional": false, @@ -844,7 +747,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityUserDto", "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } + }, + "allowAnonymous": null }, "SendPasswordResetCodeAsyncByInput": { "uniqueName": "SendPasswordResetCodeAsyncByInput", @@ -866,6 +770,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Account.SendPasswordResetCodeDto", "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", "isOptional": false, @@ -878,7 +783,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null }, "ResetPasswordAsyncByInput": { "uniqueName": "ResetPasswordAsyncByInput", @@ -900,6 +806,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Account.ResetPasswordDto", "typeSimple": "Volo.Abp.Account.ResetPasswordDto", "isOptional": false, @@ -912,7 +819,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null } } } @@ -942,7 +850,8 @@ "returnValue": { "type": "Volo.Abp.Application.Dtos.ListResultDto", "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } + }, + "allowAnonymous": null }, "GetListAsyncByInput": { "uniqueName": "GetListAsyncByInput", @@ -964,6 +873,7 @@ { "nameOnMethod": "input", "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -975,6 +885,7 @@ { "nameOnMethod": "input", "name": "Sorting", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -986,6 +897,7 @@ { "nameOnMethod": "input", "name": "SkipCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isOptional": false, @@ -997,6 +909,7 @@ { "nameOnMethod": "input", "name": "MaxResultCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isOptional": false, @@ -1009,7 +922,8 @@ "returnValue": { "type": "Volo.Abp.Application.Dtos.PagedResultDto", "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } + }, + "allowAnonymous": null }, "GetAsyncById": { "uniqueName": "GetAsyncById", @@ -1031,6 +945,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1043,7 +958,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityRoleDto", "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" - } + }, + "allowAnonymous": null }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", @@ -1065,6 +981,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Identity.IdentityRoleCreateDto", "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", "isOptional": false, @@ -1077,7 +994,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityRoleDto", "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" - } + }, + "allowAnonymous": null }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", @@ -1107,6 +1025,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1118,6 +1037,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", "isOptional": false, @@ -1130,7 +1050,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityRoleDto", "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" - } + }, + "allowAnonymous": null }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", @@ -1152,6 +1073,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1164,7 +1086,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null } } }, @@ -1197,6 +1120,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1209,7 +1133,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityUserDto", "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } + }, + "allowAnonymous": null }, "GetListAsyncByInput": { "uniqueName": "GetListAsyncByInput", @@ -1231,6 +1156,7 @@ { "nameOnMethod": "input", "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1242,6 +1168,7 @@ { "nameOnMethod": "input", "name": "Sorting", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1253,6 +1180,7 @@ { "nameOnMethod": "input", "name": "SkipCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isOptional": false, @@ -1264,6 +1192,7 @@ { "nameOnMethod": "input", "name": "MaxResultCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isOptional": false, @@ -1276,7 +1205,8 @@ "returnValue": { "type": "Volo.Abp.Application.Dtos.PagedResultDto", "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } + }, + "allowAnonymous": null }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", @@ -1298,6 +1228,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Identity.IdentityUserCreateDto", "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", "isOptional": false, @@ -1310,7 +1241,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityUserDto", "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } + }, + "allowAnonymous": null }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", @@ -1340,6 +1272,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1351,6 +1284,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Identity.IdentityUserUpdateDto", "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", "isOptional": false, @@ -1363,7 +1297,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityUserDto", "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } + }, + "allowAnonymous": null }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", @@ -1385,6 +1320,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1397,7 +1333,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null }, "GetRolesAsyncById": { "uniqueName": "GetRolesAsyncById", @@ -1419,6 +1356,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1431,7 +1369,8 @@ "returnValue": { "type": "Volo.Abp.Application.Dtos.ListResultDto", "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } + }, + "allowAnonymous": null }, "GetAssignableRolesAsync": { "uniqueName": "GetAssignableRolesAsync", @@ -1444,7 +1383,8 @@ "returnValue": { "type": "Volo.Abp.Application.Dtos.ListResultDto", "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } + }, + "allowAnonymous": null }, "UpdateRolesAsyncByIdAndInput": { "uniqueName": "UpdateRolesAsyncByIdAndInput", @@ -1474,6 +1414,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1485,6 +1426,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", "isOptional": false, @@ -1497,7 +1439,8 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null }, "FindByUsernameAsyncByUserName": { "uniqueName": "FindByUsernameAsyncByUserName", @@ -1519,6 +1462,7 @@ { "nameOnMethod": "userName", "name": "userName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1531,7 +1475,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityUserDto", "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } + }, + "allowAnonymous": null }, "FindByEmailAsyncByEmail": { "uniqueName": "FindByEmailAsyncByEmail", @@ -1553,6 +1498,7 @@ { "nameOnMethod": "email", "name": "email", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1565,7 +1511,8 @@ "returnValue": { "type": "Volo.Abp.Identity.IdentityUserDto", "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } + }, + "allowAnonymous": null } } }, @@ -1598,6 +1545,7 @@ { "nameOnMethod": "id", "name": "id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -1610,7 +1558,8 @@ "returnValue": { "type": "Volo.Abp.Users.UserData", "typeSimple": "Volo.Abp.Users.UserData" - } + }, + "allowAnonymous": null }, "FindByUserNameAsyncByUserName": { "uniqueName": "FindByUserNameAsyncByUserName", @@ -1632,6 +1581,7 @@ { "nameOnMethod": "userName", "name": "userName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1644,7 +1594,8 @@ "returnValue": { "type": "Volo.Abp.Users.UserData", "typeSimple": "Volo.Abp.Users.UserData" - } + }, + "allowAnonymous": null }, "SearchAsyncByInput": { "uniqueName": "SearchAsyncByInput", @@ -1666,6 +1617,7 @@ { "nameOnMethod": "input", "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1677,6 +1629,7 @@ { "nameOnMethod": "input", "name": "Sorting", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1688,6 +1641,7 @@ { "nameOnMethod": "input", "name": "SkipCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isOptional": false, @@ -1699,6 +1653,7 @@ { "nameOnMethod": "input", "name": "MaxResultCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isOptional": false, @@ -1711,7 +1666,8 @@ "returnValue": { "type": "Volo.Abp.Application.Dtos.ListResultDto", "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } + }, + "allowAnonymous": null }, "GetCountAsyncByInput": { "uniqueName": "GetCountAsyncByInput", @@ -1733,6 +1689,7 @@ { "nameOnMethod": "input", "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1745,7 +1702,8 @@ "returnValue": { "type": "System.Int64", "typeSimple": "number" - } + }, + "allowAnonymous": null } } }, @@ -1769,7 +1727,8 @@ "returnValue": { "type": "Volo.Abp.Identity.ProfileDto", "typeSimple": "Volo.Abp.Identity.ProfileDto" - } + }, + "allowAnonymous": null }, "UpdateAsyncByInput": { "uniqueName": "UpdateAsyncByInput", @@ -1791,6 +1750,7 @@ { "nameOnMethod": "input", "name": "input", + "jsonName": null, "type": "Volo.Abp.Identity.UpdateProfileDto", "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", "isOptional": false, @@ -1803,7 +1763,8 @@ "returnValue": { "type": "Volo.Abp.Identity.ProfileDto", "typeSimple": "Volo.Abp.Identity.ProfileDto" - } + }, + "allowAnonymous": null }, "ChangePasswordAsyncByInput": { "uniqueName": "ChangePasswordAsyncByInput", @@ -1825,8 +1786,158 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Identity.ChangePasswordInput", - "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "jsonName": null, + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -1837,34 +1948,43 @@ "returnValue": { "type": "System.Void", "typeSimple": "System.Void" - } + }, + "allowAnonymous": null } } } } }, - "abp": { - "rootPath": "abp", - "remoteServiceName": "abp", + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", "controllers": { - "Pages.Abp.MultiTenancy.AbpTenantController": { - "controllerName": "AbpTenant", - "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", "interfaces": [ { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" } ], "actions": { - "FindTenantByNameAsyncByName": { - "uniqueName": "FindTenantByNameAsyncByName", - "name": "FindTenantByNameAsync", + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", "httpMethod": "GET", - "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "url": "api/feature-management/features", "supportedVersions": [], "parametersOnMethod": [ { - "name": "name", + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", "typeAsString": "System.String, System.Private.CoreLib", "type": "System.String", "typeSimple": "string", @@ -1874,120 +1994,111 @@ ], "parameters": [ { - "nameOnMethod": "name", - "name": "name", + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" - } + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + }, + "allowAnonymous": null }, - "FindTenantByIdAsyncById": { - "uniqueName": "FindTenantByIdAsyncById", - "name": "FindTenantByIdAsync", - "httpMethod": "GET", - "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null - } - ], - "parameters": [ + }, { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" - } - } - } - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { - "controllerName": "AbpApplicationConfiguration", - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", - "interfaces": [ - { - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" - } - ], - "actions": { - "GetAsync": { - "uniqueName": "GetAsync", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/abp/application-configuration", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" - } - } - } - }, - "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { - "controllerName": "AbpApiDefinition", - "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", - "interfaces": [], - "actions": { - "GetByModel": { - "uniqueName": "GetByModel", - "name": "Get", - "httpMethod": "GET", - "url": "api/abp/api-definition", - "supportedVersions": [], - "parametersOnMethod": [ + "defaultValue": null + }, { - "name": "model", - "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", - "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", - "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "model", - "name": "IncludeTypes", - "type": "System.Boolean", - "typeSimple": "boolean", + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "model" + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", - "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" - } + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null } } } @@ -2004,18 +2115,21 @@ "properties": [ { "name": "UserNameOrEmailAddress", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "Password", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "RememberMe", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -2031,12 +2145,14 @@ "properties": [ { "name": "Result", + "jsonName": null, "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", "isRequired": false }, { "name": "Description", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2064,7 +2180,7 @@ "properties": null }, "Volo.Abp.Account.RegisterDto": { - "baseType": null, + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", "isEnum": false, "enumNames": null, "enumValues": null, @@ -2072,30 +2188,50 @@ "properties": [ { "name": "UserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "EmailAddress", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "Password", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "AppName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true } ] }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false + } + ] + }, "Volo.Abp.Identity.IdentityUserDto": { "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", "isEnum": false, @@ -2105,66 +2241,77 @@ "properties": [ { "name": "TenantId", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false }, { "name": "UserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Surname", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Email", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "EmailConfirmed", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "PhoneNumber", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "PhoneNumberConfirmed", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "LockoutEnabled", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "LockoutEnd", + "jsonName": null, "type": "System.DateTimeOffset?", "typeSimple": "string?", "isRequired": false }, { "name": "ConcurrencyStamp", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2182,18 +2329,21 @@ "properties": [ { "name": "IsDeleted", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "DeleterId", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false }, { "name": "DeletionTime", + "jsonName": null, "type": "System.DateTime?", "typeSimple": "string?", "isRequired": false @@ -2211,12 +2361,14 @@ "properties": [ { "name": "LastModificationTime", + "jsonName": null, "type": "System.DateTime?", "typeSimple": "string?", "isRequired": false }, { "name": "LastModifierId", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false @@ -2234,12 +2386,14 @@ "properties": [ { "name": "CreationTime", + "jsonName": null, "type": "System.DateTime", "typeSimple": "string", "isRequired": false }, { "name": "CreatorId", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false @@ -2257,27 +2411,13 @@ "properties": [ { "name": "Id", + "jsonName": null, "type": "TKey", "typeSimple": "TKey", "isRequired": false } ] }, - "Volo.Abp.ObjectExtending.ExtensibleObject": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "ExtraProperties", - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false - } - ] - }, "Volo.Abp.Account.SendPasswordResetCodeDto": { "baseType": null, "isEnum": false, @@ -2287,24 +2427,28 @@ "properties": [ { "name": "Email", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "AppName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "ReturnUrl", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ReturnUrlHash", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2320,18 +2464,28 @@ "properties": [ { "name": "UserId", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isRequired": false }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, { "name": "ResetToken", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "Password", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true @@ -2347,21 +2501,31 @@ "properties": [ { "name": "Success", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "TenantId", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false + }, + { + "name": "IsActive", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false } ] }, @@ -2376,6 +2540,7 @@ "properties": [ { "name": "Items", + "jsonName": null, "type": "[T]", "typeSimple": "[T]", "isRequired": false @@ -2391,30 +2556,35 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsDefault", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "IsStatic", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "IsPublic", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "ConcurrencyStamp", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2430,6 +2600,7 @@ "properties": [ { "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2445,6 +2616,7 @@ "properties": [ { "name": "Sorting", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2460,6 +2632,7 @@ "properties": [ { "name": "SkipCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isRequired": false @@ -2475,18 +2648,21 @@ "properties": [ { "name": "DefaultMaxResultCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isRequired": false }, { "name": "MaxMaxResultCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isRequired": false }, { "name": "MaxResultCount", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isRequired": false @@ -2504,6 +2680,7 @@ "properties": [ { "name": "TotalCount", + "jsonName": null, "type": "System.Int64", "typeSimple": "number", "isRequired": false @@ -2527,18 +2704,21 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "IsDefault", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "IsPublic", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -2554,6 +2734,7 @@ "properties": [ { "name": "ConcurrencyStamp", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2569,6 +2750,7 @@ "properties": [ { "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2584,6 +2766,7 @@ "properties": [ { "name": "Password", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true @@ -2599,42 +2782,49 @@ "properties": [ { "name": "UserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Surname", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Email", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "PhoneNumber", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "LockoutEnabled", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "RoleNames", + "jsonName": null, "type": "[System.String]", "typeSimple": "[string]", "isRequired": false @@ -2650,12 +2840,14 @@ "properties": [ { "name": "Password", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ConcurrencyStamp", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2671,6 +2863,7 @@ "properties": [ { "name": "RoleNames", + "jsonName": null, "type": "[System.String]", "typeSimple": "[string]", "isRequired": true @@ -2686,54 +2879,63 @@ "properties": [ { "name": "Id", + "jsonName": null, "type": "System.Guid", "typeSimple": "string", "isRequired": false }, { "name": "TenantId", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false }, { "name": "UserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Surname", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Email", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "EmailConfirmed", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "PhoneNumber", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "PhoneNumberConfirmed", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -2749,6 +2951,7 @@ "properties": [ { "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2764,6 +2967,7 @@ "properties": [ { "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2779,42 +2983,49 @@ "properties": [ { "name": "UserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Email", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Surname", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "PhoneNumber", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsExternal", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "HasPassword", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -2830,30 +3041,35 @@ "properties": [ { "name": "UserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Email", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Surname", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "PhoneNumber", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -2869,12 +3085,14 @@ "properties": [ { "name": "CurrentPassword", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "NewPassword", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true @@ -2890,12 +3108,14 @@ "properties": [ { "name": "EntityDisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Groups", + "jsonName": null, "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", "isRequired": false @@ -2911,18 +3131,21 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Permissions", + "jsonName": null, "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", "isRequired": false @@ -2938,36 +3161,42 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ParentName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsGranted", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "AllowedProviders", + "jsonName": null, "type": "[System.String]", "typeSimple": "[string]", "isRequired": false }, { "name": "GrantedProviders", + "jsonName": null, "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", "isRequired": false @@ -2983,12 +3212,14 @@ "properties": [ { "name": "ProviderName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ProviderKey", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3004,6 +3235,7 @@ "properties": [ { "name": "Permissions", + "jsonName": null, "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", "isRequired": false @@ -3019,12 +3251,14 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsGranted", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -3040,54 +3274,63 @@ "properties": [ { "name": "SmtpHost", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SmtpPort", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isRequired": false }, { "name": "SmtpUserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SmtpPassword", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SmtpDomain", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SmtpEnableSsl", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "SmtpUseDefaultCredentials", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "DefaultFromAddress", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DefaultFromDisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3103,54 +3346,63 @@ "properties": [ { "name": "SmtpHost", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SmtpPort", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isRequired": false }, { "name": "SmtpUserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SmtpPassword", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SmtpDomain", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SmtpEnableSsl", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "SmtpUseDefaultCredentials", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "DefaultFromAddress", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "DefaultFromDisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true @@ -3166,6 +3418,7 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3181,6 +3434,7 @@ "properties": [ { "name": "Filter", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3196,12 +3450,14 @@ "properties": [ { "name": "AdminEmailAddress", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true }, { "name": "AdminPassword", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true @@ -3217,6 +3473,7 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": true @@ -3240,6 +3497,7 @@ "properties": [ { "name": "Groups", + "jsonName": null, "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", "isRequired": false @@ -3255,18 +3513,21 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Features", + "jsonName": null, "type": "[Volo.Abp.FeatureManagement.FeatureDto]", "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]", "isRequired": false @@ -3282,48 +3543,56 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Value", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Provider", + "jsonName": null, "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto", "isRequired": false }, { "name": "Description", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ValueType", + "jsonName": null, "type": "Volo.Abp.Validation.StringValues.IStringValueType", "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType", "isRequired": false }, { "name": "Depth", + "jsonName": null, "type": "System.Int32", "typeSimple": "number", "isRequired": false }, { "name": "ParentName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3339,12 +3608,14 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Key", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3360,24 +3631,28 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Item", + "jsonName": null, "type": "System.Object", "typeSimple": "object", "isRequired": false }, { "name": "Properties", + "jsonName": null, "type": "{System.String:System.Object}", "typeSimple": "{string:object}", "isRequired": false }, { "name": "Validator", + "jsonName": null, "type": "Volo.Abp.Validation.StringValues.IValueValidator", "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator", "isRequired": false @@ -3393,18 +3668,21 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Item", + "jsonName": null, "type": "System.Object", "typeSimple": "object", "isRequired": false }, { "name": "Properties", + "jsonName": null, "type": "{System.String:System.Object}", "typeSimple": "{string:object}", "isRequired": false @@ -3420,6 +3698,7 @@ "properties": [ { "name": "Features", + "jsonName": null, "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", "isRequired": false @@ -3435,12 +3714,14 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Value", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3456,60 +3737,70 @@ "properties": [ { "name": "Localization", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", "isRequired": false }, { "name": "Auth", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", "isRequired": false }, { "name": "Setting", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", "isRequired": false }, { "name": "CurrentUser", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", "isRequired": false }, { "name": "Features", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", "isRequired": false }, { "name": "MultiTenancy", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", "isRequired": false }, { "name": "CurrentTenant", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", "isRequired": false }, { "name": "Timing", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", "isRequired": false }, { "name": "Clock", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", "isRequired": false }, { "name": "ObjectExtensions", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", "isRequired": false @@ -3525,36 +3816,42 @@ "properties": [ { "name": "Values", + "jsonName": null, "type": "{System.String:System.Collections.Generic.Dictionary}", "typeSimple": "{string:System.Collections.Generic.Dictionary}", "isRequired": false }, { "name": "Languages", + "jsonName": null, "type": "[Volo.Abp.Localization.LanguageInfo]", "typeSimple": "[Volo.Abp.Localization.LanguageInfo]", "isRequired": false }, { "name": "CurrentCulture", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", "isRequired": false }, { "name": "DefaultResourceName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "LanguagesMap", + "jsonName": null, "type": "{System.String:[Volo.Abp.NameValue]}", "typeSimple": "{string:[Volo.Abp.NameValue]}", "isRequired": false }, { "name": "LanguageFilesMap", + "jsonName": null, "type": "{System.String:[Volo.Abp.NameValue]}", "typeSimple": "{string:[Volo.Abp.NameValue]}", "isRequired": false @@ -3570,24 +3867,28 @@ "properties": [ { "name": "CultureName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "UiCultureName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "FlagIcon", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3603,54 +3904,63 @@ "properties": [ { "name": "DisplayName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "EnglishName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ThreeLetterIsoLanguageName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "TwoLetterIsoLanguageName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsRightToLeft", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "CultureName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "NativeName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DateTimeFormat", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", "isRequired": false @@ -3666,42 +3976,49 @@ "properties": [ { "name": "CalendarAlgorithmType", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DateTimeFormatLong", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ShortDatePattern", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "FullDateTimePattern", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DateSeparator", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ShortTimePattern", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "LongTimePattern", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3727,12 +4044,14 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Value", + "jsonName": null, "type": "T", "typeSimple": "T", "isRequired": false @@ -3748,12 +4067,14 @@ "properties": [ { "name": "Policies", + "jsonName": null, "type": "{System.String:System.Boolean}", "typeSimple": "{string:boolean}", "isRequired": false }, { "name": "GrantedPolicies", + "jsonName": null, "type": "{System.String:System.Boolean}", "typeSimple": "{string:boolean}", "isRequired": false @@ -3769,6 +4090,7 @@ "properties": [ { "name": "Values", + "jsonName": null, "type": "{System.String:System.String}", "typeSimple": "{string:string}", "isRequired": false @@ -3784,66 +4106,77 @@ "properties": [ { "name": "IsAuthenticated", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "Id", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false }, { "name": "TenantId", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false }, { "name": "UserName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SurName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Email", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "EmailVerified", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "PhoneNumber", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "PhoneNumberVerified", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "Roles", + "jsonName": null, "type": "[System.String]", "typeSimple": "[string]", "isRequired": false @@ -3859,6 +4192,7 @@ "properties": [ { "name": "Values", + "jsonName": null, "type": "{System.String:System.String}", "typeSimple": "{string:string}", "isRequired": false @@ -3874,6 +4208,7 @@ "properties": [ { "name": "IsEnabled", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -3889,18 +4224,21 @@ "properties": [ { "name": "Id", + "jsonName": null, "type": "System.Guid?", "typeSimple": "string?", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsAvailable", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -3916,6 +4254,7 @@ "properties": [ { "name": "TimeZone", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", "isRequired": false @@ -3931,12 +4270,14 @@ "properties": [ { "name": "Iana", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", "isRequired": false }, { "name": "Windows", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", "isRequired": false @@ -3952,6 +4293,7 @@ "properties": [ { "name": "TimeZoneName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3967,6 +4309,7 @@ "properties": [ { "name": "TimeZoneId", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3982,6 +4325,7 @@ "properties": [ { "name": "Kind", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -3997,12 +4341,14 @@ "properties": [ { "name": "Modules", + "jsonName": null, "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", "isRequired": false }, { "name": "Enums", + "jsonName": null, "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", "isRequired": false @@ -4018,12 +4364,14 @@ "properties": [ { "name": "Entities", + "jsonName": null, "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", "isRequired": false }, { "name": "Configuration", + "jsonName": null, "type": "{System.String:System.Object}", "typeSimple": "{string:object}", "isRequired": false @@ -4039,12 +4387,14 @@ "properties": [ { "name": "Properties", + "jsonName": null, "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", "isRequired": false }, { "name": "Configuration", + "jsonName": null, "type": "{System.String:System.Object}", "typeSimple": "{string:object}", "isRequired": false @@ -4060,48 +4410,56 @@ "properties": [ { "name": "Type", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "TypeSimple", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DisplayName", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", "isRequired": false }, { "name": "Api", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", "isRequired": false }, { "name": "Ui", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", "isRequired": false }, { "name": "Attributes", + "jsonName": null, "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", "isRequired": false }, { "name": "Configuration", + "jsonName": null, "type": "{System.String:System.Object}", "typeSimple": "{string:object}", "isRequired": false }, { "name": "DefaultValue", + "jsonName": null, "type": "System.Object", "typeSimple": "object", "isRequired": false @@ -4117,12 +4475,14 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Resource", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -4138,18 +4498,21 @@ "properties": [ { "name": "OnGet", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", "isRequired": false }, { "name": "OnCreate", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", "isRequired": false }, { "name": "OnUpdate", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", "isRequired": false @@ -4165,6 +4528,7 @@ "properties": [ { "name": "IsAvailable", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -4180,6 +4544,7 @@ "properties": [ { "name": "IsAvailable", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -4195,6 +4560,7 @@ "properties": [ { "name": "IsAvailable", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -4210,24 +4576,28 @@ "properties": [ { "name": "OnTable", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", "isRequired": false }, { "name": "OnCreateForm", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", "isRequired": false }, { "name": "OnEditForm", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", "isRequired": false }, { "name": "Lookup", + "jsonName": null, "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", "isRequired": false @@ -4243,6 +4613,7 @@ "properties": [ { "name": "IsVisible", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -4258,6 +4629,7 @@ "properties": [ { "name": "IsVisible", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -4273,30 +4645,35 @@ "properties": [ { "name": "Url", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ResultListPropertyName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DisplayPropertyName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "ValuePropertyName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "FilterParamName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -4312,12 +4689,14 @@ "properties": [ { "name": "TypeSimple", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Config", + "jsonName": null, "type": "{System.String:System.Object}", "typeSimple": "{string:object}", "isRequired": false @@ -4333,12 +4712,14 @@ "properties": [ { "name": "Fields", + "jsonName": null, "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", "isRequired": false }, { "name": "LocalizationResource", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -4354,12 +4735,14 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Value", + "jsonName": null, "type": "System.Object", "typeSimple": "object", "isRequired": false @@ -4375,6 +4758,7 @@ "properties": [ { "name": "IncludeTypes", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false @@ -4390,12 +4774,14 @@ "properties": [ { "name": "Modules", + "jsonName": null, "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", "isRequired": false }, { "name": "Types", + "jsonName": null, "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", "isRequired": false @@ -4411,18 +4797,21 @@ "properties": [ { "name": "RootPath", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "RemoteServiceName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Controllers", + "jsonName": null, "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", "isRequired": false @@ -4438,24 +4827,28 @@ "properties": [ { "name": "ControllerName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Type", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Interfaces", + "jsonName": null, "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", "isRequired": false }, { "name": "Actions", + "jsonName": null, "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", "isRequired": false @@ -4471,6 +4864,7 @@ "properties": [ { "name": "Type", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -4486,51 +4880,66 @@ "properties": [ { "name": "UniqueName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "HttpMethod", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Url", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "SupportedVersions", + "jsonName": null, "type": "[System.String]", "typeSimple": "[string]", "isRequired": false }, { "name": "ParametersOnMethod", + "jsonName": null, "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", "isRequired": false }, { "name": "Parameters", + "jsonName": null, "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", "isRequired": false }, { "name": "ReturnValue", + "jsonName": null, "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", "isRequired": false + }, + { + "name": "AllowAnonymous", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isRequired": false } ] }, @@ -4543,36 +4952,42 @@ "properties": [ { "name": "Name", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "TypeAsString", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Type", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "TypeSimple", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsOptional", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "DefaultValue", + "jsonName": null, "type": "System.Object", "typeSimple": "object", "isRequired": false @@ -4588,54 +5003,70 @@ "properties": [ { "name": "NameOnMethod", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "JsonName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Type", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "TypeSimple", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsOptional", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "DefaultValue", + "jsonName": null, "type": "System.Object", "typeSimple": "object", "isRequired": false }, { "name": "ConstraintTypes", + "jsonName": null, "type": "[System.String]", "typeSimple": "[string]", "isRequired": false }, { "name": "BindingSourceId", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "DescriptorName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -4651,12 +5082,14 @@ "properties": [ { "name": "Type", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "TypeSimple", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false @@ -4672,36 +5105,42 @@ "properties": [ { "name": "BaseType", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsEnum", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false }, { "name": "EnumNames", + "jsonName": null, "type": "[System.String]", "typeSimple": "[string]", "isRequired": false }, { "name": "EnumValues", + "jsonName": null, "type": "[System.Object]", "typeSimple": "[object]", "isRequired": false }, { "name": "GenericArguments", + "jsonName": null, "type": "[System.String]", "typeSimple": "[string]", "isRequired": false }, { "name": "Properties", + "jsonName": null, "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", "isRequired": false @@ -4717,24 +5156,35 @@ "properties": [ { "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false + }, + { + "name": "JsonName", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "Type", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "TypeSimple", + "jsonName": null, "type": "System.String", "typeSimple": "string", "isRequired": false }, { "name": "IsRequired", + "jsonName": null, "type": "System.Boolean", "typeSimple": "boolean", "isRequired": false diff --git a/npm/ng-packs/packages/core/src/lib/services/list.service.ts b/npm/ng-packs/packages/core/src/lib/services/list.service.ts index 0bd3e927ae..c77ba9cdb4 100644 --- a/npm/ng-packs/packages/core/src/lib/services/list.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/list.service.ts @@ -88,12 +88,11 @@ export class ListService implements OnDes get = () => { this.resetPageWhenUnchanged(); - this._query$.next(({ - filter: this._filter || undefined, - maxResultCount: this._maxResultCount, - skipCount: this._page * this._maxResultCount, - sorting: this._sortOrder ? `${this._sortKey} ${this._sortOrder}` : undefined, - } as any) as QueryParamsType); + this.next(); + }; + + getWithoutPageReset = () => { + this.next(); }; private delay: MonoTypeOperatorFunction; @@ -130,6 +129,15 @@ export class ListService implements OnDes this._skipCount = 0; } else this._skipCount = skipCount; } + + private next() { + this._query$.next(({ + filter: this._filter || undefined, + maxResultCount: this._maxResultCount, + skipCount: this._page * this._maxResultCount, + sorting: this._sortOrder ? `${this._sortKey} ${this._sortOrder}` : undefined, + } as any) as QueryParamsType); + } } export type QueryStreamCreatorCallback = ( diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 7180735fa2..a4a0557ab5 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -102,14 +102,7 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.1.tgz#cc9163a545526d1970d2d2b85803f345bb38b4a0" - integrity sha512-k4PtGsrRE/hBkNULXPEHZURcw7C2qgmCnIe2fYaEdLMGLHpu4sUuYkegj1nCVVOA76omhoFi5mwqUYZTuhpS8Q== - dependencies: - just-compare "^1.3.0" - -"@abp/utils@^4.3.2": +"@abp/utils@^4.3.1", "@abp/utils@^4.3.2": version "4.3.2" resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.2.tgz#ff8fa921aadf8ec6d1d8eb0572133907c19ac6e5" integrity sha512-xUycN1bW+gTVfD0WJHXG5UbqAqAg/dVrZ/pXlnEGixp04vXwTI+o5oWTV2rQYiOyLbPzmpjSAZmxrkIcAgIQ1A== @@ -386,9 +379,9 @@ tslib "^2.0.0" "@angular/cdk@^11.0.2": - version "11.2.6" - resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-11.2.6.tgz#bf659b1df33733b718984503d36a7b272eb6db91" - integrity sha512-cVR+F6oIIxOTHXQOPUF6owWEPqqmK9vih/MFlgG0PrkVd8KkuCkjfet9xPVLaTLK/kGY+EWsqGX84crFS/XyYg== + version "11.2.13" + resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-11.2.13.tgz#d54c9187e3b8cf3f8ba190b1edddc08ed2b740de" + integrity sha512-FkE4iCwoLbQxLDUOjV1I7M/6hmpyb7erAjEdWgch7nGRNxF1hqX5Bqf1lvLFKPNCbx5NRI5K7YVAdIUQUR8vug== dependencies: tslib "^2.0.0" optionalDependencies: @@ -539,17 +532,17 @@ "@ant-design/colors" "^5.0.0" tslib "^2.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== dependencies: - "@babel/highlight" "^7.12.13" + "@babel/highlight" "^7.14.5" -"@babel/compat-data@^7.12.7", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" - integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== +"@babel/compat-data@^7.12.7", "@babel/compat-data@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea" + integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w== "@babel/core@7.12.10": version "7.12.10" @@ -594,19 +587,19 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.8.6": - version "7.13.14" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06" - integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-compilation-targets" "^7.13.13" - "@babel/helper-module-transforms" "^7.13.14" - "@babel/helpers" "^7.13.10" - "@babel/parser" "^7.13.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.13" - "@babel/types" "^7.13.14" + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" + integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.5" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helpers" "^7.14.6" + "@babel/parser" "^7.14.6" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -623,321 +616,321 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.10", "@babel/generator@^7.13.9", "@babel/generator@^7.8.3": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" - integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== +"@babel/generator@^7.12.10", "@babel/generator@^7.14.5", "@babel/generator@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" + integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.14.5" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== +"@babel/helper-annotate-as-pure@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" + integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.14.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" + integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-explode-assignable-expression" "^7.14.5" + "@babel/types" "^7.14.5" -"@babel/helper-compilation-targets@^7.12.5", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.8": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" - integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== +"@babel/helper-compilation-targets@^7.12.5", "@babel/helper-compilation-targets@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" + integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== dependencies: - "@babel/compat-data" "^7.13.12" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" + "@babel/compat-data" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.13.0": - version "7.13.11" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" - integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== +"@babel/helper-create-class-features-plugin@^7.14.5": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" + integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.13.0" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" - integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.14.5" regexpu-core "^4.7.1" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== +"@babel/helper-explode-assignable-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" + integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" - integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== - dependencies: - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + "@babel/types" "^7.14.5" + +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== dependencies: - "@babel/types" "^7.13.12" + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": - version "7.13.14" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" - integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.13" - "@babel/types" "^7.13.14" + "@babel/types" "^7.14.5" + +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" - integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" - -"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - -"@babel/helper-validator-option@^7.12.11", "@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.12.5", "@babel/helpers@^7.13.10", "@babel/helpers@^7.8.3": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" - integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/highlight@^7.12.13": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" +"@babel/helper-member-expression-to-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8" + integrity sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" + integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-remap-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" + integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-wrap-function" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-replace-supers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" + integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helper-simple-access@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" + integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" + integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-validator-identifier@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" + integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== + +"@babel/helper-validator-option@^7.12.11", "@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helper-wrap-function@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" + integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.14.6", "@babel/helpers@^7.8.3": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" + integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== + dependencies: + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.13.13", "@babel/parser@^7.8.3": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" - integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.8.3": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2" + integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ== "@babel/plugin-proposal-async-generator-functions@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" - integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39" + integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-namespace-from@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" - integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" + integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-logical-assignment-operators@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" - integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" + integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" - integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" + integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@^7.12.7": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" - integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" + integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf" + integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A== dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/compat-data" "^7.14.5" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-parameters" "^7.14.5" "@babel/plugin-proposal-optional-catch-binding@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-proposal-optional-chaining@^7.12.7": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" - integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" + integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" + integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -1031,208 +1024,208 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-arrow-functions@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-async-to-generator@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" "@babel/plugin-transform-block-scoped-functions@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-block-scoping@^7.12.11": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" + integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-classes@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" + integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-destructuring@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" - integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35" + integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-duplicate-keys@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-exponentiation-operator@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-for-of@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" + integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-function-name@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-literals@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-member-expression-literals@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-modules-amd@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" - integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" - integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" + integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== - dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" + integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== + dependencies: + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-umd@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" - integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c" + integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/plugin-transform-new-target@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-object-super@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" + integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-property-literals@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-regenerator@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== dependencies: regenerator-transform "^0.14.2" "@babel/plugin-transform-reserved-words@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-runtime@7.12.10": version "7.12.10" @@ -1244,55 +1237,55 @@ semver "^5.5.1" "@babel/plugin-transform-shorthand-properties@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-spread@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" + integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-transform-sticky-regex@^7.12.7": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-template-literals@^7.12.1": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-typeof-symbol@^7.12.10": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-unicode-escapes@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" + integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-unicode-regex@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/preset-env@7.12.11": version "7.12.11" @@ -1385,9 +1378,9 @@ regenerator-runtime "^0.13.4" "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" - integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" + integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== dependencies: regenerator-runtime "^0.13.4" @@ -1400,36 +1393,36 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/template@^7.12.13", "@babel/template@^7.12.7", "@babel/template@^7.3.3", "@babel/template@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.10", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.8.3": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" - integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.13.13" - "@babel/types" "^7.13.13" +"@babel/template@^7.12.7", "@babel/template@^7.14.5", "@babel/template@^7.3.3", "@babel/template@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.10", "@babel/traverse@^7.14.5", "@babel/traverse@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870" + integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.13", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": - version "7.13.14" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" - integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ== +"@babel/types@^7.0.0", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.7", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" + integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" + "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1445,38 +1438,38 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@commitlint/execute-rule@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-12.0.1.tgz#5bb2eba929270cafb2bd8191799d8b451de7fb7e" - integrity sha512-JzyweYfZlFLtXpgP+btzSY3YAkGPg61TqUSYQqBr4+5IaVf1FruMm5v4D5eLu9dAJuNKUfHbM3AEfuEPiZ79pg== +"@commitlint/execute-rule@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-12.1.4.tgz#9973b02e9779adbf1522ae9ac207a4815ec73de1" + integrity sha512-h2S1j8SXyNeABb27q2Ok2vD1WfxJiXvOttKuRA9Or7LN6OQoC/KtT3844CIhhWNteNMu/wE0gkTqGxDVAnJiHg== "@commitlint/load@>6.1.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.0.1.tgz#4d180fc88e5b4cfcb476a245d899f85154137502" - integrity sha512-dX8KdCWn7w0bTkkk3zKQpe9X8vsTRa5EM+1ffF313wCX9b6tGa9vujhEHCkSzKAbbE2tFV64CHZygE7rtlHdIA== + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.1.4.tgz#e3c2dbc0e7d8d928f57a6878bd7219909fc0acab" + integrity sha512-Keszi0IOjRzKfxT+qES/n+KZyLrxy79RQz8wWgssCboYjKEp+wC+fLCgbiMCYjI5k31CIzIOq/16J7Ycr0C0EA== dependencies: - "@commitlint/execute-rule" "^12.0.1" - "@commitlint/resolve-extends" "^12.0.1" - "@commitlint/types" "^12.0.1" + "@commitlint/execute-rule" "^12.1.4" + "@commitlint/resolve-extends" "^12.1.4" + "@commitlint/types" "^12.1.4" chalk "^4.0.0" cosmiconfig "^7.0.0" lodash "^4.17.19" resolve-from "^5.0.0" -"@commitlint/resolve-extends@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-12.0.1.tgz#77509f386e08bd30262ec9a75c783d8f4f028fd2" - integrity sha512-Mvg0GDi/68Cqw893ha8uhxE8myHfPmiSSSi7d1x4VJNR4hoS37lBdX89kyx4i9NPmLfviY2cUJKTyK8ZrFznZw== +"@commitlint/resolve-extends@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-12.1.4.tgz#e758ed7dcdf942618b9f603a7c28a640f6a0802a" + integrity sha512-R9CoUtsXLd6KSCfsZly04grsH6JVnWFmVtWgWs1KdDpdV+G3TSs37tColMFqglpkx3dsWu8dsPD56+D9YnJfqg== dependencies: import-fresh "^3.0.0" lodash "^4.17.19" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/types@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-12.0.1.tgz#04a0cbb8aa56b7c004f8939c2d1ef8892ec68327" - integrity sha512-FsNDMV0W7D19/ZbR412klpqAilXASx75Neqh7jPtK278IEwdukOg3vth1r5kTm+BjDScM7wMUEOwIW3NNfAtwg== +"@commitlint/types@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-12.1.4.tgz#9618a5dc8991fb58e6de6ed89d7bf712fa74ba7e" + integrity sha512-KRIjdnWNUx6ywz+SJvjmNCbQKcKP6KArhjZhY2l+CWKxak0d77SOjggkMwFTiSgLODOwmuLTbarR2ZfWPiPMlw== dependencies: chalk "^4.0.0" @@ -2514,38 +2507,38 @@ tslib "^1.9.0" "@ngxs/devtools-plugin@^3.7.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@ngxs/devtools-plugin/-/devtools-plugin-3.7.1.tgz#e0abb97f0fb239236b135f15b82704289c96774b" - integrity sha512-tZ5dVrgHDaOK0NMuSy3eesqwCXncF7Tm2bO/5cSvgSUXCKuU8UfWKxvP/N/Wcz5V5uaUIdOY1bnF6ZdeAMVzGQ== + version "3.7.2" + resolved "https://registry.yarnpkg.com/@ngxs/devtools-plugin/-/devtools-plugin-3.7.2.tgz#995424e5faf48df55a1b54b9e1b36ce9c47c1d52" + integrity sha512-kRuOx1GPXHHZZAeQMm1J1msTZxjgiAUY4NR7bzaQPn+UwSY2OgGEsd8driMM5YSTF1hOjcFHinaLCM1vmu8FmQ== dependencies: tslib "^1.9.0" "@ngxs/logger-plugin@^3.7.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@ngxs/logger-plugin/-/logger-plugin-3.7.1.tgz#045b1b7efbef82d47488f925be8af77cf66ee906" - integrity sha512-+iUwPnKFa0SPvT5duzPKaRZvql49lWPh5/kxE7U6BLnEZd87MrVUmVRDWalyvyiw7/ZiYeEk1aM8OgkmMKgwnQ== + version "3.7.2" + resolved "https://registry.yarnpkg.com/@ngxs/logger-plugin/-/logger-plugin-3.7.2.tgz#32dc7b0c1feddc41dab159f015bc73381cc249c6" + integrity sha512-JGqgBUX+r/1uV0IkHMJtGyAFDrbjbUZWgmmlXCaJ4t1r+cY/TPJm5BeLtiIqdewf2ELfzOfA682mbk3EOlRymw== dependencies: tslib "^1.9.0" "@ngxs/store@^3.7.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@ngxs/store/-/store-3.7.1.tgz#3333379eb36cfe475d019b6c894b263ea515b8a5" - integrity sha512-Qg4rkF8XoIg/E2SGUfBbr4JmR8ZbRfeg1X++fF0HJymK1PtbIxtEXQXm7VTH0+GSmYDCwPJb8Im9dZHGZWF5ww== + version "3.7.2" + resolved "https://registry.yarnpkg.com/@ngxs/store/-/store-3.7.2.tgz#1088b0669adc382d36ca7ae8438c603e55879b42" + integrity sha512-1cnAjHOGCovfvhjtcAWBajrMXos97Un3c8ekKoS8FIHnq3aQOzY/ePspDRNi9kTcuBJ/r/xl097JC1ssEuNbyg== dependencies: tslib "^1.9.0" -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.stat@^1.1.2": version "1.1.3" @@ -2553,11 +2546,11 @@ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" + integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" "@npmcli/ci-detect@^1.0.0": @@ -2566,18 +2559,17 @@ integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== "@npmcli/git@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.6.tgz#47b97e96b2eede3f38379262fa3bdfa6eae57bf2" - integrity sha512-a1MnTfeRPBaKbFY07fd+6HugY1WAkKJzdiJvlRub/9o5xz2F/JtPacZZapx5zRJUQFIzSL677vmTSxEcDMrDbg== + version "2.0.9" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.9.tgz#915bbfe66300e67b4da5ef765a4475ffb2ca5b6b" + integrity sha512-hTMbMryvOqGLwnmMBKs5usbPsJtyEsMsgXwJbmNrsEuQQh1LAIMDU77IoOrwkCg+NgQWl+ySlarJASwM3SutCA== dependencies: - "@npmcli/promise-spawn" "^1.1.0" + "@npmcli/promise-spawn" "^1.3.2" lru-cache "^6.0.0" - mkdirp "^1.0.3" - npm-pick-manifest "^6.0.0" + mkdirp "^1.0.4" + npm-pick-manifest "^6.1.1" promise-inflight "^1.0.1" promise-retry "^2.0.1" - semver "^7.3.2" - unique-filename "^1.1.1" + semver "^7.3.5" which "^2.0.2" "@npmcli/installed-package-contents@^1.0.5": @@ -2601,7 +2593,7 @@ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede" integrity sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg== -"@npmcli/promise-spawn@^1.1.0", "@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": +"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== @@ -2609,9 +2601,9 @@ infer-owner "^1.0.4" "@npmcli/run-script@^1.3.0": - version "1.8.4" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.4.tgz#03ced92503a6fe948cbc0975ce39210bc5e824d6" - integrity sha512-Yd9HXTtF1JGDXZw0+SOn+mWLYS0e7bHBHVC/2C8yqs4wUrs/k8rwBSinD7rfk+3WG/MFGRZKxjyoD34Pch2E/A== + version "1.8.5" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.5.tgz#f250a0c5e1a08a792d775a315d0ff42fc3a51e1d" + integrity sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A== dependencies: "@npmcli/node-gyp" "^1.0.2" "@npmcli/promise-spawn" "^1.3.2" @@ -2627,18 +2619,18 @@ "@octokit/types" "^6.0.3" "@octokit/endpoint@^6.0.1": - version "6.0.11" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.11.tgz#082adc2aebca6dcefa1fb383f5efb3ed081949d1" - integrity sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ== + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== dependencies: "@octokit/types" "^6.0.3" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-6.0.0.tgz#7da8d7d5a72d3282c1a3ff9f951c8133a707480d" - integrity sha512-CnDdK7ivHkBtJYzWzZm7gEkanA7gKH6a09Eguz7flHw//GacPJLmkHA3f3N++MJmlxD1Fl+mB7B32EEpSCwztQ== +"@octokit/openapi-types@^7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-7.3.2.tgz#065ce49b338043ec7f741316ce06afd4d459d944" + integrity sha512-oJhK/yhl9Gt430OrZOzAl2wJqR0No9445vmZ9Ey8GjUZUpwuu/vmEFP0TDhDXdpGDoxD6/EIFHJEcY8nHXpDTA== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -2653,9 +2645,9 @@ "@octokit/types" "^2.0.1" "@octokit/plugin-request-log@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" - integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== "@octokit/plugin-rest-endpoint-methods@2.4.0": version "2.4.0" @@ -2674,27 +2666,25 @@ deprecation "^2.0.0" once "^1.4.0" -"@octokit/request-error@^2.0.0": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143" - integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg== +"@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== dependencies: "@octokit/types" "^6.0.3" deprecation "^2.0.0" once "^1.4.0" "@octokit/request@^5.2.0": - version "5.4.14" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96" - integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA== + version "5.6.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.0.tgz#6084861b6e4fa21dc40c8e2a739ec5eff597e672" + integrity sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA== dependencies: "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.0.0" - "@octokit/types" "^6.7.1" - deprecation "^2.0.0" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" is-plain-object "^5.0.0" node-fetch "^2.6.1" - once "^1.4.0" universal-user-agent "^6.0.0" "@octokit/rest@^16.28.4": @@ -2726,12 +2716,12 @@ dependencies: "@types/node" ">= 8" -"@octokit/types@^6.0.3", "@octokit/types@^6.7.1": - version "6.13.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.13.0.tgz#779e5b7566c8dde68f2f6273861dd2f0409480d0" - integrity sha512-W2J9qlVIU11jMwKHUp5/rbVUeErqelCsO5vW5PKNb7wAXQVUz87Rc+imjlEvpvbH8yUb+KHmv8NEjVZdsdpyxA== +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1": + version "6.16.4" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.16.4.tgz#d24f5e1bacd2fe96d61854b5bda0e88cf8288dfe" + integrity sha512-UxhWCdSzloULfUyamfOg4dJxV9B+XjgrIZscI0VCbp4eNrjmorGEw+4qdwcpTsu6DIrm9tQsFQS2pK5QkqQ04A== dependencies: - "@octokit/openapi-types" "^6.0.0" + "@octokit/openapi-types" "^7.3.2" "@rollup/plugin-commonjs@^17.0.0": version "17.1.0" @@ -2819,14 +2809,14 @@ integrity sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw== "@sindresorhus/is@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" - integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" + integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g== "@sinonjs/commons@^1.7.0": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" - integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" @@ -2910,9 +2900,9 @@ "@types/responselike" "*" "@types/estree@*": - version "0.0.47" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.47.tgz#d7a51db20f0650efec24cd04994f523d93172ed4" - integrity sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg== + version "0.0.48" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" + integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== "@types/estree@0.0.39": version "0.0.39" @@ -2960,16 +2950,16 @@ "@types/istanbul-lib-report" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" "@types/jasmine@^3.3.9": - version "3.6.9" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.6.9.tgz#8785870f87839b7d91b45d7b226380f28dee5d9f" - integrity sha512-B53NIwMj/AO0O+xfSWLYmKB0Mo6TYxfv2Mk8/c1T2w/e38t55iaPR6p7pHXTTtqfTmevPK3i8T1YweYFTZlxDw== + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.7.7.tgz#56718af036be3c9f86eca560a22e39440b2b0784" + integrity sha512-yZzGe1d1T0y+imXDZ79F030nn8qbmiwpWKCZKvKN0KbTzwXAVYShUxkIxu1ba+vhIdabTGVGCfbtZC0oOam8TQ== "@types/jest@^25.2.3": version "25.2.3" @@ -3002,14 +2992,14 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*", "@types/node@>= 8": - version "14.14.37" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" - integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + version "15.12.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" + integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== "@types/node@^12.11.1": - version "12.20.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" - integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== + version "12.20.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.15.tgz#10ee6a6a3f971966fddfa3f6e89ef7a73ec622df" + integrity sha512-F6S4Chv4JicJmyrwlDkxUdGNSplsQdGwp1A0AJloEVDirWdZOAiRHhovDlsFkKUrquUXhz1imJhXHsf59auyAg== "@types/node@^8.0.31": version "8.10.66" @@ -3532,10 +3522,10 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -3755,14 +3745,14 @@ autoprefixer@10.2.1: postcss-value-parser "^4.1.0" autoprefixer@^10.2.4: - version "10.2.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.5.tgz#096a0337dbc96c0873526d7fef5de4428d05382d" - integrity sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA== + version "10.2.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.2.6.tgz#aadd9ec34e1c98d403e01950038049f0eb252949" + integrity sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg== dependencies: - browserslist "^4.16.3" - caniuse-lite "^1.0.30001196" + browserslist "^4.16.6" + caniuse-lite "^1.0.30001230" colorette "^1.2.2" - fraction.js "^4.0.13" + fraction.js "^4.1.1" normalize-range "^0.1.2" postcss-value-parser "^4.1.0" @@ -3860,9 +3850,9 @@ babel-preset-jest@^25.5.0: babel-preset-current-node-syntax "^0.1.2" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" @@ -3895,9 +3885,9 @@ bcrypt-pbkdf@^1.0.0: tweetnacl "^0.14.3" before-after-hook@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.0.tgz#09c40d92e936c64777aa385c4e9b904f8147eaf0" - integrity sha512-jH6rKQIfroBbhEXVmI7XmXe3ix5S/PgJqpzdDPnR8JGLHWNYLsYZ6tK5iWOF/Ra3oqEX0NobXGlzbiylIzVphQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== big.js@^5.2.2: version "5.2.2" @@ -4099,16 +4089,16 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.16.3, browserslist@^4.9.1: - version "4.16.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== +browserslist@^4.0.0, browserslist@^4.16.1, browserslist@^4.16.6, browserslist@^4.9.1: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" escalade "^3.1.1" - node-releases "^1.1.70" + node-releases "^1.1.71" browserstack@^1.5.1: version "1.6.1" @@ -4253,9 +4243,9 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: y18n "^4.0.0" cacache@^15.0.5: - version "15.0.6" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099" - integrity sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w== + version "15.2.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" + integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== dependencies: "@npmcli/move-file" "^1.0.1" chownr "^2.0.0" @@ -4296,16 +4286,16 @@ cacheable-lookup@^5.0.3: integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== cacheable-request@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" - integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" http-cache-semantics "^4.0.0" keyv "^4.0.0" lowercase-keys "^2.0.0" - normalize-url "^4.1.0" + normalize-url "^6.0.1" responselike "^2.0.0" cachedir@2.2.0: @@ -4406,10 +4396,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001196: - version "1.0.30001204" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa" - integrity sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230: + version "1.0.30001237" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz#4b7783661515b8e7151fc6376cfd97f0e427b9e5" + integrity sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw== canonical-path@1.0.0: version "1.0.0" @@ -4457,9 +4447,9 @@ chalk@^3.0.0: supports-color "^7.1.0" chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -4492,20 +4482,20 @@ chartjs-color@^2.1.0: chartjs-color-string "^0.6.0" color-convert "^1.9.3" -"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.0.2, chokidar@^3.4.1, chokidar@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== +"chokidar@>=2.0.0 <4.0.0", "chokidar@>=3.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.0.2, chokidar@^3.4.1, chokidar@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" chokidar@^2.1.8: version "2.1.8" @@ -4537,11 +4527,9 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^2.0.0: version "2.0.0" @@ -4673,9 +4661,9 @@ code-point-at@^1.0.0: integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= codelyzer@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-6.0.1.tgz#c0e9668e847255b37c759e68fb2700b11e277d0f" - integrity sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g== + version "6.0.2" + resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-6.0.2.tgz#25d72eae641e8ff13ffd7d99b27c9c7ad5d7e135" + integrity sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g== dependencies: "@angular/compiler" "9.0.0" "@angular/core" "9.0.0" @@ -4781,15 +4769,15 @@ commander@^7.0.0: integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== commitizen@^4.0.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.2.3.tgz#088d0ef72500240d331b11e02e288223667c1475" - integrity sha512-pYlYEng7XMV2TW4xtjDKBGqeJ0Teq2zyRSx2S3Ml1XAplHSlJZK8vm1KdGclpMEZuGafbS5TeHXIVnHk8RWIzQ== + version "4.2.4" + resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.2.4.tgz#a3e5b36bd7575f6bf6e7aa19dbbf06b0d8f37165" + integrity sha512-LlZChbDzg3Ir3O2S7jSo/cgWp5/QwylQVr59K4xayVq8S4/RdKzSyJkghAiZZHfhh5t4pxunUoyeg0ml1q/7aw== dependencies: cachedir "2.2.0" cz-conventional-changelog "3.2.0" dedent "0.7.0" detect-indent "6.0.0" - find-node-modules "2.0.0" + find-node-modules "^2.1.2" find-root "1.1.0" fs-extra "8.1.0" glob "7.1.4" @@ -4871,9 +4859,9 @@ concat-stream@^2.0.0: typedarray "^0.0.6" config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -4944,9 +4932,9 @@ conventional-changelog-codemirror@^2.0.8: q "^1.5.1" conventional-changelog-conventionalcommits@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz#a02e0b06d11d342fdc0f00c91d78265ed0bc0a62" - integrity sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw== + version "4.6.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.0.tgz#7fc17211dbca160acf24687bd2fdd5fd767750eb" + integrity sha512-sj9tj3z5cnHaSJCYObA9nISf7eq/YjscLPoq6nmew4SiOjxqL2KRpK20fjnjVbpNDjJ2HR3MoVcWKXwbVvzS0A== dependencies: compare-func "^2.0.0" lodash "^4.17.15" @@ -5175,11 +5163,11 @@ copy-webpack-plugin@6.3.2: webpack-sources "^1.4.3" core-js-compat@^3.8.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" - integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== + version "3.14.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5" + integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A== dependencies: - browserslist "^4.16.3" + browserslist "^4.16.6" semver "7.0.0" core-js@3.8.2: @@ -5362,9 +5350,9 @@ css-tree@1.0.0-alpha.37: source-map "^0.6.1" css-tree@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" - integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" source-map "^0.6.1" @@ -5410,10 +5398,10 @@ cssfontparser@^1.2.1: resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" integrity sha1-9AIvyPlwDGgCnVQghK+69CWj8+M= -cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== +cssnano-preset-default@^4.0.7, cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== dependencies: css-declaration-sorter "^4.0.1" cssnano-util-raw-cache "^4.0.1" @@ -5443,7 +5431,7 @@ cssnano-preset-default@^4.0.7: postcss-ordered-values "^4.1.2" postcss-reduce-initial "^4.0.3" postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" + postcss-svgo "^4.0.3" postcss-unique-selectors "^4.0.1" cssnano-util-get-arguments@^4.0.0: @@ -5468,7 +5456,7 @@ cssnano-util-same-parent@^4.0.0: resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== -cssnano@4.1.10, cssnano@^4.1.10: +cssnano@4.1.10: version "4.1.10" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== @@ -5478,6 +5466,16 @@ cssnano@4.1.10, cssnano@^4.1.10: is-resolvable "^1.0.0" postcss "^7.0.0" +cssnano@^4.1.10: + version "4.1.11" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.8" + is-resolvable "^1.0.0" + postcss "^7.0.0" + csso@^4.0.2: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" @@ -5557,9 +5555,9 @@ d@1, d@^1.0.1: type "^1.0.1" damerau-levenshtein@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" - integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + version "1.0.7" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" + integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== dargs@^4.0.1: version "4.1.0" @@ -5590,9 +5588,9 @@ data-urls@^1.1.0: whatwg-url "^7.0.0" date-fns@^2.10.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.19.0.tgz#65193348635a28d5d916c43ec7ce6fbd145059e1" - integrity sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg== + version "2.22.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.22.1.tgz#1e5af959831ebb1d82992bf67b765052d8f0efc4" + integrity sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg== dateformat@^3.0.0: version "3.0.3" @@ -5818,9 +5816,9 @@ detect-newline@^3.0.0: integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detect-node@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" - integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== dezalgo@^1.0.0: version "1.0.3" @@ -5869,9 +5867,9 @@ dir-glob@^3.0.1: path-type "^4.0.0" directory-tree@^2.2.3: - version "2.2.7" - resolved "https://registry.yarnpkg.com/directory-tree/-/directory-tree-2.2.7.tgz#4617c794ee89d5618f03fffb7486c7e49df52ad2" - integrity sha512-fgTad/YdV6Y2njsCRK4fl4ZUlGhmb5xj1qrZUIMjvnrKvghVqh8dkB+OUssjYVvb/Q2L+5+8XG0l5uTGI9/8iQ== + version "2.2.9" + resolved "https://registry.yarnpkg.com/directory-tree/-/directory-tree-2.2.9.tgz#702c193f8b19f1076b585bcf8a2db3b49b11a11c" + integrity sha512-BOHxPNvP+XWijPkzoSBvr164IiNxRzvyAiWelbJsU/wG5OYXByer0+Aqo74G1qU+nRKC4yU/czmkmunkWdPPvQ== dns-equal@^1.0.0: version "1.0.0" @@ -5879,9 +5877,9 @@ dns-equal@^1.0.0: integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -5912,9 +5910,9 @@ domelementtype@1: integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" - integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== domexception@^1.0.1: version "1.0.1" @@ -5973,10 +5971,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.649: - version "1.3.702" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.702.tgz#39b8b6860b22806482ad07a8eaf35f861d4f3ce0" - integrity sha512-qJVUKFWQnF6wP7MmTngDkmm8/KPzaiTXNFOAg5j7DSa6J7kPou7mTBqC8jpUOxauQWwHR3pn4dMRdV8IE1xdtA== +electron-to-chromium@^1.3.723: + version "1.3.752" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" + integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== elliptic@^6.5.3: version "6.5.4" @@ -6058,9 +6056,9 @@ env-paths@^2.2.0: integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.3.1: - version "7.7.4" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" - integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== err-code@^1.0.0: version "1.1.2" @@ -6086,10 +6084,10 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.2, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +es-abstract@^1.17.2, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -6099,14 +6097,14 @@ es-abstract@^1.17.2, es-abstract@^1.18.0-next.2: has-symbols "^1.0.2" is-callable "^1.2.3" is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" + unbox-primitive "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -6511,9 +6509,9 @@ fastq@^1.6.0: reusify "^1.0.4" faye-websocket@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" @@ -6614,18 +6612,18 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-node-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.0.0.tgz#5db1fb9e668a3d451db3d618cd167cdd59e41b69" - integrity sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw== +find-node-modules@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.2.tgz#57565a3455baf671b835bc6b2134a9b938b9c53c" + integrity sha512-x+3P4mbtRPlSiVE1Qco0Z4YLU8WFiFcuWTf3m75OV9Uzcfs2Bg+O9N+r/K0AnmINBW06KpfqKwYJbFlFq4qNug== dependencies: - findup-sync "^3.0.0" - merge "^1.2.1" + findup-sync "^4.0.0" + merge "^2.1.0" find-parent-dir@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= + version "0.3.1" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.1.tgz#c5c385b96858c3351f95d446cab866cbf9f11125" + integrity sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A== find-root@1.1.0: version "1.1.0" @@ -6662,14 +6660,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== dependencies: detect-file "^1.0.0" is-glob "^4.0.0" - micromatch "^3.0.4" + micromatch "^4.0.2" resolve-dir "^1.0.1" flush-write-stream@^1.0.0: @@ -6681,9 +6679,9 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.13.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== font-awesome@^4.7.0: version "4.7.0" @@ -6709,15 +6707,15 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.13.tgz#3c1c315fa16b35c85fffa95725a36fa729c69dfe" - integrity sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA== +fraction.js@^4.0.13, fraction.js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff" + integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg== fragment-cache@^0.2.1: version "0.2.1" @@ -6794,7 +6792,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@~2.3.1: +fsevents@^2.1.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -6980,7 +6978,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -7016,7 +7014,7 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.6, glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -7028,6 +7026,18 @@ glob@7.1.6, glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glo once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -7280,9 +7290,9 @@ homedir-polyfill@^1.0.1: parse-passwd "^1.0.0" hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^3.0.6: version "3.0.8" @@ -7318,11 +7328,6 @@ hsla-regex@^1.0.0: resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -7486,9 +7491,9 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -7508,9 +7513,9 @@ iferr@^0.1.5: integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.1, ignore-walk@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== dependencies: minimatch "^3.0.4" @@ -7772,9 +7777,9 @@ is-arrayish@^0.3.1: integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== is-binary-path@^1.0.0: version "1.0.1" @@ -7791,11 +7796,11 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" is-buffer@^1.1.5: version "1.1.6" @@ -7827,9 +7832,9 @@ is-color-stop@^1.0.0: rgba-regex "^1.0.0" is-core-module@^2.1.0, is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + version "2.4.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== dependencies: has "^1.0.3" @@ -7848,9 +7853,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== is-descriptor@^0.1.0: version "0.1.6" @@ -7876,9 +7881,9 @@ is-directory@^0.3.1: integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" @@ -7959,9 +7964,9 @@ is-negative-zero@^2.0.1: integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== is-number@^3.0.0: version "3.0.0" @@ -8047,13 +8052,13 @@ is-reference@^1.2.1: dependencies: "@types/estree" "*" -is-regex@^1.0.4, is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== +is-regex@^1.0.4, is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.1" + has-symbols "^1.0.2" is-resolvable@^1.0.0: version "1.1.0" @@ -8061,9 +8066,9 @@ is-resolvable@^1.0.0: integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-ssh@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" - integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ== + version "1.3.3" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e" + integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ== dependencies: protocols "^1.1.0" @@ -8077,24 +8082,17 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== - dependencies: - html-comment-regex "^1.1.0" +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - has-symbols "^1.0.1" + has-symbols "^1.0.2" is-text-path@^1.0.1: version "1.0.1" @@ -8803,9 +8801,9 @@ jszip@^3.1.3: set-immediate-shim "~1.0.1" just-clone@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/just-clone/-/just-clone-3.1.0.tgz#10efc422e9b041355c43b8076d7b768b7a09fbbd" - integrity sha512-sROn15yHaeNYSTG49HmfbQLtsZvMBb2COvVofNXbeUXx6GkERkdjG3dfejD0fe78gdHJLyS+fOz897H73S8LqA== + version "3.2.1" + resolved "https://registry.yarnpkg.com/just-clone/-/just-clone-3.2.1.tgz#7396be5790d33f0fa7e8a145d7983b986a8cee39" + integrity sha512-PFotEVrrzAnwuWTUOFquDShWrHnUnhxNrVs1VFqkNfnoH3Sn5XUlDOePYn2Vv5cN8xV2y69jf8qEoQHm7eoLnw== just-compare@^1.3.0: version "1.4.0" @@ -9184,9 +9182,9 @@ lru-cache@^6.0.0: yallist "^4.0.0" macos-release@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.4.1.tgz#64033d0ec6a5e6375155a74b1a1eba8e509820ac" - integrity sha512-H/QHeBIN1fIGJX517pvK8IEK53yQOW7YcEI55oYtgjDdoCQQz7eJS94qt5kNrscReEyuD/JcdFCm2XBEcGOITg== + version "2.5.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" + integrity sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g== magic-string@0.25.3: version "0.25.3" @@ -9290,9 +9288,9 @@ map-obj@^2.0.0: integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= map-obj@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.0.tgz#0e8bc823e2aaca8a0942567d12ed14f389eec153" - integrity sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" + integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== map-visit@^1.0.0: version "1.0.0" @@ -9411,17 +9409,17 @@ merge2@^1.2.3, merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merge@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== +merge@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -9441,12 +9439,12 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: to-regex "^3.0.2" micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" + picomatch "^2.2.3" miller-rabin@^4.0.0: version "4.0.1" @@ -9456,17 +9454,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.46.0, "mime-db@>= 1.43.0 < 2": - version "1.46.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" - integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== +mime-db@1.48.0, "mime-db@>= 1.43.0 < 2": + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.29" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" - integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== dependencies: - mime-db "1.46.0" + mime-db "1.48.0" mime@1.6.0, mime@^1.4.1: version "1.6.0" @@ -9767,10 +9765,10 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@^3.1.20: - version "3.1.22" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" - integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== +nanoid@^3.1.20, nanoid@^3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== nanomatch@^1.2.9: version "1.2.13" @@ -9850,9 +9848,9 @@ ng-packagr@^11.0.1: terser "^5.5.1" ng-zorro-antd@^11.0.0, ng-zorro-antd@^11.0.1: - version "11.3.0" - resolved "https://registry.yarnpkg.com/ng-zorro-antd/-/ng-zorro-antd-11.3.0.tgz#c09c6c34229bad3cdb22a64b4806f898053f7bb3" - integrity sha512-6oX+DidXd07bLWihwfhPqn8YeA6ZhZsYQsHUOib17lF/wVRZQCl9bacuYc7R/e6AyxuvFCsJQHVp0PEP7v+wTQ== + version "11.4.2" + resolved "https://registry.yarnpkg.com/ng-zorro-antd/-/ng-zorro-antd-11.4.2.tgz#c19f12fee9166cbed0b6c7c63fa37da0464413e7" + integrity sha512-1dMIz5zBma+CfUYYKmIKWIB9mXX837L+WKGGHhl2KrmIIbsbNLh3WTKudCBuyqL58EEgiVhTZYwl841xdz+vLw== dependencies: "@angular/cdk" "^11.0.2" "@ant-design/icons-angular" "^11.0.1" @@ -9979,10 +9977,10 @@ node-notifier@^6.0.0: shellwords "^0.1.1" which "^1.3.1" -node-releases@^1.1.70: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^1.1.71: + version "1.1.73" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== node-sass-tilde-importer@^1.0.2: version "1.0.2" @@ -10043,20 +10041,20 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-url@^3.0.0, normalize-url@^3.3.0: +normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== +normalize-url@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.0.1.tgz#a4f27f58cf8c7b287b440b8a8201f42d0b00d256" + integrity sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ== npm-bundled@^1.0.1, npm-bundled@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" @@ -10106,9 +10104,9 @@ npm-package-arg@8.1.0: validate-npm-package-name "^3.0.0" npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.2.tgz#b868016ae7de5619e729993fbd8d11dc3c52ab62" - integrity sha512-6Eem455JsSMJY6Kpd3EyWE+n5hC+g9bSyHr9K9U2zqZb7+02+hObQ2c0+8iDk/mNF+8r1MhY44WypKJAkySIYA== + version "8.1.5" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" + integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== dependencies: hosted-git-info "^4.0.1" semver "^7.3.4" @@ -10124,9 +10122,9 @@ npm-packlist@^1.4.4: npm-normalize-package-bin "^1.0.1" npm-packlist@^2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.5.tgz#43ef5bbb9f59b7c0ef91e0905f1dd707b4cfb33c" - integrity sha512-KCfK3Vi2F+PH1klYauoQzg81GQ8/GGjQRKYY6tRnpQUPKTs/1gBZSRWtTEd7jGdSn1LZL7gpAmJT+BcS55k2XQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.2.2.tgz#076b97293fa620f632833186a7a8f65aaa6148c8" + integrity sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== dependencies: glob "^7.1.6" ignore-walk "^3.0.3" @@ -10151,7 +10149,7 @@ npm-pick-manifest@^3.0.0: npm-package-arg "^6.0.0" semver "^5.4.1" -npm-pick-manifest@^6.0.0: +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== @@ -10235,10 +10233,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== +object-inspect@^1.10.3, object-inspect@^1.9.0: + version "1.10.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== object-is@^1.0.1: version "1.1.5" @@ -10287,14 +10285,13 @@ object.pick@^1.3.0: isobject "^3.0.1" object.values@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + es-abstract "^1.18.2" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -10435,9 +10432,9 @@ ora@^3.4.0: wcwidth "^1.0.1" ora@^5.1.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.0.tgz#42eda4855835b9cd14d33864c97a3c95a3f56bf4" - integrity sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg== + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" chalk "^4.1.0" @@ -10488,9 +10485,9 @@ osenv@^0.1.4, osenv@^0.1.5: os-tmpdir "^1.0.0" p-cancelable@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.0.tgz#4d51c3b91f483d02a0d300765321fca393d758dd" - integrity sha512-HAZyB3ZodPo+BDpb4/Iu7Jv4P6cSazBz9ZM0ChhEXp70scx834aWCEjQRwgt41UzzejUAPdbqqONfRWTPYrPAQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-each-series@^2.1.0: version "2.2.0" @@ -10717,12 +10714,12 @@ parse-path@^4.0.0: query-string "^6.13.8" parse-url@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" - integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== + version "5.0.3" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.3.tgz#c158560f14cb1560917e0b7fd8b01adc1e9d3cab" + integrity sha512-nrLCVMJpqo12X8uUJT4GJPd5AFaTOrGx/QpJy3HNcVtq0AZSstVIsnxS5fqNPuoqMUs3MyfBoOP6Zvu2Arok5A== dependencies: is-ssh "^1.3.0" - normalize-url "^3.3.0" + normalize-url "^6.0.1" parse-path "^4.0.0" protocols "^1.4.0" @@ -10821,9 +10818,9 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" @@ -10852,9 +10849,9 @@ path-type@^4.0.0: integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -10867,10 +10864,10 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^2.0.0, pify@^2.3.0: version "2.3.0" @@ -11232,21 +11229,18 @@ postcss-selector-parser@^3.0.0: uniq "^1.0.1" postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" util-deprecate "^1.0.2" -postcss-svgo@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" - integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" + integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== dependencies: - is-svg "^3.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" svgo "^1.0.0" @@ -11299,22 +11293,22 @@ postcss@8.2.4: source-map "^0.6.1" postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27: - version "7.0.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" - integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" postcss@^8.1.4, postcss@^8.2.4: - version "8.2.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece" - integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw== + version "8.3.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.4.tgz#41ece1c43f2f7c74dc7d90144047ce052757b822" + integrity sha512-/tZY0PXExXXnNhKv3TOvZAOUYRyuqcCbBm2c17YMDK0PlVII3K7/LKdt3ScHL+hhouddjUWi+1sKDf9xXW+8YA== dependencies: colorette "^1.2.2" - nanoid "^3.1.20" - source-map "^0.6.1" + nanoid "^3.1.23" + source-map-js "^0.6.2" prelude-ls@~1.1.2: version "1.1.2" @@ -11322,9 +11316,9 @@ prelude-ls@~1.1.2: integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prettier@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + version "2.3.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6" + integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== pretty-bytes@^5.3.0: version "5.6.0" @@ -11393,9 +11387,9 @@ promise-retry@^2.0.1: retry "^0.12.0" prompts@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" @@ -11446,11 +11440,11 @@ protractor@~7.0.0: yargs "^15.3.1" proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" prr@~1.0.1: @@ -11785,10 +11779,10 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -11908,9 +11902,9 @@ remove-trailing-separator@^1.0.1: integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" @@ -12001,9 +11995,9 @@ resize-observer-polyfill@^1.5.1: integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-alpn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" - integrity sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.1.2.tgz#30b60cfbb0c0b8dc897940fe13fe255afcdd4d28" + integrity sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA== resolve-cwd@^2.0.0: version "2.0.0" @@ -12200,11 +12194,11 @@ rollup@2.36.1: fsevents "~2.1.2" rollup@^2.37.0: - version "2.44.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.44.0.tgz#8da324d1c4fd12beef9ae6e12f4068265b6d95eb" - integrity sha512-rGSF4pLwvuaH/x4nAS+zP6UNn5YUDWf/TeEU5IoXSZKBbKRNTCI3qMnYXKZgrC0D2KzS2baiOZt1OlqhMu5rnQ== + version "2.52.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.52.0.tgz#9df3de6028fae79569a985942b81110205a5a411" + integrity sha512-lSkBDGsVoXjqaBf7dsHwxBJz+p+hJEP72P+LOitA0yVs+Nzxj76FidkZE2thrmhjwGqLYiJo39opi7mAfaQ/Vg== optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" rsvp@^4.8.4: version "4.8.5" @@ -12321,11 +12315,11 @@ sass@1.32.4: chokidar ">=2.0.0 <4.0.0" sass@^1.32.5: - version "1.32.8" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.8.tgz#f16a9abd8dc530add8834e506878a2808c037bdc" - integrity sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ== + version "1.35.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.1.tgz#90ecf774dfe68f07b6193077e3b42fb154b9e1cd" + integrity sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ== dependencies: - chokidar ">=2.0.0 <4.0.0" + chokidar ">=3.0.0 <4.0.0" saucelabs@^1.5.0: version "1.5.0" @@ -12389,9 +12383,9 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: xml2js "^0.4.17" selfsigned@^1.10.8: - version "1.10.8" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" - integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + version "1.10.11" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== dependencies: node-forge "^0.10.0" @@ -12426,7 +12420,7 @@ semver@7.3.4: dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4: +semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -12707,9 +12701,9 @@ socks-proxy-agent@^5.0.0: socks "^2.3.3" socks@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.0.tgz#6b984928461d39871b3666754b9000ecf39dfac2" - integrity sha512-mNmr9owlinMplev0Wd7UHFlqI4ofnBnNzFuzrm63PPaHgbkqCFe4T5LzwKmtQ/f2tX0NTpcdVLyD/FHxFBstYw== + version "2.6.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" + integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== dependencies: ip "^1.1.5" smart-buffer "^4.1.0" @@ -12734,6 +12728,11 @@ source-list-map@^2.0.0, source-list-map@^2.0.1: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +source-map-js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" + integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== + source-map-loader@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.1.3.tgz#7dbc2fe7ea09d3e43c51fd9fc478b7f016c1f820" @@ -12827,9 +12826,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + version "3.0.9" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== spdy-transport@^3.0.0: version "3.0.0" @@ -12920,9 +12919,9 @@ sshpk@^1.7.0: tweetnacl "~0.14.0" ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" @@ -12939,9 +12938,9 @@ stable@^0.1.8: integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stack-utils@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.4.tgz#4b600971dcfc6aed0cbdf2a8268177cc916c87c8" - integrity sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w== + version "1.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" + integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== dependencies: escape-string-regexp "^2.0.0" @@ -13230,9 +13229,9 @@ supports-color@^7.0.0, supports-color@^7.1.0: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -13419,9 +13418,9 @@ terser@^4.1.2: source-map-support "~0.5.12" terser@^5.3.4, terser@^5.5.1: - version "5.6.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.1.tgz#a48eeac5300c0a09b36854bf90d9c26fb201973c" - integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== + version "5.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" + integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -13511,9 +13510,9 @@ timsort@^0.3.0: integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= tinykeys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tinykeys/-/tinykeys-1.1.1.tgz#2535e8b24c8e2be447dd0ee1cff656ef435cd63d" - integrity sha512-YEA1TGMlkMabXI0NGddRFti+c1eMO2QP7wefwibSz0Pip8sA+d99yX5Pp7pK7wUeTKmrF4ys4XZVz44YydlTYg== + version "1.2.0" + resolved "https://registry.yarnpkg.com/tinykeys/-/tinykeys-1.2.0.tgz#c57ad1b6f088bc2e506ea340755d57634a3d5c6c" + integrity sha512-zrTdr+78Akihb5TAxmLKG8OAKIpyKWHk/YIOyA90UuDPzJ0OHf4RHR/TwmABgNMXLca1LOUhRf6NpOFIIKezyA== tmp@0.0.30: version "0.0.30" @@ -13621,9 +13620,9 @@ trim-newlines@^2.0.0: integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= trim-newlines@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" - integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== trim-off-newlines@^1.0.0: version "1.0.1" @@ -13631,9 +13630,9 @@ trim-off-newlines@^1.0.0: integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= ts-jest@26.x: - version "26.5.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.4.tgz#207f4c114812a9c6d5746dd4d1cdf899eafc9686" - integrity sha512-I5Qsddo+VTm94SukBJ4cPimOoFZsYTeElR2xy6H2TOVs+NsvgYglW8KuQgKoApOKuaU/Ix/vrF9ebFZlb5D2Pg== + version "26.5.6" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" + integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -13675,7 +13674,7 @@ tsickle@^0.39.1: resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.39.1.tgz#7ccf672cde5b430f5dd0b281ee49e170ef390ff9" integrity sha512-CCc9cZhZbKoNizVM+K3Uqgit/go8GacjpqTv1cpwG/n2P0gB9GMoWZbxrUULDE9Wz26Lh86CGf6QyIPUVV1lnQ== -tslib@2.1.0, tslib@^2.0.0: +tslib@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== @@ -13685,6 +13684,11 @@ tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + tslint@~6.1.0: version "6.1.3" resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" @@ -13811,9 +13815,9 @@ typescript@~4.1.3: integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== uglify-js@^3.1.4: - version "3.13.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.3.tgz#ce72a1ad154348ea2af61f50933c76cc8802276e" - integrity sha512-otIc7O9LyxpUcQoXzj2hL4LPWKklO6LJWoJUzNa8A17Xgi4fOeDC8FBDOLHnC/Slo1CQgsZMcM6as0M76BZaig== + version "3.13.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.9.tgz#4d8d21dcd497f29cfd8e9378b9df123ad025999b" + integrity sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g== uid-number@0.0.6: version "0.0.6" @@ -13825,7 +13829,7 @@ umask@^1.1.0: resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= -unbox-primitive@^1.0.0: +unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== @@ -14484,16 +14488,16 @@ write-pkg@^3.1.0: write-json-file "^2.2.0" ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== dependencies: async-limiter "~1.0.0" ws@^7.0.0: - version "7.4.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" - integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== xml-name-validator@^3.0.0: version "3.0.0" @@ -14531,14 +14535,14 @@ xxhashjs@~0.2.2: cuint "^0.2.2" y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" diff --git a/templates/app/angular/.browserslistrc b/templates/app/angular/.browserslistrc index 80848532e4..427441dc93 100644 --- a/templates/app/angular/.browserslistrc +++ b/templates/app/angular/.browserslistrc @@ -2,11 +2,16 @@ # For additional information regarding the format and rule options, please see: # https://github.com/browserslist/browserslist#queries +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + # You can see what browsers were selected by your queries by running: # npx browserslist -> 0.5% -last 2 versions +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions Firefox ESR -not dead -not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file +not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. diff --git a/templates/app/angular/.editorconfig b/templates/app/angular/.editorconfig index e89330a618..59d9a3a3e7 100644 --- a/templates/app/angular/.editorconfig +++ b/templates/app/angular/.editorconfig @@ -8,6 +8,9 @@ indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true +[*.ts] +quote_type = single + [*.md] max_line_length = off trim_trailing_whitespace = false diff --git a/templates/app/angular/.eslintrc.json b/templates/app/angular/.eslintrc.json new file mode 100644 index 0000000000..47c17dd9dd --- /dev/null +++ b/templates/app/angular/.eslintrc.json @@ -0,0 +1,50 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended" + ], + "rules": {} + } + ] +} diff --git a/templates/app/angular/.gitignore b/templates/app/angular/.gitignore index 6b1b9c15e7..134b949bb2 100644 --- a/templates/app/angular/.gitignore +++ b/templates/app/angular/.gitignore @@ -12,7 +12,6 @@ # profiling files chrome-profiler-events*.json -speed-measure-plugin*.json # IDEs and editors /.idea diff --git a/templates/app/angular/README.md b/templates/app/angular/README.md index e284214f34..0c04d2a202 100644 --- a/templates/app/angular/README.md +++ b/templates/app/angular/README.md @@ -20,8 +20,8 @@ Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github. ## Running end-to-end tests -Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. ## Further help -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/templates/app/angular/angular.json b/templates/app/angular/angular.json index fdf6751f7b..f0e6b6fdb9 100644 --- a/templates/app/angular/angular.json +++ b/templates/app/angular/angular.json @@ -1,5 +1,9 @@ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false, + "defaultCollection": "@angular-eslint/schematics" + }, "version": 1, "newProjectRoot": "projects", "projects": { @@ -22,7 +26,7 @@ "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.app.json", - "aot": true, + "inlineStyleLanguage": "scss", "allowedCommonJsDependencies": ["chart.js", "js-sha256"], "assets": ["src/favicon.ico", "src/assets"], "styles": [ @@ -67,44 +71,48 @@ }, "configurations": { "production": { - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "optimization": true, - "outputHashing": "all", - "sourceMap": false, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, "budgets": [ { "type": "initial", "maximumWarning": "2mb", - "maximumError": "5mb" + "maximumError": "2.5mb" }, { "type": "anyComponentStyle", - "maximumWarning": "6kb", - "maximumError": "10kb" + "maximumWarning": "2kb", + "maximumError": "4kb" } - ] + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true } - } + }, + "defaultConfiguration": "production" }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "browserTarget": "MyProjectName:build" - }, "configurations": { "production": { "browserTarget": "MyProjectName:build:production" + }, + "development": { + "browserTarget": "MyProjectName:build:development" } - } + }, + "defaultConfiguration": "development" }, "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", @@ -119,43 +127,20 @@ "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.spec.json", "karmaConfig": "karma.conf.js", + "inlineStyleLanguage": "scss", "assets": ["src/favicon.ico", "src/assets"], - "styles": [ - "node_modules/bootstrap/dist/css/bootstrap.min.css", - "node_modules/@fortawesome/fontawesome-free/css/all.min.css", - "node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css", - "node_modules/@swimlane/ngx-datatable/index.css", - "node_modules/@swimlane/ngx-datatable/assets/icons.css", - "node_modules/@swimlane/ngx-datatable/themes/material.css", - "src/styles.scss" - ], + "styles": ["src/styles.scss"], "scripts": [] } }, "lint": { - "builder": "@angular-devkit/build-angular:tslint", + "builder": "@angular-eslint/builder:lint", "options": { - "tsConfig": ["tsconfig.app.json", "tsconfig.spec.json", "e2e/tsconfig.json"], - "exclude": ["**/node_modules/**"] - } - }, - "e2e": { - "builder": "@angular-devkit/build-angular:protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "MyProjectName:serve" - }, - "configurations": { - "production": { - "devServerTarget": "MyProjectName:serve:production" - } + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] } } } } }, - "defaultProject": "MyProjectName", - "cli": { - "analytics": false - } + "defaultProject": "MyProjectName" } diff --git a/templates/app/angular/e2e/protractor.conf.js b/templates/app/angular/e2e/protractor.conf.js deleted file mode 100644 index 7c798cfff0..0000000000 --- a/templates/app/angular/e2e/protractor.conf.js +++ /dev/null @@ -1,32 +0,0 @@ -// @ts-check -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -const { SpecReporter } = require('jasmine-spec-reporter'); - -/** - * @type { import("protractor").Config } - */ -exports.config = { - allScriptsTimeout: 11000, - specs: [ - './src/**/*.e2e-spec.ts' - ], - capabilities: { - browserName: 'chrome' - }, - directConnect: true, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - onPrepare() { - require('ts-node').register({ - project: require('path').join(__dirname, './tsconfig.json') - }); - jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); - } -}; \ No newline at end of file diff --git a/templates/app/angular/e2e/src/app.e2e-spec.ts b/templates/app/angular/e2e/src/app.e2e-spec.ts deleted file mode 100644 index 544eb2359f..0000000000 --- a/templates/app/angular/e2e/src/app.e2e-spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AppPage } from './app.po'; -import { browser, logging } from 'protractor'; - -describe('workspace-project App', () => { - let page: AppPage; - - beforeEach(() => { - page = new AppPage(); - }); - - it('should display welcome message', () => { - page.navigateTo(); - expect(page.getTitleText()).toEqual('ng9-abp app is running!'); - }); - - afterEach(async () => { - // Assert that there are no errors emitted from the browser - const logs = await browser.manage().logs().get(logging.Type.BROWSER); - expect(logs).not.toContain(jasmine.objectContaining({ - level: logging.Level.SEVERE, - } as logging.Entry)); - }); -}); diff --git a/templates/app/angular/e2e/src/app.po.ts b/templates/app/angular/e2e/src/app.po.ts deleted file mode 100644 index b68475e0fc..0000000000 --- a/templates/app/angular/e2e/src/app.po.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { browser, by, element } from 'protractor'; - -export class AppPage { - navigateTo(): Promise { - return browser.get(browser.baseUrl) as Promise; - } - - getTitleText(): Promise { - return element(by.css('app-root .content span')).getText() as Promise; - } -} diff --git a/templates/app/angular/e2e/tsconfig.json b/templates/app/angular/e2e/tsconfig.json deleted file mode 100644 index c92199cfd6..0000000000 --- a/templates/app/angular/e2e/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/e2e", - "module": "commonjs", - "target": "es2018", - "types": [ - "jasmine", - "jasminewd2", - "node" - ] - } -} diff --git a/templates/app/angular/karma.conf.js b/templates/app/angular/karma.conf.js index 2b8c5f5f68..b2fd9c40e8 100644 --- a/templates/app/angular/karma.conf.js +++ b/templates/app/angular/karma.conf.js @@ -9,16 +9,28 @@ module.exports = function (config) { require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), - require('karma-coverage-istanbul-reporter'), + require('karma-coverage'), require('@angular-devkit/build-angular/plugins/karma') ], client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, clearContext: false // leave Jasmine Spec Runner output visible in browser }, - coverageIstanbulReporter: { - dir: require('path').join(__dirname, './coverage/ng9-abp'), - reports: ['html', 'lcovonly', 'text-summary'], - fixWebpackSourcePaths: true + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/MyProjectName'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] }, reporters: ['progress', 'kjhtml'], port: 9876, diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 3b24923a19..08f57214cc 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -5,10 +5,10 @@ "ng": "ng", "start": "ng serve --open", "build": "ng build", - "build:prod": "ng build --prod", + "build:prod": "ng build --configuration production", + "watch": "ng build --watch --configuration development", "test": "ng test", - "lint": "ng lint", - "e2e": "ng e2e" + "lint": "ng lint" }, "private": true, "dependencies": { @@ -20,39 +20,41 @@ "@abp/ng.tenant-management": "~4.3.2", "@abp/ng.theme.basic": "~4.3.2", "@abp/ng.theme.shared": "~4.3.2", - "@angular/animations": "~11.1.0", - "@angular/common": "~11.1.0", - "@angular/compiler": "~11.1.0", - "@angular/core": "~11.1.0", - "@angular/forms": "~11.1.0", - "@angular/platform-browser": "~11.1.0", - "@angular/platform-browser-dynamic": "~11.1.0", - "@angular/router": "~11.1.0", + "@angular/animations": "~12.0.0", + "@angular/common": "~12.0.0", + "@angular/compiler": "~12.0.0", + "@angular/core": "~12.0.0", + "@angular/forms": "~12.0.0", + "@angular/platform-browser-dynamic": "~12.0.0", + "@angular/platform-browser": "~12.0.0", + "@angular/router": "~12.0.0", "rxjs": "~6.6.0", - "tslib": "^2.0.0", - "zone.js": "~0.10.2" + "tslib": "^2.1.0", + "zone.js": "~0.11.4" }, "devDependencies": { "@abp/ng.schematics": "~4.3.2", - "@angular-devkit/build-angular": "~0.1101.0", - "@angular/cli": "~11.1.0", - "@angular/compiler-cli": "~11.1.0", - "@angular/language-service": "~11.1.0", - "@types/jasmine": "~3.5.0", - "@types/jasminewd2": "~2.0.3", + "@angular-devkit/build-angular": "~12.0.0", + "@angular-eslint/builder": "12.1.0", + "@angular-eslint/eslint-plugin-template": "12.1.0", + "@angular-eslint/eslint-plugin": "12.1.0", + "@angular-eslint/schematics": "12.1.0", + "@angular-eslint/template-parser": "12.1.0", + "@angular/cli": "~12.0.0", + "@angular/compiler-cli": "~12.0.0", + "@angular/language-service": "~12.0.4", + "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", - "codelyzer": "^6.0.1", - "jasmine-core": "~3.6.0", - "jasmine-spec-reporter": "~5.0.0", - "karma": "~5.2.3", + "@typescript-eslint/eslint-plugin": "4.23.0", + "@typescript-eslint/parser": "4.23.0", + "eslint": "^7.26.0", + "jasmine-core": "~3.7.0", "karma-chrome-launcher": "~3.1.0", - "karma-coverage-istanbul-reporter": "~3.0.2", - "karma-jasmine": "~4.0.0", + "karma-coverage": "~2.0.3", "karma-jasmine-html-reporter": "^1.5.0", - "ng-packagr": "^11.0.1", - "protractor": "~7.0.0", - "ts-node": "~8.3.0", - "tslint": "~6.1.0", - "typescript": "~4.1.3" + "karma-jasmine": "~4.0.0", + "karma": "~6.3.0", + "ng-packagr": "^12.0.5", + "typescript": "~4.2.3" } } diff --git a/templates/app/angular/src/polyfills.ts b/templates/app/angular/src/polyfills.ts index 01e24d6f6e..9d6601bd5d 100644 --- a/templates/app/angular/src/polyfills.ts +++ b/templates/app/angular/src/polyfills.ts @@ -17,21 +17,19 @@ import '@angular/localize/init'; * * Learn more in https://angular.io/guide/browser-support */ - /*************************************************************************************************** * BROWSER POLYFILLS */ - -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +/** + * IE11 requires the following for NgClass support on SVG elements + */ // import 'classlist.js'; // Run `npm install --save classlist.js`. - /** * Web Animations `@angular/platform-browser/animations` * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). */ // import 'web-animations-js'; // Run `npm install --save web-animations-js`. - /** * By default, zone.js will patch all possible macroTask and DomEvents * user can disable parts of macroTask/DomEvents patch by setting following flags @@ -55,12 +53,10 @@ import '@angular/localize/init'; * (window as any).__Zone_enable_cross_context_check = true; * */ - /*************************************************************************************************** * Zone JS is required by default for Angular itself. */ -import 'zone.js/dist/zone'; // Included with Angular CLI. - +import 'zone.js'; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS diff --git a/templates/app/angular/src/test.ts b/templates/app/angular/src/test.ts index 50193eb0f2..61925f9803 100644 --- a/templates/app/angular/src/test.ts +++ b/templates/app/angular/src/test.ts @@ -1,14 +1,18 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files -import 'zone.js/dist/zone-testing'; import { getTestBed } from '@angular/core/testing'; import { BrowserDynamicTestingModule, - platformBrowserDynamicTesting + platformBrowserDynamicTesting, } from '@angular/platform-browser-dynamic/testing'; +import 'zone.js/testing'; declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { + context( + path: string, + deep?: boolean, + filter?: RegExp + ): { keys(): string[]; (id: string): T; }; diff --git a/templates/app/angular/tsconfig.app.json b/templates/app/angular/tsconfig.app.json index 29f5f5864e..82d91dc4a4 100644 --- a/templates/app/angular/tsconfig.app.json +++ b/templates/app/angular/tsconfig.app.json @@ -1,9 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/app", "types": [] }, - "files": ["src/main.ts", "src/polyfills.ts"], - "include": ["src/**/*.d.ts"] + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] } diff --git a/templates/app/angular/tsconfig.json b/templates/app/angular/tsconfig.json index 7a5bf82308..87bb073178 100644 --- a/templates/app/angular/tsconfig.json +++ b/templates/app/angular/tsconfig.json @@ -1,3 +1,4 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "compileOnSave": false, "compilerOptions": { @@ -7,20 +8,20 @@ "declaration": false, "downlevelIteration": true, "experimentalDecorators": true, - "module": "esnext", "moduleResolution": "node", "importHelpers": true, - "target": "es2015", - "typeRoots": ["node_modules/@types"], - "lib": ["es2018", "dom"], + "target": "es2017", + "module": "es2020", + "lib": [ + "es2018", + "dom" + ], "paths": { "@proxy": ["src/app/proxy/index.ts"], "@proxy/*": ["src/app/proxy/*"] } }, "angularCompilerOptions": { - "fullTemplateTypeCheck": true, - "strictInjectionParameters": true, - "enableIvy": true + "enableI18nLegacyMessageIdFormat": false } } diff --git a/templates/app/angular/tsconfig.spec.json b/templates/app/angular/tsconfig.spec.json index 6400fde7d5..092345b02e 100644 --- a/templates/app/angular/tsconfig.spec.json +++ b/templates/app/angular/tsconfig.spec.json @@ -1,10 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/spec", "types": [ - "jasmine", - "node" + "jasmine" ] }, "files": [ diff --git a/templates/app/angular/tslint.json b/templates/app/angular/tslint.json deleted file mode 100644 index 38e205bf3d..0000000000 --- a/templates/app/angular/tslint.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "extends": "tslint:recommended", - "rules": { - "align": { - "options": [ - "parameters", - "statements" - ] - }, - "array-type": false, - "arrow-parens": false, - "arrow-return-shorthand": true, - "curly": true, - "deprecation": { - "severity": "warning" - }, - "component-class-suffix": true, - "contextual-lifecycle": true, - "directive-class-suffix": true, - "directive-selector": [ - true, - "attribute", - "app", - "camelCase" - ], - "component-selector": [ - true, - "element", - "app", - "kebab-case" - ], - "eofline": true, - "import-blacklist": [ - true, - "rxjs/Rx" - ], - "import-spacing": true, - "indent": { - "options": [ - "spaces" - ] - }, - "interface-name": false, - "max-classes-per-file": false, - "max-line-length": [ - true, - 140 - ], - "member-access": false, - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-consecutive-blank-lines": false, - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-empty": false, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-non-null-assertion": true, - "no-redundant-jsdoc": true, - "no-switch-case-fall-through": true, - "no-var-requires": false, - "object-literal-key-quotes": [ - true, - "as-needed" - ], - "object-literal-sort-keys": false, - "ordered-imports": false, - "quotemark": [ - true, - "single" - ], - "semicolon": { - "options": [ - "always", - "ignore-bound-class-methods" - ] - }, - "space-before-function-paren": { - "options": { - "anonymous": "never", - "asyncArrow": "always", - "constructor": "never", - "method": "never", - "named": "never" - } - }, - "trailing-comma": false, - "no-conflicting-lifecycle": true, - "no-host-metadata-property": true, - "no-input-rename": true, - "no-inputs-metadata-property": true, - "no-output-native": true, - "no-output-on-prefix": true, - "no-output-rename": true, - "no-outputs-metadata-property": true, - "template-banana-in-box": true, - "template-no-negated-async": true, - "object-literal-shorthand": false, - "typedef-whitespace": { - "options": [ - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - }, - { - "call-signature": "onespace", - "index-signature": "onespace", - "parameter": "onespace", - "property-declaration": "onespace", - "variable-declaration": "onespace" - } - ] - }, - "use-lifecycle-interface": true, - "use-pipe-transform-interface": true - , "variable-name": { - "options": [ - "ban-keywords", - "check-format", - "allow-pascal-case" - ] - }, - "whitespace": { - "options": [ - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type", - "check-typecast" - ] - } -}, - "rulesDirectory": [ - "codelyzer" - ] -} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210531084225_Initial.Designer.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210615091011_Initial.Designer.cs similarity index 99% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210531084225_Initial.Designer.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210615091011_Initial.Designer.cs index 48b67399a1..060cb48e8a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210531084225_Initial.Designer.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210615091011_Initial.Designer.cs @@ -11,7 +11,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(MyProjectNameDbContext))] - [Migration("20210531084225_Initial")] + [Migration("20210615091011_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -20,7 +20,7 @@ namespace MyCompanyName.MyProjectName.Migrations modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.6") + .HasAnnotation("ProductVersion", "5.0.7") .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => @@ -71,9 +71,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210531084225_Initial.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210615091011_Initial.cs similarity index 99% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210531084225_Initial.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210615091011_Initial.cs index af7fb7ee1b..8a02b53ba3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210531084225_Initial.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20210615091011_Initial.cs @@ -28,7 +28,7 @@ namespace MyCompanyName.MyProjectName.Migrations BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), HttpMethod = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - Exceptions = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), + Exceptions = table.Column(type: "nvarchar(max)", nullable: true), Comments = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), HttpStatusCode = table.Column(type: "int", nullable: true), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs index 3612ae96a4..56ac0762cc 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs @@ -18,7 +18,7 @@ namespace MyCompanyName.MyProjectName.Migrations modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.6") + .HasAnnotation("ProductVersion", "5.0.7") .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => @@ -69,9 +69,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/WebContentDirectoryFinder.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/WebContentDirectoryFinder.cs index 2d37c1007e..d3796af4d4 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/WebContentDirectoryFinder.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests/WebContentDirectoryFinder.cs @@ -13,21 +13,32 @@ namespace MyCompanyName.MyProjectName { public static string CalculateContentRootFolder() { - var domainAssemblyDirectoryPath = Path.GetDirectoryName(typeof(MyProjectNameDomainModule).Assembly.Location); + var domainAssemblyDirectoryPath = + Path.GetDirectoryName(typeof(MyProjectNameDomainModule).Assembly.Location); if (domainAssemblyDirectoryPath == null) { - throw new Exception($"Could not find location of {typeof(MyProjectNameDomainModule).Assembly.FullName} assembly!"); + throw new Exception( + $"Could not find location of {typeof(MyProjectNameDomainModule).Assembly.FullName} assembly!"); } var directoryInfo = new DirectoryInfo(domainAssemblyDirectoryPath); - while (!DirectoryContains(directoryInfo.FullName, "MyCompanyName.MyProjectName.sln")) + + if (Environment.GetEnvironmentVariable("NCrunch") == "1") { - if (directoryInfo.Parent == null) + while (!DirectoryContains(directoryInfo.FullName, "MyCompanyName.MyProjectName.Web.csproj", SearchOption.AllDirectories)) { - throw new Exception("Could not find content root folder!"); + directoryInfo = directoryInfo.Parent ?? throw new Exception("Could not find content root folder!"); } - directoryInfo = directoryInfo.Parent; + var webProject = Directory.GetFiles(directoryInfo.FullName, string.Empty, SearchOption.AllDirectories) + .First(filePath => string.Equals(Path.GetFileName(filePath), "MyCompanyName.MyProjectName.Web.csproj")); + + return Path.GetDirectoryName(webProject); + } + + while (!DirectoryContains(directoryInfo.FullName, "MyCompanyName.MyProjectName.sln")) + { + directoryInfo = directoryInfo.Parent ?? throw new Exception("Could not find content root folder!"); } var webFolder = Path.Combine(directoryInfo.FullName, $"src{Path.DirectorySeparatorChar}MyCompanyName.MyProjectName.Web"); @@ -39,9 +50,11 @@ namespace MyCompanyName.MyProjectName throw new Exception("Could not find root folder of the web project!"); } - private static bool DirectoryContains(string directory, string fileName) + private static bool DirectoryContains(string directory, string fileName, + SearchOption searchOption = SearchOption.TopDirectoryOnly) { - return Directory.GetFiles(directory).Any(filePath => string.Equals(Path.GetFileName(filePath), fileName)); + return Directory.GetFiles(directory, string.Empty, searchOption) + .Any(filePath => string.Equals(Path.GetFileName(filePath), fileName)); } } } diff --git a/templates/module/angular/.eslintrc.json b/templates/module/angular/.eslintrc.json new file mode 100644 index 0000000000..47c17dd9dd --- /dev/null +++ b/templates/module/angular/.eslintrc.json @@ -0,0 +1,50 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended" + ], + "rules": {} + } + ] +} diff --git a/templates/module/angular/.gitignore b/templates/module/angular/.gitignore index 6b1b9c15e7..de51f68a2c 100644 --- a/templates/module/angular/.gitignore +++ b/templates/module/angular/.gitignore @@ -12,7 +12,6 @@ # profiling files chrome-profiler-events*.json -speed-measure-plugin*.json # IDEs and editors /.idea @@ -43,4 +42,4 @@ testem.log # System Files .DS_Store -Thumbs.db \ No newline at end of file +Thumbs.db diff --git a/templates/module/angular/angular.json b/templates/module/angular/angular.json index f7c5426772..bc791b4563 100644 --- a/templates/module/angular/angular.json +++ b/templates/module/angular/angular.json @@ -1,5 +1,8 @@ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, "version": 1, "newProjectRoot": "projects", "projects": { @@ -12,14 +15,17 @@ "build": { "builder": "@angular-devkit/build-angular:ng-packagr", "options": { - "tsConfig": "projects/my-project-name/tsconfig.lib.json", "project": "projects/my-project-name/ng-package.json" }, "configurations": { "production": { "tsConfig": "projects/my-project-name/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "projects/my-project-name/tsconfig.lib.json" } - } + }, + "defaultConfiguration": "production" }, "test": { "builder": "@angular-devkit/build-angular:karma", @@ -30,13 +36,12 @@ } }, "lint": { - "builder": "@angular-devkit/build-angular:tslint", + "builder": "@angular-eslint/builder:lint", "options": { - "tsConfig": [ - "projects/my-project-name/tsconfig.lib.json", - "projects/my-project-name/tsconfig.spec.json" - ], - "exclude": ["**/node_modules/**"] + "lintFilePatterns": [ + "projects/my-project-name/**/*.ts", + "projects/my-project-name/**/*.html" + ] } } } @@ -60,7 +65,7 @@ "main": "projects/dev-app/src/main.ts", "polyfills": "projects/dev-app/src/polyfills.ts", "tsConfig": "projects/dev-app/tsconfig.app.json", - "aot": true, + "inlineStyleLanguage": "scss", "allowedCommonJsDependencies": ["chart.js", "js-sha256"], "assets": ["projects/dev-app/src/favicon.ico", "projects/dev-app/src/assets"], "styles": [ @@ -105,20 +110,6 @@ }, "configurations": { "production": { - "tsConfig": "projects/dev-app/tsconfig.prod.json", - "fileReplacements": [ - { - "replace": "projects/dev-app/src/environments/environment.ts", - "with": "projects/dev-app/src/environments/environment.prod.ts" - } - ], - "optimization": true, - "outputHashing": "all", - "sourceMap": false, - "namedChunks": false, - "extractLicenses": true, - "vendorChunk": false, - "buildOptimizer": true, "budgets": [ { "type": "initial", @@ -130,20 +121,37 @@ "maximumWarning": "6kb", "maximumError": "10kb" } - ] + ], + "fileReplacements": [ + { + "replace": "projects/dev-app/src/environments/environment.ts", + "with": "projects/dev-app/src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true } - } + }, + "defaultConfiguration": "production" }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", - "options": { - "browserTarget": "dev-app:build" - }, "configurations": { "production": { "browserTarget": "dev-app:build:production" + }, + "development": { + "browserTarget": "dev-app:build:development" } - } + }, + "defaultConfiguration": "development" }, "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", @@ -158,6 +166,7 @@ "polyfills": "projects/dev-app/src/polyfills.ts", "tsConfig": "projects/dev-app/tsconfig.spec.json", "karmaConfig": "projects/dev-app/karma.conf.js", + "inlineStyleLanguage": "scss", "assets": ["projects/dev-app/src/favicon.ico", "projects/dev-app/src/assets"], "styles": [ "node_modules/bootstrap/dist/css/bootstrap.min.css", @@ -172,33 +181,13 @@ } }, "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "projects/dev-app/tsconfig.app.json", - "projects/dev-app/tsconfig.spec.json", - "projects/dev-app/e2e/tsconfig.json" - ], - "exclude": ["**/node_modules/**"] - } - }, - "e2e": { - "builder": "@angular-devkit/build-angular:protractor", + "builder": "@angular-eslint/builder:lint", "options": { - "protractorConfig": "projects/dev-app/e2e/protractor.conf.js", - "devServerTarget": "dev-app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "dev-app:serve:production" - } + "lintFilePatterns": ["projects/dev-app/**/*.ts", "projects/dev-app/**/*.html"] } } } } }, - "cli": { - "analytics": false - }, "defaultProject": "dev-app" } diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 4bb6ce8012..b5e6468ef6 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -1,5 +1,5 @@ { - "name": "my-project-name", + "name": "MyProjectName", "version": "0.0.0", "scripts": { "ng": "ng", @@ -23,40 +23,41 @@ "@abp/ng.tenant-management": "~4.3.2", "@abp/ng.theme.basic": "~4.3.2", "@abp/ng.theme.shared": "~4.3.2", - "@angular/animations": "~11.1.0", - "@angular/common": "~11.1.0", - "@angular/compiler": "~11.1.0", - "@angular/core": "~11.1.0", - "@angular/forms": "~11.1.0", - "@angular/platform-browser": "~11.1.0", - "@angular/platform-browser-dynamic": "~11.1.0", - "@angular/router": "~11.1.0", + "@angular/animations": "~12.0.0", + "@angular/common": "~12.0.0", + "@angular/compiler": "~12.0.0", + "@angular/core": "~12.0.0", + "@angular/forms": "~12.0.0", + "@angular/platform-browser": "~12.0.0", + "@angular/platform-browser-dynamic": "~12.0.0", + "@angular/router": "~12.0.0", "rxjs": "~6.6.0", - "tslib": "^2.0.0", - "zone.js": "~0.10.2" + "tslib": "^2.1.0", + "zone.js": "~0.11.4" }, "devDependencies": { "@abp/ng.schematics": "~4.3.2", - "@angular-devkit/build-angular": "~0.1101.1", - "@angular/cli": "~11.1.1", - "@angular/compiler-cli": "~11.1.0", - "@angular/language-service": "~11.1.0", - "@types/jasmine": "~3.5.0", - "@types/jasminewd2": "~2.0.3", + "symlink-manager": "^1.5.0", + "@angular-devkit/build-angular": "~12.0.4", + "@angular-eslint/builder": "12.1.0", + "@angular-eslint/eslint-plugin": "12.1.0", + "@angular-eslint/eslint-plugin-template": "12.1.0", + "@angular-eslint/schematics": "12.1.0", + "@angular-eslint/template-parser": "12.1.0", + "@angular/cli": "~12.0.0", + "@angular/compiler-cli": "~12.0.0", + "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", - "codelyzer": "^6.0.1", - "jasmine-core": "~3.6.0", - "jasmine-spec-reporter": "~5.0.0", - "karma": "~5.2.3", + "@typescript-eslint/eslint-plugin": "4.23.0", + "@typescript-eslint/parser": "4.23.0", + "eslint": "^7.26.0", + "jasmine-core": "~3.7.0", + "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", - "karma-coverage-istanbul-reporter": "~3.0.2", + "karma-coverage": "~2.0.3", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", - "ng-packagr": "^11.0.1", - "protractor": "~7.0.0", - "symlink-manager": "^1.5.0", - "ts-node": "~8.3.0", - "tslint": "~6.1.0", - "typescript": "~4.1.3" + "ng-packagr": "^12.0.0", + "typescript": "~4.2.3" } } diff --git a/templates/module/angular/projects/dev-app/.browserslistrc b/templates/module/angular/projects/dev-app/.browserslistrc index 80848532e4..427441dc93 100644 --- a/templates/module/angular/projects/dev-app/.browserslistrc +++ b/templates/module/angular/projects/dev-app/.browserslistrc @@ -2,11 +2,16 @@ # For additional information regarding the format and rule options, please see: # https://github.com/browserslist/browserslist#queries +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + # You can see what browsers were selected by your queries by running: # npx browserslist -> 0.5% -last 2 versions +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions Firefox ESR -not dead -not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file +not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. diff --git a/templates/module/angular/projects/dev-app/.eslintrc.json b/templates/module/angular/projects/dev-app/.eslintrc.json new file mode 100644 index 0000000000..37c0209380 --- /dev/null +++ b/templates/module/angular/projects/dev-app/.eslintrc.json @@ -0,0 +1,44 @@ +{ + "extends": "../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "projects/dev-app/tsconfig.app.json", + "projects/dev-app/tsconfig.spec.json" + ], + "createDefaultProgram": true + }, + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "rules": {} + } + ] +} diff --git a/templates/module/angular/projects/dev-app/e2e/protractor.conf.js b/templates/module/angular/projects/dev-app/e2e/protractor.conf.js deleted file mode 100644 index 7c798cfff0..0000000000 --- a/templates/module/angular/projects/dev-app/e2e/protractor.conf.js +++ /dev/null @@ -1,32 +0,0 @@ -// @ts-check -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -const { SpecReporter } = require('jasmine-spec-reporter'); - -/** - * @type { import("protractor").Config } - */ -exports.config = { - allScriptsTimeout: 11000, - specs: [ - './src/**/*.e2e-spec.ts' - ], - capabilities: { - browserName: 'chrome' - }, - directConnect: true, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - onPrepare() { - require('ts-node').register({ - project: require('path').join(__dirname, './tsconfig.json') - }); - jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); - } -}; \ No newline at end of file diff --git a/templates/module/angular/projects/dev-app/e2e/src/app.e2e-spec.ts b/templates/module/angular/projects/dev-app/e2e/src/app.e2e-spec.ts deleted file mode 100644 index e8eda49d2a..0000000000 --- a/templates/module/angular/projects/dev-app/e2e/src/app.e2e-spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AppPage } from './app.po'; -import { browser, logging } from 'protractor'; - -describe('workspace-project App', () => { - let page: AppPage; - - beforeEach(() => { - page = new AppPage(); - }); - - it('should display welcome message', () => { - page.navigateTo(); - expect(page.getTitleText()).toEqual('dev-app app is running!'); - }); - - afterEach(async () => { - // Assert that there are no errors emitted from the browser - const logs = await browser.manage().logs().get(logging.Type.BROWSER); - expect(logs).not.toContain(jasmine.objectContaining({ - level: logging.Level.SEVERE, - } as logging.Entry)); - }); -}); diff --git a/templates/module/angular/projects/dev-app/e2e/src/app.po.ts b/templates/module/angular/projects/dev-app/e2e/src/app.po.ts deleted file mode 100644 index b68475e0fc..0000000000 --- a/templates/module/angular/projects/dev-app/e2e/src/app.po.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { browser, by, element } from 'protractor'; - -export class AppPage { - navigateTo(): Promise { - return browser.get(browser.baseUrl) as Promise; - } - - getTitleText(): Promise { - return element(by.css('app-root .content span')).getText() as Promise; - } -} diff --git a/templates/module/angular/projects/dev-app/e2e/tsconfig.json b/templates/module/angular/projects/dev-app/e2e/tsconfig.json deleted file mode 100644 index 3d809e80f6..0000000000 --- a/templates/module/angular/projects/dev-app/e2e/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../../tsconfig.json", - "compilerOptions": { - "outDir": "../../../out-tsc/e2e", - "module": "commonjs", - "target": "es2018", - "types": [ - "jasmine", - "jasminewd2", - "node" - ] - } -} diff --git a/templates/module/angular/projects/dev-app/karma.conf.js b/templates/module/angular/projects/dev-app/karma.conf.js index 6059f553f2..d693269c53 100644 --- a/templates/module/angular/projects/dev-app/karma.conf.js +++ b/templates/module/angular/projects/dev-app/karma.conf.js @@ -9,16 +9,28 @@ module.exports = function (config) { require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), - require('karma-coverage-istanbul-reporter'), + require('karma-coverage'), require('@angular-devkit/build-angular/plugins/karma') ], client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, clearContext: false // leave Jasmine Spec Runner output visible in browser }, - coverageIstanbulReporter: { + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { dir: require('path').join(__dirname, '../../coverage/dev-app'), - reports: ['html', 'lcovonly', 'text-summary'], - fixWebpackSourcePaths: true + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] }, reporters: ['progress', 'kjhtml'], port: 9876, diff --git a/templates/module/angular/projects/dev-app/favicon.ico b/templates/module/angular/projects/dev-app/src/favicon.ico similarity index 100% rename from templates/module/angular/projects/dev-app/favicon.ico rename to templates/module/angular/projects/dev-app/src/favicon.ico diff --git a/templates/module/angular/projects/dev-app/src/polyfills.ts b/templates/module/angular/projects/dev-app/src/polyfills.ts index 6e00c561ed..9d6601bd5d 100644 --- a/templates/module/angular/projects/dev-app/src/polyfills.ts +++ b/templates/module/angular/projects/dev-app/src/polyfills.ts @@ -17,21 +17,19 @@ import '@angular/localize/init'; * * Learn more in https://angular.io/guide/browser-support */ - /*************************************************************************************************** * BROWSER POLYFILLS */ - -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +/** + * IE11 requires the following for NgClass support on SVG elements + */ // import 'classlist.js'; // Run `npm install --save classlist.js`. - /** * Web Animations `@angular/platform-browser/animations` * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). */ // import 'web-animations-js'; // Run `npm install --save web-animations-js`. - /** * By default, zone.js will patch all possible macroTask and DomEvents * user can disable parts of macroTask/DomEvents patch by setting following flags @@ -55,11 +53,10 @@ import '@angular/localize/init'; * (window as any).__Zone_enable_cross_context_check = true; * */ - /*************************************************************************************************** * Zone JS is required by default for Angular itself. */ -import 'zone.js/dist/zone'; // Included with Angular CLI. +import 'zone.js'; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS diff --git a/templates/module/angular/projects/dev-app/src/test.ts b/templates/module/angular/projects/dev-app/src/test.ts index 50193eb0f2..2042356408 100644 --- a/templates/module/angular/projects/dev-app/src/test.ts +++ b/templates/module/angular/projects/dev-app/src/test.ts @@ -1,6 +1,6 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files -import 'zone.js/dist/zone-testing'; +import 'zone.js/testing'; import { getTestBed } from '@angular/core/testing'; import { BrowserDynamicTestingModule, diff --git a/templates/module/angular/projects/dev-app/tslint.json b/templates/module/angular/projects/dev-app/tslint.json deleted file mode 100644 index 19e8161a0b..0000000000 --- a/templates/module/angular/projects/dev-app/tslint.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": { - "directive-selector": [ - true, - "attribute", - "app", - "camelCase" - ], - "component-selector": [ - true, - "element", - "app", - "kebab-case" - ] - } -} diff --git a/templates/module/angular/projects/my-project-name/.eslintrc.json b/templates/module/angular/projects/my-project-name/.eslintrc.json new file mode 100644 index 0000000000..02085206b7 --- /dev/null +++ b/templates/module/angular/projects/my-project-name/.eslintrc.json @@ -0,0 +1,44 @@ +{ + "extends": "../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "projects/my-project-name/tsconfig.lib.json", + "projects/my-project-name/tsconfig.spec.json" + ], + "createDefaultProgram": true + }, + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "lib", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "lib", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "rules": {} + } + ] +} diff --git a/templates/module/angular/projects/my-project-name/README.md b/templates/module/angular/projects/my-project-name/README.md index 5181227a50..d2c8810fbc 100644 --- a/templates/module/angular/projects/my-project-name/README.md +++ b/templates/module/angular/projects/my-project-name/README.md @@ -1,6 +1,6 @@ # MyProjectName -This is a startup project based on the ABP framework. For more information, visit abp.io=9", + "@angular/core": ">=9", "@abp/ng.core": ">=4.3.2", "@abp/ng.theme.shared": ">=4.3.2" }, "dependencies": { - "tslib": "^2.0.0" -} + "tslib": "^2.1.0" + } } diff --git a/templates/module/angular/projects/my-project-name/src/test.ts b/templates/module/angular/projects/my-project-name/src/test.ts index 303b32a220..52e55168eb 100644 --- a/templates/module/angular/projects/my-project-name/src/test.ts +++ b/templates/module/angular/projects/my-project-name/src/test.ts @@ -1,7 +1,7 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; +import 'zone.js'; +import 'zone.js/testing'; import { getTestBed } from '@angular/core/testing'; import { BrowserDynamicTestingModule, diff --git a/templates/module/angular/projects/my-project-name/tsconfig.lib.json b/templates/module/angular/projects/my-project-name/tsconfig.lib.json index 36d66a0283..8da4414fb7 100644 --- a/templates/module/angular/projects/my-project-name/tsconfig.lib.json +++ b/templates/module/angular/projects/my-project-name/tsconfig.lib.json @@ -1,18 +1,20 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "extends": "../../tsconfig.prod.json", "compilerOptions": { "outDir": "../../out-tsc/lib", - "declarationMap": true, "target": "es2015", "declaration": true, + "declarationMap": true, "inlineSources": true, "types": [], - "lib": ["dom", "es2018"] - }, - "angularCompilerOptions": { - "skipTemplateCodegen": true, - "strictMetadataEmit": true, - "enableResourceInlining": true + "lib": [ + "dom", + "es2018" + ] }, - "exclude": ["src/test.ts", "**/*.spec.ts"] + "exclude": [ + "src/test.ts", + "**/*.spec.ts" + ] } diff --git a/templates/module/angular/projects/my-project-name/tsconfig.lib.prod.json b/templates/module/angular/projects/my-project-name/tsconfig.lib.prod.json index 04c0e66277..331d0ecb05 100644 --- a/templates/module/angular/projects/my-project-name/tsconfig.lib.prod.json +++ b/templates/module/angular/projects/my-project-name/tsconfig.lib.prod.json @@ -1,9 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "extends": "./tsconfig.lib.json", "compilerOptions": { "declarationMap": false }, "angularCompilerOptions": { + "compilationMode": "partial", "enableIvy": false } } diff --git a/templates/module/angular/projects/my-project-name/tsconfig.spec.json b/templates/module/angular/projects/my-project-name/tsconfig.spec.json index 16da33db07..715dd0a5d2 100644 --- a/templates/module/angular/projects/my-project-name/tsconfig.spec.json +++ b/templates/module/angular/projects/my-project-name/tsconfig.spec.json @@ -1,10 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/spec", "types": [ - "jasmine", - "node" + "jasmine" ] }, "files": [ diff --git a/templates/module/angular/projects/my-project-name/tslint.json b/templates/module/angular/projects/my-project-name/tslint.json deleted file mode 100644 index 124133f849..0000000000 --- a/templates/module/angular/projects/my-project-name/tslint.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": { - "directive-selector": [ - true, - "attribute", - "lib", - "camelCase" - ], - "component-selector": [ - true, - "element", - "lib", - "kebab-case" - ] - } -} diff --git a/templates/module/angular/tsconfig.prod.json b/templates/module/angular/tsconfig.prod.json index 8cbc5cd8a7..bd2235775b 100644 --- a/templates/module/angular/tsconfig.prod.json +++ b/templates/module/angular/tsconfig.prod.json @@ -7,14 +7,16 @@ "declaration": false, "downlevelIteration": true, "experimentalDecorators": true, - "module": "esnext", "moduleResolution": "node", "importHelpers": true, - "target": "es2015", - "lib": ["es2018", "dom"] + "target": "es2017", + "module": "es2020", + "lib": [ + "es2018", + "dom" + ], }, "angularCompilerOptions": { - "fullTemplateTypeCheck": true, - "strictInjectionParameters": true + "enableI18nLegacyMessageIdFormat": false } } diff --git a/templates/module/angular/tslint.json b/templates/module/angular/tslint.json deleted file mode 100644 index 2b01f826bc..0000000000 --- a/templates/module/angular/tslint.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "extends": "tslint:recommended", - "rulesDirectory": [ - "codelyzer" - ], - "rules": { - "align": { - "options": [ - "parameters", - "statements" - ] - }, - "array-type": false, - "arrow-return-shorthand": true, - "curly": true, - "deprecation": { - "severity": "warning" - }, - "eofline": true, - "import-blacklist": [ - true, - "rxjs/Rx" - ], - "import-spacing": true, - "indent": { - "options": [ - "spaces" - ] - }, - "max-classes-per-file": false, - "max-line-length": [ - true, - 140 - ], - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-empty": false, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-non-null-assertion": true, - "no-redundant-jsdoc": true, - "no-switch-case-fall-through": true, - "no-var-requires": false, - "object-literal-key-quotes": [ - true, - "as-needed" - ], - "quotemark": [ - true, - "single" - ], - "semicolon": { - "options": [ - "always", - "ignore-bound-class-methods" - ] - }, - "space-before-function-paren": { - "options": { - "anonymous": "never", - "asyncArrow": "always", - "constructor": "never", - "method": "never", - "named": "never" - } - }, - "typedef-whitespace": { - "options": [ - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - }, - { - "call-signature": "onespace", - "index-signature": "onespace", - "parameter": "onespace", - "property-declaration": "onespace", - "variable-declaration": "onespace" - } - ] - }, - "variable-name": { - "options": [ - "ban-keywords", - "check-format", - "allow-pascal-case" - ] - }, - "whitespace": { - "options": [ - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type", - "check-typecast" - ] - }, - "component-class-suffix": true, - "contextual-lifecycle": true, - "directive-class-suffix": true, - "no-conflicting-lifecycle": true, - "no-host-metadata-property": true, - "no-input-rename": true, - "no-inputs-metadata-property": true, - "no-output-native": true, - "no-output-on-prefix": true, - "no-output-rename": true, - "no-outputs-metadata-property": true, - "template-banana-in-box": true, - "template-no-negated-async": true, - "use-lifecycle-interface": true, - "use-pipe-transform-interface": true, - "object-literal-shorthand": false - } -} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528061540_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528093547_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528061540_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528093547_Initial.Designer.cs index 5e59d21c1c..3188e8f984 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528061540_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528093547_Initial.Designer.cs @@ -11,7 +11,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20210528061540_Initial")] + [Migration("20210528093547_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -71,9 +71,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528061540_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528093547_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528061540_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528093547_Initial.cs index c8f1e05a17..c982c31c32 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528061540_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/20210528093547_Initial.cs @@ -28,7 +28,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), HttpMethod = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - Exceptions = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), + Exceptions = table.Column(type: "nvarchar(max)", nullable: true), Comments = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), HttpStatusCode = table.Column(type: "int", nullable: true), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs index 04fcfa1d68..2d2e6dafd5 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Migrations/UnifiedDbContextModelSnapshot.cs @@ -69,9 +69,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20201028014236_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20210528093513_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20201028014236_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20210528093513_Initial.Designer.cs index bda1f6108d..2a8dcb3b75 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20201028014236_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20210528093513_Initial.Designer.cs @@ -11,17 +11,17 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(IdentityServerHostMigrationsDbContext))] - [Migration("20201028014236_Initial")] + [Migration("20210528093513_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .UseIdentityColumns() .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.0-rc.2.20475.6"); + .HasAnnotation("ProductVersion", "5.0.6") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { @@ -71,9 +71,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20201028014236_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20210528093513_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20201028014236_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20210528093513_Initial.cs index 78dcb6359e..bf39015d0f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20201028014236_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20210528093513_Initial.cs @@ -28,7 +28,7 @@ namespace MyCompanyName.MyProjectName.Migrations BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), HttpMethod = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - Exceptions = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), + Exceptions = table.Column(type: "nvarchar(max)", nullable: true), Comments = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), HttpStatusCode = table.Column(type: "int", nullable: true), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs index 29deeab756..35ad1df358 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs @@ -16,10 +16,10 @@ namespace MyCompanyName.MyProjectName.Migrations { #pragma warning disable 612, 618 modelBuilder - .UseIdentityColumns() .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.0-rc.2.20475.6"); + .HasAnnotation("ProductVersion", "5.0.6") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { @@ -69,9 +69,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20201028014311_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20210528093522_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20201028014311_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20210528093522_Initial.Designer.cs index 4958727637..43912d5e1a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20201028014311_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20210528093522_Initial.Designer.cs @@ -11,17 +11,17 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20201028014311_Initial")] + [Migration("20210528093522_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .UseIdentityColumns() .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.0-rc.2.20475.6"); + .HasAnnotation("ProductVersion", "5.0.6") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { @@ -71,9 +71,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20201028014311_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20210528093522_Initial.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20201028014311_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20210528093522_Initial.cs index 392499da58..b5e7c7492e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20201028014311_Initial.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/20210528093522_Initial.cs @@ -28,7 +28,7 @@ namespace MyCompanyName.MyProjectName.Migrations BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), HttpMethod = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - Exceptions = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), + Exceptions = table.Column(type: "nvarchar(max)", nullable: true), Comments = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), HttpStatusCode = table.Column(type: "int", nullable: true), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 7b90b1954f..bc4abaa1af 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -16,10 +16,10 @@ namespace MyCompanyName.MyProjectName.Migrations { #pragma warning disable 612, 618 modelBuilder - .UseIdentityColumns() .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.0-rc.2.20475.6"); + .HasAnnotation("ProductVersion", "5.0.6") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { @@ -69,9 +69,7 @@ namespace MyCompanyName.MyProjectName.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int")