Browse Source

Merge branch 'dev' into EngincanV/cmskit-rating

pull/5216/head
EngincanV 6 years ago
parent
commit
705514d2c4
  1. 5
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
  2. 26
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
  3. 8
      common.props
  4. 2
      common.test.props
  5. 62
      docs/en/Blog-Posts/2020-09-03 v3_1_Release_Stable/POST.md
  6. 92
      docs/en/Blog-Posts/2020-09-07 Angular-Service-Proxies/POST.md
  7. BIN
      docs/en/Blog-Posts/2020-09-07 Angular-Service-Proxies/abp-generate-proxy-output.png
  8. 25
      docs/en/CLI.md
  9. 31
      docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md
  10. 52
      docs/en/Community-Articles/2020-08-31-Adding-User-Navigation-In-Suite/POST.md
  11. BIN
      docs/en/Community-Articles/2020-08-31-Adding-User-Navigation-In-Suite/ui-pick-type-modal.jpg
  12. BIN
      docs/en/Community-Articles/2020-08-31-Adding-User-Navigation-In-Suite/ui-pick-type-modal2.jpg
  13. 167
      docs/en/Distributed-Event-Bus-Kafka-Integration.md
  14. 1
      docs/en/Distributed-Event-Bus.md
  15. 153
      docs/en/Tutorials/Part-10.md
  16. 13
      docs/en/Tutorials/Part-2.md
  17. 58
      docs/en/Tutorials/Part-3.md
  18. 19
      docs/en/Tutorials/Part-9.md
  19. BIN
      docs/en/Tutorials/images/bookstore-angular-author-selection.png
  20. BIN
      docs/en/Tutorials/images/bookstore-angular-service-proxy-author-2.png
  21. BIN
      docs/en/Tutorials/images/bookstore-books-with-authorname-angular.png
  22. BIN
      docs/en/Tutorials/images/generated-proxies-3.png
  23. 2
      docs/en/UI/Angular/Environment.md
  24. 2
      docs/en/UI/Angular/Service-Proxies.md
  25. 41
      docs/en/Upgrading.md
  26. 8
      docs/en/docs-nav.json
  27. 163
      docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md
  28. 1
      docs/zh-Hans/Distributed-Event-Bus.md
  29. 4
      docs/zh-Hans/docs-nav.json
  30. 9
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DataAnnotations/AbpValidationAttributeAdapterProvider.cs
  31. 46
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DataAnnotations/DynamicRangeAttributeAdapter.cs
  32. 4
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
  33. 137
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs
  34. 157
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs
  35. 11
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs
  36. 87
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs
  37. 64
      framework/src/Volo.Abp.Core/Volo/Abp/Validation/DynamicRangeAttribute.cs
  38. 36
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController.cs
  39. 19
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs
  40. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
  41. 46
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/luxon/abp.luxon.js
  42. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/utils/abp-utils.umd.js.map
  43. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map
  44. 222
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
  45. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
  46. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/libs/abp/utils/abp-utils.umd.js.map
  47. 2
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map
  48. 236
      framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
  49. 4
      modules/blogging/app/Volo.BloggingTestApp/package.json
  50. 2
      modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/utils/abp-utils.umd.js.map
  51. 2
      modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map
  52. 330
      modules/blogging/app/Volo.BloggingTestApp/yarn.lock
  53. 2
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
  54. 2
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/wwwroot/libs/abp/utils/abp-utils.umd.js.map
  55. 2
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map
  56. 236
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
  57. 10
      modules/cms-kit/angular/package.json
  58. 4
      modules/cms-kit/angular/projects/cms-kit/package.json
  59. 2
      modules/cms-kit/common.props
  60. 2
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
  61. 2
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js.map
  62. 2
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map
  63. 236
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
  64. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
  65. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/utils/abp-utils.umd.js.map
  66. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map
  67. 236
      modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
  68. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
  69. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/utils/abp-utils.umd.js.map
  70. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map
  71. 236
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
  72. 4
      modules/docs/app/VoloDocs.Web/package.json
  73. 2
      modules/docs/app/VoloDocs.Web/wwwroot/libs/abp/utils/abp-utils.umd.js.map
  74. 2
      modules/docs/app/VoloDocs.Web/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map
  75. 296
      modules/docs/app/VoloDocs.Web/yarn.lock
  76. 2
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml
  77. 13
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs
  78. 49
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs
  79. 8
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnitManager.cs
  80. 104
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs
  81. 2
      modules/identityserver/common.props
  82. 2
      npm/lerna.json
  83. 2
      npm/ng-packs/lerna.version.json
  84. 21
      npm/ng-packs/package.json
  85. 4
      npm/ng-packs/packages/account/package.json
  86. 4
      npm/ng-packs/packages/components/package.json
  87. 4
      npm/ng-packs/packages/core/package.json
  88. 4
      npm/ng-packs/packages/core/src/lib/services/routes.service.ts
  89. 9
      npm/ng-packs/packages/core/src/lib/states/config.state.ts
  90. 13
      npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts
  91. 26
      npm/ng-packs/packages/core/src/lib/tests/string-utils.spec.ts
  92. 6
      npm/ng-packs/packages/core/src/lib/utils/string-utils.ts
  93. 4
      npm/ng-packs/packages/feature-management/package.json
  94. 6
      npm/ng-packs/packages/identity/package.json
  95. 4
      npm/ng-packs/packages/permission-management/package.json
  96. 2
      npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html
  97. 17
      npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts
  98. 2
      npm/ng-packs/packages/schematics/package.json
  99. 23
      npm/ng-packs/packages/schematics/src/collection.json
  100. 0
      npm/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template

5
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json

@ -191,6 +191,9 @@
"Enum:Status:2": "Approved",
"Summary": "Summary",
"AuthorName": "Author name",
"CoverImage": "Cover Image"
"CoverImage": "Cover Image",
"RemoveCacheConfirmationMessage": "Are you sure you remove the cache for \"{0}\" article?",
"SuccessfullyRemoved": "Successfully cleared",
"RemoveCache": "Remove Cache"
}
}

26
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json

@ -37,7 +37,7 @@
"CreateArticleTitleInfo": "Title of the article to be shown on the article list.",
"CreateArticleUrlInfo": "Original GitHub/External URL of the article.",
"CreateArticleSummaryInfo": "A short summary of the article to be shown on the article list.",
"CreateArticleCoverInfo": "For creating an effective article, add a cover photo. Only 16:9 aspect ratio pictures will be accepted!",
"CreateArticleCoverInfo": "For creating an effective article, add a cover photo. Upload 16:9 aspect ratio pictures for the best view.",
"ThisExtensionIsNotAllowed": "This extension is not allowed.",
"TheFileIsTooLarge": "The file is too large.",
"GoToTheArticle": "Go to the Article",
@ -61,10 +61,28 @@
"Oops": "Oops!",
"CreateArticleSuccessMessage": "The Article has been successfully submitted. It will be published after a review from the site admin.",
"ChooseCoverImage": "Choose a cover image...",
"PictureUploadedIsNotInExpectedAspectRatio": "The picture you uploaded is not in 16:9 aspect ratio!",
"HeightAndWidthMustNotExceed": "Height and Width must not exceed 1920*1080.",
"CoverImage": "Cover Image",
"ShareYourExperiencesWithTheABPFramework": "Share your experiences with the ABP Framework!",
"Optional": "Optional"
"Optional": "Optional",
"UpdateUserWebSiteInfo": "Example: https://johndoe.com",
"UpdateUserTwitterInfo": "Example: johndoe",
"UpdateUserGithubInfo": "Example: johndoe",
"UpdateUserLinkedinInfo": "Example: https://www.linkedin.com/...",
"UpdateUserCompanyInfo": "Example: Volosoft",
"UpdateUserJobTitleInfo": "Example: Software Developer",
"UserName": "UserName",
"Company": "Company",
"PersonalWebsite": "Personal Website",
"RegistrationDate": "Registration Date",
"Social": "Social",
"Biography": "Biography",
"HasNoPublishedArticlesYet": "has no published articles yet",
"Author": "Author",
"MyAccount": "My account",
"LatestGithubAnnouncements": "Latest Github Announcements",
"SeeAllAnnouncements": "See All Announcements",
"LatestBlogPost": "Latest Blog Post",
"Edit": "Edit",
"ProfileImageChange": "Change the profile image"
}
}

8
common.props

@ -1,16 +1,16 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>3.1.0</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<Version>3.2.0</Version>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
<PackageIconUrl>https://abp.io/assets/abp_nupkg.png</PackageIconUrl>
<PackageProjectUrl>https://abp.io/</PackageProjectUrl>
<PackageLicenseFile>LICENSE.md</PackageLicenseFile>
<PackageLicenseExpression>LGPL-3.0-only</PackageLicenseExpression>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/abpframework/abp/</RepositoryUrl>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.3" PrivateAssets="All" />
<None Include="LICENSE.md" Pack="true" PackagePath=""/>
</ItemGroup>
</Project>

2
common.test.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>

62
docs/en/Blog-Posts/2020-09-03 v3_1_Release_Stable/POST.md

@ -0,0 +1,62 @@
# ABP Framework 3.1 Final Has Been Released
It is exciting for us to announce that we've released the ABP Framework & ABP Commercial 3.1 today.
Since all the new features are already explained in details with the [3.1 RC Announcement Post](https://blog.abp.io/abp/ABP-Framework-v3.1-RC-Has-Been-Released), I will not repeat all the details here. Please read [the RC post](https://blog.abp.io/abp/ABP-Framework-v3.1-RC-Has-Been-Released) for **new feature and changes** you may need to do for your solution while upgrading to the version 3.1.
## Creating New Solutions
You can create a new solution with the ABP Framework version 3.1 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 details.
## 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
````
After the update command, check [the RC blog post](https://blog.abp.io/abp/ABP-Framework-v3.1-RC-Has-Been-Released) to learn if you need to make any changes in your solution.
> You may want to see the new [upgrading document](https://docs.abp.io/en/abp/latest/Upgrading).
## About the version 3.2
The planned schedule for the version 3.2 is like that;
* **September 17, 2020**: 3.2.0-rc.1 (release candidate)
* **October 1, 2020**: 3.2.0 final (stable)
You can check [the GitHub milestone](https://github.com/abpframework/abp/milestone/39) to see the features/issues we are working on.
## ABP Community & Articles
We had lunched the [ABP Community web site](https://community.abp.io/) a few weeks before. The core ABP team and the ABP community have started to create content for the community.
Here, the last three articles from the ABP Community:
* [ABP Suite: How to Add the User Entity as a Navigation Property of Another Entity](https://community.abp.io/articles/abp-suite-how-to-add-the-user-entity-as-a-navigation-property-of-another-entity-furp75ex) by [@ebicoglu](https://github.com/ebicoglu)
* [Reuse ABP vNext Modules to Quickly Implement Application Features](https://community.abp.io/articles/reuse-abp-vnext-modules-to-quickly-implement-application-features-tdtmwd9w) by [@gdlcf88](https://github.com/gdlcf88)
* [Using DevExtreme Components With the ABP Framework](https://community.abp.io/articles/using-devextreme-components-with-the-abp-framework-zb8z7yqv) by [@cotur](https://github.com/cotur).
We are looking for your contributions; You can [submit your article](https://community.abp.io/articles/submit)! We will promote your article to the community.

92
docs/en/Blog-Posts/2020-09-07 Angular-Service-Proxies/POST.md

@ -1,8 +1,8 @@
# Introducing the Angular Service Proxy Generation
Angular Service Proxy System **generates TypeScript services and models** to consume your backend HTTP APIs developed using the ABP Framework. So, you **don't manually create** models for your server side DTOs and perform raw HTTP calls to the server.
ABP Angular Service Proxy System **generates TypeScript services and models** to consume your backend HTTP APIs developed using the ABP Framework. So, you **don't manually create** models for your server side DTOs and perform raw HTTP calls to the server.
ABP Framework has introduced the **new** Angular Service Proxy Generation system with the version 3.1. While this feature was available since the [v2.3](https://blog.abp.io/abp/ABP-Framework-v2_3_0-Has-Been-Released), it was not well covering some scenarios, like inheritance and generic types and had some known problems. **With the v3.1, we've re-written** it using the [Angular Schematics](https://angular.io/guide/schematics) system. Now, it is much more stable and feature rich.
ABP Framework has introduced the **new** Angular Service Proxy Generation system with the **version 3.1**. While this feature was available since the [v2.3](https://blog.abp.io/abp/ABP-Framework-v2_3_0-Has-Been-Released), it was not well covering some scenarios, like inheritance and generic types and had some known problems. **With the v3.1, we've re-written** it using the [Angular Schematics](https://angular.io/guide/schematics) system. Now, it is much more stable and feature rich.
This post introduces the service proxy generation system and highlights some important features.
@ -47,6 +47,15 @@ apis: {
`Acme.BookStore` should be replaced by the root namespace of your .NET project. This ensures to not create unnecessary nested folders while creating the service proxy code. This value is `AngularProxyDemo` for the example solution explained below.
* Finally, add the following paths to the `tsconfig.base.json` to have a shortcut while importing proxies:
```json
"paths": {
"@proxy": ["src/app/proxy/index.ts"],
"@proxy/*": ["src/app/proxy/*"]
}
```
## Basic Usage
### Project Creation
@ -139,21 +148,23 @@ abp generate-proxy
It should produce an output like the following:
````bash
CREATE src/app/shared/models/books/index.ts (142 bytes)
CREATE src/app/shared/services/books/book.service.ts (437 bytes)
...
CREATE src/app/proxy/books/book.service.ts (446 bytes)
CREATE src/app/proxy/books/models.ts (148 bytes)
CREATE src/app/proxy/books/index.ts (57 bytes)
CREATE src/app/proxy/index.ts (33 bytes)
````
> `generate-proxy` command can take some some optional parameters for advanced scenarios (like [modular development](https://docs.abp.io/en/abp/latest/Module-Development-Basics)). You can take a look at the [documentation](https://docs.abp.io/en/abp/latest/UI/Angular/Service-Proxies).
It basically creates two files;
#### The Generated Code
src/app/shared/services/books/**book.service.ts**: This is the service that can be injected and used to get the list of books;
`src/app/proxy/books/book.service.ts`: This is the service that can be injected and used to get the list of books;
````typescript
````js
import type { BookDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import type { BookDto } from '../../models/book';
@Injectable({
providedIn: 'root',
@ -170,12 +181,11 @@ export class BookService {
constructor(private restService: RestService) {}
}
````
src/app/shared/models/books/**index.ts**: This file contains the modal classes corresponding to the DTOs defined in the server side;
`src/app/proxy/books/models.ts`: This file contains the modal classes corresponding to the DTOs defined in the server side;
````typescript
````js
import type { EntityDto } from '@abp/ng.core';
export interface BookDto extends EntityDto<string> {
@ -184,7 +194,21 @@ export interface BookDto extends EntityDto<string> {
}
````
You can now inject the `BookService` into any Angular component and use the `getList()` method to get the list of books.
> There are a few more files have been generated to help you import the types easier.
#### How to Import
You can now import the `BookService` into any Angular component and use the `getList()` method to get the list of books.
````js
import { BookService, BookDto } from '../proxy/books';
````
You can also use the `@proxy` as a shortcut of the proxy folder:
````js
import { BookService, BookDto } from '@proxy/books';
````
### About the Generated Code
@ -235,27 +259,20 @@ namespace AngularProxyDemo.Books
}
```
Let's re-run the `generate-proxy` command to see the result:
````
abp generate-proxy
````
The output of this command will be like the following:
Let's re-run the `generate-proxy` command:
````bash
UPDATE src/app/shared/services/books/book.service.ts (660 bytes)
UPDATE src/app/shared/models/books/index.ts (217 bytes)
abp generate-proxy
````
It tells us two files have been updated. Let's see the changes;
This command will re-generate the proxies by updating some files. Let's see some of the changes;
**book.service.ts**
````typescript
````js
import type { BookDto, BookUpdateDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import type { BookDto, BookUpdateDto } from '../../models/books';
@Injectable({
providedIn: 'root',
@ -284,7 +301,7 @@ export class BookService {
`update` function has been added to the `BookService` that gets an `id` and a `BookUpdateDto` as the parameters.
**index.ts**
**models.ts**
````typescript
import type { EntityDto } from '@abp/ng.core';
@ -358,14 +375,14 @@ namespace AngularProxyDemo.Orders
}
````
When I run the `abp generate-proxy` command again, I see two new files have been created.
When I run the `abp generate-proxy` command again, I see there are some created and updated files. Let's see some important ones;
src/app/shared/services/orders/**order.service.ts**
`src/app/proxy/orders/order.service.ts`
````typescript
````js
import type { OrderCreateDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
import type { OrderCreateDto } from '../../models/orders';
@Injectable({
providedIn: 'root',
@ -385,16 +402,19 @@ export class OrderService {
}
````
src/app/shared/models/orders/**index.ts**
`src/app/proxy/orders/models.ts`
````typescript
import type { GenericDetailDto } from '../../models/orders';
export interface GenericDetailDto<TCount> {
productId: string;
count: TCount;
}
export interface OrderCreateDto {
customerId: string;
creationTime: string;
details: OrderDetailDto[];
extraProperties: string | object;
extraProperties: Record<string, object>;
}
export interface OrderDetailDto extends GenericDetailDto<number> {
@ -402,4 +422,10 @@ export interface OrderDetailDto extends GenericDetailDto<number> {
}
````
NOTE: 3.1.0-rc2 was generating the code above, which is wrong. It will be fixed in the next RC versions.
## Conclusion
`abp generate-proxy` is a very handy command that creates all the necessary code to consume your ABP based backend HTTP APIs. It generates a clean code that is well aligned to the backend services and benefits from the power of TypeScript (by using generics, inheritance...).
## The Documentation
See [the documentation](https://docs.abp.io/en/abp/latest/UI/Angular/Service-Proxies) for details of the Angular Service Proxy Generation.

BIN
docs/en/Blog-Posts/2020-09-07 Angular-Service-Proxies/abp-generate-proxy-output.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

25
docs/en/CLI.md

@ -32,6 +32,7 @@ Here, the list of all available commands before explaining their details:
* **`add-package`**: Adds an ABP package to a project.
* **`add-module`**: Adds a [multi-package application module](https://docs.abp.io/en/abp/latest/Modules/Index) to a solution.
* **`generate-proxy`**: Generates client side proxies to use HTTP API endpoints.
* **`remove-proxy`**: Removes previously generated client side proxies.
* **`switch-to-preview`**: Switches to the latest preview version of the ABP Framework.
* **`switch-to-nightly`**: Switches to the latest [nightly builds](Nightly-Builds.md) of the ABP related packages on a solution.
* **`switch-to-stable`**: Switches to the latest stable versions of the ABP related packages on a solution.
@ -179,7 +180,7 @@ abp add-module Volo.Blogging
### generate-proxy
Generates Angular service proxies for your HTTP APIs to make easy to consume your services from the client side. Before running `generate-proxy` command, your host must be up and running.
Generates Angular service proxies for your HTTP APIs to make easy to consume your services from the client side. Your host (server) application must be up and running before running this command.
Usage:
@ -190,12 +191,34 @@ abp generate-proxy
#### Options
* `--module` or `-m`: Specifies the name of the backend module you wish to generate proxies for. Default value: `app`.
* `--api-name` or `-a`: The name of the API endpoint defined in the `/src/environments/environment.ts`. Default value: `default`.
* `--source` or `-s`: Specifies the Angular project name to resolve the root namespace & API definition URL from. Default value: `defaultProject`.
* `--target` or `-t`: Specifies the Angular project name to place generated code in. Default value: `defaultProject`.
* `--prompt` or `-p`: Asks the options from the command line prompt (for the unspecified options).
> See the [Angular Service Proxies document](UI/Angular/Service-Proxies.md) for more.
### remove-proxy
Removes previously generated proxy code from the Angular application. Your host (server) application must be up and running before running this command.
This can be especially useful when you generate proxies for multiple modules before and need to remove one of them later.
Usage:
````bash
abp remove-proxy
````
#### Options
* `--module` or `-m`: Specifies the name of the backend module you wish to remove proxies for. Default value: `app`.
* `--api-name` or `-a`: The name of the API endpoint defined in the `/src/environments/environment.ts`. Default value: `default`.
* `--source` or `-s`: Specifies the Angular project name to resolve the root namespace & API definition URL from. Default value: `defaultProject`.
* `--target` or `-t`: Specifies the Angular project name to place generated code in. Default value: `defaultProject`.
* `--prompt` or `-p`: Asks the options from the command line prompt (for the unspecified options).
> See the [Angular Service Proxies document](UI/Angular/Service-Proxies.md) for more.
### switch-to-preview

31
docs/en/Community-Articles/2020-08-07-Passwordless-Authentication/POST.md

@ -2,15 +2,17 @@
## Introduction
To allow a user login with a magic URL, you need to implement a custom token provider. In this tutorial, we will show you how to add a custom token provider to authenticate a user with a link, instead of entering a password.
In this tutorial, we will show you how to add a custom token provider to authenticate a user with a link, instead of entering the password.
This can be useful especially if you want to make someone login to the application with your user, without sharing your secret password. The generated link will be for a single use.
### Source Code
The completed sample is available on [the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication).
The completed sample is available on [GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication).
## Creating the Solution
Before starting to the development, create a new solution named `PasswordlessAuthentication` and run it by following the [getting started tutorial](https://docs.abp.io/en/abp/latest/Getting-Started?UI=MVC&DB=EF&Tiered=No).
Before starting the development, create a new solution named `PasswordlessAuthentication` and run it by following the [getting started tutorial](https://docs.abp.io/en/abp/latest/Getting-Started?UI=MVC&DB=EF&Tiered=No).
## Step-1
@ -155,36 +157,33 @@ Open your **Index.cshtml** and set the content as below. We added a form that po
```html
@page
@inject IHtmlLocalizer<PasswordlessAuthenticationResource> L
@using Microsoft.AspNetCore.Mvc.Localization
@using PasswordlessAuthentication.Localization
@using PasswordlessAuthentication.Web.Menus
@using MyBookStore.Web.Menus
@using Volo.Abp.AspNetCore.Mvc.UI.Layout
@model PasswordlessAuthentication.Web.Pages.IndexModel
@model MyBookStore.Web.Pages.IndexModel
@using Microsoft.AspNetCore.Mvc.Localization
@using MyBookStore.Localization
@inject IHtmlLocalizer<MyBookStoreResource> L
@{
ViewBag.PageTitle = "Home";
}
@inject IPageLayout PageLayout;
@inject IPageLayout PageLayout
@{
PageLayout.Content.Title = L["Home"].Value;
PageLayout.Content.BreadCrumb.Add(L["Menu:Home"].Value);
PageLayout.Content.MenuItemName = PasswordlessAuthenticationMenus.Home;
PageLayout.Content.MenuItemName = MyBookStoreMenus.Home;
}
<abp-card>
<abp-card-body>
<form asp-page-handler="GeneratePasswordlessToken" method="post">
<abp-button button-type="Dark" type="submit">Generate passwordless token link</abp-button>
@if (Model.PasswordlessLoginUrl != null)
{
<abp-card class="mt-3 p-3">
[@Model.PasswordlessLoginUrl](/en/commercial/latest/how-to/@Model.PasswordlessLoginUrl)
<a href="@Model.PasswordlessLoginUrl">@Model.PasswordlessLoginUrl</a>
</abp-card>
}
</form>
</abp-card-body>
</abp-card>
@ -273,4 +272,4 @@ That's all! We created a passwordless login with 7 steps.
## Source Code
The completed sample is available on [the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication).
The completed sample is available on [GitHub repository](https://github.com/abpframework/abp-samples/tree/master/PasswordlessAuthentication).

52
docs/en/Community-Articles/2020-08-31-Adding-User-Navigation-In-Suite/POST.md

@ -1,20 +1,34 @@
# How to add the user entity as a navigation property?
# ABP Suite: How to Add the User Entity as a Navigation Property of Another Entity
In this post, I'll show you how to add the user as a navigation property in your new entity.
## Introduction
To do this, open the ABP Suite. Create a new entity called `Note`.
[ABP Suite](https://commercial.abp.io/tools/suite), a part of the [ABP Commercial](https://commercial.abp.io/), is a productivity tool developed by the team behind the ABP Framework. The main functionality of the ABP Suite is to generate code for you.
In this post, I'll show you how to add the user entity as a navigation property in your new entity, by the help of the ABP Suite.
> In the sample project MVC UI is used, but the same steps are applicable to the Angular UI as well.
## Code Generation
### Create a New Entity
Open the ABP Suite ([see how](https://docs.abp.io/en/commercial/latest/abp-suite/index)). Create a new entity called `Note`, as an example entity.
![create-note-entity](create-note-entity.jpg)
Then add a string property called `Title`.
Then add a string property called `Title`, as an example property.
![add-simple-property](add-simple-property.jpg)
To be able to add a user navigation, we need to create a user DTO to map from entity. To do this, create a new folder called "Users" in `*.Application.Contracts` then add a new class called `AppUserDto` inherited from `IdentityUserDto`.
### Create AppUserDto
ABP Suite needs a DTO for the target entity (user, in this case) in order to define a navigation property.
To do this, create a new folder called "Users" in `*.Application.Contracts` then add a new class called `AppUserDto` inherited from `IdentityUserDto`.
![create-appuserdto](create-appuserdto.jpg)
Create the mapping for `AppUserDto`. To do this, open `YourProjectApplicationAutoMapperProfile.cs` and add the below line:
We should define the [object mapping](https://docs.abp.io/en/abp/latest/Object-To-Object-Mapping) to be able to convert the `AppUser` objects to `AppUserDto` objects. To do this, open `YourProjectApplicationAutoMapperProfile.cs` and add the below line:
```csharp
CreateMap<AppUser, AppUserDto>().Ignore(x => x.ExtraProperties);
@ -22,17 +36,35 @@ CreateMap<AppUser, AppUserDto>().Ignore(x => x.ExtraProperties);
![create-mapping](create-mapping.jpg)
Get back to ABP Suite, go to **Navigation Properties** tab. Click **Add Navigation Property** button. Browse `AppUser.cs` in `*.Domain\Users` folder. Then choose the `Name` item as display property. Browse `AppUserDto.cs` in `*.Contracts\Users` folder. Choose `Users` from Collection Names dropdown.
> Creating such a DTO class may not be needed for another entity than the `AppUser`, since it will probably be already available, especially if you had created the other entity using the ABP Suite.
### Define the Navigation Property
Get back to ABP Suite, open the **Navigation Properties** tab of the ABP Suite, click the **Add Navigation Property** button. Browse `AppUser.cs` in `*.Domain\Users` folder. Then choose the `Name` item as display property. Browse `AppUserDto.cs` in `*.Contracts\Users` folder. Choose `Users` from Collection Names dropdown.
![add-user-navigation](add-user-navigation.jpg)
That's it! Click **Save and generate** button to create your page. You'll see the following page if there's everything goes well.
### Generate the Code!
That's it! Click **Save and generate** button to create your page. You'll see the following page if everything goes well.
![final-page](final-page.jpg)
This is the new page that has been created by the ABP Suite. It can perform the fundamental CRUD operations. Also, it has the "App user" column that shows the related user name (you can easily change the automatically created "App user" title from the **Entity Name** field of the navigation property creation screen).
**Picking Users from Look Up Table**
We used dropdown element to select a user from the user list. If you have a lot of users, then it's good to pick a user from a look up table. A look up table is a modal window that lets you filter data and pick one. To do this, get back to Suite and click **Edit** button of user navigation which is set as `AppUserId` name. Choose "Modal" from the "UI Pick Type" field. Then click **Save and generate** button to recreate your page.
![ui-pick-type-modal](ui-pick-type-modal.jpg)
After successful code generation, you'll see the the user can be picked from user table.
![ui-pick-type-modal2](ui-pick-type-modal2.jpg)
## About the ABP Commercial RC
Note this example is implemented with ABP Commercial 3.1.0-rc.3. This is a RC version. If you want to install the CLI and Suite RC version follow the next steps:
This example has been implemented with **ABP Commercial 3.1.0-rc.3**. This is a RC version. If you want to install the CLI and Suite RC version follow the next steps:
1- Uninstall the current version of the CLI and install the specific RC version:
@ -46,4 +78,4 @@ dotnet tool uninstall --global Volo.Abp.Cli && dotnet tool install --global Volo
dotnet tool uninstall --global Volo.Abp.Suite && dotnet tool install -g Volo.Abp.Suite --version 3.1.0-rc.3 --add-source https://nuget.abp.io/<YOUR-API-KEY>/v3/index.json
```
Don't forget to replace the `<YOUR-API-KEY>` with your own key!
Don't forget to replace the `<YOUR-API-KEY>` with your own key!

BIN
docs/en/Community-Articles/2020-08-31-Adding-User-Navigation-In-Suite/ui-pick-type-modal.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 KiB

BIN
docs/en/Community-Articles/2020-08-31-Adding-User-Navigation-In-Suite/ui-pick-type-modal2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

167
docs/en/Distributed-Event-Bus-Kafka-Integration.md

@ -0,0 +1,167 @@
# Distributed Event Bus Kafka Integration
> This document explains **how to configure the [Kafka](https://kafka.apache.org/)** as the distributed event bus provider. See the [distributed event bus document](Distributed-Event-Bus.md) to learn how to use the distributed event bus system
## Installation
Use the ABP CLI to add [Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka) NuGet package to your project:
* Install the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) if you haven't installed before.
* Open a command line (terminal) in the directory of the `.csproj` file you want to add the `Volo.Abp.EventBus.Kafka` package.
* Run `abp add-package Volo.Abp.EventBus.Kafka` command.
If you want to do it manually, install the [Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka) NuGet package to your project and add `[DependsOn(typeof(AbpEventBusKafkaModule))]` to the [ABP module](Module-Development-Basics.md) class inside your project.
## Configuration
You can configure using the standard [configuration system](Configuration.md), like using the `appsettings.json` file, or using the [options](Options.md) classes.
### `appsettings.json` file configuration
This is the simplest way to configure the Kafka settings. It is also very strong since you can use any other configuration source (like environment variables) that is [supported by the AspNet Core](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/).
**Example: The minimal configuration to connect to a local kafka server with default configurations**
````json
{
"Kafka": {
"Connections": {
"Default": {
"BootstrapServers": "localhost:9092"
}
},
"EventBus": {
"GroupId": "MyGroupId",
"TopicName": "MyTopicName"
}
}
}
````
* `MyGroupId` is the name of this application, which is used as the **GroupId** on the Kakfa.
* `MyTopicName` is the **topic name**.
See [the Kafka document](https://docs.confluent.io/current/clients/confluent-kafka-dotnet/api/Confluent.Kafka.html) to understand these options better.
#### Connections
If you need to connect to another server than the localhost, you need to configure the connection properties.
**Example: Specify the host name (as an IP address)**
````json
{
"Kafka": {
"Connections": {
"Default": {
"BootstrapServers": "123.123.123.123:9092"
}
},
"EventBus": {
"GroupId": "MyGroupId",
"TopicName": "MyTopicName"
}
}
}
````
Defining multiple connections is allowed. In this case, you can specify the connection that is used for the event bus.
**Example: Declare two connections and use one of them for the event bus**
````json
{
"Kafka": {
"Connections": {
"Default": {
"BootstrapServers": "123.123.123.123:9092"
},
"SecondConnection": {
"BootstrapServers": "321.321.321.321:9092"
}
},
"EventBus": {
"GroupId": "MyGroupId",
"TopicName": "MyTopicName",
"ConnectionName": "SecondConnection"
}
}
}
````
This allows you to use multiple RabbitMQ server in your application, but select one of them for the event bus.
You can use any of the [ClientConfig](https://docs.confluent.io/current/clients/confluent-kafka-dotnet/api/Confluent.Kafka.ClientConfig.html) properties as the connection properties.
**Example: Specify the socket timeout**
````json
{
"Kafka": {
"Connections": {
"Default": {
"BootstrapServers": "123.123.123.123:9092",
"SocketTimeoutMs": 60000
}
}
}
}
````
### The Options Classes
`AbpRabbitMqOptions` and `AbpRabbitMqEventBusOptions` classes can be used to configure the connection strings and event bus options for the RabbitMQ.
You can configure this options inside the `ConfigureServices` of your [module](Module-Development-Basics.md).
**Example: Configure the connection**
````csharp
Configure<AbpKafkaOptions>(options =>
{
options.Connections.Default.BootstrapServers = "123.123.123.123:9092";
options.Connections.Default.SaslUsername = "user";
options.Connections.Default.SaslPassword = "pwd";
});
````
**Example: Configure the consumer config**
````csharp
Configure<AbpKafkaOptions>(options =>
{
options.ConfigureConsumer = config =>
{
config.GroupId = "MyGroupId";
config.EnableAutoCommit = false;
};
});
````
**Example: Configure the producer config**
````csharp
Configure<AbpKafkaOptions>(options =>
{
options.ConfigureProducer = config =>
{
config.MessageTimeoutMs = 6000;
config.Acks = Acks.All;
};
});
````
**Example: Configure the topic specification**
````csharp
Configure<AbpKafkaOptions>(options =>
{
options.ConfigureTopic = specification =>
{
specification.ReplicationFactor = 3;
specification.NumPartitions = 3;
};
});
````
Using these options classes can be combined with the `appsettings.json` way. Configuring an option property in the code overrides the value in the configuration file.

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

@ -8,6 +8,7 @@ Distributed event bus system provides an **abstraction** that can be implemented
* `LocalDistributedEventBus` is the default implementation that implements the distributed event bus to work as in-process. Yes! The **default implementation works just like the [local event bus](Local-Event-Bus.md)**, if you don't configure a real distributed provider.
* `RabbitMqDistributedEventBus` implements the distributed event bus with the [RabbitMQ](https://www.rabbitmq.com/). See the [RabbitMQ integration document](Distributed-Event-Bus-RabbitMQ-Integration.md) to learn how to configure it.
* `KafkaDistributedEventBus` implements the distributed event bus with the [RabbitMQ](https://kafka.apache.org/). See the [Kafka integration document](Distributed-Event-Bus-Kafka-Integration.md) to learn how to configure it.
Using a local event bus as default has a few important advantages. The most important one is that: It allows you to write your code compatible to distributed architecture. You can write a monolithic application now that can be split into microservices later. It is a good practice to communicate between bounded contexts (or between application modules) via distributed events instead of local events.

153
docs/en/Tutorials/Part-10.md

@ -376,6 +376,8 @@ namespace Acme.BookStore.Books
public override async Task<BookDto> GetAsync(Guid id)
{
await CheckGetPolicyAsync();
//Prepare a query to join books and authors
var query = from book in Repository
join author in _authorRepository on book.AuthorId equals author.Id
@ -397,6 +399,8 @@ namespace Acme.BookStore.Books
public override async Task<PagedResultDto<BookDto>>
GetListAsync(PagedAndSortedResultRequestDto input)
{
await CheckGetListPolicyAsync();
//Prepare a query to join books and authors
var query = from book in Repository
join author in _authorRepository on book.AuthorId equals author.Id
@ -495,6 +499,8 @@ namespace Acme.BookStore.Books
public override async Task<BookDto> GetAsync(Guid id)
{
await CheckGetPolicyAsync();
var book = await Repository.GetAsync(id);
var bookDto = ObjectMapper.Map<Book, BookDto>(book);
@ -507,6 +513,8 @@ namespace Acme.BookStore.Books
public override async Task<PagedResultDto<BookDto>>
GetListAsync(PagedAndSortedResultRequestDto input)
{
await CheckGetListPolicyAsync();
//Set a default sorting, if not provided
if (input.Sorting.IsNullOrWhiteSpace())
{
@ -915,6 +923,149 @@ You can run the application and try to create a new book or update an existing b
{{else if UI=="NG"}}
***Angular UI is being prepared...***
### The Book List
Book list page change is trivial. Open the `/src/app/book/book.component.html` and add the following column definition between the `Name` and `Type` columns:
````js
<ngx-datatable-column
[name]="'::Author' | abpLocalization"
prop="authorName"
></ngx-datatable-column>
````
When you run the application, you can see the *Author* column on the table:
![bookstore-books-with-authorname-angular](images/bookstore-books-with-authorname-angular.png)
### Create/Edit Forms
The next step is to add an Author selection (dropdown) to the create/edit forms. The final UI will look like the one shown below:
![bookstore-angular-author-selection](images/bookstore-angular-author-selection.png)
Added the Author dropdown as the first element in the form.
Open the `/src/app/book/book.component.ts` and and change the content as shown below:
````js
import { ListService, PagedResultDto } from '@abp/ng.core';
import { Component, OnInit } from '@angular/core';
import { BookService, BookDto, bookTypeOptions, AuthorLookupDto } from '@proxy/books';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap';
import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@Component({
selector: 'app-book',
templateUrl: './book.component.html',
styleUrls: ['./book.component.scss'],
providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }],
})
export class BookComponent implements OnInit {
book = { items: [], totalCount: 0 } as PagedResultDto<BookDto>;
form: FormGroup;
selectedBook = {} as BookDto;
authors$: Observable<AuthorLookupDto[]>;
bookTypes = bookTypeOptions;
isModalOpen = false;
constructor(
public readonly list: ListService,
private bookService: BookService,
private fb: FormBuilder,
private confirmation: ConfirmationService
) {
this.authors$ = bookService.getAuthorLookup().pipe(map((r) => r.items));
}
ngOnInit() {
const bookStreamCreator = (query) => this.bookService.getList(query);
this.list.hookToQuery(bookStreamCreator).subscribe((response) => {
this.book = response;
});
}
createBook() {
this.selectedBook = {} as BookDto;
this.buildForm();
this.isModalOpen = true;
}
editBook(id: string) {
this.bookService.get(id).subscribe((book) => {
this.selectedBook = book;
this.buildForm();
this.isModalOpen = true;
});
}
buildForm() {
this.form = this.fb.group({
authorId: [this.selectedBook.authorId || null, Validators.required],
name: [this.selectedBook.name || null, Validators.required],
type: [this.selectedBook.type || null, Validators.required],
publishDate: [
this.selectedBook.publishDate ? new Date(this.selectedBook.publishDate) : null,
Validators.required,
],
price: [this.selectedBook.price || null, Validators.required],
});
}
save() {
if (this.form.invalid) {
return;
}
const request = this.selectedBook.id
? this.bookService.update(this.selectedBook.id, this.form.value)
: this.bookService.create(this.form.value);
request.subscribe(() => {
this.isModalOpen = false;
this.form.reset();
this.list.get();
});
}
delete(id: string) {
this.confirmation.warn('::AreYouSureToDelete', 'AbpAccount::AreYouSure').subscribe((status) => {
if (status === Confirmation.Status.confirm) {
this.bookService.delete(id).subscribe(() => this.list.get());
}
});
}
}
````
* Added imports for the `AuthorLookupDto`, `Observable` and `map`.
* Added `authors$: Observable<AuthorLookupDto[]>;` field after the `selectedBook`.
* Added `this.authors$ = bookService.getAuthorLookup().pipe(map((r) => r.items));` into the constructor.
* Added ` authorId: [this.selectedBook.authorId || null, Validators.required],` into the `buildForm()` function.
Open the `/src/app/book/book.component.html` and add the following form group just before the book name form group:
````html
<div class="form-group">
<label for="author-id">Author</label><span> * </span>
<select class="form-control" id="author-id" formControlName="authorId">
<option [ngValue]="null">Select author</option>
<option [ngValue]="author.id" *ngFor="let author of authors$ | async">
{%{{{ author.name }}}%}
</option>
</select>
</div>
````
That's all. Just run the application and try to create or edit an author.
{{end}}

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

@ -347,9 +347,9 @@ This is a fully working, server side paged, sorted and localized table of books.
## Install NPM packages
> Notice: This tutorial is based on the ABP Framework v3.0.3+ If your project version is older, then please upgrade your solution. See the [migration guide](../UI/Angular/Migration-Guide-v3.md) if you are upgrading an existing project with v2.x.
> Notice: This tutorial is based on the ABP Framework v3.1.0+ If your project version is older, then please upgrade your solution. See the [migration guide](../UI/Angular/Migration-Guide-v3.md) if you are upgrading an existing project with v2.x.
If you haven't done it before, open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install NPM packages:
If you haven't done it before, open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install the NPM packages:
```bash
yarn
@ -473,9 +473,9 @@ Run the following command in the `angular` folder:
abp generate-proxy
```
The generated files looks like below:
This command will create the following files under the `/src/app/proxy/books` folder:
![Generated files](./images/generated-proxies-2.png)
![Generated files](./images/generated-proxies-3.png)
### BookComponent
@ -484,8 +484,7 @@ Open the `/src/app/book/book.component.ts` file and replace the content as below
```js
import { ListService, PagedResultDto } from '@abp/ng.core';
import { Component, OnInit } from '@angular/core';
import { BookDto } from './models';
import { BookService } from './services';
import { BookService, BookDto } from '@proxy/books';
@Component({
selector: 'app-book',
@ -499,7 +498,7 @@ export class BookComponent implements OnInit {
constructor(public readonly list: ListService, private bookService: BookService) {}
ngOnInit() {
const bookStreamCreator = (query) => this.bookService.getListByInput(query);
const bookStreamCreator = (query) => this.bookService.getList(query);
this.list.hookToQuery(bookStreamCreator).subscribe((response) => {
this.book = response;

58
docs/en/Tutorials/Part-3.md

@ -656,8 +656,7 @@ Open `/src/app/book/book.component.ts` and replace the content as below:
```js
import { ListService, PagedResultDto } from '@abp/ng.core';
import { Component, OnInit } from '@angular/core';
import { BookDto } from './models';
import { BookService } from './services';
import { BookService, BookDto } from '@proxy/books';
@Component({
selector: 'app-book',
@ -673,7 +672,7 @@ export class BookComponent implements OnInit {
constructor(public readonly list: ListService, private bookService: BookService) {}
ngOnInit() {
const bookStreamCreator = (query) => this.bookService.getListByInput(query);
const bookStreamCreator = (query) => this.bookService.getList(query);
this.list.hookToQuery(bookStreamCreator).subscribe((response) => {
this.book = response;
@ -749,8 +748,8 @@ Open `/src/app/book/book.component.ts` and replace the content as below:
```js
import { ListService, PagedResultDto } from '@abp/ng.core';
import { Component, OnInit } from '@angular/core';
import { BookDto, BookType } from './models'; // add BookType
import { BookService } from './services';
// import bookTypeOptions from @proxy/books
import { BookService, BookDto, bookTypeOptions } from '@proxy/books';
import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // add this
@Component({
@ -764,12 +763,8 @@ export class BookComponent implements OnInit {
form: FormGroup; // add this line
bookType = BookType; // add this line
// add bookTypes as a list of BookType enum members
bookTypes = Object.keys(this.bookType).filter(
(key) => typeof this.bookType[key] === 'number'
);
bookTypes = bookTypeOptions;
isModalOpen = false;
@ -780,7 +775,7 @@ export class BookComponent implements OnInit {
) {}
ngOnInit() {
const bookStreamCreator = (query) => this.bookService.getListByInput(query);
const bookStreamCreator = (query) => this.bookService.getList(query);
this.list.hookToQuery(bookStreamCreator).subscribe((response) => {
this.book = response;
@ -808,7 +803,7 @@ export class BookComponent implements OnInit {
return;
}
this.bookService.createByInput(this.form.value).subscribe(() => {
this.bookService.create(this.form.value).subscribe(() => {
this.isModalOpen = false;
this.form.reset();
this.list.get();
@ -819,7 +814,6 @@ export class BookComponent implements OnInit {
* Imported `FormGroup`, `FormBuilder` and `Validators` from `@angular/forms`.
* Added `form: FormGroup` property.
* Added `bookType` property so that you can reach `BookType` enum members from template.
* Added `bookTypes` property as a list of `BookType` enum members. That will be used in form options.
* Injected `FormBuilder` into the constructor. [FormBuilder](https://angular.io/api/forms/FormBuilder) provides convenient methods for generating form controls. It reduces the amount of boilerplate needed to build complex forms.
* Added `buildForm` method to the end of the file and executed the `buildForm()` in the `createBook` method.
@ -844,7 +838,7 @@ Open `/src/app/book/book.component.html` and replace `<ng-template #abpBody> </n
<label for="book-type">Type</label><span> * </span>
<select class="form-control" id="book-type" formControlName="type">
<option [ngValue]="null">Select a book type</option>
<option [ngValue]="bookType[type]" *ngFor="let type of bookTypes"> {%{{{ type }}}%}</option>
<option [ngValue]="type.value" *ngFor="let type of bookTypes"> {%{{{ type.key }}}%}</option>
</select>
</div>
@ -910,8 +904,7 @@ Open `/src/app/book/book.component.ts` and replace the content as below:
```js
import { ListService, PagedResultDto } from '@abp/ng.core';
import { Component, OnInit } from '@angular/core';
import { BookDto, BookType } from './models';
import { BookService } from './services';
import { BookService, BookDto, bookTypeOptions } from '@proxy/books';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
// added this line
@ -931,11 +924,7 @@ export class BookComponent implements OnInit {
form: FormGroup;
bookType = BookType;
bookTypes = Object.keys(this.bookType).filter(
(key) => typeof this.bookType[key] === 'number'
);
bookTypes = bookTypeOptions;
isModalOpen = false;
@ -946,7 +935,7 @@ export class BookComponent implements OnInit {
) {}
ngOnInit() {
const bookStreamCreator = (query) => this.bookService.getListByInput(query);
const bookStreamCreator = (query) => this.bookService.getList(query);
this.list.hookToQuery(bookStreamCreator).subscribe((response) => {
this.book = response;
@ -972,7 +961,7 @@ export class BookComponent implements OnInit {
return;
}
this.bookService.createByInput(this.form.value).subscribe(() => {
this.bookService.create(this.form.value).subscribe(() => {
this.isModalOpen = false;
this.form.reset();
this.list.get();
@ -995,8 +984,7 @@ Open `/src/app/book/book.component.ts` and replace the content as shown below:
```js
import { ListService, PagedResultDto } from '@abp/ng.core';
import { Component, OnInit } from '@angular/core';
import { BookDto, BookType, CreateUpdateBookDto } from './models';
import { BookService } from './services';
import { BookService, BookDto, bookTypeOptions } from '@proxy/books';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap';
@ -1009,15 +997,11 @@ import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap
export class BookComponent implements OnInit {
book = { items: [], totalCount: 0 } as PagedResultDto<BookDto>;
selectedBook = new BookDto(); // declare selectedBook
selectedBook = {} as BookDto; // declare selectedBook
form: FormGroup;
bookType = BookType;
bookTypes = Object.keys(this.bookType).filter(
(key) => typeof this.bookType[key] === 'number'
);
bookTypes = bookTypeOptions;
isModalOpen = false;
@ -1028,7 +1012,7 @@ export class BookComponent implements OnInit {
) {}
ngOnInit() {
const bookStreamCreator = (query) => this.bookService.getListByInput(query);
const bookStreamCreator = (query) => this.bookService.getList(query);
this.list.hookToQuery(bookStreamCreator).subscribe((response) => {
this.book = response;
@ -1036,14 +1020,14 @@ export class BookComponent implements OnInit {
}
createBook() {
this.selectedBook = new BookDto(); // reset the selected book
this.selectedBook = {} as BookDto; // reset the selected book
this.buildForm();
this.isModalOpen = true;
}
// Add editBook method
editBook(id: string) {
this.bookService.getById(id).subscribe((book) => {
this.bookService.get(id).subscribe((book) => {
this.selectedBook = book;
this.buildForm();
this.isModalOpen = true;
@ -1069,8 +1053,8 @@ export class BookComponent implements OnInit {
}
const request = this.selectedBook.id
? this.bookService.updateByIdAndInput(this.form.value, this.selectedBook.id)
: this.bookService.createByInput(this.form.value);
? this.bookService.update(this.selectedBook.id, this.form.value)
: this.bookService.create(this.form.value);
request.subscribe(() => {
this.isModalOpen = false;
@ -1155,7 +1139,7 @@ constructor(
delete(id: string) {
this.confirmation.warn('::AreYouSureToDelete', '::AreYouSure').subscribe((status) => {
if (status === Confirmation.Status.confirm) {
this.bookService.deleteById(id).subscribe(() => this.list.get());
this.bookService.delete(id).subscribe(() => this.list.get());
}
});
}

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

@ -621,7 +621,7 @@ abp generate-proxy
This command generates the service proxy for the author service and the related model (DTO) classes:
![bookstore-angular-service-proxy-author](images/bookstore-angular-service-proxy-author.png)
![bookstore-angular-service-proxy-author](images/bookstore-angular-service-proxy-author-2.png)
### AuthorComponent
@ -630,8 +630,7 @@ Open the `/src/app/author/author.component.ts` file and replace the content as b
```js
import { Component, OnInit } from '@angular/core';
import { ListService, PagedResultDto } from '@abp/ng.core';
import { AuthorDto } from './models';
import { AuthorService } from './services';
import { AuthorService, AuthorDto } from '@proxy/authors';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap';
import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared';
@ -649,7 +648,7 @@ export class AuthorComponent implements OnInit {
form: FormGroup;
selectedAuthor = new AuthorDto();
selectedAuthor = {} as AuthorDto;
constructor(
public readonly list: ListService,
@ -659,7 +658,7 @@ export class AuthorComponent implements OnInit {
) {}
ngOnInit(): void {
const authorStreamCreator = (query) => this.authorService.getListByInput(query);
const authorStreamCreator = (query) => this.authorService.getList(query);
this.list.hookToQuery(authorStreamCreator).subscribe((response) => {
this.author = response;
@ -667,13 +666,13 @@ export class AuthorComponent implements OnInit {
}
createAuthor() {
this.selectedAuthor = new AuthorDto();
this.selectedAuthor = {} as AuthorDto;
this.buildForm();
this.isModalOpen = true;
}
editAuthor(id: string) {
this.authorService.getById(id).subscribe((author) => {
this.authorService.get(id).subscribe((author) => {
this.selectedAuthor = author;
this.buildForm();
this.isModalOpen = true;
@ -697,14 +696,14 @@ export class AuthorComponent implements OnInit {
if (this.selectedAuthor.id) {
this.authorService
.updateByIdAndInput(this.form.value, this.selectedAuthor.id)
.update(this.selectedAuthor.id, this.form.value)
.subscribe(() => {
this.isModalOpen = false;
this.form.reset();
this.list.get();
});
} else {
this.authorService.createByInput(this.form.value).subscribe(() => {
this.authorService.create(this.form.value).subscribe(() => {
this.isModalOpen = false;
this.form.reset();
this.list.get();
@ -716,7 +715,7 @@ export class AuthorComponent implements OnInit {
this.confirmation.warn('::AreYouSureToDelete', '::AreYouSure')
.subscribe((status) => {
if (status === Confirmation.Status.confirm) {
this.authorService.deleteById(id).subscribe(() => this.list.get());
this.authorService.delete(id).subscribe(() => this.list.get());
}
});
}

BIN
docs/en/Tutorials/images/bookstore-angular-author-selection.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
docs/en/Tutorials/images/bookstore-angular-service-proxy-author-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
docs/en/Tutorials/images/bookstore-books-with-authorname-angular.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
docs/en/Tutorials/images/generated-proxies-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

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

@ -1,6 +1,6 @@
# Environment
Every application needs some ** environment ** variables. In Angular world, this is usually managed by `environment.ts`, `environment.prod.ts` and so on. It is the same for ABP as well.
Every application needs some **environment** variables. In Angular world, this is usually managed by `environment.ts`, `environment.prod.ts` and so on. It is the same for ABP as well.
Current `Environment` configuration holds sub config classes as follows:

2
docs/en/UI/Angular/Service-Proxies.md

@ -1,5 +1,7 @@
## Service Proxies
> THIS DOCUMENT IS OUTDATED. IT IS BEING UPDATED. MEANWHILE, YOU CAN [SEE THIS ARTICLE](https://github.com/abpframework/abp/blob/dev/docs/en/Blog-Posts/2020-09-07%20Angular-Service-Proxies/POST.md) TO LEARN HOW TO USE THE ABP ANGULAR SERVICE PROXIES.
It is common to call a REST endpoint in the server from our Angular applications. In this case, we generally create **services** (those have methods for each service method on the server side) and **model objects** (matches to [DTOs](../../Data-Transfer-Objects) in the server side).
In addition to manually creating such server-interacting services, we could use tools like [NSWAG](https://github.com/RicoSuter/NSwag) to generate service proxies for us. But NSWAG has the following problems we've experienced:

41
docs/en/Upgrading.md

@ -0,0 +1,41 @@
# Upgrading the ABP Framework
This document explains how to upgrade your existing solution when a new ABP Framework version is published.
## ABP UPDATE Command
ABP Framework & module ecosystem consist of hundreds of NuGet and NPM packages. It would be tedious to manually update all these packages to upgrade your application.
[ABP CLI](CLI.md) 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 terminal while you are in the root folder of your solution.
> If your solution has the Angular UI, you probably have `aspnet-core` and `angular` folders in the solution. Run this command in the parent folder of these two folders.
## The Blog Posts
Sometimes we introduce new features/changes that requires to make changes in the startup template. We already implement the changes in the startup template for new applications. However, in some cases you need to manually make some minor changes in your solution.
Whenever you upgrade your solution, it is strongly suggested to check the [ABP BLOG](https://blog.abp.io/?_ga=2.177248992.411298747.1597771169-1910388957.1594128976) to learn the new features and changes coming with the new version. We regularly publish posts and write these kind of changes. If the changes are not trivial, we also provide migration guides.
## Semantic Versioning & Breaking Changes
We are working hard to keep the semantic versioning rules, so you don't get breaking changes for minor (feature) versions like 3.1, 3.2, 3.3...
However, there are some cases we may introduce breaking changes in feature versions too;
* ABP has many integration packages and sometimes the integrated libraries/frameworks releases major versions and makes breaking changes. In such cases, we carefully check these changes and decide to upgrade the integration package or not. If the impact of the change is relatively small, we update the integration package and explain the change in the release blog post. In such a case, if you've used this integration package, you should follow the instructions explained in the blog post. If the change may break many applications and not easy to fix, we decide to wait this upgrade until the next major ABP Framework release.
* Sometimes we have to make breaking change to fix a major bug or usage problem. In this case, we think that developer already can't properly use that feature, so no problem to fix it with a breaking change. In such cases, the feature will generally be a rarely used feature. Again, we try to keep the impact minimum.
## Preview Releases & Nightly Builds
Preview releases and nightly builds can help you to try new features and adapt your solution earlier than a new stable release.
* [Preview releases](Previews.md) are typically published ~2 weeks before a minor (feature) version (our minor version development cycle is about ~4 weeks).
* [Nightly builds](Nightly-Builds.md) are published in every night (except weekends) from the development branch. That means you can try the previous day's development.
Refer to the their documents to learn details about these kind of releases.

8
docs/en/docs-nav.json

@ -198,6 +198,10 @@
{
"text": "RabbitMQ Integration",
"path": "Distributed-Event-Bus-RabbitMQ-Integration.md"
},
{
"text": "Kafka Integration",
"path": "Distributed-Event-Bus-Kafka-Integration.md"
}
]
}
@ -680,6 +684,10 @@
"text": "Road Map",
"path": "Road-Map.md"
},
{
"text": "Upgrading",
"path": "Upgrading.md"
},
{
"text": "Contribution Guide",
"path": "Contribution/Index.md"

163
docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md

@ -0,0 +1,163 @@
# 分布式事件总线Kafka集成
> 本文解释了**如何配置[Kafka](https://kafka.apache.org/)**做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统.
## 安装
使用ABP CLI添加[Volo.Abp.EventBus.Kafka[Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka)NuGet包到你的项目:
* 安装[ABP CLI](https://docs.abp.io/en/abp/latest/CLI),如果你还没有安装.
* 在你想要安装 `Volo.Abp.EventBus.Kafka` 包的 `.csproj` 文件目录打开命令行(终端).
* 运行 `abp add-package Volo.Abp.EventBus.Kafka` 命令.
如果你想要手动安装,安装[Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka) NuGet 包到你的项目然后添加 `[DependsOn(typeof(AbpEventBusKafkaModule))]` 到你的项目[模块](Module-Development-Basics.md)类.
## 配置
可以使用配置使用标准的[配置系统](Configuration.md),如 `appsettings.json` 文件,或[选项](Options.md)类.
### `appsettings.json` 文件配置
这是配置Kafka设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持的](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量).
**示例:最小化配置与默认配置连接到本地的Kafka服务器**
````json
{
"Kafka": {
"EventBus": {
"GroupId": "MyGroupId",
"TopicName": "MyTopicName"
}
}
}
````
* `MyGroupId` 是应用程序的名称,用于Kafka的**GroupId**.
* `MyTopicName` 是**topic名称**.
参阅[Kafka文档](https://docs.confluent.io/current/clients/confluent-kafka-dotnet/api/Confluent.Kafka.html)更好的了解这些选项.
#### 连接
如果需要连接到本地主机以外的另一台服务器,需要配置连接属性.
**示例: 指定主机名 (如IP地址)**
````json
{
"Kafka": {
"Connections": {
"Default": {
"BootstrapServers": "123.123.123.123:9092"
}
},
"EventBus": {
"GroupId": "MyGroupId",
"TopicName": "MyTopicName"
}
}
}
````
允许定义多个连接. 在这种情况下,你可以指定用于事件总线的连接.
**示例: 声明两个连接并将其中一个用于事件总线**
````json
{
"Kafka": {
"Connections": {
"Default": {
"BootstrapServers": "123.123.123.123:9092"
},
"SecondConnection": {
"BootstrapServers": "321.321.321.321:9092"
}
},
"EventBus": {
"GroupId": "MyGroupId",
"TopicName": "MyTopicName",
"ConnectionName": "SecondConnection"
}
}
}
````
这允许你可以在你的应用程序使用多个Kafka服务器,但将其中一个做为事件总线.
你可以使用任何[ClientConfig](https://docs.confluent.io/current/clients/confluent-kafka-dotnet/api/Confluent.Kafka.ClientConfig.html)属性作为连接属性.
**示例: 指定socket超时时间**
````json
{
"Kafka": {
"Connections": {
"Default": {
"BootstrapServers": "123.123.123.123:9092",
"SocketTimeoutMs": 60000
}
}
}
}
````
### 选项类
`AbpKafkaOptions` 和 `AbpKafkaEventBusOptions` 类用于配置Kafka的连接字符串和事件总线选项.
你可以在你的[模块](Module-Development-Basics.md)的 `ConfigureServices` 方法配置选项.
**示例: 配置连接**
````csharp
Configure<AbpKafkaOptions>(options =>
{
options.Connections.Default.BootstrapServers = "123.123.123.123:9092";
options.Connections.Default.SaslUsername = "user";
options.Connections.Default.SaslPassword = "pwd";
});
````
**示例: 配置 consumer config**
````csharp
Configure<AbpKafkaOptions>(options =>
{
options.ConfigureConsumer = config =>
{
config.GroupId = "MyGroupId";
config.EnableAutoCommit = false;
};
});
````
**示例: 配置 producer config**
````csharp
Configure<AbpKafkaOptions>(options =>
{
options.ConfigureProducer = config =>
{
config.MessageTimeoutMs = 6000;
config.Acks = Acks.All;
};
});
````
**示例: 配置 topic specification**
````csharp
Configure<AbpKafkaOptions>(options =>
{
options.ConfigureTopic = specification =>
{
specification.ReplicationFactor = 3;
specification.NumPartitions = 3;
};
});
````
使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值.

1
docs/zh-Hans/Distributed-Event-Bus.md

@ -8,6 +8,7 @@
* `LocalDistributedEventBus` 是默认实现,实现作为进程内工作的分布式事件总线. 是的!如果没有配置真正的分布式提供程序,**默认实现的工作方式与[本地事件总线](Local-Event-Bus.md)一样**.
* `RabbitMqDistributedEventBus` 通过[RabbitMQ](https://www.rabbitmq.com/)实现分布式事件总线. 请参阅[RabbitMQ集成文档](Distributed-Event-Bus-RabbitMQ-Integration.md)了解如何配置它.
* `KafkaDistributedEventBus` 通过[Kafka](https://kafka.apache.org/)实现分布式事件总线. 请参阅[Kafka集成文档](Distributed-Event-Bus-Kafka-Integration.md)了解如何配置它.
使用本地事件总线作为默认具有一些重要的优点. 最重要的是:它允许你编写与分布式体系结构兼容的代码. 您现在可以编写一个整体应用程序,以后可以拆分成微服务. 最好通过分布式事件而不是本地事件在边界上下文之间(或在应用程序模块之间)进行通信.

4
docs/zh-Hans/docs-nav.json

@ -180,6 +180,10 @@
{
"text": "RabbitMQ 集成",
"path": "Distributed-Event-Bus-RabbitMQ-Integration.md"
},
{
"text": "Kafka 集成",
"path": "Distributed-Event-Bus-Kafka-Integration.md"
}
]
}

9
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DataAnnotations/AbpValidationAttributeAdapterProvider.cs

@ -27,8 +27,13 @@ namespace Volo.Abp.AspNetCore.Mvc.DataAnnotations
{
return new DynamicMaxLengthAttributeAdapter((DynamicMaxLengthAttribute) attribute, stringLocalizer);
}
if (type == typeof(DynamicRangeAttribute))
{
return new DynamicRangeAttributeAdapter((DynamicRangeAttribute) attribute, stringLocalizer);
}
return _defaultAdapter.GetAttributeAdapter(attribute, stringLocalizer);
}
}
}
}

46
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/DataAnnotations/DynamicRangeAttributeAdapter.cs

@ -0,0 +1,46 @@
using System;
using System.Globalization;
using Microsoft.AspNetCore.Mvc.DataAnnotations;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.Extensions.Localization;
using Volo.Abp.Validation;
namespace Volo.Abp.AspNetCore.Mvc.DataAnnotations
{
public class DynamicRangeAttributeAdapter : AttributeAdapterBase<DynamicRangeAttribute>
{
private readonly string _max;
private readonly string _min;
public DynamicRangeAttributeAdapter(
DynamicRangeAttribute attribute,
IStringLocalizer stringLocalizer)
: base(attribute, stringLocalizer)
{
_min = Convert.ToString(Attribute.Minimum,CultureInfo.InvariantCulture);
_max = Convert.ToString(Attribute.Maximum,CultureInfo.InvariantCulture);
}
public override void AddValidation(ClientModelValidationContext context)
{
Check.NotNull(context, nameof(context));
MergeAttribute(context.Attributes, "data-val", "true");
MergeAttribute(context.Attributes, "data-val-range", GetErrorMessage(context));
MergeAttribute(context.Attributes, "data-val-range-min", _min);
MergeAttribute(context.Attributes, "data-val-range-max", _max);
}
public override string GetErrorMessage(ModelValidationContextBase validationContext)
{
Check.NotNull(validationContext, nameof(validationContext));
return GetErrorMessage(
validationContext.ModelMetadata,
validationContext.ModelMetadata.GetDisplayName(),
Attribute.Minimum,
Attribute.Maximum
);
}
}
}

4
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs

@ -20,6 +20,7 @@ namespace Volo.Abp.Cli
Configure<AbpCliOptions>(options =>
{
//TODO: Define constants like done for GenerateProxyCommand.Name.
options.Commands["help"] = typeof(HelpCommand);
options.Commands["new"] = typeof(NewCommand);
options.Commands["get-source"] = typeof(GetSourceCommand);
@ -28,7 +29,8 @@ namespace Volo.Abp.Cli
options.Commands["add-module"] = typeof(AddModuleCommand);
options.Commands["login"] = typeof(LoginCommand);
options.Commands["logout"] = typeof(LogoutCommand);
options.Commands["generate-proxy"] = typeof(GenerateProxyCommand);
options.Commands[GenerateProxyCommand.Name] = typeof(GenerateProxyCommand);
options.Commands[RemoveProxyCommand.Name] = typeof(RemoveProxyCommand);
options.Commands["suite"] = typeof(SuiteCommand);
options.Commands["switch-to-preview"] = typeof(SwitchToPreviewCommand);
options.Commands["switch-to-stable"] = typeof(SwitchToStableCommand);

137
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs

@ -1,140 +1,11 @@
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.Commands
{
public class GenerateProxyCommand : IConsoleCommand, ITransientDependency
public class GenerateProxyCommand : ProxyCommandBase
{
public Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
CheckAngularJsonFile();
CheckNgSchematics();
var prompt = commandLineArgs.Options.ContainsKey("p") || commandLineArgs.Options.ContainsKey("prompt");
var defaultValue = prompt ? null : "__default";
var module = commandLineArgs.Options.GetOrNull(Options.Module.Short, Options.Module.Long) ?? defaultValue;
var source = commandLineArgs.Options.GetOrNull(Options.Source.Short, Options.Source.Long) ?? defaultValue;
var target = commandLineArgs.Options.GetOrNull(Options.Target.Short, Options.Target.Long) ?? defaultValue;
var commandBuilder = new StringBuilder("npx ng g @abp/ng.schematics:proxy");
if (module != null)
{
commandBuilder.Append($" --module {module}");
}
if (source != null)
{
commandBuilder.Append($" --source {source}");
}
if (target != null)
{
commandBuilder.Append($" --target {target}");
}
CmdHelper.RunCmd(commandBuilder.ToString());
return Task.CompletedTask;
}
private void CheckNgSchematics()
{
var packageJsonPath = $"package.json";
if (!File.Exists(packageJsonPath))
{
throw new CliUsageException(
"package.json file not found" +
Environment.NewLine +
GetUsageInfo()
);
}
var schematicsPackageNode =
(string) JObject.Parse(File.ReadAllText(packageJsonPath))["devDependencies"]?["@abp/ng.schematics"];
if (schematicsPackageNode == null)
{
throw new CliUsageException(
"\"@abp/ng.schematics\" NPM package should be installed to the devDependencies before running this command!" +
Environment.NewLine +
GetUsageInfo()
);
}
}
private void CheckAngularJsonFile()
{
var angularPath = $"angular.json";
if (!File.Exists(angularPath))
{
throw new CliUsageException(
"angular.json file not found. You must run this command in the angular folder." +
Environment.NewLine + Environment.NewLine +
GetUsageInfo()
);
}
}
public string GetUsageInfo()
{
var sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("Usage:");
sb.AppendLine("");
sb.AppendLine(" abp generate-proxy");
sb.AppendLine("");
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("-s|--source <source-name> (default: 'defaultProject') Angular project name to resolve the root namespace & API definition URL from.");
sb.AppendLine("-t|--target <target-name> (default: 'defaultProject') Angular project name to place generated code in.");
sb.AppendLine("-p|--prompt Asks the options from the command line prompt (for the missing options)");
sb.AppendLine("");
sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI");
return sb.ToString();
}
public string GetShortDescription()
{
return "Generates Angular service proxies and DTOs to consume HTTP APIs.";
}
public static class Options
{
public static class Module
{
public const string Short = "m";
public const string Long = "module";
}
public static class Source
{
public const string Short = "s";
public const string Long = "source";
}
public const string Name = "generate-proxy";
public static class Target
{
public const string Short = "t";
public const string Long = "target";
}
protected override string CommandName => Name;
public static class Prompt
{
public const string Short = "p";
public const string Long = "prompt";
}
}
protected override string SchematicsCommandName => "proxy-add";
}
}

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

@ -0,0 +1,157 @@
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.Commands
{
public abstract class ProxyCommandBase : IConsoleCommand, ITransientDependency
{
protected abstract string CommandName { get; }
protected abstract string SchematicsCommandName { get; }
public Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
CheckAngularJsonFile();
CheckNgSchematics();
var prompt = commandLineArgs.Options.ContainsKey("p") || commandLineArgs.Options.ContainsKey("prompt");
var defaultValue = prompt ? null : "__default";
var module = commandLineArgs.Options.GetOrNull(Options.Module.Short, Options.Module.Long) ?? defaultValue;
var apiName = commandLineArgs.Options.GetOrNull(Options.ApiName.Short, Options.ApiName.Long) ?? defaultValue;
var source = commandLineArgs.Options.GetOrNull(Options.Source.Short, Options.Source.Long) ?? defaultValue;
var target = commandLineArgs.Options.GetOrNull(Options.Target.Short, Options.Target.Long) ?? defaultValue;
var commandBuilder = new StringBuilder("npx ng g @abp/ng.schematics:" + SchematicsCommandName);
if (module != null)
{
commandBuilder.Append($" --module {module}");
}
if (apiName != null)
{
commandBuilder.Append($" --api-name {apiName}");
}
if (source != null)
{
commandBuilder.Append($" --source {source}");
}
if (target != null)
{
commandBuilder.Append($" --target {target}");
}
CmdHelper.RunCmd(commandBuilder.ToString());
return Task.CompletedTask;
}
private void CheckNgSchematics()
{
var packageJsonPath = $"package.json";
if (!File.Exists(packageJsonPath))
{
throw new CliUsageException(
"package.json file not found" +
Environment.NewLine +
GetUsageInfo()
);
}
var schematicsPackageNode =
(string) JObject.Parse(File.ReadAllText(packageJsonPath))["devDependencies"]?["@abp/ng.schematics"];
if (schematicsPackageNode == null)
{
throw new CliUsageException(
"\"@abp/ng.schematics\" NPM package should be installed to the devDependencies before running this command!" +
Environment.NewLine +
GetUsageInfo()
);
}
}
private void CheckAngularJsonFile()
{
var angularPath = $"angular.json";
if (!File.Exists(angularPath))
{
throw new CliUsageException(
"angular.json file not found. You must run this command in the angular folder." +
Environment.NewLine + Environment.NewLine +
GetUsageInfo()
);
}
}
public string GetUsageInfo()
{
var sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("Usage:");
sb.AppendLine("");
sb.AppendLine($" abp {CommandName}");
sb.AppendLine("");
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("-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("-t|--target <target-name> (default: 'defaultProject') Angular project name to place generated code in.");
sb.AppendLine("-p|--prompt Asks the options from the command line prompt (for the missing options)");
sb.AppendLine("");
sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI");
return sb.ToString();
}
public string GetShortDescription()
{
return "Generates Angular service proxies and DTOs to consume HTTP APIs.";
}
public static class Options
{
public static class Module
{
public const string Short = "m";
public const string Long = "module";
}
public static class ApiName
{
public const string Short = "a";
public const string Long = "api-name";
}
public static class Source
{
public const string Short = "s";
public const string Long = "source";
}
public static class Target
{
public const string Short = "t";
public const string Long = "target";
}
public static class Prompt
{
public const string Short = "p";
public const string Long = "prompt";
}
}
}
}

11
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs

@ -0,0 +1,11 @@
namespace Volo.Abp.Cli.Commands
{
public class RemoveProxyCommand : ProxyCommandBase
{
public const string Name = "remove-proxy";
protected override string CommandName => Name;
protected override string SchematicsCommandName => "proxy-remove";
}
}

87
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs

@ -1,10 +1,13 @@
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using NuGet.Versioning;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands.Services;
using Volo.Abp.Cli.NuGet;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
@ -13,12 +16,14 @@ namespace Volo.Abp.Cli.Commands
public class SuiteCommand : IConsoleCommand, ITransientDependency
{
private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService;
private readonly NuGetService _nuGetService;
private const string SuitePackageName = "Volo.Abp.Suite";
public ILogger<SuiteCommand> Logger { get; set; }
public SuiteCommand(AbpNuGetIndexUrlService nuGetIndexUrlService)
public SuiteCommand(AbpNuGetIndexUrlService nuGetIndexUrlService, NuGetService nuGetService)
{
_nuGetIndexUrlService = nuGetIndexUrlService;
_nuGetService = nuGetService;
Logger = NullLogger<SuiteCommand>.Instance;
}
@ -26,21 +31,22 @@ namespace Volo.Abp.Cli.Commands
{
var operationType = NamespaceHelper.NormalizeNamespace(commandLineArgs.Target);
var preview = commandLineArgs.Options.ContainsKey(Options.Preview.Long);
switch (operationType)
{
case "":
case null:
await InstallSuiteIfNotInstalledAsync();
RunSuite();
break;
case "install":
Logger.LogInformation("Installing ABP Suite...");
await InstallSuiteAsync();
await InstallSuiteAsync(preview);
break;
case "update":
Logger.LogInformation("Updating ABP Suite...");
await UpdateSuiteAsync();
await UpdateSuiteAsync(preview);
break;
case "remove":
@ -50,8 +56,34 @@ namespace Volo.Abp.Cli.Commands
}
}
private async Task InstallSuiteAsync()
private async Task InstallSuiteIfNotInstalledAsync()
{
var currentSuiteVersionAsString = GetCurrentSuiteVersion();
if (string.IsNullOrEmpty(currentSuiteVersionAsString))
{
await InstallSuiteAsync();
}
}
private string GetCurrentSuiteVersion()
{
var dotnetToolList = CmdHelper.RunCmdAndGetOutput("dotnet tool list -g");
var suiteLine = dotnetToolList.Split(Environment.NewLine).FirstOrDefault(l => l.ToLower().StartsWith("volo.abp.suite "));
if (string.IsNullOrEmpty(suiteLine))
{
return null;
}
return suiteLine.Split(" ", StringSplitOptions.RemoveEmptyEntries)[1];
}
private async Task InstallSuiteAsync(bool preview = false)
{
Logger.LogInformation("Installing ABP Suite...");
var nugetIndexUrl = await _nuGetIndexUrlService.GetAsync();
if (nugetIndexUrl == null)
@ -61,7 +93,9 @@ namespace Volo.Abp.Cli.Commands
try
{
var result = CmdHelper.RunCmd("dotnet tool install " + SuitePackageName + " --add-source " + nugetIndexUrl + " -g");
var versionOption = await GetVersionOption(preview);
var result = CmdHelper.RunCmd($"dotnet tool install {SuitePackageName} {versionOption} --add-source {nugetIndexUrl} -g");
if (result == 0)
{
@ -86,8 +120,10 @@ namespace Volo.Abp.Cli.Commands
Logger.LogInformation("dotnet tool install -g Volo.Abp.Suite");
}
private async Task UpdateSuiteAsync()
private async Task UpdateSuiteAsync(bool preview = false)
{
Logger.LogInformation("Updating ABP Suite...");
var nugetIndexUrl = await _nuGetIndexUrlService.GetAsync();
if (nugetIndexUrl == null)
@ -97,7 +133,9 @@ namespace Volo.Abp.Cli.Commands
try
{
var result = CmdHelper.RunCmd("dotnet tool update " + SuitePackageName + " --add-source " + nugetIndexUrl + " -g");
var versionOption = await GetVersionOption(preview);
var result = CmdHelper.RunCmd($"dotnet tool update {SuitePackageName} {versionOption} --add-source {nugetIndexUrl} -g");
if (result != 0)
{
@ -111,6 +149,25 @@ namespace Volo.Abp.Cli.Commands
}
}
private async Task<string> GetVersionOption(bool preview)
{
if (preview)
{
var latestVersion = await GetLatestSuiteVersioAsync(true);
if (latestVersion.IsPrerelease)
{
return $"--version {latestVersion.ToString()}";
}
}
return "";
}
private async Task<SemanticVersion> GetLatestSuiteVersioAsync(bool preview)
{
return await _nuGetService.GetLatestVersionOrNullAsync(SuitePackageName, includeReleaseCandidates: preview);
}
private void ShowSuiteManualUpdateCommand()
{
Logger.LogError("You can also run the following command to update ABP Suite.");
@ -160,7 +217,9 @@ namespace Volo.Abp.Cli.Commands
sb.AppendLine("");
sb.AppendLine(" abp suite");
sb.AppendLine(" abp suite install");
sb.AppendLine(" abp suite install --preview");
sb.AppendLine(" abp suite update");
sb.AppendLine(" abp suite update --preview");
sb.AppendLine(" abp suite remove");
sb.AppendLine("");
@ -171,5 +230,13 @@ namespace Volo.Abp.Cli.Commands
{
return "Install, update, remove or start ABP Suite. See https://commercial.abp.io/tools/suite.";
}
public static class Options
{
public static class Preview
{
public const string Long = "preview";
}
}
}
}
}

64
framework/src/Volo.Abp.Core/Volo/Abp/Validation/DynamicRangeAttribute.cs

@ -0,0 +1,64 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
using System.Reflection;
using JetBrains.Annotations;
namespace Volo.Abp.Validation
{
public class DynamicRangeAttribute : RangeAttribute
{
private static readonly FieldInfo MaximumField;
private static readonly FieldInfo MinimumField;
static DynamicRangeAttribute()
{
MaximumField = typeof(RangeAttribute).GetField(
"<Maximum>k__BackingField",
BindingFlags.Instance | BindingFlags.NonPublic
);
Debug.Assert(MaximumField != null, nameof(MaximumField) + " != null");
MinimumField = typeof(RangeAttribute).GetField(
"<Minimum>k__BackingField",
BindingFlags.Instance | BindingFlags.NonPublic
);
Debug.Assert(MinimumField != null, nameof(MinimumField) + " != null");
}
/// <param name="sourceType">A type to get the values of the properties</param>
/// <param name="operandType">The type of the range parameters. Must implement IComparable. <see cref="RangeAttribute.OperandType"/></param>
/// <param name="minimumPropertyName">The name of the public static property for the <see cref="RangeAttribute.Minimum"/></param>
/// <param name="maximumPropertyName">The name of the public static property for the <see cref="RangeAttribute.Maximum"/></param>
public DynamicRangeAttribute(
[NotNull] Type sourceType,
[NotNull] Type operandType,
[CanBeNull] string minimumPropertyName,
[CanBeNull] string maximumPropertyName
)
: base(operandType, string.Empty, string.Empty)
{
Check.NotNull(sourceType, nameof(sourceType));
if (minimumPropertyName != null)
{
var minimumProperty = sourceType.GetProperty(
minimumPropertyName,
BindingFlags.Static | BindingFlags.Public
);
Debug.Assert(minimumProperty != null, nameof(minimumProperty) + " != null");
MinimumField.SetValue(this, minimumProperty.GetValue(null));
}
if (maximumPropertyName != null)
{
var maximumProperty = sourceType.GetProperty(
maximumPropertyName,
BindingFlags.Static | BindingFlags.Public
);
Debug.Assert(maximumProperty != null, nameof(maximumProperty) + " != null");
MaximumField.SetValue(this, maximumProperty.GetValue(null));
}
}
}
}

36
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController.cs

@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
@ -32,7 +33,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation
{
return Content("ModelState.IsValid: " + ModelState.IsValid.ToString().ToLowerInvariant());
}
[HttpGet]
[Route("object-result-action-dynamic-length")]
public Task<string> ObjectResultActionDynamicLength(ValidationDynamicTestModel model)
@ -47,7 +48,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation
[StringLength(5, MinimumLength = 2)]
public string Value1 { get; set; }
}
public class ValidationDynamicTestModel
{
[DynamicStringLength(typeof(Consts), nameof(Consts.MaxValue1Length), nameof(Consts.MinValue1Length))]
@ -55,18 +56,41 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation
[DynamicMaxLength(typeof(Consts), nameof(Consts.MaxValue2Length))]
public string Value2 { get; set; }
[DynamicMaxLength(typeof(Consts), nameof(Consts.MaxValue3Length))]
public int[] Value3 { get; set; }
[DynamicRange(typeof(Consts), typeof(int), nameof(Consts.MinValue1), nameof(Consts.MaxValue1))]
public int Value4 { get; set; }
[DynamicRange(typeof(Consts), typeof(double), nameof(Consts.MinValue2), nameof(Consts.MaxValue2))]
public double Value5 { get; set; }
[DynamicRange(typeof(Consts), typeof(DateTime), nameof(Consts.MinValue3), nameof(Consts.MaxValue3))]
public DateTime Value6 { get; set; }
public static class Consts
{
public static int MinValue1Length { get; set; } = 2;
public static int MaxValue1Length { get; set; } = 7;
public static int MaxValue2Length { get; set; } = 4;
public static int MaxValue3Length { get; set; } = 2;
public static int MinValue1 { get; set; } = 1;
public static int MaxValue1 { get; set; } = 5;
public static double MinValue2 { get; set; } = 1.2;
public static double MaxValue2 { get; set; } = 7.2;
public static string MinValue3 { get; set; } = "1/2/2004";
public static string MaxValue3 { get; set; } = "3/4/2004";
}
}
@ -83,4 +107,4 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation
}
}
}
}
}

19
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Validation/ValidationTestController_Tests.cs

@ -61,9 +61,9 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation
[Fact]
public async Task Should_Validate_Dynamic_Length_Object_Result_Success()
{
var result = await GetResponseAsStringAsync("/api/validation-test/object-result-action-dynamic-length?value1=hello&value3[0]=53&value3[1]=54");
var result = await GetResponseAsStringAsync("/api/validation-test/object-result-action-dynamic-length?value1=hello&value3[0]=53&value3[1]=54&value4=4&value5=1.5&value6=2004-02-04");
result.ShouldBe("hello");
}
[Fact]
@ -71,15 +71,24 @@ namespace Volo.Abp.AspNetCore.Mvc.Validation
{
var result = await GetResponseAsObjectAsync<RemoteServiceErrorResponse>("/api/validation-test/object-result-action-dynamic-length?value1=a", HttpStatusCode.BadRequest); //value1 has min string length of 2 chars.
result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0);
result = await GetResponseAsObjectAsync<RemoteServiceErrorResponse>("/api/validation-test/object-result-action-dynamic-length?value1=12345678", HttpStatusCode.BadRequest); //value1 has max string length of 7 chars.
result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0);
result = await GetResponseAsObjectAsync<RemoteServiceErrorResponse>("/api/validation-test/object-result-action-dynamic-length?value1=123458&value2=12345", HttpStatusCode.BadRequest); //value2 has max length of 5 chars.
result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0);
result = await GetResponseAsObjectAsync<RemoteServiceErrorResponse>("/api/validation-test/object-result-action-dynamic-length?value1=123458&value3[0]=53&value3[1]=54&value3[2]=55&value3[3]=56", HttpStatusCode.BadRequest); //value3 has max length of 2.
result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0);
result = await GetResponseAsObjectAsync<RemoteServiceErrorResponse>("/api/validation-test/object-result-action-dynamic-length?value1=123458&value3[0]=53&value3[1]=54&value[4]=10", HttpStatusCode.BadRequest); //value4 has max num of 5.
result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0);
result = await GetResponseAsObjectAsync<RemoteServiceErrorResponse>("/api/validation-test/object-result-action-dynamic-length?value1=123458&value3[0]=53&value3[1]=54&value4=2&value5=1.1", HttpStatusCode.BadRequest); //value4 has min num of 1.2.
result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0);
result = await GetResponseAsObjectAsync<RemoteServiceErrorResponse>("/api/validation-test/object-result-action-dynamic-length?value1=123458&value3[0]=53&value3[1]=54&value4=2&value5=1.2&value6=2004-05-04", HttpStatusCode.BadRequest); //value4 has max date of 3/4/2004.
result.Error.ValidationErrors.Length.ShouldBeGreaterThan(0);
}
}
}

2
framework/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": "^3.1.0-rc.3",
"@abp/aspnetcore.mvc.ui.theme.shared": "^3.1.0",
"highlight.js": "^9.13.1"
},
"devDependencies": {}

46
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/luxon/abp.luxon.js

@ -0,0 +1,46 @@
var abp = abp || {};
(function () {
if (!luxon) {
throw "abp/luxon library requires the luxon library included to the page!";
}
/* TIMING *************************************************/
abp.timing = abp.timing || {};
var setObjectValue = function (obj, property, value) {
if (typeof property === "string") {
property = property.split('.');
}
if (property.length > 1) {
var p = property.shift();
setObjectValue(obj[p], property, value);
} else {
obj[property[0]] = value;
}
}
var getObjectValue = function (obj, property) {
return property.split('.').reduce((a, v) => a[v], obj)
}
abp.timing.convertFieldsToIsoDate = function (form, fields) {
for (var field of fields) {
var dateTime = luxon.DateTime
.fromFormat(
getObjectValue(form, field),
abp.localization.currentCulture.dateTimeFormat.shortDatePattern,
{locale: abp.localization.currentCulture.cultureName}
);
if (!dateTime.invalid) {
setObjectValue(form, field, dateTime.toFormat("yyyy-MM-dd HH:mm:ss"))
}
}
return form;
}
})(jQuery);

2
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/utils/abp-utils.umd.js.map

File diff suppressed because one or more lines are too long

2
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map

File diff suppressed because one or more lines are too long

222
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock

@ -2,30 +2,30 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.shared@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0-rc.3.tgz#54a92d673f5158ee222d0d95ebfbca6c63b20a4f"
integrity sha512-czS+8+wuNxuNIogI3FI/T72dCumpbsXp9Fke9pwQEzkCZZCG11cJdOCr1pLJKT1G54x+zfgwVVFIL36sFcq50A==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0-rc.3"
"@abp/bootstrap" "~3.1.0-rc.3"
"@abp/bootstrap-datepicker" "~3.1.0-rc.3"
"@abp/datatables.net-bs4" "~3.1.0-rc.3"
"@abp/font-awesome" "~3.1.0-rc.3"
"@abp/jquery-form" "~3.1.0-rc.3"
"@abp/jquery-validation-unobtrusive" "~3.1.0-rc.3"
"@abp/lodash" "~3.1.0-rc.3"
"@abp/luxon" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/select2" "~3.1.0-rc.3"
"@abp/sweetalert" "~3.1.0-rc.3"
"@abp/timeago" "~3.1.0-rc.3"
"@abp/toastr" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0-rc.3.tgz#e26f8ff9d7beaedf2050b9d6319e6368c990c373"
integrity sha512-qglA2lW0eQFzZlGeAev+vGuWsHNFmDeSCGAHPhd4Z07zjnphPnIOXSa+rXhb+4y6DevQP7OY/KSMQdX6ZMU3RQ==
"@abp/aspnetcore.mvc.ui.theme.shared@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0.tgz#9a9cc4a2c2bdfada9c69e35e15cc5491f1256712"
integrity sha512-DnLebcBACGTlCyJ05CRP3KXCGqWw1X3aXsdDnqQlohrLGwZHxDMZfS8HswhclG2Ak44MQn/4VtuUqRAs1PKlLg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0"
"@abp/bootstrap" "~3.1.0"
"@abp/bootstrap-datepicker" "~3.1.0"
"@abp/datatables.net-bs4" "~3.1.0"
"@abp/font-awesome" "~3.1.0"
"@abp/jquery-form" "~3.1.0"
"@abp/jquery-validation-unobtrusive" "~3.1.0"
"@abp/lodash" "~3.1.0"
"@abp/luxon" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/select2" "~3.1.0"
"@abp/sweetalert" "~3.1.0"
"@abp/timeago" "~3.1.0"
"@abp/toastr" "~3.1.0"
"@abp/aspnetcore.mvc.ui@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0.tgz#4a80efec4d1c41d266af919068dfbb6f6324fa7f"
integrity sha512-y6kVikbuCJlQbAvMdA/j2DwxLX0Fv8rRhjmmfr/ocEDrMridt1a5rO5JqDab8WvJKJjDudoobf1mSk9ZNxtyvQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -34,144 +34,144 @@
path "^0.12.7"
rimraf "^3.0.2"
"@abp/bootstrap-datepicker@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0-rc.3.tgz#279d9603cd916a884bac125cb525ee44fb809762"
integrity sha512-qZolOk2Pw+IvXh6Ko7wJddzMVPbS8silGecBZMYe0DVRNovg0515Px8zR3GJ16wcVQuvG6ByBn4fdeKFmYfokQ==
"@abp/bootstrap-datepicker@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0.tgz#47198667eafa4a920dd72f38a22452bdeadf0edd"
integrity sha512-yBmEuiorGNa5LSvjXfVGJ/CLlW/fGwij07I+gbGnwY0gVp4ydfA15LJfuCdfHBo2ZIDFXe7hQuVYFEH1gbLpkA==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0-rc.3.tgz#a1368df757995f52c19dd76ef1846d19a067def6"
integrity sha512-r8XRTYJBEa33FVxF+Mg0ALYNhmTjVBw1NQIQY8Ub5ZR+HIZoaDqA0X5zfAKvGQlmfXLiZJDkvCV5EIQWsIgnrA==
"@abp/bootstrap@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0.tgz#7bd7b81a67712154fa12d01b6051e71f316be048"
integrity sha512-I64cCBo0OS14A29y/dEhKBPeXPt1djNoxZo4OXhHZAAmOM3fP3t8y9nDNCr3L2r6/FT8RQH7AW0/jJjER94KvA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0-rc.3.tgz#7e1bd9ac9aaecfc66863e8e319975358885a3ca2"
integrity sha512-wIvm4l8ZDQ+eiNN1a+v07EjUhngrxwPWvfDf9bPQpepfnIKiAktJziihh0oBJAbqXNqmI7f6FGN76spvNop/EA==
"@abp/core@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0.tgz#13ce01a68f0e2e9ab976f30d7bf892a9037af4f7"
integrity sha512-hLN0W5/0PuyIBIGxmLQvnbec0eBlXB1vS7YqrmiMv0WPgnHXx36FXfUUuX74JHTfTQFMGWL3EOrzm6UBe2+0VA==
dependencies:
"@abp/utils" "^3.1.0-rc.3"
"@abp/utils" "^3.1.0"
"@abp/datatables.net-bs4@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0-rc.3.tgz#f46c4474635918c16ca7edbe4930c07317930592"
integrity sha512-FeN53p5U2hIyYyM3G3AuGSwBZFBGbx4yHb/ymW/DEGtJ6XtynHlsFPz00/PktLe0OKOjUxOUf2LQLqKJi83WQQ==
"@abp/datatables.net-bs4@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0.tgz#c8033ffff1a360c6cb98f8871ecec5d8f94c3ef6"
integrity sha512-3xx3Er8i8IJ/mYEYl+MxGyY+sZo965f0MCoIAGPV7dNuULfiNYPhvym+4LXzocRZUlF4qrXxXPLo3njiCQNAUQ==
dependencies:
"@abp/datatables.net" "~3.1.0-rc.3"
"@abp/datatables.net" "~3.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0-rc.3.tgz#c3a8f81d5ee571445b01d2db0e05ed555b1459b8"
integrity sha512-sOWuVwvSoQlXqC9CC9HGH6HzdHb5vVX8CbqzIUYBJEzY4NBRUqeclFJQrA/thjMNtefdLD2AiVwPFmAdGBeDSg==
"@abp/datatables.net@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0.tgz#db4fe94cf4216a59a3121d0d38b57092d7524f2a"
integrity sha512-9av6Dk1qEMAahjZCEn3hAP9mNCvr8HBcYBEqhGMACCk+rLjAJgzKKzV80cvlerg1VGoBTdQ0NgN22ywsWqDyOg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0-rc.3.tgz#38f63ad4fadc4986a73116fa29d5ef56812c483c"
integrity sha512-BnrI9XaKxEvI0d6Fa9tbw1J/VAsVUqTyAHva4WTUUa+neB9gaK62ZUjgDdF8Eo6gj7UOO8DYvsXehzpVpZKlPQ==
"@abp/font-awesome@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0.tgz#00792619894b8d0f15801df641ee57eda1d7cdba"
integrity sha512-fRd8QtVmfBiEoQpYgvVoNUcoyje3mtGqfIVtzeH2wnwEWKEO8SFfMcuWetyY2pk06VgpRnKNHGumyHnaNTCiUQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0-rc.3.tgz#7b74828f32a641c0b1ef1fd8b0389bf994a09e16"
integrity sha512-G+YRnDRZe5Mw81NAEnnr8scGjupndcu9xZ1dw+hCFGg30yypiUIfHtrMR4iR94y7M198fAgQP+0k7RvDqnALiw==
"@abp/jquery-form@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0.tgz#d095dea5200a13714dddd4ff1067126a01944440"
integrity sha512-Bs1BJ1coJMC8kFme9SffIicUSx7ULGzvdHfatzEbL6oH7KCSU/smBRTdAuZ/l85Qfftd0C6R9ibXehgKlagQKw==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0-rc.3.tgz#aef83e8f11791ae7be449eab6655a73075f98b45"
integrity sha512-uWu6qdZasSZEFJC1IhEtj8NZq5kXX8W/zlK2tVpFhjxE/QYiJlPj8pVy2I7cuEIBghzAO2omwI+5En8TSagrGA==
"@abp/jquery-validation-unobtrusive@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0.tgz#c4a6e99f8cadc437b83574fbb2437beaccb23241"
integrity sha512-WpZPnfx0MR9E1c7TB9M/hU4AkToTaPsLg+P7HfCihB6g7SVrjdLxP4w90lIejro3raK2BjU4726FHqgFQSygTA==
dependencies:
"@abp/jquery-validation" "~3.1.0-rc.3"
"@abp/jquery-validation" "~3.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0-rc.3.tgz#40dcb28ce5a3a87fc69972053e48a456c84e3225"
integrity sha512-uaL+ZS/NTf103Hq3ehayFT1qvq/Y2T5PAFY9ijBvX+7phCtPwGiIPfUvyuwYnKbdTa15odC275e7pY2CssHWIA==
"@abp/jquery-validation@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0.tgz#ace497b864df008385a2fcabf6ef7e014a663a1d"
integrity sha512-kq36uSs54SVTYcGsy/CQZlIW98mfmhfNOHsnxn/W4U1prMSZdH7yegCEfHlHN2ERtubD6UEWHxx5D1JUyDsmvg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0-rc.3.tgz#8c35b9e7de888516e2acc5227092ca2fed991475"
integrity sha512-DT2uBNfW3+Xc1Bz62WHdIC3JfAb2Qcc4p86LyDG5pNRAd3FpImA1VnRPsMRX9Mig7HYRjMYiuYXTeovM6YS0fg==
"@abp/jquery@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0.tgz#e110148d13478ea86de8cff092164d7bd7a9ef63"
integrity sha512-8QzEMTHW0HNYrQbC11w28DxD3jGdaWlrGvAExmitBYIv9i1BYg/6M4bcKOVJPhiQoR50aCe+6xInFhNgfRNBCw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
jquery "~3.5.1"
"@abp/lodash@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0-rc.3.tgz#a312975824fa3bebc00f5eca35cededc5ec3af4b"
integrity sha512-siv5cMWlUHEX2RtvKCGoX2cEh4h1hniluKlFgmVmYY4hdGYdAG4T2d9QQAbPODwdzrJ8jzI36hXT/P4IrzhWZw==
"@abp/lodash@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0.tgz#a4175342b4fc14a92b8344ea783554c40e4e450c"
integrity sha512-RVclkRFjrjPtNVaAPJVPJJmI9QFbc2vZfwG+utDV4aZzytZOgESN8q8IbOGaCIj8KzvX1LeBSqvDRP81l9c5Tg==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
lodash "^4.17.15"
"@abp/luxon@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0-rc.3.tgz#9b9d5c9827a0c661458094134cafd80f35537a69"
integrity sha512-cKj/irXJhTJ6WiSyjzcZcsDjKFji1Q/0nV7IYhY9e2wzpg3qEB8Z8k8fDLPDAUriUKxBoI6mQ/CVC0ah7eg/LA==
"@abp/luxon@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0.tgz#867f4395315b0727b39f9b5a5f4dc9bca7cfafde"
integrity sha512-Pf+g5yGCqKDEhGMM/V75zX/8pPJUoIv7xJdF9sLRTERr5NpsS8/23DZIn2KmzbNLThHDkAmayBxHZko4Ri1ykw==
dependencies:
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0-rc.3.tgz#218eb620532af8bdde6a46388a3d5349974fab44"
integrity sha512-z3IzgSYtpZ2FlWNmM2A1wbP3CHB3P5a8k/JR0JSWwtl+D/LiYC348VQIXen+pIJoEjMlY48iSi5XNyBIz4X9hw==
"@abp/malihu-custom-scrollbar-plugin@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0.tgz#eab16ac9cddfbe9982baf946a468718dee34589e"
integrity sha512-/6TXbzyUh8qSMwZss1tTWkAeAnrAvSHeJRF32iVCYx769+6HJ4QZt1BWyT6/jgAdEHZspePh1+xAsrPRDZJ5aA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0-rc.3.tgz#493afc27f29da1c9926ee02e8f7b641e8ee4b67e"
integrity sha512-fym9GmQbl34CyTCVzfo4jGe77nSeDuRPYMzAYO8p0uKdDB8t9jNZNqhYJ9Ee5KQXJyg4lmFFPkLcRZF14E+cWw==
"@abp/select2@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0.tgz#459386918f15c591549e7c5b1d411536f781c2a0"
integrity sha512-I0dOXi9oPdzWQVZ5s4Lo4q6tTezQuqXSzZClmnJaQzkf7pCftnji+S727bkUIjwjkFAsT/YNMBCzgJBaiHS3uQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0-rc.3.tgz#1c1421e2baaa57cc24e0f9334a5173836819cc24"
integrity sha512-WrYRutXM2f6VRECEkWhjfqtQXlnEw88MCkYicAhyMH7ZYYWg7r9xVg9TRJJI4UwGMLSyR3EB+ZdTmnD8aSC0yQ==
"@abp/sweetalert@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0.tgz#498df5abb8f68b660cd37f10e287188b6417c3ff"
integrity sha512-9YxVZQfrsGWdVmKeWAG4CoD+B0VObR94SsQQgUiYcl/07PPDxDPZHX/sh1H+pqHXv9/qpPOTS3/PCQAeIfuG/w==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0-rc.3.tgz#0a7a369ba29633f00b19206b257c6f1f59f182a4"
integrity sha512-FDgaQCJmwWplCcdJYa9kyCcMxJFrKf+zDEFzT5hWfhMzq+sYJYX7QDQtbF5OJnMSWuPyI0/RU0bocuGaJ584VQ==
"@abp/timeago@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0.tgz#abae5287e01d36107516416256a1ccfcb0ca7953"
integrity sha512-xVOq5/5l/0w9vmWIF7dZzqa+7nl7NNG7ER8gbrdPOX86rCsD12DIOkFDLi+Q41kxzp7wbphDZIT/7RsPrhgDDQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
timeago "^1.6.7"
"@abp/toastr@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0-rc.3.tgz#89af6aa864a9aac76bc9bf21b7f9bc6763ca7573"
integrity sha512-AeKH5imy8W9yMAlzRv9VdkRHApySpR2BKfrQYk3q9LubgwaxLvOFc/l38aIEKuyosN7dHTMFBQlEwLxWFwaoPA==
"@abp/toastr@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0.tgz#cebbb95c1f0b36306a0a58215dfda48a3ebe5f20"
integrity sha512-94PqZmbayVJnDKMrqbVhW0Z3D/sL3sV5gXfd53Ac5KNQvsBmQZ5/SvuuwuDzWYMQm0XwZ1h4fLAiTuoBMIxWCQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
toastr "^2.1.4"
"@abp/utils@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a"
integrity sha512-45KXx5zlxm5gK2EFwzM+hMjT8q8pD3PejyNfVP6HBbGE2N36LGKYtI59s6vFm5yV2qFxQyVPrk4mi3Y+neqlBw==
"@abp/utils@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0.tgz#ccbfed6591ab11466bf3fed740c8422acf6a84df"
integrity sha512-I5yjM1ovqcpBAT2LFOfwLibVE0Ql6XbP3tQj6YMEZ/foDXekn/4P6Spgq5DTZCMo+0jskS0D8NfL7Ce4p89buw==
dependencies:
just-compare "^1.3.0"

2
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json

@ -3,7 +3,7 @@
"name": "asp.net",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "^3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.basic": "^3.1.0"
},
"devDependencies": {}
}

2
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/libs/abp/utils/abp-utils.umd.js.map

File diff suppressed because one or more lines are too long

2
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map

File diff suppressed because one or more lines are too long

236
framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0-rc.3.tgz#d7e3ad928a72efb7c76a585ef051fce860efb7bf"
integrity sha512-cc2Wp/6hr1j89Ap/474HlH54WhAIgCya1buuXxrxXSMdYqDKNxK61aMYC/mnYGMiyPqoz6TWWUJB2h2dZeTgzQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0-rc.3.tgz#54a92d673f5158ee222d0d95ebfbca6c63b20a4f"
integrity sha512-czS+8+wuNxuNIogI3FI/T72dCumpbsXp9Fke9pwQEzkCZZCG11cJdOCr1pLJKT1G54x+zfgwVVFIL36sFcq50A==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0-rc.3"
"@abp/bootstrap" "~3.1.0-rc.3"
"@abp/bootstrap-datepicker" "~3.1.0-rc.3"
"@abp/datatables.net-bs4" "~3.1.0-rc.3"
"@abp/font-awesome" "~3.1.0-rc.3"
"@abp/jquery-form" "~3.1.0-rc.3"
"@abp/jquery-validation-unobtrusive" "~3.1.0-rc.3"
"@abp/lodash" "~3.1.0-rc.3"
"@abp/luxon" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/select2" "~3.1.0-rc.3"
"@abp/sweetalert" "~3.1.0-rc.3"
"@abp/timeago" "~3.1.0-rc.3"
"@abp/toastr" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0-rc.3.tgz#e26f8ff9d7beaedf2050b9d6319e6368c990c373"
integrity sha512-qglA2lW0eQFzZlGeAev+vGuWsHNFmDeSCGAHPhd4Z07zjnphPnIOXSa+rXhb+4y6DevQP7OY/KSMQdX6ZMU3RQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0.tgz#5f1f308621cced2f0a4272fe612f485558bcab07"
integrity sha512-zaRw34HwEESbYPYPsn0wH4lE4o9PuwJzovS1T2vmRg8wDgeOSkxC7uFU5If1QcFHuADkI3jfsyk8Xe9nEqz2Jg==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0.tgz#9a9cc4a2c2bdfada9c69e35e15cc5491f1256712"
integrity sha512-DnLebcBACGTlCyJ05CRP3KXCGqWw1X3aXsdDnqQlohrLGwZHxDMZfS8HswhclG2Ak44MQn/4VtuUqRAs1PKlLg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0"
"@abp/bootstrap" "~3.1.0"
"@abp/bootstrap-datepicker" "~3.1.0"
"@abp/datatables.net-bs4" "~3.1.0"
"@abp/font-awesome" "~3.1.0"
"@abp/jquery-form" "~3.1.0"
"@abp/jquery-validation-unobtrusive" "~3.1.0"
"@abp/lodash" "~3.1.0"
"@abp/luxon" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/select2" "~3.1.0"
"@abp/sweetalert" "~3.1.0"
"@abp/timeago" "~3.1.0"
"@abp/toastr" "~3.1.0"
"@abp/aspnetcore.mvc.ui@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0.tgz#4a80efec4d1c41d266af919068dfbb6f6324fa7f"
integrity sha512-y6kVikbuCJlQbAvMdA/j2DwxLX0Fv8rRhjmmfr/ocEDrMridt1a5rO5JqDab8WvJKJjDudoobf1mSk9ZNxtyvQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,144 +41,144 @@
path "^0.12.7"
rimraf "^3.0.2"
"@abp/bootstrap-datepicker@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0-rc.3.tgz#279d9603cd916a884bac125cb525ee44fb809762"
integrity sha512-qZolOk2Pw+IvXh6Ko7wJddzMVPbS8silGecBZMYe0DVRNovg0515Px8zR3GJ16wcVQuvG6ByBn4fdeKFmYfokQ==
"@abp/bootstrap-datepicker@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0.tgz#47198667eafa4a920dd72f38a22452bdeadf0edd"
integrity sha512-yBmEuiorGNa5LSvjXfVGJ/CLlW/fGwij07I+gbGnwY0gVp4ydfA15LJfuCdfHBo2ZIDFXe7hQuVYFEH1gbLpkA==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0-rc.3.tgz#a1368df757995f52c19dd76ef1846d19a067def6"
integrity sha512-r8XRTYJBEa33FVxF+Mg0ALYNhmTjVBw1NQIQY8Ub5ZR+HIZoaDqA0X5zfAKvGQlmfXLiZJDkvCV5EIQWsIgnrA==
"@abp/bootstrap@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0.tgz#7bd7b81a67712154fa12d01b6051e71f316be048"
integrity sha512-I64cCBo0OS14A29y/dEhKBPeXPt1djNoxZo4OXhHZAAmOM3fP3t8y9nDNCr3L2r6/FT8RQH7AW0/jJjER94KvA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0-rc.3.tgz#7e1bd9ac9aaecfc66863e8e319975358885a3ca2"
integrity sha512-wIvm4l8ZDQ+eiNN1a+v07EjUhngrxwPWvfDf9bPQpepfnIKiAktJziihh0oBJAbqXNqmI7f6FGN76spvNop/EA==
"@abp/core@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0.tgz#13ce01a68f0e2e9ab976f30d7bf892a9037af4f7"
integrity sha512-hLN0W5/0PuyIBIGxmLQvnbec0eBlXB1vS7YqrmiMv0WPgnHXx36FXfUUuX74JHTfTQFMGWL3EOrzm6UBe2+0VA==
dependencies:
"@abp/utils" "^3.1.0-rc.3"
"@abp/utils" "^3.1.0"
"@abp/datatables.net-bs4@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0-rc.3.tgz#f46c4474635918c16ca7edbe4930c07317930592"
integrity sha512-FeN53p5U2hIyYyM3G3AuGSwBZFBGbx4yHb/ymW/DEGtJ6XtynHlsFPz00/PktLe0OKOjUxOUf2LQLqKJi83WQQ==
"@abp/datatables.net-bs4@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0.tgz#c8033ffff1a360c6cb98f8871ecec5d8f94c3ef6"
integrity sha512-3xx3Er8i8IJ/mYEYl+MxGyY+sZo965f0MCoIAGPV7dNuULfiNYPhvym+4LXzocRZUlF4qrXxXPLo3njiCQNAUQ==
dependencies:
"@abp/datatables.net" "~3.1.0-rc.3"
"@abp/datatables.net" "~3.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0-rc.3.tgz#c3a8f81d5ee571445b01d2db0e05ed555b1459b8"
integrity sha512-sOWuVwvSoQlXqC9CC9HGH6HzdHb5vVX8CbqzIUYBJEzY4NBRUqeclFJQrA/thjMNtefdLD2AiVwPFmAdGBeDSg==
"@abp/datatables.net@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0.tgz#db4fe94cf4216a59a3121d0d38b57092d7524f2a"
integrity sha512-9av6Dk1qEMAahjZCEn3hAP9mNCvr8HBcYBEqhGMACCk+rLjAJgzKKzV80cvlerg1VGoBTdQ0NgN22ywsWqDyOg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0-rc.3.tgz#38f63ad4fadc4986a73116fa29d5ef56812c483c"
integrity sha512-BnrI9XaKxEvI0d6Fa9tbw1J/VAsVUqTyAHva4WTUUa+neB9gaK62ZUjgDdF8Eo6gj7UOO8DYvsXehzpVpZKlPQ==
"@abp/font-awesome@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0.tgz#00792619894b8d0f15801df641ee57eda1d7cdba"
integrity sha512-fRd8QtVmfBiEoQpYgvVoNUcoyje3mtGqfIVtzeH2wnwEWKEO8SFfMcuWetyY2pk06VgpRnKNHGumyHnaNTCiUQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0-rc.3.tgz#7b74828f32a641c0b1ef1fd8b0389bf994a09e16"
integrity sha512-G+YRnDRZe5Mw81NAEnnr8scGjupndcu9xZ1dw+hCFGg30yypiUIfHtrMR4iR94y7M198fAgQP+0k7RvDqnALiw==
"@abp/jquery-form@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0.tgz#d095dea5200a13714dddd4ff1067126a01944440"
integrity sha512-Bs1BJ1coJMC8kFme9SffIicUSx7ULGzvdHfatzEbL6oH7KCSU/smBRTdAuZ/l85Qfftd0C6R9ibXehgKlagQKw==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0-rc.3.tgz#aef83e8f11791ae7be449eab6655a73075f98b45"
integrity sha512-uWu6qdZasSZEFJC1IhEtj8NZq5kXX8W/zlK2tVpFhjxE/QYiJlPj8pVy2I7cuEIBghzAO2omwI+5En8TSagrGA==
"@abp/jquery-validation-unobtrusive@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0.tgz#c4a6e99f8cadc437b83574fbb2437beaccb23241"
integrity sha512-WpZPnfx0MR9E1c7TB9M/hU4AkToTaPsLg+P7HfCihB6g7SVrjdLxP4w90lIejro3raK2BjU4726FHqgFQSygTA==
dependencies:
"@abp/jquery-validation" "~3.1.0-rc.3"
"@abp/jquery-validation" "~3.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0-rc.3.tgz#40dcb28ce5a3a87fc69972053e48a456c84e3225"
integrity sha512-uaL+ZS/NTf103Hq3ehayFT1qvq/Y2T5PAFY9ijBvX+7phCtPwGiIPfUvyuwYnKbdTa15odC275e7pY2CssHWIA==
"@abp/jquery-validation@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0.tgz#ace497b864df008385a2fcabf6ef7e014a663a1d"
integrity sha512-kq36uSs54SVTYcGsy/CQZlIW98mfmhfNOHsnxn/W4U1prMSZdH7yegCEfHlHN2ERtubD6UEWHxx5D1JUyDsmvg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0-rc.3.tgz#8c35b9e7de888516e2acc5227092ca2fed991475"
integrity sha512-DT2uBNfW3+Xc1Bz62WHdIC3JfAb2Qcc4p86LyDG5pNRAd3FpImA1VnRPsMRX9Mig7HYRjMYiuYXTeovM6YS0fg==
"@abp/jquery@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0.tgz#e110148d13478ea86de8cff092164d7bd7a9ef63"
integrity sha512-8QzEMTHW0HNYrQbC11w28DxD3jGdaWlrGvAExmitBYIv9i1BYg/6M4bcKOVJPhiQoR50aCe+6xInFhNgfRNBCw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
jquery "~3.5.1"
"@abp/lodash@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0-rc.3.tgz#a312975824fa3bebc00f5eca35cededc5ec3af4b"
integrity sha512-siv5cMWlUHEX2RtvKCGoX2cEh4h1hniluKlFgmVmYY4hdGYdAG4T2d9QQAbPODwdzrJ8jzI36hXT/P4IrzhWZw==
"@abp/lodash@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0.tgz#a4175342b4fc14a92b8344ea783554c40e4e450c"
integrity sha512-RVclkRFjrjPtNVaAPJVPJJmI9QFbc2vZfwG+utDV4aZzytZOgESN8q8IbOGaCIj8KzvX1LeBSqvDRP81l9c5Tg==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
lodash "^4.17.15"
"@abp/luxon@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0-rc.3.tgz#9b9d5c9827a0c661458094134cafd80f35537a69"
integrity sha512-cKj/irXJhTJ6WiSyjzcZcsDjKFji1Q/0nV7IYhY9e2wzpg3qEB8Z8k8fDLPDAUriUKxBoI6mQ/CVC0ah7eg/LA==
"@abp/luxon@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0.tgz#867f4395315b0727b39f9b5a5f4dc9bca7cfafde"
integrity sha512-Pf+g5yGCqKDEhGMM/V75zX/8pPJUoIv7xJdF9sLRTERr5NpsS8/23DZIn2KmzbNLThHDkAmayBxHZko4Ri1ykw==
dependencies:
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0-rc.3.tgz#218eb620532af8bdde6a46388a3d5349974fab44"
integrity sha512-z3IzgSYtpZ2FlWNmM2A1wbP3CHB3P5a8k/JR0JSWwtl+D/LiYC348VQIXen+pIJoEjMlY48iSi5XNyBIz4X9hw==
"@abp/malihu-custom-scrollbar-plugin@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0.tgz#eab16ac9cddfbe9982baf946a468718dee34589e"
integrity sha512-/6TXbzyUh8qSMwZss1tTWkAeAnrAvSHeJRF32iVCYx769+6HJ4QZt1BWyT6/jgAdEHZspePh1+xAsrPRDZJ5aA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0-rc.3.tgz#493afc27f29da1c9926ee02e8f7b641e8ee4b67e"
integrity sha512-fym9GmQbl34CyTCVzfo4jGe77nSeDuRPYMzAYO8p0uKdDB8t9jNZNqhYJ9Ee5KQXJyg4lmFFPkLcRZF14E+cWw==
"@abp/select2@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0.tgz#459386918f15c591549e7c5b1d411536f781c2a0"
integrity sha512-I0dOXi9oPdzWQVZ5s4Lo4q6tTezQuqXSzZClmnJaQzkf7pCftnji+S727bkUIjwjkFAsT/YNMBCzgJBaiHS3uQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0-rc.3.tgz#1c1421e2baaa57cc24e0f9334a5173836819cc24"
integrity sha512-WrYRutXM2f6VRECEkWhjfqtQXlnEw88MCkYicAhyMH7ZYYWg7r9xVg9TRJJI4UwGMLSyR3EB+ZdTmnD8aSC0yQ==
"@abp/sweetalert@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0.tgz#498df5abb8f68b660cd37f10e287188b6417c3ff"
integrity sha512-9YxVZQfrsGWdVmKeWAG4CoD+B0VObR94SsQQgUiYcl/07PPDxDPZHX/sh1H+pqHXv9/qpPOTS3/PCQAeIfuG/w==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0-rc.3.tgz#0a7a369ba29633f00b19206b257c6f1f59f182a4"
integrity sha512-FDgaQCJmwWplCcdJYa9kyCcMxJFrKf+zDEFzT5hWfhMzq+sYJYX7QDQtbF5OJnMSWuPyI0/RU0bocuGaJ584VQ==
"@abp/timeago@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0.tgz#abae5287e01d36107516416256a1ccfcb0ca7953"
integrity sha512-xVOq5/5l/0w9vmWIF7dZzqa+7nl7NNG7ER8gbrdPOX86rCsD12DIOkFDLi+Q41kxzp7wbphDZIT/7RsPrhgDDQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
timeago "^1.6.7"
"@abp/toastr@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0-rc.3.tgz#89af6aa864a9aac76bc9bf21b7f9bc6763ca7573"
integrity sha512-AeKH5imy8W9yMAlzRv9VdkRHApySpR2BKfrQYk3q9LubgwaxLvOFc/l38aIEKuyosN7dHTMFBQlEwLxWFwaoPA==
"@abp/toastr@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0.tgz#cebbb95c1f0b36306a0a58215dfda48a3ebe5f20"
integrity sha512-94PqZmbayVJnDKMrqbVhW0Z3D/sL3sV5gXfd53Ac5KNQvsBmQZ5/SvuuwuDzWYMQm0XwZ1h4fLAiTuoBMIxWCQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
toastr "^2.1.4"
"@abp/utils@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a"
integrity sha512-45KXx5zlxm5gK2EFwzM+hMjT8q8pD3PejyNfVP6HBbGE2N36LGKYtI59s6vFm5yV2qFxQyVPrk4mi3Y+neqlBw==
"@abp/utils@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0.tgz#ccbfed6591ab11466bf3fed740c8422acf6a84df"
integrity sha512-I5yjM1ovqcpBAT2LFOfwLibVE0Ql6XbP3tQj6YMEZ/foDXekn/4P6Spgq5DTZCMo+0jskS0D8NfL7Ce4p89buw==
dependencies:
just-compare "^1.3.0"

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

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

2
modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/utils/abp-utils.umd.js.map

File diff suppressed because one or more lines are too long

2
modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map

File diff suppressed because one or more lines are too long

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

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0-rc.3.tgz#d7e3ad928a72efb7c76a585ef051fce860efb7bf"
integrity sha512-cc2Wp/6hr1j89Ap/474HlH54WhAIgCya1buuXxrxXSMdYqDKNxK61aMYC/mnYGMiyPqoz6TWWUJB2h2dZeTgzQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0-rc.3.tgz#54a92d673f5158ee222d0d95ebfbca6c63b20a4f"
integrity sha512-czS+8+wuNxuNIogI3FI/T72dCumpbsXp9Fke9pwQEzkCZZCG11cJdOCr1pLJKT1G54x+zfgwVVFIL36sFcq50A==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0-rc.3"
"@abp/bootstrap" "~3.1.0-rc.3"
"@abp/bootstrap-datepicker" "~3.1.0-rc.3"
"@abp/datatables.net-bs4" "~3.1.0-rc.3"
"@abp/font-awesome" "~3.1.0-rc.3"
"@abp/jquery-form" "~3.1.0-rc.3"
"@abp/jquery-validation-unobtrusive" "~3.1.0-rc.3"
"@abp/lodash" "~3.1.0-rc.3"
"@abp/luxon" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/select2" "~3.1.0-rc.3"
"@abp/sweetalert" "~3.1.0-rc.3"
"@abp/timeago" "~3.1.0-rc.3"
"@abp/toastr" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0-rc.3.tgz#e26f8ff9d7beaedf2050b9d6319e6368c990c373"
integrity sha512-qglA2lW0eQFzZlGeAev+vGuWsHNFmDeSCGAHPhd4Z07zjnphPnIOXSa+rXhb+4y6DevQP7OY/KSMQdX6ZMU3RQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0.tgz#5f1f308621cced2f0a4272fe612f485558bcab07"
integrity sha512-zaRw34HwEESbYPYPsn0wH4lE4o9PuwJzovS1T2vmRg8wDgeOSkxC7uFU5If1QcFHuADkI3jfsyk8Xe9nEqz2Jg==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0.tgz#9a9cc4a2c2bdfada9c69e35e15cc5491f1256712"
integrity sha512-DnLebcBACGTlCyJ05CRP3KXCGqWw1X3aXsdDnqQlohrLGwZHxDMZfS8HswhclG2Ak44MQn/4VtuUqRAs1PKlLg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0"
"@abp/bootstrap" "~3.1.0"
"@abp/bootstrap-datepicker" "~3.1.0"
"@abp/datatables.net-bs4" "~3.1.0"
"@abp/font-awesome" "~3.1.0"
"@abp/jquery-form" "~3.1.0"
"@abp/jquery-validation-unobtrusive" "~3.1.0"
"@abp/lodash" "~3.1.0"
"@abp/luxon" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/select2" "~3.1.0"
"@abp/sweetalert" "~3.1.0"
"@abp/timeago" "~3.1.0"
"@abp/toastr" "~3.1.0"
"@abp/aspnetcore.mvc.ui@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0.tgz#4a80efec4d1c41d266af919068dfbb6f6324fa7f"
integrity sha512-y6kVikbuCJlQbAvMdA/j2DwxLX0Fv8rRhjmmfr/ocEDrMridt1a5rO5JqDab8WvJKJjDudoobf1mSk9ZNxtyvQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,213 +41,213 @@
path "^0.12.7"
rimraf "^3.0.2"
"@abp/blogging@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-3.1.0-rc.3.tgz#5c21c1dc57d832de35e89621fd81653599e676ad"
integrity sha512-8iAe29fzdCH4YAp3+8JSMrT0E0/OfUSQ9sIxGXrlV4GyEX2iGZrszRyKsKA+bgQmBOQdnT36RrmSOl0K/A+Mxw==
"@abp/blogging@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-3.1.0.tgz#627c827abfb0716a6124fea519d06d3fc8740d46"
integrity sha512-+UadxN3jBGzo2t+w38638BNRm9OGB2UNzw2AfkffomFPvhzA8OUzyhdpwb0+sVqXfom+GmnvRVIr8YB193gOvw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0-rc.3"
"@abp/owl.carousel" "~3.1.0-rc.3"
"@abp/prismjs" "~3.1.0-rc.3"
"@abp/tui-editor" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0"
"@abp/owl.carousel" "~3.1.0"
"@abp/prismjs" "~3.1.0"
"@abp/tui-editor" "~3.1.0"
"@abp/bootstrap-datepicker@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0-rc.3.tgz#279d9603cd916a884bac125cb525ee44fb809762"
integrity sha512-qZolOk2Pw+IvXh6Ko7wJddzMVPbS8silGecBZMYe0DVRNovg0515Px8zR3GJ16wcVQuvG6ByBn4fdeKFmYfokQ==
"@abp/bootstrap-datepicker@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0.tgz#47198667eafa4a920dd72f38a22452bdeadf0edd"
integrity sha512-yBmEuiorGNa5LSvjXfVGJ/CLlW/fGwij07I+gbGnwY0gVp4ydfA15LJfuCdfHBo2ZIDFXe7hQuVYFEH1gbLpkA==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0-rc.3.tgz#a1368df757995f52c19dd76ef1846d19a067def6"
integrity sha512-r8XRTYJBEa33FVxF+Mg0ALYNhmTjVBw1NQIQY8Ub5ZR+HIZoaDqA0X5zfAKvGQlmfXLiZJDkvCV5EIQWsIgnrA==
"@abp/bootstrap@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0.tgz#7bd7b81a67712154fa12d01b6051e71f316be048"
integrity sha512-I64cCBo0OS14A29y/dEhKBPeXPt1djNoxZo4OXhHZAAmOM3fP3t8y9nDNCr3L2r6/FT8RQH7AW0/jJjER94KvA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/clipboard@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.1.0-rc.3.tgz#40f0a95298cf9d7097d8e7f96e42c181e5a9907b"
integrity sha512-efCjrAHN3d7zmq4eVzlT4H/s6K11I9K7hv4fIJP6fbZKDoXi5hzTv2+dt9JRDWAra+s87PdBJq7AEWNs6ONiGg==
"@abp/clipboard@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.1.0.tgz#3d994bee312beb3f4977e734a2e4da98b8617279"
integrity sha512-HE9X86G471eOJYrVEM9NIJFLjzvfiW0vtqj4gGjhrwAPin2p44Jby5r8UGOKFY1wr/qZQbbuwmhVih78maDwIA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
clipboard "^2.0.6"
"@abp/codemirror@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-3.1.0-rc.3.tgz#db68462bc6618734daa30f928feb65e0cca8cf53"
integrity sha512-TJz21MreoVePouWjnQKQ6gD9cXWQkS7xTl4V93i69C6m9f/ozoaoJvm3Va3GGGZMKf6u2B8G+XX7d6QGz406hg==
"@abp/codemirror@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-3.1.0.tgz#870b3f9c057063d355a5796b0e7e040e22a324f6"
integrity sha512-xldfttjZ3BKoKQ5qiHdWNfGTUrcYnwbBQiitA9lYZkLedEkqOodyX8qCSTYbw1A69dWWJAEaj5vnq05xMldcaQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
codemirror "^5.54.0"
"@abp/core@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0-rc.3.tgz#7e1bd9ac9aaecfc66863e8e319975358885a3ca2"
integrity sha512-wIvm4l8ZDQ+eiNN1a+v07EjUhngrxwPWvfDf9bPQpepfnIKiAktJziihh0oBJAbqXNqmI7f6FGN76spvNop/EA==
"@abp/core@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0.tgz#13ce01a68f0e2e9ab976f30d7bf892a9037af4f7"
integrity sha512-hLN0W5/0PuyIBIGxmLQvnbec0eBlXB1vS7YqrmiMv0WPgnHXx36FXfUUuX74JHTfTQFMGWL3EOrzm6UBe2+0VA==
dependencies:
"@abp/utils" "^3.1.0-rc.3"
"@abp/utils" "^3.1.0"
"@abp/datatables.net-bs4@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0-rc.3.tgz#f46c4474635918c16ca7edbe4930c07317930592"
integrity sha512-FeN53p5U2hIyYyM3G3AuGSwBZFBGbx4yHb/ymW/DEGtJ6XtynHlsFPz00/PktLe0OKOjUxOUf2LQLqKJi83WQQ==
"@abp/datatables.net-bs4@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0.tgz#c8033ffff1a360c6cb98f8871ecec5d8f94c3ef6"
integrity sha512-3xx3Er8i8IJ/mYEYl+MxGyY+sZo965f0MCoIAGPV7dNuULfiNYPhvym+4LXzocRZUlF4qrXxXPLo3njiCQNAUQ==
dependencies:
"@abp/datatables.net" "~3.1.0-rc.3"
"@abp/datatables.net" "~3.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0-rc.3.tgz#c3a8f81d5ee571445b01d2db0e05ed555b1459b8"
integrity sha512-sOWuVwvSoQlXqC9CC9HGH6HzdHb5vVX8CbqzIUYBJEzY4NBRUqeclFJQrA/thjMNtefdLD2AiVwPFmAdGBeDSg==
"@abp/datatables.net@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0.tgz#db4fe94cf4216a59a3121d0d38b57092d7524f2a"
integrity sha512-9av6Dk1qEMAahjZCEn3hAP9mNCvr8HBcYBEqhGMACCk+rLjAJgzKKzV80cvlerg1VGoBTdQ0NgN22ywsWqDyOg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0-rc.3.tgz#38f63ad4fadc4986a73116fa29d5ef56812c483c"
integrity sha512-BnrI9XaKxEvI0d6Fa9tbw1J/VAsVUqTyAHva4WTUUa+neB9gaK62ZUjgDdF8Eo6gj7UOO8DYvsXehzpVpZKlPQ==
"@abp/font-awesome@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0.tgz#00792619894b8d0f15801df641ee57eda1d7cdba"
integrity sha512-fRd8QtVmfBiEoQpYgvVoNUcoyje3mtGqfIVtzeH2wnwEWKEO8SFfMcuWetyY2pk06VgpRnKNHGumyHnaNTCiUQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/highlight.js@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-3.1.0-rc.3.tgz#d1e92b44ebd6cc6fc49a18cf350bf24b12be2792"
integrity sha512-rb9/ryoEK2krMh3DLYQcqTyvSaI7BYlOd6+awDYl5iWXu8TK+M1NP9zSM8ZoYr0kkLoD1dGHsF4ondCfCYjxPQ==
"@abp/highlight.js@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-3.1.0.tgz#89a9288c2456817f346ec0abafe90432755073e1"
integrity sha512-4tlstlYCkC56nosd/EQLsCCUy+GyEibwpPNPhtPkCMJ1J5iU7TlGYqbcmvRtqSpDWiSziueRggWME6+CtL4/EA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@abp/jquery-form@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0-rc.3.tgz#7b74828f32a641c0b1ef1fd8b0389bf994a09e16"
integrity sha512-G+YRnDRZe5Mw81NAEnnr8scGjupndcu9xZ1dw+hCFGg30yypiUIfHtrMR4iR94y7M198fAgQP+0k7RvDqnALiw==
"@abp/jquery-form@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0.tgz#d095dea5200a13714dddd4ff1067126a01944440"
integrity sha512-Bs1BJ1coJMC8kFme9SffIicUSx7ULGzvdHfatzEbL6oH7KCSU/smBRTdAuZ/l85Qfftd0C6R9ibXehgKlagQKw==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0-rc.3.tgz#aef83e8f11791ae7be449eab6655a73075f98b45"
integrity sha512-uWu6qdZasSZEFJC1IhEtj8NZq5kXX8W/zlK2tVpFhjxE/QYiJlPj8pVy2I7cuEIBghzAO2omwI+5En8TSagrGA==
"@abp/jquery-validation-unobtrusive@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0.tgz#c4a6e99f8cadc437b83574fbb2437beaccb23241"
integrity sha512-WpZPnfx0MR9E1c7TB9M/hU4AkToTaPsLg+P7HfCihB6g7SVrjdLxP4w90lIejro3raK2BjU4726FHqgFQSygTA==
dependencies:
"@abp/jquery-validation" "~3.1.0-rc.3"
"@abp/jquery-validation" "~3.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0-rc.3.tgz#40dcb28ce5a3a87fc69972053e48a456c84e3225"
integrity sha512-uaL+ZS/NTf103Hq3ehayFT1qvq/Y2T5PAFY9ijBvX+7phCtPwGiIPfUvyuwYnKbdTa15odC275e7pY2CssHWIA==
"@abp/jquery-validation@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0.tgz#ace497b864df008385a2fcabf6ef7e014a663a1d"
integrity sha512-kq36uSs54SVTYcGsy/CQZlIW98mfmhfNOHsnxn/W4U1prMSZdH7yegCEfHlHN2ERtubD6UEWHxx5D1JUyDsmvg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0-rc.3.tgz#8c35b9e7de888516e2acc5227092ca2fed991475"
integrity sha512-DT2uBNfW3+Xc1Bz62WHdIC3JfAb2Qcc4p86LyDG5pNRAd3FpImA1VnRPsMRX9Mig7HYRjMYiuYXTeovM6YS0fg==
"@abp/jquery@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0.tgz#e110148d13478ea86de8cff092164d7bd7a9ef63"
integrity sha512-8QzEMTHW0HNYrQbC11w28DxD3jGdaWlrGvAExmitBYIv9i1BYg/6M4bcKOVJPhiQoR50aCe+6xInFhNgfRNBCw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
jquery "~3.5.1"
"@abp/lodash@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0-rc.3.tgz#a312975824fa3bebc00f5eca35cededc5ec3af4b"
integrity sha512-siv5cMWlUHEX2RtvKCGoX2cEh4h1hniluKlFgmVmYY4hdGYdAG4T2d9QQAbPODwdzrJ8jzI36hXT/P4IrzhWZw==
"@abp/lodash@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0.tgz#a4175342b4fc14a92b8344ea783554c40e4e450c"
integrity sha512-RVclkRFjrjPtNVaAPJVPJJmI9QFbc2vZfwG+utDV4aZzytZOgESN8q8IbOGaCIj8KzvX1LeBSqvDRP81l9c5Tg==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
lodash "^4.17.15"
"@abp/luxon@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0-rc.3.tgz#9b9d5c9827a0c661458094134cafd80f35537a69"
integrity sha512-cKj/irXJhTJ6WiSyjzcZcsDjKFji1Q/0nV7IYhY9e2wzpg3qEB8Z8k8fDLPDAUriUKxBoI6mQ/CVC0ah7eg/LA==
"@abp/luxon@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0.tgz#867f4395315b0727b39f9b5a5f4dc9bca7cfafde"
integrity sha512-Pf+g5yGCqKDEhGMM/V75zX/8pPJUoIv7xJdF9sLRTERr5NpsS8/23DZIn2KmzbNLThHDkAmayBxHZko4Ri1ykw==
dependencies:
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0-rc.3.tgz#218eb620532af8bdde6a46388a3d5349974fab44"
integrity sha512-z3IzgSYtpZ2FlWNmM2A1wbP3CHB3P5a8k/JR0JSWwtl+D/LiYC348VQIXen+pIJoEjMlY48iSi5XNyBIz4X9hw==
"@abp/malihu-custom-scrollbar-plugin@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0.tgz#eab16ac9cddfbe9982baf946a468718dee34589e"
integrity sha512-/6TXbzyUh8qSMwZss1tTWkAeAnrAvSHeJRF32iVCYx769+6HJ4QZt1BWyT6/jgAdEHZspePh1+xAsrPRDZJ5aA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/markdown-it@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-3.1.0-rc.3.tgz#74a1e2c20654988159f332a01790a74d7ffb6b92"
integrity sha512-6k5e+WRfE4I0vp4KmV44FLQXvT8u+UUtdzPJOotWERWePuCVLJqM0u0hht0s5uEoTOhfCONIYwqQoGjzfP/8lg==
"@abp/markdown-it@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-3.1.0.tgz#7c37311718d1f50ba9f64180f9eba21c54509867"
integrity sha512-XTIsIDSVJ3p1fgfW84SB4P6t3qWsr26Xa/gargQX+A2yh2yQOcKYwv3RDQdA3e4N3kTgKenmNES/qsNnoPObhA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
markdown-it "^11.0.0"
"@abp/owl.carousel@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-3.1.0-rc.3.tgz#c419eccaeb18150dab5b7fdd2da102a26a6d6013"
integrity sha512-lLJuhCJ5/879juIHqLPrNos+zOyBb7cuvpzAF+IE+6/Jb9yP5Xn9O8004F2ELXRag0bHZVzCgCbtPmDDF+LkNQ==
"@abp/owl.carousel@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-3.1.0.tgz#597c7f029303d97b0bc0c61737512526cc6535a4"
integrity sha512-Rwa2j3xgjDgrMPUR+wKdMDLJ0BznMcig/nU4W8MVUEee6awbuVPjWI2BKWbU8Og+VDvfFVcwmDP6RyWEy02JvQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
owl.carousel "^2.3.4"
"@abp/prismjs@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.1.0-rc.3.tgz#d13885bf613871f6cd003f58ae01ee4587ad15ad"
integrity sha512-gaKxJ3d78oR1wGZhnPzM5EJIAsibh3VT9MFithFt/YAQdrMMOqS1fEdGsm1zO/A7Veyho9Ba/144RmPkFXH5gQ==
"@abp/prismjs@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.1.0.tgz#11dee74a803c4d79b0a41ed0c3a4f1946c44968a"
integrity sha512-SJ3bWT9UXLSGKMiNKyJeRt/3WjD4qXc4DuEAD2RxRT+tBDd17FG18VTfjLMPcSGtTt+zTK2+tbcxZN5hUfVW9g==
dependencies:
"@abp/clipboard" "~3.1.0-rc.3"
"@abp/core" "~3.1.0-rc.3"
"@abp/clipboard" "~3.1.0"
"@abp/core" "~3.1.0"
prismjs "^1.20.0"
"@abp/select2@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0-rc.3.tgz#493afc27f29da1c9926ee02e8f7b641e8ee4b67e"
integrity sha512-fym9GmQbl34CyTCVzfo4jGe77nSeDuRPYMzAYO8p0uKdDB8t9jNZNqhYJ9Ee5KQXJyg4lmFFPkLcRZF14E+cWw==
"@abp/select2@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0.tgz#459386918f15c591549e7c5b1d411536f781c2a0"
integrity sha512-I0dOXi9oPdzWQVZ5s4Lo4q6tTezQuqXSzZClmnJaQzkf7pCftnji+S727bkUIjwjkFAsT/YNMBCzgJBaiHS3uQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0-rc.3.tgz#1c1421e2baaa57cc24e0f9334a5173836819cc24"
integrity sha512-WrYRutXM2f6VRECEkWhjfqtQXlnEw88MCkYicAhyMH7ZYYWg7r9xVg9TRJJI4UwGMLSyR3EB+ZdTmnD8aSC0yQ==
"@abp/sweetalert@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0.tgz#498df5abb8f68b660cd37f10e287188b6417c3ff"
integrity sha512-9YxVZQfrsGWdVmKeWAG4CoD+B0VObR94SsQQgUiYcl/07PPDxDPZHX/sh1H+pqHXv9/qpPOTS3/PCQAeIfuG/w==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0-rc.3.tgz#0a7a369ba29633f00b19206b257c6f1f59f182a4"
integrity sha512-FDgaQCJmwWplCcdJYa9kyCcMxJFrKf+zDEFzT5hWfhMzq+sYJYX7QDQtbF5OJnMSWuPyI0/RU0bocuGaJ584VQ==
"@abp/timeago@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0.tgz#abae5287e01d36107516416256a1ccfcb0ca7953"
integrity sha512-xVOq5/5l/0w9vmWIF7dZzqa+7nl7NNG7ER8gbrdPOX86rCsD12DIOkFDLi+Q41kxzp7wbphDZIT/7RsPrhgDDQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
timeago "^1.6.7"
"@abp/toastr@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0-rc.3.tgz#89af6aa864a9aac76bc9bf21b7f9bc6763ca7573"
integrity sha512-AeKH5imy8W9yMAlzRv9VdkRHApySpR2BKfrQYk3q9LubgwaxLvOFc/l38aIEKuyosN7dHTMFBQlEwLxWFwaoPA==
"@abp/toastr@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0.tgz#cebbb95c1f0b36306a0a58215dfda48a3ebe5f20"
integrity sha512-94PqZmbayVJnDKMrqbVhW0Z3D/sL3sV5gXfd53Ac5KNQvsBmQZ5/SvuuwuDzWYMQm0XwZ1h4fLAiTuoBMIxWCQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
toastr "^2.1.4"
"@abp/tui-editor@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-3.1.0-rc.3.tgz#31c66f06b938ec416276907e539f51da389be01c"
integrity sha512-V3drpSK2l+WwfHWnK+9BFB33Ww+ruo6GFuOhyzDXjmXhOOMeiM2c/r205v+Bm/uEB0GaCW1m/r3yfogFfMipIw==
"@abp/tui-editor@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-3.1.0.tgz#1c607e1d1518ae07db6e5db4f1ef2690c337ef2f"
integrity sha512-0cq4vLLxUSU+n5CYGnJD78w2bveMZ9+oZjdL+WJmEsb9J/tIlNtsKTIJLDRRcbOyn/fbWzQkOj039JmWOuzVaQ==
dependencies:
"@abp/codemirror" "~3.1.0-rc.3"
"@abp/highlight.js" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0-rc.3"
"@abp/markdown-it" "~3.1.0-rc.3"
"@abp/codemirror" "~3.1.0"
"@abp/highlight.js" "~3.1.0"
"@abp/jquery" "~3.1.0"
"@abp/markdown-it" "~3.1.0"
tui-editor "^1.4.10"
"@abp/utils@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a"
integrity sha512-45KXx5zlxm5gK2EFwzM+hMjT8q8pD3PejyNfVP6HBbGE2N36LGKYtI59s6vFm5yV2qFxQyVPrk4mi3Y+neqlBw==
"@abp/utils@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0.tgz#ccbfed6591ab11466bf3fed740c8422acf6a84df"
integrity sha512-I5yjM1ovqcpBAT2LFOfwLibVE0Ql6XbP3tQj6YMEZ/foDXekn/4P6Spgq5DTZCMo+0jskS0D8NfL7Ce4p89buw==
dependencies:
just-compare "^1.3.0"

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

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

2
modules/client-simulation/demo/Volo.ClientSimulation.Demo/wwwroot/libs/abp/utils/abp-utils.umd.js.map

File diff suppressed because one or more lines are too long

2
modules/client-simulation/demo/Volo.ClientSimulation.Demo/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map

File diff suppressed because one or more lines are too long

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

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0-rc.3.tgz#d7e3ad928a72efb7c76a585ef051fce860efb7bf"
integrity sha512-cc2Wp/6hr1j89Ap/474HlH54WhAIgCya1buuXxrxXSMdYqDKNxK61aMYC/mnYGMiyPqoz6TWWUJB2h2dZeTgzQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0-rc.3.tgz#54a92d673f5158ee222d0d95ebfbca6c63b20a4f"
integrity sha512-czS+8+wuNxuNIogI3FI/T72dCumpbsXp9Fke9pwQEzkCZZCG11cJdOCr1pLJKT1G54x+zfgwVVFIL36sFcq50A==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0-rc.3"
"@abp/bootstrap" "~3.1.0-rc.3"
"@abp/bootstrap-datepicker" "~3.1.0-rc.3"
"@abp/datatables.net-bs4" "~3.1.0-rc.3"
"@abp/font-awesome" "~3.1.0-rc.3"
"@abp/jquery-form" "~3.1.0-rc.3"
"@abp/jquery-validation-unobtrusive" "~3.1.0-rc.3"
"@abp/lodash" "~3.1.0-rc.3"
"@abp/luxon" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/select2" "~3.1.0-rc.3"
"@abp/sweetalert" "~3.1.0-rc.3"
"@abp/timeago" "~3.1.0-rc.3"
"@abp/toastr" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0-rc.3.tgz#e26f8ff9d7beaedf2050b9d6319e6368c990c373"
integrity sha512-qglA2lW0eQFzZlGeAev+vGuWsHNFmDeSCGAHPhd4Z07zjnphPnIOXSa+rXhb+4y6DevQP7OY/KSMQdX6ZMU3RQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0.tgz#5f1f308621cced2f0a4272fe612f485558bcab07"
integrity sha512-zaRw34HwEESbYPYPsn0wH4lE4o9PuwJzovS1T2vmRg8wDgeOSkxC7uFU5If1QcFHuADkI3jfsyk8Xe9nEqz2Jg==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0.tgz#9a9cc4a2c2bdfada9c69e35e15cc5491f1256712"
integrity sha512-DnLebcBACGTlCyJ05CRP3KXCGqWw1X3aXsdDnqQlohrLGwZHxDMZfS8HswhclG2Ak44MQn/4VtuUqRAs1PKlLg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0"
"@abp/bootstrap" "~3.1.0"
"@abp/bootstrap-datepicker" "~3.1.0"
"@abp/datatables.net-bs4" "~3.1.0"
"@abp/font-awesome" "~3.1.0"
"@abp/jquery-form" "~3.1.0"
"@abp/jquery-validation-unobtrusive" "~3.1.0"
"@abp/lodash" "~3.1.0"
"@abp/luxon" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/select2" "~3.1.0"
"@abp/sweetalert" "~3.1.0"
"@abp/timeago" "~3.1.0"
"@abp/toastr" "~3.1.0"
"@abp/aspnetcore.mvc.ui@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0.tgz#4a80efec4d1c41d266af919068dfbb6f6324fa7f"
integrity sha512-y6kVikbuCJlQbAvMdA/j2DwxLX0Fv8rRhjmmfr/ocEDrMridt1a5rO5JqDab8WvJKJjDudoobf1mSk9ZNxtyvQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,144 +41,144 @@
path "^0.12.7"
rimraf "^3.0.2"
"@abp/bootstrap-datepicker@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0-rc.3.tgz#279d9603cd916a884bac125cb525ee44fb809762"
integrity sha512-qZolOk2Pw+IvXh6Ko7wJddzMVPbS8silGecBZMYe0DVRNovg0515Px8zR3GJ16wcVQuvG6ByBn4fdeKFmYfokQ==
"@abp/bootstrap-datepicker@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0.tgz#47198667eafa4a920dd72f38a22452bdeadf0edd"
integrity sha512-yBmEuiorGNa5LSvjXfVGJ/CLlW/fGwij07I+gbGnwY0gVp4ydfA15LJfuCdfHBo2ZIDFXe7hQuVYFEH1gbLpkA==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0-rc.3.tgz#a1368df757995f52c19dd76ef1846d19a067def6"
integrity sha512-r8XRTYJBEa33FVxF+Mg0ALYNhmTjVBw1NQIQY8Ub5ZR+HIZoaDqA0X5zfAKvGQlmfXLiZJDkvCV5EIQWsIgnrA==
"@abp/bootstrap@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0.tgz#7bd7b81a67712154fa12d01b6051e71f316be048"
integrity sha512-I64cCBo0OS14A29y/dEhKBPeXPt1djNoxZo4OXhHZAAmOM3fP3t8y9nDNCr3L2r6/FT8RQH7AW0/jJjER94KvA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0-rc.3.tgz#7e1bd9ac9aaecfc66863e8e319975358885a3ca2"
integrity sha512-wIvm4l8ZDQ+eiNN1a+v07EjUhngrxwPWvfDf9bPQpepfnIKiAktJziihh0oBJAbqXNqmI7f6FGN76spvNop/EA==
"@abp/core@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0.tgz#13ce01a68f0e2e9ab976f30d7bf892a9037af4f7"
integrity sha512-hLN0W5/0PuyIBIGxmLQvnbec0eBlXB1vS7YqrmiMv0WPgnHXx36FXfUUuX74JHTfTQFMGWL3EOrzm6UBe2+0VA==
dependencies:
"@abp/utils" "^3.1.0-rc.3"
"@abp/utils" "^3.1.0"
"@abp/datatables.net-bs4@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0-rc.3.tgz#f46c4474635918c16ca7edbe4930c07317930592"
integrity sha512-FeN53p5U2hIyYyM3G3AuGSwBZFBGbx4yHb/ymW/DEGtJ6XtynHlsFPz00/PktLe0OKOjUxOUf2LQLqKJi83WQQ==
"@abp/datatables.net-bs4@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0.tgz#c8033ffff1a360c6cb98f8871ecec5d8f94c3ef6"
integrity sha512-3xx3Er8i8IJ/mYEYl+MxGyY+sZo965f0MCoIAGPV7dNuULfiNYPhvym+4LXzocRZUlF4qrXxXPLo3njiCQNAUQ==
dependencies:
"@abp/datatables.net" "~3.1.0-rc.3"
"@abp/datatables.net" "~3.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0-rc.3.tgz#c3a8f81d5ee571445b01d2db0e05ed555b1459b8"
integrity sha512-sOWuVwvSoQlXqC9CC9HGH6HzdHb5vVX8CbqzIUYBJEzY4NBRUqeclFJQrA/thjMNtefdLD2AiVwPFmAdGBeDSg==
"@abp/datatables.net@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0.tgz#db4fe94cf4216a59a3121d0d38b57092d7524f2a"
integrity sha512-9av6Dk1qEMAahjZCEn3hAP9mNCvr8HBcYBEqhGMACCk+rLjAJgzKKzV80cvlerg1VGoBTdQ0NgN22ywsWqDyOg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0-rc.3.tgz#38f63ad4fadc4986a73116fa29d5ef56812c483c"
integrity sha512-BnrI9XaKxEvI0d6Fa9tbw1J/VAsVUqTyAHva4WTUUa+neB9gaK62ZUjgDdF8Eo6gj7UOO8DYvsXehzpVpZKlPQ==
"@abp/font-awesome@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0.tgz#00792619894b8d0f15801df641ee57eda1d7cdba"
integrity sha512-fRd8QtVmfBiEoQpYgvVoNUcoyje3mtGqfIVtzeH2wnwEWKEO8SFfMcuWetyY2pk06VgpRnKNHGumyHnaNTCiUQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0-rc.3.tgz#7b74828f32a641c0b1ef1fd8b0389bf994a09e16"
integrity sha512-G+YRnDRZe5Mw81NAEnnr8scGjupndcu9xZ1dw+hCFGg30yypiUIfHtrMR4iR94y7M198fAgQP+0k7RvDqnALiw==
"@abp/jquery-form@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0.tgz#d095dea5200a13714dddd4ff1067126a01944440"
integrity sha512-Bs1BJ1coJMC8kFme9SffIicUSx7ULGzvdHfatzEbL6oH7KCSU/smBRTdAuZ/l85Qfftd0C6R9ibXehgKlagQKw==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0-rc.3.tgz#aef83e8f11791ae7be449eab6655a73075f98b45"
integrity sha512-uWu6qdZasSZEFJC1IhEtj8NZq5kXX8W/zlK2tVpFhjxE/QYiJlPj8pVy2I7cuEIBghzAO2omwI+5En8TSagrGA==
"@abp/jquery-validation-unobtrusive@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0.tgz#c4a6e99f8cadc437b83574fbb2437beaccb23241"
integrity sha512-WpZPnfx0MR9E1c7TB9M/hU4AkToTaPsLg+P7HfCihB6g7SVrjdLxP4w90lIejro3raK2BjU4726FHqgFQSygTA==
dependencies:
"@abp/jquery-validation" "~3.1.0-rc.3"
"@abp/jquery-validation" "~3.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0-rc.3.tgz#40dcb28ce5a3a87fc69972053e48a456c84e3225"
integrity sha512-uaL+ZS/NTf103Hq3ehayFT1qvq/Y2T5PAFY9ijBvX+7phCtPwGiIPfUvyuwYnKbdTa15odC275e7pY2CssHWIA==
"@abp/jquery-validation@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0.tgz#ace497b864df008385a2fcabf6ef7e014a663a1d"
integrity sha512-kq36uSs54SVTYcGsy/CQZlIW98mfmhfNOHsnxn/W4U1prMSZdH7yegCEfHlHN2ERtubD6UEWHxx5D1JUyDsmvg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0-rc.3.tgz#8c35b9e7de888516e2acc5227092ca2fed991475"
integrity sha512-DT2uBNfW3+Xc1Bz62WHdIC3JfAb2Qcc4p86LyDG5pNRAd3FpImA1VnRPsMRX9Mig7HYRjMYiuYXTeovM6YS0fg==
"@abp/jquery@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0.tgz#e110148d13478ea86de8cff092164d7bd7a9ef63"
integrity sha512-8QzEMTHW0HNYrQbC11w28DxD3jGdaWlrGvAExmitBYIv9i1BYg/6M4bcKOVJPhiQoR50aCe+6xInFhNgfRNBCw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
jquery "~3.5.1"
"@abp/lodash@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0-rc.3.tgz#a312975824fa3bebc00f5eca35cededc5ec3af4b"
integrity sha512-siv5cMWlUHEX2RtvKCGoX2cEh4h1hniluKlFgmVmYY4hdGYdAG4T2d9QQAbPODwdzrJ8jzI36hXT/P4IrzhWZw==
"@abp/lodash@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0.tgz#a4175342b4fc14a92b8344ea783554c40e4e450c"
integrity sha512-RVclkRFjrjPtNVaAPJVPJJmI9QFbc2vZfwG+utDV4aZzytZOgESN8q8IbOGaCIj8KzvX1LeBSqvDRP81l9c5Tg==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
lodash "^4.17.15"
"@abp/luxon@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0-rc.3.tgz#9b9d5c9827a0c661458094134cafd80f35537a69"
integrity sha512-cKj/irXJhTJ6WiSyjzcZcsDjKFji1Q/0nV7IYhY9e2wzpg3qEB8Z8k8fDLPDAUriUKxBoI6mQ/CVC0ah7eg/LA==
"@abp/luxon@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0.tgz#867f4395315b0727b39f9b5a5f4dc9bca7cfafde"
integrity sha512-Pf+g5yGCqKDEhGMM/V75zX/8pPJUoIv7xJdF9sLRTERr5NpsS8/23DZIn2KmzbNLThHDkAmayBxHZko4Ri1ykw==
dependencies:
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0-rc.3.tgz#218eb620532af8bdde6a46388a3d5349974fab44"
integrity sha512-z3IzgSYtpZ2FlWNmM2A1wbP3CHB3P5a8k/JR0JSWwtl+D/LiYC348VQIXen+pIJoEjMlY48iSi5XNyBIz4X9hw==
"@abp/malihu-custom-scrollbar-plugin@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0.tgz#eab16ac9cddfbe9982baf946a468718dee34589e"
integrity sha512-/6TXbzyUh8qSMwZss1tTWkAeAnrAvSHeJRF32iVCYx769+6HJ4QZt1BWyT6/jgAdEHZspePh1+xAsrPRDZJ5aA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0-rc.3.tgz#493afc27f29da1c9926ee02e8f7b641e8ee4b67e"
integrity sha512-fym9GmQbl34CyTCVzfo4jGe77nSeDuRPYMzAYO8p0uKdDB8t9jNZNqhYJ9Ee5KQXJyg4lmFFPkLcRZF14E+cWw==
"@abp/select2@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0.tgz#459386918f15c591549e7c5b1d411536f781c2a0"
integrity sha512-I0dOXi9oPdzWQVZ5s4Lo4q6tTezQuqXSzZClmnJaQzkf7pCftnji+S727bkUIjwjkFAsT/YNMBCzgJBaiHS3uQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0-rc.3.tgz#1c1421e2baaa57cc24e0f9334a5173836819cc24"
integrity sha512-WrYRutXM2f6VRECEkWhjfqtQXlnEw88MCkYicAhyMH7ZYYWg7r9xVg9TRJJI4UwGMLSyR3EB+ZdTmnD8aSC0yQ==
"@abp/sweetalert@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0.tgz#498df5abb8f68b660cd37f10e287188b6417c3ff"
integrity sha512-9YxVZQfrsGWdVmKeWAG4CoD+B0VObR94SsQQgUiYcl/07PPDxDPZHX/sh1H+pqHXv9/qpPOTS3/PCQAeIfuG/w==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0-rc.3.tgz#0a7a369ba29633f00b19206b257c6f1f59f182a4"
integrity sha512-FDgaQCJmwWplCcdJYa9kyCcMxJFrKf+zDEFzT5hWfhMzq+sYJYX7QDQtbF5OJnMSWuPyI0/RU0bocuGaJ584VQ==
"@abp/timeago@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0.tgz#abae5287e01d36107516416256a1ccfcb0ca7953"
integrity sha512-xVOq5/5l/0w9vmWIF7dZzqa+7nl7NNG7ER8gbrdPOX86rCsD12DIOkFDLi+Q41kxzp7wbphDZIT/7RsPrhgDDQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
timeago "^1.6.7"
"@abp/toastr@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0-rc.3.tgz#89af6aa864a9aac76bc9bf21b7f9bc6763ca7573"
integrity sha512-AeKH5imy8W9yMAlzRv9VdkRHApySpR2BKfrQYk3q9LubgwaxLvOFc/l38aIEKuyosN7dHTMFBQlEwLxWFwaoPA==
"@abp/toastr@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0.tgz#cebbb95c1f0b36306a0a58215dfda48a3ebe5f20"
integrity sha512-94PqZmbayVJnDKMrqbVhW0Z3D/sL3sV5gXfd53Ac5KNQvsBmQZ5/SvuuwuDzWYMQm0XwZ1h4fLAiTuoBMIxWCQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
toastr "^2.1.4"
"@abp/utils@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a"
integrity sha512-45KXx5zlxm5gK2EFwzM+hMjT8q8pD3PejyNfVP6HBbGE2N36LGKYtI59s6vFm5yV2qFxQyVPrk4mi3Y+neqlBw==
"@abp/utils@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0.tgz#ccbfed6591ab11466bf3fed740c8422acf6a84df"
integrity sha512-I5yjM1ovqcpBAT2LFOfwLibVE0Ql6XbP3tQj6YMEZ/foDXekn/4P6Spgq5DTZCMo+0jskS0D8NfL7Ce4p89buw==
dependencies:
just-compare "^1.3.0"

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

@ -15,11 +15,11 @@
},
"private": true,
"dependencies": {
"@abp/ng.account": "~3.1.0-rc.3",
"@abp/ng.identity": "~3.1.0-rc.3",
"@abp/ng.setting-management": "~3.1.0-rc.3",
"@abp/ng.tenant-management": "~3.1.0-rc.3",
"@abp/ng.theme.basic": "~3.1.0-rc.3",
"@abp/ng.account": "~3.1.0",
"@abp/ng.identity": "~3.1.0",
"@abp/ng.setting-management": "~3.1.0",
"@abp/ng.tenant-management": "~3.1.0",
"@abp/ng.theme.basic": "~3.1.0",
"@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": ">=3.1.0-rc.3",
"@abp/ng.theme.shared": ">=3.1.0-rc.3"
"@abp/ng.core": ">=3.1.0",
"@abp/ng.theme.shared": ">=3.1.0"
},
"dependencies": {
"tslib": "^2.0.0"

2
modules/cms-kit/common.props

@ -2,7 +2,7 @@
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.1.0</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
<AbpProjectType>module</AbpProjectType>
</PropertyGroup>

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": "^3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.basic": "^3.1.0"
}
}

2
modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js.map

File diff suppressed because one or more lines are too long

2
modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map

File diff suppressed because one or more lines are too long

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

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0-rc.3.tgz#d7e3ad928a72efb7c76a585ef051fce860efb7bf"
integrity sha512-cc2Wp/6hr1j89Ap/474HlH54WhAIgCya1buuXxrxXSMdYqDKNxK61aMYC/mnYGMiyPqoz6TWWUJB2h2dZeTgzQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0-rc.3.tgz#54a92d673f5158ee222d0d95ebfbca6c63b20a4f"
integrity sha512-czS+8+wuNxuNIogI3FI/T72dCumpbsXp9Fke9pwQEzkCZZCG11cJdOCr1pLJKT1G54x+zfgwVVFIL36sFcq50A==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0-rc.3"
"@abp/bootstrap" "~3.1.0-rc.3"
"@abp/bootstrap-datepicker" "~3.1.0-rc.3"
"@abp/datatables.net-bs4" "~3.1.0-rc.3"
"@abp/font-awesome" "~3.1.0-rc.3"
"@abp/jquery-form" "~3.1.0-rc.3"
"@abp/jquery-validation-unobtrusive" "~3.1.0-rc.3"
"@abp/lodash" "~3.1.0-rc.3"
"@abp/luxon" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/select2" "~3.1.0-rc.3"
"@abp/sweetalert" "~3.1.0-rc.3"
"@abp/timeago" "~3.1.0-rc.3"
"@abp/toastr" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0-rc.3.tgz#e26f8ff9d7beaedf2050b9d6319e6368c990c373"
integrity sha512-qglA2lW0eQFzZlGeAev+vGuWsHNFmDeSCGAHPhd4Z07zjnphPnIOXSa+rXhb+4y6DevQP7OY/KSMQdX6ZMU3RQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0.tgz#5f1f308621cced2f0a4272fe612f485558bcab07"
integrity sha512-zaRw34HwEESbYPYPsn0wH4lE4o9PuwJzovS1T2vmRg8wDgeOSkxC7uFU5If1QcFHuADkI3jfsyk8Xe9nEqz2Jg==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0.tgz#9a9cc4a2c2bdfada9c69e35e15cc5491f1256712"
integrity sha512-DnLebcBACGTlCyJ05CRP3KXCGqWw1X3aXsdDnqQlohrLGwZHxDMZfS8HswhclG2Ak44MQn/4VtuUqRAs1PKlLg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0"
"@abp/bootstrap" "~3.1.0"
"@abp/bootstrap-datepicker" "~3.1.0"
"@abp/datatables.net-bs4" "~3.1.0"
"@abp/font-awesome" "~3.1.0"
"@abp/jquery-form" "~3.1.0"
"@abp/jquery-validation-unobtrusive" "~3.1.0"
"@abp/lodash" "~3.1.0"
"@abp/luxon" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/select2" "~3.1.0"
"@abp/sweetalert" "~3.1.0"
"@abp/timeago" "~3.1.0"
"@abp/toastr" "~3.1.0"
"@abp/aspnetcore.mvc.ui@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0.tgz#4a80efec4d1c41d266af919068dfbb6f6324fa7f"
integrity sha512-y6kVikbuCJlQbAvMdA/j2DwxLX0Fv8rRhjmmfr/ocEDrMridt1a5rO5JqDab8WvJKJjDudoobf1mSk9ZNxtyvQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,144 +41,144 @@
path "^0.12.7"
rimraf "^3.0.2"
"@abp/bootstrap-datepicker@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0-rc.3.tgz#279d9603cd916a884bac125cb525ee44fb809762"
integrity sha512-qZolOk2Pw+IvXh6Ko7wJddzMVPbS8silGecBZMYe0DVRNovg0515Px8zR3GJ16wcVQuvG6ByBn4fdeKFmYfokQ==
"@abp/bootstrap-datepicker@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0.tgz#47198667eafa4a920dd72f38a22452bdeadf0edd"
integrity sha512-yBmEuiorGNa5LSvjXfVGJ/CLlW/fGwij07I+gbGnwY0gVp4ydfA15LJfuCdfHBo2ZIDFXe7hQuVYFEH1gbLpkA==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0-rc.3.tgz#a1368df757995f52c19dd76ef1846d19a067def6"
integrity sha512-r8XRTYJBEa33FVxF+Mg0ALYNhmTjVBw1NQIQY8Ub5ZR+HIZoaDqA0X5zfAKvGQlmfXLiZJDkvCV5EIQWsIgnrA==
"@abp/bootstrap@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0.tgz#7bd7b81a67712154fa12d01b6051e71f316be048"
integrity sha512-I64cCBo0OS14A29y/dEhKBPeXPt1djNoxZo4OXhHZAAmOM3fP3t8y9nDNCr3L2r6/FT8RQH7AW0/jJjER94KvA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0-rc.3.tgz#7e1bd9ac9aaecfc66863e8e319975358885a3ca2"
integrity sha512-wIvm4l8ZDQ+eiNN1a+v07EjUhngrxwPWvfDf9bPQpepfnIKiAktJziihh0oBJAbqXNqmI7f6FGN76spvNop/EA==
"@abp/core@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0.tgz#13ce01a68f0e2e9ab976f30d7bf892a9037af4f7"
integrity sha512-hLN0W5/0PuyIBIGxmLQvnbec0eBlXB1vS7YqrmiMv0WPgnHXx36FXfUUuX74JHTfTQFMGWL3EOrzm6UBe2+0VA==
dependencies:
"@abp/utils" "^3.1.0-rc.3"
"@abp/utils" "^3.1.0"
"@abp/datatables.net-bs4@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0-rc.3.tgz#f46c4474635918c16ca7edbe4930c07317930592"
integrity sha512-FeN53p5U2hIyYyM3G3AuGSwBZFBGbx4yHb/ymW/DEGtJ6XtynHlsFPz00/PktLe0OKOjUxOUf2LQLqKJi83WQQ==
"@abp/datatables.net-bs4@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0.tgz#c8033ffff1a360c6cb98f8871ecec5d8f94c3ef6"
integrity sha512-3xx3Er8i8IJ/mYEYl+MxGyY+sZo965f0MCoIAGPV7dNuULfiNYPhvym+4LXzocRZUlF4qrXxXPLo3njiCQNAUQ==
dependencies:
"@abp/datatables.net" "~3.1.0-rc.3"
"@abp/datatables.net" "~3.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0-rc.3.tgz#c3a8f81d5ee571445b01d2db0e05ed555b1459b8"
integrity sha512-sOWuVwvSoQlXqC9CC9HGH6HzdHb5vVX8CbqzIUYBJEzY4NBRUqeclFJQrA/thjMNtefdLD2AiVwPFmAdGBeDSg==
"@abp/datatables.net@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0.tgz#db4fe94cf4216a59a3121d0d38b57092d7524f2a"
integrity sha512-9av6Dk1qEMAahjZCEn3hAP9mNCvr8HBcYBEqhGMACCk+rLjAJgzKKzV80cvlerg1VGoBTdQ0NgN22ywsWqDyOg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0-rc.3.tgz#38f63ad4fadc4986a73116fa29d5ef56812c483c"
integrity sha512-BnrI9XaKxEvI0d6Fa9tbw1J/VAsVUqTyAHva4WTUUa+neB9gaK62ZUjgDdF8Eo6gj7UOO8DYvsXehzpVpZKlPQ==
"@abp/font-awesome@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0.tgz#00792619894b8d0f15801df641ee57eda1d7cdba"
integrity sha512-fRd8QtVmfBiEoQpYgvVoNUcoyje3mtGqfIVtzeH2wnwEWKEO8SFfMcuWetyY2pk06VgpRnKNHGumyHnaNTCiUQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0-rc.3.tgz#7b74828f32a641c0b1ef1fd8b0389bf994a09e16"
integrity sha512-G+YRnDRZe5Mw81NAEnnr8scGjupndcu9xZ1dw+hCFGg30yypiUIfHtrMR4iR94y7M198fAgQP+0k7RvDqnALiw==
"@abp/jquery-form@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0.tgz#d095dea5200a13714dddd4ff1067126a01944440"
integrity sha512-Bs1BJ1coJMC8kFme9SffIicUSx7ULGzvdHfatzEbL6oH7KCSU/smBRTdAuZ/l85Qfftd0C6R9ibXehgKlagQKw==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0-rc.3.tgz#aef83e8f11791ae7be449eab6655a73075f98b45"
integrity sha512-uWu6qdZasSZEFJC1IhEtj8NZq5kXX8W/zlK2tVpFhjxE/QYiJlPj8pVy2I7cuEIBghzAO2omwI+5En8TSagrGA==
"@abp/jquery-validation-unobtrusive@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0.tgz#c4a6e99f8cadc437b83574fbb2437beaccb23241"
integrity sha512-WpZPnfx0MR9E1c7TB9M/hU4AkToTaPsLg+P7HfCihB6g7SVrjdLxP4w90lIejro3raK2BjU4726FHqgFQSygTA==
dependencies:
"@abp/jquery-validation" "~3.1.0-rc.3"
"@abp/jquery-validation" "~3.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0-rc.3.tgz#40dcb28ce5a3a87fc69972053e48a456c84e3225"
integrity sha512-uaL+ZS/NTf103Hq3ehayFT1qvq/Y2T5PAFY9ijBvX+7phCtPwGiIPfUvyuwYnKbdTa15odC275e7pY2CssHWIA==
"@abp/jquery-validation@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0.tgz#ace497b864df008385a2fcabf6ef7e014a663a1d"
integrity sha512-kq36uSs54SVTYcGsy/CQZlIW98mfmhfNOHsnxn/W4U1prMSZdH7yegCEfHlHN2ERtubD6UEWHxx5D1JUyDsmvg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0-rc.3.tgz#8c35b9e7de888516e2acc5227092ca2fed991475"
integrity sha512-DT2uBNfW3+Xc1Bz62WHdIC3JfAb2Qcc4p86LyDG5pNRAd3FpImA1VnRPsMRX9Mig7HYRjMYiuYXTeovM6YS0fg==
"@abp/jquery@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0.tgz#e110148d13478ea86de8cff092164d7bd7a9ef63"
integrity sha512-8QzEMTHW0HNYrQbC11w28DxD3jGdaWlrGvAExmitBYIv9i1BYg/6M4bcKOVJPhiQoR50aCe+6xInFhNgfRNBCw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
jquery "~3.5.1"
"@abp/lodash@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0-rc.3.tgz#a312975824fa3bebc00f5eca35cededc5ec3af4b"
integrity sha512-siv5cMWlUHEX2RtvKCGoX2cEh4h1hniluKlFgmVmYY4hdGYdAG4T2d9QQAbPODwdzrJ8jzI36hXT/P4IrzhWZw==
"@abp/lodash@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0.tgz#a4175342b4fc14a92b8344ea783554c40e4e450c"
integrity sha512-RVclkRFjrjPtNVaAPJVPJJmI9QFbc2vZfwG+utDV4aZzytZOgESN8q8IbOGaCIj8KzvX1LeBSqvDRP81l9c5Tg==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
lodash "^4.17.15"
"@abp/luxon@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0-rc.3.tgz#9b9d5c9827a0c661458094134cafd80f35537a69"
integrity sha512-cKj/irXJhTJ6WiSyjzcZcsDjKFji1Q/0nV7IYhY9e2wzpg3qEB8Z8k8fDLPDAUriUKxBoI6mQ/CVC0ah7eg/LA==
"@abp/luxon@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0.tgz#867f4395315b0727b39f9b5a5f4dc9bca7cfafde"
integrity sha512-Pf+g5yGCqKDEhGMM/V75zX/8pPJUoIv7xJdF9sLRTERr5NpsS8/23DZIn2KmzbNLThHDkAmayBxHZko4Ri1ykw==
dependencies:
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0-rc.3.tgz#218eb620532af8bdde6a46388a3d5349974fab44"
integrity sha512-z3IzgSYtpZ2FlWNmM2A1wbP3CHB3P5a8k/JR0JSWwtl+D/LiYC348VQIXen+pIJoEjMlY48iSi5XNyBIz4X9hw==
"@abp/malihu-custom-scrollbar-plugin@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0.tgz#eab16ac9cddfbe9982baf946a468718dee34589e"
integrity sha512-/6TXbzyUh8qSMwZss1tTWkAeAnrAvSHeJRF32iVCYx769+6HJ4QZt1BWyT6/jgAdEHZspePh1+xAsrPRDZJ5aA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0-rc.3.tgz#493afc27f29da1c9926ee02e8f7b641e8ee4b67e"
integrity sha512-fym9GmQbl34CyTCVzfo4jGe77nSeDuRPYMzAYO8p0uKdDB8t9jNZNqhYJ9Ee5KQXJyg4lmFFPkLcRZF14E+cWw==
"@abp/select2@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0.tgz#459386918f15c591549e7c5b1d411536f781c2a0"
integrity sha512-I0dOXi9oPdzWQVZ5s4Lo4q6tTezQuqXSzZClmnJaQzkf7pCftnji+S727bkUIjwjkFAsT/YNMBCzgJBaiHS3uQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0-rc.3.tgz#1c1421e2baaa57cc24e0f9334a5173836819cc24"
integrity sha512-WrYRutXM2f6VRECEkWhjfqtQXlnEw88MCkYicAhyMH7ZYYWg7r9xVg9TRJJI4UwGMLSyR3EB+ZdTmnD8aSC0yQ==
"@abp/sweetalert@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0.tgz#498df5abb8f68b660cd37f10e287188b6417c3ff"
integrity sha512-9YxVZQfrsGWdVmKeWAG4CoD+B0VObR94SsQQgUiYcl/07PPDxDPZHX/sh1H+pqHXv9/qpPOTS3/PCQAeIfuG/w==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0-rc.3.tgz#0a7a369ba29633f00b19206b257c6f1f59f182a4"
integrity sha512-FDgaQCJmwWplCcdJYa9kyCcMxJFrKf+zDEFzT5hWfhMzq+sYJYX7QDQtbF5OJnMSWuPyI0/RU0bocuGaJ584VQ==
"@abp/timeago@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0.tgz#abae5287e01d36107516416256a1ccfcb0ca7953"
integrity sha512-xVOq5/5l/0w9vmWIF7dZzqa+7nl7NNG7ER8gbrdPOX86rCsD12DIOkFDLi+Q41kxzp7wbphDZIT/7RsPrhgDDQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
timeago "^1.6.7"
"@abp/toastr@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0-rc.3.tgz#89af6aa864a9aac76bc9bf21b7f9bc6763ca7573"
integrity sha512-AeKH5imy8W9yMAlzRv9VdkRHApySpR2BKfrQYk3q9LubgwaxLvOFc/l38aIEKuyosN7dHTMFBQlEwLxWFwaoPA==
"@abp/toastr@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0.tgz#cebbb95c1f0b36306a0a58215dfda48a3ebe5f20"
integrity sha512-94PqZmbayVJnDKMrqbVhW0Z3D/sL3sV5gXfd53Ac5KNQvsBmQZ5/SvuuwuDzWYMQm0XwZ1h4fLAiTuoBMIxWCQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
toastr "^2.1.4"
"@abp/utils@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a"
integrity sha512-45KXx5zlxm5gK2EFwzM+hMjT8q8pD3PejyNfVP6HBbGE2N36LGKYtI59s6vFm5yV2qFxQyVPrk4mi3Y+neqlBw==
"@abp/utils@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0.tgz#ccbfed6591ab11466bf3fed740c8422acf6a84df"
integrity sha512-I5yjM1ovqcpBAT2LFOfwLibVE0Ql6XbP3tQj6YMEZ/foDXekn/4P6Spgq5DTZCMo+0jskS0D8NfL7Ce4p89buw==
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": "^3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.basic": "^3.1.0"
}
}

2
modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/utils/abp-utils.umd.js.map

File diff suppressed because one or more lines are too long

2
modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map

File diff suppressed because one or more lines are too long

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

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0-rc.3.tgz#d7e3ad928a72efb7c76a585ef051fce860efb7bf"
integrity sha512-cc2Wp/6hr1j89Ap/474HlH54WhAIgCya1buuXxrxXSMdYqDKNxK61aMYC/mnYGMiyPqoz6TWWUJB2h2dZeTgzQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0-rc.3.tgz#54a92d673f5158ee222d0d95ebfbca6c63b20a4f"
integrity sha512-czS+8+wuNxuNIogI3FI/T72dCumpbsXp9Fke9pwQEzkCZZCG11cJdOCr1pLJKT1G54x+zfgwVVFIL36sFcq50A==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0-rc.3"
"@abp/bootstrap" "~3.1.0-rc.3"
"@abp/bootstrap-datepicker" "~3.1.0-rc.3"
"@abp/datatables.net-bs4" "~3.1.0-rc.3"
"@abp/font-awesome" "~3.1.0-rc.3"
"@abp/jquery-form" "~3.1.0-rc.3"
"@abp/jquery-validation-unobtrusive" "~3.1.0-rc.3"
"@abp/lodash" "~3.1.0-rc.3"
"@abp/luxon" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/select2" "~3.1.0-rc.3"
"@abp/sweetalert" "~3.1.0-rc.3"
"@abp/timeago" "~3.1.0-rc.3"
"@abp/toastr" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0-rc.3.tgz#e26f8ff9d7beaedf2050b9d6319e6368c990c373"
integrity sha512-qglA2lW0eQFzZlGeAev+vGuWsHNFmDeSCGAHPhd4Z07zjnphPnIOXSa+rXhb+4y6DevQP7OY/KSMQdX6ZMU3RQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0.tgz#5f1f308621cced2f0a4272fe612f485558bcab07"
integrity sha512-zaRw34HwEESbYPYPsn0wH4lE4o9PuwJzovS1T2vmRg8wDgeOSkxC7uFU5If1QcFHuADkI3jfsyk8Xe9nEqz2Jg==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0.tgz#9a9cc4a2c2bdfada9c69e35e15cc5491f1256712"
integrity sha512-DnLebcBACGTlCyJ05CRP3KXCGqWw1X3aXsdDnqQlohrLGwZHxDMZfS8HswhclG2Ak44MQn/4VtuUqRAs1PKlLg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0"
"@abp/bootstrap" "~3.1.0"
"@abp/bootstrap-datepicker" "~3.1.0"
"@abp/datatables.net-bs4" "~3.1.0"
"@abp/font-awesome" "~3.1.0"
"@abp/jquery-form" "~3.1.0"
"@abp/jquery-validation-unobtrusive" "~3.1.0"
"@abp/lodash" "~3.1.0"
"@abp/luxon" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/select2" "~3.1.0"
"@abp/sweetalert" "~3.1.0"
"@abp/timeago" "~3.1.0"
"@abp/toastr" "~3.1.0"
"@abp/aspnetcore.mvc.ui@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0.tgz#4a80efec4d1c41d266af919068dfbb6f6324fa7f"
integrity sha512-y6kVikbuCJlQbAvMdA/j2DwxLX0Fv8rRhjmmfr/ocEDrMridt1a5rO5JqDab8WvJKJjDudoobf1mSk9ZNxtyvQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,144 +41,144 @@
path "^0.12.7"
rimraf "^3.0.2"
"@abp/bootstrap-datepicker@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0-rc.3.tgz#279d9603cd916a884bac125cb525ee44fb809762"
integrity sha512-qZolOk2Pw+IvXh6Ko7wJddzMVPbS8silGecBZMYe0DVRNovg0515Px8zR3GJ16wcVQuvG6ByBn4fdeKFmYfokQ==
"@abp/bootstrap-datepicker@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0.tgz#47198667eafa4a920dd72f38a22452bdeadf0edd"
integrity sha512-yBmEuiorGNa5LSvjXfVGJ/CLlW/fGwij07I+gbGnwY0gVp4ydfA15LJfuCdfHBo2ZIDFXe7hQuVYFEH1gbLpkA==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0-rc.3.tgz#a1368df757995f52c19dd76ef1846d19a067def6"
integrity sha512-r8XRTYJBEa33FVxF+Mg0ALYNhmTjVBw1NQIQY8Ub5ZR+HIZoaDqA0X5zfAKvGQlmfXLiZJDkvCV5EIQWsIgnrA==
"@abp/bootstrap@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0.tgz#7bd7b81a67712154fa12d01b6051e71f316be048"
integrity sha512-I64cCBo0OS14A29y/dEhKBPeXPt1djNoxZo4OXhHZAAmOM3fP3t8y9nDNCr3L2r6/FT8RQH7AW0/jJjER94KvA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0-rc.3.tgz#7e1bd9ac9aaecfc66863e8e319975358885a3ca2"
integrity sha512-wIvm4l8ZDQ+eiNN1a+v07EjUhngrxwPWvfDf9bPQpepfnIKiAktJziihh0oBJAbqXNqmI7f6FGN76spvNop/EA==
"@abp/core@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0.tgz#13ce01a68f0e2e9ab976f30d7bf892a9037af4f7"
integrity sha512-hLN0W5/0PuyIBIGxmLQvnbec0eBlXB1vS7YqrmiMv0WPgnHXx36FXfUUuX74JHTfTQFMGWL3EOrzm6UBe2+0VA==
dependencies:
"@abp/utils" "^3.1.0-rc.3"
"@abp/utils" "^3.1.0"
"@abp/datatables.net-bs4@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0-rc.3.tgz#f46c4474635918c16ca7edbe4930c07317930592"
integrity sha512-FeN53p5U2hIyYyM3G3AuGSwBZFBGbx4yHb/ymW/DEGtJ6XtynHlsFPz00/PktLe0OKOjUxOUf2LQLqKJi83WQQ==
"@abp/datatables.net-bs4@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0.tgz#c8033ffff1a360c6cb98f8871ecec5d8f94c3ef6"
integrity sha512-3xx3Er8i8IJ/mYEYl+MxGyY+sZo965f0MCoIAGPV7dNuULfiNYPhvym+4LXzocRZUlF4qrXxXPLo3njiCQNAUQ==
dependencies:
"@abp/datatables.net" "~3.1.0-rc.3"
"@abp/datatables.net" "~3.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0-rc.3.tgz#c3a8f81d5ee571445b01d2db0e05ed555b1459b8"
integrity sha512-sOWuVwvSoQlXqC9CC9HGH6HzdHb5vVX8CbqzIUYBJEzY4NBRUqeclFJQrA/thjMNtefdLD2AiVwPFmAdGBeDSg==
"@abp/datatables.net@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0.tgz#db4fe94cf4216a59a3121d0d38b57092d7524f2a"
integrity sha512-9av6Dk1qEMAahjZCEn3hAP9mNCvr8HBcYBEqhGMACCk+rLjAJgzKKzV80cvlerg1VGoBTdQ0NgN22ywsWqDyOg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0-rc.3.tgz#38f63ad4fadc4986a73116fa29d5ef56812c483c"
integrity sha512-BnrI9XaKxEvI0d6Fa9tbw1J/VAsVUqTyAHva4WTUUa+neB9gaK62ZUjgDdF8Eo6gj7UOO8DYvsXehzpVpZKlPQ==
"@abp/font-awesome@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0.tgz#00792619894b8d0f15801df641ee57eda1d7cdba"
integrity sha512-fRd8QtVmfBiEoQpYgvVoNUcoyje3mtGqfIVtzeH2wnwEWKEO8SFfMcuWetyY2pk06VgpRnKNHGumyHnaNTCiUQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0-rc.3.tgz#7b74828f32a641c0b1ef1fd8b0389bf994a09e16"
integrity sha512-G+YRnDRZe5Mw81NAEnnr8scGjupndcu9xZ1dw+hCFGg30yypiUIfHtrMR4iR94y7M198fAgQP+0k7RvDqnALiw==
"@abp/jquery-form@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0.tgz#d095dea5200a13714dddd4ff1067126a01944440"
integrity sha512-Bs1BJ1coJMC8kFme9SffIicUSx7ULGzvdHfatzEbL6oH7KCSU/smBRTdAuZ/l85Qfftd0C6R9ibXehgKlagQKw==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0-rc.3.tgz#aef83e8f11791ae7be449eab6655a73075f98b45"
integrity sha512-uWu6qdZasSZEFJC1IhEtj8NZq5kXX8W/zlK2tVpFhjxE/QYiJlPj8pVy2I7cuEIBghzAO2omwI+5En8TSagrGA==
"@abp/jquery-validation-unobtrusive@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0.tgz#c4a6e99f8cadc437b83574fbb2437beaccb23241"
integrity sha512-WpZPnfx0MR9E1c7TB9M/hU4AkToTaPsLg+P7HfCihB6g7SVrjdLxP4w90lIejro3raK2BjU4726FHqgFQSygTA==
dependencies:
"@abp/jquery-validation" "~3.1.0-rc.3"
"@abp/jquery-validation" "~3.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0-rc.3.tgz#40dcb28ce5a3a87fc69972053e48a456c84e3225"
integrity sha512-uaL+ZS/NTf103Hq3ehayFT1qvq/Y2T5PAFY9ijBvX+7phCtPwGiIPfUvyuwYnKbdTa15odC275e7pY2CssHWIA==
"@abp/jquery-validation@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0.tgz#ace497b864df008385a2fcabf6ef7e014a663a1d"
integrity sha512-kq36uSs54SVTYcGsy/CQZlIW98mfmhfNOHsnxn/W4U1prMSZdH7yegCEfHlHN2ERtubD6UEWHxx5D1JUyDsmvg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0-rc.3.tgz#8c35b9e7de888516e2acc5227092ca2fed991475"
integrity sha512-DT2uBNfW3+Xc1Bz62WHdIC3JfAb2Qcc4p86LyDG5pNRAd3FpImA1VnRPsMRX9Mig7HYRjMYiuYXTeovM6YS0fg==
"@abp/jquery@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0.tgz#e110148d13478ea86de8cff092164d7bd7a9ef63"
integrity sha512-8QzEMTHW0HNYrQbC11w28DxD3jGdaWlrGvAExmitBYIv9i1BYg/6M4bcKOVJPhiQoR50aCe+6xInFhNgfRNBCw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
jquery "~3.5.1"
"@abp/lodash@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0-rc.3.tgz#a312975824fa3bebc00f5eca35cededc5ec3af4b"
integrity sha512-siv5cMWlUHEX2RtvKCGoX2cEh4h1hniluKlFgmVmYY4hdGYdAG4T2d9QQAbPODwdzrJ8jzI36hXT/P4IrzhWZw==
"@abp/lodash@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0.tgz#a4175342b4fc14a92b8344ea783554c40e4e450c"
integrity sha512-RVclkRFjrjPtNVaAPJVPJJmI9QFbc2vZfwG+utDV4aZzytZOgESN8q8IbOGaCIj8KzvX1LeBSqvDRP81l9c5Tg==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
lodash "^4.17.15"
"@abp/luxon@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0-rc.3.tgz#9b9d5c9827a0c661458094134cafd80f35537a69"
integrity sha512-cKj/irXJhTJ6WiSyjzcZcsDjKFji1Q/0nV7IYhY9e2wzpg3qEB8Z8k8fDLPDAUriUKxBoI6mQ/CVC0ah7eg/LA==
"@abp/luxon@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0.tgz#867f4395315b0727b39f9b5a5f4dc9bca7cfafde"
integrity sha512-Pf+g5yGCqKDEhGMM/V75zX/8pPJUoIv7xJdF9sLRTERr5NpsS8/23DZIn2KmzbNLThHDkAmayBxHZko4Ri1ykw==
dependencies:
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0-rc.3.tgz#218eb620532af8bdde6a46388a3d5349974fab44"
integrity sha512-z3IzgSYtpZ2FlWNmM2A1wbP3CHB3P5a8k/JR0JSWwtl+D/LiYC348VQIXen+pIJoEjMlY48iSi5XNyBIz4X9hw==
"@abp/malihu-custom-scrollbar-plugin@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0.tgz#eab16ac9cddfbe9982baf946a468718dee34589e"
integrity sha512-/6TXbzyUh8qSMwZss1tTWkAeAnrAvSHeJRF32iVCYx769+6HJ4QZt1BWyT6/jgAdEHZspePh1+xAsrPRDZJ5aA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0-rc.3.tgz#493afc27f29da1c9926ee02e8f7b641e8ee4b67e"
integrity sha512-fym9GmQbl34CyTCVzfo4jGe77nSeDuRPYMzAYO8p0uKdDB8t9jNZNqhYJ9Ee5KQXJyg4lmFFPkLcRZF14E+cWw==
"@abp/select2@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0.tgz#459386918f15c591549e7c5b1d411536f781c2a0"
integrity sha512-I0dOXi9oPdzWQVZ5s4Lo4q6tTezQuqXSzZClmnJaQzkf7pCftnji+S727bkUIjwjkFAsT/YNMBCzgJBaiHS3uQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0-rc.3.tgz#1c1421e2baaa57cc24e0f9334a5173836819cc24"
integrity sha512-WrYRutXM2f6VRECEkWhjfqtQXlnEw88MCkYicAhyMH7ZYYWg7r9xVg9TRJJI4UwGMLSyR3EB+ZdTmnD8aSC0yQ==
"@abp/sweetalert@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0.tgz#498df5abb8f68b660cd37f10e287188b6417c3ff"
integrity sha512-9YxVZQfrsGWdVmKeWAG4CoD+B0VObR94SsQQgUiYcl/07PPDxDPZHX/sh1H+pqHXv9/qpPOTS3/PCQAeIfuG/w==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0-rc.3.tgz#0a7a369ba29633f00b19206b257c6f1f59f182a4"
integrity sha512-FDgaQCJmwWplCcdJYa9kyCcMxJFrKf+zDEFzT5hWfhMzq+sYJYX7QDQtbF5OJnMSWuPyI0/RU0bocuGaJ584VQ==
"@abp/timeago@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0.tgz#abae5287e01d36107516416256a1ccfcb0ca7953"
integrity sha512-xVOq5/5l/0w9vmWIF7dZzqa+7nl7NNG7ER8gbrdPOX86rCsD12DIOkFDLi+Q41kxzp7wbphDZIT/7RsPrhgDDQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
timeago "^1.6.7"
"@abp/toastr@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0-rc.3.tgz#89af6aa864a9aac76bc9bf21b7f9bc6763ca7573"
integrity sha512-AeKH5imy8W9yMAlzRv9VdkRHApySpR2BKfrQYk3q9LubgwaxLvOFc/l38aIEKuyosN7dHTMFBQlEwLxWFwaoPA==
"@abp/toastr@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0.tgz#cebbb95c1f0b36306a0a58215dfda48a3ebe5f20"
integrity sha512-94PqZmbayVJnDKMrqbVhW0Z3D/sL3sV5gXfd53Ac5KNQvsBmQZ5/SvuuwuDzWYMQm0XwZ1h4fLAiTuoBMIxWCQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
toastr "^2.1.4"
"@abp/utils@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a"
integrity sha512-45KXx5zlxm5gK2EFwzM+hMjT8q8pD3PejyNfVP6HBbGE2N36LGKYtI59s6vFm5yV2qFxQyVPrk4mi3Y+neqlBw==
"@abp/utils@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0.tgz#ccbfed6591ab11466bf3fed740c8422acf6a84df"
integrity sha512-I5yjM1ovqcpBAT2LFOfwLibVE0Ql6XbP3tQj6YMEZ/foDXekn/4P6Spgq5DTZCMo+0jskS0D8NfL7Ce4p89buw==
dependencies:
just-compare "^1.3.0"

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

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

2
modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/utils/abp-utils.umd.js.map

File diff suppressed because one or more lines are too long

2
modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map

File diff suppressed because one or more lines are too long

236
modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock

@ -2,37 +2,37 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0-rc.3.tgz#d7e3ad928a72efb7c76a585ef051fce860efb7bf"
integrity sha512-cc2Wp/6hr1j89Ap/474HlH54WhAIgCya1buuXxrxXSMdYqDKNxK61aMYC/mnYGMiyPqoz6TWWUJB2h2dZeTgzQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0-rc.3.tgz#54a92d673f5158ee222d0d95ebfbca6c63b20a4f"
integrity sha512-czS+8+wuNxuNIogI3FI/T72dCumpbsXp9Fke9pwQEzkCZZCG11cJdOCr1pLJKT1G54x+zfgwVVFIL36sFcq50A==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0-rc.3"
"@abp/bootstrap" "~3.1.0-rc.3"
"@abp/bootstrap-datepicker" "~3.1.0-rc.3"
"@abp/datatables.net-bs4" "~3.1.0-rc.3"
"@abp/font-awesome" "~3.1.0-rc.3"
"@abp/jquery-form" "~3.1.0-rc.3"
"@abp/jquery-validation-unobtrusive" "~3.1.0-rc.3"
"@abp/lodash" "~3.1.0-rc.3"
"@abp/luxon" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/select2" "~3.1.0-rc.3"
"@abp/sweetalert" "~3.1.0-rc.3"
"@abp/timeago" "~3.1.0-rc.3"
"@abp/toastr" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0-rc.3.tgz#e26f8ff9d7beaedf2050b9d6319e6368c990c373"
integrity sha512-qglA2lW0eQFzZlGeAev+vGuWsHNFmDeSCGAHPhd4Z07zjnphPnIOXSa+rXhb+4y6DevQP7OY/KSMQdX6ZMU3RQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0.tgz#5f1f308621cced2f0a4272fe612f485558bcab07"
integrity sha512-zaRw34HwEESbYPYPsn0wH4lE4o9PuwJzovS1T2vmRg8wDgeOSkxC7uFU5If1QcFHuADkI3jfsyk8Xe9nEqz2Jg==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0.tgz#9a9cc4a2c2bdfada9c69e35e15cc5491f1256712"
integrity sha512-DnLebcBACGTlCyJ05CRP3KXCGqWw1X3aXsdDnqQlohrLGwZHxDMZfS8HswhclG2Ak44MQn/4VtuUqRAs1PKlLg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0"
"@abp/bootstrap" "~3.1.0"
"@abp/bootstrap-datepicker" "~3.1.0"
"@abp/datatables.net-bs4" "~3.1.0"
"@abp/font-awesome" "~3.1.0"
"@abp/jquery-form" "~3.1.0"
"@abp/jquery-validation-unobtrusive" "~3.1.0"
"@abp/lodash" "~3.1.0"
"@abp/luxon" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/select2" "~3.1.0"
"@abp/sweetalert" "~3.1.0"
"@abp/timeago" "~3.1.0"
"@abp/toastr" "~3.1.0"
"@abp/aspnetcore.mvc.ui@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0.tgz#4a80efec4d1c41d266af919068dfbb6f6324fa7f"
integrity sha512-y6kVikbuCJlQbAvMdA/j2DwxLX0Fv8rRhjmmfr/ocEDrMridt1a5rO5JqDab8WvJKJjDudoobf1mSk9ZNxtyvQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -41,144 +41,144 @@
path "^0.12.7"
rimraf "^3.0.2"
"@abp/bootstrap-datepicker@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0-rc.3.tgz#279d9603cd916a884bac125cb525ee44fb809762"
integrity sha512-qZolOk2Pw+IvXh6Ko7wJddzMVPbS8silGecBZMYe0DVRNovg0515Px8zR3GJ16wcVQuvG6ByBn4fdeKFmYfokQ==
"@abp/bootstrap-datepicker@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0.tgz#47198667eafa4a920dd72f38a22452bdeadf0edd"
integrity sha512-yBmEuiorGNa5LSvjXfVGJ/CLlW/fGwij07I+gbGnwY0gVp4ydfA15LJfuCdfHBo2ZIDFXe7hQuVYFEH1gbLpkA==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0-rc.3.tgz#a1368df757995f52c19dd76ef1846d19a067def6"
integrity sha512-r8XRTYJBEa33FVxF+Mg0ALYNhmTjVBw1NQIQY8Ub5ZR+HIZoaDqA0X5zfAKvGQlmfXLiZJDkvCV5EIQWsIgnrA==
"@abp/bootstrap@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0.tgz#7bd7b81a67712154fa12d01b6051e71f316be048"
integrity sha512-I64cCBo0OS14A29y/dEhKBPeXPt1djNoxZo4OXhHZAAmOM3fP3t8y9nDNCr3L2r6/FT8RQH7AW0/jJjER94KvA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/core@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0-rc.3.tgz#7e1bd9ac9aaecfc66863e8e319975358885a3ca2"
integrity sha512-wIvm4l8ZDQ+eiNN1a+v07EjUhngrxwPWvfDf9bPQpepfnIKiAktJziihh0oBJAbqXNqmI7f6FGN76spvNop/EA==
"@abp/core@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0.tgz#13ce01a68f0e2e9ab976f30d7bf892a9037af4f7"
integrity sha512-hLN0W5/0PuyIBIGxmLQvnbec0eBlXB1vS7YqrmiMv0WPgnHXx36FXfUUuX74JHTfTQFMGWL3EOrzm6UBe2+0VA==
dependencies:
"@abp/utils" "^3.1.0-rc.3"
"@abp/utils" "^3.1.0"
"@abp/datatables.net-bs4@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0-rc.3.tgz#f46c4474635918c16ca7edbe4930c07317930592"
integrity sha512-FeN53p5U2hIyYyM3G3AuGSwBZFBGbx4yHb/ymW/DEGtJ6XtynHlsFPz00/PktLe0OKOjUxOUf2LQLqKJi83WQQ==
"@abp/datatables.net-bs4@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0.tgz#c8033ffff1a360c6cb98f8871ecec5d8f94c3ef6"
integrity sha512-3xx3Er8i8IJ/mYEYl+MxGyY+sZo965f0MCoIAGPV7dNuULfiNYPhvym+4LXzocRZUlF4qrXxXPLo3njiCQNAUQ==
dependencies:
"@abp/datatables.net" "~3.1.0-rc.3"
"@abp/datatables.net" "~3.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0-rc.3.tgz#c3a8f81d5ee571445b01d2db0e05ed555b1459b8"
integrity sha512-sOWuVwvSoQlXqC9CC9HGH6HzdHb5vVX8CbqzIUYBJEzY4NBRUqeclFJQrA/thjMNtefdLD2AiVwPFmAdGBeDSg==
"@abp/datatables.net@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0.tgz#db4fe94cf4216a59a3121d0d38b57092d7524f2a"
integrity sha512-9av6Dk1qEMAahjZCEn3hAP9mNCvr8HBcYBEqhGMACCk+rLjAJgzKKzV80cvlerg1VGoBTdQ0NgN22ywsWqDyOg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
datatables.net "^1.10.21"
"@abp/font-awesome@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0-rc.3.tgz#38f63ad4fadc4986a73116fa29d5ef56812c483c"
integrity sha512-BnrI9XaKxEvI0d6Fa9tbw1J/VAsVUqTyAHva4WTUUa+neB9gaK62ZUjgDdF8Eo6gj7UOO8DYvsXehzpVpZKlPQ==
"@abp/font-awesome@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0.tgz#00792619894b8d0f15801df641ee57eda1d7cdba"
integrity sha512-fRd8QtVmfBiEoQpYgvVoNUcoyje3mtGqfIVtzeH2wnwEWKEO8SFfMcuWetyY2pk06VgpRnKNHGumyHnaNTCiUQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0-rc.3.tgz#7b74828f32a641c0b1ef1fd8b0389bf994a09e16"
integrity sha512-G+YRnDRZe5Mw81NAEnnr8scGjupndcu9xZ1dw+hCFGg30yypiUIfHtrMR4iR94y7M198fAgQP+0k7RvDqnALiw==
"@abp/jquery-form@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0.tgz#d095dea5200a13714dddd4ff1067126a01944440"
integrity sha512-Bs1BJ1coJMC8kFme9SffIicUSx7ULGzvdHfatzEbL6oH7KCSU/smBRTdAuZ/l85Qfftd0C6R9ibXehgKlagQKw==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0-rc.3.tgz#aef83e8f11791ae7be449eab6655a73075f98b45"
integrity sha512-uWu6qdZasSZEFJC1IhEtj8NZq5kXX8W/zlK2tVpFhjxE/QYiJlPj8pVy2I7cuEIBghzAO2omwI+5En8TSagrGA==
"@abp/jquery-validation-unobtrusive@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0.tgz#c4a6e99f8cadc437b83574fbb2437beaccb23241"
integrity sha512-WpZPnfx0MR9E1c7TB9M/hU4AkToTaPsLg+P7HfCihB6g7SVrjdLxP4w90lIejro3raK2BjU4726FHqgFQSygTA==
dependencies:
"@abp/jquery-validation" "~3.1.0-rc.3"
"@abp/jquery-validation" "~3.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0-rc.3.tgz#40dcb28ce5a3a87fc69972053e48a456c84e3225"
integrity sha512-uaL+ZS/NTf103Hq3ehayFT1qvq/Y2T5PAFY9ijBvX+7phCtPwGiIPfUvyuwYnKbdTa15odC275e7pY2CssHWIA==
"@abp/jquery-validation@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0.tgz#ace497b864df008385a2fcabf6ef7e014a663a1d"
integrity sha512-kq36uSs54SVTYcGsy/CQZlIW98mfmhfNOHsnxn/W4U1prMSZdH7yegCEfHlHN2ERtubD6UEWHxx5D1JUyDsmvg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0-rc.3.tgz#8c35b9e7de888516e2acc5227092ca2fed991475"
integrity sha512-DT2uBNfW3+Xc1Bz62WHdIC3JfAb2Qcc4p86LyDG5pNRAd3FpImA1VnRPsMRX9Mig7HYRjMYiuYXTeovM6YS0fg==
"@abp/jquery@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0.tgz#e110148d13478ea86de8cff092164d7bd7a9ef63"
integrity sha512-8QzEMTHW0HNYrQbC11w28DxD3jGdaWlrGvAExmitBYIv9i1BYg/6M4bcKOVJPhiQoR50aCe+6xInFhNgfRNBCw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
jquery "~3.5.1"
"@abp/lodash@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0-rc.3.tgz#a312975824fa3bebc00f5eca35cededc5ec3af4b"
integrity sha512-siv5cMWlUHEX2RtvKCGoX2cEh4h1hniluKlFgmVmYY4hdGYdAG4T2d9QQAbPODwdzrJ8jzI36hXT/P4IrzhWZw==
"@abp/lodash@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0.tgz#a4175342b4fc14a92b8344ea783554c40e4e450c"
integrity sha512-RVclkRFjrjPtNVaAPJVPJJmI9QFbc2vZfwG+utDV4aZzytZOgESN8q8IbOGaCIj8KzvX1LeBSqvDRP81l9c5Tg==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
lodash "^4.17.15"
"@abp/luxon@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0-rc.3.tgz#9b9d5c9827a0c661458094134cafd80f35537a69"
integrity sha512-cKj/irXJhTJ6WiSyjzcZcsDjKFji1Q/0nV7IYhY9e2wzpg3qEB8Z8k8fDLPDAUriUKxBoI6mQ/CVC0ah7eg/LA==
"@abp/luxon@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0.tgz#867f4395315b0727b39f9b5a5f4dc9bca7cfafde"
integrity sha512-Pf+g5yGCqKDEhGMM/V75zX/8pPJUoIv7xJdF9sLRTERr5NpsS8/23DZIn2KmzbNLThHDkAmayBxHZko4Ri1ykw==
dependencies:
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0-rc.3.tgz#218eb620532af8bdde6a46388a3d5349974fab44"
integrity sha512-z3IzgSYtpZ2FlWNmM2A1wbP3CHB3P5a8k/JR0JSWwtl+D/LiYC348VQIXen+pIJoEjMlY48iSi5XNyBIz4X9hw==
"@abp/malihu-custom-scrollbar-plugin@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0.tgz#eab16ac9cddfbe9982baf946a468718dee34589e"
integrity sha512-/6TXbzyUh8qSMwZss1tTWkAeAnrAvSHeJRF32iVCYx769+6HJ4QZt1BWyT6/jgAdEHZspePh1+xAsrPRDZJ5aA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/select2@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0-rc.3.tgz#493afc27f29da1c9926ee02e8f7b641e8ee4b67e"
integrity sha512-fym9GmQbl34CyTCVzfo4jGe77nSeDuRPYMzAYO8p0uKdDB8t9jNZNqhYJ9Ee5KQXJyg4lmFFPkLcRZF14E+cWw==
"@abp/select2@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0.tgz#459386918f15c591549e7c5b1d411536f781c2a0"
integrity sha512-I0dOXi9oPdzWQVZ5s4Lo4q6tTezQuqXSzZClmnJaQzkf7pCftnji+S727bkUIjwjkFAsT/YNMBCzgJBaiHS3uQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0-rc.3.tgz#1c1421e2baaa57cc24e0f9334a5173836819cc24"
integrity sha512-WrYRutXM2f6VRECEkWhjfqtQXlnEw88MCkYicAhyMH7ZYYWg7r9xVg9TRJJI4UwGMLSyR3EB+ZdTmnD8aSC0yQ==
"@abp/sweetalert@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0.tgz#498df5abb8f68b660cd37f10e287188b6417c3ff"
integrity sha512-9YxVZQfrsGWdVmKeWAG4CoD+B0VObR94SsQQgUiYcl/07PPDxDPZHX/sh1H+pqHXv9/qpPOTS3/PCQAeIfuG/w==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0-rc.3.tgz#0a7a369ba29633f00b19206b257c6f1f59f182a4"
integrity sha512-FDgaQCJmwWplCcdJYa9kyCcMxJFrKf+zDEFzT5hWfhMzq+sYJYX7QDQtbF5OJnMSWuPyI0/RU0bocuGaJ584VQ==
"@abp/timeago@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0.tgz#abae5287e01d36107516416256a1ccfcb0ca7953"
integrity sha512-xVOq5/5l/0w9vmWIF7dZzqa+7nl7NNG7ER8gbrdPOX86rCsD12DIOkFDLi+Q41kxzp7wbphDZIT/7RsPrhgDDQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
timeago "^1.6.7"
"@abp/toastr@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0-rc.3.tgz#89af6aa864a9aac76bc9bf21b7f9bc6763ca7573"
integrity sha512-AeKH5imy8W9yMAlzRv9VdkRHApySpR2BKfrQYk3q9LubgwaxLvOFc/l38aIEKuyosN7dHTMFBQlEwLxWFwaoPA==
"@abp/toastr@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0.tgz#cebbb95c1f0b36306a0a58215dfda48a3ebe5f20"
integrity sha512-94PqZmbayVJnDKMrqbVhW0Z3D/sL3sV5gXfd53Ac5KNQvsBmQZ5/SvuuwuDzWYMQm0XwZ1h4fLAiTuoBMIxWCQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
toastr "^2.1.4"
"@abp/utils@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a"
integrity sha512-45KXx5zlxm5gK2EFwzM+hMjT8q8pD3PejyNfVP6HBbGE2N36LGKYtI59s6vFm5yV2qFxQyVPrk4mi3Y+neqlBw==
"@abp/utils@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0.tgz#ccbfed6591ab11466bf3fed740c8422acf6a84df"
integrity sha512-I5yjM1ovqcpBAT2LFOfwLibVE0Ql6XbP3tQj6YMEZ/foDXekn/4P6Spgq5DTZCMo+0jskS0D8NfL7Ce4p89buw==
dependencies:
just-compare "^1.3.0"

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

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

2
modules/docs/app/VoloDocs.Web/wwwroot/libs/abp/utils/abp-utils.umd.js.map

File diff suppressed because one or more lines are too long

2
modules/docs/app/VoloDocs.Web/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map

File diff suppressed because one or more lines are too long

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

@ -2,45 +2,45 @@
# yarn lockfile v1
"@abp/anchor-js@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-3.1.0-rc.3.tgz#839562d155fe9d026328da64a14e354c00090856"
integrity sha512-5NhcK1wZQlfE9gJ679DD3KsnYOigCHCqSGdwOQZn7gzGWNKnhCnzsnjAyh32lL9tNHTHMKkydVr6kJ5LU6Yr1Q==
"@abp/anchor-js@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-3.1.0.tgz#ef19fb00dee826f7ec13a17d4ff8917b8a7ad3d8"
integrity sha512-L4Oow3fk7AoiBxEXhGY2C9aYyuC0QYWMrXVbllWfFKZVwItErI3ItNQjgVGOAk2k5D8ahEYEtp+KnlZm6ROW2Q==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
anchor-js "^4.2.2"
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0-rc.3.tgz#d7e3ad928a72efb7c76a585ef051fce860efb7bf"
integrity sha512-cc2Wp/6hr1j89Ap/474HlH54WhAIgCya1buuXxrxXSMdYqDKNxK61aMYC/mnYGMiyPqoz6TWWUJB2h2dZeTgzQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0-rc.3.tgz#54a92d673f5158ee222d0d95ebfbca6c63b20a4f"
integrity sha512-czS+8+wuNxuNIogI3FI/T72dCumpbsXp9Fke9pwQEzkCZZCG11cJdOCr1pLJKT1G54x+zfgwVVFIL36sFcq50A==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0-rc.3"
"@abp/bootstrap" "~3.1.0-rc.3"
"@abp/bootstrap-datepicker" "~3.1.0-rc.3"
"@abp/datatables.net-bs4" "~3.1.0-rc.3"
"@abp/font-awesome" "~3.1.0-rc.3"
"@abp/jquery-form" "~3.1.0-rc.3"
"@abp/jquery-validation-unobtrusive" "~3.1.0-rc.3"
"@abp/lodash" "~3.1.0-rc.3"
"@abp/luxon" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/select2" "~3.1.0-rc.3"
"@abp/sweetalert" "~3.1.0-rc.3"
"@abp/timeago" "~3.1.0-rc.3"
"@abp/toastr" "~3.1.0-rc.3"
"@abp/aspnetcore.mvc.ui@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0-rc.3.tgz#e26f8ff9d7beaedf2050b9d6319e6368c990c373"
integrity sha512-qglA2lW0eQFzZlGeAev+vGuWsHNFmDeSCGAHPhd4Z07zjnphPnIOXSa+rXhb+4y6DevQP7OY/KSMQdX6ZMU3RQ==
"@abp/aspnetcore.mvc.ui.theme.basic@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.1.0.tgz#5f1f308621cced2f0a4272fe612f485558bcab07"
integrity sha512-zaRw34HwEESbYPYPsn0wH4lE4o9PuwJzovS1T2vmRg8wDgeOSkxC7uFU5If1QcFHuADkI3jfsyk8Xe9nEqz2Jg==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~3.1.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.1.0.tgz#9a9cc4a2c2bdfada9c69e35e15cc5491f1256712"
integrity sha512-DnLebcBACGTlCyJ05CRP3KXCGqWw1X3aXsdDnqQlohrLGwZHxDMZfS8HswhclG2Ak44MQn/4VtuUqRAs1PKlLg==
dependencies:
"@abp/aspnetcore.mvc.ui" "~3.1.0"
"@abp/bootstrap" "~3.1.0"
"@abp/bootstrap-datepicker" "~3.1.0"
"@abp/datatables.net-bs4" "~3.1.0"
"@abp/font-awesome" "~3.1.0"
"@abp/jquery-form" "~3.1.0"
"@abp/jquery-validation-unobtrusive" "~3.1.0"
"@abp/lodash" "~3.1.0"
"@abp/luxon" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/select2" "~3.1.0"
"@abp/sweetalert" "~3.1.0"
"@abp/timeago" "~3.1.0"
"@abp/toastr" "~3.1.0"
"@abp/aspnetcore.mvc.ui@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.1.0.tgz#4a80efec4d1c41d266af919068dfbb6f6324fa7f"
integrity sha512-y6kVikbuCJlQbAvMdA/j2DwxLX0Fv8rRhjmmfr/ocEDrMridt1a5rO5JqDab8WvJKJjDudoobf1mSk9ZNxtyvQ==
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -49,180 +49,180 @@
path "^0.12.7"
rimraf "^3.0.2"
"@abp/bootstrap-datepicker@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0-rc.3.tgz#279d9603cd916a884bac125cb525ee44fb809762"
integrity sha512-qZolOk2Pw+IvXh6Ko7wJddzMVPbS8silGecBZMYe0DVRNovg0515Px8zR3GJ16wcVQuvG6ByBn4fdeKFmYfokQ==
"@abp/bootstrap-datepicker@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.1.0.tgz#47198667eafa4a920dd72f38a22452bdeadf0edd"
integrity sha512-yBmEuiorGNa5LSvjXfVGJ/CLlW/fGwij07I+gbGnwY0gVp4ydfA15LJfuCdfHBo2ZIDFXe7hQuVYFEH1gbLpkA==
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0-rc.3.tgz#a1368df757995f52c19dd76ef1846d19a067def6"
integrity sha512-r8XRTYJBEa33FVxF+Mg0ALYNhmTjVBw1NQIQY8Ub5ZR+HIZoaDqA0X5zfAKvGQlmfXLiZJDkvCV5EIQWsIgnrA==
"@abp/bootstrap@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.1.0.tgz#7bd7b81a67712154fa12d01b6051e71f316be048"
integrity sha512-I64cCBo0OS14A29y/dEhKBPeXPt1djNoxZo4OXhHZAAmOM3fP3t8y9nDNCr3L2r6/FT8RQH7AW0/jJjER94KvA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
bootstrap "^4.5.0"
bootstrap-v4-rtl "4.4.1-2"
"@abp/clipboard@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.1.0-rc.3.tgz#40f0a95298cf9d7097d8e7f96e42c181e5a9907b"
integrity sha512-efCjrAHN3d7zmq4eVzlT4H/s6K11I9K7hv4fIJP6fbZKDoXi5hzTv2+dt9JRDWAra+s87PdBJq7AEWNs6ONiGg==
"@abp/clipboard@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.1.0.tgz#3d994bee312beb3f4977e734a2e4da98b8617279"
integrity sha512-HE9X86G471eOJYrVEM9NIJFLjzvfiW0vtqj4gGjhrwAPin2p44Jby5r8UGOKFY1wr/qZQbbuwmhVih78maDwIA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
clipboard "^2.0.6"
"@abp/core@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0-rc.3.tgz#7e1bd9ac9aaecfc66863e8e319975358885a3ca2"
integrity sha512-wIvm4l8ZDQ+eiNN1a+v07EjUhngrxwPWvfDf9bPQpepfnIKiAktJziihh0oBJAbqXNqmI7f6FGN76spvNop/EA==
"@abp/core@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.1.0.tgz#13ce01a68f0e2e9ab976f30d7bf892a9037af4f7"
integrity sha512-hLN0W5/0PuyIBIGxmLQvnbec0eBlXB1vS7YqrmiMv0WPgnHXx36FXfUUuX74JHTfTQFMGWL3EOrzm6UBe2+0VA==
dependencies:
"@abp/utils" "^3.1.0-rc.3"
"@abp/utils" "^3.1.0"
"@abp/datatables.net-bs4@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0-rc.3.tgz#f46c4474635918c16ca7edbe4930c07317930592"
integrity sha512-FeN53p5U2hIyYyM3G3AuGSwBZFBGbx4yHb/ymW/DEGtJ6XtynHlsFPz00/PktLe0OKOjUxOUf2LQLqKJi83WQQ==
"@abp/datatables.net-bs4@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.1.0.tgz#c8033ffff1a360c6cb98f8871ecec5d8f94c3ef6"
integrity sha512-3xx3Er8i8IJ/mYEYl+MxGyY+sZo965f0MCoIAGPV7dNuULfiNYPhvym+4LXzocRZUlF4qrXxXPLo3njiCQNAUQ==
dependencies:
"@abp/datatables.net" "~3.1.0-rc.3"
"@abp/datatables.net" "~3.1.0"
datatables.net-bs4 "^1.10.21"
"@abp/datatables.net@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0-rc.3.tgz#c3a8f81d5ee571445b01d2db0e05ed555b1459b8"
integrity sha512-sOWuVwvSoQlXqC9CC9HGH6HzdHb5vVX8CbqzIUYBJEzY4NBRUqeclFJQrA/thjMNtefdLD2AiVwPFmAdGBeDSg==
"@abp/datatables.net@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.1.0.tgz#db4fe94cf4216a59a3121d0d38b57092d7524f2a"
integrity sha512-9av6Dk1qEMAahjZCEn3hAP9mNCvr8HBcYBEqhGMACCk+rLjAJgzKKzV80cvlerg1VGoBTdQ0NgN22ywsWqDyOg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
datatables.net "^1.10.21"
"@abp/docs@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-3.1.0-rc.3.tgz#b5bab272c4094de8f38c04015cf7219f0931c8c5"
integrity sha512-o1R9Kvw2VKqyjHYmNXYGUhiJue1FaqgRIJmmR6z0ncND7swsz4Qb/2gQvws4bHo/dIl28yrzJeKNzXbE74hHgQ==
"@abp/docs@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-3.1.0.tgz#7a36d134de0c722e52c9096245cf3c45cc8a113a"
integrity sha512-qbLB4l3aIEqYYEpKGdb89wk2CaAJJuL2Ww0psPwsIJjDFjxOveBUwzATpQ7rKxM7i7gxQCKXbaTDYi404FI+ZA==
dependencies:
"@abp/anchor-js" "~3.1.0-rc.3"
"@abp/clipboard" "~3.1.0-rc.3"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0-rc.3"
"@abp/popper.js" "~3.1.0-rc.3"
"@abp/prismjs" "~3.1.0-rc.3"
"@abp/anchor-js" "~3.1.0"
"@abp/clipboard" "~3.1.0"
"@abp/malihu-custom-scrollbar-plugin" "~3.1.0"
"@abp/popper.js" "~3.1.0"
"@abp/prismjs" "~3.1.0"
"@abp/font-awesome@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0-rc.3.tgz#38f63ad4fadc4986a73116fa29d5ef56812c483c"
integrity sha512-BnrI9XaKxEvI0d6Fa9tbw1J/VAsVUqTyAHva4WTUUa+neB9gaK62ZUjgDdF8Eo6gj7UOO8DYvsXehzpVpZKlPQ==
"@abp/font-awesome@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.1.0.tgz#00792619894b8d0f15801df641ee57eda1d7cdba"
integrity sha512-fRd8QtVmfBiEoQpYgvVoNUcoyje3mtGqfIVtzeH2wnwEWKEO8SFfMcuWetyY2pk06VgpRnKNHGumyHnaNTCiUQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
"@fortawesome/fontawesome-free" "^5.13.0"
"@abp/jquery-form@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0-rc.3.tgz#7b74828f32a641c0b1ef1fd8b0389bf994a09e16"
integrity sha512-G+YRnDRZe5Mw81NAEnnr8scGjupndcu9xZ1dw+hCFGg30yypiUIfHtrMR4iR94y7M198fAgQP+0k7RvDqnALiw==
"@abp/jquery-form@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.1.0.tgz#d095dea5200a13714dddd4ff1067126a01944440"
integrity sha512-Bs1BJ1coJMC8kFme9SffIicUSx7ULGzvdHfatzEbL6oH7KCSU/smBRTdAuZ/l85Qfftd0C6R9ibXehgKlagQKw==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0-rc.3.tgz#aef83e8f11791ae7be449eab6655a73075f98b45"
integrity sha512-uWu6qdZasSZEFJC1IhEtj8NZq5kXX8W/zlK2tVpFhjxE/QYiJlPj8pVy2I7cuEIBghzAO2omwI+5En8TSagrGA==
"@abp/jquery-validation-unobtrusive@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.1.0.tgz#c4a6e99f8cadc437b83574fbb2437beaccb23241"
integrity sha512-WpZPnfx0MR9E1c7TB9M/hU4AkToTaPsLg+P7HfCihB6g7SVrjdLxP4w90lIejro3raK2BjU4726FHqgFQSygTA==
dependencies:
"@abp/jquery-validation" "~3.1.0-rc.3"
"@abp/jquery-validation" "~3.1.0"
jquery-validation-unobtrusive "^3.2.11"
"@abp/jquery-validation@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0-rc.3.tgz#40dcb28ce5a3a87fc69972053e48a456c84e3225"
integrity sha512-uaL+ZS/NTf103Hq3ehayFT1qvq/Y2T5PAFY9ijBvX+7phCtPwGiIPfUvyuwYnKbdTa15odC275e7pY2CssHWIA==
"@abp/jquery-validation@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.1.0.tgz#ace497b864df008385a2fcabf6ef7e014a663a1d"
integrity sha512-kq36uSs54SVTYcGsy/CQZlIW98mfmhfNOHsnxn/W4U1prMSZdH7yegCEfHlHN2ERtubD6UEWHxx5D1JUyDsmvg==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
jquery-validation "^1.19.2"
"@abp/jquery@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0-rc.3.tgz#8c35b9e7de888516e2acc5227092ca2fed991475"
integrity sha512-DT2uBNfW3+Xc1Bz62WHdIC3JfAb2Qcc4p86LyDG5pNRAd3FpImA1VnRPsMRX9Mig7HYRjMYiuYXTeovM6YS0fg==
"@abp/jquery@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.1.0.tgz#e110148d13478ea86de8cff092164d7bd7a9ef63"
integrity sha512-8QzEMTHW0HNYrQbC11w28DxD3jGdaWlrGvAExmitBYIv9i1BYg/6M4bcKOVJPhiQoR50aCe+6xInFhNgfRNBCw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
jquery "~3.5.1"
"@abp/lodash@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0-rc.3.tgz#a312975824fa3bebc00f5eca35cededc5ec3af4b"
integrity sha512-siv5cMWlUHEX2RtvKCGoX2cEh4h1hniluKlFgmVmYY4hdGYdAG4T2d9QQAbPODwdzrJ8jzI36hXT/P4IrzhWZw==
"@abp/lodash@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.1.0.tgz#a4175342b4fc14a92b8344ea783554c40e4e450c"
integrity sha512-RVclkRFjrjPtNVaAPJVPJJmI9QFbc2vZfwG+utDV4aZzytZOgESN8q8IbOGaCIj8KzvX1LeBSqvDRP81l9c5Tg==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
lodash "^4.17.15"
"@abp/luxon@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0-rc.3.tgz#9b9d5c9827a0c661458094134cafd80f35537a69"
integrity sha512-cKj/irXJhTJ6WiSyjzcZcsDjKFji1Q/0nV7IYhY9e2wzpg3qEB8Z8k8fDLPDAUriUKxBoI6mQ/CVC0ah7eg/LA==
"@abp/luxon@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.1.0.tgz#867f4395315b0727b39f9b5a5f4dc9bca7cfafde"
integrity sha512-Pf+g5yGCqKDEhGMM/V75zX/8pPJUoIv7xJdF9sLRTERr5NpsS8/23DZIn2KmzbNLThHDkAmayBxHZko4Ri1ykw==
dependencies:
luxon "^1.24.1"
"@abp/malihu-custom-scrollbar-plugin@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0-rc.3.tgz#218eb620532af8bdde6a46388a3d5349974fab44"
integrity sha512-z3IzgSYtpZ2FlWNmM2A1wbP3CHB3P5a8k/JR0JSWwtl+D/LiYC348VQIXen+pIJoEjMlY48iSi5XNyBIz4X9hw==
"@abp/malihu-custom-scrollbar-plugin@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.0.tgz#eab16ac9cddfbe9982baf946a468718dee34589e"
integrity sha512-/6TXbzyUh8qSMwZss1tTWkAeAnrAvSHeJRF32iVCYx769+6HJ4QZt1BWyT6/jgAdEHZspePh1+xAsrPRDZJ5aA==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/popper.js@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-3.1.0-rc.3.tgz#7b12694e65866edeaa8e8543a23ef238682f34cb"
integrity sha512-QyoRm8y4bjemPGwqTHHO30H5/g+uJ4vsX6eB+lxiqPYBW/2OCTccjWkRwPl1YXKdMMyS2IMARDtYDtrNoQ8Z5g==
"@abp/popper.js@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-3.1.0.tgz#d8b2e7fc6ec3e080f225d76e02909da682b9592b"
integrity sha512-4dUR6aPeZS+VQi1ByG/Rgo9mKD+vP38Tq0f41//EDu8xqvnl7JYNaCEFZzbOBcDuSUC+akGJrYWjCbJ0vRJKXw==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
popper.js "^1.16.0"
"@abp/prismjs@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.1.0-rc.3.tgz#d13885bf613871f6cd003f58ae01ee4587ad15ad"
integrity sha512-gaKxJ3d78oR1wGZhnPzM5EJIAsibh3VT9MFithFt/YAQdrMMOqS1fEdGsm1zO/A7Veyho9Ba/144RmPkFXH5gQ==
"@abp/prismjs@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.1.0.tgz#11dee74a803c4d79b0a41ed0c3a4f1946c44968a"
integrity sha512-SJ3bWT9UXLSGKMiNKyJeRt/3WjD4qXc4DuEAD2RxRT+tBDd17FG18VTfjLMPcSGtTt+zTK2+tbcxZN5hUfVW9g==
dependencies:
"@abp/clipboard" "~3.1.0-rc.3"
"@abp/core" "~3.1.0-rc.3"
"@abp/clipboard" "~3.1.0"
"@abp/core" "~3.1.0"
prismjs "^1.20.0"
"@abp/select2@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0-rc.3.tgz#493afc27f29da1c9926ee02e8f7b641e8ee4b67e"
integrity sha512-fym9GmQbl34CyTCVzfo4jGe77nSeDuRPYMzAYO8p0uKdDB8t9jNZNqhYJ9Ee5KQXJyg4lmFFPkLcRZF14E+cWw==
"@abp/select2@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.1.0.tgz#459386918f15c591549e7c5b1d411536f781c2a0"
integrity sha512-I0dOXi9oPdzWQVZ5s4Lo4q6tTezQuqXSzZClmnJaQzkf7pCftnji+S727bkUIjwjkFAsT/YNMBCzgJBaiHS3uQ==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
select2 "^4.0.13"
"@abp/sweetalert@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0-rc.3.tgz#1c1421e2baaa57cc24e0f9334a5173836819cc24"
integrity sha512-WrYRutXM2f6VRECEkWhjfqtQXlnEw88MCkYicAhyMH7ZYYWg7r9xVg9TRJJI4UwGMLSyR3EB+ZdTmnD8aSC0yQ==
"@abp/sweetalert@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.1.0.tgz#498df5abb8f68b660cd37f10e287188b6417c3ff"
integrity sha512-9YxVZQfrsGWdVmKeWAG4CoD+B0VObR94SsQQgUiYcl/07PPDxDPZHX/sh1H+pqHXv9/qpPOTS3/PCQAeIfuG/w==
dependencies:
"@abp/core" "~3.1.0-rc.3"
"@abp/core" "~3.1.0"
sweetalert "^2.1.2"
"@abp/timeago@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0-rc.3.tgz#0a7a369ba29633f00b19206b257c6f1f59f182a4"
integrity sha512-FDgaQCJmwWplCcdJYa9kyCcMxJFrKf+zDEFzT5hWfhMzq+sYJYX7QDQtbF5OJnMSWuPyI0/RU0bocuGaJ584VQ==
"@abp/timeago@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.1.0.tgz#abae5287e01d36107516416256a1ccfcb0ca7953"
integrity sha512-xVOq5/5l/0w9vmWIF7dZzqa+7nl7NNG7ER8gbrdPOX86rCsD12DIOkFDLi+Q41kxzp7wbphDZIT/7RsPrhgDDQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
timeago "^1.6.7"
"@abp/toastr@~3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0-rc.3.tgz#89af6aa864a9aac76bc9bf21b7f9bc6763ca7573"
integrity sha512-AeKH5imy8W9yMAlzRv9VdkRHApySpR2BKfrQYk3q9LubgwaxLvOFc/l38aIEKuyosN7dHTMFBQlEwLxWFwaoPA==
"@abp/toastr@~3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.1.0.tgz#cebbb95c1f0b36306a0a58215dfda48a3ebe5f20"
integrity sha512-94PqZmbayVJnDKMrqbVhW0Z3D/sL3sV5gXfd53Ac5KNQvsBmQZ5/SvuuwuDzWYMQm0XwZ1h4fLAiTuoBMIxWCQ==
dependencies:
"@abp/jquery" "~3.1.0-rc.3"
"@abp/jquery" "~3.1.0"
toastr "^2.1.4"
"@abp/utils@^3.1.0-rc.3":
version "3.1.0-rc.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0-rc.3.tgz#3cbc50c1f8fdf6592d66f8ea4b5a9c4249a5e46a"
integrity sha512-45KXx5zlxm5gK2EFwzM+hMjT8q8pD3PejyNfVP6HBbGE2N36LGKYtI59s6vFm5yV2qFxQyVPrk4mi3Y+neqlBw==
"@abp/utils@^3.1.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.0.tgz#ccbfed6591ab11466bf3fed740c8422acf6a84df"
integrity sha512-I5yjM1ovqcpBAT2LFOfwLibVE0Ql6XbP3tQj6YMEZ/foDXekn/4P6Spgq5DTZCMo+0jskS0D8NfL7Ce4p89buw==
dependencies:
just-compare "^1.3.0"

2
modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml

@ -295,7 +295,7 @@
<div data-spy="scroll" data-target="#docs-sticky-index" data-offset="0">
<article class="docs-body">
@if (Model.DocumentLanguageIsDifferent)
@if (Model.DocumentLanguageCode != Model.LanguageCode)
{
<abp-alert alert-type="Warning" dismissible="true" class="mb-0">
@L["DocumentNotFoundInSelectedLanguage"]

13
modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs

@ -64,7 +64,7 @@ namespace Volo.Docs.Pages.Documents.Project
public bool ShowProjectsCombobox { get; set; }
public bool DocumentLanguageIsDifferent { get; set; }
public string DocumentLanguageCode { get; set; }
public DocumentParametersDto DocumentPreferences { get; set; }
@ -393,7 +393,7 @@ namespace Volo.Docs.Pages.Documents.Project
return RemoveVersionPrefix(Document.Version) == LatestVersionInfo.Version ?
DocsAppConsts.Latest :
Document.Version;
RemoveVersionPrefix(Document.Version);
}
private async Task SetDocumentAsync()
@ -403,6 +403,7 @@ namespace Volo.Docs.Pages.Documents.Project
try
{
Document = await GetSpecificDocumentOrDefaultAsync(LanguageCode);
DocumentLanguageCode = LanguageCode;
}
catch (DocumentNotFoundException)
{
@ -410,7 +411,7 @@ namespace Volo.Docs.Pages.Documents.Project
{
Document = await GetSpecificDocumentOrDefaultAsync(DefaultLanguageCode);
DocumentLanguageIsDifferent = true;
DocumentLanguageCode = DefaultLanguageCode;
}
else
{
@ -500,7 +501,7 @@ namespace Volo.Docs.Pages.Documents.Project
{
var content = (await _documentAppService.GetAsync(new GetDocumentInput
{
LanguageCode = LanguageCode,
LanguageCode = DocumentLanguageCode,
Name = partialTemplate.Path,
ProjectId = Project.Id,
Version = Version
@ -518,7 +519,7 @@ namespace Volo.Docs.Pages.Documents.Project
private void SetUserPreferences()
{
UserPreferences.Add("Document_Language_Code", LanguageCode);
UserPreferences.Add("Document_Language_Code", DocumentLanguageCode);
UserPreferences.Add("Document_Version", Version);
var cookie = Request.Cookies["AbpDocsPreferences"];
@ -608,7 +609,7 @@ namespace Volo.Docs.Pages.Documents.Project
new GetParametersDocumentInput
{
ProjectId = Project.Id,
LanguageCode = LanguageCode,
LanguageCode = DocumentLanguageCode,
Version = Version
});

49
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs

@ -43,15 +43,15 @@ namespace Volo.Abp.Identity
IOrganizationUnitRepository organizationUnitRepository,
ISettingProvider settingProvider)
: base(
store,
optionsAccessor,
passwordHasher,
userValidators,
passwordValidators,
keyNormalizer,
errors,
services,
logger)
store,
optionsAccessor,
passwordHasher,
userValidators,
passwordValidators,
keyNormalizer,
errors,
services,
logger)
{
OrganizationUnitRepository = organizationUnitRepository;
SettingProvider = settingProvider;
@ -71,7 +71,8 @@ namespace Volo.Abp.Identity
return user;
}
public virtual async Task<IdentityResult> SetRolesAsync([NotNull] IdentityUser user, [NotNull] IEnumerable<string> roleNames)
public virtual async Task<IdentityResult> SetRolesAsync([NotNull] IdentityUser user,
[NotNull] IEnumerable<string> roleNames)
{
Check.NotNull(user, nameof(user));
Check.NotNull(roleNames, nameof(roleNames));
@ -101,7 +102,8 @@ namespace Volo.Abp.Identity
public virtual async Task<bool> IsInOrganizationUnitAsync(IdentityUser user, OrganizationUnit ou)
{
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits, CancellationTokenProvider.Token);
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits,
CancellationTokenProvider.Token);
return user.IsInOrganizationUnit(ou.Id);
}
@ -110,12 +112,13 @@ namespace Volo.Abp.Identity
await AddToOrganizationUnitAsync(
await UserRepository.GetAsync(userId, cancellationToken: CancellationToken),
await OrganizationUnitRepository.GetAsync(ouId, cancellationToken: CancellationToken)
);
);
}
public virtual async Task AddToOrganizationUnitAsync(IdentityUser user, OrganizationUnit ou)
{
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits, CancellationTokenProvider.Token);
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits,
CancellationTokenProvider.Token);
if (user.OrganizationUnits.Any(cou => cou.OrganizationUnitId == ou.Id))
{
@ -125,19 +128,23 @@ namespace Volo.Abp.Identity
await CheckMaxUserOrganizationUnitMembershipCountAsync(user.OrganizationUnits.Count + 1);
user.AddOrganizationUnit(ou.Id);
await UserRepository.UpdateAsync(user, cancellationToken: CancellationToken);
}
public virtual async Task RemoveFromOrganizationUnitAsync(Guid userId, Guid ouId)
{
var user = await UserRepository.GetAsync(userId, cancellationToken: CancellationToken);
user.RemoveOrganizationUnit(ouId);
await UserRepository.UpdateAsync(user, cancellationToken: CancellationToken);
}
public virtual async Task RemoveFromOrganizationUnitAsync(IdentityUser user, OrganizationUnit ou)
{
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits, CancellationTokenProvider.Token);
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits,
CancellationTokenProvider.Token);
user.RemoveOrganizationUnit(ou.Id);
await UserRepository.UpdateAsync(user, cancellationToken: CancellationToken);
}
public virtual async Task SetOrganizationUnitsAsync(Guid userId, params Guid[] organizationUnitIds)
@ -155,7 +162,8 @@ namespace Volo.Abp.Identity
await CheckMaxUserOrganizationUnitMembershipCountAsync(organizationUnitIds.Length);
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits, CancellationTokenProvider.Token);
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits,
CancellationTokenProvider.Token);
//Remove from removed OUs
foreach (var ouId in user.OrganizationUnits.Select(uou => uou.OrganizationUnitId).ToArray())
@ -174,11 +182,14 @@ namespace Volo.Abp.Identity
user.AddOrganizationUnit(organizationUnitId);
}
}
await UserRepository.UpdateAsync(user, cancellationToken: CancellationToken);
}
private async Task CheckMaxUserOrganizationUnitMembershipCountAsync(int requestedCount)
{
var maxCount = await SettingProvider.GetAsync<int>(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount);
var maxCount =
await SettingProvider.GetAsync<int>(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount);
if (requestedCount > maxCount)
{
throw new BusinessException(IdentityErrorCodes.MaxAllowedOuMembership)
@ -187,9 +198,11 @@ namespace Volo.Abp.Identity
}
[UnitOfWork]
public virtual async Task<List<OrganizationUnit>> GetOrganizationUnitsAsync(IdentityUser user, bool includeDetails = false)
public virtual async Task<List<OrganizationUnit>> GetOrganizationUnitsAsync(IdentityUser user,
bool includeDetails = false)
{
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits, CancellationTokenProvider.Token);
await UserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits,
CancellationTokenProvider.Token);
return await OrganizationUnitRepository.GetListAsync(
user.OrganizationUnits.Select(t => t.OrganizationUnitId),

8
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnitManager.cs

@ -54,8 +54,8 @@ namespace Volo.Abp.Identity
return OrganizationUnit.CalculateNextCode(lastChild.Code);
}
var parentCode = parentId != null
? await GetCodeOrDefaultAsync(parentId.Value)
var parentCode = parentId != null
? await GetCodeOrDefaultAsync(parentId.Value)
: null;
return OrganizationUnit.AppendCode(
@ -174,7 +174,7 @@ namespace Volo.Abp.Identity
return Task.FromResult(0);
}
ou.AddRole(role.Id);
return Task.FromResult(0);
return OrganizationUnitRepository.UpdateAsync(ou);
}
public virtual async Task RemoveRoleFromOrganizationUnitAsync(Guid roleId, Guid ouId)
@ -188,7 +188,7 @@ namespace Volo.Abp.Identity
public virtual Task RemoveRoleFromOrganizationUnitAsync(IdentityRole role, OrganizationUnit organizationUnit)
{
organizationUnit.RemoveRole(role.Id);
return Task.FromResult(0);
return OrganizationUnitRepository.UpdateAsync(organizationUnit);
}
}
}

104
modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs

@ -16,22 +16,24 @@ namespace Volo.Abp.Identity
where TStartupModule : IAbpModule
{
private readonly IOrganizationUnitRepository _organizationUnitRepository;
private readonly IIdentityRoleRepository _identityRoleRepository;
private readonly ILookupNormalizer _lookupNormalizer;
private readonly IdentityTestData _testData;
private readonly IGuidGenerator _guidGenerator;
private readonly OrganizationUnitManager _organizationUnitManager;
private readonly IIdentityRoleRepository _identityRoleRepository;
private readonly IdentityUserManager _identityUserManager;
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly IIdentityUserRepository _identityUserRepository;
public OrganizationUnitRepository_Tests()
{
_organizationUnitRepository = ServiceProvider.GetRequiredService<IOrganizationUnitRepository>();
_identityRoleRepository = ServiceProvider.GetRequiredService<IIdentityRoleRepository>();
_lookupNormalizer = ServiceProvider.GetRequiredService<ILookupNormalizer>();
_testData = GetRequiredService<IdentityTestData>();
_guidGenerator = GetRequiredService<IGuidGenerator>();
_organizationUnitManager = GetRequiredService<OrganizationUnitManager>();
_identityRoleRepository = GetRequiredService<IIdentityRoleRepository>();
_identityUserManager = GetRequiredService<IdentityUserManager>();
_unitOfWorkManager = GetRequiredService<IUnitOfWorkManager>();
_identityUserRepository = GetRequiredService<IIdentityUserRepository>();
}
@ -45,19 +47,102 @@ namespace Volo.Abp.Identity
[Fact]
public async Task GetAllChildrenWithParentCodeAsync()
{
(await _organizationUnitRepository.GetAllChildrenWithParentCodeAsync(OrganizationUnit.CreateCode(0), _guidGenerator.Create())).ShouldNotBeNull();
(await _organizationUnitRepository.GetAllChildrenWithParentCodeAsync(OrganizationUnit.CreateCode(0),
_guidGenerator.Create())).ShouldNotBeNull();
}
[Fact]
public async Task GetListAsync()
{
var ouIds = (await _organizationUnitRepository.GetListAsync(includeDetails: true))
.Select(ou => ou.Id).Take(2);
.Select(ou => ou.Id).Take(2);
var ous = await _organizationUnitRepository.GetListAsync(ouIds);
ous.Count.ShouldBe(2);
ous.ShouldContain(ou => ou.Id == ouIds.First());
}
[Fact]
public async Task AddMemberToOrganizationUnit()
{
using (var uow = _unitOfWorkManager.Begin())
{
var ou111 = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(
_lookupNormalizer.NormalizeName("david"));
user.ShouldNotBeNull();
user.OrganizationUnits.Count.ShouldBe(1);
await _identityUserManager.AddToOrganizationUnitAsync(user.Id, ou111.Id);
await uow.CompleteAsync();
}
var updatedUser = await _identityUserRepository.FindByNormalizedUserNameAsync(
_lookupNormalizer.NormalizeName("david"));
updatedUser.OrganizationUnits.Count.ShouldBe(2);
}
[Fact]
public async Task AddRoleToOrganizationUnit()
{
using (var uow = _unitOfWorkManager.Begin())
{
var ou111 = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
ou111.Roles.Count.ShouldBe(2);
var roleSupporter = await _identityRoleRepository.FindByNormalizedNameAsync(
_lookupNormalizer.NormalizeName("supporter"));
await _organizationUnitManager.AddRoleToOrganizationUnitAsync(roleSupporter.Id, ou111.Id);
await uow.CompleteAsync();
}
var ou111Updated = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
ou111Updated.Roles.Count.ShouldBeGreaterThan(2);
}
[Fact]
public async Task RemoveRoleFromOrganizationUnit()
{
using (var uow = _unitOfWorkManager.Begin())
{
var ou111 = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
ou111.Roles.ShouldContain(q => q.RoleId == _testData.RoleModeratorId);
await _organizationUnitManager.RemoveRoleFromOrganizationUnitAsync(_testData.RoleModeratorId, ou111.Id);
await uow.CompleteAsync();
}
var ou111Updated = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
ou111Updated.Roles.ShouldNotContain(q => q.RoleId == _testData.RoleModeratorId);
}
[Fact]
public async Task RemoveOrganizationUnitFromUser()
{
using (var uow = _unitOfWorkManager.Begin())
{
var ou112 = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU112"));
var user = await _identityUserRepository.FindByNormalizedUserNameAsync(
_lookupNormalizer.NormalizeName("david"));
user.OrganizationUnits.Count.ShouldBe(1);
user.OrganizationUnits.ShouldContain(q => q.OrganizationUnitId == ou112.Id);
await _identityUserManager.RemoveFromOrganizationUnitAsync(user.Id, ou112.Id);
await uow.CompleteAsync();
}
var updatedUser = await _identityUserRepository.FindByNormalizedUserNameAsync(
_lookupNormalizer.NormalizeName("david"));
updatedUser.OrganizationUnits.Count.ShouldBe(0);
}
[Fact]
public async Task GetOrganizationUnitAsync()
{
@ -79,6 +164,7 @@ namespace Volo.Abp.Identity
ou.Roles.ShouldNotBeNull();
ou.Roles.Any().ShouldBeTrue();
}
[Fact]
public async Task GetOrganizationUnitRolesAsync()
{
@ -95,7 +181,8 @@ namespace Volo.Abp.Identity
{
OrganizationUnit ou = await _organizationUnitRepository.GetAsync("OU111", includeDetails: true);
var ou111Roles = await _organizationUnitRepository.GetRolesAsync(ou, sorting: "name desc", maxResultCount: 1, includeDetails: true);
var ou111Roles = await _organizationUnitRepository.GetRolesAsync(ou, sorting: "name desc",
maxResultCount: 1, includeDetails: true);
ou111Roles.Count.ShouldBe(1);
ou111Roles.ShouldContain(n => n.Name == "moderator");
}
@ -105,9 +192,10 @@ namespace Volo.Abp.Identity
{
OrganizationUnit ou1 = await _organizationUnitRepository.GetAsync("OU111", true);
OrganizationUnit ou2 = await _organizationUnitRepository.GetAsync("OU112", true);
var users = await _identityUserRepository.GetUsersInOrganizationsListAsync(new List<Guid> { ou1.Id, ou2.Id });
var users = await _identityUserRepository.GetUsersInOrganizationsListAsync(new List<Guid> {ou1.Id, ou2.Id});
users.Count.ShouldBeGreaterThan(0);
}
[Fact]
public async Task GetMembersInOrganizationUnitWithParamsAsync()
{
@ -147,12 +235,12 @@ namespace Volo.Abp.Identity
public async Task GetMembersCountOfOrganizationUnitWithParamsAsync()
{
OrganizationUnit ou = await _organizationUnitRepository.GetAsync("OU111", true);
var usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou,"n");
var usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou, "n");
usersCount.ShouldBeGreaterThan(1);
usersCount.ShouldBeLessThanOrEqualTo(5);
usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou,"undefined-username");
usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou, "undefined-username");
usersCount.ShouldBe(0);
}

2
modules/identityserver/common.props

@ -2,7 +2,7 @@
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.3.0</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
<PackageIconUrl>http://www.aspnetboilerplate.com/images/abp_nupkg.png</PackageIconUrl>
<PackageProjectUrl>http://abp.io</PackageProjectUrl>
<RepositoryType>git</RepositoryType>

2
npm/lerna.json

@ -1,5 +1,5 @@
{
"version": "3.1.0-rc.3",
"version": "3.1.0",
"packages": [
"packs/*"
],

2
npm/ng-packs/lerna.version.json

@ -1,5 +1,5 @@
{
"version": "3.1.0-rc.3",
"version": "3.1.0",
"packages": [
"packages/*"
],

21
npm/ng-packs/package.json

@ -25,16 +25,17 @@
"postinstall": "npm run compile:ivy"
},
"devDependencies": {
"@abp/ng.account": "~3.1.0-rc.3",
"@abp/ng.core": "~3.1.0-rc.3",
"@abp/ng.feature-management": "~3.1.0-rc.3",
"@abp/ng.identity": "~3.1.0-rc.3",
"@abp/ng.permission-management": "~3.1.0-rc.3",
"@abp/ng.setting-management": "~3.1.0-rc.3",
"@abp/ng.tenant-management": "~3.1.0-rc.3",
"@abp/ng.theme.basic": "~3.1.0-rc.3",
"@abp/ng.theme.shared": "~3.1.0-rc.3",
"@abp/utils": "^3.1.0-rc.3",
"@abp/ng.account": "~3.1.0",
"@abp/ng.core": "~3.1.0",
"@abp/ng.feature-management": "~3.1.0",
"@abp/ng.identity": "~3.1.0",
"@abp/ng.permission-management": "~3.1.0",
"@abp/ng.schematics": "~3.1.0",
"@abp/ng.setting-management": "~3.1.0",
"@abp/ng.tenant-management": "~3.1.0",
"@abp/ng.theme.basic": "~3.1.0",
"@abp/ng.theme.shared": "~3.1.0",
"@abp/utils": "^3.1.0",
"@angular-builders/jest": "^10.0.0",
"@angular-devkit/build-angular": "~0.1000.6",
"@angular-devkit/build-ng-packagr": "~0.1000.6",

4
npm/ng-packs/packages/account/package.json

@ -1,13 +1,13 @@
{
"name": "@abp/ng.account",
"version": "3.1.0-rc.3",
"version": "3.1.0",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/ng.theme.shared": "~3.1.0-rc.3",
"@abp/ng.theme.shared": "~3.1.0",
"tslib": "^2.0.0"
},
"publishConfig": {

4
npm/ng-packs/packages/components/package.json

@ -1,13 +1,13 @@
{
"name": "@abp/ng.components",
"version": "3.1.0-rc.3",
"version": "3.1.0",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"peerDependencies": {
"@abp/ng.core": ">=3.1.0-rc.3",
"@abp/ng.core": ">=3.1.0",
"@ng-bootstrap/ng-bootstrap": ">=6.0.0"
},
"dependencies": {

4
npm/ng-packs/packages/core/package.json

@ -1,13 +1,13 @@
{
"name": "@abp/ng.core",
"version": "3.1.0-rc.3",
"version": "3.1.0",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/utils": "^3.1.0-rc.3",
"@abp/utils": "^3.1.0",
"@angular/localize": "~10.0.10",
"@ngxs/router-plugin": "^3.6.2",
"@ngxs/storage-plugin": "^3.6.2",

4
npm/ng-packs/packages/core/src/lib/services/routes.service.ts

@ -133,8 +133,8 @@ export abstract class AbstractNavTreeService<T extends ABP.Nav> extends Abstract
readonly parentId = 'parentName';
readonly hide = (item: T) => item.invisible || !this.isGranted(item);
readonly sort = (a: T, b: T) => {
if (!a.order) return 1;
if (!b.order) return -1;
if (!Number.isInteger(a.order)) return 1;
if (!Number.isInteger(b.order)) return -1;
return a.order - b.order;
};

9
npm/ng-packs/packages/core/src/lib/states/config.state.ts

@ -9,6 +9,7 @@ import { RestOccurError } from '../actions/rest.actions';
import { SetLanguage } from '../actions/session.actions';
import { ApplicationConfiguration } from '../models/application-configuration';
import { Config } from '../models/config';
import { interpolate } from '../utils/string-utils';
import { SessionState } from './session.state';
@State<Config.State>({
@ -180,14 +181,12 @@ export class ConfigState {
return defaultValue || sourceKey;
}
// [TODO]: next line should be removed in v3.2, breaking change!!!
interpolateParams = interpolateParams.filter(params => params != null);
if (localization && interpolateParams && interpolateParams.length) {
interpolateParams.forEach(param => {
localization = localization.replace(/[\'\"]?\{[\d]+\}[\'\"]?/, param);
});
}
if (localization) localization = interpolate(localization, interpolateParams);
if (typeof localization !== 'string') localization = '';
return localization || defaultValue || (key as string);
});

13
npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts

@ -25,7 +25,7 @@ export abstract class AuthFlowStrategy {
constructor(protected injector: Injector) {
this.store = injector.get(Store);
this.oAuthService = injector.get(OAuthService);
this.oAuthConfig = injector.get(Store).selectSnapshot(ConfigState.getDeep('environment.oAuthConfig'));
this.oAuthConfig = this.store.selectSnapshot(ConfigState.getDeep('environment.oAuthConfig'));
}
async init(): Promise<any> {
@ -41,7 +41,14 @@ export class AuthCodeFlowStrategy extends AuthFlowStrategy {
return super
.init()
.then(() => this.oAuthService.tryLogin())
.then(() => this.oAuthService.setupAutomaticSilentRefresh());
.then(() => {
if (this.oAuthService.hasValidAccessToken() || !this.oAuthService.getRefreshToken()) {
return Promise.resolve();
}
return this.oAuthService.refreshToken() as Promise<any>;
})
.then(() => this.oAuthService.setupAutomaticSilentRefresh({}, 'access_token'));
}
login() {
@ -88,7 +95,7 @@ export class AuthPasswordFlowStrategy extends AuthFlowStrategy {
)
.pipe(
tap(() => this.oAuthService.logOut()),
switchMap(() => this.store.dispatch(new GetAppConfiguration())),
switchMap(() => this.store.dispatch(new GetAppConfiguration())),
);
}

26
npm/ng-packs/packages/core/src/lib/tests/string-utils.spec.ts

@ -1,4 +1,4 @@
import { createTokenParser } from '../utils/string-utils';
import { createTokenParser, interpolate } from '../utils/string-utils';
describe('String Utils', () => {
describe('#createTokenParser', () => {
@ -19,4 +19,28 @@ describe('String Utils', () => {
},
);
});
describe('#interpolate', () => {
test.each`
text | params | expected
${'This is {0} and {1} example.'} | ${['foo', 'bar']} | ${'This is foo and bar example.'}
${'This is {1} and {0} example.'} | ${['foo', 'bar']} | ${'This is bar and foo example.'}
${'This is {0} and {0} example.'} | ${['foo', 'bar']} | ${'This is foo and foo example.'}
${'This is {1} and {1} example.'} | ${['foo', 'bar']} | ${'This is bar and bar example.'}
${'This is "{0}" and "{1}" example.'} | ${['foo', 'bar']} | ${'This is foo and bar example.'}
${"This is '{1}' and '{0}' example."} | ${['foo', 'bar']} | ${'This is bar and foo example.'}
${'This is { 0 } and {0} example.'} | ${['foo', 'bar']} | ${'This is foo and foo example.'}
${'This is {1} and { 1 } example.'} | ${['foo', 'bar']} | ${'This is bar and bar example.'}
${'This is {0}, {3}, {1}, and {2} example.'} | ${['foo', 'bar', 'baz', 'qux']} | ${'This is foo, qux, bar, and baz example.'}
${'This is {0} with 0 example.'} | ${['foo']} | ${'This is foo with 0 example.'}
${'This is {0} and {1} example.'} | ${['foo']} | ${'This is foo and {1} example.'}
${'This is {0} and {1} example.'} | ${[]} | ${'This is {0} and {1} example.'}
${'This is {0} example.'} | ${[null]} | ${'This is {0} example.'}
`(
'should return $expected when text is $text and params are $params',
({ text, params, expected }) => {
expect(interpolate(text, params)).toBe(expected);
},
);
});
});

6
npm/ng-packs/packages/core/src/lib/utils/string-utils.ts

@ -15,3 +15,9 @@ export function createTokenParser(format: string) {
}, {} as Record<string, string[]>);
};
}
export function interpolate(text: string, params: string[]) {
return text
.replace(/(['"]?\{\s*(\d+)\s*\}['"]?)/g, (_, match, digit) => params[digit] ?? match)
.replace(/\s+/g, ' ');
}

4
npm/ng-packs/packages/feature-management/package.json

@ -1,13 +1,13 @@
{
"name": "@abp/ng.feature-management",
"version": "3.1.0-rc.3",
"version": "3.1.0",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/ng.theme.shared": "~3.1.0-rc.3",
"@abp/ng.theme.shared": "~3.1.0",
"tslib": "^2.0.0"
},
"publishConfig": {

6
npm/ng-packs/packages/identity/package.json

@ -1,14 +1,14 @@
{
"name": "@abp/ng.identity",
"version": "3.1.0-rc.3",
"version": "3.1.0",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/ng.permission-management": "~3.1.0-rc.3",
"@abp/ng.theme.shared": "~3.1.0-rc.3",
"@abp/ng.permission-management": "~3.1.0",
"@abp/ng.theme.shared": "~3.1.0",
"tslib": "^2.0.0"
},
"publishConfig": {

4
npm/ng-packs/packages/permission-management/package.json

@ -1,13 +1,13 @@
{
"name": "@abp/ng.permission-management",
"version": "3.1.0-rc.3",
"version": "3.1.0",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/ng.theme.shared": "~3.1.0-rc.3",
"@abp/ng.theme.shared": "~3.1.0",
"tslib": "^2.0.0"
},
"publishConfig": {

2
npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.html

@ -63,7 +63,7 @@
let i = index;
trackBy: trackByFn
"
[style.margin-left]="permission.margin + 'px'"
[ngStyle]="permission.style"
class="custom-checkbox custom-control mb-2"
>
<input

17
npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts

@ -1,4 +1,5 @@
import { ApplicationConfiguration, ConfigState, GetAppConfiguration } from '@abp/ng.core';
import { LocaleDirection } from '@abp/ng.theme.shared';
import { Component, EventEmitter, Input, Output, Renderer2, TrackByFunction } from '@angular/core';
import { Select, Store } from '@ngxs/store';
import { Observable, of } from 'rxjs';
@ -7,8 +8,8 @@ import { GetPermissions, UpdatePermissions } from '../actions/permission-managem
import { PermissionManagement } from '../models/permission-management';
import { PermissionManagementState } from '../states/permission-management.state';
type PermissionWithMargin = PermissionManagement.Permission & {
margin: number;
type PermissionWithStyle = PermissionManagement.Permission & {
style: string;
};
@Component({
@ -79,21 +80,25 @@ export class PermissionManagementComponent
trackByFn: TrackByFunction<PermissionManagement.Group> = (_, item) => item.name;
get selectedGroupPermissions$(): Observable<PermissionWithMargin[]> {
get selectedGroupPermissions$(): Observable<PermissionWithStyle[]> {
const margin = `margin-${
(document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'
}.px`;
return this.groups$.pipe(
map(groups =>
this.selectedGroup
? groups.find(group => group.name === this.selectedGroup.name).permissions
: [],
),
map<PermissionManagement.Permission[], PermissionWithMargin[]>(permissions =>
map<PermissionManagement.Permission[], PermissionWithStyle[]>(permissions =>
permissions.map(
permission =>
(({
...permission,
margin: findMargin(permissions, permission),
style: { [margin]: findMargin(permissions, permission) },
isGranted: this.permissions.find(per => per.name === permission.name).isGranted,
} as any) as PermissionWithMargin),
} as any) as PermissionWithStyle),
),
),
);

2
npm/ng-packs/packages/schematics/package.json

@ -1,6 +1,6 @@
{
"name": "@abp/ng.schematics",
"version": "3.1.0-rc.3",
"version": "3.1.0",
"description": "Schematics that works with ABP Backend",
"keywords": [
"schematics"

23
npm/ng-packs/packages/schematics/src/collection.json

@ -1,9 +1,24 @@
{
"schematics": {
"proxy": {
"description": "ABP Proxy Generator Schematics",
"factory": "./commands/proxy",
"schema": "./commands/proxy/schema.json"
"proxy-add": {
"description": "ABP Proxy Generator Add Schematics",
"factory": "./commands/proxy-add",
"schema": "./commands/proxy-add/schema.json"
},
"proxy-index": {
"description": "ABP Proxy Generator Index Schematics",
"factory": "./commands/proxy-index",
"schema": "./commands/proxy-index/schema.json"
},
"proxy-refresh": {
"description": "ABP Proxy Generator Refresh Schematics",
"factory": "./commands/proxy-refresh",
"schema": "./commands/proxy-refresh/schema.json"
},
"proxy-remove": {
"description": "ABP Proxy Generator Remove Schematics",
"factory": "./commands/proxy-remove",
"schema": "./commands/proxy-remove/schema.json"
},
"api": {
"description": "ABP API Generator Schematics",

0
npm/ng-packs/packages/schematics/src/commands/api/files-enum/shared/enums/__namespace@dir__/__name@kebab__.ts.template → npm/ng-packs/packages/schematics/src/commands/api/files-enum/proxy/__namespace@dir__/__name@kebab__.enum.ts.template

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

Loading…
Cancel
Save