Browse Source

Merge branch 'rel-6.0' into Module-OpenIddict

pull/12084/head
Halil İbrahim Kalkan 4 years ago
parent
commit
7166e19354
  1. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
  2. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
  3. 16
      docs/en/API/API-Versioning.md
  4. 12
      docs/en/API/Dynamic-CSharp-API-Clients.md
  5. 217
      docs/en/API/Static-CSharp-API-Clients.md
  6. 51
      docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md
  7. 5
      docs/en/CLI.md
  8. 548
      docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md
  9. BIN
      docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif
  10. BIN
      docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png
  11. 113
      docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md
  12. 8
      docs/en/Concurrency-Check.md
  13. 59
      docs/en/Customizing-Application-Modules-Extending-Entities.md
  14. 2
      docs/en/Customizing-Application-Modules-Guide.md
  15. 70
      docs/en/Customizing-Application-Modules-Overriding-Services.md
  16. 98
      docs/en/Dependency-Injection.md
  17. 40
      docs/en/Distributed-Event-Bus.md
  18. 2
      docs/en/Entity-Framework-Core-MySQL.md
  19. 2
      docs/en/Entity-Framework-Core-Oracle.md
  20. 23
      docs/en/Entity-Framework-Core-Other-DBMS.md
  21. 2
      docs/en/Entity-Framework-Core-PostgreSQL.md
  22. 2
      docs/en/Entity-Framework-Core-SQLite.md
  23. 6
      docs/en/Getting-Started-Create-Solution.md
  24. 9
      docs/en/Getting-Started-With-Startup-Templates.md
  25. 2
      docs/en/Startup-Templates/Application.md
  26. 99
      docs/en/Testing.md
  27. 14
      docs/en/UI/AspNetCore/Dynamic-JavaScript-Proxies.md
  28. 157
      docs/en/UI/AspNetCore/Static-JavaScript-Proxies.md
  29. 4
      docs/en/UI/Blazor/Overall.md
  30. 8
      docs/en/docs-nav.json
  31. BIN
      docs/en/images/generated-static-client-proxies.png
  32. BIN
      docs/en/images/static-js-proxy-example.png
  33. 6
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
  34. 3
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs
  35. 18
      framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs
  36. 4
      framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj
  37. 3
      framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs
  38. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs
  39. 16
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs
  40. 44
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs
  41. 17
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs
  42. 224
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs
  43. 21
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs
  44. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs
  45. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs
  46. 18
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs
  47. 35
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularPwaSupportAdder.cs
  48. 5
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs
  49. 13
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
  50. 12
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs
  51. 39
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs
  52. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs
  53. 92
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
  54. 16
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs
  55. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs
  56. 39
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Design/AbpDesignTimeDbContextBase.cs
  57. 2
      framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkExtensions.cs
  58. 1
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs
  59. 58
      framework/test/Volo.Abp.Uow.Tests/Volo/Abp/Uow/UnitOfWorkExtensions_Tests.cs
  60. 2
      modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj
  61. 2
      modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj
  62. 2
      modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj
  63. 4
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor
  64. 4
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor
  65. 2
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
  66. 224
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
  67. 4
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
  68. 260
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
  69. 2
      modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj
  70. 4
      modules/blogging/app/Volo.BloggingTestApp/package.json
  71. 298
      modules/blogging/app/Volo.BloggingTestApp/yarn.lock
  72. 2
      modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj
  73. 2
      modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj
  74. 2
      modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj
  75. 2
      modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj
  76. 2
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
  77. 238
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
  78. 10
      modules/cms-kit/angular/package.json
  79. 4
      modules/cms-kit/angular/projects/cms-kit/package.json
  80. 2
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
  81. 238
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
  82. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
  83. 238
      modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
  84. 4
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
  85. 360
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
  86. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
  87. 2
      modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj
  88. 2
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj
  89. 36
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs
  90. 20
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs
  91. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs
  92. 1
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
  93. 2
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj
  94. 4
      modules/docs/app/VoloDocs.Web/package.json
  95. 298
      modules/docs/app/VoloDocs.Web/yarn.lock
  96. 2
      modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj
  97. 2
      modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj
  98. 2
      modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj
  99. 2
      modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj
  100. 2
      modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj

4
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"
}
}

2
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 <strong>new</strong> command creates a <strong>layered MVC application</strong> with <strong>Entity Framework Core</strong> as the database provider. However, it has additional options.",
"SeeCliDocumentForMoreInformation": "Check out the <a href=\"{0}\">ABP CLI document</a> for more options or select the \"Direct Download\" tab above.",
"SeeCliDocumentForMoreInformation": "Check out the <a target=\"_blank\" href=\"{0}\">ABP CLI document</a> 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",

16
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
Follow the link below to get the sample's complete source-code
https://github.com/abpframework/abp-samples/tree/master/Api-Versioning

12
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)

217
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<List<BookDto>> 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:
![generated-static-client-proxies](../images/generated-static-client-proxies.png)
`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<AbpRemoteServiceOptions>(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<AbpHttpClientBuilderOptions>(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)

51
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.

5
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.

548
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<Guid>
{
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<TKey>` 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<Book>` statement:
```csharp
namespace Acme.BookStore.EntityFrameworkCore;
[ReplaceDbContext(typeof(IIdentityDbContext))]
[ReplaceDbContext(typeof(ITenantManagementDbContext))]
[ConnectionStringName("Default")]
public class BookStoreDbContext :
AbpDbContext<BookStoreDbContext>,
IIdentityDbContext,
ITenantManagementDbContext
{
//Entities from the modules
public DbSet<Book> 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<Book>(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<Guid>, 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<TKey>` 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.
![](./optimistic-concurrency.png)
Create a new `IBookAppService` (/Books/IBookAppService.cs) interface in the `Application.Contracts` project:
```csharp
public interface IBookAppService :
ICrudAppService<BookDto, Guid, PagedAndSortedResultRequestDto, CreateBookDto, UpdateBookDto>
{
}
```
* 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<Book, BookDto, Guid, PagedAndSortedResultRequestDto, CreateBookDto, UpdateBookDto>,
IBookAppService
{
public BookAppService(IRepository<Book, Guid> repository)
: base(repository)
{
}
public override async Task<BookDto> 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<Book, BookDto>(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<Book, BookDto>();
CreateMap<CreateBookDto, Book>();
}
}
```
### 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
{
<abp-script src="/Pages/Books/Index.js" />
}
<abp-card>
<abp-card-header>
<abp-row>
<abp-column size-md="_6">
<abp-card-title>Books</abp-card-title>
</abp-column>
<abp-column size-md="_6" class="text-end">
<abp-button id="NewBookButton"
text="New Book"
icon="plus"
button-type="Primary"/>
</abp-column>
</abp-row>
</abp-card-header>
<abp-card-body>
<abp-table striped-rows="true" id="BooksTable"></abp-table>
</abp-card-body>
</abp-card>
```
* 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;
}
<abp-dynamic-form abp-model="Book" asp-page="/Books/CreateModal">
<abp-modal>
<abp-modal-header title="New Book"></abp-modal-header>
<abp-modal-body>
<abp-form-content />
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</abp-dynamic-form>
```
* 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<IActionResult> 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;
}
<form asp-page="/Books/EditModal">
<abp-modal>
<abp-modal-header title="Update"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="Id"/>
<abp-input asp-for="Book.Name"/>
<abp-input asp-for="Book.Price"/>
<abp-select asp-for="Book.Type"/>
<abp-input asp-for="Book.PublishDate"/>
<abp-input asp-for="Book.ConcurrencyStamp" type="hidden"/>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</form>
```
* 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, UpdateBookDto>(bookDto);
}
public async Task<IActionResult> 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<BookDto, UpdateBookDto>();
}
}
```
Then we can run the application, navigate to the **/Books** endpoint and see the result.
![](concurrency-mismatch.gif)
* 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.

BIN
docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

113
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<IExternalLogger, ElasticsearchExternalLogger>();
context.Services.AddTransient<IExternalLogger, AzureExternalLogger>();
}
````
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<IExternalLogger> _externalLoggers;
public MyService(IEnumerable<IExternalLogger> 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<IExternalLogger>` 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<IExternalLogger> services = _serviceProvider.GetServices<IExternalLogger>();
````
## 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)

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

59
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<TenantEto>` event as shown in the following example:
````csharp
public class MyDistributedIdentityUserChangeEventHandler :
IDistributedEventHandler<EntityCreatedEto<EntityEto>>,
IDistributedEventHandler<EntityUpdatedEto<EntityEto>>,
IDistributedEventHandler<EntityDeletedEto<EntityEto>>,
public class MyDistributedEventHandler :
IDistributedEventHandler<EntityCreatedEto<TenantEto>>,
ITransientDependency
{
public async Task HandleEventAsync(EntityCreatedEto<EntityEto> eventData)
public async Task HandleEventAsync(EntityCreatedEto<TenantEto> 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<EntityEto> 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<EntityEto> 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<EntityCreatedEto<UserEto>>,
ITransientDependency
{
public async Task HandleEventAsync(EntityCreatedEto<UserEto> 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<UserEto>` 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

2
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

70
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<IIdentityDbContext> 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<IdentityUser>` or `IRepository<IdentityUser, Guid>`, 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<IdentityUser>`, `IRepository<IdentityUser, Guid>` 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<IIdentityDbContext> 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<AbpAspNetCoreMvcOptions>(options =>
{
options.IgnoredControllersOnModelExclusion.AddIfNotContains(typeof(MyAccountController));
options.IgnoredControllersOnModelExclusion
.AddIfNotContains(typeof(MyAccountController));
});
```

98
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<IExternalLogger, ElasticsearchExternalLogger>();
context.Services.AddTransient<IExternalLogger, AzureExternalLogger>();
}
````
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<IExternalLogger> _externalLoggers;
public MyService(IEnumerable<IExternalLogger> 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<IExternalLogger>` 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<IExternalLogger> services = _serviceProvider.GetServices<IExternalLogger>();
````
### 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.

40
docs/en/Distributed-Event-Bus.md

@ -228,6 +228,7 @@ namespace AbpDemo
````
* `MyHandler` implements the `IDistributedEventHandler<EntityUpdatedEto<ProductEto>>`.
* 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<AbpDistributedEntityEventOptions>(options =>
options.AutoEventSelectors.AddAll();
//Enable for a single entity
options.AutoEventSelectors.Add<IdentityUser>();
options.AutoEventSelectors.Add<Product>();
//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<EntityUpdatedEto<EntityEto>>` 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<EntityUpdatedEto<EntityEto>>` 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<AbpDistributedEntityEventOptions>(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.
> 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.

2
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

2
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:

23
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).

2
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

2
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

6
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:

9
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)
<!-- TODO: this document has been moved, it should be deleted in the future. -->
<!-- TODO: this document has been moved, it should be deleted in the future. -->

2
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?

99
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<Issue, Guid> _issueRepository;
public IssueRepository_Tests()
{
_issueRepository = GetRequiredService<IRepository<Issue, Guid>>();
}
public async Task Should_Query_By_Title()
{
IQueryable<Issue> 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<Issue>` 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<Issue, Guid> _issueRepository;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public IssueRepository_Tests()
{
_issueRepository = GetRequiredService<IRepository<Issue, Guid>>();
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
}
public async Task Should_Query_By_Title()
{
using (var uow = _unitOfWorkManager.Begin())
{
IQueryable<Issue> 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<T>`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<MyProjectDbContext> _dbContextProvider;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public IssueRepository_Tests()
{
_dbContextProvider = GetRequiredService<IDbContextProvider<MyProjectDbContext>>();
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
}
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<T>` 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;

14
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)
* [Web Application Development Tutorial](../../Tutorials/Part-1.md)

157
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<AuthorDto> GetAsync(Guid id);
Task<PagedResultDto<AuthorDto>> GetListAsync(GetAuthorListDto input);
Task<AuthorDto> 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:
![static-js-proxy-example](../../images/static-js-proxy-example.png)
`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
<abp-script src="/client-proxies/app-proxy.js"/>
````
> 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<DynamicJavaScriptProxyOptions>(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)

4
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.
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.

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

BIN
docs/en/images/generated-static-client-proxies.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
docs/en/images/static-js-proxy-example.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

6
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<DynamicJavaScriptProxyOptions>(options =>
{
options.DisableModule("abp");
});
}
public override void PostConfigureServices(ServiceConfigurationContext context)

3
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())
{

18
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))
{

4
framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<AssemblyName>Volo.Abp.AutoMapper</AssemblyName>
<PackageId>Volo.Abp.AutoMapper</PackageId>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
@ -21,7 +21,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="10.1.1" />
<PackageReference Include="AutoMapper" Version="11.0.1" />
</ItemGroup>
</Project>

3
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);
}
}

2
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("-");

16
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<NewCommand> 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<NewCommand>.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);
}

44
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<NewCommand> 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<NewCommand>.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";
}
}
}

17
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs

@ -83,15 +83,18 @@ public abstract class ProxyCommandBase<T> : IConsoleCommand, ITransientDependenc
sb.AppendLine("Options:");
sb.AppendLine("");
sb.AppendLine("-m|--module <module-name> (default: 'app') The name of the backend module you wish to generate proxies for.");
sb.AppendLine("-t|--type <generate-type> The name of generate type (csharp, js, ng).");
sb.AppendLine("-wd|--working-directory <directory-path> Execution directory.");
sb.AppendLine("-u|--url <url> API definition URL from.");
sb.AppendLine("-a|--api-name <module-name> (default: 'default') The name of the API endpoint defined in the /src/environments/environment.ts.");
sb.AppendLine("-s|--source <source-name> (default: 'defaultProject') Angular project name to resolve the root namespace & API definition URL from.");
sb.AppendLine("-o|--output <output-name> 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 <target-name> (default: 'defaultProject') Angular project name to place generated code in.");
sb.AppendLine("--folder <folder-name> (default: 'ClientProxies') Folder name to place generated CSharp code in.");
sb.AppendLine("-t|--type <generate-type> The name of generate type (csharp, js, ng).");
sb.AppendLine(" csharp");
sb.AppendLine(" --folder <folder-name> (default: 'ClientProxies') Folder name to place generated CSharp code in.");
sb.AppendLine(" js");
sb.AppendLine(" -o|--output <output-name> JavaScript file path or folder to place generated code in.");
sb.AppendLine(" ng");
sb.AppendLine(" -a|--api-name <module-name> (default: 'default') The name of the API endpoint defined in the /src/environments/environment.ts.");
sb.AppendLine(" -s|--source <source-name> (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 <target-name> (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");

224
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<SuiteCommand> 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<SuiteCommand>.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<Guid?> GetSolutionIdAsync(HttpClient client, string solutionPath)
{
var timeIntervals = new List<TimeSpan>();
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<Guid?> 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/<your-private-key>/v3/index.json");
Logger.LogInformation(
"dotnet tool install -g Volo.Abp.Suite --add-source https://nuget.abp.io/<your-private-key>/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/<your-private-key>/v3/index.json");
Logger.LogError(
"dotnet tool update -g Volo.Abp.Suite --add-source https://nuget.abp.io/<your-private-key>/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";
}
}
}
}
}

21
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);
}
}
}

6
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();

6
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<string, string> ExtraProperties { get; set; }
@ -57,7 +59,8 @@ public class ProjectBuildArgs
[CanBeNull] string voloGitHubLocalRepositoryPath = null,
[CanBeNull] string templateSource = null,
Dictionary<string, string> 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<string, string>();
ConnectionString = connectionString;
Pwa = pwa;
}
}

18
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<ProjectBuildPipelineStep> 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<ProjectBuildPipelineStep> steps)

35
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);
}
}

5
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)

13
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<NpmPackagesUpdater> 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<NpmPackagesUpdater>.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)

12
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<ProjectNpmPackageAdder> 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<ProjectNpmPackageAdder>.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);
}
}

39
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<string> RemoveProject(List<string> 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;
}

2
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));
}
}

92
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<VoloNugetPackagesVersionUpdater> 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<bool> 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);
}

16
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);

6
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);

39
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<TModule, TContext> : IDesignTimeDbContextFactory<TContext>
where TModule : AbpModule
where TContext : DbContext
{
public virtual TContext CreateDbContext(string[] args)
{
return AsyncHelper.RunSync(() => CreateDbContextAsync(args));
}
protected virtual async Task<TContext> CreateDbContextAsync(string[] args)
{
var application = await AbpApplicationFactory.CreateAsync<TModule>(options =>
{
options.Services.ReplaceConfiguration(BuildConfiguration());
ConfigureServices(options.Services);
});
await application.InitializeAsync();
return application.ServiceProvider.GetRequiredService<TContext>();
}
protected virtual void ConfigureServices(IServiceCollection services)
{
}
protected abstract IConfigurationRoot BuildConfiguration();
}

2
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<TValue>();
return unitOfWork.Items.FirstOrDefault(x => x.Key == key).Value.As<TValue>();
}
public static TValue GetOrAddItem<TValue>([NotNull] this IUnitOfWork unitOfWork, string key, Func<string, TValue> factory)

1
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");
}

58
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<AbpUnitOfWorkModule>
{
private readonly IUnitOfWorkManager _unitOfWorkManager;
public UnitOfWorkExtensions_Tests()
{
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
}
[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<NameValue>("testKey").ShouldBeOfType<NameValue>();
uow.GetItemOrDefault<NameValue>("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<NameValue>();
item.Value.ShouldBe("TestValue");
}
[Fact]
public void RemoveItem()
{
var uow = _unitOfWorkManager.Begin();
uow.Items.Add("testKey", "testValue");
uow.RemoveItem("testKey");
uow.Items.ShouldNotContainKey("testKey");
}
}

2
modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<AssemblyName>Volo.Abp.Account.Application</AssemblyName>
<PackageId>Volo.Abp.Account.Application</PackageId>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>

2
modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace />
</PropertyGroup>

2
modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace />
</PropertyGroup>

4
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())
{
<BarDropdown>
<BarDropdown RightAligned="true">
<BarDropdownToggle>
@_currentLanguage.DisplayName
</BarDropdownToggle>
<BarDropdownMenu RightAligned="true">
<BarDropdownMenu>
@foreach (var language in _otherLanguages)
{
<BarDropdownItem Clicked="() => ChangeLanguage(language)">@language.DisplayName</BarDropdownItem>

4
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())
{
<BarDropdown>
<BarDropdown RightAligned="true">
<BarDropdownToggle>
@_currentLanguage.DisplayName
</BarDropdownToggle>
<BarDropdownMenu RightAligned="true">
<BarDropdownMenu>
@foreach (var language in _otherLanguages)
{
<BarDropdownItem Clicked="() => ChangeLanguageAsync(language)">@language.DisplayName</BarDropdownItem>

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

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

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

@ -2,30 +2,30 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.shared@^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"

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

@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^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": {}
}

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

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^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"

2
modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj

@ -3,7 +3,7 @@
<Import Project="..\..\..\..\configureawait.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace />
</PropertyGroup>

4
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"
}
}

298
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"

2
modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<AssemblyName>Volo.Blogging.Admin.Application</AssemblyName>
<PackageId>Volo.Blogging.Admin.Application</PackageId>
<RootNamespace />

2
modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<AssemblyName>Volo.Blogging.Application</AssemblyName>
<PackageId>Volo.Blogging.Application</PackageId>
<RootNamespace />

2
modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<AssemblyName>Volo.Blogging.Domain</AssemblyName>
<PackageId>Volo.Blogging.Domain</PackageId>
<RootNamespace />

2
modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<AssemblyName>Volo.Blogging.MongoDB</AssemblyName>
<PackageId>Volo.Blogging.MongoDB</PackageId>
<RootNamespace />

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

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

238
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"

10
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",

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

@ -4,8 +4,8 @@
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
"@abp/ng.core": ">=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"

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

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

238
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"

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

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

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

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^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"

4
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"
}
}

360
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"

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\configureawait.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace />
</PropertyGroup>

2
modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\configureawait.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace />
</PropertyGroup>

2
modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\configureawait.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace />
</PropertyGroup>

36
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<BlogsFeature>())
{
return;
}
var blogs = await _blogRepository.GetListAsync();
foreach (var blog in blogs)
{
await _blogFeatureManager.SetDefaultsIfNotSetAsync(blog.Id);
}
}
}

20
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);
}
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs

@ -8,7 +8,7 @@ namespace Volo.CmsKit.GlobalResources;
public class GlobalResource : AuditedAggregateRoot<Guid>, IMultiTenant
{
public virtual string Name { get; }
public virtual string Name { get; private set; }
public virtual string Value { get; private set; }

1
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs

@ -26,6 +26,7 @@ public interface ICmsKitDbContext : IEfCoreDbContext
DbSet<Page> Pages { get; }
DbSet<Blog> Blogs { get; }
DbSet<BlogPost> BlogPosts { get; }
DbSet<BlogFeature> BlogFeatures { get; }
DbSet<MediaDescriptor> MediaDescriptors { get; }
DbSet<MenuItem> MenuItems { get; }
DbSet<GlobalResource> GlobalResources { get; }

2
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\configureawait.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace />
</PropertyGroup>

4
modules/docs/app/VoloDocs.Web/package.json

@ -3,7 +3,7 @@
"name": "volo.docstestapp",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.2",
"@abp/docs": "^5.2.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.1",
"@abp/docs": "^5.2.1"
}
}

298
modules/docs/app/VoloDocs.Web/yarn.lock

@ -2,45 +2,45 @@
# yarn lockfile v1
"@abp/anchor-js@~5.2.0-rc.2":
version "5.2.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-5.2.0-rc.2.tgz#64ba3e04498c02301f7c5d26b619aaa44782d245"
integrity sha512-yMmXfkQVY/mChByKF+W9KlrjTDZZ9uSrnQTiOf2l9NI+zxHXuiE+H+HnL8l7sacUZjdHaKNLmbXdPw/MJyXtDg==
"@abp/anchor-js@~5.2.1":
version "5.2.1"
resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-5.2.1.tgz#701e01a9637800429cf3f0364e62b8351c3a0354"
integrity sha512-61+rrfSQyZacqUJ5qQxkoWYffWcd7AArkj8DmEHmFY4e28hH3P9eXMcuGBoJ85pXleAPEmVYswc/xZiTMNHkvg==
dependencies:
"@abp/core" "~5.2.0-rc.2"
"@abp/core" "~5.2.1"
anchor-js "^4.3.1"
"@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"
@ -49,180 +49,180 @@
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/docs@^5.2.0-rc.2":
version "5.2.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-5.2.0-rc.2.tgz#0ff64083b75ad57ad667f70306ab8c54a8c2e050"
integrity sha512-01PX95vLmi5/wJLEciyU5b5nPZkxF8A+IMXu2FGjxz5LJ1mUY/iL38AEOqTc8bDGK3HEIbTG1azAO5v3qfD05w==
"@abp/docs@^5.2.1":
version "5.2.1"
resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-5.2.1.tgz#111952a2da8e6e1ac20ed8eaa8a15854b2c92f7b"
integrity sha512-WZCCY73vyIpRu7hypPiP9CRr4Bvzkv3up0WeGQ4rK9LiZWNSxG9PXv4lYeD4cuHg0zgxH9d/6toYToaIJNqDCQ==
dependencies:
"@abp/anchor-js" "~5.2.0-rc.2"
"@abp/clipboard" "~5.2.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2"
"@abp/popper.js" "~5.2.0-rc.2"
"@abp/prismjs" "~5.2.0-rc.2"
"@abp/anchor-js" "~5.2.1"
"@abp/clipboard" "~5.2.1"
"@abp/malihu-custom-scrollbar-plugin" "~5.2.1"
"@abp/popper.js" "~5.2.1"
"@abp/prismjs" "~5.2.1"
"@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/popper.js@~5.2.0-rc.2":
version "5.2.0-rc.2"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-5.2.0-rc.2.tgz#871d1ea397a345abbe3559890664056325cef01a"
integrity sha512-84qk2zmgw79ARH5sk0hVjD8lV54EXJeJbiBpKVPzGUcRlhMfoTnPjn/DAzLsBGS1WZEkYDkpgcRTLSgwJ6JvTw==
"@abp/popper.js@~5.2.1":
version "5.2.1"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-5.2.1.tgz#441a5be6889915fc09fe5d5e3c4b419d65a7b3bd"
integrity sha512-poQhd5EYjU2/udJWlDEd5mIPWmw6AzNOzAd5V4OUHMai+BHeuhIXQ6mopvxf9lpzytGoFe2ZIiQ547Wfq4Fl/Q==
dependencies:
"@abp/core" "~5.2.0-rc.2"
"@abp/core" "~5.2.1"
"@popperjs/core" "^2.11.2"
"@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"

2
modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<AssemblyName>Volo.Docs.Admin.Application</AssemblyName>
<PackageId>Volo.Docs.Admin.Application</PackageId>
<RootNamespace />

2
modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<AssemblyName>Volo.Docs.Application</AssemblyName>
<PackageId>Volo.Docs.Application</PackageId>
<RootNamespace />

2
modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<AssemblyName>Volo.Docs.Domain</AssemblyName>
<PackageId>Volo.Docs.Domain</PackageId>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>

2
modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<AssemblyName>Volo.Docs.MongoDB</AssemblyName>
<PackageId>Volo.Docs.MongoDB</PackageId>
<RootNamespace />

2
modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj

@ -4,7 +4,7 @@
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace />
</PropertyGroup>

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

Loading…
Cancel
Save