diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
index f772006632..5d6e081085 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
@@ -119,6 +119,8 @@
"Events": "Events",
"Volo.AbpIo.Domain:080000": "There is already a purchase item named \"{Name}\"",
"MasteringAbpFrameworkBook": "Book: Mastering ABP Framework",
- "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more."
+ "ABPIO-CommonPreferenceDefinition": "Get the latest news about ABP Platform like new posts, events and more.",
+ "BuiltOn": "Built-on",
+ "AbpFramework": "ABP Framework"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
index 550374b48c..0b9d6d96b2 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
@@ -183,7 +183,7 @@
"InstallABPCLIInfo": "ABP CLI is the fastest way to start a new solution with the ABP framework. Install the ABP CLI using a command line window:",
"DifferentLevelOfNamespaces": "You can use different levels of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.",
"ABPCLIExamplesInfo": "The new command creates a layered MVC application with Entity Framework Core as the database provider. However, it has additional options.",
- "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.",
+ "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.",
"Optional": "Optional",
"LocalFrameworkRef": "Keep the local project reference for the framework packages.",
"BlobStoring": "BLOB Storing",
diff --git a/docs/en/API/API-Versioning.md b/docs/en/API/API-Versioning.md
index 5eefb129c3..68343417de 100644
--- a/docs/en/API/API-Versioning.md
+++ b/docs/en/API/API-Versioning.md
@@ -26,7 +26,7 @@ public override void ConfigureServices(ServiceConfigurationContext context)
## C# and JavaScript Static Client Proxies
-This feature does not compatible with [URL Path Versioning](https://github.com/dotnet/aspnet-api-versioning/wiki/Versioning-via-the-URL-Path), I suggest you always use [Versioning-via-the-Query-String](https://github.com/dotnet/aspnet-api-versioning/wiki/Versioning-via-the-Query-String).
+This feature does not compatible with [URL Path Versioning](https://github.com/dotnet/aspnet-api-versioning/wiki/Versioning-via-the-URL-Path), we suggest to use [Versioning-via-the-Query-String](https://github.com/dotnet/aspnet-api-versioning/wiki/Versioning-via-the-Query-String).
### Example
@@ -45,7 +45,7 @@ public interface IBookV2AppService : IApplicationService
}
```
-**HttpApi Controillers:**
+**HttpApi Controllers:**
```cs
[Area(BookStoreRemoteServiceConsts.ModuleName)]
[RemoteService(Name = BookStoreRemoteServiceConsts.RemoteServiceName)]
@@ -175,7 +175,7 @@ bookStore.books.bookV2.getAsyncByIsbn = function(isbn, api_version, ajaxParams)
```
-## Manually change version
+## Changing version manually
If an application service class supports multiple versions. You can inject `ICurrentApiVersionInfo` to switch versions in C#.
@@ -337,13 +337,15 @@ public override void OnApplicationInitialization(ApplicationInitializationContex
}
```
-## Custom multi-version API controller.
+## Custom multi-version API controller
-ABP Framework will not affect to your APIs, you can freely implement your APIs according to Microsoft's documentation.
+ABP Framework will not affect to your APIs, you can freely implement your APIs according to the Microsoft's documentation.
-Get more from https://github.com/dotnet/aspnet-api-versioning/wiki
+Further information, see https://github.com/dotnet/aspnet-api-versioning/wiki
## Sample source code
-You can get the complete sample source code in https://github.com/abpframework/abp-samples/tree/master/Api-Versioning
\ No newline at end of file
+Follow the link below to get the sample's complete source-code
+
+https://github.com/abpframework/abp-samples/tree/master/Api-Versioning
diff --git a/docs/en/API/Dynamic-CSharp-API-Clients.md b/docs/en/API/Dynamic-CSharp-API-Clients.md
index 31032e6392..3ece459842 100644
--- a/docs/en/API/Dynamic-CSharp-API-Clients.md
+++ b/docs/en/API/Dynamic-CSharp-API-Clients.md
@@ -13,6 +13,12 @@ Dynamic C# proxies automatically handle the following stuff for you;
This system can be used by any type of .NET client to consume your HTTP APIs.
+## Static vs Dynamic Client Proxies
+
+ABP provides **two types** of client proxy generation system. This document explains the **dynamic client proxies**, which generates client-side proxies on runtime. You can also see the [Static C# API Client Proxies](Static-CSharp-API-Clients.md) documentation to learn how to generate proxies on development time.
+
+Development-time (static) client proxy generation has a **performance advantage** since it doesn't need to obtain the HTTP API definition on runtime. However, you should **re-generate** the client proxy code whenever you change your API endpoint definition. On the other hand, dynamic client proxies are generated on runtime and provides an **easier development experience**.
+
## Service Interface
Your service/controller should implement an interface that is shared between the server and the client. So, first define a service interface in a shared library project, typically in the `Application.Contracts` project if you've created your solution using the startup templates.
@@ -72,7 +78,7 @@ public class MyClientAppModule : AbpModule
### Endpoint Configuration
-`RemoteServices` section in the `appsettings.json` file is used to get remote service address by default. Simplest configuration is shown below:
+`RemoteServices` section in the `appsettings.json` file is used to get remote service address by default. The simplest configuration is shown below:
```json
{
@@ -204,3 +210,7 @@ public override void PreConfigureServices(ServiceConfigurationContext context)
````
This example uses the [Microsoft.Extensions.Http.Polly](https://www.nuget.org/packages/Microsoft.Extensions.Http.Polly) package. You also need to import the `Polly` namespace (`using Polly;`) to be able to use the `WaitAndRetryAsync` method.
+
+## See Also
+
+* [Static C# Client Proxies](Static-CSharp-API-Clients.md)
diff --git a/docs/en/API/Static-CSharp-API-Clients.md b/docs/en/API/Static-CSharp-API-Clients.md
new file mode 100644
index 0000000000..a5996158b6
--- /dev/null
+++ b/docs/en/API/Static-CSharp-API-Clients.md
@@ -0,0 +1,217 @@
+# Static C# API Client Proxies
+
+ABP can create C# API client proxy code to call your remote HTTP services (REST APIs). In this way, you don't need to deal with `HttpClient` and other low level details to call remote services and get results.
+
+Static C# proxies automatically handle the following stuff for you;
+
+* Maps C# **method calls** to remote server **HTTP calls** by considering the HTTP method, route, query string parameters, request payload and other details.
+* **Authenticates** the HTTP Client by adding access token to the HTTP header.
+* **Serializes** to and deserialize from JSON.
+* Handles HTTP API **versioning**.
+* Add **correlation id**, current **tenant** id and the current **culture** to the request.
+* Properly **handles the error messages** sent by the server and throws proper exceptions.
+
+This system can be used by any type of .NET client to consume your HTTP APIs.
+
+## Static vs Dynamic Client Proxies
+
+ABP provides **two types** of client proxy generation system. This document explains the **static client proxies**, which generates client-side code in your development time. You can also see the [Dynamic C# API Client Proxies](Dynamic-CSharp-API-Clients.md) documentation to learn how to use proxies generated on runtime.
+
+Development-time (static) client proxy generation has a **performance advantage** since it doesn't need to obtain the HTTP API definition on runtime. However, you should **re-generate** the client proxy code whenever you change your API endpoint definition. On the other hand, dynamic client proxies are generated on runtime and provides an **easier development experience**.
+
+## Service Interface
+
+Your service/controller should implement an interface that is shared between the server and the client. So, first define a service interface in a shared library project, typically in the `Application.Contracts` project if you've created your solution using the startup templates.
+
+Example:
+
+````csharp
+public interface IBookAppService : IApplicationService
+{
+ Task> GetListAsync();
+}
+````
+
+> Your interface should implement the `IRemoteService` interface to be automatically discovered. Since the `IApplicationService` inherits the `IRemoteService` interface, the `IBookAppService` above satisfies this condition.
+
+Implement this class in your service application. You can use [auto API controller system](Auto-API-Controllers.md) to expose the service as a REST API endpoint.
+
+## Client Proxy Generation
+
+First, add [Volo.Abp.Http.Client](https://www.nuget.org/packages/Volo.Abp.Http.Client) nuget package to your client project:
+
+````
+Install-Package Volo.Abp.Http.Client
+````
+
+Then add `AbpHttpClientModule` dependency to your module:
+
+````csharp
+[DependsOn(typeof(AbpHttpClientModule))] //add the dependency
+public class MyClientAppModule : AbpModule
+{
+}
+````
+
+Now, it's ready to configure the application for the static client proxy generation. Example:
+
+````csharp
+[DependsOn(
+ typeof(AbpHttpClientModule), //used to create client proxies
+ typeof(BookStoreApplicationContractsModule) //contains the application service interfaces
+ )]
+public class MyClientAppModule : AbpModule
+{
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ // Prepare for static client proxy generation
+ context.Services.AddStaticHttpClientProxies(
+ typeof(BookStoreApplicationContractsModule).Assembly
+ );
+ }
+}
+````
+
+`AddStaticHttpClientProxies` method gets an assembly, finds all service interfaces in the given assembly, and prepares for static client proxy generation.
+
+> The [application startup template](../Startup-Templates/Application.md) comes pre-configured for the **dynamic** client proxy generation, in the `HttpApi.Client` project. If you want to switch to the **static** client proxies, change `context.Services.AddHttpClientProxies` to `context.Services.AddStaticHttpClientProxies` in the module class of your `HttpApi.Client` project.
+
+### Endpoint Configuration
+
+`RemoteServices` section in the `appsettings.json` file is used to get remote service address by default. The simplest configuration is shown below:
+
+```json
+{
+ "RemoteServices": {
+ "Default": {
+ "BaseUrl": "http://localhost:53929/"
+ }
+ }
+}
+```
+
+See the *AbpRemoteServiceOptions* section below for more detailed configuration.
+
+### Code Generation
+
+Server side must be up and running while generating the client proxy code. So, run your application that serves the HTTP APIs on the `BaseUrl` that is configured like explained in the *Endpoint Configuration* section.
+
+Open a command-line terminal in the root folder of your client project (`.csproj`) and type the following command:
+
+````bash
+abp generate-proxy -t csharp -u http://localhost:53929/
+````
+
+> If you haven't installed yet, you should install the [ABP CLI](../CLI.md).
+
+This command should generate the following files under the `ClientProxies` folder:
+
+
+
+`BookClientProxy.Generated.cs` is the actual generated proxy class in this example. `BookClientProxy` is a `partial` class where you can write your custom code (ABP won't override it). `app-generate-proxy.json` contains information about the remote HTTP endpoint, so ABP can properly perform HTTP requests.
+
+> `generate-proxy` command generates proxies for only the APIs you've defined in your application. If you are developing a modular application, you can specify the `-m` (or `--module`) parameter to specify the module you want to generate proxies. See the *generate-proxy* section in the [ABP CLI](../CLI.md) documentation for other options.
+
+## Usage
+
+It's straightforward to use the client proxies. Just inject the service interface in the client application code:
+
+````csharp
+public class MyService : ITransientDependency
+{
+ private readonly IBookAppService _bookService;
+
+ public MyService(IBookAppService bookService)
+ {
+ _bookService = bookService;
+ }
+
+ public async Task DoItAsync()
+ {
+ var books = await _bookService.GetListAsync();
+ foreach (var book in books)
+ {
+ Console.WriteLine($"[BOOK {book.Id}] Name={book.Name}");
+ }
+ }
+}
+````
+
+This sample injects the `IBookAppService` service interface defined above. The static client proxy implementation makes an HTTP call whenever a service method is called by the client.
+
+## Configuration
+
+### AbpRemoteServiceOptions
+
+`AbpRemoteServiceOptions` is automatically set from the `appsettings.json` by default. Alternatively, you can configure it in the `ConfigureServices` method of your [module](../Module-Development-Basics.md) to set or override it. Example:
+
+````csharp
+public override void ConfigureServices(ServiceConfigurationContext context)
+{
+ context.Services.Configure(options =>
+ {
+ options.RemoteServices.Default =
+ new RemoteServiceConfiguration("http://localhost:53929/");
+ });
+
+ //...
+}
+````
+
+### Multiple Remote Service Endpoints
+
+The examples above have configured the "Default" remote service endpoint. You may have different endpoints for different services (as like in a microservice approach where each microservice has different endpoints). In this case, you can add other endpoints to your configuration file:
+
+````json
+{
+ "RemoteServices": {
+ "Default": {
+ "BaseUrl": "http://localhost:53929/"
+ },
+ "BookStore": {
+ "BaseUrl": "http://localhost:48392/"
+ }
+ }
+}
+````
+
+`AddStaticHttpClientProxies` method can get an additional parameter for the remote service name. Example:
+
+````csharp
+context.Services.AddStaticHttpClientProxies(
+ typeof(BookStoreApplicationContractsModule).Assembly,
+ remoteServiceConfigurationName: "BookStore"
+);
+````
+
+`remoteServiceConfigurationName` parameter matches the service endpoint configured via `AbpRemoteServiceOptions`. If the `BookStore` endpoint is not defined then it fallbacks to the `Default` endpoint.
+
+### Retry/Failure Logic & Polly Integration
+
+If you want to add retry logic for the failing remote HTTP calls for the client proxies, you can configure the `AbpHttpClientBuilderOptions` in the `PreConfigureServices` method of your module class.
+
+**Example: Use the [Polly](https://github.com/App-vNext/Polly) library to re-try 3 times on a failure**
+
+````csharp
+public override void PreConfigureServices(ServiceConfigurationContext context)
+{
+ PreConfigure(options =>
+ {
+ options.ProxyClientBuildActions.Add((remoteServiceName, clientBuilder) =>
+ {
+ clientBuilder.AddTransientHttpErrorPolicy(policyBuilder =>
+ policyBuilder.WaitAndRetryAsync(
+ 3,
+ i => TimeSpan.FromSeconds(Math.Pow(2, i))
+ )
+ );
+ });
+ });
+}
+````
+
+This example uses the [Microsoft.Extensions.Http.Polly](https://www.nuget.org/packages/Microsoft.Extensions.Http.Polly) package. You also need to import the `Polly` namespace (`using Polly;`) to be able to use the `WaitAndRetryAsync` method.
+
+## See Also
+
+* [Dynamic C# Client Proxies](Dynamic-CSharp-API-Clients.md)
diff --git a/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md
new file mode 100644
index 0000000000..ed83f36e19
--- /dev/null
+++ b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md
@@ -0,0 +1,51 @@
+# ABP.IO Platform 5.2 Final Has Been Released!
+
+[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 5.2 versions have been released today.
+
+## What's New With 5.2?
+
+Since all the new features are already explained in details with the [5.2 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) for all the features and enhancements.
+
+## Creating New Solutions
+
+You can create a new solution with the ABP Framework version 5.2 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started).
+
+> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for more.
+
+## How to Upgrade an Existing Solution
+
+### Install/Update the ABP CLI
+
+First of all, install the ABP CLI or upgrade to the latest version.
+
+If you haven't installed yet:
+
+```bash
+dotnet tool install -g Volo.Abp.Cli
+```
+
+To update an existing installation:
+
+```bash
+dotnet tool update -g Volo.Abp.Cli
+```
+
+### ABP UPDATE Command
+
+[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
+
+```bash
+abp update
+```
+
+Run this command in the root folder of your solution.
+
+## Migration Guide
+
+Check [the migration guide](https://docs.abp.io/en/abp/5.2/Migration-Guides/Abp-5_2) for the applications with the version 5.x upgrading to the version 5.2.
+
+## About the Next Version
+
+The next feature version will be 5.3. It is planned to release the 5.3 RC (Release Candidate) on May 03 and the final version on May 31, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones).
+
+Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problem with this version.
diff --git a/docs/en/CLI.md b/docs/en/CLI.md
index d381290508..72fe0cf221 100644
--- a/docs/en/CLI.md
+++ b/docs/en/CLI.md
@@ -18,13 +18,13 @@ dotnet tool update -g Volo.Abp.Cli
## Global Options
-While each command may have a set of options, there are some global options those can be used with any command;
+While each command may have a set of options, there are some global options that can be used with any command;
* `--skip-cli-version-check`: Skips to check the latest version of the ABP CLI. If you don't specify, it will check the latest version and shows a warning message if there is a newer version of the ABP CLI.
## Commands
-Here, the list of all available commands before explaining their details:
+Here, is the list of all available commands before explaining their details:
* **`help`**: Shows help on the usage of the ABP CLI.
* **`new`**: Generates a new solution based on the ABP [startup templates](Startup-Templates/Index.md).
@@ -115,6 +115,7 @@ For more samples, go to [ABP CLI Create Solution Samples](CLI-New-Command-Sample
* `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers:
* `ef`: Entity Framework Core.
* `mongodb`: MongoDB.
+ * `--pwa`: Specifies to Configure Angular or Blazor WebAssembly project as Progressive Web Application.
* `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory.
* `--version` or `-v`: Specifies the ABP & template version. It can be a [release tag](https://github.com/abpframework/abp/releases) or a [branch name](https://github.com/abpframework/abp/branches). Uses the latest release if not specified. Most of the times, you will want to use the latest version.
* `--preview`: Use latest preview version.
diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md
new file mode 100644
index 0000000000..b16d6bd9f1
--- /dev/null
+++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md
@@ -0,0 +1,548 @@
+# Handle Concurrency with EF Core in an ABP Framework Project with ASP.NET Core MVC
+
+In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be implemented in an ABP project.
+
+## Creating the Solution
+
+For this article, we will create a simple BookStore application and add CRUD functionality to the pages. Hence we deal with the concurrency situation.
+
+We can create a new startup template with EF Core as a database provider and MVC for the UI Framework.
+
+> If you already have a project, you don't need to create a new startup template, you can directly implement the following steps to your project. So you can skip this section.
+
+We can create a new startup template by using the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI).
+
+```bash
+abp new Acme.BookStore
+```
+
+After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start the development.
+
+## Starting the Development
+
+Let's start with defining our entities.
+
+### Creating Entities
+
+Create a `Book.cs` (/Books/Book.cs) class in the `.Domain` layer:
+
+```csharp
+public class Book : AuditedAggregateRoot
+{
+ public string Name { get; set; }
+
+ public BookType Type { get; set; }
+
+ public DateTime PublishDate { get; set; }
+
+ public float Price { get; set; }
+}
+```
+
+* To enable **Concurrency Check** for our entities, our entities should be implemented the `IHasConcurrencyStamp` interface, directly or indirectly.
+
+* [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes then we won't need to manually implement the `IHasConcurrencyStamp` interface.
+
+* And we've derived the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement the `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class already implemented the `IHasConcurrencyStamp` interface.
+
+> You can read more details from the [Concurrency Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation.
+
+Then, create a `BookType` (/Books/BookType.cs) enum in the `.Domain.Shared` layer:
+
+```csharp
+public enum BookType
+{
+ Undefined,
+ Adventure,
+ Biography,
+ Dystopia,
+ Fantastic,
+ Horror,
+ Science,
+ ScienceFiction,
+ Poetry
+}
+```
+
+### Database Integration
+
+Open the `BookStoreDbContext` (/EntityFrameworkCore/BookStoreDbContext.cs) class in the `*.EntityFrameworkCore` project and add the following `DbSet` statement:
+
+```csharp
+namespace Acme.BookStore.EntityFrameworkCore;
+
+[ReplaceDbContext(typeof(IIdentityDbContext))]
+[ReplaceDbContext(typeof(ITenantManagementDbContext))]
+[ConnectionStringName("Default")]
+public class BookStoreDbContext :
+ AbpDbContext,
+ IIdentityDbContext,
+ ITenantManagementDbContext
+{
+ //Entities from the modules
+
+ public DbSet Books { get; set; } //add this line
+}
+```
+
+Then we can navigate to the `OnModelCreating` method in the same class and configure our tables/entities:
+
+```csharp
+protected override void OnModelCreating(ModelBuilder builder)
+{
+ base.OnModelCreating(builder);
+
+ /* Include modules to your migration db context */
+
+ builder.ConfigurePermissionManagement();
+ ...
+
+ //* Configure your own tables/entities inside here */
+
+ builder.Entity(b =>
+ {
+ b.ToTable(BookStoreConsts.DbTablePrefix + "Books",
+ BookStoreConsts.DbSchema);
+ b.ConfigureByConvention(); //auto configure for the base class props
+ b.Property(x => x.Name).IsRequired().HasMaxLength(128);
+ });
+}
+```
+
+After the mapping configurations, we can create a new migration and apply changes to the database.
+
+To do this, open your command line terminal in the directory of the `EntityFrameworkCore` project and run the below command:
+
+```bash
+dotnet ef migrations add Added_Books
+```
+
+After this command, a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the last created migration.
+
+### Defining DTOs and Application Service Interfaces
+
+We can start to define the use cases of the application.
+
+Create the DTO classes (under the **Books** folder) in the `Application.Contracts` project:
+
+**BookDto.cs**
+
+```csharp
+public class BookDto : AuditedEntityDto, IHasConcurrencyStamp
+{
+ public string Name { get; set; }
+
+ public BookType Type { get; set; }
+
+ public DateTime PublishDate { get; set; }
+
+ public float Price { get; set; }
+
+ public string ConcurrencyStamp { get; set; }
+}
+```
+
+* The `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for the **BookDto** class we need to implement the `IHasConcurrencyStamp`.
+
+* This is important, because we need to return books with their **ConcurrencyStamp** value.
+
+**CreateBookDto.cs**
+
+```csharp
+public class CreateBookDto
+{
+ [Required]
+ [StringLength(128)]
+ public string Name { get; set; }
+
+ [Required]
+ public BookType Type { get; set; } = BookType.Undefined;
+
+ [Required]
+ [DataType(DataType.Date)]
+ public DateTime PublishDate { get; set; } = DateTime.Now;
+
+ [Required]
+ public float Price { get; set; }
+}
+```
+
+**UpdateBookDto.cs**
+
+```csharp
+public class UpdateBookDto : IHasConcurrencyStamp
+{
+ [Required]
+ [StringLength(128)]
+ public string Name { get; set; }
+
+ [Required]
+ public BookType Type { get; set; } = BookType.Undefined;
+
+ [Required]
+ [DataType(DataType.Date)]
+ public DateTime PublishDate { get; set; } = DateTime.Now;
+
+ [Required]
+ public float Price { get; set; }
+
+ public string ConcurrencyStamp { get; set; }
+}
+```
+
+* Here, we've implemented the `IHasConcurrencyStamp` interface for the **UpdateBookDto** class.
+
+* We will use this value while updating an existing book. ABP Framework will compare the current book's **ConcurrencyStamp** value with the provided one, if values are matched, this means everything is as it is supposed to be and will update the record.
+
+* If values are mismatched, then it means the record that we're trying to update is already updated by another user and we need to get the latest changes to be able to make changes on it.
+
+* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it on behalf of us and show a user-friendly error message as in the image below.
+
+
+
+Create a new `IBookAppService` (/Books/IBookAppService.cs) interface in the `Application.Contracts` project:
+
+```csharp
+public interface IBookAppService :
+ ICrudAppService
+{
+}
+```
+* We've implemented the `ICrudAppService` here, because we just need to perform CRUD operations and this interface helps us define common CRUD operation methods.
+
+### Application Service Implementations
+
+Create a `BookAppService` (/Books/BookAppService.cs) class inside the `*.Application` project and implement the application service methods, as shown below:
+
+```csharp
+public class BookAppService :
+ CrudAppService,
+ IBookAppService
+{
+ public BookAppService(IRepository repository)
+ : base(repository)
+ {
+ }
+
+ public override async Task UpdateAsync(Guid id, UpdateBookDto input)
+ {
+ var book = await Repository.GetAsync(id);
+
+ book.Name = input.Name;
+ book.Price = input.Price;
+ book.Type = input.Type;
+ book.PublishDate = input.PublishDate;
+
+ //set Concurrency Stamp value to the entity
+ book.ConcurrencyStamp = input.ConcurrencyStamp;
+
+ var updatedBook = await Repository.UpdateAsync(book);
+ return ObjectMapper.Map(updatedBook);
+ }
+}
+```
+
+* We've used the `CrudAppService` base class. This class implements all common CRUD operations and if we want to change a method, we can simply override the method and change it to our needs.
+
+> Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. Because the `UpdateAsync` method of the `CrudAppService` class by default map input values to the entity. But I wanted to override this method to show what we need to do for **Concurrency Check**.
+
+* We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating.
+
+* At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to the **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden.
+
+* And if the values are matched, the record will be updated successfully.
+
+After implementing the application service methods, we can do the related mapping configurations, so open the `BookStoreApplicationAutoMapperProfile.cs` and update the content as below:
+
+```csharp
+public class BookStoreApplicationAutoMapperProfile : Profile
+{
+ public BookStoreApplicationAutoMapperProfile()
+ {
+ CreateMap();
+ CreateMap();
+ }
+}
+```
+
+### User Interface
+
+So far, we've applied the all necessary steps for the **Concurrency Check** system, let's see it in action.
+
+Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.cshtml**), open this file and replace the content with the following code block:
+
+```html
+@page
+@using Acme.BookStore.Localization
+@using Microsoft.Extensions.Localization
+@model Acme.BookStore.Web.Pages.Books.Index
+
+@section scripts
+{
+
+}
+
+
+
+
+
+ Books
+
+
+
+
+
+
+
+
+
+
+```
+
+* We've defined a table and "New Book" button inside a card element here, we'll fill the table with our book records in the next step by using the **Datatables** library.
+
+Create an `Index.js` (**/Pages/Books/Index.js**) file and add the following code block:
+
+```js
+$(function () {
+ var l = abp.localization.getResource('BookStore');
+ var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal');
+ var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal');
+
+ var dataTable = $('#BooksTable').DataTable(
+ abp.libs.datatables.normalizeConfiguration({
+ serverSide: true,
+ paging: true,
+ order: [[1, "asc"]],
+ searching: false,
+ scrollX: true,
+ ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList),
+ columnDefs: [
+ {
+ title: l('Actions'),
+ rowAction: {
+ items:
+ [
+ {
+ text: l('Edit'),
+ action: function (data) {
+ editModal.open({ id: data.record.id });
+ }
+ }
+ ]
+ }
+ },
+ {
+ title: l('Name'),
+ data: "name"
+ },
+ {
+ title: l('Type'),
+ data: "type",
+ render: function (data) {
+ return l('Enum:BookType:' + data);
+ }
+ },
+ {
+ title: l('PublishDate'),
+ data: "publishDate",
+ render: function (data) {
+ return luxon
+ .DateTime
+ .fromISO(data, {
+ locale: abp.localization.currentCulture.name
+ }).toLocaleString();
+ }
+ },
+ {
+ title: l('Price'),
+ data: "price"
+ },
+ {
+ title: l('CreationTime'),
+ data: "creationTime",
+ render: function (data) {
+ return luxon
+ .DateTime
+ .fromISO(data, {
+ locale: abp.localization.currentCulture.name
+ }).toLocaleString(luxon.DateTime.DATETIME_SHORT);
+ }
+ }
+ ]
+ })
+ );
+
+ createModal.onResult(function () {
+ dataTable.ajax.reload();
+ });
+
+ editModal.onResult(function () {
+ dataTable.ajax.reload();
+ });
+
+ $('#NewBookButton').click(function (e) {
+ e.preventDefault();
+ createModal.open();
+ });
+});
+```
+
+* We've used the [Datatables](https://datatables.net/) to list our books.
+
+* Also defined **create** and **update** modals by using [ABP Modal Manager](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Modals#modalmanager-reference), but we didn't create them yet, so let's create the modals.
+
+First, create a **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below:
+
+**CreateModal.cshtml**
+
+```html
+@page
+@using Acme.BookStore.Web.Pages.Books
+@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
+@model CreateModalModel
+@{
+ Layout = null;
+}
+
+
+
+
+
+
+
+
+
+```
+
+* We've used `abp-dynamic-form` tag-helper and passed it a `Book` model, this tag helper will simply create form contents (inputs, select boxes etc.) on behalf of us.
+
+* **CreateModal.cshtml.cs**
+
+```csharp
+using System.Threading.Tasks;
+using Acme.BookStore.Books;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Acme.BookStore.Web.Pages.Books;
+
+public class CreateModalModel : BookStorePageModel
+{
+ [BindProperty]
+ public CreateBookDto Book { get; set; }
+
+ private readonly IBookAppService _bookAppService;
+
+ public CreateModalModel(IBookAppService bookAppService)
+ {
+ _bookAppService = bookAppService;
+ }
+
+ public void OnGet()
+ {
+ Book = new CreateBookDto();
+ }
+
+ public async Task OnPostAsync()
+ {
+ await _bookAppService.CreateAsync(Book);
+ return NoContent();
+ }
+}
+```
+
+* In this file, we simply define **CreateBookDto** as a bind property and we'll use this class's properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of these form elements one by one, it will generate on behalf of us.
+
+We can create an **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below:
+
+**EditModal.cshtml**
+
+```html
+@page
+@using Acme.BookStore.Web.Pages.Books
+@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
+@model EditModalModel
+@{
+ Layout = null;
+}
+
+```
+
+* Here, we didn't use the `abp-dynamic-form` tag-helper and added all the necessary form elements to our form one by one.
+
+* As you may have noticed, we've set the input type as **hidden** for the **ConcurrencyStamp** input, because the end-user should not see this value.
+
+> Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the necessary data attributes for properties.
+
+**EditModal.cshtml.cs**
+
+```csharp
+public class EditModalModel : BookStorePageModel
+{
+ [HiddenInput]
+ [BindProperty(SupportsGet = true)]
+ public Guid Id { get; set; }
+
+ [BindProperty]
+ public UpdateBookDto Book { get; set; }
+
+ private readonly IBookAppService _bookAppService;
+
+ public EditModalModel(IBookAppService bookAppService)
+ {
+ _bookAppService = bookAppService;
+ }
+
+ public async Task OnGetAsync()
+ {
+ var bookDto = await _bookAppService.GetAsync(Id);
+ Book = ObjectMapper.Map(bookDto);
+ }
+
+ public async Task OnPostAsync()
+ {
+ await _bookAppService.UpdateAsync(Id, Book);
+ return NoContent();
+ }
+}
+```
+
+Lastly, we can define the necessary mapping configurations and run the application to see the result.
+
+Open the `BookStoreWebAutoMapperProfile.cs` class and update the content as below:
+
+```csharp
+public class BookStoreWebAutoMapperProfile : Profile
+{
+ public BookStoreWebAutoMapperProfile()
+ {
+ CreateMap();
+ }
+}
+```
+
+Then we can run the application, navigate to the **/Books** endpoint and see the result.
+
+
+
+* In the image above, we can see that multiple users open the edit model to change a record and try to update the relevant record independently of each other.
+
+* After the first user updated the record, the second user tries to update the same record without getting the last state of the record. And therefore `AbpDbConcurrencyException` is thrown because **ConcurrencyStamp** values are different from each other.
+
+* The second user should close and re-open the model to get the last state of the record and then they can make changes to the current record.
diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif
new file mode 100644
index 0000000000..922bb5b7ca
Binary files /dev/null and b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif differ
diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png
new file mode 100644
index 0000000000..85253594c8
Binary files /dev/null and b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png differ
diff --git a/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md b/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md
new file mode 100644
index 0000000000..092fb72dbc
--- /dev/null
+++ b/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md
@@ -0,0 +1,113 @@
+# Dealing with Multiple Implementations of a Service in ASP.NET Core & ABP Dependency Injection
+
+ASP.NET Core provides a built-in [dependency injection system](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection) to register your services to the dependency injection container and inject/resolve them whenever you need. ABP's [dependency injection infrastructure](https://docs.abp.io/en/abp/latest/Dependency-Injection) is built on ASP.NET Core's DI system, automates service registration by conventions and provides some additional features.
+
+In this tutorial, I will explain how you can register multiple implementations of the same service interface and inject/resolve all these implementations when you need them.
+
+## Defining Services
+
+Assume that you have an `IExternalLogger` interface with two implementations:
+
+````csharp
+public interface IExternalLogger
+{
+ Task LogAsync(string logText);
+}
+
+public class ElasticsearchExternalLogger : IExternalLogger
+{
+ public async Task LogAsync(string logText)
+ {
+ // TODO...
+ }
+}
+
+public class AzureExternalLogger : IExternalLogger
+{
+ public async Task LogAsync(string logText)
+ {
+ // TODO...
+ }
+}
+````
+
+An example service injecting the `IExternalLogger` interface:
+
+````csharp
+public class MyService : ITransientDependency
+{
+ private readonly IExternalLogger _externalLogger;
+
+ public MyService(IExternalLogger externalLogger)
+ {
+ _externalLogger = externalLogger;
+ }
+
+ public async Task DemoAsync()
+ {
+ await _externalLogger.LogAsync("Example log message...");
+ }
+}
+````
+
+In this example, we haven't registered any of the implementation classes to the dependency injection system yet. So, if we try to use the `MyService` class, we get an error indicating that no implementation found for the `IExternalLogger` service. We should register at least one implementation for the `IExternalLogger` interface.
+
+## Registering Services
+
+If we register both of the `ElasticsearchExternalLogger` and `AzureExternalLogger` services for the `IExternalLogger` interface, and then try to inject the `IExternalLogger` interface, the last registered implementation will be used. However, how to determine the last registered implementation?
+
+If we implement one of the [dependency interfaces](https://docs.abp.io/en/abp/latest/Dependency-Injection#dependency-interfaces) (e.g. `ITransientDependency`), then the registration order will be uncertain (it may depend on the namespaces of the classes). The *last registered implementation* can be different than you expect. So, it is not suggested to use the dependency interfaces to register multiple implementations.
+
+You can register your services in the `ConfigureServices` method of your module:
+
+````csharp
+public override void ConfigureServices(ServiceConfigurationContext context)
+{
+ context.Services.AddTransient();
+ context.Services.AddTransient();
+}
+````
+
+In this case, you get an `AzureExternalLogger` instance when you inject the `IExternalLogger` interface, because the last registered implementation is the `AzureExternalLogger` class.
+
+## Injecting Multiple Implementations
+
+When you have multiple implementation of an interface, you may want to work with all these implementations. For this example, you may want to write log to all the external loggers. We can change the `MyService` implementation as the following:
+
+````csharp
+public class MyService : ITransientDependency
+{
+ private readonly IEnumerable _externalLoggers;
+
+ public MyService(IEnumerable externalLoggers)
+ {
+ _externalLoggers = externalLoggers;
+ }
+
+ public async Task DemoAsync()
+ {
+ foreach (var externalLogger in _externalLoggers)
+ {
+ await externalLogger.LogAsync("Example log message...");
+ }
+ }
+}
+````
+
+In this example, we are injecting `IEnumerable` instead of `IExternalLogger`, so we have a collection of the `IExternalLogger` implementations. Then we are using a `foreach` loop to write the same log text to all the `IExternalLogger` implementations.
+
+If you are using `IServiceProvider` to resolve dependencies, then use its `GetServices` method to obtain a collection of the service implementations:
+
+````csharp
+IEnumerable services = _serviceProvider.GetServices();
+````
+
+## Further Reading
+
+In this small tutorial, I explained how you can register multiple implementations of the same interface to the dependency injection system and inject/resolve all of them when you need.
+
+If you want to get more information about ABP's and ASP.NET Core's dependency injection systems, you can read the following documents:
+
+* [ABP's Dependency Injection documentation](https://docs.abp.io/en/abp/latest/Dependency-Injection)
+* [ASP.NET Core Dependency Injection best practices, tips & tricks](https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96)
+* [ASP.NET Core's Dependency Injection documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection)
\ No newline at end of file
diff --git a/docs/en/Concurrency-Check.md b/docs/en/Concurrency-Check.md
index 9bad5f816f..bf31d3db10 100644
--- a/docs/en/Concurrency-Check.md
+++ b/docs/en/Concurrency-Check.md
@@ -60,7 +60,7 @@ public class UpdateBookDto : IHasConcurrencyStamp
}
```
-Set the **ConcurrencyStamp** input value to the entity in the **UpdateAsync** method of your application service, for that purpose you can use the `SetConcurrencyStampIfNotNull` method as below:
+Set the **ConcurrencyStamp** input value to the entity in the **UpdateAsync** method of your application service as below:
```csharp
public class BookAppService : ApplicationService, IBookAppService
@@ -71,7 +71,7 @@ public class BookAppService : ApplicationService, IBookAppService
{
var book = await BookRepository.GetAsync(id);
- book.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
+ book.ConcurrencyStamp = input.ConcurrencyStamp;
//set other input values to the entity ...
@@ -120,7 +120,7 @@ public class UpdateBookDto : IHasConcurrencyStamp
}
```
-Set the **ConcurrencyStamp** input value to the entity in the **UpdateAsync** method of your application service, for that purpose you can use the `SetConcurrencyStampIfNotNull` method as below:
+Set the **ConcurrencyStamp** input value to the entity in the **UpdateAsync** method of your application service as below:
```csharp
public class BookAppService : ApplicationService, IBookAppService
@@ -131,7 +131,7 @@ public class BookAppService : ApplicationService, IBookAppService
{
var book = await BookRepository.GetAsync(id);
- book.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
+ book.ConcurrencyStamp = input.ConcurrencyStamp;
//set other input values to the entity ...
diff --git a/docs/en/Customizing-Application-Modules-Extending-Entities.md b/docs/en/Customizing-Application-Modules-Extending-Entities.md
index e1cb02e849..a3c9ae4e9a 100644
--- a/docs/en/Customizing-Application-Modules-Extending-Entities.md
+++ b/docs/en/Customizing-Application-Modules-Extending-Entities.md
@@ -109,68 +109,27 @@ public class MyLocalIdentityUserChangeEventHandler :
[Distributed Event Bus](Distributed-Event-Bus.md) system is a way to publish an event in one application and receive the event in the same or different application running on the same or different server.
-Assume that you want to get informed when a `IdentityUser` entity created, updated or deleted. You can create a class like below:
+Assume that you want to get informed when `Tenant` entity (of the [Tenant Management](Modules/Tenant-Management.md) module) has created. In this case, you can subscribe to the `EntityCreatedEto` event as shown in the following example:
````csharp
-public class MyDistributedIdentityUserChangeEventHandler :
- IDistributedEventHandler>,
- IDistributedEventHandler>,
- IDistributedEventHandler>,
+public class MyDistributedEventHandler :
+ IDistributedEventHandler>,
ITransientDependency
{
- public async Task HandleEventAsync(EntityCreatedEto eventData)
+ public async Task HandleEventAsync(EntityCreatedEto eventData)
{
- if (eventData.Entity.EntityType == "Volo.Abp.Identity.IdentityUser")
- {
- var userId = Guid.Parse(eventData.Entity.KeysAsString);
- //...handle the "created" event
- }
- }
-
- public async Task HandleEventAsync(EntityUpdatedEto eventData)
- {
- if (eventData.Entity.EntityType == "Volo.Abp.Identity.IdentityUser")
- {
- var userId = Guid.Parse(eventData.Entity.KeysAsString);
- //...handle the "updated" event
- }
- }
-
- public async Task HandleEventAsync(EntityDeletedEto eventData)
- {
- if (eventData.Entity.EntityType == "Volo.Abp.Identity.IdentityUser")
- {
- var userId = Guid.Parse(eventData.Entity.KeysAsString);
- //...handle the "deleted" event
- }
- }
-}
-````
-
-* It implements multiple `IDistributedEventHandler` interfaces: **Created**, **Updated** and **Deleted**. Because, the distributed event bus system publishes events individually. There is no "Changed" event like the local event bus.
-* It subscribes to `EntityEto`, which is a generic event class that is **automatically published** for all type of entities by the ABP framework. This is why it checks the **entity type** (checking the entity type as string since we assume that there is no type safe reference to the `IdentityUser` entity).
-
-Pre-built application modules do not define specialized event types yet (like `UserEto` - "ETO" means "Event Transfer Object"). This feature is on the road map and will be available in a short term ([follow this issue](https://github.com/abpframework/abp/issues/3033)). Once it is implemented, you will be able to subscribe to individual entity types. Example:
-
-````csharp
-public class MyDistributedIdentityUserCreatedEventHandler :
- IDistributedEventHandler>,
- ITransientDependency
-{
- public async Task HandleEventAsync(EntityCreatedEto eventData)
- {
- var userId = eventData.Entity.Id;
- var userName = eventData.Entity.UserName;
- //...handle the "created" event
+ var tenantId = eventData.Entity.Id;
+ var tenantName = eventData.Entity.Name;
+ //...your custom logic
}
//...
}
````
-* This handler is executed only when a new user has been created.
+This handler is executed only when a new tenant has been created. All the pre-built ABP [application modules](Modules/Index.md) define corresponding `ETO` types for their entities. So, you can easily get informed when they changes.
-> The only pre-defined specialized event class is the `UserEto`. For example, you can subscribe to the `EntityCreatedEto` to get notified when a user has created. This event also works for the Identity module.
+> Notice that ABP doesn't publish distributed events for an entity by default. Because it has a cost and should be enabled by intention. See the [distributed event bus document](Distributed-Event-Bus.md) to learn more.
## See Also
diff --git a/docs/en/Customizing-Application-Modules-Guide.md b/docs/en/Customizing-Application-Modules-Guide.md
index b62d4e5bb7..4fe3c71dbe 100644
--- a/docs/en/Customizing-Application-Modules-Guide.md
+++ b/docs/en/Customizing-Application-Modules-Guide.md
@@ -31,7 +31,7 @@ If you don't think to make huge changes on the pre-built modules, re-using them
If you want to make **huge changes** or add **major features** on a pre-built module, but the available extension points are not enough, you can consider to directly work the source code of the depended module.
-In this case, you typically **add the source code** of the module to your solution and replace **every** package reference in the solution with its corresponding local project references. **[ABP CLI](CLI.md)** automates this process for you.
+In this case, you typically **add the source code** of the module to your solution and replace **every** package reference in the solution with its corresponding local project references. **[ABP CLI](CLI.md)**'s `add-module` command automates this process for you with the `--with-source-code` parameter. This command can also replace a module by its source code if the module already installed as NuGet packages.
#### Separating the Module Solution
diff --git a/docs/en/Customizing-Application-Modules-Overriding-Services.md b/docs/en/Customizing-Application-Modules-Overriding-Services.md
index 081b142ad7..a1a6c8b778 100644
--- a/docs/en/Customizing-Application-Modules-Overriding-Services.md
+++ b/docs/en/Customizing-Application-Modules-Overriding-Services.md
@@ -161,6 +161,73 @@ This example class inherits from the `IdentityUserManager` [domain service](Doma
Check the [localization system](Localization.md) to learn how to localize the error messages.
+### Example: Overriding a Repository
+
+````csharp
+public class MyEfCoreIdentityUserRepository : EfCoreIdentityUserRepository
+{
+ public MyEfCoreIdentityUserRepository(
+ IDbContextProvider dbContextProvider)
+ : base(dbContextProvider)
+ {
+ }
+
+ /* You can override any base method here */
+}
+````
+
+In this example, we are overriding the `EfCoreIdentityUserRepository` class that is defined by the [Identity module](Modules/Identity.md). This is the [Entity Framework Core](Entity-Framework-Core.md) implementation of the user repository.
+
+Thanks to the naming convention (`MyEfCoreIdentityUserRepository` ends with `EfCoreIdentityUserRepository`), no additional setup is required. You can override any base method to customize it for your needs.
+
+However, if you inject `IRepository` or `IRepository`, it will still use the default repository implementation. To replace the default repository implementation, write the following code in the `ConfigureServices` method of your module class:
+
+````csharp
+context.Services.AddDefaultRepository(
+ typeof(Volo.Abp.Identity.IdentityUser),
+ typeof(MyEfCoreIdentityUserRepository),
+ replaceExisting: true
+);
+````
+
+In this way, your implementation will be used if you inject `IRepository`, `IRepository` or `IIdentityUserRepository`.
+
+If you want to add extra methods to your repository and use it in your own code, you can define an interface and expose it from your repository implementation. You can also extend the pre-built repository interface. Example:
+
+````csharp
+public interface IMyIdentityUserRepository : IIdentityUserRepository
+{
+ public Task DeleteByEmailAddress(string email);
+}
+````
+
+The `IMyIdentityUserRepository` interface extends the Identity module's `IIdentityUserRepository` interface. Then you can implement it as shown in the following example:
+
+````csharp
+[ExposeServices(typeof(IMyIdentityUserRepository), IncludeDefaults = true)]
+public class MyEfCoreIdentityUserRepository
+ : EfCoreIdentityUserRepository, IMyIdentityUserRepository
+{
+ public MyEfCoreIdentityUserRepository(
+ IDbContextProvider dbContextProvider)
+ : base(dbContextProvider)
+ {
+ }
+
+ public async Task DeleteByEmailAddress(string email)
+ {
+ var dbContext = await GetDbContextAsync();
+ var user = await dbContext.Users.FirstOrDefaultAsync(u => u.Email == email);
+ if (user != null)
+ {
+ dbContext.Users.Remove(user);
+ }
+ }
+}
+````
+
+The `MyEfCoreIdentityUserRepository` class implements the `IMyIdentityUserRepository` interface. `ExposeServices` attribute is needed since ABP can not expose `IMyIdentityUserRepository` by naming conventions (`MyEfCoreIdentityUserRepository` doesn't end with `MyIdentityUserRepository`). Now, you can inject the `IMyIdentityUserRepository` interface into your services and call its `DeleteByEmailAddress` method.
+
### Example: Overriding a Controller
````csharp
@@ -205,7 +272,8 @@ If you don't want to remove either controller, you can configure `AbpAspNetCoreM
```csharp
Configure(options =>
{
- options.IgnoredControllersOnModelExclusion.AddIfNotContains(typeof(MyAccountController));
+ options.IgnoredControllersOnModelExclusion
+ .AddIfNotContains(typeof(MyAccountController));
});
```
diff --git a/docs/en/Dependency-Injection.md b/docs/en/Dependency-Injection.md
index f347dc1dd7..019366b3be 100644
--- a/docs/en/Dependency-Injection.md
+++ b/docs/en/Dependency-Injection.md
@@ -49,7 +49,7 @@ public class BlogModule : AbpModule
}
````
-The section below explains the conventions and configurations.
+The sections below explain the conventions and configurations.
### Inherently Registered Types
@@ -266,6 +266,102 @@ public class MyService : ITransientDependency
}
````
+### Dealing with multiple implementations
+
+You can register multiple implementations of the same service interface. Assume that you have an `IExternalLogger` interface with two implementations:
+
+````csharp
+public interface IExternalLogger
+{
+ Task LogAsync(string logText);
+}
+
+public class ElasticsearchExternalLogger : IExternalLogger
+{
+ public async Task LogAsync(string logText)
+ {
+ //TODO...
+ }
+}
+
+public class AzureExternalLogger : IExternalLogger
+{
+ public Task LogAsync(string logText)
+ {
+ throw new System.NotImplementedException();
+ }
+}
+````
+
+In this example, we haven't registered any of the implementation classes to the dependency injection system yet. So, if we try to inject the `IExternalLogger` interface, we get an error indicating that no implementation found.
+
+If we register both of the `ElasticsearchExternalLogger` and `AzureExternalLogger` services for the `IExternalLogger` interface, and then try to inject the `IExternalLogger` interface, then the last registered implementation will be used.
+
+An example service injecting the `IExternalLogger` interface:
+
+````csharp
+public class MyService : ITransientDependency
+{
+ private readonly IExternalLogger _externalLogger;
+
+ public MyService(IExternalLogger externalLogger)
+ {
+ _externalLogger = externalLogger;
+ }
+
+ public async Task DemoAsync()
+ {
+ await _externalLogger.LogAsync("Example log message...");
+ }
+}
+````
+
+Here, as said before, we get the last registered implementation. However, how to determine the last registered implementation?
+
+If we implement one of the dependency interfaces (e.g. `ITransientDependency`), then the registration order will be uncertain (it may depend on the namespaces of the classes). The *last registered implementation* can be different than you expect. So, it is not suggested to use the dependency interfaces to register multiple implementations.
+
+You can register your services in the `ConfigureServices` method of your module:
+
+````csharp
+public override void ConfigureServices(ServiceConfigurationContext context)
+{
+ context.Services.AddTransient();
+ context.Services.AddTransient();
+}
+````
+
+In this case, you get an `AzureExternalLogger` instance when you inject the `IExternalLogger` interface, because the last registered implementation is the `AzureExternalLogger` class.
+
+When you have multiple implementation of an interface, you may want to work with all these implementations. Assume that you want to write log to all the external loggers. We can change the `MyService` implementation as the following:
+
+````csharp
+public class MyService : ITransientDependency
+{
+ private readonly IEnumerable _externalLoggers;
+
+ public MyService(IEnumerable externalLoggers)
+ {
+ _externalLoggers = externalLoggers;
+ }
+
+ public async Task DemoAsync()
+ {
+ foreach (var externalLogger in _externalLoggers)
+ {
+ await externalLogger.LogAsync("Example log message...");
+ }
+ }
+}
+````
+
+In this example, we are injecting `IEnumerable` instead of `IExternalLogger`, so we have a collection of the `IExternalLogger` implementations. Then we are using a `foreach` loop to write the same log text to all the `IExternalLogger` implementations.
+
+If you are using `IServiceProvider` to resolve dependencies, then use its `GetServices` method to obtain a collection of the service implementations:
+
+````csharp
+IEnumerable services = _serviceProvider.GetServices();
+````
+
### Releasing/Disposing Services
If you used a constructor or property injection, you don't need to be concerned about releasing the service's resources. However, if you have resolved a service from ``IServiceProvider``, you might, in some cases, need to take care about releasing the service resources.
diff --git a/docs/en/Distributed-Event-Bus.md b/docs/en/Distributed-Event-Bus.md
index d542ef5325..387fece078 100644
--- a/docs/en/Distributed-Event-Bus.md
+++ b/docs/en/Distributed-Event-Bus.md
@@ -228,6 +228,7 @@ namespace AbpDemo
````
* `MyHandler` implements the `IDistributedEventHandler>`.
+* It is required to register your handler class to the [dependency injection](Dependency-Injection.md) system. Implementing `ITransient` like in this example is an easy way.
### Configuration
@@ -242,10 +243,10 @@ Configure(options =>
options.AutoEventSelectors.AddAll();
//Enable for a single entity
- options.AutoEventSelectors.Add();
+ options.AutoEventSelectors.Add();
//Enable for all entities in a namespace (and child namespaces)
- options.AutoEventSelectors.AddNamespace("Volo.Abp.Identity");
+ options.AutoEventSelectors.AddNamespace("MyProject.Products");
//Custom predicate expression that should return true to select a type
options.AutoEventSelectors.Add(
@@ -265,10 +266,21 @@ Once you enable **auto events** for an entity, ABP Framework starts to publish e
* `EntityType` (`string`): Full name (including namespace) of the entity class.
* `KeysAsString` (`string`): Primary key(s) of the changed entity. If it has a single key, this property will be the primary key value. For a composite key, it will contain all keys separated by `,` (comma).
-So, you can implement the `IDistributedEventHandler>` to subscribe the events. However, it is not a good approach to subscribe to such a generic event. You can define the corresponding ETO for the entity type.
+So, you can implement the `IDistributedEventHandler>` to subscribe the update events. However, it is not a good approach to subscribe to such a generic event, because you handle the update events for all entities in a single handler (since they all use the same ETO object). You can define the corresponding ETO type for the entity type.
**Example: Declare to use `ProductEto` for the `Product` entity**
+````csharp
+public class ProductEto
+{
+ public Guid Id { get; set; }
+ public string Name { get; set; }
+ public float Price { get; set; }
+}
+````
+
+Then you can use the `AbpDistributedEntityEventOptions.EtoMappings` option to map your `Product` entity to the `ProductEto`:
+
````csharp
Configure(options =>
{
@@ -282,24 +294,4 @@ This example;
* Adds a selector to allow to publish the create, update and delete events for the `Product` entity.
* Configure to use the `ProductEto` as the event transfer object to publish for the `Product` related events.
-Distributed event system use the [object to object mapping](Object-To-Object-Mapping.md) system to map `Product` objects to `ProductEto` objects. So, you need to configure the mapping. You can check the object to object mapping document for all options, but the following example shows how to configure it with the [AutoMapper](https://automapper.org/) library.
-
-**Example: Configure `Product` to `ProductEto` mapping using the AutoMapper**
-
-````csharp
-using System;
-using AutoMapper;
-using Volo.Abp.Domain.Entities.Events.Distributed;
-
-namespace AbpDemo
-{
- [AutoMap(typeof(Product))]
- public class ProductEto : EntityEto
- {
- public Guid Id { get; set; }
- public string Name { get; set; }
- }
-}
-````
-
-This example uses the `AutoMap` attribute of the AutoMapper to configure the mapping. You could create a profile class instead. Please refer to the AutoMapper document for more options.
\ No newline at end of file
+> Distributed event system use the [object to object mapping](Object-To-Object-Mapping.md) system to map `Product` objects to `ProductEto` objects. So, you need to configure the object mapping (`Product` -> `ProductEto`) too. You can check the [object to object mapping document](Object-To-Object-Mapping.md) to learn how to do it.
\ No newline at end of file
diff --git a/docs/en/Entity-Framework-Core-MySQL.md b/docs/en/Entity-Framework-Core-MySQL.md
index 37b7cc9d2f..ccfdd89da3 100644
--- a/docs/en/Entity-Framework-Core-MySQL.md
+++ b/docs/en/Entity-Framework-Core-MySQL.md
@@ -1,5 +1,7 @@
# Switch to EF Core MySQL Provider
+> [ABP CLI](CLI.md) and the [Get Started](https://abp.io/get-started) page already provides an option to create a new solution with MySQL. See [that document](Entity-Framework-Core-Other-DBMS.md) to learn how to use. This document provides guidance for who wants to manually switch to MySQL after creating the solution.
+
This document explains how to switch to the **MySQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
## Replace the Volo.Abp.EntityFrameworkCore.SqlServer Package
diff --git a/docs/en/Entity-Framework-Core-Oracle.md b/docs/en/Entity-Framework-Core-Oracle.md
index 1e340302dc..6e7686c6b0 100644
--- a/docs/en/Entity-Framework-Core-Oracle.md
+++ b/docs/en/Entity-Framework-Core-Oracle.md
@@ -1,5 +1,7 @@
# Switch to EF Core Oracle Provider
+> [ABP CLI](CLI.md) and the [Get Started](https://abp.io/get-started) page already provides an option to create a new solution with Oracle. See [that document](Entity-Framework-Core-Other-DBMS.md) to learn how to use. This document provides guidance for who wants to manually switch to Oracle after creating the solution.
+
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
ABP Framework provides integrations for two different Oracle packages. See one of the following documents based on your provider decision:
diff --git a/docs/en/Entity-Framework-Core-Other-DBMS.md b/docs/en/Entity-Framework-Core-Other-DBMS.md
index 9739dbdd02..bb14f2b906 100644
--- a/docs/en/Entity-Framework-Core-Other-DBMS.md
+++ b/docs/en/Entity-Framework-Core-Other-DBMS.md
@@ -1,15 +1,32 @@
# Switch to Another DBMS for Entity Framework Core
-**[The application startup template](Startup-Templates/Application.md)** comes with **SQL Server provider pre-configured** for the Entity Framework Core. However, EF Core supports [many other DBMSs](https://docs.microsoft.com/en-us/ef/core/providers/) and you can use any of them within your ABP based applications.
+[ABP CLI](CLI.md) provides a `-dbms` option to allow you to choose your Database Management System (DBMS) while creating a new solution. It accepts the following values:
-ABP framework provides **integration packages** for some common DBMSs to make the configuration a bit easier. You can use the following documents to learn how to **switch to your favorite DBMS**:
+- `SqlServer` (default)
+- `MySQL`
+- `SQLite`
+- `Oracle`
+- `Oracle-Devart`
+- `PostgreSQL`
+
+So, if you want to use MySQL for your solution, you can use the `-dbms MySQL` option while using the `abp new` command. Example:
+
+````bash
+abp new BookStore -dbms MySQL
+````
+
+Also, the [Get Started page](https://abp.io/get-started) on the ABP website allows you to select one of the providers.
+
+> **This document provides guidance for who wants to manually change their DBMS after creating the solution.**
+
+You can use the following documents to learn how to **switch to your favorite DBMS**:
* [MySQL](Entity-Framework-Core-MySQL.md)
* [PostgreSQL](Entity-Framework-Core-PostgreSQL.md)
* [Oracle](Entity-Framework-Core-Oracle.md)
* [SQLite](Entity-Framework-Core-SQLite.md)
-However, you can configure your DBMS provider **without** these integration packages. While using the integration package is always recommended (it also makes standard for the depended version across different modules), you can do it manually if there is no integration package for your DBMS provider.
+You can also configure your DBMS provider **without** these integration packages. While using the integration package is always recommended (it also makes standard for the depended version across different modules), you can do it yourself if there is no integration package for your DBMS provider.
For an example, this document explains how to switch to MySQL without using [the MySQL integration package](Entity-Framework-Core-MySQL.md).
diff --git a/docs/en/Entity-Framework-Core-PostgreSQL.md b/docs/en/Entity-Framework-Core-PostgreSQL.md
index 4ddd3dd22a..9cdaeae34c 100644
--- a/docs/en/Entity-Framework-Core-PostgreSQL.md
+++ b/docs/en/Entity-Framework-Core-PostgreSQL.md
@@ -1,5 +1,7 @@
# Switch to EF Core PostgreSQL Provider
+> [ABP CLI](CLI.md) and the [Get Started](https://abp.io/get-started) page already provides an option to create a new solution with PostgreSQL. See [that document](Entity-Framework-Core-Other-DBMS.md) to learn how to use. This document provides guidance for who wants to manually switch to PostgreSQL after creating the solution.
+
This document explains how to switch to the **PostgreSQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
## Replace the Volo.Abp.EntityFrameworkCore.SqlServer Package
diff --git a/docs/en/Entity-Framework-Core-SQLite.md b/docs/en/Entity-Framework-Core-SQLite.md
index cbacf3baa5..5015320af1 100644
--- a/docs/en/Entity-Framework-Core-SQLite.md
+++ b/docs/en/Entity-Framework-Core-SQLite.md
@@ -1,5 +1,7 @@
# Switch to EF Core SQLite Provider
+> [ABP CLI](CLI.md) and the [Get Started](https://abp.io/get-started) page already provides an option to create a new solution with SQLite. See [that document](Entity-Framework-Core-Other-DBMS.md) to learn how to use. This document provides guidance for who wants to manually switch to SQLite after creating the solution.
+
This document explains how to switch to the **SQLite** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.
## Replace the Volo.Abp.EntityFrameworkCore.SqlServer Package
diff --git a/docs/en/Getting-Started-Create-Solution.md b/docs/en/Getting-Started-Create-Solution.md
index 8c62246010..d111637365 100644
--- a/docs/en/Getting-Started-Create-Solution.md
+++ b/docs/en/Getting-Started-Create-Solution.md
@@ -41,19 +41,19 @@ abp new Acme.BookStore{{if UI == "NG"}} -u angular{{else if UI == "Blazor"}} -u
> [ABP CLI document](./CLI.md) covers all of the available commands and options.
-## Mobile Development
+### Mobile Development
If you want to include a [React Native](https://reactnative.dev/) project in your solution, add `-m react-native` (or `--mobile react-native`) argument to project creation command. This is a basic React Native startup template to develop mobile applications integrated to your ABP based backends.
See the [Getting Started with the React Native](Getting-Started-React-Native.md) document to learn how to configure and run the React Native application.
-### The Solution Structure
+## The Solution Structure
The solution has a layered structure (based on the [Domain Driven Design](Domain-Driven-Design.md)) and contains unit & integration test projects. See the [application template document](Startup-Templates/Application.md) to understand the solution structure in details.
{{ if DB == "Mongo" }}
-#### MongoDB Transactions
+## MongoDB Transactions
The [startup template](Startup-templates/Index.md) **disables** transactions in the `.MongoDB` project by default. If your MongoDB server supports transactions, you can enable it in the *YourProjectMongoDbModule* class's `ConfigureServices` method:
diff --git a/docs/en/Getting-Started-With-Startup-Templates.md b/docs/en/Getting-Started-With-Startup-Templates.md
index 9beb84bcef..add08b8ebd 100644
--- a/docs/en/Getting-Started-With-Startup-Templates.md
+++ b/docs/en/Getting-Started-With-Startup-Templates.md
@@ -1,8 +1,3 @@
-# Getting Started with the Startup Templates
+This document has been [moved to here](Getting-Started.md).
-See the following tutorials to learn how to get started with the ABP Framework using the pre-built application startup templates:
-
-* [Getting Started With the ASP.NET Core MVC / Razor Pages UI](Getting-Started?UI=MVC&DB=EF&Tiered=No)
-* [Getting Started with the Angular UI](Getting-Started?UI=NG&DB=EF&Tiered=No)
-
-
\ No newline at end of file
+
diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md
index b7bc94f6b3..0f4372b621 100644
--- a/docs/en/Startup-Templates/Application.md
+++ b/docs/en/Startup-Templates/Application.md
@@ -6,7 +6,7 @@ This template provides a layered application structure based on the [Domain Driv
This document explains **the solution structure** and projects in details. If you want to start quickly, follow the guides below:
-* [The getting started document](../Getting-Started-With-Startup-Templates.md) explains how to create a new application in a few minutes.
+* [The getting started document](../Getting-Started.md) explains how to create a new application in a few minutes.
* [The application development tutorial](../Tutorials/Part-1) explains step by step application development.
## How to Start With?
diff --git a/docs/en/Testing.md b/docs/en/Testing.md
index 29302f2e35..619aaa2160 100644
--- a/docs/en/Testing.md
+++ b/docs/en/Testing.md
@@ -423,7 +423,7 @@ namespace MyProject.Issues
## Integration Tests
-> You can follow the [web application development tutorial](Tutorials/Part-1.md) to learn developing a full stack application, including the integration tests.
+> You can also follow the [web application development tutorial](Tutorials/Part-1.md) to learn developing a full stack application, including the integration tests.
### The Integration Test Infrastructure
@@ -442,7 +442,7 @@ Using in-memory SQLite database has two main advantages;
### The Seed Data
-Writing tests against an empty database is not practical. In most cases, you need to some initial data in the database. For example, if you write a test class that query, update and delete the Products, it would be helpful to have a few products in the database before executing the test case.
+Writing tests against an empty database is not practical. In most cases, you need to some initial data in the database. For example, if you write a test class that query, update and delete the products, it would be helpful to have a few products in the database before executing the test case.
ABP's [Data Seeding](Data-Seeding.md) system is a powerful way to seed the initial data. The application startup template has a *YourProject*TestDataSeedContributor class in the `.TestBase` project. You can fill it to have an initial data that you can use for each test method.
@@ -649,6 +649,101 @@ namespace MyProject.Issues
It's that simple. This test method tests everything, including the application service, EF Core mapping, object to object mapping and the repository implementation. In this way, you can fully test the Application Layer and the Domain Layer of your solution.
+### Dealing with Unit of Work in Integration Tests
+
+ABP's [unit of work](Unit-Of-Work.md) system controls the database connection and transaction management in your application. It seamlessly works while you writing your application code, so you may not aware of it.
+
+In the ABP Framework, all the database operations must be performed inside a unit of work scope. When you test an [application service](Application-Services.md) method, the unit of work scope will be the scope of your application service method. If you are testing a [repository](Repositories.md) method, the unit of work scope will be the scope of your repository method.
+
+In some cases, you may need to manually control the unit of work scope. Consider the following test method:
+
+````csharp
+public class IssueRepository_Tests : MyProjectDomainTestBase
+{
+ private readonly IRepository _issueRepository;
+
+ public IssueRepository_Tests()
+ {
+ _issueRepository = GetRequiredService>();
+ }
+
+ public async Task Should_Query_By_Title()
+ {
+ IQueryable queryable = await _issueRepository.GetQueryableAsync();
+ var issue = queryable.FirstOrDefaultAsync(i => i.Title == "My issue title");
+ issue.ShouldNotBeNull();
+ }
+}
+````
+
+We are using `_issueRepository.GetQueryableAsync` to obtain an `IQueryable` object. Then, we are using the `FirstOrDefaultAsync` method to query an issue by its title. The database query is executed at this point, and you get an exception indicating that there is no active unit of work.
+
+To make that test properly working, you should manually start a unit of work scope as shown in the following example:
+
+````csharp
+public class IssueRepository_Tests : MyProjectDomainTestBase
+{
+ private readonly IRepository _issueRepository;
+ private readonly IUnitOfWorkManager _unitOfWorkManager;
+
+ public IssueRepository_Tests()
+ {
+ _issueRepository = GetRequiredService>();
+ _unitOfWorkManager = GetRequiredService();
+ }
+
+ public async Task Should_Query_By_Title()
+ {
+ using (var uow = _unitOfWorkManager.Begin())
+ {
+ IQueryable queryable = await _issueRepository.GetQueryableAsync();
+ var issue = queryable.FirstOrDefaultAsync(i => i.Title == "My issue title");
+ issue.ShouldNotBeNull();
+ await uow.CompleteAsync();
+ }
+ }
+}
+````
+
+We've used the `IUnitOfWorkManager` service to create a unit of work scope, then called the `FirstOrDefaultAsync` method inside that scope, so we don't have the problem anymore.
+
+> Note that we've tested the `FirstOrDefaultAsync` to demonstrate the unit of work problem. Normally, as a good principle, you should write tests only your own code.
+
+### Working with DbContext
+
+In some cases, you may want to directory work with the Entity Framework's `DbContext` object to perform database operations in your test methods. In this case, you can use `IDbContextProvider`service to obtain a `DbContext` instance inside a unit of work.
+
+The following example shows how you can create a `DbContext` object in a test method:
+
+````csharp
+public class MyDbContext_Tests : MyProjectDomainTestBase
+{
+ private readonly IDbContextProvider _dbContextProvider;
+ private readonly IUnitOfWorkManager _unitOfWorkManager;
+
+ public IssueRepository_Tests()
+ {
+ _dbContextProvider = GetRequiredService>();
+ _unitOfWorkManager = GetRequiredService();
+ }
+
+ public async Task Should_Query_By_Title()
+ {
+ using (var uow = _unitOfWorkManager.Begin())
+ {
+ var dbContext = await _dbContextProvider.GetDbContextAsync();
+ var issue = await dbContext.Issues.FirstOrDefaultAsync(i => i.Title == "My issue title");
+ issue.ShouldNotBeNull();
+ await uow.CompleteAsync();
+ }
+ }
+}
+````
+
+Just like we've done in the *Dealing with Unit of Work in Integration Tests* section, we should perform `DbContext` operations inside an active unit of work.
+
+For [MongoDB](MongoDB.md), you can use the `IMongoDbContextProvider` service to obtain a `DbContext` object and directly use MongoDB APIs in your test methods.
+
## UI Tests
In general, there are two types of UI Tests;
diff --git a/docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md b/docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md
index 3464d4bc68..31c2dbe7ea 100644
--- a/docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md
+++ b/docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md
@@ -1,6 +1,12 @@
# Dynamic JavaScript API Client Proxies
-It is typical to consume your HTTP APIs from your JavaScript code. To do that, you normally deal with low level AJAX calls, like $.ajax, or better [abp.ajax](JavaScript-API/Ajax.md). ABP Framework provides **a better way** to call your HTTP APIs from your JavaScript code: Dynamic JavaScript API Client Proxies!
+It is typical to consume your HTTP APIs from your JavaScript code. To do that, you normally deal with low level AJAX calls, like $.ajax, or better [abp.ajax](JavaScript-API/Ajax.md). ABP Framework provides **a better way** to call your HTTP APIs from your JavaScript code: JavaScript API Client Proxies!
+
+## Static vs Dynamic JavaScript Client Proxies
+
+ABP provides **two types** of client proxy generation system. This document explains the **dynamic client proxies**, which generates client-side proxies on runtime. You can also see the [Static JavaScript API Client Proxies](Static-JavaScript-Proxies.md) documentation to learn how to generate proxies on development time.
+
+Development-time (static) client proxy generation has a **slight performance advantage** since it doesn't need to obtain the HTTP API definition on runtime. However, you should **re-generate** the client proxy code whenever you change your API endpoint definition. On the other hand, dynamic client proxies are generated on runtime and provides an **easier development experience**.
## A Quick Example
@@ -55,7 +61,7 @@ acme.bookStore.authors.author
## AJAX Details
-Dynamic JavaScript client proxy functions use the [abp.ajax](JavaScript-API/Ajax.md) under the hood. So, you have the same benefits like **automatic error handling**. Also, you can fully control the AJAX call by providing the options.
+JavaScript client proxy functions use the [abp.ajax](JavaScript-API/Ajax.md) under the hood. So, you have the same benefits like **automatic error handling**. Also, you can fully control the AJAX call by providing the options.
### The Return Value
@@ -86,6 +92,6 @@ The magic is done by the `/Abp/ServiceProxyScript` endpoint defined by the ABP F
## See Also
-* [Web Application Development Tutorial](../../Tutorials/Part-1.md)
+* [Static JavaScript API Client Proxies](Static-JavaScript-Proxies.md)
* [Auto API Controllers](../../API/Auto-API-Controllers.md)
-* [Dynamic C# API Client Proxies](../../API/Dynamic-CSharp-API-Clients.md)
\ No newline at end of file
+* [Web Application Development Tutorial](../../Tutorials/Part-1.md)
\ No newline at end of file
diff --git a/docs/en/UI/AspNetCore/Static-JavaScript-Proxies.md b/docs/en/UI/AspNetCore/Static-JavaScript-Proxies.md
new file mode 100644
index 0000000000..20b87aa89b
--- /dev/null
+++ b/docs/en/UI/AspNetCore/Static-JavaScript-Proxies.md
@@ -0,0 +1,157 @@
+# Static JavaScript API Client Proxies
+
+It is typical to consume your HTTP APIs from your JavaScript code. To do that, you normally deal with low level AJAX calls, like $.ajax, or better [abp.ajax](JavaScript-API/Ajax.md). ABP Framework provides **a better way** to call your HTTP APIs from your JavaScript code: JavaScript API Client Proxies!
+
+## Static vs Dynamic JavaScript Client Proxies
+
+ABP provides **two types** of client proxy generation system. This document explains the **static client proxies**, which generates client-side code in your development time. You can also see the [Dynamic JavaScript API Client Proxies](Dynamic-JavaScript-Proxies.md) documentation to learn how to use proxies generated on runtime.
+
+Development-time (static) client proxy generation has a **slight performance advantage** since it doesn't need to obtain the HTTP API definition on runtime. However, you should **re-generate** the client proxy code whenever you change your API endpoint definition. On the other hand, dynamic client proxies are generated on runtime and provides an **easier development experience**.
+
+## A Quick Example
+
+### The Application Service
+
+Assume that you have an application service defined as shown below:
+
+````csharp
+using System;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+
+namespace Acme.BookStore.Authors
+{
+ public interface IAuthorAppService : IApplicationService
+ {
+ Task GetAsync(Guid id);
+
+ Task> GetListAsync(GetAuthorListDto input);
+
+ Task CreateAsync(CreateAuthorDto input);
+
+ Task UpdateAsync(Guid id, UpdateAuthorDto input);
+
+ Task DeleteAsync(Guid id);
+ }
+}
+````
+
+> You can follow the [web application development tutorial](../../Tutorials/Part-1.md) to learn how to create [application services](../../Application-Services.md), expose them as [HTTP APIs](../../API/Auto-API-Controllers.md) and consume from the JavaScript code as a complete example.
+
+### Generating the JavaScript Code
+
+Server side must be up and running while generating the client proxy code. So, first run the application that hosts your HTTP APIs (can be the Web application or the HttpApi.Host application depending on your solution structure).
+
+Open a command-line terminal in the root folder of your web project (`.csproj`) and type the following command:
+
+````bash
+abp generate-proxy -t js -u https://localhost:53929/
+````
+
+> If you haven't installed yet, you should install the [ABP CLI](../CLI.md). Change the example URL to your application's root URL.
+
+This command should generate the following files under the `ClientProxies` folder:
+
+
+
+`app-proxy.js` is the generated proxy file in this example. Here, an example proxy function in this file:
+
+````js
+acme.bookStore.authors.author.get = function(id, ajaxParams) {
+ return abp.ajax($.extend(true, {
+ url: abp.appPath + 'api/app/author/' + id + '',
+ type: 'GET'
+ }, ajaxParams));
+};
+````
+
+> `generate-proxy` command generates proxies for only the APIs you've defined in your application (assumes `app` as the module name). If you are developing a modular application, you can specify the `-m` (or `--module`) parameter to specify the module you want to generate proxies. See the *generate-proxy* section in the [ABP CLI](../CLI.md) documentation for other options.
+
+### Using the Proxy Functions
+
+To use the proxy functions, first import the `app-proxy.js` file into your page:
+
+````html
+
+````
+
+> We've used the [abp-script tag helper](Bundling-Minification.md) in this example. You could use the standard `script` tag, but the `abp-script` is the recommended way of importing JavaScript files to your pages.
+
+Now, you can call any of the application service methods from your JavaScript code, just like calling a JavaScript function. The JavaScript function has the identical function **name**, **parameters** and the **return value** with the C# method.
+
+**Example: Get a single author**
+
+````js
+acme.bookStore.authors.author
+ .get("7245a066-5457-4941-8aa7-3004778775f0") //Get id from somewhere!
+ .then(function(result){
+ console.log(result);
+ });
+````
+
+**Example: Get the authors list**
+
+````js
+acme.bookStore.authors.author.getList({
+ maxResultCount: 10
+}).then(function(result){
+ console.log(result.items);
+});
+````
+
+**Example: Delete an author**
+
+```js
+acme.bookStore.authors.author
+ .delete('7245a066-5457-4941-8aa7-3004778775f0') //Get id from somewhere!
+ .then(function() {
+ abp.notify.info('Successfully deleted!');
+ });
+```
+
+## Disabling Dynamic JavaScript Proxies
+
+When you create an application or module, the [dynamic client proxy generation](Dynamic-JavaScript-Proxies.md) approach is used by default. If you want to use the statically generated client proxies for your application, you should explicitly disable it for your application or module in the `ConfigureServices` method of your [module class](../../Module-Development-Basics.md) as like in the following example:
+
+````csharp
+Configure(options =>
+{
+ options.DisableModule("app");
+});
+````
+
+`app` represents the main application in this example, which works if you are creating an application. If you are developing an application module, then use your module's name.
+
+## AJAX Details
+
+JavaScript client proxy functions use the [abp.ajax](JavaScript-API/Ajax.md) under the hood. So, you have the same benefits like **automatic error handling**. Also, you can fully control the AJAX call by providing the options.
+
+### The Return Value
+
+Every function returns a [Deferred object](https://api.jquery.com/category/deferred-object/). That means you can chain with `then` to get the result, `catch` to handle the error, `always` to perform an action once the operation completes (success or failed).
+
+### AJAX Options
+
+Every function gets an additional **last parameter** after your own parameters. The last parameter is called as `ajaxParams`. It is an object that overrides the AJAX options.
+
+**Example: Set `type` and `dataType` AJAX options**
+
+````js
+acme.bookStore.authors.author
+ .delete('7245a066-5457-4941-8aa7-3004778775f0', {
+ type: 'POST',
+ dataType: 'xml'
+ })
+ .then(function() {
+ abp.notify.info('Successfully deleted!');
+ });
+````
+
+See the [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) documentation for all the available options.
+
+## See Also
+
+* [Dynamic JavaScript API Client Proxies](Dynamic-JavaScript-Proxies.md)
+* [Auto API Controllers](../../API/Auto-API-Controllers.md)
+* [Web Application Development Tutorial](../../Tutorials/Part-1.md)
\ No newline at end of file
diff --git a/docs/en/UI/Blazor/Overall.md b/docs/en/UI/Blazor/Overall.md
index 112dfec8cc..ff361d6784 100644
--- a/docs/en/UI/Blazor/Overall.md
+++ b/docs/en/UI/Blazor/Overall.md
@@ -93,7 +93,7 @@ These libraries are selected as the base libraries and available to the applicat
> Bootstrap's JavaScript part is not used since the Blazorise library already provides the necessary functionalities to the Bootstrap components in a native way.
-> Beginning from June, 2021, the Blazorise library has dual licenses; open source & commercial. Based on your yearly revenue, you may need to buy a commercial license. See [this post](https://blazorise.com/news/blazorise-commercial-going-live/) for the announcement.
+> Beginning from June, 2021, the Blazorise library has dual licenses; open source & commercial. Based on your yearly revenue, you may need to buy a commercial license. See [this post](https://blazorise.com/news/announcing-2022-blazorise-plans-and-pricing-updates) to learn more.
### The Layout
@@ -160,4 +160,4 @@ ABP provides an [automatic error handling system](Error-Handling.md) for the Bla
## Customization
-While the theme and some modules come as NuGet packages, you can still replace/override and customize them on need. See the [Customization / Overriding Components](Customization-Overriding-Components.md) document.
\ No newline at end of file
+While the theme and some modules come as NuGet packages, you can still replace/override and customize them on need. See the [Customization / Overriding Components](Customization-Overriding-Components.md) document.
diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json
index eb13d36a50..072413fe80 100644
--- a/docs/en/docs-nav.json
+++ b/docs/en/docs-nav.json
@@ -586,6 +586,10 @@
"text": "Dynamic C# API Clients",
"path": "API/Dynamic-CSharp-API-Clients.md"
},
+ {
+ "text": "Static C# API Clients",
+ "path": "API/Static-CSharp-API-Clients.md"
+ },
{
"text": "ABP Endpoints",
"items": [
@@ -643,6 +647,10 @@
"text": "Dynamic JavaScript API Client Proxies",
"path": "UI/AspNetCore/Dynamic-JavaScript-Proxies.md"
},
+ {
+ "text": "Static JavaScript API Client Proxies",
+ "path": "UI/AspNetCore/Static-JavaScript-Proxies.md"
+ },
{
"text": "Client Side Package Management",
"path": "UI/AspNetCore/Client-Side-Package-Management.md"
diff --git a/docs/en/images/generated-static-client-proxies.png b/docs/en/images/generated-static-client-proxies.png
new file mode 100644
index 0000000000..4c1678aebd
Binary files /dev/null and b/docs/en/images/generated-static-client-proxies.png differ
diff --git a/docs/en/images/static-js-proxy-example.png b/docs/en/images/static-js-proxy-example.png
new file mode 100644
index 0000000000..575957b9ae
Binary files /dev/null and b/docs/en/images/static-js-proxy-example.png differ
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
index c205e15321..22b919c91c 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
@@ -36,6 +36,7 @@ using Volo.Abp.Http;
using Volo.Abp.DynamicProxy;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.Http.Modeling;
+using Volo.Abp.Http.ProxyScripting.Generators.JQuery;
using Volo.Abp.Json;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
@@ -185,6 +186,11 @@ public class AbpAspNetCoreMvcModule : AbpModule
endpointContext.Endpoints.MapRazorPages();
});
});
+
+ Configure(options =>
+ {
+ options.DisableModule("abp");
+ });
}
public override void PostConfigureServices(ServiceConfigurationContext context)
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs
index f62b16b19b..5c5e7ed6c0 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs
@@ -18,13 +18,14 @@ public class RemoteStreamContentOutputFormatter : OutputFormatter
return typeof(IRemoteStreamContent).IsAssignableFrom(type);
}
- public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
+ public async override Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
{
var remoteStream = (IRemoteStreamContent)context.Object;
if (remoteStream != null)
{
context.HttpContext.Response.ContentType = remoteStream.ContentType;
+ context.HttpContext.Response.ContentLength = remoteStream.ContentLength;
if (!remoteStream.FileName.IsNullOrWhiteSpace())
{
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs
index 91b5019199..d85bad82eb 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs
@@ -21,25 +21,25 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency
Clock = clock;
}
- public void SetCreationProperties(object targetObject)
+ public virtual void SetCreationProperties(object targetObject)
{
SetCreationTime(targetObject);
SetCreatorId(targetObject);
}
- public void SetModificationProperties(object targetObject)
+ public virtual void SetModificationProperties(object targetObject)
{
SetLastModificationTime(targetObject);
SetLastModifierId(targetObject);
}
- public void SetDeletionProperties(object targetObject)
+ public virtual void SetDeletionProperties(object targetObject)
{
SetDeletionTime(targetObject);
SetDeleterId(targetObject);
}
- private void SetCreationTime(object targetObject)
+ protected virtual void SetCreationTime(object targetObject)
{
if (!(targetObject is IHasCreationTime objectWithCreationTime))
{
@@ -52,7 +52,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency
}
}
- private void SetCreatorId(object targetObject)
+ protected virtual void SetCreatorId(object targetObject)
{
if (!CurrentUser.Id.HasValue)
{
@@ -95,7 +95,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency
}
}
- private void SetLastModificationTime(object targetObject)
+ protected virtual void SetLastModificationTime(object targetObject)
{
if (targetObject is IHasModificationTime objectWithModificationTime)
{
@@ -103,7 +103,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency
}
}
- private void SetLastModifierId(object targetObject)
+ protected virtual void SetLastModifierId(object targetObject)
{
if (!(targetObject is IModificationAuditedObject modificationAuditedObject))
{
@@ -137,7 +137,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency
modificationAuditedObject.LastModifierId = CurrentUser.Id;
}
- private void SetDeletionTime(object targetObject)
+ protected virtual void SetDeletionTime(object targetObject)
{
if (targetObject is IHasDeletionTime objectWithDeletionTime)
{
@@ -148,7 +148,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency
}
}
- private void SetDeleterId(object targetObject)
+ protected virtual void SetDeleterId(object targetObject)
{
if (!(targetObject is IDeletionAuditedObject deletionAuditedObject))
{
diff --git a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj
index 9f028d31ee..32f9da017c 100644
--- a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj
+++ b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ netstandard2.1Volo.Abp.AutoMapperVolo.Abp.AutoMapper$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
@@ -21,7 +21,7 @@
-
+
diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs
index 6ed44a6300..18fef842da 100644
--- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs
+++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs
@@ -1,5 +1,6 @@
using System;
using AutoMapper;
+using AutoMapper.Internal;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.Auditing;
@@ -49,7 +50,7 @@ public class AbpAutoMapperModule : AbpModule
{
foreach (var profileType in options.ValidatingProfiles)
{
- config.AssertConfigurationIsValid(((Profile)Activator.CreateInstance(profileType)).ProfileName);
+ config.Internal().AssertConfigurationIsValid(((Profile)Activator.CreateInstance(profileType)).ProfileName);
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs
index ea8541cbb9..1b060a8dbc 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs
@@ -98,7 +98,7 @@ public class CommandLineArgumentParser : ICommandLineArgumentParser, ITransientD
{
if (argument.Length <= 1)
{
- throw new ArgumentException("Should specify an option name after '--' prefix!");
+ throw new ArgumentException("Should specify an option name after '-' prefix!");
}
return argument.RemovePreFix("-");
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
index c244abd719..526ae77363 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
@@ -10,7 +10,9 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands.Services;
+using Volo.Abp.Cli.LIbs;
using Volo.Abp.Cli.ProjectBuilding;
+using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
@@ -21,8 +23,6 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
{
public const string Name = "new";
- public ILogger Logger { get; set; }
-
protected TemplateProjectBuilder TemplateProjectBuilder { get; }
public ITemplateInfoProvider TemplateInfoProvider { get; }
@@ -30,13 +30,13 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
, ITemplateInfoProvider templateInfoProvider,
ConnectionStringProvider connectionStringProvider,
SolutionPackageVersionFinder solutionPackageVersionFinder,
- ICmdHelper cmdHelper)
- : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper)
+ ICmdHelper cmdHelper,
+ IInstallLibsService installLibsService,
+ AngularPwaSupportAdder angularPwaSupportAdder)
+ : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService, angularPwaSupportAdder)
{
TemplateProjectBuilder = templateProjectBuilder;
TemplateInfoProvider = templateInfoProvider;
-
- Logger = NullLogger.Instance;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
@@ -79,7 +79,9 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien
Logger.LogInformation($"'{projectName}' has been successfully created to '{projectArgs.OutputFolder}'");
RunGraphBuildForMicroserviceServiceTemplate(projectArgs);
- RunInstallLibsForWebTemplate(projectArgs);
+ await RunInstallLibsForWebTemplateAsync(projectArgs);
+ ConfigurePwaSupportForAngular(projectArgs);
+
OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs);
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
index d638a21f87..6e280d7dc3 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
@@ -1,6 +1,7 @@
using System;
using System.IO;
using System.Linq;
+using System.Threading.Tasks;
using ICSharpCode.SharpZipLib.Core;
using ICSharpCode.SharpZipLib.Zip;
using Microsoft.Extensions.Logging;
@@ -8,6 +9,7 @@ using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands.Services;
+using Volo.Abp.Cli.LIbs;
using Volo.Abp.Cli.ProjectBuilding;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Templates.App;
@@ -22,13 +24,22 @@ public abstract class ProjectCreationCommandBase
public ConnectionStringProvider ConnectionStringProvider { get; }
public SolutionPackageVersionFinder SolutionPackageVersionFinder { get; }
public ICmdHelper CmdHelper { get; }
+ public IInstallLibsService InstallLibsService { get; }
+ public AngularPwaSupportAdder AngularPwaSupportAdder { get; }
public ILogger Logger { get; set; }
- public ProjectCreationCommandBase(ConnectionStringProvider connectionStringProvider, SolutionPackageVersionFinder solutionPackageVersionFinder, ICmdHelper cmdHelper)
+ public ProjectCreationCommandBase(
+ ConnectionStringProvider connectionStringProvider,
+ SolutionPackageVersionFinder solutionPackageVersionFinder,
+ ICmdHelper cmdHelper,
+ IInstallLibsService installLibsService,
+ AngularPwaSupportAdder angularPwaSupportAdder)
{
ConnectionStringProvider = connectionStringProvider;
SolutionPackageVersionFinder = solutionPackageVersionFinder;
CmdHelper = cmdHelper;
+ InstallLibsService = installLibsService;
+ AngularPwaSupportAdder = angularPwaSupportAdder;
Logger = NullLogger.Instance;
}
@@ -48,6 +59,12 @@ public abstract class ProjectCreationCommandBase
Logger.LogInformation("Preview: yes");
}
+ var pwa = commandLineArgs.Options.ContainsKey(Options.ProgressiveWebApp.Short);
+ if (pwa)
+ {
+ Logger.LogInformation("Progressive Web App: yes");
+ }
+
var databaseProvider = GetDatabaseProvider(commandLineArgs);
if (databaseProvider != DatabaseProvider.NotSpecified)
{
@@ -162,7 +179,8 @@ public abstract class ProjectCreationCommandBase
gitHubVoloLocalRepositoryPath,
templateSource,
commandLineArgs.Options,
- connectionString
+ connectionString,
+ pwa
);
}
@@ -307,14 +325,27 @@ public abstract class ProjectCreationCommandBase
}
}
- protected virtual void RunInstallLibsForWebTemplate(ProjectBuildArgs projectArgs)
+ protected async Task RunInstallLibsForWebTemplateAsync(ProjectBuildArgs projectArgs)
{
if (AppTemplateBase.IsAppTemplate(projectArgs.TemplateName) ||
ModuleTemplateBase.IsModuleTemplate(projectArgs.TemplateName) ||
AppNoLayersTemplateBase.IsAppNoLayersTemplate(projectArgs.TemplateName) ||
MicroserviceServiceTemplateBase.IsMicroserviceTemplate(projectArgs.TemplateName))
{
- CmdHelper.RunCmd("abp install-libs", projectArgs.OutputFolder);
+ Logger.LogInformation("Installing client-side packages...");
+ await InstallLibsService.InstallLibsAsync(projectArgs.OutputFolder);
+ }
+ }
+
+ protected void ConfigurePwaSupportForAngular(ProjectBuildArgs projectArgs)
+ {
+ var isAngular = projectArgs.UiFramework == UiFramework.Angular;
+ var isPwa = projectArgs.Pwa;
+
+ if (isAngular && isPwa)
+ {
+ Logger.LogInformation("Adding PWA Support to Angular app.");
+ AngularPwaSupportAdder.AddPwaSupport(projectArgs.OutputFolder);
}
}
@@ -476,5 +507,10 @@ public abstract class ProjectCreationCommandBase
{
public const string Long = "preview";
}
+
+ public static class ProgressiveWebApp
+ {
+ public const string Short = "pwa";
+ }
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs
index 2ce5ba8209..22311bb986 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs
@@ -83,15 +83,18 @@ public abstract class ProxyCommandBase : IConsoleCommand, ITransientDependenc
sb.AppendLine("Options:");
sb.AppendLine("");
sb.AppendLine("-m|--module (default: 'app') The name of the backend module you wish to generate proxies for.");
- sb.AppendLine("-t|--type The name of generate type (csharp, js, ng).");
sb.AppendLine("-wd|--working-directory Execution directory.");
sb.AppendLine("-u|--url API definition URL from.");
- sb.AppendLine("-a|--api-name (default: 'default') The name of the API endpoint defined in the /src/environments/environment.ts.");
- sb.AppendLine("-s|--source (default: 'defaultProject') Angular project name to resolve the root namespace & API definition URL from.");
- sb.AppendLine("-o|--output JavaScript file path or folder to place generated code in.");
- sb.AppendLine("-p|--prompt Asks the options from the command line prompt (for the missing options)");
- sb.AppendLine("--target (default: 'defaultProject') Angular project name to place generated code in.");
- sb.AppendLine("--folder (default: 'ClientProxies') Folder name to place generated CSharp code in.");
+ sb.AppendLine("-t|--type The name of generate type (csharp, js, ng).");
+ sb.AppendLine(" csharp");
+ sb.AppendLine(" --folder (default: 'ClientProxies') Folder name to place generated CSharp code in.");
+ sb.AppendLine(" js");
+ sb.AppendLine(" -o|--output JavaScript file path or folder to place generated code in.");
+ sb.AppendLine(" ng");
+ sb.AppendLine(" -a|--api-name (default: 'default') The name of the API endpoint defined in the /src/environments/environment.ts.");
+ sb.AppendLine(" -s|--source (default: 'defaultProject') Angular project name to resolve the root namespace & API definition URL from.");
+ sb.AppendLine(" -p|--prompt Asks the options from the command line prompt (for the missing options)");
+ sb.AppendLine(" --target (default: 'defaultProject') Angular project name to place generated code in.");
sb.AppendLine("");
sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI");
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs
index 0e797e682f..aabd5c6dfd 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs
@@ -1,33 +1,53 @@
using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Net.NetworkInformation;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
+using Newtonsoft.Json.Linq;
using NuGet.Versioning;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands.Services;
+using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.NuGet;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Http;
+using Volo.Abp.Json;
+using Volo.Abp.Threading;
namespace Volo.Abp.Cli.Commands;
public class SuiteCommand : IConsoleCommand, ITransientDependency
{
public const string Name = "suite";
-
+
public ICmdHelper CmdHelper { get; }
private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService;
private readonly NuGetService _nuGetService;
+ private readonly CliHttpClientFactory _cliHttpClientFactory;
private const string SuitePackageName = "Volo.Abp.Suite";
public ILogger Logger { get; set; }
- public SuiteCommand(AbpNuGetIndexUrlService nuGetIndexUrlService, NuGetService nuGetService, ICmdHelper cmdHelper)
+ private const string AbpSuiteHost = "http://localhost:3000";
+
+ public SuiteCommand(
+ AbpNuGetIndexUrlService nuGetIndexUrlService,
+ NuGetService nuGetService,
+ ICmdHelper cmdHelper,
+ CliHttpClientFactory cliHttpClientFactory)
{
CmdHelper = cmdHelper;
_nuGetIndexUrlService = nuGetIndexUrlService;
_nuGetService = nuGetService;
+ _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
}
@@ -48,6 +68,18 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
RunSuite();
break;
+ case "generate":
+ await InstallSuiteIfNotInstalledAsync();
+ var suiteProcess = StartSuite();
+ System.Threading.Thread.Sleep(500); //wait for initialization of the app
+ await GenerateCrudPageAsync(commandLineArgs);
+ if (suiteProcess != null)
+ {
+ KillSuite();
+ }
+
+ break;
+
case "install":
await InstallSuiteAsync(version, preview);
break;
@@ -63,6 +95,115 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
}
}
+ private async Task GenerateCrudPageAsync(CommandLineArgs args)
+ {
+ var entityFile = args.Options.GetOrNull(Options.Crud.Entity.Short, Options.Crud.Entity.Long);
+ var solutionFile = args.Options.GetOrNull(Options.Crud.Solution.Short, Options.Crud.Solution.Long);
+
+ if (entityFile.IsNullOrEmpty() || !entityFile.EndsWith(".json") || !File.Exists(entityFile) ||
+ solutionFile.IsNullOrEmpty() || !solutionFile.EndsWith(".sln"))
+ {
+ throw new UserFriendlyException("Invalid Arguments!");
+ }
+
+ Logger.LogInformation("Generating CRUD Page...");
+
+ var client = _cliHttpClientFactory.CreateClient(false);
+ var solutionId = await GetSolutionIdAsync(client, solutionFile);
+
+ if (!solutionId.HasValue)
+ {
+ return;
+ }
+
+ var entityContent = new StringContent(
+ File.ReadAllText(entityFile),
+ Encoding.UTF8,
+ MimeTypes.Application.Json
+ );
+
+ var responseMessage = await client.PostAsync(
+ $"{AbpSuiteHost}/api/abpSuite/crudPageGenerator/{solutionId.ToString()}/save-and-generate-entity",
+ entityContent
+ );
+
+ var response = await responseMessage.Content.ReadAsStringAsync();
+
+ if (!response.IsNullOrWhiteSpace())
+ {
+ Logger.LogError(response);
+ }
+ else
+ {
+ Logger.LogInformation("CRUD page generation successfully completed.");
+ }
+ }
+
+ private async Task GetSolutionIdAsync(HttpClient client, string solutionPath)
+ {
+ var timeIntervals = new List();
+ for (var i = 0; i < 10; i++)
+ {
+ timeIntervals.Add(TimeSpan.FromSeconds(5));
+ }
+
+ var responseMessage = await client.GetHttpResponseMessageWithRetryAsync(
+ "http://localhost:3000/api/abpSuite/solutions",
+ _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)),
+ Logger,
+ timeIntervals.ToArray());
+
+ var response = await responseMessage.Content.ReadAsStringAsync();
+ JArray solutions;
+
+ try
+ {
+ solutions = (JArray)(JObject.Parse(response)["solutions"]);
+ }
+ catch (Exception)
+ {
+ Logger.LogError(response);
+ return await AddSolutionToSuiteAsync(client, solutionPath);
+ }
+
+ foreach (JObject solution in solutions)
+ {
+ if (solution["path"].ToString() == solutionPath)
+ {
+ return Guid.Parse(solution["id"].ToString());
+ }
+ }
+
+ return await AddSolutionToSuiteAsync(client, solutionPath);
+ }
+
+ private async Task AddSolutionToSuiteAsync(HttpClient client, string solutionPath)
+ {
+ var entityContent = new StringContent(
+ "{\"Path\": \"" + solutionPath.Replace("\\", "\\\\") + "\"}",
+ Encoding.UTF8,
+ MimeTypes.Application.Json
+ );
+
+ var responseMessage = await client.PostAsync(
+ "http://localhost:3000/api/abpSuite/addSolution",
+ entityContent,
+ _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10))
+ );
+
+ var response = await responseMessage.Content.ReadAsStringAsync();
+
+ try
+ {
+ return Guid.Parse(JObject.Parse(response)["id"].ToString());
+ }
+ catch (Exception)
+ {
+ Logger.LogError(response);
+ return null;
+ }
+ }
+
private async Task InstallSuiteIfNotInstalledAsync()
{
var currentSuiteVersionAsString = GetCurrentSuiteVersion();
@@ -132,7 +273,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
}
CmdHelper.RunCmd(
- $"dotnet tool install {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", out int exitCode
+ $"dotnet tool install {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g",
+ out int exitCode
);
if (exitCode == 0)
@@ -155,7 +297,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
private void ShowSuiteManualInstallCommand()
{
Logger.LogInformation("You can also run the following command to install ABP Suite.");
- Logger.LogInformation("dotnet tool install -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json");
+ Logger.LogInformation(
+ "dotnet tool install -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json");
}
private async Task UpdateSuiteAsync(string version = null, bool preview = false)
@@ -202,7 +345,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
}
CmdHelper.RunCmd(
- $"dotnet tool update {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", out int exitCode
+ $"dotnet tool update {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g",
+ out int exitCode
);
if (exitCode != 0)
@@ -231,7 +375,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
private void ShowSuiteManualUpdateCommand()
{
Logger.LogError("You can also run the following command to update ABP Suite.");
- Logger.LogError("dotnet tool update -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json");
+ Logger.LogError(
+ "dotnet tool update -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json");
}
private void RemoveSuite()
@@ -258,6 +403,56 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
CmdHelper.RunCmd("abp-suite");
}
+ private Process StartSuite()
+ {
+ try
+ {
+ if (!GlobalToolHelper.IsGlobalToolInstalled("abp-suite"))
+ {
+ Logger.LogWarning("ABP Suite is not installed! To install it you can run the command: \"abp suite install\"");
+ return null;
+ }
+ }
+ catch (Exception ex)
+ {
+ Logger.LogWarning("Couldn't check ABP Suite installed status: " + ex.Message);
+ }
+
+ if (IsSuiteAlreadyRunning())
+ {
+ return null;
+ }
+
+ return CmdHelper.RunCmdAndGetProcess("abp-suite --no-browser");
+ }
+
+ private bool IsSuiteAlreadyRunning()
+ {
+ var ipGP = IPGlobalProperties.GetIPGlobalProperties();
+ var endpoints = ipGP.GetActiveTcpListeners();
+ return endpoints.Any(e => e.Port == 3000);
+ }
+
+ private void KillSuite()
+ {
+ try
+ {
+ var suiteProcesses = (from p in Process.GetProcesses()
+ where p.ProcessName.ToLower().Contains("abp-suite")
+ select p);
+
+ foreach (var suiteProcess in suiteProcesses)
+ {
+ suiteProcess.Kill();
+ Logger.LogInformation("Suite closed.");
+ }
+ }
+ catch (Exception ex)
+ {
+ Logger.LogInformation("Cannot close Suite." + ex.Message);
+ }
+ }
+
public string GetUsageInfo()
{
var sb = new StringBuilder();
@@ -306,5 +501,20 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
public const string Long = "version";
public const string Short = "v";
}
+
+ public static class Crud
+ {
+ public static class Solution
+ {
+ public const string Long = "solution";
+ public const string Short = "s";
+ }
+
+ public static class Entity
+ {
+ public const string Long = "entity";
+ public const string Short = "e";
+ }
+ }
}
-}
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs
new file mode 100644
index 0000000000..203a927536
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
+
+public class RemoveFileStep : ProjectBuildPipelineStep
+{
+ private readonly string _filePath;
+ public RemoveFileStep(string filePath)
+ {
+ _filePath = filePath;
+ }
+
+ public override void Execute(ProjectBuildContext context)
+ {
+ var fileToRemove = context.Files.Find(x => x.Name.EndsWith(_filePath));
+ if (fileToRemove != null)
+ {
+ context.Files.Remove(fileToRemove);
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs
index 69dada9a8e..39186e900c 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs
@@ -8,7 +8,11 @@ public class TemplateCodeDeleteStep : ProjectBuildPipelineStep
{
foreach (var file in context.Files)
{
- if (file.Name.EndsWith(".cs") || file.Name.EndsWith(".csproj") || file.Name.EndsWith(".cshtml") || file.Name.EndsWith(".json"))
+ if (file.Name.EndsWith(".cs") ||
+ file.Name.EndsWith(".csproj") ||
+ file.Name.EndsWith(".cshtml") ||
+ file.Name.EndsWith(".json") ||
+ file.Name.EndsWith(".html"))
{
file.RemoveTemplateCode(context.Symbols);
file.RemoveTemplateCodeMarkers();
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs
index 6d9b754cba..3c057454f6 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs
@@ -40,6 +40,8 @@ public class ProjectBuildArgs
[NotNull]
public string OutputFolder { get; set; }
+ public bool Pwa { get; set; }
+
[NotNull]
public Dictionary ExtraProperties { get; set; }
@@ -57,7 +59,8 @@ public class ProjectBuildArgs
[CanBeNull] string voloGitHubLocalRepositoryPath = null,
[CanBeNull] string templateSource = null,
Dictionary extraProperties = null,
- [CanBeNull] string connectionString = null)
+ [CanBeNull] string connectionString = null,
+ bool pwa = false)
{
SolutionName = Check.NotNull(solutionName, nameof(solutionName));
TemplateName = templateName;
@@ -73,5 +76,6 @@ public class ProjectBuildArgs
TemplateSource = templateSource;
ExtraProperties = extraProperties ?? new Dictionary();
ConnectionString = connectionString;
+ Pwa = pwa;
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
index 20b72cdc50..3dd6ece476 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
@@ -289,6 +289,19 @@ public abstract class AppTemplateBase : TemplateInfo
steps.Add(new TemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305"));
}
+
+ if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short))
+ {
+ context.Symbols.Add("PWA");
+ }
+ else
+ {
+ steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js"));
+ steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js"));
+ steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json"));
+ steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png"));
+ steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png"));
+ }
}
protected void ConfigureWithBlazorServerUi(ProjectBuildContext context, List steps)
@@ -365,6 +378,11 @@ public abstract class AppTemplateBase : TemplateInfo
steps.Add(new TemplateProjectRenameStep("MyCompanyName.MyProjectName.HttpApi.HostWithIds", "MyCompanyName.MyProjectName.HttpApi.Host"));
steps.Add(new AppTemplateChangeConsoleTestClientPortSettingsStep("44305"));
}
+
+ if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short))
+ {
+ context.Symbols.Add("PWA");
+ }
}
protected void RemoveUnnecessaryPorts(ProjectBuildContext context, List steps)
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs
new file mode 100644
index 0000000000..891ac28ecb
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs
@@ -0,0 +1,35 @@
+using System;
+using System.IO;
+using System.Linq;
+using Volo.Abp.Cli.Utils;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.Cli.ProjectModification;
+
+public class AngularPwaSupportAdder : ITransientDependency
+{
+ protected ICmdHelper CmdHelper { get; }
+ protected PackageJsonFileFinder PackageJsonFileFinder { get; }
+
+ public AngularPwaSupportAdder(
+ ICmdHelper cmdHelper,
+ PackageJsonFileFinder packageJsonFileFinder)
+ {
+ CmdHelper = cmdHelper;
+ PackageJsonFileFinder = packageJsonFileFinder;
+ }
+
+ public virtual void AddPwaSupport(string rootDirectory)
+ {
+ var fileList = PackageJsonFileFinder.Find(rootDirectory).Where(x => File.Exists(x.RemovePostFix("package.json") + "angular.json")).ToList();
+
+ fileList.ForEach(AddPwaSupportToProject);
+ }
+
+ protected virtual void AddPwaSupportToProject(string filePath)
+ {
+ var directory = Path.GetDirectoryName(filePath).EnsureEndsWith(Path.DirectorySeparatorChar);
+
+ CmdHelper.RunCmd("ng add @angular/pwa --skip-confirmation", workingDirectory: directory);
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs
index 3a224c1122..ffa6a50edf 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs
@@ -48,9 +48,10 @@ public class EfCoreMigrationManager : ITransientDependency
? string.Empty
: $"--context {dbContext}";
- CmdHelper.RunCmd($"cd \"{dbMigrationsProjectFolder}\" && dotnet ef migrations add {migrationName}" +
+ CmdHelper.RunCmd($"dotnet ef migrations add {migrationName}" +
$" --output-dir {outputDirectory}" +
- $" {dbContextOption}");
+ $" {dbContextOption}",
+ workingDirectory: dbMigrationsProjectFolder);
}
protected virtual string ParseModuleName(string fullModuleName)
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
index 2ade6dbd77..64517b1900 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
@@ -14,6 +14,7 @@ using NuGet.Versioning;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.Http;
+using Volo.Abp.Cli.LIbs;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
using Volo.Abp.IO;
@@ -25,7 +26,7 @@ public class NpmPackagesUpdater : ITransientDependency
{
public ILogger Logger { get; set; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
- public InstallLibsCommand InstallLibsCommand { get; }
+ public IInstallLibsService InstallLibsService { get; }
public ICmdHelper CmdHelper { get; }
private readonly PackageJsonFileFinder _packageJsonFileFinder;
@@ -38,13 +39,13 @@ public class NpmPackagesUpdater : ITransientDependency
NpmGlobalPackagesChecker npmGlobalPackagesChecker,
ICancellationTokenProvider cancellationTokenProvider,
CliHttpClientFactory cliHttpClientFactory,
- InstallLibsCommand ınstallLibsCommand,
+ IInstallLibsService installLibsService,
ICmdHelper cmdHelper)
{
_packageJsonFileFinder = packageJsonFileFinder;
_npmGlobalPackagesChecker = npmGlobalPackagesChecker;
CancellationTokenProvider = cancellationTokenProvider;
- InstallLibsCommand = ınstallLibsCommand;
+ InstallLibsService = installLibsService;
CmdHelper = cmdHelper;
_cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
@@ -306,10 +307,8 @@ public class NpmPackagesUpdater : ITransientDependency
protected virtual async Task RunInstallLibsAsync(string fileDirectory)
{
- var args = new CommandLineArgs("install-libs");
- args.Options.Add(InstallLibsCommand.Options.WorkingDirectory.Short, fileDirectory);
-
- await InstallLibsCommand.ExecuteAsync(args);
+ Logger.LogInformation("Installing client-side packages...");
+ await InstallLibsService.InstallLibsAsync(fileDirectory);
}
protected virtual void RunYarn(string fileDirectory)
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs
index 828b143192..36f33e1f6e 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs
@@ -12,6 +12,7 @@ using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.Commands.Services;
using Volo.Abp.Cli.Http;
+using Volo.Abp.Cli.LIbs;
using Volo.Abp.Cli.ProjectBuilding;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
@@ -26,7 +27,7 @@ public class ProjectNpmPackageAdder : ITransientDependency
public SourceCodeDownloadService SourceCodeDownloadService { get; }
public AngularSourceCodeAdder AngularSourceCodeAdder { get; }
public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; }
- public InstallLibsCommand InstallLibsCommand { get; }
+ public IInstallLibsService InstallLibsService { get; }
public ICmdHelper CmdHelper { get; }
private readonly CliHttpClientFactory _cliHttpClientFactory;
public ILogger Logger { get; set; }
@@ -36,14 +37,14 @@ public class ProjectNpmPackageAdder : ITransientDependency
SourceCodeDownloadService sourceCodeDownloadService,
AngularSourceCodeAdder angularSourceCodeAdder,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
- InstallLibsCommand ınstallLibsCommand,
+ IInstallLibsService installLibsService,
ICmdHelper cmdHelper)
{
JsonSerializer = jsonSerializer;
SourceCodeDownloadService = sourceCodeDownloadService;
AngularSourceCodeAdder = angularSourceCodeAdder;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
- InstallLibsCommand = ınstallLibsCommand;
+ InstallLibsService = installLibsService;
CmdHelper = cmdHelper;
_cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger.Instance;
@@ -142,9 +143,8 @@ public class ProjectNpmPackageAdder : ITransientDependency
return;
}
- await InstallLibsCommand.ExecuteAsync(
- new CommandLineArgs("install-libs")
- );
+ Logger.LogInformation("Installing client-side packages...");
+ await InstallLibsService.InstallLibsAsync(directory);
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs
index 08d8fa182d..45e0684b4a 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs
@@ -10,13 +10,30 @@ namespace Volo.Abp.Cli.ProjectModification;
public class SolutionFileModifier : ITransientDependency
{
+ public static Encoding DefaultEncoding = Encoding.UTF8;
+
public async Task RemoveProjectFromSolutionFileAsync(string solutionFile, string projectName)
{
- var solutionFileContent = File.ReadAllText(solutionFile);
- solutionFileContent.NormalizeLineEndings();
- var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None);
- File.WriteAllText(solutionFile,
- RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine));
+ using (var fileStream = File.Open(solutionFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
+ {
+ using (var sr = new StreamReader(fileStream, Encoding.Default, true))
+ {
+ var solutionFileContent = await sr.ReadToEndAsync();
+ solutionFileContent.NormalizeLineEndings();
+
+ var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None);
+ var updatedContent = RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine);
+
+ fileStream.Seek(0, SeekOrigin.Begin);
+ fileStream.SetLength(0);
+
+ using (var sw = new StreamWriter(fileStream, DefaultEncoding))
+ {
+ await sw.WriteAsync(updatedContent);
+ await sw.FlushAsync();
+ }
+ }
+ }
}
public async Task AddModuleToSolutionFileAsync(ModuleWithMastersInfo module, string solutionFile)
@@ -33,8 +50,8 @@ public class SolutionFileModifier : ITransientDependency
{
var srcFolderId = await AddNewFolderAndGetIdOrGetExistingIdAsync(solutionFile, "src");
- var file = File.ReadAllText(solutionFile);
- var lines = file.Split(Environment.NewLine).ToList();
+ var solutionFileContent = File.ReadAllText(solutionFile);
+ var lines = solutionFileContent.Split(Environment.NewLine).ToList();
if (lines.Any(l => l.Contains($"\"{package.Name}\"")))
{
@@ -64,7 +81,7 @@ public class SolutionFileModifier : ITransientDependency
lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine);
- File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines));
+ File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), DefaultEncoding);
}
private List RemoveProject(List solutionFileLines, string projectName)
@@ -137,7 +154,7 @@ public class SolutionFileModifier : ITransientDependency
Path.Combine(Path.GetDirectoryName(solutionFile), "modules", module.Name, "test"),
"*.csproj",
SearchOption.AllDirectories).ToList();
- }
+ }
foreach (var projectPath in projectsUnderModule)
{
@@ -174,7 +191,7 @@ public class SolutionFileModifier : ITransientDependency
lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine);
}
- File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines));
+ File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8);
if (module.MasterModuleInfos != null)
{
@@ -219,7 +236,7 @@ public class SolutionFileModifier : ITransientDependency
.Split(" ").Last();
}
- File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines));
+ File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8);
return folderId;
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs
index e7ab27613e..2bfcad2d32 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs
@@ -679,7 +679,7 @@ public class SolutionModuleAdder : ITransientDependency
if (!string.IsNullOrEmpty(dbMigratorProject))
{
- CmdHelper.RunCmd("cd \"" + Path.GetDirectoryName(dbMigratorProject) + "\" && dotnet run", out int exitCode);
+ CmdHelper.RunCmd($"dotnet run", out int exitCode, workingDirectory: Path.GetDirectoryName(dbMigratorProject));
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
index 900930d472..98ad57f4b4 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
@@ -9,6 +9,7 @@ using Volo.Abp.Cli.NuGet;
using Volo.Abp.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
+using System.Text;
namespace Volo.Abp.Cli.ProjectModification;
@@ -17,6 +18,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
private readonly NuGetService _nuGetService;
private readonly MyGetPackageListFinder _myGetPackageListFinder;
public ILogger Logger { get; set; }
+ public static Encoding DefaultEncoding = Encoding.UTF8;
public VoloNugetPackagesVersionUpdater(NuGetService nuGetService, MyGetPackageListFinder myGetPackageListFinder)
{
@@ -41,17 +43,30 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
async Task UpdateAsync(string filePath)
{
- var fileContent = File.ReadAllText(filePath);
- var updatedContent = await UpdateVoloPackagesAsync(fileContent,
- includePreviews,
- includeReleaseCandidates,
- switchToStable,
- latestVersionFromNuget,
- latestReleaseCandidateVersionFromNuget,
- latestVersionFromMyGet,
- version);
-
- File.WriteAllText(filePath, updatedContent);
+ using (var fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
+ {
+ using (var sr = new StreamReader(fs, Encoding.Default, true))
+ {
+ var fileContent = await sr.ReadToEndAsync();
+
+ var updatedContent = await UpdateVoloPackagesAsync(fileContent,
+ includePreviews,
+ includeReleaseCandidates,
+ switchToStable,
+ latestVersionFromNuget,
+ latestReleaseCandidateVersionFromNuget,
+ latestVersionFromMyGet,
+ version);
+
+ fs.Seek(0, SeekOrigin.Begin);
+ fs.SetLength(0);
+ using (var sw = new StreamWriter(fs, DefaultEncoding))
+ {
+ await sw.WriteAsync(updatedContent);
+ await sw.FlushAsync();
+ }
+ }
+ }
}
Task.WaitAll(projectPaths.Select(UpdateAsync).ToArray());
@@ -70,27 +85,54 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
var latestReleaseCandidateVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true);
var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core");
- var fileContent = File.ReadAllText(projectPath);
+ using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
+ {
+ using (var sr = new StreamReader(fs, Encoding.Default, true))
+ {
+ var fileContent = await sr.ReadToEndAsync();
+
+ var updatedContent = await UpdateVoloPackagesAsync(fileContent,
+ includeNightlyPreviews,
+ includeReleaseCandidates,
+ switchToStable,
+ latestVersionFromNuget,
+ latestReleaseCandidateVersionFromNuget,
+ latestVersionFromMyGet,
+ version);
- var updatedContent = await UpdateVoloPackagesAsync(fileContent,
- includeNightlyPreviews,
- includeReleaseCandidates,
- switchToStable,
- latestVersionFromNuget,
- latestReleaseCandidateVersionFromNuget,
- latestVersionFromMyGet,
- version);
+ fs.Seek(0, SeekOrigin.Begin);
+ fs.SetLength(0);
- File.WriteAllText(projectPath, updatedContent);
+ using (var sw = new StreamWriter(fs, sr.CurrentEncoding))
+ {
+ await sw.WriteAsync(updatedContent);
+ await sw.FlushAsync();
+ }
+ }
+ }
}
}
protected virtual async Task UpdateInternalAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false)
{
- var fileContent = File.ReadAllText(projectPath);
- var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable);
+ using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
+ {
+ using (var sr = new StreamReader(fs, Encoding.Default, true))
+ {
+ var fileContent = await sr.ReadToEndAsync();
+
+ var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable);
- File.WriteAllText(projectPath, updatedContent);
+ fs.Seek(0, SeekOrigin.Begin);
+ fs.SetLength(0);
+
+ using (var sw = new StreamWriter(fs, sr.CurrentEncoding))
+ {
+ await sw.WriteAsync(updatedContent);
+ await sw.FlushAsync();
+ }
+ }
+ }
}
protected virtual async Task SpecifiedVersionExists(string version, string packageId)
@@ -210,7 +252,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
}
catch (Exception ex)
{
- Logger.LogError("Cannot update Volo.* packages! An error occured while updating the package \"{0}\". Error: {1}", packageId, ex.Message);
+ Logger.LogError("Cannot update Volo.* packages! An error occurred while updating the package \"{0}\". Error: {1}", packageId, ex.Message);
Logger.LogException(ex);
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs
index 483d047e86..741390dc73 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs
@@ -58,6 +58,22 @@ public class CmdHelper : ICmdHelper, ITransientDependency
}
}
+ public Process RunCmdAndGetProcess(string command, string workingDirectory = null)
+ {
+ var procStartInfo = new ProcessStartInfo(
+ GetFileName(),
+ GetArguments(command)
+ );
+
+ if (!string.IsNullOrEmpty(workingDirectory))
+ {
+ procStartInfo.WorkingDirectory = workingDirectory;
+ procStartInfo.CreateNoWindow = false;
+ }
+
+ return Process.Start(procStartInfo);
+ }
+
public string RunCmdAndGetOutput(string command, string workingDirectory = null)
{
return RunCmdAndGetOutput(command, out int _, workingDirectory);
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs
index 984b705d33..648215d24f 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs
@@ -1,4 +1,6 @@
-namespace Volo.Abp.Cli.Utils;
+using System.Diagnostics;
+
+namespace Volo.Abp.Cli.Utils;
public interface ICmdHelper
{
@@ -12,6 +14,8 @@ public interface ICmdHelper
void RunCmd(string command, string workingDirectory = null);
+ Process RunCmdAndGetProcess(string command, string workingDirectory = null);
+
void RunCmd(string command, out int exitCode, string workingDirectory = null);
string RunCmdAndGetOutput(string command, string workingDirectory = null);
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs
new file mode 100644
index 0000000000..c3746f620d
--- /dev/null
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs
@@ -0,0 +1,39 @@
+using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Design;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Modularity;
+using Volo.Abp.Threading;
+
+namespace Volo.Abp.EntityFrameworkCore.Design;
+
+public abstract class AbpDesignTimeDbContextBase : IDesignTimeDbContextFactory
+ where TModule : AbpModule
+ where TContext : DbContext
+{
+ public virtual TContext CreateDbContext(string[] args)
+ {
+ return AsyncHelper.RunSync(() => CreateDbContextAsync(args));
+ }
+
+ protected virtual async Task CreateDbContextAsync(string[] args)
+ {
+ var application = await AbpApplicationFactory.CreateAsync(options =>
+ {
+ options.Services.ReplaceConfiguration(BuildConfiguration());
+ ConfigureServices(options.Services);
+ });
+
+ await application.InitializeAsync();
+
+ return application.ServiceProvider.GetRequiredService();
+ }
+
+ protected virtual void ConfigureServices(IServiceCollection services)
+ {
+
+ }
+
+ protected abstract IConfigurationRoot BuildConfiguration();
+}
diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkExtensions.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkExtensions.cs
index 44dc92d9cf..1396cd6ee5 100644
--- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkExtensions.cs
+++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkExtensions.cs
@@ -34,7 +34,7 @@ public static class UnitOfWorkExtensions
{
Check.NotNull(unitOfWork, nameof(unitOfWork));
- return unitOfWork.Items.FirstOrDefault(x => x.Key == key).As();
+ return unitOfWork.Items.FirstOrDefault(x => x.Key == key).Value.As();
}
public static TValue GetOrAddItem([NotNull] this IUnitOfWork unitOfWork, string key, Func factory)
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs
index a56c8ef8ad..1a60ab9d6b 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs
@@ -16,6 +16,7 @@ public class RemoteStreamContentTestController_Tests : AspNetCoreMvcTestBase
var result = await GetResponseAsync("/api/remote-stream-content-test/download");
result.Content.Headers.ContentType?.ToString().ShouldBe("application/rtf");
result.Content.Headers.ContentDisposition?.FileName.ShouldBe("download.rtf");
+ result.Content.Headers.ContentLength.ShouldBe("DownloadAsync".Length);
(await result.Content.ReadAsStringAsync()).ShouldBe("DownloadAsync");
}
diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWorkExtensions_Tests.cs b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWorkExtensions_Tests.cs
new file mode 100644
index 0000000000..6c88f70d9d
--- /dev/null
+++ b/framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWorkExtensions_Tests.cs
@@ -0,0 +1,58 @@
+using Shouldly;
+using Volo.Abp.Testing;
+using Xunit;
+
+namespace Volo.Abp.Uow;
+
+public class UnitOfWorkExtensions_Tests : AbpIntegratedTest
+{
+ private readonly IUnitOfWorkManager _unitOfWorkManager;
+
+ public UnitOfWorkExtensions_Tests()
+ {
+ _unitOfWorkManager = GetRequiredService();
+ }
+
+ [Fact]
+ public void AddItem()
+ {
+ var uow = _unitOfWorkManager.Begin();
+ uow.AddItem("testKey", "testValue");
+
+ uow.Items.ShouldContainKey("testKey");
+ uow.Items.ContainsValue("testValue");
+ }
+
+ [Fact]
+ public void GetItemOrDefault()
+ {
+ var uow = _unitOfWorkManager.Begin();
+ uow.Items.Add("testKey", new NameValue("TestKey","TestValue"));
+
+ uow.GetItemOrDefault("testKey").ShouldBeOfType();
+ uow.GetItemOrDefault("testKey").Value.ShouldBe("TestValue");
+ }
+
+ [Fact]
+ public void GetOrAddItem()
+ {
+ var uow = _unitOfWorkManager.Begin();
+
+ var item = uow.GetOrAddItem("testKey", _ => new NameValue("TestKey", "TestValue"));
+
+ item.Name.ShouldBe("TestKey");
+ item.ShouldBeOfType();
+ item.Value.ShouldBe("TestValue");
+ }
+
+ [Fact]
+ public void RemoveItem()
+ {
+ var uow = _unitOfWorkManager.Begin();
+ uow.Items.Add("testKey", "testValue");
+
+ uow.RemoveItem("testKey");
+
+ uow.Items.ShouldNotContainKey("testKey");
+ }
+}
diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj
index 3879cf9569..32b27998cc 100644
--- a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj
+++ b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ net6.0Volo.Abp.Account.ApplicationVolo.Abp.Account.Applicationtrue
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj
index 7eb9015b73..b46209de47 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ netstandard2.1
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj
index 56c1391ab9..7d29486644 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ netstandard2.1
diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor
index 75b64e05b7..afa3521d01 100644
--- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor
+++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor
@@ -7,11 +7,11 @@
@inject IAbpRequestLocalizationOptionsProvider RequestLocalizationOptionsProvider
@if (_otherLanguages != null && _otherLanguages.Any())
{
-
+
@_currentLanguage.DisplayName
-
+
@foreach (var language in _otherLanguages)
{
@language.DisplayName
diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor
index 6f89696075..4b41add531 100644
--- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor
+++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor
@@ -5,11 +5,11 @@
@inject IJSRuntime JsRuntime
@if (_otherLanguages != null && _otherLanguages.Any())
{
-
+
@_currentLanguage.DisplayName
-
+
@foreach (var language in _otherLanguages)
{
@language.DisplayName
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
index 6a1b23eb1d..dc7f6f50d0 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
@@ -3,7 +3,7 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.shared": "^5.2.0-rc.2",
+ "@abp/aspnetcore.mvc.ui.theme.shared": "^5.2.1",
"highlight.js": "^9.13.1"
},
"devDependencies": {}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
index d2fccff0c7..e40aac01d8 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
@@ -2,30 +2,30 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.shared@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77"
- integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2"
- "@abp/bootstrap" "~5.2.0-rc.2"
- "@abp/bootstrap-datepicker" "~5.2.0-rc.2"
- "@abp/datatables.net-bs5" "~5.2.0-rc.2"
- "@abp/font-awesome" "~5.2.0-rc.2"
- "@abp/jquery-form" "~5.2.0-rc.2"
- "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2"
- "@abp/lodash" "~5.2.0-rc.2"
- "@abp/luxon" "~5.2.0-rc.2"
- "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2"
- "@abp/select2" "~5.2.0-rc.2"
- "@abp/sweetalert2" "~5.2.0-rc.2"
- "@abp/timeago" "~5.2.0-rc.2"
- "@abp/toastr" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2"
- integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg==
+"@abp/aspnetcore.mvc.ui.theme.shared@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44"
+ integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~5.2.1"
+ "@abp/bootstrap" "~5.2.1"
+ "@abp/bootstrap-datepicker" "~5.2.1"
+ "@abp/datatables.net-bs5" "~5.2.1"
+ "@abp/font-awesome" "~5.2.1"
+ "@abp/jquery-form" "~5.2.1"
+ "@abp/jquery-validation-unobtrusive" "~5.2.1"
+ "@abp/lodash" "~5.2.1"
+ "@abp/luxon" "~5.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~5.2.1"
+ "@abp/select2" "~5.2.1"
+ "@abp/sweetalert2" "~5.2.1"
+ "@abp/timeago" "~5.2.1"
+ "@abp/toastr" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3"
+ integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -34,144 +34,144 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
-"@abp/bootstrap-datepicker@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2"
- integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g==
+"@abp/bootstrap-datepicker@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd"
+ integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f"
- integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw==
+"@abp/bootstrap@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9"
+ integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
bootstrap "^5.1.3"
-"@abp/core@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e"
- integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q==
+"@abp/core@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a"
+ integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ==
dependencies:
- "@abp/utils" "~5.2.0-rc.2"
+ "@abp/utils" "~5.2.1"
-"@abp/datatables.net-bs5@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2"
- integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA==
+"@abp/datatables.net-bs5@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe"
+ integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA==
dependencies:
- "@abp/datatables.net" "~5.2.0-rc.2"
+ "@abp/datatables.net" "~5.2.1"
datatables.net-bs5 "^1.11.4"
-"@abp/datatables.net@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74"
- integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w==
+"@abp/datatables.net@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6"
+ integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
datatables.net "^1.11.4"
-"@abp/font-awesome@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14"
- integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw==
+"@abp/font-awesome@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb"
+ integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
"@fortawesome/fontawesome-free" "^5.15.4"
-"@abp/jquery-form@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616"
- integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA==
+"@abp/jquery-form@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790"
+ integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835"
- integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA==
+"@abp/jquery-validation-unobtrusive@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093"
+ integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg==
dependencies:
- "@abp/jquery-validation" "~5.2.0-rc.2"
+ "@abp/jquery-validation" "~5.2.1"
jquery-validation-unobtrusive "^3.2.12"
-"@abp/jquery-validation@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333"
- integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw==
+"@abp/jquery-validation@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244"
+ integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-validation "^1.19.3"
-"@abp/jquery@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262"
- integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ==
+"@abp/jquery@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228"
+ integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
jquery "~3.6.0"
-"@abp/lodash@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa"
- integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw==
+"@abp/lodash@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d"
+ integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
lodash "^4.17.21"
-"@abp/luxon@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36"
- integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw==
+"@abp/luxon@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17"
+ integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
luxon "^2.3.0"
-"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7"
- integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww==
+"@abp/malihu-custom-scrollbar-plugin@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09"
+ integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7"
- integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og==
+"@abp/select2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332"
+ integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
select2 "^4.0.13"
-"@abp/sweetalert2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea"
- integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g==
+"@abp/sweetalert2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51"
+ integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
sweetalert2 "^11.3.6"
-"@abp/timeago@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d"
- integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw==
+"@abp/timeago@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de"
+ integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
timeago "^1.6.7"
-"@abp/toastr@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7"
- integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw==
+"@abp/toastr@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4"
+ integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
toastr "^2.1.4"
-"@abp/utils@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b"
- integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA==
+"@abp/utils@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064"
+ integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
index 2b43b46185..4caf5c1672 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
@@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.2",
- "@abp/prismjs": "^5.2.0-rc.2"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1",
+ "@abp/prismjs": "^5.2.1"
},
"devDependencies": {}
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
index 7ebb4903cc..407c79dba3 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.0-rc.2.tgz#d2cf4a0f2b8a93f1fe53a0bc6c66d9c3233b620a"
- integrity sha512-aQk3RSl31UT4gEqiHT3oV06BZ/k6q1DVKBwVOj+YQEIb8ojptJtbGv+aUhHEql5I7zwiWe4EWf2rM2Ve0JQa6Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77"
- integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2"
- "@abp/bootstrap" "~5.2.0-rc.2"
- "@abp/bootstrap-datepicker" "~5.2.0-rc.2"
- "@abp/datatables.net-bs5" "~5.2.0-rc.2"
- "@abp/font-awesome" "~5.2.0-rc.2"
- "@abp/jquery-form" "~5.2.0-rc.2"
- "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2"
- "@abp/lodash" "~5.2.0-rc.2"
- "@abp/luxon" "~5.2.0-rc.2"
- "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2"
- "@abp/select2" "~5.2.0-rc.2"
- "@abp/sweetalert2" "~5.2.0-rc.2"
- "@abp/timeago" "~5.2.0-rc.2"
- "@abp/toastr" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2"
- integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg==
+"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2"
+ integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44"
+ integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~5.2.1"
+ "@abp/bootstrap" "~5.2.1"
+ "@abp/bootstrap-datepicker" "~5.2.1"
+ "@abp/datatables.net-bs5" "~5.2.1"
+ "@abp/font-awesome" "~5.2.1"
+ "@abp/jquery-form" "~5.2.1"
+ "@abp/jquery-validation-unobtrusive" "~5.2.1"
+ "@abp/lodash" "~5.2.1"
+ "@abp/luxon" "~5.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~5.2.1"
+ "@abp/select2" "~5.2.1"
+ "@abp/sweetalert2" "~5.2.1"
+ "@abp/timeago" "~5.2.1"
+ "@abp/toastr" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3"
+ integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -41,161 +41,161 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
-"@abp/bootstrap-datepicker@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2"
- integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g==
+"@abp/bootstrap-datepicker@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd"
+ integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f"
- integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw==
+"@abp/bootstrap@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9"
+ integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
bootstrap "^5.1.3"
-"@abp/clipboard@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.0-rc.2.tgz#d641c6bdfdf84b991b84c4331a10ca398a7ee26a"
- integrity sha512-RxcY94FfCUhGVFbb2CXTRWujrkSubdYGQ3wbkdZPeOCuF8t60WzyhxoQanRqSdiUbk39W8nUuReYtclzXwM58g==
+"@abp/clipboard@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.1.tgz#c6bddd279b37e9b2bd27b027d5686411c9ae942b"
+ integrity sha512-aouNTDz8t+8M4O2a+UsEdtABRsyhvzGpXqCG2+LYE1vA3I+CKhglkvEFp+GyIgWsipEHY1U1w6V3qZtcRINn+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
clipboard "^2.0.8"
-"@abp/core@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e"
- integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q==
+"@abp/core@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a"
+ integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ==
dependencies:
- "@abp/utils" "~5.2.0-rc.2"
+ "@abp/utils" "~5.2.1"
-"@abp/datatables.net-bs5@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2"
- integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA==
+"@abp/datatables.net-bs5@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe"
+ integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA==
dependencies:
- "@abp/datatables.net" "~5.2.0-rc.2"
+ "@abp/datatables.net" "~5.2.1"
datatables.net-bs5 "^1.11.4"
-"@abp/datatables.net@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74"
- integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w==
+"@abp/datatables.net@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6"
+ integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
datatables.net "^1.11.4"
-"@abp/font-awesome@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14"
- integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw==
+"@abp/font-awesome@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb"
+ integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
"@fortawesome/fontawesome-free" "^5.15.4"
-"@abp/jquery-form@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616"
- integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA==
+"@abp/jquery-form@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790"
+ integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835"
- integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA==
+"@abp/jquery-validation-unobtrusive@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093"
+ integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg==
dependencies:
- "@abp/jquery-validation" "~5.2.0-rc.2"
+ "@abp/jquery-validation" "~5.2.1"
jquery-validation-unobtrusive "^3.2.12"
-"@abp/jquery-validation@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333"
- integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw==
+"@abp/jquery-validation@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244"
+ integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-validation "^1.19.3"
-"@abp/jquery@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262"
- integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ==
+"@abp/jquery@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228"
+ integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
jquery "~3.6.0"
-"@abp/lodash@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa"
- integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw==
+"@abp/lodash@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d"
+ integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
lodash "^4.17.21"
-"@abp/luxon@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36"
- integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw==
+"@abp/luxon@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17"
+ integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
luxon "^2.3.0"
-"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7"
- integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww==
+"@abp/malihu-custom-scrollbar-plugin@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09"
+ integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/prismjs@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.0-rc.2.tgz#80d326cd085e0994a1bcbe13f34ebf68d21224f7"
- integrity sha512-tgADoIom+9SufIfDJGzXykdgsRf0fHD2O4lcqZYNRDtBPw3RI0XJki3w4fBOffS1kKTMn6ymIAU06SMpEB872A==
+"@abp/prismjs@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.1.tgz#86aae6ee4529401da75744f1e43c7cd3c0b494a0"
+ integrity sha512-YNgcM7Kvmu3hGXJh4B8gl7rLzC28VuZYYP7AVptVSbTz/n6usCo21evG/st8L3vXixuQkvnNpBFgacJnHdSJZQ==
dependencies:
- "@abp/clipboard" "~5.2.0-rc.2"
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/clipboard" "~5.2.1"
+ "@abp/core" "~5.2.1"
prismjs "^1.26.0"
-"@abp/select2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7"
- integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og==
+"@abp/select2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332"
+ integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
select2 "^4.0.13"
-"@abp/sweetalert2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea"
- integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g==
+"@abp/sweetalert2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51"
+ integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
sweetalert2 "^11.3.6"
-"@abp/timeago@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d"
- integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw==
+"@abp/timeago@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de"
+ integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
timeago "^1.6.7"
-"@abp/toastr@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7"
- integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw==
+"@abp/toastr@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4"
+ integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
toastr "^2.1.4"
-"@abp/utils@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b"
- integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA==
+"@abp/utils@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064"
+ integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
index a846bb0ca6..e707190be5 100644
--- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
+++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
@@ -3,7 +3,7 @@
- netstandard2.0
+ netstandard2.1
diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json
index afb4f5315d..1d0e320c39 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/package.json
+++ b/modules/blogging/app/Volo.BloggingTestApp/package.json
@@ -3,7 +3,7 @@
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.2",
- "@abp/blogging": "^5.2.0-rc.2"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1",
+ "@abp/blogging": "^5.2.1"
}
}
\ No newline at end of file
diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
index ff94858229..08c5aba314 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
+++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.0-rc.2.tgz#d2cf4a0f2b8a93f1fe53a0bc6c66d9c3233b620a"
- integrity sha512-aQk3RSl31UT4gEqiHT3oV06BZ/k6q1DVKBwVOj+YQEIb8ojptJtbGv+aUhHEql5I7zwiWe4EWf2rM2Ve0JQa6Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77"
- integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2"
- "@abp/bootstrap" "~5.2.0-rc.2"
- "@abp/bootstrap-datepicker" "~5.2.0-rc.2"
- "@abp/datatables.net-bs5" "~5.2.0-rc.2"
- "@abp/font-awesome" "~5.2.0-rc.2"
- "@abp/jquery-form" "~5.2.0-rc.2"
- "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2"
- "@abp/lodash" "~5.2.0-rc.2"
- "@abp/luxon" "~5.2.0-rc.2"
- "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2"
- "@abp/select2" "~5.2.0-rc.2"
- "@abp/sweetalert2" "~5.2.0-rc.2"
- "@abp/timeago" "~5.2.0-rc.2"
- "@abp/toastr" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2"
- integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg==
+"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2"
+ integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44"
+ integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~5.2.1"
+ "@abp/bootstrap" "~5.2.1"
+ "@abp/bootstrap-datepicker" "~5.2.1"
+ "@abp/datatables.net-bs5" "~5.2.1"
+ "@abp/font-awesome" "~5.2.1"
+ "@abp/jquery-form" "~5.2.1"
+ "@abp/jquery-validation-unobtrusive" "~5.2.1"
+ "@abp/lodash" "~5.2.1"
+ "@abp/luxon" "~5.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~5.2.1"
+ "@abp/select2" "~5.2.1"
+ "@abp/sweetalert2" "~5.2.1"
+ "@abp/timeago" "~5.2.1"
+ "@abp/toastr" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3"
+ integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -41,187 +41,187 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
-"@abp/blogging@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-5.2.0-rc.2.tgz#4fa756e50ffd9a9cbc4e8c01b8c1e4f366848bcb"
- integrity sha512-JJY04Ktjp1uhjzowm3bu7zTeIlLkxkIMkB0L3bmQ0ytzi8momrBdvwqVZue/1NMXPx7VrsuOu80zeKbYLC5Ovg==
+"@abp/blogging@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-5.2.1.tgz#5b9c98d120293a835c0a0cb27b1764be849140d9"
+ integrity sha512-p2AamTCbBZkbqJKZ341JXYnzvJm4vCkT1gTZPNY49tMNa5brl2oFloI+tk491JHHaNz4lpHGFpPzQftjLPdTew==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2"
- "@abp/owl.carousel" "~5.2.0-rc.2"
- "@abp/prismjs" "~5.2.0-rc.2"
- "@abp/tui-editor" "~5.2.0-rc.2"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1"
+ "@abp/owl.carousel" "~5.2.1"
+ "@abp/prismjs" "~5.2.1"
+ "@abp/tui-editor" "~5.2.1"
-"@abp/bootstrap-datepicker@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2"
- integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g==
+"@abp/bootstrap-datepicker@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd"
+ integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f"
- integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw==
+"@abp/bootstrap@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9"
+ integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
bootstrap "^5.1.3"
-"@abp/clipboard@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.0-rc.2.tgz#d641c6bdfdf84b991b84c4331a10ca398a7ee26a"
- integrity sha512-RxcY94FfCUhGVFbb2CXTRWujrkSubdYGQ3wbkdZPeOCuF8t60WzyhxoQanRqSdiUbk39W8nUuReYtclzXwM58g==
+"@abp/clipboard@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.1.tgz#c6bddd279b37e9b2bd27b027d5686411c9ae942b"
+ integrity sha512-aouNTDz8t+8M4O2a+UsEdtABRsyhvzGpXqCG2+LYE1vA3I+CKhglkvEFp+GyIgWsipEHY1U1w6V3qZtcRINn+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
clipboard "^2.0.8"
-"@abp/core@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e"
- integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q==
+"@abp/core@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a"
+ integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ==
dependencies:
- "@abp/utils" "~5.2.0-rc.2"
+ "@abp/utils" "~5.2.1"
-"@abp/datatables.net-bs5@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2"
- integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA==
+"@abp/datatables.net-bs5@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe"
+ integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA==
dependencies:
- "@abp/datatables.net" "~5.2.0-rc.2"
+ "@abp/datatables.net" "~5.2.1"
datatables.net-bs5 "^1.11.4"
-"@abp/datatables.net@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74"
- integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w==
+"@abp/datatables.net@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6"
+ integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
datatables.net "^1.11.4"
-"@abp/font-awesome@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14"
- integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw==
+"@abp/font-awesome@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb"
+ integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
"@fortawesome/fontawesome-free" "^5.15.4"
-"@abp/jquery-form@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616"
- integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA==
+"@abp/jquery-form@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790"
+ integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835"
- integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA==
+"@abp/jquery-validation-unobtrusive@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093"
+ integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg==
dependencies:
- "@abp/jquery-validation" "~5.2.0-rc.2"
+ "@abp/jquery-validation" "~5.2.1"
jquery-validation-unobtrusive "^3.2.12"
-"@abp/jquery-validation@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333"
- integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw==
+"@abp/jquery-validation@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244"
+ integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-validation "^1.19.3"
-"@abp/jquery@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262"
- integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ==
+"@abp/jquery@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228"
+ integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
jquery "~3.6.0"
-"@abp/lodash@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa"
- integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw==
+"@abp/lodash@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d"
+ integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
lodash "^4.17.21"
-"@abp/luxon@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36"
- integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw==
+"@abp/luxon@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17"
+ integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
luxon "^2.3.0"
-"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7"
- integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww==
+"@abp/malihu-custom-scrollbar-plugin@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09"
+ integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/owl.carousel@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-5.2.0-rc.2.tgz#a6f329970e1a341b9077379b83e008de9b12df43"
- integrity sha512-9NAssJFe6Oq3QXzSNSzCyI3S9weFtIyYt6w/wtdJPkNSqE+p7KDMFWZh1bma63l7aoPGR2sBa3Hi08383hj1kg==
+"@abp/owl.carousel@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-5.2.1.tgz#f58d28c98ccb8ff0f9cbcf612519648032fa4399"
+ integrity sha512-LYDSKrHlrzB5mD33m39olc1V96NJnNPTv3+VefKNnZvUCRHGwwCfow4pwWgjmn2uvHBKW5qiBX9c2EbwLFplQA==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
owl.carousel "^2.3.4"
-"@abp/prismjs@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.0-rc.2.tgz#80d326cd085e0994a1bcbe13f34ebf68d21224f7"
- integrity sha512-tgADoIom+9SufIfDJGzXykdgsRf0fHD2O4lcqZYNRDtBPw3RI0XJki3w4fBOffS1kKTMn6ymIAU06SMpEB872A==
+"@abp/prismjs@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.1.tgz#86aae6ee4529401da75744f1e43c7cd3c0b494a0"
+ integrity sha512-YNgcM7Kvmu3hGXJh4B8gl7rLzC28VuZYYP7AVptVSbTz/n6usCo21evG/st8L3vXixuQkvnNpBFgacJnHdSJZQ==
dependencies:
- "@abp/clipboard" "~5.2.0-rc.2"
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/clipboard" "~5.2.1"
+ "@abp/core" "~5.2.1"
prismjs "^1.26.0"
-"@abp/select2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7"
- integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og==
+"@abp/select2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332"
+ integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
select2 "^4.0.13"
-"@abp/sweetalert2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea"
- integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g==
+"@abp/sweetalert2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51"
+ integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
sweetalert2 "^11.3.6"
-"@abp/timeago@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d"
- integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw==
+"@abp/timeago@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de"
+ integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
timeago "^1.6.7"
-"@abp/toastr@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7"
- integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw==
+"@abp/toastr@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4"
+ integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
toastr "^2.1.4"
-"@abp/tui-editor@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-5.2.0-rc.2.tgz#a7284a627bd836cbc213710002d640f969f03e6b"
- integrity sha512-7ETmLOzAZhLAGbWmtSi4b25oEgH0DSDUmXBUC6K/eslTbcMxLXJwP7NQQWcJVJDCWgom7KE4VEvcxpP4GxkTNA==
+"@abp/tui-editor@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-5.2.1.tgz#06be1a029de754868fa11ce3479be3fbc90ba103"
+ integrity sha512-Mi3preBkGEU1hrtSNCkOjeXPc9c74DFt8BL82sPIVDglYcVrVLXbnNTWE/CHP0spmKWh33ek4FoH1Pt0TePMuw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
- "@abp/prismjs" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
+ "@abp/prismjs" "~5.2.1"
-"@abp/utils@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b"
- integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA==
+"@abp/utils@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064"
+ integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj
index 456777e60a..6df6b27bb7 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj
+++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ net6.0Volo.Blogging.Admin.ApplicationVolo.Blogging.Admin.Application
diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj
index 504d32836d..99c491231b 100644
--- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj
+++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ net6.0Volo.Blogging.ApplicationVolo.Blogging.Application
diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
index c6c096105b..905494aa41 100644
--- a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
+++ b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ netstandard2.1Volo.Blogging.DomainVolo.Blogging.Domain
diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj
index 5019b843f2..83d8759d14 100644
--- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj
+++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ netstandard2.1Volo.Blogging.MongoDBVolo.Blogging.MongoDB
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
index 8656357172..b65206c781 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
@@ -3,6 +3,6 @@
"name": "client-simulation-web",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.2"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1"
}
}
\ No newline at end of file
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
index f65777dccc..e8b775d277 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.0-rc.2.tgz#d2cf4a0f2b8a93f1fe53a0bc6c66d9c3233b620a"
- integrity sha512-aQk3RSl31UT4gEqiHT3oV06BZ/k6q1DVKBwVOj+YQEIb8ojptJtbGv+aUhHEql5I7zwiWe4EWf2rM2Ve0JQa6Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77"
- integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2"
- "@abp/bootstrap" "~5.2.0-rc.2"
- "@abp/bootstrap-datepicker" "~5.2.0-rc.2"
- "@abp/datatables.net-bs5" "~5.2.0-rc.2"
- "@abp/font-awesome" "~5.2.0-rc.2"
- "@abp/jquery-form" "~5.2.0-rc.2"
- "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2"
- "@abp/lodash" "~5.2.0-rc.2"
- "@abp/luxon" "~5.2.0-rc.2"
- "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2"
- "@abp/select2" "~5.2.0-rc.2"
- "@abp/sweetalert2" "~5.2.0-rc.2"
- "@abp/timeago" "~5.2.0-rc.2"
- "@abp/toastr" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2"
- integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg==
+"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2"
+ integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44"
+ integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~5.2.1"
+ "@abp/bootstrap" "~5.2.1"
+ "@abp/bootstrap-datepicker" "~5.2.1"
+ "@abp/datatables.net-bs5" "~5.2.1"
+ "@abp/font-awesome" "~5.2.1"
+ "@abp/jquery-form" "~5.2.1"
+ "@abp/jquery-validation-unobtrusive" "~5.2.1"
+ "@abp/lodash" "~5.2.1"
+ "@abp/luxon" "~5.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~5.2.1"
+ "@abp/select2" "~5.2.1"
+ "@abp/sweetalert2" "~5.2.1"
+ "@abp/timeago" "~5.2.1"
+ "@abp/toastr" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3"
+ integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -41,144 +41,144 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
-"@abp/bootstrap-datepicker@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2"
- integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g==
+"@abp/bootstrap-datepicker@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd"
+ integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f"
- integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw==
+"@abp/bootstrap@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9"
+ integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
bootstrap "^5.1.3"
-"@abp/core@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e"
- integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q==
+"@abp/core@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a"
+ integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ==
dependencies:
- "@abp/utils" "~5.2.0-rc.2"
+ "@abp/utils" "~5.2.1"
-"@abp/datatables.net-bs5@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2"
- integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA==
+"@abp/datatables.net-bs5@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe"
+ integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA==
dependencies:
- "@abp/datatables.net" "~5.2.0-rc.2"
+ "@abp/datatables.net" "~5.2.1"
datatables.net-bs5 "^1.11.4"
-"@abp/datatables.net@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74"
- integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w==
+"@abp/datatables.net@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6"
+ integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
datatables.net "^1.11.4"
-"@abp/font-awesome@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14"
- integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw==
+"@abp/font-awesome@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb"
+ integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
"@fortawesome/fontawesome-free" "^5.15.4"
-"@abp/jquery-form@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616"
- integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA==
+"@abp/jquery-form@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790"
+ integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835"
- integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA==
+"@abp/jquery-validation-unobtrusive@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093"
+ integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg==
dependencies:
- "@abp/jquery-validation" "~5.2.0-rc.2"
+ "@abp/jquery-validation" "~5.2.1"
jquery-validation-unobtrusive "^3.2.12"
-"@abp/jquery-validation@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333"
- integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw==
+"@abp/jquery-validation@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244"
+ integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-validation "^1.19.3"
-"@abp/jquery@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262"
- integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ==
+"@abp/jquery@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228"
+ integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
jquery "~3.6.0"
-"@abp/lodash@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa"
- integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw==
+"@abp/lodash@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d"
+ integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
lodash "^4.17.21"
-"@abp/luxon@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36"
- integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw==
+"@abp/luxon@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17"
+ integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
luxon "^2.3.0"
-"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7"
- integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww==
+"@abp/malihu-custom-scrollbar-plugin@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09"
+ integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7"
- integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og==
+"@abp/select2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332"
+ integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
select2 "^4.0.13"
-"@abp/sweetalert2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea"
- integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g==
+"@abp/sweetalert2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51"
+ integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
sweetalert2 "^11.3.6"
-"@abp/timeago@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d"
- integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw==
+"@abp/timeago@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de"
+ integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
timeago "^1.6.7"
-"@abp/toastr@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7"
- integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw==
+"@abp/toastr@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4"
+ integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
toastr "^2.1.4"
-"@abp/utils@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b"
- integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA==
+"@abp/utils@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064"
+ integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json
index cac1d74e7f..a2285f9846 100644
--- a/modules/cms-kit/angular/package.json
+++ b/modules/cms-kit/angular/package.json
@@ -15,11 +15,11 @@
},
"private": true,
"dependencies": {
- "@abp/ng.account": "~5.2.0-rc.2",
- "@abp/ng.identity": "~5.2.0-rc.2",
- "@abp/ng.setting-management": "~5.2.0-rc.2",
- "@abp/ng.tenant-management": "~5.2.0-rc.2",
- "@abp/ng.theme.basic": "~5.2.0-rc.2",
+ "@abp/ng.account": "~5.2.1",
+ "@abp/ng.identity": "~5.2.1",
+ "@abp/ng.setting-management": "~5.2.1",
+ "@abp/ng.tenant-management": "~5.2.1",
+ "@abp/ng.theme.basic": "~5.2.1",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",
diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json
index 36b777c181..f2937c3593 100644
--- a/modules/cms-kit/angular/projects/cms-kit/package.json
+++ b/modules/cms-kit/angular/projects/cms-kit/package.json
@@ -4,8 +4,8 @@
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
- "@abp/ng.core": ">=5.2.0-rc.2",
- "@abp/ng.theme.shared": ">=5.2.0-rc.2"
+ "@abp/ng.core": ">=5.2.1",
+ "@abp/ng.theme.shared": ">=5.2.1"
},
"dependencies": {
"tslib": "^2.0.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
index 6c2239ae14..44e817e13e 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
@@ -3,6 +3,6 @@
"name": "my-app-identityserver",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.2"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1"
}
}
\ No newline at end of file
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
index b8a1ed8d31..69f5c5ac40 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.0-rc.2.tgz#d2cf4a0f2b8a93f1fe53a0bc6c66d9c3233b620a"
- integrity sha512-aQk3RSl31UT4gEqiHT3oV06BZ/k6q1DVKBwVOj+YQEIb8ojptJtbGv+aUhHEql5I7zwiWe4EWf2rM2Ve0JQa6Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77"
- integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2"
- "@abp/bootstrap" "~5.2.0-rc.2"
- "@abp/bootstrap-datepicker" "~5.2.0-rc.2"
- "@abp/datatables.net-bs5" "~5.2.0-rc.2"
- "@abp/font-awesome" "~5.2.0-rc.2"
- "@abp/jquery-form" "~5.2.0-rc.2"
- "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2"
- "@abp/lodash" "~5.2.0-rc.2"
- "@abp/luxon" "~5.2.0-rc.2"
- "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2"
- "@abp/select2" "~5.2.0-rc.2"
- "@abp/sweetalert2" "~5.2.0-rc.2"
- "@abp/timeago" "~5.2.0-rc.2"
- "@abp/toastr" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2"
- integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg==
+"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2"
+ integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44"
+ integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~5.2.1"
+ "@abp/bootstrap" "~5.2.1"
+ "@abp/bootstrap-datepicker" "~5.2.1"
+ "@abp/datatables.net-bs5" "~5.2.1"
+ "@abp/font-awesome" "~5.2.1"
+ "@abp/jquery-form" "~5.2.1"
+ "@abp/jquery-validation-unobtrusive" "~5.2.1"
+ "@abp/lodash" "~5.2.1"
+ "@abp/luxon" "~5.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~5.2.1"
+ "@abp/select2" "~5.2.1"
+ "@abp/sweetalert2" "~5.2.1"
+ "@abp/timeago" "~5.2.1"
+ "@abp/toastr" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3"
+ integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -41,144 +41,144 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
-"@abp/bootstrap-datepicker@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2"
- integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g==
+"@abp/bootstrap-datepicker@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd"
+ integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f"
- integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw==
+"@abp/bootstrap@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9"
+ integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
bootstrap "^5.1.3"
-"@abp/core@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e"
- integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q==
+"@abp/core@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a"
+ integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ==
dependencies:
- "@abp/utils" "~5.2.0-rc.2"
+ "@abp/utils" "~5.2.1"
-"@abp/datatables.net-bs5@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2"
- integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA==
+"@abp/datatables.net-bs5@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe"
+ integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA==
dependencies:
- "@abp/datatables.net" "~5.2.0-rc.2"
+ "@abp/datatables.net" "~5.2.1"
datatables.net-bs5 "^1.11.4"
-"@abp/datatables.net@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74"
- integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w==
+"@abp/datatables.net@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6"
+ integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
datatables.net "^1.11.4"
-"@abp/font-awesome@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14"
- integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw==
+"@abp/font-awesome@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb"
+ integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
"@fortawesome/fontawesome-free" "^5.15.4"
-"@abp/jquery-form@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616"
- integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA==
+"@abp/jquery-form@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790"
+ integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835"
- integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA==
+"@abp/jquery-validation-unobtrusive@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093"
+ integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg==
dependencies:
- "@abp/jquery-validation" "~5.2.0-rc.2"
+ "@abp/jquery-validation" "~5.2.1"
jquery-validation-unobtrusive "^3.2.12"
-"@abp/jquery-validation@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333"
- integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw==
+"@abp/jquery-validation@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244"
+ integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-validation "^1.19.3"
-"@abp/jquery@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262"
- integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ==
+"@abp/jquery@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228"
+ integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
jquery "~3.6.0"
-"@abp/lodash@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa"
- integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw==
+"@abp/lodash@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d"
+ integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
lodash "^4.17.21"
-"@abp/luxon@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36"
- integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw==
+"@abp/luxon@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17"
+ integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
luxon "^2.3.0"
-"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7"
- integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww==
+"@abp/malihu-custom-scrollbar-plugin@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09"
+ integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7"
- integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og==
+"@abp/select2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332"
+ integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
select2 "^4.0.13"
-"@abp/sweetalert2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea"
- integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g==
+"@abp/sweetalert2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51"
+ integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
sweetalert2 "^11.3.6"
-"@abp/timeago@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d"
- integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw==
+"@abp/timeago@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de"
+ integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
timeago "^1.6.7"
-"@abp/toastr@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7"
- integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw==
+"@abp/toastr@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4"
+ integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
toastr "^2.1.4"
-"@abp/utils@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b"
- integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA==
+"@abp/utils@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064"
+ integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
index ccee8c63b4..0448d7be40 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
@@ -3,6 +3,6 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.2"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1"
}
}
\ No newline at end of file
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
index fdd9cb5e7d..0bd254552e 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.0-rc.2.tgz#d2cf4a0f2b8a93f1fe53a0bc6c66d9c3233b620a"
- integrity sha512-aQk3RSl31UT4gEqiHT3oV06BZ/k6q1DVKBwVOj+YQEIb8ojptJtbGv+aUhHEql5I7zwiWe4EWf2rM2Ve0JQa6Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77"
- integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2"
- "@abp/bootstrap" "~5.2.0-rc.2"
- "@abp/bootstrap-datepicker" "~5.2.0-rc.2"
- "@abp/datatables.net-bs5" "~5.2.0-rc.2"
- "@abp/font-awesome" "~5.2.0-rc.2"
- "@abp/jquery-form" "~5.2.0-rc.2"
- "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2"
- "@abp/lodash" "~5.2.0-rc.2"
- "@abp/luxon" "~5.2.0-rc.2"
- "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2"
- "@abp/select2" "~5.2.0-rc.2"
- "@abp/sweetalert2" "~5.2.0-rc.2"
- "@abp/timeago" "~5.2.0-rc.2"
- "@abp/toastr" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2"
- integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg==
+"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2"
+ integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44"
+ integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~5.2.1"
+ "@abp/bootstrap" "~5.2.1"
+ "@abp/bootstrap-datepicker" "~5.2.1"
+ "@abp/datatables.net-bs5" "~5.2.1"
+ "@abp/font-awesome" "~5.2.1"
+ "@abp/jquery-form" "~5.2.1"
+ "@abp/jquery-validation-unobtrusive" "~5.2.1"
+ "@abp/lodash" "~5.2.1"
+ "@abp/luxon" "~5.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~5.2.1"
+ "@abp/select2" "~5.2.1"
+ "@abp/sweetalert2" "~5.2.1"
+ "@abp/timeago" "~5.2.1"
+ "@abp/toastr" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3"
+ integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -41,144 +41,144 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
-"@abp/bootstrap-datepicker@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2"
- integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g==
+"@abp/bootstrap-datepicker@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd"
+ integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f"
- integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw==
+"@abp/bootstrap@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9"
+ integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
bootstrap "^5.1.3"
-"@abp/core@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e"
- integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q==
+"@abp/core@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a"
+ integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ==
dependencies:
- "@abp/utils" "~5.2.0-rc.2"
+ "@abp/utils" "~5.2.1"
-"@abp/datatables.net-bs5@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2"
- integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA==
+"@abp/datatables.net-bs5@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe"
+ integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA==
dependencies:
- "@abp/datatables.net" "~5.2.0-rc.2"
+ "@abp/datatables.net" "~5.2.1"
datatables.net-bs5 "^1.11.4"
-"@abp/datatables.net@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74"
- integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w==
+"@abp/datatables.net@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6"
+ integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
datatables.net "^1.11.4"
-"@abp/font-awesome@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14"
- integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw==
+"@abp/font-awesome@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb"
+ integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
"@fortawesome/fontawesome-free" "^5.15.4"
-"@abp/jquery-form@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616"
- integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA==
+"@abp/jquery-form@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790"
+ integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835"
- integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA==
+"@abp/jquery-validation-unobtrusive@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093"
+ integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg==
dependencies:
- "@abp/jquery-validation" "~5.2.0-rc.2"
+ "@abp/jquery-validation" "~5.2.1"
jquery-validation-unobtrusive "^3.2.12"
-"@abp/jquery-validation@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333"
- integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw==
+"@abp/jquery-validation@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244"
+ integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-validation "^1.19.3"
-"@abp/jquery@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262"
- integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ==
+"@abp/jquery@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228"
+ integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
jquery "~3.6.0"
-"@abp/lodash@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa"
- integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw==
+"@abp/lodash@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d"
+ integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
lodash "^4.17.21"
-"@abp/luxon@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36"
- integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw==
+"@abp/luxon@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17"
+ integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
luxon "^2.3.0"
-"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7"
- integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww==
+"@abp/malihu-custom-scrollbar-plugin@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09"
+ integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/select2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7"
- integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og==
+"@abp/select2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332"
+ integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
select2 "^4.0.13"
-"@abp/sweetalert2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea"
- integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g==
+"@abp/sweetalert2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51"
+ integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
sweetalert2 "^11.3.6"
-"@abp/timeago@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d"
- integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw==
+"@abp/timeago@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de"
+ integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
timeago "^1.6.7"
-"@abp/toastr@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7"
- integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw==
+"@abp/toastr@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4"
+ integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
toastr "^2.1.4"
-"@abp/utils@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b"
- integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA==
+"@abp/utils@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064"
+ integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
index 7ad679fac7..7004bbc292 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
@@ -3,7 +3,7 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.2",
- "@abp/cms-kit": "5.2.0-rc.2"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1",
+ "@abp/cms-kit": "5.2.1"
}
}
\ No newline at end of file
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
index 3f80b0a072..cedf508cc2 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
@@ -2,37 +2,37 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.0-rc.2.tgz#d2cf4a0f2b8a93f1fe53a0bc6c66d9c3233b620a"
- integrity sha512-aQk3RSl31UT4gEqiHT3oV06BZ/k6q1DVKBwVOj+YQEIb8ojptJtbGv+aUhHEql5I7zwiWe4EWf2rM2Ve0JQa6Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77"
- integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2"
- "@abp/bootstrap" "~5.2.0-rc.2"
- "@abp/bootstrap-datepicker" "~5.2.0-rc.2"
- "@abp/datatables.net-bs5" "~5.2.0-rc.2"
- "@abp/font-awesome" "~5.2.0-rc.2"
- "@abp/jquery-form" "~5.2.0-rc.2"
- "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2"
- "@abp/lodash" "~5.2.0-rc.2"
- "@abp/luxon" "~5.2.0-rc.2"
- "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2"
- "@abp/select2" "~5.2.0-rc.2"
- "@abp/sweetalert2" "~5.2.0-rc.2"
- "@abp/timeago" "~5.2.0-rc.2"
- "@abp/toastr" "~5.2.0-rc.2"
-
-"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2"
- integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg==
+"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.1.tgz#25bd7116b9b0e72ba45f0f5246343343de8561b2"
+ integrity sha512-DYr9ROcTPfCRHxD1QSWqLZ9+ARbO5p9I6SRo893NtJ39aHacAa9RIAwZmP0JLG0C4hLXfJLKXJ2DpNcwY+ubXA==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.1.tgz#dc291fe9c7100cc796068e19abf7579bd5e54b44"
+ integrity sha512-/1C5RyPIRPZT5ir8Len2EnSt1KfWcRdPyn/avAG+9JKBZ8FoUL8mO2/ffESOvikh/wItZZgxJ5VEJVGwHNjgdQ==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~5.2.1"
+ "@abp/bootstrap" "~5.2.1"
+ "@abp/bootstrap-datepicker" "~5.2.1"
+ "@abp/datatables.net-bs5" "~5.2.1"
+ "@abp/font-awesome" "~5.2.1"
+ "@abp/jquery-form" "~5.2.1"
+ "@abp/jquery-validation-unobtrusive" "~5.2.1"
+ "@abp/lodash" "~5.2.1"
+ "@abp/luxon" "~5.2.1"
+ "@abp/malihu-custom-scrollbar-plugin" "~5.2.1"
+ "@abp/select2" "~5.2.1"
+ "@abp/sweetalert2" "~5.2.1"
+ "@abp/timeago" "~5.2.1"
+ "@abp/toastr" "~5.2.1"
+
+"@abp/aspnetcore.mvc.ui@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.1.tgz#239ceeec332cebe2fedec0bb0cdec09089b499d3"
+ integrity sha512-VUSPOKjBSF+NxfwdsEVQte8u7mGP1t7jd1+ej2ND8JEKYJ1Vh7z2mfsT+lQaEJg0JWggU1AxkIMOOfHDNTU3Kg==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@@ -41,234 +41,234 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
-"@abp/bootstrap-datepicker@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2"
- integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g==
+"@abp/bootstrap-datepicker@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.1.tgz#20d565211d05ca184f8e3ef4db840dbd98a58fbd"
+ integrity sha512-UPdVu9t7XybINSfonQN0DB9Lpz1r5vCz7F8CMpbjQprvPmsFmkAZyY0p6MS3kGO5eu5rlpGAGPBGOTeSfEp9ww==
dependencies:
bootstrap-datepicker "^1.9.0"
-"@abp/bootstrap@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f"
- integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw==
+"@abp/bootstrap@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.1.tgz#fe15144d7136a26be44be23fd2470cdef0bd28b9"
+ integrity sha512-vFW8OxfRhiDkIrDVIn3TyGkGyiCLLFmPMjSOmMg3o2XPdRk5uhwSBzWYpk/m+kmPpP6cEsJMxaHpCsirSlPE+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
bootstrap "^5.1.3"
-"@abp/clipboard@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.0-rc.2.tgz#d641c6bdfdf84b991b84c4331a10ca398a7ee26a"
- integrity sha512-RxcY94FfCUhGVFbb2CXTRWujrkSubdYGQ3wbkdZPeOCuF8t60WzyhxoQanRqSdiUbk39W8nUuReYtclzXwM58g==
+"@abp/clipboard@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-5.2.1.tgz#c6bddd279b37e9b2bd27b027d5686411c9ae942b"
+ integrity sha512-aouNTDz8t+8M4O2a+UsEdtABRsyhvzGpXqCG2+LYE1vA3I+CKhglkvEFp+GyIgWsipEHY1U1w6V3qZtcRINn+A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
clipboard "^2.0.8"
-"@abp/cms-kit.admin@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-5.2.0-rc.2.tgz#f7044a5f20eba916480fbdcbfd7721d183618b62"
- integrity sha512-8klspiZuWw3VceVO6E0rKg9geQKpAsb46ZvRnkIPZENvqo61h75Ki7jYF2h1NaISsuZ8+12IOM2wsAbWTsHmQA==
+"@abp/cms-kit.admin@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-5.2.1.tgz#f685e8533366fa7a7db9641a61681f664af6d979"
+ integrity sha512-KkT3eJMR0XCzlIY3KXNId3KfN8rQmGuThTZIPo5cifGg0mpW/HdkCfI4Dmv6v2xkUnZ/o5dOf+cXkvFrt6zzfg==
dependencies:
- "@abp/jstree" "~5.2.0-rc.2"
- "@abp/slugify" "~5.2.0-rc.2"
- "@abp/tui-editor" "~5.2.0-rc.2"
- "@abp/uppy" "~5.2.0-rc.2"
+ "@abp/jstree" "~5.2.1"
+ "@abp/slugify" "~5.2.1"
+ "@abp/tui-editor" "~5.2.1"
+ "@abp/uppy" "~5.2.1"
-"@abp/cms-kit.public@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-5.2.0-rc.2.tgz#64663fe24a654b4c65b559dd840a48664782215e"
- integrity sha512-y/HR2D6pFTdNMAuHu5dBAujlqMrw3O8NiYfEr18Wulqj5NYmMni/Se9H+ilWMEP0BpTkWIbUjhy+zIWVABwHbQ==
+"@abp/cms-kit.public@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-5.2.1.tgz#8f4860b17470f57fce3bbd732a7954031a244d14"
+ integrity sha512-dOhzJjWuXO74GFUg78JRhLOJCaUXjwOHuQMbzpWHnMyrj88nEJkEtHwYs1vxf9GWvyhhES6h7ZyusxJhy+Ybww==
dependencies:
- "@abp/highlight.js" "~5.2.0-rc.2"
- "@abp/star-rating-svg" "~5.2.0-rc.2"
+ "@abp/highlight.js" "~5.2.1"
+ "@abp/star-rating-svg" "~5.2.1"
-"@abp/cms-kit@5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-5.2.0-rc.2.tgz#ccbab486bcfbf290b782adf95c8a25ed5b2bbd13"
- integrity sha512-BrHuSwth7Abddk/IFS9+IoEivy5rFKXMNEfx3/XKCbxBfja3TgfFF2Uv6Zayoydb9AqVV37VLP3fqbEfB1oQSg==
+"@abp/cms-kit@5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-5.2.1.tgz#2cab9de4bb4e14ec39f8a2086b16fc38556af6bb"
+ integrity sha512-SuIJYj8LAdYeATYrpLxRGg7gMQ52Wq2gApriv7c7pC45mPQosi57wjEMvsI2MKAurEwQqTf7J38R3UJNRgmQbQ==
dependencies:
- "@abp/cms-kit.admin" "~5.2.0-rc.2"
- "@abp/cms-kit.public" "~5.2.0-rc.2"
+ "@abp/cms-kit.admin" "~5.2.1"
+ "@abp/cms-kit.public" "~5.2.1"
-"@abp/core@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e"
- integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q==
+"@abp/core@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.1.tgz#9cd7f25dec0b4e654f7998f89c19f3d73169c74a"
+ integrity sha512-FDOhIPjig3oGxkbadJZzFSC1ZHzgQV4R75fsDNH56lQ9mTyRUPQdg0Y54eCtY7yOSjiJOctOUUWHaxoFG7frGQ==
dependencies:
- "@abp/utils" "~5.2.0-rc.2"
+ "@abp/utils" "~5.2.1"
-"@abp/datatables.net-bs5@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2"
- integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA==
+"@abp/datatables.net-bs5@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.1.tgz#fafc65295d00d5b351404740702f7e56ff1341fe"
+ integrity sha512-B8lSAeMM9qOwYbDK/Dhp7BX5lFaCpao4RCPcSqgFrye8vlH8bcobmp4tMD23r24y/gRIEuQBcKzp0Lf0OUpLhA==
dependencies:
- "@abp/datatables.net" "~5.2.0-rc.2"
+ "@abp/datatables.net" "~5.2.1"
datatables.net-bs5 "^1.11.4"
-"@abp/datatables.net@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74"
- integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w==
+"@abp/datatables.net@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.1.tgz#397a3e7db2017c20c082598214478c277b2abec6"
+ integrity sha512-6Q3+W+d8e4TMAkZr/IdPDQuL1v+tjbS50ChLvrJX/BLb4fBhu1LGJWWKzKJFj721DwIsuQQiM4uq9xX/TjiS0w==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
datatables.net "^1.11.4"
-"@abp/font-awesome@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14"
- integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw==
+"@abp/font-awesome@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.1.tgz#357785a0366f555b72f76e2b8ee8a2d607aed6fb"
+ integrity sha512-9fAUdA9QeNRMjp6v8i6EOR480bjB4OzqzriFCKUu4k6VwbA6PxUsJIRFyKIt5UpC12Zqdhpkyj0iG6tE0nRekQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
"@fortawesome/fontawesome-free" "^5.15.4"
-"@abp/highlight.js@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-5.2.0-rc.2.tgz#079625d9828a5c8d801e60e47889d4abe863e949"
- integrity sha512-pMq59MsvsC//cJXfOPwTM3Co8LNIcxpGxwHPCfY5rwLjU167oOV44L6WJ++9PjFrBxyFrzyfNhqYObE01A8kKA==
+"@abp/highlight.js@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-5.2.1.tgz#345e826047b2e87861d08b5ca2a9e5a313c22bda"
+ integrity sha512-Pi/pMWqdvdBr0E63UrhapuUtNNoY9Jt3R1Py52JQ0r90r53k5fmYOIaSwmaFlVZ8T/JApJt2D9i0Z4k8Tcn7Vg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
"@highlightjs/cdn-assets" "~11.4.0"
-"@abp/jquery-form@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616"
- integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA==
+"@abp/jquery-form@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.1.tgz#c9cc6ad3997f7fa036d5cd8e0d15923ad7fff790"
+ integrity sha512-L7uKs7vReOQEETG9xIDq5aXjshbaPa+ZZQcCbn2uwY813e0ErS7Rb1mnowEt/LNEB02AtLet1B4TDVwZUl1uXQ==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835"
- integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA==
+"@abp/jquery-validation-unobtrusive@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.1.tgz#7fdfa3867f61f862ee575114560f79b505649093"
+ integrity sha512-uZ36D1FfoLdBb6h44fQ3kZuTk4gJ5yzhyOprkgMsGAJDVakX7w/W4V3ThpiEO+iUpNKTboVIhW2QQ0AXK9rrsg==
dependencies:
- "@abp/jquery-validation" "~5.2.0-rc.2"
+ "@abp/jquery-validation" "~5.2.1"
jquery-validation-unobtrusive "^3.2.12"
-"@abp/jquery-validation@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333"
- integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw==
+"@abp/jquery-validation@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.1.tgz#e7fbaa1715af5667559e3b6f0fcb916766b28244"
+ integrity sha512-Rr/+SWGlXJ53jfysMB/HVNZqsJKCF3rg23ip2Kg6Q+kQTvWVRE3tpkpoBJczOii5tPUk/A/lsJKgRlcsnP0ASw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jquery-validation "^1.19.3"
-"@abp/jquery@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262"
- integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ==
+"@abp/jquery@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.1.tgz#6b88af5c22fb25d953d38847bcddcf591aeb3228"
+ integrity sha512-FiIRnDx/gm6JR8QljiulwCc5d8+YC123X0qxMIBI8IY9vznEX+Jk48jYG8fLABnRqKEIYfV8UsYSK8IJx3mcSg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
jquery "~3.6.0"
-"@abp/jstree@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-5.2.0-rc.2.tgz#43baf1641e180ea5d9006ab2e558549283b340f8"
- integrity sha512-p+3It0sxSBbKfbH9TioVq2I26OKVc5A3kpLMqNgj0+rXW7RcTLqr98hDocKkCPe+FzDTqh+4La/CsrDPEeikEQ==
+"@abp/jstree@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-5.2.1.tgz#27f8c80053fbd7f5b242cc144b3ebdc33a668b9d"
+ integrity sha512-KYcdkjm33OEOBH/HHgOvIoVX8Bg/KlTJ4muyWYzPK0JK8T61rjrAw8cnlvMl5fqnuzdUUWFgfpuZq7HhgU30NQ==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
jstree "^3.3.12"
-"@abp/lodash@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa"
- integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw==
+"@abp/lodash@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.1.tgz#87601162025a4a376e3c335d418636ef2079ad2d"
+ integrity sha512-ILg3X5tTH2HhJMRmg7BP/r+Kstm/nf+0aNQ2exsJoMMnKE7CC0eYQjpSgrze6GwG3a13eamyTlrz+RrlIm5IBA==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
lodash "^4.17.21"
-"@abp/luxon@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36"
- integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw==
+"@abp/luxon@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.1.tgz#72a9e9bb0e7f3a688662c8e9ad52016b9cfa3a17"
+ integrity sha512-D3KVsba969UBYktdbCxq1JQp4kYZ1S7rIMymDJMBoHByXxwwdeXMkvuphAifBmSYTt3K6bNoZdR0VxtnNlPn2A==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
luxon "^2.3.0"
-"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7"
- integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww==
+"@abp/malihu-custom-scrollbar-plugin@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.1.tgz#8d1b600552607e28a274775ad3bb68ac7cfbba09"
+ integrity sha512-5mvABMCT7tiwPl1vUK8kriN/SRi2gC4VqkEuxghT7uBQG9Cqh5jhJrl80M9ZK/oQFind3r6+SF8OlfwF8yvxHQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/prismjs@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.0-rc.2.tgz#80d326cd085e0994a1bcbe13f34ebf68d21224f7"
- integrity sha512-tgADoIom+9SufIfDJGzXykdgsRf0fHD2O4lcqZYNRDtBPw3RI0XJki3w4fBOffS1kKTMn6ymIAU06SMpEB872A==
+"@abp/prismjs@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-5.2.1.tgz#86aae6ee4529401da75744f1e43c7cd3c0b494a0"
+ integrity sha512-YNgcM7Kvmu3hGXJh4B8gl7rLzC28VuZYYP7AVptVSbTz/n6usCo21evG/st8L3vXixuQkvnNpBFgacJnHdSJZQ==
dependencies:
- "@abp/clipboard" "~5.2.0-rc.2"
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/clipboard" "~5.2.1"
+ "@abp/core" "~5.2.1"
prismjs "^1.26.0"
-"@abp/select2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7"
- integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og==
+"@abp/select2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.1.tgz#f52a3c88da52bbfc4b135671064326aebb98b332"
+ integrity sha512-JH/PqOxhTY05sUyN7of6TNai0W4M3N3OF3Hlwmr8i7hNdYfFwJvQnQzKeKrk/vt8Hv44/JTQDlNKU02BmSBfOQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
select2 "^4.0.13"
-"@abp/slugify@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-5.2.0-rc.2.tgz#8f19fc31a1a0e93bd86affe68ffd960182c2c6b5"
- integrity sha512-LzaI2tpC0YCNtOThehMRjZqgFqogTOJpM/+E+sQ4EdKFJqJI19//r4lLoE3GHsB3ufwGwo+7MddCE/kc8Dc1oQ==
+"@abp/slugify@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-5.2.1.tgz#97c8b54fcfc271e7fb2f1697fafa3dff30ba6891"
+ integrity sha512-e/QxzbeOJYgKdYJQSCeP7QnnraLEafxB/AAzQDDJH2hKid9lNDeUxjggw/xCSiiRCG9Qz8OYuei6bNaYDHcxbQ==
dependencies:
slugify "^1.6.5"
-"@abp/star-rating-svg@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-5.2.0-rc.2.tgz#cb2c6ae408311d51ae90306dfbb7239ff18204bb"
- integrity sha512-eIGI1LP4d+YswT1cNLqT7cnmkye/FlD6XdXl9Z1kTyYDL0P+HKPpGRCPLvmqwR3JBL2KAFHxSV+GjBlONyCH2Q==
+"@abp/star-rating-svg@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-5.2.1.tgz#f8cd6a965079acfa3633731eacf653e142886c1e"
+ integrity sha512-QofOzA0kjpXEm80tkxBptKYTUZa4uolHRy4KNTzDFdcf8TyC6hT8I6kmUS9ym7F3HKLjLhDWfRsd1kKaDwxzQw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
star-rating-svg "^3.5.0"
-"@abp/sweetalert2@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea"
- integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g==
+"@abp/sweetalert2@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.1.tgz#f5ff712b4f7a4cb5a75a754aa4642f099f382e51"
+ integrity sha512-laaF/5WhYw+hNJRTfMzO93fVhaYqnnOcQTUlkGgsZMe2gwebyX73VI8O8Xw7zXmN1Tu/JwqRI46qiafDrPFTLg==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
sweetalert2 "^11.3.6"
-"@abp/timeago@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d"
- integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw==
+"@abp/timeago@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.1.tgz#a410dbf652c0f78f86384e116111aa613458b6de"
+ integrity sha512-xmgqKEKusB6pcqFhMaz8RTi886ad8RrRMYgMWSw4Zjk1Lr9EqQwKtcE43Ve5XWJamh2Wpk8H7IKLQKHfrV12oA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
timeago "^1.6.7"
-"@abp/toastr@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7"
- integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw==
+"@abp/toastr@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.1.tgz#4ed96a7967d028b8e849ff79b8a0a8a041bb20e4"
+ integrity sha512-HrnIzvM9LgQdzlmLmvHUVSG4PmWfx9YuozxkFTv+AGa2FAPby5W9hbQ025ry3bPkU9lGWSu/w7JSDqoiL16bPA==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
toastr "^2.1.4"
-"@abp/tui-editor@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-5.2.0-rc.2.tgz#a7284a627bd836cbc213710002d640f969f03e6b"
- integrity sha512-7ETmLOzAZhLAGbWmtSi4b25oEgH0DSDUmXBUC6K/eslTbcMxLXJwP7NQQWcJVJDCWgom7KE4VEvcxpP4GxkTNA==
+"@abp/tui-editor@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-5.2.1.tgz#06be1a029de754868fa11ce3479be3fbc90ba103"
+ integrity sha512-Mi3preBkGEU1hrtSNCkOjeXPc9c74DFt8BL82sPIVDglYcVrVLXbnNTWE/CHP0spmKWh33ek4FoH1Pt0TePMuw==
dependencies:
- "@abp/jquery" "~5.2.0-rc.2"
- "@abp/prismjs" "~5.2.0-rc.2"
+ "@abp/jquery" "~5.2.1"
+ "@abp/prismjs" "~5.2.1"
-"@abp/uppy@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-5.2.0-rc.2.tgz#483df4aca5e2f2c7010207cb117a1aa4b2652a38"
- integrity sha512-tNAcDaEmZxRHgxcCfAulRo9Gb8V+oHn/k67B1NqgncFAtwuCbLr5PAF+YcLZOogZSqaRIiqRIuJCOpRQjw9qQg==
+"@abp/uppy@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-5.2.1.tgz#560bbb363a0b0b493cc2f1c20f4f7b51e95cb331"
+ integrity sha512-cLqeGHrfwuOgPKjIBTq7H/l3P494sEgmrdH3UW9wVIjD5OAIbK/2AeZ2xTIIg0Mn+ALm+rqfsw0+qBoBug1WHQ==
dependencies:
- "@abp/core" "~5.2.0-rc.2"
+ "@abp/core" "~5.2.1"
uppy "^1.16.1"
-"@abp/utils@~5.2.0-rc.2":
- version "5.2.0-rc.2"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b"
- integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA==
+"@abp/utils@~5.2.1":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.1.tgz#7c2d20f1bcc8cf9f90c060ed31ed3a114a463064"
+ integrity sha512-9hxI24aRZCnxCP+WsOoCltSg4YqG9WtW06t9/f6hFO9B0udXIKyV+95Ndipca/R1G94Snx81ifSwAa+DHbFfvQ==
dependencies:
just-compare "^1.3.0"
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
index bf1ff4f610..684446b1f0 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ net6.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj
index fa1557674e..51282692af 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ net6.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj
index 1d7baff506..145c7adac6 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj
@@ -4,7 +4,7 @@
- netstandard2.0
+ net6.0
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs
new file mode 100644
index 0000000000..5306d302dd
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs
@@ -0,0 +1,36 @@
+using System.Threading.Tasks;
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.GlobalFeatures;
+using Volo.CmsKit.GlobalFeatures;
+
+namespace Volo.CmsKit.Blogs;
+
+public class BlogFeatureDataSeedContributor : IDataSeedContributor, ITransientDependency
+{
+ private readonly BlogFeatureManager _blogFeatureManager;
+ private readonly IBlogRepository _blogRepository;
+
+ public BlogFeatureDataSeedContributor(
+ BlogFeatureManager blogFeatureManager,
+ IBlogRepository blogRepository)
+ {
+ _blogFeatureManager = blogFeatureManager;
+ _blogRepository = blogRepository;
+ }
+
+ public async Task SeedAsync(DataSeedContext context)
+ {
+ if (!GlobalFeatureManager.Instance.IsEnabled())
+ {
+ return;
+ }
+
+ var blogs = await _blogRepository.GetListAsync();
+
+ foreach (var blog in blogs)
+ {
+ await _blogFeatureManager.SetDefaultsIfNotSetAsync(blog.Id);
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs
index 77a519daf3..f9dd101ef9 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs
@@ -44,4 +44,24 @@ public class BlogFeatureManager : DomainService
await SetAsync(blogId, feature.FeatureName, isEnabled: true);
}
}
+
+ public async Task SetIfNotSetAsync(Guid blogId, string featureName, bool isEnabled)
+ {
+ var blogFeature = await BlogFeatureRepository.FindAsync(blogId, featureName);
+ if (blogFeature == null)
+ {
+ var newBlogFeature = new BlogFeature(blogId, featureName, isEnabled);
+ await BlogFeatureRepository.InsertAsync(newBlogFeature);
+ }
+ }
+
+ public async Task SetDefaultsIfNotSetAsync(Guid blogId)
+ {
+ var defaultFeatures = await DefaultBlogFeatureProvider.GetDefaultFeaturesAsync(blogId);
+
+ foreach (var feature in defaultFeatures)
+ {
+ await SetIfNotSetAsync(blogId, feature.FeatureName, isEnabled: true);
+ }
+ }
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs
index 0b52594434..ce6477cdca 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs
@@ -8,7 +8,7 @@ namespace Volo.CmsKit.GlobalResources;
public class GlobalResource : AuditedAggregateRoot, IMultiTenant
{
- public virtual string Name { get; }
+ public virtual string Name { get; private set; }
public virtual string Value { get; private set; }
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
index a405612f39..fca31f2d73 100644
--- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
@@ -26,6 +26,7 @@ public interface ICmsKitDbContext : IEfCoreDbContext
DbSet Pages { get; }
DbSet Blogs { get; }
DbSet BlogPosts { get; }
+ DbSet BlogFeatures { get; }
DbSet MediaDescriptors { get; }
DbSet