Browse Source

Merge remote-tracking branch 'origin/dev' into feat/mudblazor

pull/25235/head
maliming 2 weeks ago
parent
commit
3efb0b1c4e
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 59
      .github/scripts/test_update_dependency_changes.py
  2. 52
      .github/scripts/update_dependency_changes.py
  3. 10
      Directory.Packages.props
  4. 72
      docs/en/Blog-Posts/2026-04-15 v10_3_Release_Stable/POST.md
  5. BIN
      docs/en/Blog-Posts/2026-04-15 v10_3_Release_Stable/cover-image.png
  6. BIN
      docs/en/Blog-Posts/2026-04-15 v10_3_Release_Stable/upgrade-abp-packages.png
  7. 254
      docs/en/Community-Articles/2026-04-17-Top-AI-Coding-Models-2026-Rankings/Post.md
  8. BIN
      docs/en/Community-Articles/2026-04-17-Top-AI-Coding-Models-2026-Rankings/cover.png
  9. BIN
      docs/en/Community-Articles/2026-04-17-Top-AI-Coding-Models-2026-Rankings/pic1.jpg
  10. BIN
      docs/en/Community-Articles/2026-04-17-Top-AI-Coding-Models-2026-Rankings/pic2.png
  11. 2
      docs/en/cli/index.md
  12. 37
      docs/en/framework/fundamentals/localization.md
  13. 4
      docs/en/framework/infrastructure/background-jobs/index.md
  14. 4
      docs/en/framework/infrastructure/background-workers/index.md
  15. 1
      docs/en/modules/index.md
  16. 12
      docs/en/modules/operation-rate-limiting.md
  17. 5
      docs/en/others/aspnet-zero-vs-abp.md
  18. 15
      docs/en/package-version-changes.md
  19. 529
      docs/en/release-info/release-notes.md
  20. 2
      docs/en/release-info/road-map.md
  21. 29
      docs/en/studio/release-notes.md
  22. 3
      docs/en/studio/version-mapping.md
  23. 7
      framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs
  24. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpAspNetCoreMvcUiThemeSharedModule.cs
  25. 2
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarManager.cs
  26. 1
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj
  27. 4
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js
  28. 6
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
  29. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Infrastructure/AbpMemoryPoolHttpResponseStreamWriterFactory.cs
  30. 31
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs
  31. 11
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionManager.cs
  32. 28
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RequirePermissionsSimpleBatchStateChecker.cs
  33. 32
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionChecker.cs
  34. 20
      framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs
  35. 69
      framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs
  36. 38
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
  37. 11
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs
  38. 47
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NpmHelper.cs
  39. 28
      framework/src/Volo.Abp.Core/Microsoft/Extensions/Logging/AbpLoggerExtensions.cs
  40. 14
      framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs
  41. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Logging/AbpInitLogEntry.cs
  42. 1
      framework/src/Volo.Abp.Core/Volo/Abp/Logging/DefaultInitLogger.cs
  43. 22
      framework/src/Volo.Abp.Core/Volo/Abp/Logging/DefaultInitLoggerFactory.cs
  44. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Logging/IInitLoggerFactory.cs
  45. 62
      framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/SimpleStateCheckerManager.cs
  46. 24
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  47. 52
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreDatabaseProviderHelper.cs
  48. 15
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerBase.cs
  49. 27
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureSimpleStateCheckerExtensions.cs
  50. 6
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeaturesSimpleStateCheckerSerializerContributor.cs
  51. 5
      framework/src/Volo.Abp.Features/Volo/Abp/Features/IFeatureChecker.cs
  52. 93
      framework/src/Volo.Abp.Features/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker.cs
  53. 23
      framework/src/Volo.Abp.Features/Volo/Abp/Features/RequireFeaturesSimpleBatchStateCheckerModel.cs
  54. 13
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
  55. 26
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs
  56. 1
      framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj
  57. 3
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/AbpUiNavigationModule.cs
  58. 2
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs
  59. 10
      framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs
  60. 32
      framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs
  61. 51
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/PermissionChecker_BulkWithStateChecker_Tests.cs
  62. 57
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/ResourcePermissionChecker_BulkWithStateChecker_Tests.cs
  63. 14
      framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/StaticPermissionDefinitionStore_Tests.cs
  64. 62
      framework/test/Volo.Abp.Autofac.Tests/Volo/Abp/Autofac/WarnForOrphanedAbpModules_Tests.cs
  65. 64
      framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater_Tests.cs
  66. 200
      framework/test/Volo.Abp.Core.Tests/Microsoft/Extensions/Logging/AbpLoggerExtensions_Tests.cs
  67. 111
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/SimpleStateChecking/SimpleStateChecker_BatchSingleScope_Tests.cs
  68. 66
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/SimpleStateChecking/SimpleStateChecker_NoCheckers_Test.cs
  69. 179
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/SimpleStateChecking/SimpleStateChecker_ScopeIsolation_Tests.cs
  70. 6
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj
  71. 111
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreDatabaseProviderHelper_Tests.cs
  72. 106
      framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker_Tests.cs
  73. 4
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalizationTestModule.cs
  74. 29
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs
  75. 51
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpStringLocalizerFactory_Tests.cs
  76. 77
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/JsonLocalizationDictionaryBuilder_Tests.cs
  77. 6
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/FilesSplit/!en_First.json
  78. 7
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/FilesSplit/en_Base.json
  79. 7
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/FilesSplit/en_Book.json
  80. 6
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/FilesSplit/zen_Last.json
  81. 7
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json
  82. 10
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de_Book.json
  83. 18
      latest-versions.json
  84. 6
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
  85. 266
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
  86. 4
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
  87. 270
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
  88. 14
      modules/blogging/app/Volo.BloggingTestApp/package.json
  89. 308
      modules/blogging/app/Volo.BloggingTestApp/yarn.lock
  90. 2
      modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml
  91. 12
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
  92. 242
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
  93. 10
      modules/cms-kit/angular/package.json
  94. 22
      modules/cms-kit/angular/projects/cms-kit/package.json
  95. 12
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
  96. 242
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
  97. 12
      modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
  98. 242
      modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
  99. 14
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
  100. 394
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock

59
.github/scripts/test_update_dependency_changes.py

@ -14,7 +14,7 @@ import sys
import os
sys.path.insert(0, os.path.dirname(__file__))
from update_dependency_changes import merge_changes, render_section, normalize_version, extract_preamble
from update_dependency_changes import merge_changes, render_section, normalize_version, extract_preamble, bump_patch_if_released
def test_update_then_revert():
@ -438,6 +438,55 @@ def test_normalize_version_stable():
print("✓ Passed: stable versions unchanged\n")
def test_bump_patch_no_tag():
"""Test: version tag does not exist, should return as-is."""
print("Test 23: bump_patch_if_released - no tag exists")
tag_exists = lambda t: False
assert bump_patch_if_released("10.3.0", tag_exists) == "10.3.0"
assert bump_patch_if_released("10.2.0", tag_exists) == "10.2.0"
print("✓ Passed: version unchanged when tag does not exist\n")
def test_bump_patch_tag_exists():
"""Test: version tag exists, should bump patch."""
print("Test 24: bump_patch_if_released - tag exists")
existing_tags = {"10.3.0"}
tag_exists = lambda t: t in existing_tags
assert bump_patch_if_released("10.3.0", tag_exists) == "10.3.1", \
f"Expected '10.3.1', got: {bump_patch_if_released('10.3.0', tag_exists)}"
print("✓ Passed: version bumped to 10.3.1\n")
def test_bump_patch_multiple_tags():
"""Test: multiple consecutive tags exist, should bump past all."""
print("Test 25: bump_patch_if_released - multiple tags exist")
existing_tags = {"10.3.0", "10.3.1", "10.3.2"}
tag_exists = lambda t: t in existing_tags
assert bump_patch_if_released("10.3.0", tag_exists) == "10.3.3", \
f"Expected '10.3.3', got: {bump_patch_if_released('10.3.0', tag_exists)}"
print("✓ Passed: version bumped past all existing tags\n")
def test_bump_patch_prerelease_skipped():
"""Test: pre-release versions should not be bumped."""
print("Test 26: bump_patch_if_released - pre-release skipped")
tag_exists = lambda t: True # all tags "exist"
assert bump_patch_if_released("10.3.0-rc.1", tag_exists) == "10.3.0-rc.1"
assert bump_patch_if_released("10.3.0-rc.2", tag_exists) == "10.3.0-rc.2"
assert bump_patch_if_released("10.3.0-preview", tag_exists) == "10.3.0-preview"
print("✓ Passed: pre-release versions not bumped\n")
def test_bump_patch_non_zero_patch():
"""Test: version with non-zero patch, tag exists, should bump."""
print("Test 27: bump_patch_if_released - non-zero patch version")
existing_tags = {"10.3.1"}
tag_exists = lambda t: t in existing_tags
assert bump_patch_if_released("10.3.1", tag_exists) == "10.3.2", \
f"Expected '10.3.2', got: {bump_patch_if_released('10.3.1', tag_exists)}"
print("✓ Passed: non-zero patch correctly bumped\n")
def run_all_tests():
"""Run all test cases."""
print("=" * 70)
@ -466,9 +515,14 @@ def run_all_tests():
test_normalize_version_preview()
test_normalize_version_rc()
test_normalize_version_stable()
test_bump_patch_no_tag()
test_bump_patch_tag_exists()
test_bump_patch_multiple_tags()
test_bump_patch_prerelease_skipped()
test_bump_patch_non_zero_patch()
print("=" * 70)
print("All 22 tests passed! ✓")
print("All 27 tests passed! ✓")
print("=" * 70)
print("\nTest coverage summary:")
print(" ✓ Basic scenarios (update, add, remove)")
@ -478,6 +532,7 @@ def run_all_tests():
print(" ✓ Document format validation")
print(" ✓ Preamble extraction (SEO block, no preamble, no heading)")
print(" ✓ Version normalization (preview -> rc.1)")
print(" ✓ Patch version bump when tag already released")
print("=" * 70)

52
.github/scripts/update_dependency_changes.py

@ -25,6 +25,55 @@ def normalize_version(version):
return version
def check_tag_exists(tag):
"""Check if a git tag exists on the remote."""
result = subprocess.run(
["git", "ls-remote", "--exit-code", "--tags", "origin", f"refs/tags/{tag}"],
capture_output=True,
text=True,
)
if result.returncode == 0:
return True
if result.returncode == 2:
return False
stderr = (result.stderr or "").strip()
raise RuntimeError(
f"Failed to check whether git tag '{tag}' exists on remote 'origin' "
f"(exit code {result.returncode}): {stderr or 'No error output provided.'}"
)
def bump_patch_if_released(version, tag_exists_fn=None):
"""If the version tag already exists, bump the patch version.
Only applies to stable versions (no pre-release suffix like -rc.N).
"""
if tag_exists_fn is None:
tag_exists_fn = check_tag_exists
# Only bump stable versions (no pre-release suffix)
if "-" in version:
return version
parts = version.split(".")
if len(parts) != 3:
return version
major, minor = parts[0], parts[1]
try:
patch = int(parts[2])
except ValueError:
return version
current = version
while tag_exists_fn(current):
patch += 1
current = f"{major}.{minor}.{patch}"
return current
def get_version():
"""Read the current version from common.props."""
try:
@ -296,6 +345,9 @@ def main():
print("Could not read version from common.props.")
sys.exit(1)
version = bump_patch_if_released(version)
print(f"Resolved version: {version}")
diff = get_diff(base_ref)
if not diff:
print("No diff found for Directory.Packages.props.")

10
Directory.Packages.props

@ -19,10 +19,10 @@
<PackageVersion Include="Azure.Identity" Version="1.14.2" />
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.20.1" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.25.0" />
<PackageVersion Include="Blazorise" Version="2.0.0" />
<PackageVersion Include="Blazorise.Components" Version="2.0.0" />
<PackageVersion Include="Blazorise.DataGrid" Version="2.0.0" />
<PackageVersion Include="Blazorise.Snackbar" Version="2.0.0" />
<PackageVersion Include="Blazorise" Version="2.0.4" />
<PackageVersion Include="Blazorise.Components" Version="2.0.4" />
<PackageVersion Include="Blazorise.DataGrid" Version="2.0.4" />
<PackageVersion Include="Blazorise.Snackbar" Version="2.0.4" />
<PackageVersion Include="MudBlazor" Version="8.0.0" />
<PackageVersion Include="Castle.Core" Version="5.2.1" />
<PackageVersion Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
@ -175,7 +175,7 @@
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.6.7" />
<PackageVersion Include="System.Linq.Queryable" Version="4.3.0" />
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />
<PackageVersion Include="System.Security.Cryptography.Xml" Version="10.0.2" />
<PackageVersion Include="System.Security.Cryptography.Xml" Version="10.0.6" />
<PackageVersion Include="System.Security.Permissions" Version="10.0.2" />
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
<PackageVersion Include="System.Text.Encoding.CodePages" Version="10.0.2" />

72
docs/en/Blog-Posts/2026-04-15 v10_3_Release_Stable/POST.md

@ -0,0 +1,72 @@
# ABP.IO Platform 10.3 Final Has Been Released!
We are glad to announce that [ABP](https://abp.io/) 10.3 stable version has been released.
## What's New With Version 10.3?
All the new features were explained in detail in the [10.3 RC Announcement Post](https://abp.io/community/announcements/announcing-abp-10-3-release-candidate-hgnpr9jq), so there is no need to review them again. You can check it out for more details.
## Getting Started with 10.3
### How to Upgrade an Existing Solution
You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained:
### Upgrading via ABP Studio
If you are already using the ABP Studio, you can upgrade it to the latest version. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info.
After upgrading the ABP Studio, then you can open your solution in the application, and simply click the **Upgrade ABP Packages** action button to instantly upgrade your solution:
![](upgrade-abp-packages.png)
### Upgrading via ABP CLI
Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version.
If you haven't installed it yet, you can run the following command:
```bash
dotnet tool install -g Volo.Abp.Studio.Cli
```
Or to update the existing CLI, you can run the following command:
```bash
dotnet tool update -g Volo.Abp.Studio.Cli
```
After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows:
```bash
abp update
```
You can run this command in the root folder of your solution to update all ABP related packages.
## Migration Guides
There are some important changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v10.2 or earlier versions: [ABP Version 10.3 Migration Guide](https://abp.io/docs/10.3/release-info/migration-guides/abp-10-3)
## Community News
### New ABP Community Articles
As always, exciting articles have been contributed by the ABP community. I will highlight some of them here:
- [Liming Ma](https://abp.io/community/members/maliming) has published 6 new posts:
- [Dynamic Events in ABP](https://abp.io/community/articles/dynamic-events-in-abp-dukq95m1)
- [Dynamic Background Jobs and Workers in ABP](https://abp.io/community/articles/dynamic-background-jobs-and-workers-in-abp-wfdkdsq9)
- [Shared User Accounts in ABP Multi-Tenancy](https://abp.io/community/articles/shared-user-accounts-in-abp-multitenancy-mf3bkg79)
- [Secure Client Authentication with private_key_jwt in ABP 10.3](https://abp.io/community/articles/secure-client-authentication-with-privatekeyjwt-in-abp-b2rf18bc)
- [Operation Rate Limiting in ABP Framework](https://abp.io/community/articles/operation-rate-limiting-in-abp-framework-f4jtd6sn)
- [Resource-Based Authorization in ABP Framework](https://abp.io/community/articles/resourcebased-authorization-in-abp-framework-choku1sn)
- [One Endpoint, Many AI Clients: Turning ABP Workspaces into OpenAI-Compatible Models](https://abp.io/community/articles/turning-abp-workspaces-into-openai-compatible-endpoints-u3ls1gp4) by [Engincan Veske](https://abp.io/community/members/EngincanV)
- [Automatically Validate Your Documentation: How We Built a Tutorial Validator](https://abp.io/community/articles/automatically-validate-your-documentation-m3ozgkhv) by [Mansur Besleney](https://abp.io/community/members/mansur.besleney)
- [Automate Localhost Access for Expo: A Guide to Dynamic Cloudflare Tunnels & Dev Builds](https://abp.io/community/articles/automate-localhost-access-for-expo-a-guide-to-dynamic-7cblqtj3) by [Sumeyye Kurtulus](https://abp.io/community/members/sumeyye.kurtulus)
Thanks to the ABP Community for all the content they have published. You can also [post your ABP related (text or video) content](https://abp.io/community/posts/create) to the ABP Community.
## About the Next Version
The next feature version will be 10.4. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version.

BIN
docs/en/Blog-Posts/2026-04-15 v10_3_Release_Stable/cover-image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB

BIN
docs/en/Blog-Posts/2026-04-15 v10_3_Release_Stable/upgrade-abp-packages.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

254
docs/en/Community-Articles/2026-04-17-Top-AI-Coding-Models-2026-Rankings/Post.md

@ -0,0 +1,254 @@
## Introduction
AI coding tools went from “cool autocomplete” to “basically your junior dev (who never sleeps)” in just a couple of years.
In 2026, the landscape is **crowded, competitive, and honestly a bit confusing**. Every model claims to be the best at coding—but depending on what you actually *do* (APIs, frontend, DevOps, debugging), the “best” can change fast.
So instead of hype, let’s break down the **top AI coding models in 2026**, ranked by:
* Real-world dev usefulness
* Code quality & correctness
* Context handling
* Tooling ecosystem
We'll check the AI models against these topics:
![](pic1.jpg)
---
## 🏆 1. GPT-5.4 (OpenAI) — The All-Round Beast
Let’s not dance around it—**GPT-5.4 is still the most versatile coding model right now.**
### Why it’s #1
* Extremely strong across **all languages**
* Handles **large codebases** without losing context
* Excellent at:
* Refactoring
* Architecture suggestions
* Debugging complex issues
### Where it shines
* Full-stack development
* API design
* Writing clean, production-ready code
### Where it struggles
* Occasionally over-engineers solutions
* Can be slower than lightweight models
### As a result;
If you want a **default “just works” coding AI**, this is it.
---
## 🥈 2. Claude 4.7 (Anthropic) — The Clean Code Specialist
Claude 4.7 has built a reputation for writing code that feels like it came from a senior engineer who drinks too much coffee but cares deeply about readability.
### Strengths
* Beautiful, readable code
* Strong reasoning for:
* Refactoring
* Code reviews
* Documentation
### Killer feature
* Massive context window → great for:
* Large repositories
* Long discussions
* System design
### Weak spots
* Slightly less aggressive in solving edge-case bugs
* Sometimes too “safe” in decisions
### As a result;
Perfect if you care about **maintainability over raw speed**.
---
## 🥉 3. Gemini 3.1 (Google) — The Multimodal Powerhouse
Gemini 3.1 is where things get interesting.
This isn’t just a coding model—it’s a **multi-input problem solver**.
### What makes it different
* Understands:
* Code
* Screenshots
* Diagrams
* Logs
### Where it dominates
* Debugging UI issues from screenshots
* DevOps + cloud workflows
* Cross-referencing documentation
### Downsides
* Code style can be inconsistent
* Sometimes less deterministic than GPT-5
### As a result;
If your workflow includes **visual debugging or cloud-heavy systems**, this is insanely useful.
---
## ⚡ 4. Mistral Code (Open Models) — The Speed King
Mistral AI’s coding models are gaining serious attention.
### Why devs love it
* Fast
* Cheap (or free if self-hosted)
* Great for:
* Autocomplete
* Small functions
* Local development
### Trade-offs
* Not as strong in deep reasoning
* Limited compared to closed models
### As a result;
Best choice for:
* Privacy-sensitive environments
* Offline/local setups
* Lightweight coding tasks
---
## 🧠 5. Code Llama 4 — The Open-Source Veteran
Code Llama 4 is still very relevant, especially in enterprise setups.
### Strengths
* Fully open-source
* Customizable & fine-tunable
* Good baseline performance
### Weaknesses
* Behind top-tier models in reasoning
* Needs tuning for best results
### As a result;
If your company says “no cloud AI,” this is your friend.
---
## 📊 Comparison Table Between AI Models
| Model | Best For | Weakness |
| ------------ | ------------------------ | --------------------- |
| GPT-5.4 | Everything | Slightly slower |
| Claude 4.7 | Clean, maintainable code | Less aggressive fixes |
| Gemini 3.1 | Multimodal workflows | Inconsistent style |
| Mistral Code | Speed & local usage | Shallow reasoning |
| Code Llama 4 | Open-source flexibility | Needs tuning |
Image Prompt:
A sleek table-style infographic comparing AI models with icons, performance bars, and labels like “Best for speed”, “Best for reasoning”.
---
## 🤔 When to Use What (Real Scenarios)
### Use GPT-5.4 if:
* You’re building a full product
* You need architecture + implementation
* You want fewer “AI mistakes”
---
### Use Claude 4.7 if:
* You’re reviewing code
* You care about readability
* You’re working in a team
---
### Use Gemini 3.1 if:
* You debug using screenshots/logs
* You work with cloud infrastructure
* You want multimodal workflows
---
### Use Mistral / Code Llama if:
* You need local/private AI
* You want low cost
* You’re okay trading power for control
---
## 🔌 Where ABP Framework Fits In
If you're working with **ASP.NET Core and the ABP Framework**, these models can seriously boost productivity:
* GPT-5.4 → Generate **application services, DTOs, and modules**
* Claude → Clean up **domain layer logic**
* Gemini → Help debug **UI + backend integration issues**
The sweet spot?
👉 Use AI to scaffold ABP layers, then refine manually.
That keeps your architecture clean while still saving hours.
---
## 🚨 Reality Check
AI coding models in 2026 are powerful—but:
* They still hallucinate edge cases
* They don’t fully understand your business logic
* They can fix somewhere, break another
* They can not fix a bug even after you write 10 different prompts
So yeah—**don’t ship blind**.
Treat them like:
> A fast junior dev… who needs code review.
---
## TL;DR
👉 There’s no single “winner”—just the best tool for your workflow.
![](pic2.png)
---
If you're experimenting with these models in real projects (especially with ABP), it's worth trying **multiple models side-by-side**. The differences become obvious *fast*.

BIN
docs/en/Community-Articles/2026-04-17-Top-AI-Coding-Models-2026-Rankings/cover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

BIN
docs/en/Community-Articles/2026-04-17-Top-AI-Coding-Models-2026-Rankings/pic1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
docs/en/Community-Articles/2026-04-17-Top-AI-Coding-Models-2026-Rankings/pic2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 KiB

2
docs/en/cli/index.md

@ -241,6 +241,8 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md
* `-no-text-template-management`: Skips the Text Template Management module.
* `-file-management`: Includes the File Management module.
* `-chat`: Includes the Chat module.
* `-ai-management`: Includes the [AI Management](./../modules/ai-management/index.md) module.
* `-ai-providers <providers>`: AI providers (comma-separated). Valid values: `Ollama`, `OpenAI`. (Requires `-ai-management`)
* `--legacy`: Generates a legacy solution.
* `trust-version`: Trusts the user's version and does not check if the version exists or not. If the template with the given version is found in the cache, it will be used, otherwise throws an exception.

37
docs/en/framework/fundamentals/localization.md

@ -126,6 +126,43 @@ var str2 = L["Hi__0"]; // Bye World!
var str3 = L["Hi__1"]; // Hello World!
````
You can have more than one localization file with the same culture: files will be merged. This is useful for large modules where splitting translations by feature keeps each file manageable.
**Example file structure:**
```
Localization/
└── MyResource/
├── en.json ← base / shared strings
├── en_Authors.json ← Author feature strings
├── en_Books.json ← Book feature strings
└── en_Users.json ← User feature strings
```
Files are sorted by name (ordinal order) before merging, so the effective merge order is `en.json``en_Authors.json``en_Books.json``en_Users.json`.
```
en.json en_Authors.json en_Books.json
┌─────────────────┐ ┌───────────────┐ ┌──────────────────┐
│ DisplayName=Name│ │ Author.Id=Id │ │ Book.Id=ISBN │
│ SaveButton=Save │ │ Author.Bio=.. │ │ Book.Title=Title │
└─────────────────┘ └───────────────┘ └──────────────────┘
│ │ │
└──────────────────┴──────────────────┘
│ merge (later file wins on duplicate keys)
┌────────────────────┐
│ DisplayName = Name │
│ SaveButton = Save │
│ Author.Id = Id │
│ Author.Bio = ... │
│ Book.Id = ISBN │
│ Book.Title = Title│
└────────────────────┘
```
> Note: If the same key is defined in multiple files, the value from the last file (in sort order) wins.
### Default Resource
`AbpLocalizationOptions.DefaultResourceType` can be set to a resource type, so it is used when the localization resource was not specified:

4
docs/en/framework/infrastructure/background-jobs/index.md

@ -271,9 +271,9 @@ If multiple applications share the same storage for background jobs and workers
Set `ApplicationName` property in `AbpBackgroundJobWorkerOptions` to your application's name:
````csharp
public override void PreConfigureServices(ServiceConfigurationContext context)
public override void ConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<AbpBackgroundJobWorkerOptions>(options =>
Configure<AbpBackgroundJobWorkerOptions>(options =>
{
options.ApplicationName = context.Services.GetApplicationName()!;
});

4
docs/en/framework/infrastructure/background-workers/index.md

@ -212,9 +212,9 @@ If multiple applications share the same storage for background jobs and workers
Set `ApplicationName` property in `AbpBackgroundJobWorkerOptions` to your application's name:
````csharp
public override void PreConfigureServices(ServiceConfigurationContext context)
public override void ConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<AbpBackgroundJobWorkerOptions>(options =>
Configure<AbpBackgroundJobWorkerOptions>(options =>
{
options.ApplicationName = context.Services.GetApplicationName()!;
});

1
docs/en/modules/index.md

@ -40,6 +40,7 @@ Here are all the free and pro application modules developed and maintained as a
* **[OpenIddict (Pro)](openiddict-pro.md)**: Managing the openiddict objects like applications, scopes.
* **[Payment (Pro)](payment.md)**: Payment gateway integrations.
* [**Permission Management**](permission-management.md): Used to persist permissions.
* [**Operation Rate Limiting**](operation-rate-limiting.md): Provides application/domain code level rate-limiting features.
* **[SaaS (Pro)](saas.md)**: Manage tenants, editions and features to create your multi-tenant / SaaS application.
* **[Setting Management](setting-management.md)**: Used to persist and manage the [settings](../framework/infrastructure/settings.md).
* [**Tenant Management**](tenant-management.md): Manages tenants for a [multi-tenant](../framework/architecture/multi-tenancy) application.

12
docs/en/modules/operation-rate-limiting.md

@ -15,7 +15,7 @@ ABP provides an operation rate limiting system that allows you to control the fr
* Do not allow generating a "monthly sales report" more than 2 times per day for each user (if generating the report is resource-intensive).
* Restrict login attempts per IP address to prevent brute-force attacks.
> This is not for [ASP.NET Core's built-in rate limiting middleware](https://learn.microsoft.com/en-us/aspnet/core/performance/rate-limit) which works at the HTTP request pipeline level. This module works at the **application/domain code level** and is called explicitly from your services. See the [Combining with ASP.NET Core Rate Limiting](#combining-with-aspnet-core-rate-limiting) section for a comparison.
> This is not for [ASP.NET Core's built-in rate limiting middleware](https://learn.microsoft.com/en-us/aspnet/core/performance/rate-limit), which works at the HTTP request pipeline level. This module works at the **application/domain code level** and is called explicitly from your services. See the [ASP.NET Core Rate Limiting vs ABP Operation Rate Limiting](#aspnet-core-rate-limiting-vs-abp-operation-rate-limiting) section for the complete comparison.
## How to Install
@ -324,6 +324,8 @@ await checker.CheckAsync("SendSmsCode",
new OperationRateLimitingContext { Parameter = phoneNumber });
````
> **Important:** `PartitionByParameter` uses the parameter value **as-is** without any normalization. If you pass user-supplied values (e.g., email addresses, phone numbers), you are responsible for normalizing them before passing. For example, `user@example.com` and `User@Example.COM` will be treated as **different** partition keys. Use `PartitionByEmail` or `PartitionByPhoneNumber` instead when the parameter is an email or phone number — they handle normalization automatically.
### PartitionByCurrentUser
Uses `ICurrentUser.Id` as the partition key. The user must be authenticated:
@ -357,7 +359,7 @@ policy.WithFixedWindow(TimeSpan.FromMinutes(15), maxCount: 10)
### PartitionByEmail
Resolves from `context.Parameter` first, then falls back to `ICurrentUser.Email`:
Resolves from `context.Parameter` first, then falls back to `ICurrentUser.Email`. The value is automatically **normalized to uppercase** (using `ToUpperInvariant()`) so that `user@example.com` and `User@Example.COM` share the same rate limit counter:
````csharp
policy.WithFixedWindow(TimeSpan.FromMinutes(1), maxCount: 1)
@ -370,7 +372,7 @@ await checker.CheckAsync("SendEmailCode",
### PartitionByPhoneNumber
Works the same way as `PartitionByEmail`: resolves from `context.Parameter` first, then falls back to `ICurrentUser.PhoneNumber`.
Works the same way as `PartitionByEmail`: resolves from `context.Parameter` first, then falls back to `ICurrentUser.PhoneNumber`. The value is automatically **normalized** by stripping formatting characters (spaces, dashes, dots, parentheses) while keeping `+` and digits, so that `+1-555-123-4567` and `+15551234567` share the same counter.
### Custom Partition (PartitionBy)
@ -650,9 +652,9 @@ await checker.CheckAsync("UserApiLimit",
This approach gives you full flexibility while keeping the API simple — `PartitionByCurrentUser()` is a convenience shortcut for "always use the current authenticated user", and `PartitionByParameter()` is for "I want to specify the value explicitly".
### Combining with ASP.NET Core Rate Limiting
### ASP.NET Core Rate Limiting vs ABP Operation Rate Limiting
This module and ASP.NET Core's built-in [rate limiting middleware](https://learn.microsoft.com/en-us/aspnet/core/performance/rate-limit) serve different purposes and can be used together:
This module and ASP.NET Core's built-in [rate limiting middleware](https://learn.microsoft.com/en-us/aspnet/core/performance/rate-limit) serve different purposes but can be used together. See the below comparison table:
| | ASP.NET Core Rate Limiting | Operation Rate Limiting |
|---|---|---|

5
docs/en/others/aspnet-zero-vs-abp.md

@ -477,6 +477,11 @@
<td><a href="https://abp.io/docs/latest/suite" target="_blank">ABP Suite</a></td>
<td><a href="https://docs.aspnetzero.com/en/common/latest/Rapid-Application-Development" target="_blank">Power Tools</a></td>
</tr>
<tr>
<td>AI Agent</td>
<td>ABP Studio AI Agent</a></td>
<td><i class="fa fa-minus text-secondary"></i></td>
</tr>
<tr>
<td colspan="3"><strong>Support</strong></td>
</tr>

15
docs/en/package-version-changes.md

@ -7,6 +7,12 @@
# Package Version Changes
## 10.3.1
| Package | Old Version | New Version | PR |
|---------|-------------|-------------|-----|
| System.Security.Cryptography.Xml | 10.0.2 | 10.0.6 | #25279 |
## 10.3.0-rc.1
| Package | Old Version | New Version | PR |
@ -15,6 +21,15 @@
| Autofac.Extensions.DependencyInjection | 10.0.0 | 11.0.0 | #25190 |
| Microsoft.Bcl.AsyncInterfaces | 10.0.2 | 10.0.4 | #25190 |
## 10.2.1
| Package | Old Version | New Version | PR |
|---------|-------------|-------------|-----|
| Blazorise | 2.0.0 | 2.0.4 | #25264 |
| Blazorise.Components | 2.0.0 | 2.0.4 | #25264 |
| Blazorise.DataGrid | 2.0.0 | 2.0.4 | #25264 |
| Blazorise.Snackbar | 2.0.0 | 2.0.4 | #25264 |
## 10.2.0-rc.4
| Package | Old Version | New Version | PR |

529
docs/en/release-info/release-notes.md

@ -11,53 +11,53 @@ This document contains **brief release notes** for each release. Release notes o
Also see the following notes about ABP releases:
* [ABP Studio release notes](../studio/release-notes.md)
* [Change logs for ABP pro packages](https://abp.io/pro-releases)
- [ABP Studio release notes](../studio/release-notes.md)
- [Change logs for ABP pro packages](https://abp.io/pro-releases)
## 10.3 (2026-04-01)
## 10.3 (2026-04-15)
> This is currently an RC (release-candidate) and you can see the detailed **[blog post / announcement](https://abp.io/community/announcements/announcing-abp-10-3-release-candidate-hgnpr9jq)** for the v10.3 release.
See the detailed **[blog post / announcement](https://abp.io/community/announcements/announcing-abp-10-3-release-candidate-hgnpr9jq)** for the v10.3 release.
* OpenIddict: `private_key_jwt` Client Authentication + `abp generate-jwks`
* Event Bus: String-Based Event Publishing with Dynamic Payload
* Background Jobs/Workers: String-Based Publishing with Dynamic Payload
* API Definition Endpoint: Descriptions and Documentation Support
* Entity Cache: New Batch APIs (`FindMany*` / `GetMany*`)
* Angular: User/Tenant Sharing and Tenant Switch Experience
* Angular: Upgrade to 21.2 + TypeScript 5.9
* Introducing the `Volo.Abp.LuckyPenny.AutoMapper` Provider
* Security Improvements (Account Pro Module)
- OpenIddict: `private_key_jwt` Client Authentication + `abp generate-jwks`
- Event Bus: String-Based Event Publishing with Dynamic Payload
- Background Jobs/Workers: String-Based Publishing with Dynamic Payload
- API Definition Endpoint: Descriptions and Documentation Support
- Entity Cache: New Batch APIs (`FindMany`* / `GetMany*`)
- Angular: User/Tenant Sharing and Tenant Switch Experience
- Angular: Upgrade to 21.2 + TypeScript 5.9
- Introducing the `Volo.Abp.LuckyPenny.AutoMapper` Provider
- Security Improvements (Account Pro Module)
## 10.2 (2026-02-24)
See the detailed **[blog post / announcement](https://abp.io/community/announcements/announcing-abp-10-2-stable-release-x47ytfww)** for the v10.2 release.
* Multi-Tenant Account Usage: Shared User Accounts
* Prevent Privilege Escalation: Assignment Restrictions for Roles and Permissions
* `ClientResourcePermissionValueProvider` for OAuth/OpenIddict
* Angular: Hybrid Localization Support
* Angular: Extensible Table Row Detail
* Angular: CMS Kit Module Features
* Blazor: Upgrade to Blazorise 2.0
* Identity: Single Active Token Providers
* TickerQ Package Upgrade to 10.1.1
* [AI Management Module](../modules/ai-management/index.md): MCP (Model Context Protocol) Support
* [AI Management Module](../modules/ai-management/index.md): RAG with File Upload
* [AI Management Module](../modules/ai-management/index.md): OpenAI-Compatible Chat Endpoint
* [File Management Module](../modules/file-management.md): Resource-Based Authorization
- Multi-Tenant Account Usage: Shared User Accounts
- Prevent Privilege Escalation: Assignment Restrictions for Roles and Permissions
- `ClientResourcePermissionValueProvider` for OAuth/OpenIddict
- Angular: Hybrid Localization Support
- Angular: Extensible Table Row Detail
- Angular: CMS Kit Module Features
- Blazor: Upgrade to Blazorise 2.0
- Identity: Single Active Token Providers
- TickerQ Package Upgrade to 10.1.1
- [AI Management Module](../modules/ai-management/index.md): MCP (Model Context Protocol) Support
- [AI Management Module](../modules/ai-management/index.md): RAG with File Upload
- [AI Management Module](../modules/ai-management/index.md): OpenAI-Compatible Chat Endpoint
- [File Management Module](../modules/file-management.md): Resource-Based Authorization
## 10.1 (2026-01-06)
See the detailed **[blog post / announcement](https://abp.io/community/announcements/announcing-abp-10-1-stable-release-z4xfn1me)** for the v10.1 release.
* Resource-Based Authorization
* Introducing the [TickerQ Background Worker Provider](../framework/infrastructure/background-workers/tickerq.md)
* Angular UI: Version Upgrade to **v21**
* [File Management Module](../modules/file-management.md): Public File Sharing Support
* [Payment Module](../modules/payment.md): Public Page Implementation for Blazor & Angular UIs
* [AI Management Module](../modules/ai-management/index.md) for Blazor & Angular UIs
* [Identity PRO Module](../modules/identity-pro.md): Password History Support
* [Account PRO Module](../modules/account-pro.md): Introducing WebAuthn Passkeys
- Resource-Based Authorization
- Introducing the [TickerQ Background Worker Provider](../framework/infrastructure/background-workers/tickerq.md)
- Angular UI: Version Upgrade to **v21**
- [File Management Module](../modules/file-management.md): Public File Sharing Support
- [Payment Module](../modules/payment.md): Public Page Implementation for Blazor & Angular UIs
- [AI Management Module](../modules/ai-management/index.md) for Blazor & Angular UIs
- [Identity PRO Module](../modules/identity-pro.md): Password History Support
- [Account PRO Module](../modules/account-pro.md): Introducing WebAuthn Passkeys
## 10.0 (2025-11-18)
@ -65,45 +65,45 @@ See the detailed **[blog post / announcement](https://abp.io/community/announcem
See the detailed **[blog post / announcement](https://abp.io/community/announcements/abp.io-platform-10.0-final-has-been-released-spknn925)** for the v10.0 release.
* Upgraded to .NET 10.0
* Upgraded to `Blazorise` **v1.8.6**
* New PRO Module: [Elsa Workflows](../modules/elsa-pro.md)
* New Object Mapper: **Mapperly**
* Localization: Nested Object Support in JSON Files
* EF Core Shared Entity Types on Repositories
* Angular SSR Support
- Upgraded to .NET 10.0
- Upgraded to `Blazorise` **v1.8.6**
- New PRO Module: [Elsa Workflows](../modules/elsa-pro.md)
- New Object Mapper: **Mapperly**
- Localization: Nested Object Support in JSON Files
- EF Core Shared Entity Types on Repositories
- Angular SSR Support
## 9.3 (2025-06-17)
See the detailed **[blog post / announcement](https://abp.io/community/announcements/announcing-abp-9-3-stable-release-fw4n9sng)** for the v9.3 release.
* Cron Expression Support for Background Workers
* Docs Module: PDF Export
* Angular UI: Standalone Package Structure
* Upgraded to `Blazorise` **v1.7.7**
* Audit Logging Module: Excel Export
* Angular UI: Version Upgrade to **v20**
- Cron Expression Support for Background Workers
- Docs Module: PDF Export
- Angular UI: Standalone Package Structure
- Upgraded to `Blazorise` **v1.7.7**
- Audit Logging Module: Excel Export
- Angular UI: Version Upgrade to **v20**
## 9.2 (2025-06-02)
See the detailed **[blog post / announcement](https://abp.io/community/articles/announcing-abp-9-2-stable-release-061qmtzb)** for the v9.2 release.
* Added `ApplicationName` Property to Isolate Background Jobs & Background Workers
* Docs Module: Added "Alternative Words" to Filter Items
* Introducing the [Bunny BLOB Storage Provider](../framework/infrastructure/blob-storing/bunny.md)
* Upgraded `MongoDB.Driver` to **v3.1.0**
* Identity Pro Module: Require Email Verification to Register
* Switching users during OAuth login
- Added `ApplicationName` Property to Isolate Background Jobs & Background Workers
- Docs Module: Added "Alternative Words" to Filter Items
- Introducing the [Bunny BLOB Storage Provider](../framework/infrastructure/blob-storing/bunny.md)
- Upgraded `MongoDB.Driver` to **v3.1.0**
- Identity Pro Module: Require Email Verification to Register
- Switching users during OAuth login
## 9.1 (2025-03-05)
See the detailed **[blog post / announcement](https://abp.io/community/articles/abp.io-platform-9.1-final-has-been-released-h96a56qa)** for the v9.1 release.
* Upgraded to Angular 19
* Upgraded to OpenIddict 6.0
* New Blazor WASM Bundling System
* Idle Session Warning
* Lazy Expandable Feature for Documentation System
- Upgraded to Angular 19
- Upgraded to OpenIddict 6.0
- New Blazor WASM Bundling System
- Idle Session Warning
- Lazy Expandable Feature for Documentation System
## 9.0 (2024-11-19)
@ -111,341 +111,342 @@ See the detailed **[blog post / announcement](https://abp.io/blog/abp-9-0-stable
> **Note**: ABP has upgraded to .NET 9.0, so if you plan to use ABP 9.0, you’ll need to migrate your solutions to .NET 9.0. You can refer to the [Migrate from ASP.NET Core 8.0 to 9.0](https://learn.microsoft.com/en-us/aspnet/core/migration/80-90) documentation for guidance. However, ABP’s NuGet packages are compatible with both .NET 8 and .NET 9, allowing developers to continue using .NET 8 while still enjoying the latest features and improvements of the ABP Framework without upgrading their SDK.
* Upgraded to .NET 9.0
* Introducing the `Extension Property Policy`
* Google Cloud Storage BLOB Provider
* Removed React Native mobile option from free templates
* ABP Suite: Better naming for multiple navigation properties to the same entity
* CMS Kit Pro: Feedback feature improvements
- Upgraded to .NET 9.0
- Introducing the `Extension Property Policy`
- Google Cloud Storage BLOB Provider
- Removed React Native mobile option from free templates
- ABP Suite: Better naming for multiple navigation properties to the same entity
- CMS Kit Pro: Feedback feature improvements
## 8.3 (2024-09-05)
See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-3-stable-release)** for the v8.3 release.
* CMS Kit: Marked Items & Approvement System for Commenting Feature
* Enhancements on the Docs Module (Google Translation support & new single project mode)
* Using DbFunction for generating more precise SQL commands for Global Query Filters
* CMS Kit (Pro): FAQ System
- CMS Kit: Marked Items & Approvement System for Commenting Feature
- Enhancements on the Docs Module (Google Translation support & new single project mode)
- Using DbFunction for generating more precise SQL commands for Global Query Filters
- CMS Kit (Pro): FAQ System
## 8.2 (2024-06-26)
See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-2-stable-release)** for the v8.2 release.
* Blazor Full-Stack Web App UI.
* Introducing the `IBlockUiService` for Blazor UI (disables/blocks the page or a part of the page).
* Session Management (prevent concurrent login, view & manage users' sessions).
* ABP Suite: File/Image property.
* ABP Suite: `DateOnly` & `TimeOnly` types.
* Periodic Log Deletion for Audit Logs.
- Blazor Full-Stack Web App UI.
- Introducing the `IBlockUiService` for Blazor UI (disables/blocks the page or a part of the page).
- Session Management (prevent concurrent login, view & manage users' sessions).
- ABP Suite: File/Image property.
- ABP Suite: `DateOnly` & `TimeOnly` types.
- Periodic Log Deletion for Audit Logs.
## 8.1 (2024-04-04)
See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-1-stable-release)** for the v8.1 release.
* Introducing the `ExposeKeyedServiceAttribute` & `DisableAbpFeaturesAttribute`.
* Custom menu component support for MVC UI.
* ABP Suite: Bulk delete.
* ABP Suite: Filterable properties.
* ABP Suite: Customizable page titles.
* ABP Suite: Establishing relationships with installed ABP modules' entities.
* ABP Suite: Support `BasicAggregateRoot` base class.
* ABP Studio v0.6.5.
- Introducing the `ExposeKeyedServiceAttribute` & `DisableAbpFeaturesAttribute`.
- Custom menu component support for MVC UI.
- ABP Suite: Bulk delete.
- ABP Suite: Filterable properties.
- ABP Suite: Customizable page titles.
- ABP Suite: Establishing relationships with installed ABP modules' entities.
- ABP Suite: Support `BasicAggregateRoot` base class.
- ABP Studio v0.6.5.
## 8.0 (2023-12-19)
See the detailed **[blog post / announcement](https://abp.io/blog/abp-8-0-stable-release-with-dotnet-8-0)** for the v8.0 release.
* Upgraded to **.NET 8.0** & **Angular 17**.
* Dynamic Claims (allows to get the latest user claims for the current user).
* CDN support for Bundling & Minification System.
* Read-only repositories
* ABP Suite: Generating Master/Detail Relationship
* Getting profile picture from social/external logins.
* Switch Ocelot to YARP for the API Gateway for Microservice Solution Template.
* Password complexity indicators for MVC & Blazor UIs.
* Readonly view & export/import support for Identity/Users page.
- Upgraded to **.NET 8.0** & **Angular 17**.
- Dynamic Claims (allows to get the latest user claims for the current user).
- CDN support for Bundling & Minification System.
- Read-only repositories
- ABP Suite: Generating Master/Detail Relationship
- Getting profile picture from social/external logins.
- Switch Ocelot to YARP for the API Gateway for Microservice Solution Template.
- Password complexity indicators for MVC & Blazor UIs.
- Readonly view & export/import support for Identity/Users page.
## 7.4 (2023-08-16)
See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-7-4-stable-release)** for the v7.4 release.
* Dynamic Setting Store (collects and gets all setting definitions from a single point).
* Introducing the `AdditionalAssemblyAttribute`.
* `CorrelationId` support on distributed events.
* Database migration system for EF Core.
* Preserving customizations on code re-generation with ABP Suite.
* Support custom text-templates in distributed scenarios.
* MAUI & React Native mobile applications are re-designed and revised for functionality.
* A new CMS Kit feature to collect feedback from users about the site's contents.
- Dynamic Setting Store (collects and gets all setting definitions from a single point).
- Introducing the `AdditionalAssemblyAttribute`.
- `CorrelationId` support on distributed events.
- Database migration system for EF Core.
- Preserving customizations on code re-generation with ABP Suite.
- Support custom text-templates in distributed scenarios.
- MAUI & React Native mobile applications are re-designed and revised for functionality.
- A new CMS Kit feature to collect feedback from users about the site's contents.
## 7.3 (2023-06-12)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-7-3-Final-Has-Been-Released)** for the v7.3 release.
* Introducing the `Volo.Abp.Imaging` packages, which allows you to compress and resize images.
* ABP CLI: `switch-to-local` command.
* Monitoring distributed events.
* Allow ordering of the local event handlers.
* [Account Module](../modules/account.md): Using Authenticator App for Two-Factor Authentication.
* Support for the [Module Entity Extensions](../framework/architecture/modularity/extending/module-entity-extensions.md) in the [CMS Kit Pro Module](../modules/cms-kit/index.md).
* New Account Layout Design for [LeptonX Theme](../ui-themes/lepton-x/index.md).
* Many enhancements and fixes for the 7.3 version.
- Introducing the `Volo.Abp.Imaging` packages, which allows you to compress and resize images.
- ABP CLI: `switch-to-local` command.
- Monitoring distributed events.
- Allow ordering of the local event handlers.
- [Account Module](../modules/account.md): Using Authenticator App for Two-Factor Authentication.
- Support for the [Module Entity Extensions](../framework/architecture/modularity/extending/module-entity-extensions.md) in the [CMS Kit Pro Module](../modules/cms-kit/index.md).
- New Account Layout Design for [LeptonX Theme](../ui-themes/lepton-x/index.md).
- Many enhancements and fixes for the 7.3 version.
## 7.2 (2023-05-03)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-7-2-Final-Has-Been-Released)** for the v7.2 release.
* Grouping of the navigation menu items.
* New Components for Angular UI.
* **[LeptonX Theme](../ui-themes/lepton-x)** - Navigation Menu Item Grouping.
* Support for the **Authority Delegation** in the **[Account Module](../modules/account.md)**.
* Forcing Password Change at Next Logon.
* Periodic Password Changes / Password Aging.
* ABP Suite: Show/Hide Properties on Create/Update/List Pages
* **CMS Kit Comments**: Disallowing External URLs.
- Grouping of the navigation menu items.
- New Components for Angular UI.
- **[LeptonX Theme](../ui-themes/lepton-x)** - Navigation Menu Item Grouping.
- Support for the **Authority Delegation** in the **[Account Module](../modules/account.md)**.
- Forcing Password Change at Next Logon.
- Periodic Password Changes / Password Aging.
- ABP Suite: Show/Hide Properties on Create/Update/List Pages
- **CMS Kit Comments**: Disallowing External URLs.
## 7.1 (2023-03-22)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-IO-Platform-7-1-Final-Has-Been-Released)** for the v7.1 release.
* New Blazor WASM option for Application Single Layer Startup template.
* Introducing the `IHasEntityVersion` & `EntitySynchronizer` services.
* Introducing the `DeleteDirectAsync` method for the `IRepository` interface.
* **Blazor WebAssembly** option for the single-layer startup template.
* **ABP Suite** code generation for **MAUI Blazor Hybrid** solutions.
* Allow to **impersonate** an arbitrary **user** in the SaaS module.
* Many enhancements and fixes for the 7.1 version.
- New Blazor WASM option for Application Single Layer Startup template.
- Introducing the `IHasEntityVersion` & `EntitySynchronizer` services.
- Introducing the `DeleteDirectAsync` method for the `IRepository` interface.
- **Blazor WebAssembly** option for the single-layer startup template.
- **ABP Suite** code generation for **MAUI Blazor Hybrid** solutions.
- Allow to **impersonate** an arbitrary **user** in the SaaS module.
- Many enhancements and fixes for the 7.1 version.
## 7.0 (2023-01-05)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-7.0-Final-Has-Been-Released)** for the v7.0 release.
* Upgraded to **.NET 7.0**.
* Upgraded to **OpenIddict 4.0**.
* **Dapr** Integration.
* Introducing the **Integration Services**.
* New **MAUI Blazor Hybrid** UI.
* Implemented **external localization**, **dynamic feature** and **dynamic permission** systems to allow more advanced microservice scenarios. All they are applied to the **microservice startup template**.
* **WeChat** and **Alipay** integrations for the **Payment** module.
* Allow host users to **change the password** of a user of a tenant.
* Allow host users to **test connection string** of a tenant database on the UI.
* Introduce **permission** for **searching other users** in the chat module.
- Upgraded to **.NET 7.0**.
- Upgraded to **OpenIddict 4.0**.
- **Dapr** Integration.
- Introducing the **Integration Services**.
- New **MAUI Blazor Hybrid** UI.
- Implemented **external localization**, **dynamic feature** and **dynamic permission** systems to allow more advanced microservice scenarios. All they are applied to the **microservice startup template**.
- **WeChat** and **Alipay** integrations for the **Payment** module.
- Allow host users to **change the password** of a user of a tenant.
- Allow host users to **test connection string** of a tenant database on the UI.
- Introduce **permission** for **searching other users** in the chat module.
## 6.0 (2022-10-05)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-6.0-Final-Has-Been-Released)** for the v6.0 release.
* New **OpenIddict** integration module (replacing the IdentityServer integration module).
* The **[LeptonX theme](https://x.leptontheme.com/)** is the default theme now, allowing to use the [old Lepton](https://leptontheme.com/) theme too.
* New **.NET MAUI mobile application**.
* **Blazor UI** for the **Chat** module.
* **Blazor admin UI** for the **CMS Kit** module.
* Allow to add **poll widgets** in blog/page contents in the **CMS Kit** module.
* **Cookie consent** feature for the **GDPR** module.
* Optional **PWA** support.
* Exporting to **excel** for **ABP Suite** code generation.
- New **OpenIddict** integration module (replacing the IdentityServer integration module).
- The **[LeptonX theme](https://x.leptontheme.com/)** is the default theme now, allowing to use the [old Lepton](https://leptontheme.com/) theme too.
- New **.NET MAUI mobile application**.
- **Blazor UI** for the **Chat** module.
- **Blazor admin UI** for the **CMS Kit** module.
- Allow to add **poll widgets** in blog/page contents in the **CMS Kit** module.
- **Cookie consent** feature for the **GDPR** module.
- Optional **PWA** support.
- Exporting to **excel** for **ABP Suite** code generation.
## 5.3 (2022-06-14)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-5.3-Final-Has-Been-Released)** for the v5.3 release.
* New module: **GDPR** (currently, allows to download/delete user's personal data).
* **Polling** feature for the [CMS Kit module](../modules/cms-kit/index.md).
* OAuth as **external login provider** for the [Identity module](../modules/identity.md).
* **ABP Suite**: Support for the no-layers startup template, concurrency stamp support on code generation, downloading Suite logs, using ABP CLI to trigger code generation.
* **Docker-compose** configuration for the no-layers startup template.
* **PWA** support for Blazor WASM and Angular UI.
- New module: **GDPR** (currently, allows to download/delete user's personal data).
- **Polling** feature for the [CMS Kit module](../modules/cms-kit/index.md).
- OAuth as **external login provider** for the [Identity module](../modules/identity.md).
- **ABP Suite**: Support for the no-layers startup template, concurrency stamp support on code generation, downloading Suite logs, using ABP CLI to trigger code generation.
- **Docker-compose** configuration for the no-layers startup template.
- **PWA** support for Blazor WASM and Angular UI.
## 5.2 (2022-04-05)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-IO-Platform-5-2-Final-Has-Been-Released)** for the v5.2 release.
* Code generation with **many to many relation** support for the [ABP Suite](../suite/index.md).
* The new **single-layer**, simpler startup solution template.
* Migrated to **Blazorise 1.0** for the Blazor UI.
* Improvements on the microservice startup solution, pre-built application modules and other existing features.
* API Versioning.
* Allowing to hide default ABP endpoints from the Swagger UI.
- Code generation with **many to many relation** support for the [ABP Suite](../suite/index.md).
- The new **single-layer**, simpler startup solution template.
- Migrated to **Blazorise 1.0** for the Blazor UI.
- Improvements on the microservice startup solution, pre-built application modules and other existing features.
- API Versioning.
- Allowing to hide default ABP endpoints from the Swagger UI.
## 5.1 (2022-01-12)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-v5-1-Has-Been-Released)** for the v5.1 release.
* Upgraded to **Angular 13**.
* Changed the application startup solution to use the new ASP.NET Core **minimal hosting model**.
* New **URL Forwarding** feature for the CKS Kit Pro module.
* Improvements and fixes for the features shipped with the 5.0 release.
- Upgraded to **Angular 13**.
- Changed the application startup solution to use the new ASP.NET Core **minimal hosting model**.
- New **URL Forwarding** feature for the CKS Kit Pro module.
- Improvements and fixes for the features shipped with the 5.0 release.
## 5.0 (2021-12-14)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-IO-Platform-5.0-RC-1-Has-Been-Released)** for the v5.0.
* Upgraded to **.NET 6.0**.
* Upgraded to **Bootstrap 5.1**.
* Transactional Outbox & Inbox for the distributed event bus.
* **User impersonation** (passwordless login with another user's account).
* **Tenant impersonation** (passwordless login as a tenant).
* Added **Helm charts** to the microservice startup template to deploy to **Kubernetes**.
* Added host and tenant **dashboards** to the microservice startup template.
* **Generate entities** and CRUD pages from **database tables** with ABP Suite.
* Pre-configured **social logins** for the microservice startup template.
* Switched to **static C# and JavaScript proxies** for all the modules.
* **Removed NGXS** and states from the Angular UI.
* Many improvements on existing modules and ABP Suite.
- Upgraded to **.NET 6.0**.
- Upgraded to **Bootstrap 5.1**.
- Transactional Outbox & Inbox for the distributed event bus.
- **User impersonation** (passwordless login with another user's account).
- **Tenant impersonation** (passwordless login as a tenant).
- Added **Helm charts** to the microservice startup template to deploy to **Kubernetes**.
- Added host and tenant **dashboards** to the microservice startup template.
- **Generate entities** and CRUD pages from **database tables** with ABP Suite.
- Pre-configured **social logins** for the microservice startup template.
- Switched to **static C# and JavaScript proxies** for all the modules.
- **Removed NGXS** and states from the Angular UI.
- Many improvements on existing modules and ABP Suite.
## 4.4 (2021-08-02)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-4.4-Final-Has-Been-Released!)** for the v4.4.
* Removed the `EntityFrameworkCore.DbMigrations` project for simplicity.
* Dynamic menu management for the [CMS Kit module](../modules/cms-kit/index.md).
* New ABP CLI commands (`install-libs`, `prompt` and `batch`).
* **Subscription** system & **payment** integration for the [SaaS module](../modules/saas.md).
* SaaS module: Allow to make a **tenant active/passive** and **limit user count**.
* [ABP Suite](../suite/index.md) **code generation** for the [microservice solution](../solution-templates/microservice/index.md).
* Allow to set **multiple connection strings** for each tenant, to separate a tenant's database per module/microservice.
* Angular UI: **Two-factor** authentication for resource owner password flow.
* **New localizations**: Hindi, Italian, Arabic, Finnish, French.
* A lot of small improvements and fixes for the current modules, themes and the tooling.
- Removed the `EntityFrameworkCore.DbMigrations` project for simplicity.
- Dynamic menu management for the [CMS Kit module](../modules/cms-kit/index.md).
- New ABP CLI commands (`install-libs`, `prompt` and `batch`).
- **Subscription** system & **payment** integration for the [SaaS module](../modules/saas.md).
- SaaS module: Allow to make a **tenant active/passive** and **limit user count**.
- [ABP Suite](../suite/index.md) **code generation** for the [microservice solution](../solution-templates/microservice/index.md).
- Allow to set **multiple connection strings** for each tenant, to separate a tenant's database per module/microservice.
- Angular UI: **Two-factor** authentication for resource owner password flow.
- **New localizations**: Hindi, Italian, Arabic, Finnish, French.
- A lot of small improvements and fixes for the current modules, themes and the tooling.
## 4.3 (2021-04-23)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-v4-3-Has-Been-Released)** for the v4.3.
* New module: **CMS Kit (pro)**
* New module: **Forms**
* **Blazor Server Side** support.
* **Extensibility** system for the Blazor UI.
* A lot of improvements done to ripen the **Microservice Startup Template**, including "new service" template, automatic database migrations, solution structure improvements, Tye, Prometheus, Grafana integrations, and more...
* Allow to use a **separate database schema** for tenants to not include host-related empty tables in tenant databases.
* Creating & **migrating tenant databases on the fly**.
* **Enabling/disabling modules** per edition/tenant.
* **Email settings** page.
* **Required** navigation properties on Suite code generation.
- New module: **CMS Kit (pro)**
- New module: **Forms**
- **Blazor Server Side** support.
- **Extensibility** system for the Blazor UI.
- A lot of improvements done to ripen the **Microservice Startup Template**, including "new service" template, automatic database migrations, solution structure improvements, Tye, Prometheus, Grafana integrations, and more...
- Allow to use a **separate database schema** for tenants to not include host-related empty tables in tenant databases.
- Creating & **migrating tenant databases on the fly**.
- **Enabling/disabling modules** per edition/tenant.
- **Email settings** page.
- **Required** navigation properties on Suite code generation.
## 4.2 (2021-01-28)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-4-2-Final-Has-Been-Released)** for the v4.2.
* Introducing the `IRepository.GetQueryableAsync()` method.
* Bulk operations for EF Core (`InsertManyAsync`, `UpdateManyAsync` and `DeleteManyAsync`).
* **Microservice startup template** (initial) to create microservice solutions.
* **Public website** application in the application startup template.
* **Blazor UI** for the Easy CRM sample application.
* Added login / **authorization** to the **Swagger UI** to test authorized APIs.
* **DBMS selection** on new application creation.
* Infrastructure for **Angular Unit Testing**.
* Iyzico integration for the **Payment** module.
* **Performance** optimization and other enhancements.
- Introducing the `IRepository.GetQueryableAsync()` method.
- Bulk operations for EF Core (`InsertManyAsync`, `UpdateManyAsync` and `DeleteManyAsync`).
- **Microservice startup template** (initial) to create microservice solutions.
- **Public website** application in the application startup template.
- **Blazor UI** for the Easy CRM sample application.
- Added login / **authorization** to the **Swagger UI** to test authorized APIs.
- **DBMS selection** on new application creation.
- Infrastructure for **Angular Unit Testing**.
- Iyzico integration for the **Payment** module.
- **Performance** optimization and other enhancements.
## 4.1 (2021-01-06)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-IO-Platform-v4-1-Final-Has-Been-Released)** for the v4.1.
* Introducing the **module entity extensions** system.
* Bundling & Minification System for Blazor UI.
* **Organization Unit** Management for the Blazor UI.
* **Identity Server** Management for the Blazor UI.
* ABP Suite: **Navigation Property Selection** with Typeahead (supported by all UI types).
* **Spanish** language translation.
- Introducing the **module entity extensions** system.
- Bundling & Minification System for Blazor UI.
- **Organization Unit** Management for the Blazor UI.
- **Identity Server** Management for the Blazor UI.
- ABP Suite: **Navigation Property Selection** with Typeahead (supported by all UI types).
- **Spanish** language translation.
## 4.0 (2020-12-03)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP.IO-Platform-4.0-with-.NET-5.0-in-the-4th-Year)** for the v4.0.
* Upgraded to **.NET 5.0**.
* The **Blazor UI** option is now stable and officially supported.
* Completed the Blazor UI for the **file management** module.
* Upgraded to the **Identity Server 4.1.1** and revised the management UI.
* ABP Suite: Blazor UI **code generation**.
* ABP Suite: **Navigation property selection** supports dropdowns with auto-complete & lazy load.
* ABP Suite: **Generate new modules** inside an application solution.
* ABP Suite: Made the **backend code generation optional** to allow re-generate the UI with a different UI framework.
- Upgraded to **.NET 5.0**.
- The **Blazor UI** option is now stable and officially supported.
- Completed the Blazor UI for the **file management** module.
- Upgraded to the **Identity Server 4.1.1** and revised the management UI.
- ABP Suite: Blazor UI **code generation**.
- ABP Suite: **Navigation property selection** supports dropdowns with auto-complete & lazy load.
- ABP Suite: **Generate new modules** inside an application solution.
- ABP Suite: Made the **backend code generation optional** to allow re-generate the UI with a different UI framework.
## 3.3 (2020-10-27)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-Framework-ABP-Commercial-3.3-Final-Have-Been-Released)** for the v3.3.
* Completed fundamental features, modules and the theme integration for the **Blazor UI**.
* Automatic **AntiForgery Token Validation** for HTTP APIs.
* New async LINQ extension methods for repositories.
* Stream support for the [Application Service](../framework/architecture/domain-driven-design/application-services.md) methods.
* Multi-Tenant **social/external logins** with options configurable on runtime.
* **Linked Accounts** system to link multiple accounts and switch between them easily.
* **Paypal** & **Stripe** integrations for the Payment Module.
* **reCAPTCHA** option for login & register forms.
* **ABP Suite** improvements.
- Completed fundamental features, modules and the theme integration for the **Blazor UI**.
- Automatic **AntiForgery Token Validation** for HTTP APIs.
- New async LINQ extension methods for repositories.
- Stream support for the [Application Service](../framework/architecture/domain-driven-design/application-services.md) methods.
- Multi-Tenant **social/external logins** with options configurable on runtime.
- **Linked Accounts** system to link multiple accounts and switch between them easily.
- **Paypal** & **Stripe** integrations for the Payment Module.
- **reCAPTCHA** option for login & register forms.
- **ABP Suite** improvements.
## 3.2 (2020-10-01)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-Framework-ABP-Commercial-3.2-RC-With-The-New-Blazor-UI)** for the v3.2.
* Released the preview (experimental) **Blazor UI** option.
* **Angular** UI for the [file management](https://abp.io/modules/Volo.FileManagement) module.
* Managing the **application features** for the **host** side.
* User **profile picture** for the account module.
* Options to enable, disable or force **two factor authentication** for tenants and users.
- Released the preview (experimental) **Blazor UI** option.
- **Angular** UI for the [file management](https://abp.io/modules/Volo.FileManagement) module.
- Managing the **application features** for the **host** side.
- User **profile picture** for the account module.
- Options to enable, disable or force **two factor authentication** for tenants and users.
## 3.1 (2020-09-03)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-Framework-v3.1-Final-Has-Been-Released)** for the v3.1 release.
* Completely re-written the ABP Suite **Angular UI code generation**, using the Angular Schematics system.
* Implemented **Authorization Code Authentication Flow** for the Angular UI.
* Revised and documented **social/external logins** for the account module and tested with major providers.
* Introduced the new external login system supporting to login via **LDAP / Active Directory**. Also, added a setting page to configure the LDAP options.
* Created a new **security log system** and the user interface to save and report all the authentication related operations (login, logout, change password...) for users.
* Implemented **email & phone number verification**.
* Implementing **locking a user** for a given period of time (locked users can not login to the application).
* Added breadcrumb and file icons for the file management module.
- Completely re-written the ABP Suite **Angular UI code generation**, using the Angular Schematics system.
- Implemented **Authorization Code Authentication Flow** for the Angular UI.
- Revised and documented **social/external logins** for the account module and tested with major providers.
- Introduced the new external login system supporting to login via **LDAP / Active Directory**. Also, added a setting page to configure the LDAP options.
- Created a new **security log system** and the user interface to save and report all the authentication related operations (login, logout, change password...) for users.
- Implemented **email & phone number verification**.
- Implementing **locking a user** for a given period of time (locked users can not login to the application).
- Added breadcrumb and file icons for the file management module.
## 3.0 (2020-07-01)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-Framework-v3.0-Has-Been-Released)** for the v3.0 release.
* Introducing the **Azure BLOB Storage Provider**.
* Created the Oracle Integration Package for EF Core.
* New **File Management Module** that is used to store and manage files in your application.
* Migrated the Angular UI to the **Angular 10**.
* Published an **[API documentation](https://docs.abp.io/api-docs/commercial/2.9/api/index.html)** web site to explore the classes of the ABP.
- Introducing the **Azure BLOB Storage Provider**.
- Created the Oracle Integration Package for EF Core.
- New **File Management Module** that is used to store and manage files in your application.
- Migrated the Angular UI to the **Angular 10**.
- Published an **[API documentation](https://docs.abp.io/api-docs/commercial/2.9/api/index.html)** web site to explore the classes of the ABP.
## 2.9 (2020-06-04)
See the detailed **[blog post / announcement](https://abp.io/blog/ABP-Framework-v2.9.0-Has-Been-Released)** for the v2.9 release.
* Performance improvements (pre-compiling razor pages).
* New **Organization Unit** Management UI for the [Identity Module](https://abp.io/modules/Volo.Identity.Pro) to create hierarchical organization units and manage their members and roles.
* Created **Angular UI** for the [Chat Module](https://abp.io/modules/Volo.Chat).
* Implemented **Angular UI** for the [Easy CRM](../samples/easy-crm.md) application.
* [ABP Suite](https://abp.io/tools/suite) code generation support for **module development**.
* New [leptontheme.com](http://leptontheme.com/) web site to show the **[Lepton Theme](https://abp.io/themes) components**.
- Performance improvements (pre-compiling razor pages).
- New **Organization Unit** Management UI for the [Identity Module](https://abp.io/modules/Volo.Identity.Pro) to create hierarchical organization units and manage their members and roles.
- Created **Angular UI** for the [Chat Module](https://abp.io/modules/Volo.Chat).
- Implemented **Angular UI** for the [Easy CRM](../samples/easy-crm.md) application.
- [ABP Suite](https://abp.io/tools/suite) code generation support for **module development**.
- New [leptontheme.com](http://leptontheme.com/) web site to show the **[Lepton Theme](https://abp.io/themes) components**.
## 2.8 (2020-05-21)
See the detailed **blog post / announcement** for the v2.8 release: [https://abp.io/blog/ABP-v2.8.0-Releases-%26-Road-Map](https://abp.io/blog/ABP-v2.8.0-Releases-%26-Road-Map)
* RTL support for the MVC UI & Arabic localization.
* Completely renewed the **[Lepton Theme](https://abp.io/themes) styles** and add a new one.
* New module: Created a **real time [Chat Module](https://abp.io/modules/Volo.Chat)** that is built on ASP.NET Core SignalR. It currently has only the MVC / Razor Pages UI. Angular UI is on the way.
* Implemented **[module entity extension](../framework/architecture/modularity/extending/module-entity-extensions.md) system** for the **Angular UI**. Also improved the system to better handle float/double/decimal, date, datetime, enum and boolean properties.
* **Gravatar** integration for the Angular UI.
* Managing product groups on a **tree view** for the [EasyCRM sample application](../samples/easy-crm.md).
- RTL support for the MVC UI & Arabic localization.
- Completely renewed the **[Lepton Theme](https://abp.io/themes) styles** and add a new one.
- New module: Created a **real time [Chat Module](https://abp.io/modules/Volo.Chat)** that is built on ASP.NET Core SignalR. It currently has only the MVC / Razor Pages UI. Angular UI is on the way.
- Implemented **[module entity extension](../framework/architecture/modularity/extending/module-entity-extensions.md) system** for the **Angular UI**. Also improved the system to better handle float/double/decimal, date, datetime, enum and boolean properties.
- **Gravatar** integration for the Angular UI.
- Managing product groups on a **tree view** for the [EasyCRM sample application](../samples/easy-crm.md).
## 2.7 (2020-05-07)
See the detailed **blog post / announcement** for the v2.7 release: https://abp.io/blog/ABP-Framework-v2_7_0-Has-Been-Released
See the detailed **blog post / announcement** for the v2.7 release: [https://abp.io/blog/ABP-Framework-v2_7_0-Has-Been-Released](https://abp.io/blog/ABP-Framework-v2_7_0-Has-Been-Released)
* New module: **Text template management** (with angular and mvc UI - document is [coming](../modules/text-template-management.md)).
* **Dynamically add properties** to current entities of the depended modules (see [module entity extensions](../framework/architecture/modularity/extending/module-entity-extensions.md))
* To be able to add **navigation properties** to entities with the ABP Suite (see [navigation properties](../suite/index.md) section).
* Dynamically add **data table columns** on the user interface (see the documents: [angular](../framework/ui/angular/data-table-column-extensions.md), [mvc](../framework/ui/mvc-razor-pages/data-table-column-extensions.md)).
* Created a rich **sample solution**, named "Easy CRM" (see the document).
* Allow to dynamically **override the logo**.
* **Optimize database migrations** & seed code for multi-tenant multi-database systems.
* ABP Suite: Make **menu item active** on navigation menu when selected.
* ABP Suite: Improve **enum usage** while creating new entities.
* Bug fixes in the [Lepton Theme](https://abp.io/themes), [ABP Suite](https://abp.io/tools/suite) and other modules.
- New module: **Text template management** (with angular and mvc UI - document is [coming](../modules/text-template-management.md)).
- **Dynamically add properties** to current entities of the depended modules (see [module entity extensions](../framework/architecture/modularity/extending/module-entity-extensions.md))
- To be able to add **navigation properties** to entities with the ABP Suite (see [navigation properties](../suite/index.md) section).
- Dynamically add **data table columns** on the user interface (see the documents: [angular](../framework/ui/angular/data-table-column-extensions.md), [mvc](../framework/ui/mvc-razor-pages/data-table-column-extensions.md)).
- Created a rich **sample solution**, named "Easy CRM" (see the document).
- Allow to dynamically **override the logo**.
- **Optimize database migrations** & seed code for multi-tenant multi-database systems.
- ABP Suite: Make **menu item active** on navigation menu when selected.
- ABP Suite: Improve **enum usage** while creating new entities.
- Bug fixes in the [Lepton Theme](https://abp.io/themes), [ABP Suite](https://abp.io/tools/suite) and other modules.
## See Also
* [Road map](road-map.md)
- [Road map](road-map.md)

2
docs/en/release-info/road-map.md

@ -13,7 +13,7 @@ This document provides a road map, release schedule, and planned features for th
### v10.4
After v10.3 reaches stable, the next planned version will be 10.4, which is scheduled to be released as a stable version in May 2026. We will be mostly working on the following topics:
The next planned version will be 10.4, which is scheduled to be released as a stable version in May 2026. We will be mostly working on the following topics:
* Framework
* Blazor UI: Moving from Blazorise to MudBlazor

29
docs/en/studio/release-notes.md

@ -9,7 +9,34 @@
This document contains **brief release notes** for each ABP Studio release. Release notes only include **major features** and **visible enhancements**. Therefore, they don't include all the development done in the related version.
## 2.2.4 (2026-03-25) Latest
## 2.2.7 (2026-04-20) Latest
* Improved Blazor WebApp template setup for easier tiered application development
* Added application version tracking in analytics events
* Fixed issues in Basic Theme public website templates
* Improved PostgreSQL vector database support in templates
* Enhanced Blazor CRUD support with built-in Book management example
* Modernized React Native template components
* Updated to ABP 10.3 and Blazorise 2.0.4
* Improved run profile and PowerShell execution reliability
* Added AI Management and Rate Limiting modules to available module options
## 2.2.6 (2026-04-08)
- Disable Scriban 7.0 cumulative output limit for template rendering
## 2.2.5 (2026-04-08)
- Upgraded GPT-5 → GPT-5.4 and improved AI management (providers, blob storage, CLI options)
- Fixed critical build issues (MongoDB, MAUI) and improved overall stability
- Enhanced monitoring (HTTP requests & exceptions)
- Added DBMS auto-detection from connection string
- Upgraded to ABP 10.2 and Scriban 7.0.0
- Improved developer experience and telemetry (PostHog)
- Minor UI fixes and workflow adjustments (manual build trigger)
## 2.2.4 (2026-03-25)
- Add `Template Create and Build` workflow
- Disable NuGetAudit in template common.props to prevent CLI deadlock during initial migration

3
docs/en/studio/version-mapping.md

@ -11,6 +11,8 @@ This document provides a general overview of the relationship between various ve
| **ABP Studio Version** | **ABP Version of Startup Template** |
|------------------------|---------------------------|
| 2.2.7 | 10.3.0 |
| 2.2.5 - 2.2.6 | 10.2.0 |
| 2.2.2 - 2.2.4 | 10.1.1 |
| 2.2.1 | 10.1.0 |
| 2.1.5 - 2.1.9 | 10.0.2 |
@ -43,7 +45,6 @@ This document provides a general overview of the relationship between various ve
| 0.7.0 to 0.7.3 | 8.2.0 |
| 0.6.8 - 0.6.9 | 8.1.3 |
| 0.6.7 | 8.1.1 |
# Working with ABP's Preview Versions
By default, ABP Studio uses stable versions to create solutions. Therefore, if you want to create a solution with a preview version, first you need to create a solution and then switch your solution to the preview version from the ABP Studio UI:

7
framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/QueryStringTenantResolveContributor.cs

@ -19,13 +19,10 @@ public class QueryStringTenantResolveContributor : HttpTenantResolveContributorB
if (httpContext.Request.Query.ContainsKey(tenantKey))
{
var tenantValue = httpContext.Request.Query[tenantKey].ToString();
if (tenantValue.IsNullOrWhiteSpace())
if (!tenantValue.IsNullOrWhiteSpace())
{
context.Handled = true;
return Task.FromResult<string?>(null);
return Task.FromResult<string?>(tenantValue);
}
return Task.FromResult(tenantValue)!;
}
}

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpAspNetCoreMvcUiThemeSharedModule.cs

@ -4,6 +4,7 @@ using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Packages;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling;
using Volo.Abp.AspNetCore.Mvc.UI.Widgets;
using Volo.Abp.Features;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
@ -12,7 +13,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
[DependsOn(
typeof(AbpAspNetCoreMvcUiBootstrapModule),
typeof(AbpAspNetCoreMvcUiPackagesModule),
typeof(AbpAspNetCoreMvcUiWidgetsModule)
typeof(AbpAspNetCoreMvcUiWidgetsModule),
typeof(AbpFeaturesModule)
)]
public class AbpAspNetCoreMvcUiThemeSharedModule : AbpModule
{

2
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarManager.cs

@ -7,6 +7,7 @@ using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc.UI.Theming;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Features;
using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars;
@ -37,6 +38,7 @@ public class ToolbarManager : IToolbarManager, ITransientDependency
using (var scope = ServiceProvider.CreateScope())
{
using (RequirePermissionsSimpleBatchStateChecker<ToolbarItem>.Use(new RequirePermissionsSimpleBatchStateChecker<ToolbarItem>()))
using (RequireFeaturesSimpleBatchStateChecker<ToolbarItem>.Use(new RequireFeaturesSimpleBatchStateChecker<ToolbarItem>()))
{
var context = new ToolbarConfigurationContext(ThemeManager.CurrentTheme, toolbar, scope.ServiceProvider);

1
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj

@ -30,6 +30,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.AspNetCore.Mvc.UI.Bootstrap\Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.csproj" />
<ProjectReference Include="..\Volo.Abp.Features\Volo.Abp.Features.csproj" />
<ProjectReference Include="..\Volo.Abp.AspNetCore.Mvc.UI.Packages\Volo.Abp.AspNetCore.Mvc.UI.Packages.csproj" />
<ProjectReference Include="..\Volo.Abp.AspNetCore.Mvc.UI.Widgets\Volo.Abp.AspNetCore.Mvc.UI.Widgets.csproj" />
</ItemGroup>

4
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js

@ -88,6 +88,10 @@
};
$form.off("submit.abpAjaxForm").on("submit.abpAjaxForm", function (e) {
if (e.isDefaultPrevented()) {
return;
}
e.preventDefault();
var formEl = $form[0];

6
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs

@ -175,10 +175,14 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp
var abpPolicyNames = new List<string>();
var otherPolicyNames = new List<string>();
var permissionNameSet = new HashSet<string>(
(await _permissionDefinitionManager.GetPermissionsAsync()).Select(p => p.Name),
StringComparer.Ordinal);
foreach (var policyName in policyNames)
{
if (await _defaultAuthorizationPolicyProvider.GetPolicyAsync(policyName) == null &&
await _permissionDefinitionManager.GetOrNullAsync(policyName) != null)
permissionNameSet.Contains(policyName))
{
abpPolicyNames.Add(policyName);
}

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Infrastructure/AbpMemoryPoolHttpResponseStreamWriterFactory.cs

@ -12,7 +12,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Infrastructure;
/// </summary>
public class AbpMemoryPoolHttpResponseStreamWriterFactory : IHttpResponseStreamWriterFactory
{
public const int DefaultBufferSize = 32 * 1024;
public const int DefaultBufferSize = 256 * 1024;
private readonly ArrayPool<byte> _bytePool;
private readonly ArrayPool<char> _charPool;

31
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Security.Principal;
@ -110,11 +111,15 @@ public class PermissionChecker : IPermissionChecker, ITransientDependency
var multiTenancySide = claimsPrincipal?.GetMultiTenancySide() ??
CurrentTenant.GetMultiTenancySide();
var allPermissions = (await PermissionDefinitionManager.GetPermissionsAsync())
.ToDictionary(p => p.Name, StringComparer.Ordinal);
var pendingStateCheck = new List<PermissionDefinition>();
var permissionDefinitions = new List<PermissionDefinition>();
foreach (var name in names)
{
var permission = await PermissionDefinitionManager.GetOrNullAsync(name);
if (permission == null)
if (!allPermissions.TryGetValue(name, out var permission))
{
result.Result.Add(name, PermissionGrantResult.Prohibited);
continue;
@ -122,11 +127,23 @@ public class PermissionChecker : IPermissionChecker, ITransientDependency
result.Result.Add(name, PermissionGrantResult.Undefined);
if (permission.IsEnabled &&
await StateCheckerManager.IsEnabledAsync(permission) &&
permission.MultiTenancySide.HasFlag(multiTenancySide))
if (!permission.IsEnabled || !permission.MultiTenancySide.HasFlag(multiTenancySide))
{
permissionDefinitions.Add(permission);
continue;
}
pendingStateCheck.Add(permission);
}
if (pendingStateCheck.Count > 0)
{
var stateCheckResult = await StateCheckerManager.IsEnabledAsync(pendingStateCheck.ToArray());
foreach (var item in stateCheckResult)
{
if (item.Value)
{
permissionDefinitions.Add(item.Key);
}
}
}

11
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionManager.cs

@ -75,15 +75,18 @@ public class PermissionDefinitionManager : IPermissionDefinitionManager, ITransi
public virtual async Task<IReadOnlyList<PermissionDefinition>> GetResourcePermissionsAsync()
{
var staticResourcePermissions = await _staticStore.GetResourcePermissionsAsync();
var staticResourcePermissionNames = staticResourcePermissions
.Select(p => p.Name)
var staticResourcePermissionKeys = staticResourcePermissions
.Select(p => (p.ResourceName, p.Name))
.ToImmutableHashSet();
var dynamicResourcePermissions = await _dynamicStore.GetResourcePermissionsAsync();
/* We prefer static permissions over dynamics */
/* We prefer static permissions over dynamics.
* Resource permissions are unique by (ResourceName, Name), so we must deduplicate
* using both fields to avoid incorrectly excluding dynamic permissions whose name
* matches a static permission from a different resource. */
return staticResourcePermissions.Concat(
dynamicResourcePermissions.Where(d => !staticResourcePermissionNames.Contains(d.Name))
dynamicResourcePermissions.Where(d => !staticResourcePermissionKeys.Contains((d.ResourceName, d.Name)))
).ToImmutableList();
}

28
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RequirePermissionsSimpleBatchStateChecker.cs

@ -47,13 +47,33 @@ public class RequirePermissionsSimpleBatchStateChecker<TState> : SimpleBatchStat
var result = new SimpleStateCheckerResult<TState>(context.States);
var permissions = _models.Where(x => context.States.Any(s => s.Equals(x.State))).SelectMany(x => x.Permissions).Distinct().ToArray();
var grantResult = await permissionChecker.IsGrantedAsync(permissions);
var stateSet = new HashSet<TState>(context.States);
var modelLookup = new Dictionary<TState, RequirePermissionsSimpleBatchStateCheckerModel<TState>>();
var allPermissions = new HashSet<string>();
foreach (var model in _models)
{
if (!stateSet.Contains(model.State))
{
continue;
}
if (!modelLookup.ContainsKey(model.State))
{
modelLookup[model.State] = model;
}
foreach (var permission in model.Permissions)
{
allPermissions.Add(permission);
}
}
var grantResult = await permissionChecker.IsGrantedAsync(allPermissions.ToArray());
foreach (var state in context.States)
{
var model = _models.FirstOrDefault(x => x.State.Equals(state));
if (model != null)
if (modelLookup.TryGetValue(state, out var model))
{
if (model.RequiresAll)
{

32
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources/ResourcePermissionChecker.cs

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Security.Principal;
@ -115,11 +116,16 @@ public class ResourcePermissionChecker : IResourcePermissionChecker, ITransientD
var multiTenancySide = claimsPrincipal?.GetMultiTenancySide() ??
CurrentTenant.GetMultiTenancySide();
var allResourcePermissions = (await PermissionDefinitionManager.GetResourcePermissionsAsync())
.Where(p => p.ResourceName == resourceName)
.ToDictionary(p => p.Name, StringComparer.Ordinal);
var pendingStateCheck = new List<PermissionDefinition>();
var permissionDefinitions = new List<PermissionDefinition>();
foreach (var name in names)
{
var permission = await PermissionDefinitionManager.GetResourcePermissionOrNullAsync(resourceName, name);
if (permission == null)
if (!allResourcePermissions.TryGetValue(name, out var permission))
{
result.Result.Add(name, PermissionGrantResult.Prohibited);
continue;
@ -127,11 +133,23 @@ public class ResourcePermissionChecker : IResourcePermissionChecker, ITransientD
result.Result.Add(name, PermissionGrantResult.Undefined);
if (permission.IsEnabled &&
await StateCheckerManager.IsEnabledAsync(permission) &&
permission.MultiTenancySide.HasFlag(multiTenancySide))
if (!permission.IsEnabled || !permission.MultiTenancySide.HasFlag(multiTenancySide))
{
continue;
}
pendingStateCheck.Add(permission);
}
if (pendingStateCheck.Count > 0)
{
var stateCheckResult = await StateCheckerManager.IsEnabledAsync(pendingStateCheck.ToArray());
foreach (var item in stateCheckResult)
{
permissionDefinitions.Add(permission);
if (item.Value)
{
permissionDefinitions.Add(item.Key);
}
}
}

20
framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs

@ -20,7 +20,8 @@ public static class AbpRegistrationBuilderExtensions
ServiceDescriptor serviceDescriptor,
IModuleContainer moduleContainer,
ServiceRegistrationActionList registrationActionList,
ServiceActivatedActionList activatedActionList)
ServiceActivatedActionList activatedActionList,
HashSet<Assembly>? nonModuleAssemblies = null)
where TActivatorData : ReflectionActivatorData
{
registrationBuilder = registrationBuilder.InvokeActivatedActions(activatedActionList, serviceDescriptor);
@ -37,7 +38,7 @@ public static class AbpRegistrationBuilderExtensions
return registrationBuilder;
}
registrationBuilder = registrationBuilder.EnablePropertyInjection(moduleContainer, implementationType);
registrationBuilder = registrationBuilder.EnablePropertyInjection(moduleContainer, implementationType, nonModuleAssemblies);
registrationBuilder = registrationBuilder.InvokeRegistrationActions(registrationActionList, serviceType, implementationType, serviceDescriptor.ServiceKey);
return registrationBuilder;
@ -99,15 +100,24 @@ public static class AbpRegistrationBuilderExtensions
private static IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> EnablePropertyInjection<TLimit, TActivatorData, TRegistrationStyle>(
this IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> registrationBuilder,
IModuleContainer moduleContainer,
Type implementationType)
Type implementationType,
HashSet<Assembly>? nonModuleAssemblies)
where TActivatorData : ReflectionActivatorData
{
// Enable Property Injection only for types in an assembly containing an AbpModule and without a DisablePropertyInjection attribute on class or properties.
if (moduleContainer.Modules.Any(m => m.AllAssemblies.Contains(implementationType.Assembly)) &&
implementationType.GetCustomAttributes(typeof(DisablePropertyInjectionAttribute), true).IsNullOrEmpty())
if (!implementationType.GetCustomAttributes(typeof(DisablePropertyInjectionAttribute), true).IsNullOrEmpty())
{
return registrationBuilder;
}
if (moduleContainer.Modules.Any(m => m.AllAssemblies.Contains(implementationType.Assembly)))
{
registrationBuilder = registrationBuilder.PropertiesAutowired(new AbpPropertySelector(false));
}
else
{
nonModuleAssemblies?.Add(implementationType.Assembly);
}
return registrationBuilder;
}

69
framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs

@ -24,7 +24,9 @@
// OTHER DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using Autofac.Builder;
using Autofac.Core;
@ -33,7 +35,9 @@ using Autofac.Core.Activators.Delegate;
using Autofac.Core.Activators.Reflection;
using Autofac.Core.Resolving.Pipeline;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
namespace Autofac.Extensions.DependencyInjection;
@ -301,6 +305,10 @@ public static class AutofacRegistration
var registrationActionList = services.GetRegistrationActionList();
var activatedActionList = services.GetServiceActivatedActionList();
// Assemblies where property injection was skipped because they are not in the module chain.
// Collected in EnablePropertyInjection when a type registration's assembly is not part of any loaded module.
var nonModuleAssemblies = new HashSet<Assembly>();
foreach (var descriptor in services)
{
var implementationType = descriptor.NormalizedImplementationType();
@ -314,7 +322,7 @@ public static class AutofacRegistration
.RegisterGeneric(implementationType)
.ConfigureServiceType(descriptor)
.ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons)
.ConfigureAbpConventions(descriptor, moduleContainer, registrationActionList, activatedActionList);
.ConfigureAbpConventions(descriptor, moduleContainer, registrationActionList, activatedActionList, nonModuleAssemblies);
}
else
{
@ -322,7 +330,7 @@ public static class AutofacRegistration
.RegisterType(implementationType)
.ConfigureServiceType(descriptor)
.ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons)
.ConfigureAbpConventions(descriptor, moduleContainer, registrationActionList, activatedActionList);
.ConfigureAbpConventions(descriptor, moduleContainer, registrationActionList, activatedActionList, nonModuleAssemblies);
}
continue;
@ -374,5 +382,62 @@ public static class AutofacRegistration
.ConfigureLifecycle(descriptor.Lifetime, null)
.ExternallyOwned();
}
WarnForOrphanedAbpModules(services, moduleContainer, nonModuleAssemblies);
}
private static void WarnForOrphanedAbpModules(
IServiceCollection services,
IModuleContainer moduleContainer,
HashSet<Assembly> nonModuleAssemblies)
{
if (nonModuleAssemblies.Count == 0)
{
return;
}
var logger = services.GetInitLogger<AbpAutofacModule>();
var loadedModuleTypes = new HashSet<Type>(
moduleContainer.Modules.Select(m => m.Type));
// Only assemblies that directly reference Volo.Abp.Core can contain AbpModule subclasses.
// This skips framework/third-party assemblies (Microsoft.Extensions.*, etc.) cheaply.
var abpCoreAssemblyName = typeof(AbpModule).Assembly.GetName().Name;
foreach (var assembly in nonModuleAssemblies)
{
if (!assembly.GetReferencedAssemblies().Any(r => r.Name == abpCoreAssemblyName))
{
continue;
}
Type[] types;
try
{
types = assembly.GetTypes();
}
catch (ReflectionTypeLoadException ex)
{
types = ex.Types.Where(t => t != null).ToArray()!;
}
catch (Exception)
{
continue;
}
foreach (var type in types)
{
if (AbpModule.IsAbpModule(type) && !loadedModuleTypes.Contains(type))
{
logger.LogWarning(
$"Assembly '{assembly.GetName().Name}' has services registered in the DI container, " +
$"but its ABP module '{type.FullName}' is not in the [DependsOn] chain. " +
"Property injection (e.g. LazyServiceProvider) will not work for these types " +
"and may cause NullReferenceException at runtime. " +
$"Add typeof({type.Name}) to your module's [DependsOn] attribute to fix this.");
}
}
}
}
}

38
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs

@ -359,18 +359,38 @@ public class NpmPackagesUpdater : ITransientDependency
var properties = dependencies.Properties().ToList();
abpPackages
.AddRange(
properties.Where(
p => p.Name.StartsWith("@abp/")
|| p.Name.StartsWith("@volo/")
|| p.Name.StartsWith("@volosoft/")).ToList()
);
foreach (var p in properties.Where(
p => p.Name.StartsWith("@abp/")
|| p.Name.StartsWith("@volo/")
|| p.Name.StartsWith("@volosoft/")))
{
if (IsValidNpmPackageName(p.Name))
{
abpPackages.Add(p);
}
else
{
Logger.LogWarning($"Skipping invalid npm package name: {NpmHelper.SanitizeForLog(p.Name)}");
}
}
}
return abpPackages;
}
public static bool IsValidNpmPackageName(string packageName)
{
try
{
NpmHelper.EnsureSafePackageName(packageName);
return true;
}
catch (CliUsageException)
{
return false;
}
}
protected virtual async Task RunInstallLibsAsync(string fileDirectory)
{
Logger.LogInformation("Installing client-side packages...");
@ -380,13 +400,13 @@ public class NpmPackagesUpdater : ITransientDependency
protected virtual void RunYarn(string fileDirectory)
{
Logger.LogInformation($"Running Yarn on {fileDirectory}");
CmdHelper.RunCmd($"npx yarn", fileDirectory);
CmdHelper.RunCmd($"npx yarn --ignore-scripts", fileDirectory);
}
protected virtual void RunNpmInstall(string fileDirectory)
{
Logger.LogInformation($"Running npm install on {fileDirectory}");
CmdHelper.RunCmd($"npm install", fileDirectory);
CmdHelper.RunCmd($"npm install --ignore-scripts", fileDirectory);
}
protected virtual List<string> GetPackageVersionList(JProperty package, string workingDirectory = null)

11
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs

@ -72,6 +72,9 @@ public class ProjectNpmPackageAdder : ITransientDependency
return;
}
NpmHelper.EnsureSafePackageName(npmPackage.Name);
NpmHelper.EnsureSafeVersion(version);
Logger.LogInformation($"Installing '{npmPackage.Name}' package to the project '{packageJsonFilePath}'...");
if (!File.ReadAllText(packageJsonFilePath).Contains($"\"{npmPackage.Name}\""))
@ -81,7 +84,7 @@ public class ProjectNpmPackageAdder : ITransientDependency
using (DirectoryHelper.ChangeCurrentDirectory(directory))
{
Logger.LogInformation("yarn add " + npmPackage.Name + versionPostfix);
CmdHelper.RunCmd("npx yarn add " + npmPackage.Name + versionPostfix);
CmdHelper.RunCmd("npx yarn add " + npmPackage.Name + versionPostfix + " --ignore-scripts");
}
}
else
@ -130,6 +133,8 @@ public class ProjectNpmPackageAdder : ITransientDependency
public async Task AddMvcPackageAsync(string directory, NpmPackageInfo npmPackage, string version = null,
bool skipInstallingLibs = false)
{
NpmHelper.EnsureSafePackageName(npmPackage.Name);
var packageJsonFilePath = Path.Combine(directory, "package.json");
if (!File.Exists(packageJsonFilePath) ||
File.ReadAllText(packageJsonFilePath).Contains($"\"{npmPackage.Name}\""))
@ -144,12 +149,14 @@ public class ProjectNpmPackageAdder : ITransientDependency
version = DetectAbpVersionOrNull(Path.Combine(directory, "package.json"));
}
NpmHelper.EnsureSafeVersion(version);
var versionPostfix = version != null ? $"@{version}" : string.Empty;
using (DirectoryHelper.ChangeCurrentDirectory(directory))
{
Logger.LogInformation("yarn add " + npmPackage.Name + versionPostfix);
CmdHelper.RunCmd("npx yarn add " + npmPackage.Name + versionPostfix);
CmdHelper.RunCmd("npx yarn add " + npmPackage.Name + versionPostfix + " --ignore-scripts");
if (skipInstallingLibs)
{

47
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/NpmHelper.cs

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using NuGet.Versioning;
@ -53,26 +54,64 @@ public class NpmHelper : ITransientDependency
public void RunNpmInstall(string directory, params string[] args)
{
Logger.LogInformation($"Running npm install on {directory}");
CmdHelper.RunCmd($"npm install {args.JoinAsString(" ")}", directory);
CmdHelper.RunCmd($"npm install --ignore-scripts {args.JoinAsString(" ")}", directory);
}
public void RunYarn(string directory)
{
Logger.LogInformation($"Running Yarn on {directory}");
CmdHelper.RunCmd($"npx yarn", directory);
CmdHelper.RunCmd($"npx yarn --ignore-scripts", directory);
}
[Obsolete("This method is deprecated. Use 'YarnAddPackage' instead (it uses 'npx', so there is no need for 'yarn' to be globally installed.")]
public void NpmInstallPackage(string package, string version, string directory)
{
EnsureSafePackageName(package);
EnsureSafeVersion(version);
var packageVersion = !string.IsNullOrWhiteSpace(version) ? $"@{version}" : string.Empty;
CmdHelper.RunCmd("npm install " + package + packageVersion, workingDirectory: directory);
CmdHelper.RunCmd("npm install --ignore-scripts " + package + packageVersion, workingDirectory: directory);
}
public void YarnAddPackage(string package, string version, string directory)
{
EnsureSafePackageName(package);
EnsureSafeVersion(version);
var packageVersion = !string.IsNullOrWhiteSpace(version) ? $"@{version}" : string.Empty;
CmdHelper.RunCmd("npx yarn add " + package + packageVersion, workingDirectory: directory);
CmdHelper.RunCmd("npx yarn add " + package + packageVersion + " --ignore-scripts", workingDirectory: directory);
}
private static readonly Regex SafePackageNameRegex = new(
@"^(@[a-zA-Z0-9][a-zA-Z0-9._-]*/)?[a-zA-Z0-9][a-zA-Z0-9._-]*$",
RegexOptions.Compiled);
private static readonly Regex SafeVersionRegex = new(
@"^[a-zA-Z0-9._~^+\-]+$",
RegexOptions.Compiled);
public static void EnsureSafePackageName(string packageName)
{
if (string.IsNullOrWhiteSpace(packageName) || !SafePackageNameRegex.IsMatch(packageName))
{
throw new CliUsageException($"Invalid npm package name detected: {SanitizeForLog(packageName)}");
}
}
public static void EnsureSafeVersion(string version)
{
if (!string.IsNullOrWhiteSpace(version) && !SafeVersionRegex.IsMatch(version))
{
throw new CliUsageException($"Invalid npm package version detected: {SanitizeForLog(version)}");
}
}
public static string SanitizeForLog(string value)
{
if (value == null)
{
return "(null)";
}
return Regex.Replace(value, @"[\x00-\x1F\x7F]", "?");
}
public string GetInstalledNpmPackages()

28
framework/src/Volo.Abp.Core/Microsoft/Extensions/Logging/AbpLoggerExtensions.cs

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;
using Volo.Abp.ExceptionHandling;
using Volo.Abp.Logging;
@ -92,12 +93,37 @@ public static class AbpLoggerExtensions
exceptionData.AppendLine("---------- Exception Data ----------");
foreach (var key in exception.Data.Keys)
{
exceptionData.AppendLine($"{key} = {exception.Data[key]}");
exceptionData.AppendLine($"{key} = {FormatDataValue(exception.Data[key])}");
}
logger.LogWithLevel(logLevel, exceptionData.ToString());
}
private const int MaxDataValueLength = 4096;
private static string FormatDataValue(object? value)
{
if (value == null)
{
return string.Empty;
}
var type = value.GetType();
if (value is string || type.IsPrimitive || value is decimal || value is DateTime || value is DateTimeOffset || value is Guid || type.IsEnum)
{
return value.ToString()!;
}
try
{
return JsonSerializer.Serialize(value).TruncateWithPostfix(MaxDataValueLength, "...(truncated)")!;
}
catch
{
return value.ToString()!;
}
}
private static void LogSelfLogging(ILogger logger, Exception exception)
{
var loggingExceptions = new List<IExceptionWithSelfLogging>();

14
framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs

@ -128,20 +128,24 @@ public abstract class AbpApplicationBase : IAbpApplication
protected virtual void WriteInitLogs(IServiceProvider serviceProvider)
{
var logger = serviceProvider.GetService<ILogger<AbpApplicationBase>>();
if (logger == null)
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
if (loggerFactory == null)
{
return;
}
var initLogger = serviceProvider.GetRequiredService<IInitLoggerFactory>().Create<AbpApplicationBase>();
var initLoggerFactory = serviceProvider.GetRequiredService<IInitLoggerFactory>();
foreach (var entry in initLogger.Entries)
foreach (var entry in initLoggerFactory.GetAllEntries())
{
var categoryName = string.IsNullOrEmpty(entry.CategoryName)
? nameof(AbpApplicationBase)
: entry.CategoryName;
var logger = loggerFactory.CreateLogger(categoryName);
logger.Log(entry.LogLevel, entry.EventId, entry.State, entry.Exception, entry.Formatter);
}
initLogger.Entries.Clear();
initLoggerFactory.ClearAllEntries();
}
protected virtual IReadOnlyList<IAbpModuleDescriptor> LoadModules(IServiceCollection services, AbpApplicationCreationOptions options)

2
framework/src/Volo.Abp.Core/Volo/Abp/Logging/AbpInitLogEntry.cs

@ -5,6 +5,8 @@ namespace Volo.Abp.Logging;
public class AbpInitLogEntry
{
public string CategoryName { get; set; } = default!;
public LogLevel LogLevel { get; set; }
public EventId EventId { get; set; }

1
framework/src/Volo.Abp.Core/Volo/Abp/Logging/DefaultInitLogger.cs

@ -17,6 +17,7 @@ public class DefaultInitLogger<T> : IInitLogger<T>
{
Entries.Add(new AbpInitLogEntry
{
CategoryName = typeof(T).FullName!,
LogLevel = logLevel,
EventId = eventId,
State = state!,

22
framework/src/Volo.Abp.Core/Volo/Abp/Logging/DefaultInitLoggerFactory.cs

@ -1,14 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Volo.Abp.Logging;
public class DefaultInitLoggerFactory : IInitLoggerFactory
{
private readonly Dictionary<Type, object> _cache = [];
private readonly List<List<AbpInitLogEntry>> _entryLists = [];
public virtual IInitLogger<T> Create<T>()
{
return (IInitLogger<T>)_cache.GetOrAdd(typeof(T), () => new DefaultInitLogger<T>());
return (IInitLogger<T>)_cache.GetOrAdd(typeof(T), () =>
{
var logger = new DefaultInitLogger<T>();
_entryLists.Add(logger.Entries);
return logger;
});
}
public virtual List<AbpInitLogEntry> GetAllEntries()
{
return _entryLists.SelectMany(l => l).ToList();
}
public virtual void ClearAllEntries()
{
foreach (var list in _entryLists)
{
list.Clear();
}
}
}

8
framework/src/Volo.Abp.Core/Volo/Abp/Logging/IInitLoggerFactory.cs

@ -1,6 +1,12 @@
namespace Volo.Abp.Logging;
using System.Collections.Generic;
namespace Volo.Abp.Logging;
public interface IInitLoggerFactory
{
IInitLogger<T> Create<T>();
List<AbpInitLogEntry> GetAllEntries();
void ClearAllEntries();
}

62
framework/src/Volo.Abp.Core/Volo/Abp/SimpleStateChecking/SimpleStateCheckerManager.cs

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@ -57,7 +57,7 @@ public class SimpleStateCheckerManager<TState> : ISimpleStateCheckerManager<TSta
foreach (ISimpleBatchStateChecker<TState> globalStateChecker in Options.GlobalStateCheckers
.Where(x => typeof(ISimpleBatchStateChecker<TState>).IsAssignableFrom(x))
.Select(x => ServiceProvider.GetRequiredService(x)))
.Select(x => scope.ServiceProvider.GetRequiredService(x)))
{
var context = new SimpleBatchStateCheckerContext<TState>(
scope.ServiceProvider.GetRequiredService<ICachedServiceProvider>(),
@ -69,11 +69,15 @@ public class SimpleStateCheckerManager<TState> : ISimpleStateCheckerManager<TSta
}
}
var hasNonBatchGlobalCheckers = Options.GlobalStateCheckers
.Any(x => !typeof(ISimpleBatchStateChecker<TState>).IsAssignableFrom(x));
foreach (var state in states)
{
if (result[state])
if (result[state] &&
(hasNonBatchGlobalCheckers || state.StateCheckers.Any(x => x is not ISimpleBatchStateChecker<TState>)))
{
result[state] = await InternalIsEnabledAsync(state, false);
result[state] = await EvaluateCheckersAsync(state, false, scope);
}
}
@ -83,29 +87,49 @@ public class SimpleStateCheckerManager<TState> : ISimpleStateCheckerManager<TSta
protected virtual async Task<bool> InternalIsEnabledAsync(TState state, bool useBatchChecker)
{
var hasStateCheckers = state.StateCheckers
.WhereIf(!useBatchChecker, x => x is not ISimpleBatchStateChecker<TState>)
.Any();
var hasGlobalCheckers = Options.GlobalStateCheckers
.WhereIf(!useBatchChecker, x => !typeof(ISimpleBatchStateChecker<TState>).IsAssignableFrom(x))
.Any();
if (!hasStateCheckers && !hasGlobalCheckers)
{
return true;
}
using (var scope = ServiceProvider.CreateScope())
{
var context = new SimpleStateCheckerContext<TState>(scope.ServiceProvider.GetRequiredService<ICachedServiceProvider>(), state);
return await EvaluateCheckersAsync(state, useBatchChecker, scope);
}
}
foreach (var provider in state.StateCheckers.WhereIf(!useBatchChecker, x => x is not ISimpleBatchStateChecker<TState>))
protected virtual async Task<bool> EvaluateCheckersAsync(TState state, bool useBatchChecker, IServiceScope scope)
{
var context = new SimpleStateCheckerContext<TState>(
!useBatchChecker
? scope.ServiceProvider.GetRequiredService<ITransientCachedServiceProvider>()
: scope.ServiceProvider.GetRequiredService<ICachedServiceProvider>(),
state);
foreach (var provider in state.StateCheckers.WhereIf(!useBatchChecker, x => x is not ISimpleBatchStateChecker<TState>))
{
if (!await provider.IsEnabledAsync(context))
{
if (!await provider.IsEnabledAsync(context))
{
return false;
}
return false;
}
}
foreach (ISimpleStateChecker<TState> provider in Options.GlobalStateCheckers
.WhereIf(!useBatchChecker, x => !typeof(ISimpleBatchStateChecker<TState>).IsAssignableFrom(x))
.Select(x => ServiceProvider.GetRequiredService(x)))
foreach (ISimpleStateChecker<TState> provider in Options.GlobalStateCheckers
.WhereIf(!useBatchChecker, x => !typeof(ISimpleBatchStateChecker<TState>).IsAssignableFrom(x))
.Select(x => scope.ServiceProvider.GetRequiredService(x)))
{
if (!await provider.IsEnabledAsync(context))
{
if (!await provider.IsEnabledAsync(context))
{
return false;
}
return false;
}
return true;
}
return true;
}
}

24
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

@ -197,29 +197,7 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
protected virtual EfCoreDatabaseProvider? GetDatabaseProviderOrNull(ModelBuilder modelBuilder)
{
switch (Database.ProviderName)
{
case "Microsoft.EntityFrameworkCore.SqlServer":
return EfCoreDatabaseProvider.SqlServer;
case "Npgsql.EntityFrameworkCore.PostgreSQL":
return EfCoreDatabaseProvider.PostgreSql;
case "Pomelo.EntityFrameworkCore.MySql":
case "MySql.Data.MySqlClient":
return EfCoreDatabaseProvider.MySql;
case "Oracle.EntityFrameworkCore":
case "Devart.Data.Oracle.Entity.EFCore":
return EfCoreDatabaseProvider.Oracle;
case "Microsoft.EntityFrameworkCore.Sqlite":
return EfCoreDatabaseProvider.Sqlite;
case "Microsoft.EntityFrameworkCore.InMemory":
return EfCoreDatabaseProvider.InMemory;
case "FirebirdSql.EntityFrameworkCore.Firebird":
return EfCoreDatabaseProvider.Firebird;
case "Microsoft.EntityFrameworkCore.Cosmos":
return EfCoreDatabaseProvider.Cosmos;
default:
return null;
}
return EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(Database.ProviderName);
}
public async override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)

52
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreDatabaseProviderHelper.cs

@ -0,0 +1,52 @@
using System;
namespace Volo.Abp.EntityFrameworkCore;
public static class EfCoreDatabaseProviderHelper
{
public static EfCoreDatabaseProvider? GetDatabaseProviderOrNull(string? providerName)
{
if (providerName.IsNullOrWhiteSpace())
{
return null;
}
if (providerName.Contains("SqlServer", StringComparison.OrdinalIgnoreCase))
{
return EfCoreDatabaseProvider.SqlServer;
}
if (providerName.Contains("Npgsql", StringComparison.OrdinalIgnoreCase) ||
providerName.Contains("PostgreSQL", StringComparison.OrdinalIgnoreCase))
{
return EfCoreDatabaseProvider.PostgreSql;
}
if (providerName.Contains("MySql", StringComparison.OrdinalIgnoreCase) ||
providerName.Contains("Pomelo", StringComparison.OrdinalIgnoreCase))
{
return EfCoreDatabaseProvider.MySql;
}
if (providerName.Contains("Oracle", StringComparison.OrdinalIgnoreCase) ||
providerName.Contains("Devart", StringComparison.OrdinalIgnoreCase))
{
return EfCoreDatabaseProvider.Oracle;
}
if (providerName.Contains("Sqlite", StringComparison.OrdinalIgnoreCase))
{
return EfCoreDatabaseProvider.Sqlite;
}
if (providerName.Contains("InMemory", StringComparison.OrdinalIgnoreCase))
{
return EfCoreDatabaseProvider.InMemory;
}
if (providerName.Contains("Firebird", StringComparison.OrdinalIgnoreCase))
{
return EfCoreDatabaseProvider.Firebird;
}
if (providerName.Contains("Cosmos", StringComparison.OrdinalIgnoreCase))
{
return EfCoreDatabaseProvider.Cosmos;
}
return null;
}
}

15
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureCheckerBase.cs

@ -1,4 +1,5 @@
using System;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
@ -28,4 +29,16 @@ public abstract class FeatureCheckerBase : IFeatureChecker, ITransientDependency
);
}
}
public virtual async Task<Dictionary<string, bool>> IsEnabledAsync(string[] names)
{
var result = new Dictionary<string, bool>();
foreach (var name in names)
{
result[name] = await IsEnabledAsync(name);
}
return result;
}
}

27
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureSimpleStateCheckerExtensions.cs

@ -1,4 +1,4 @@
using JetBrains.Annotations;
using JetBrains.Annotations;
using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.Features;
@ -10,7 +10,7 @@ public static class FeatureSimpleStateCheckerExtensions
params string[] features)
where TState : IHasSimpleStateCheckers<TState>
{
state.RequireFeatures(true, features);
state.RequireFeatures(requiresAll: true, batchCheck: true, features);
return state;
}
@ -19,11 +19,32 @@ public static class FeatureSimpleStateCheckerExtensions
bool requiresAll,
params string[] features)
where TState : IHasSimpleStateCheckers<TState>
{
state.RequireFeatures(requiresAll: requiresAll, batchCheck: true, features);
return state;
}
public static TState RequireFeatures<TState>(
[NotNull] this TState state,
bool requiresAll,
bool batchCheck,
params string[] features)
where TState : IHasSimpleStateCheckers<TState>
{
Check.NotNull(state, nameof(state));
Check.NotNullOrEmpty(features, nameof(features));
state.StateCheckers.Add(new RequireFeaturesSimpleStateChecker<TState>(requiresAll, features));
if (batchCheck)
{
RequireFeaturesSimpleBatchStateChecker<TState>.Current.AddCheckModels(
new RequireFeaturesSimpleBatchStateCheckerModel<TState>(state, features, requiresAll));
state.StateCheckers.Add(RequireFeaturesSimpleBatchStateChecker<TState>.Current);
}
else
{
state.StateCheckers.Add(new RequireFeaturesSimpleStateChecker<TState>(requiresAll, features));
}
return state;
}
}

6
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeaturesSimpleStateCheckerSerializerContributor.cs

@ -1,4 +1,4 @@
using System.Linq;
using System.Linq;
using System.Text.Json.Nodes;
using Volo.Abp.DependencyInjection;
using Volo.Abp.SimpleStateChecking;
@ -10,7 +10,7 @@ public class FeaturesSimpleStateCheckerSerializerContributor :
ISingletonDependency
{
public const string CheckerShortName = "F";
public string? SerializeToJson<TState>(ISimpleStateChecker<TState> checker)
where TState : IHasSimpleStateCheckers<TState>
{
@ -53,4 +53,4 @@ public class FeaturesSimpleStateCheckerSerializerContributor :
nameArray.Select(x => x!.ToString()).ToArray()
);
}
}
}

5
framework/src/Volo.Abp.Features/Volo/Abp/Features/IFeatureChecker.cs

@ -1,4 +1,5 @@
using JetBrains.Annotations;
using System.Collections.Generic;
using JetBrains.Annotations;
using System.Threading.Tasks;
namespace Volo.Abp.Features;
@ -8,4 +9,6 @@ public interface IFeatureChecker
Task<string?> GetOrNullAsync([NotNull] string name);
Task<bool> IsEnabledAsync(string name);
Task<Dictionary<string, bool>> IsEnabledAsync([NotNull] string[] names);
}

93
framework/src/Volo.Abp.Features/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker.cs

@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.Features;
public class RequireFeaturesSimpleBatchStateChecker<TState> : SimpleBatchStateCheckerBase<TState>
where TState : IHasSimpleStateCheckers<TState>
{
public static RequireFeaturesSimpleBatchStateChecker<TState> Current => _current.Value!;
private static readonly AsyncLocal<RequireFeaturesSimpleBatchStateChecker<TState>> _current = new();
private readonly List<RequireFeaturesSimpleBatchStateCheckerModel<TState>> _models;
static RequireFeaturesSimpleBatchStateChecker()
{
_current.Value = new RequireFeaturesSimpleBatchStateChecker<TState>();
}
public RequireFeaturesSimpleBatchStateChecker()
{
_models = new List<RequireFeaturesSimpleBatchStateCheckerModel<TState>>();
}
public RequireFeaturesSimpleBatchStateChecker<TState> AddCheckModels(
params RequireFeaturesSimpleBatchStateCheckerModel<TState>[] models)
{
Check.NotNullOrEmpty(models, nameof(models));
_models.AddRange(models);
return this;
}
public static IDisposable Use(RequireFeaturesSimpleBatchStateChecker<TState> checker)
{
var previousValue = Current;
_current.Value = checker;
return new DisposeAction(() => _current.Value = previousValue);
}
public override async Task<SimpleStateCheckerResult<TState>> IsEnabledAsync(
SimpleBatchStateCheckerContext<TState> context)
{
var featureChecker = context.ServiceProvider.GetRequiredService<IFeatureChecker>();
var result = new SimpleStateCheckerResult<TState>(context.States);
var stateSet = new HashSet<TState>(context.States);
var modelLookup = new Dictionary<TState, RequireFeaturesSimpleBatchStateCheckerModel<TState>>();
var allFeatures = new HashSet<string>();
foreach (var model in _models)
{
if (!stateSet.Contains(model.State))
{
continue;
}
if (!modelLookup.ContainsKey(model.State))
{
modelLookup[model.State] = model;
}
foreach (var featureName in model.FeatureNames)
{
allFeatures.Add(featureName);
}
}
var featureValues = await featureChecker.IsEnabledAsync(allFeatures.ToArray());
foreach (var state in context.States)
{
if (modelLookup.TryGetValue(state, out var model))
{
if (model.RequiresAll)
{
result[state] = model.FeatureNames.All(x => featureValues.TryGetValue(x, out var v) && v);
}
else
{
result[state] = model.FeatureNames.Any(x => featureValues.TryGetValue(x, out var v) && v);
}
}
}
return result;
}
}

23
framework/src/Volo.Abp.Features/Volo/Abp/Features/RequireFeaturesSimpleBatchStateCheckerModel.cs

@ -0,0 +1,23 @@
using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.Features;
public class RequireFeaturesSimpleBatchStateCheckerModel<TState>
where TState : IHasSimpleStateCheckers<TState>
{
public TState State { get; }
public string[] FeatureNames { get; }
public bool RequiresAll { get; }
public RequireFeaturesSimpleBatchStateCheckerModel(TState state, string[] featureNames, bool requiresAll = true)
{
Check.NotNull(state, nameof(state));
Check.NotNullOrEmpty(featureNames, nameof(featureNames));
State = state;
FeatureNames = featureNames;
RequiresAll = requiresAll;
}
}

13
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs

@ -60,7 +60,6 @@ public static class JsonLocalizationDictionaryBuilder
}
var dictionary = new Dictionary<string, LocalizedString>();
var dublicateNames = new List<string>();
foreach (var item in FlattenTexts(jsonFile.Texts))
{
@ -68,20 +67,10 @@ public static class JsonLocalizationDictionaryBuilder
{
throw new AbpException("The key is empty in given json string.");
}
if (dictionary.GetOrDefault(item.Key) != null)
{
dublicateNames.Add(item.Key);
}
dictionary[item.Key] = new LocalizedString(item.Key, item.Value.NormalizeLineEndings());
}
if (dublicateNames.Count > 0)
{
throw new AbpException(
"A dictionary can not contain same key twice. There are some duplicated names: " +
dublicateNames.JoinAsString(", "));
}
return new StaticLocalizationDictionary(cultureCode, dictionary);
}

26
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/VirtualFiles/VirtualFileLocalizationResourceContributorBase.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
@ -19,7 +20,6 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
private Dictionary<string, ILocalizationDictionary>? _dictionaries;
private bool _subscribedForChanges;
private readonly object _syncObj = new object();
private LocalizationResourceBase _resource = default!;
protected VirtualFileLocalizationResourceContributorBase(string virtualPath)
{
@ -28,7 +28,6 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
public virtual void Initialize(LocalizationResourceInitializationContext context)
{
_resource = context.Resource;
_virtualFileProvider = context.ServiceProvider.GetRequiredService<IVirtualFileProvider>();
}
@ -88,15 +87,12 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
private Dictionary<string, ILocalizationDictionary> CreateDictionaries()
{
var dictionaries = new Dictionary<string, ILocalizationDictionary>();
var rawDictionaries = new Dictionary<string, Dictionary<string, LocalizedString>>();
foreach (var file in _virtualFileProvider.GetDirectoryContents(_virtualPath))
foreach (var file in _virtualFileProvider.GetDirectoryContents(_virtualPath)
.Where(f => !f.IsDirectory && CanParseFile(f))
.OrderBy(f => f.Name, StringComparer.Ordinal))
{
if (file.IsDirectory || !CanParseFile(file))
{
continue;
}
var dictionary = CreateDictionaryFromFile(file);
if (dictionary == null)
@ -104,15 +100,19 @@ public abstract class VirtualFileLocalizationResourceContributorBase : ILocaliza
continue;
}
if (dictionaries.ContainsKey(dictionary.CultureName))
if (!rawDictionaries.TryGetValue(dictionary.CultureName, out var raw))
{
throw new AbpException($"{file.GetVirtualOrPhysicalPathOrNull()} dictionary has a culture name '{dictionary.CultureName}' which is already defined! Localization resource: {_resource.ResourceName}");
raw = new Dictionary<string, LocalizedString>();
rawDictionaries[dictionary.CultureName] = raw;
}
dictionaries[dictionary.CultureName] = dictionary;
dictionary.Fill(raw);
}
return dictionaries;
return rawDictionaries.ToDictionary(
kvp => kvp.Key,
kvp => (ILocalizationDictionary)new StaticLocalizationDictionary(kvp.Key, kvp.Value)
);
}
protected abstract bool CanParseFile(IFileInfo file);

1
framework/src/Volo.Abp.UI.Navigation/Volo.Abp.UI.Navigation.csproj

@ -23,6 +23,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" />
<ProjectReference Include="..\Volo.Abp.Features\Volo.Abp.Features.csproj" />
<ProjectReference Include="..\Volo.Abp.UI\Volo.Abp.UI.csproj" />
<ProjectReference Include="..\Volo.Abp.MultiTenancy\Volo.Abp.MultiTenancy.csproj" />
</ItemGroup>

3
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/AbpUiNavigationModule.cs

@ -1,4 +1,5 @@
using Volo.Abp.Authorization;
using Volo.Abp.Features;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
@ -7,7 +8,7 @@ using Volo.Abp.VirtualFileSystem;
namespace Volo.Abp.UI.Navigation;
[DependsOn(typeof(AbpUiModule), typeof(AbpAuthorizationModule), typeof(AbpMultiTenancyModule))]
[DependsOn(typeof(AbpUiModule), typeof(AbpAuthorizationModule), typeof(AbpFeaturesModule), typeof(AbpMultiTenancyModule))]
public class AbpUiNavigationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)

2
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs

@ -6,6 +6,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Features;
using Volo.Abp.SimpleStateChecking;
namespace Volo.Abp.UI.Navigation;
@ -82,6 +83,7 @@ public class MenuManager : IMenuManager, ITransientDependency
using (var scope = ServiceScopeFactory.CreateScope())
{
using (RequirePermissionsSimpleBatchStateChecker<ApplicationMenuItem>.Use(new RequirePermissionsSimpleBatchStateChecker<ApplicationMenuItem>()))
using (RequireFeaturesSimpleBatchStateChecker<ApplicationMenuItem>.Use(new RequireFeaturesSimpleBatchStateChecker<ApplicationMenuItem>()))
{
var context = new MenuConfigurationContext(menu, scope.ServiceProvider);

10
framework/src/Volo.Abp.VirtualFileSystem/Volo/Abp/VirtualFileSystem/VirtualFileSetListExtensions.cs

@ -65,6 +65,14 @@ public static class VirtualFileSetListExtensions
public static void ReplaceEmbeddedByPhysical<T>(
[NotNull] this VirtualFileSetList fileSets,
[NotNull] string physicalPath)
{
ReplaceEmbeddedByPhysical<T>(fileSets, physicalPath, ExclusionFilters.Sensitive);
}
public static void ReplaceEmbeddedByPhysical<T>(
[NotNull] this VirtualFileSetList fileSets,
[NotNull] string physicalPath,
ExclusionFilters exclusionFilters)
{
Check.NotNull(fileSets, nameof(fileSets));
Check.NotNullOrWhiteSpace(physicalPath, nameof(physicalPath));
@ -83,7 +91,7 @@ public static class VirtualFileSetListExtensions
thisPath = Path.Combine(thisPath, embeddedVirtualFileSet.BaseFolder!);
}
fileSets[i] = new PhysicalVirtualFileSetInfo(new PhysicalFileProvider(thisPath), thisPath);
fileSets[i] = new PhysicalVirtualFileSetInfo(new PhysicalFileProvider(thisPath, exclusionFilters), thisPath);
}
}
}

32
framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancy_Without_DomainResolver_Tests.cs

@ -70,4 +70,36 @@ public class AspNetCoreMultiTenancy_Without_DomainResolver_Tests : AspNetCoreMul
var result = await GetResponseAsObjectAsync<Dictionary<string, string>>("http://abp.io");
result["TenantId"].ShouldBe(_testTenantId.ToString());
}
[Fact]
public async Task Should_Use_Header_Tenant_Id_When_QueryString_Tenant_Is_Empty()
{
Client.DefaultRequestHeaders.Add(_options.TenantKey, _testTenantId.ToString());
var result = await GetResponseAsObjectAsync<Dictionary<string, string>>($"http://abp.io?{_options.TenantKey}=");
result["TenantId"].ShouldBe(_testTenantId.ToString());
}
[Fact]
public async Task Should_Fallback_To_Host_When_QueryString_Tenant_Is_Empty_And_No_Other_Resolver()
{
var result = await GetResponseAsObjectAsync<Dictionary<string, string>>($"http://abp.io?{_options.TenantKey}=");
result["TenantId"].ShouldBe("");
}
[Fact]
public async Task Should_Use_Header_Tenant_Id_When_QueryString_Tenant_Is_Whitespace()
{
Client.DefaultRequestHeaders.Add(_options.TenantKey, _testTenantId.ToString());
var result = await GetResponseAsObjectAsync<Dictionary<string, string>>($"http://abp.io?{_options.TenantKey}=%20");
result["TenantId"].ShouldBe(_testTenantId.ToString());
}
[Fact]
public async Task Should_Fallback_To_Host_When_QueryString_Tenant_Is_Whitespace_And_No_Other_Resolver()
{
var result = await GetResponseAsObjectAsync<Dictionary<string, string>>($"http://abp.io?{_options.TenantKey}=%20");
result["TenantId"].ShouldBe("");
}
}

51
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/PermissionChecker_BulkWithStateChecker_Tests.cs

@ -0,0 +1,51 @@
using System;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Authorization.Permissions;
using Xunit;
namespace Volo.Abp.Authorization;
public class PermissionChecker_BulkWithStateChecker_Tests : AuthorizationTestBase
{
private readonly IPermissionChecker _permissionChecker;
public PermissionChecker_BulkWithStateChecker_Tests()
{
_permissionChecker = GetRequiredService<IPermissionChecker>();
}
[Fact]
public async Task IsGrantedAsync_With_Empty_Names_Should_Return_Empty_Result()
{
var result = await _permissionChecker.IsGrantedAsync(Array.Empty<string>());
result.Result.ShouldBeEmpty();
}
[Fact]
public async Task IsGrantedAsync_StateChecker_Permission_Is_Undefined_When_StateChecker_Fails()
{
// MyPermission1 has TestRequireEditionPermissionSimpleStateChecker.
// Current user (Douglas) has no EditionId claim → StateChecker returns false.
// The permission must stay Undefined (never reaches the value-provider pipeline).
var result = await _permissionChecker.IsGrantedAsync(new[] { "MyPermission1", "MyPermission3" });
result.Result["MyPermission1"].ShouldBe(PermissionGrantResult.Undefined);
result.Result["MyPermission3"].ShouldBe(PermissionGrantResult.Granted);
}
[Fact]
public async Task IsGrantedAsync_Mix_Of_Defined_And_Undefined_Permissions()
{
var result = await _permissionChecker.IsGrantedAsync(new[]
{
"MyPermission3",
"NonExistentPermission",
"MyPermission5"
});
result.Result["MyPermission3"].ShouldBe(PermissionGrantResult.Granted);
result.Result["NonExistentPermission"].ShouldBe(PermissionGrantResult.Prohibited);
result.Result["MyPermission5"].ShouldBe(PermissionGrantResult.Granted);
}
}

57
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/ResourcePermissionChecker_BulkWithStateChecker_Tests.cs

@ -0,0 +1,57 @@
using System;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Authorization.Permissions.Resources;
using Volo.Abp.Authorization.TestServices.Resources;
using Xunit;
namespace Volo.Abp.Authorization;
public class ResourcePermissionChecker_BulkWithStateChecker_Tests : AuthorizationTestBase
{
private readonly IResourcePermissionChecker _resourcePermissionChecker;
public ResourcePermissionChecker_BulkWithStateChecker_Tests()
{
_resourcePermissionChecker = GetRequiredService<IResourcePermissionChecker>();
}
[Fact]
public async Task IsGrantedAsync_With_Empty_Names_Should_Return_Empty_Result()
{
var result = await _resourcePermissionChecker.IsGrantedAsync(
Array.Empty<string>(), TestEntityResource.ResourceName, TestEntityResource.ResourceKey5);
result.Result.ShouldBeEmpty();
}
[Fact]
public async Task IsGrantedAsync_StateChecker_Permission_Is_Undefined_When_StateChecker_Fails()
{
// MyResourcePermission1 has TestRequireEditionPermissionSimpleStateChecker.
// Current user (Douglas) has no EditionId claim → StateChecker returns false.
// The permission must stay Undefined (never reaches the value-provider pipeline).
var result = await _resourcePermissionChecker.IsGrantedAsync(
new[] { "MyResourcePermission1", "MyResourcePermission3" },
TestEntityResource.ResourceName,
TestEntityResource.ResourceKey3);
result.Result["MyResourcePermission1"].ShouldBe(PermissionGrantResult.Undefined);
result.Result["MyResourcePermission3"].ShouldBe(PermissionGrantResult.Granted);
}
[Fact]
public async Task IsGrantedAsync_Mix_Of_Defined_And_Undefined_Permissions()
{
var result = await _resourcePermissionChecker.IsGrantedAsync(
new[] { "MyResourcePermission3", "NonExistentPermission", "MyResourcePermission5" },
TestEntityResource.ResourceName,
TestEntityResource.ResourceKey5);
result.Result["MyResourcePermission3"].ShouldBe(PermissionGrantResult.Granted);
result.Result["NonExistentPermission"].ShouldBe(PermissionGrantResult.Prohibited);
result.Result["MyResourcePermission5"].ShouldBe(PermissionGrantResult.Granted);
}
}

14
framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/StaticPermissionDefinitionStore_Tests.cs

@ -70,4 +70,18 @@ public class StaticPermissionDefinitionStore_Tests : AuthorizationTestBase
permissions.ShouldContain(x => x.Name == "MyResourcePermission6");
permissions.ShouldContain(x => x.Name == "MyResourcePermission7");
}
[Fact]
public async Task GetResourcePermissionsAsync_Same_Name_In_Different_Resources_Should_Both_Be_Returned()
{
// MyResourcePermission7 is defined for both TestEntityResource and TestEntityResource2.
// GetResourcePermissionsAsync must return both entries because resource permissions are
// unique by (ResourceName, Name), not by Name alone.
var permissions = await _store.GetResourcePermissionsAsync();
permissions.ShouldContain(x =>
x.Name == "MyResourcePermission7" && x.ResourceName == TestEntityResource.ResourceName);
permissions.ShouldContain(x =>
x.Name == "MyResourcePermission7" && x.ResourceName == TestEntityResource2.ResourceName);
}
}

62
framework/test/Volo.Abp.Autofac.Tests/Volo/Abp/Autofac/WarnForOrphanedAbpModules_Tests.cs

@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Shouldly;
using Volo.Abp.Logging;
using Volo.Abp.Modularity;
using Volo.Abp.Testing;
using Xunit;
namespace Volo.Abp.Autofac;
public class WarnForOrphanedAbpModules_Tests : AbpIntegratedTest<WarnForOrphanedAbpModules_Tests.TestModule>
{
private static readonly Type OrphanModuleType = typeof(AbpTestModule);
private List<AbpInitLogEntry> _initLogEntries = [];
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
protected override IServiceProvider CreateServiceProvider(IServiceCollection services)
{
var serviceProvider = base.CreateServiceProvider(services);
// Capture init log entries after Autofac Populate/Register but before WriteInitLogs clears them.
_initLogEntries = serviceProvider.GetRequiredService<IInitLoggerFactory>().GetAllEntries();
return serviceProvider;
}
[Fact]
public void Should_Warn_For_Orphaned_Abp_Modules()
{
_initLogEntries
.Where(e => e.LogLevel == LogLevel.Warning)
.ShouldContain(e => e.Message.Contains(OrphanModuleType.FullName!),
$"Expected a warning for orphaned module '{OrphanModuleType.FullName}'.");
}
[Fact]
public void Should_Not_Warn_For_Loaded_Modules()
{
_initLogEntries
.Where(e => e.LogLevel == LogLevel.Warning)
.ShouldNotContain(e => e.Message.Contains(typeof(AbpAutofacModule).FullName!),
"Modules in the [DependsOn] chain should not be reported as orphaned.");
}
[DependsOn(typeof(AbpAutofacModule))]
public class TestModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
// Simulate ASP.NET Core's AddControllersAsServices() registering a type
// from an assembly whose ABP module is NOT in the [DependsOn] chain.
context.Services.AddTransient<AbpTestModule>();
}
}
}

64
framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater_Tests.cs

@ -0,0 +1,64 @@
using Shouldly;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.Cli.Utils;
using Xunit;
namespace Volo.Abp.Cli;
public class NpmPackagesUpdater_Tests
{
[Theory]
[InlineData("@abp/ng.core", true)]
[InlineData("@abp/ng.theme.shared", true)]
[InlineData("@abp/ng.components", true)]
[InlineData("@volo/abp.ng.lepton-x.core", true)]
[InlineData("@volo/abp.commercial.ng.ui", true)]
[InlineData("@volosoft/abp.ng.theme.lepton", true)]
[InlineData("@abp/core && calc.exe", false)]
[InlineData("@abp/core; rm -rf /", false)]
[InlineData("@abp/core | curl evil.com", false)]
[InlineData("@abp/core`whoami`", false)]
[InlineData("@abp/core$(id)", false)]
[InlineData("@abp/core\nnewline", false)]
[InlineData("@abp/ space", false)]
[InlineData("@abp/", false)]
[InlineData("@abp/ng core", false)]
[InlineData(null, false)]
[InlineData("", false)]
public void IsValidNpmPackageName(string packageName, bool expected)
{
NpmPackagesUpdater.IsValidNpmPackageName(packageName).ShouldBe(expected);
}
[Theory]
[InlineData("1.0.0", false)]
[InlineData("^8.0.0", false)]
[InlineData("~8.0.0", false)]
[InlineData("8.0.0-preview.1", false)]
[InlineData("8.0.0-preview20260401", false)]
[InlineData("8.0.0+build.123", false)]
[InlineData("latest", false)]
[InlineData("next", false)]
[InlineData(null, false)]
[InlineData("", false)]
[InlineData("1.0.0 && calc.exe", true)]
[InlineData("1.0.0; rm -rf /", true)]
[InlineData("1.0.0 | curl evil.com", true)]
[InlineData("1.0.0`whoami`", true)]
[InlineData("1.0.0$(id)", true)]
[InlineData("1.0.0\nnewline", true)]
[InlineData(">1.0.0", true)]
[InlineData("<2.0.0", true)]
[InlineData("1.0.0|2.0.0", true)]
public void EnsureSafeVersion(string version, bool shouldThrow)
{
if (shouldThrow)
{
Should.Throw<CliUsageException>(() => NpmHelper.EnsureSafeVersion(version));
}
else
{
Should.NotThrow(() => NpmHelper.EnsureSafeVersion(version));
}
}
}

200
framework/test/Volo.Abp.Core.Tests/Microsoft/Extensions/Logging/AbpLoggerExtensions_Tests.cs

@ -0,0 +1,200 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using Shouldly;
using Xunit;
namespace Microsoft.Extensions.Logging;
public class AbpLoggerExtensions_Tests
{
[Fact]
public void LogException_Should_Format_String_Data()
{
var logger = new FakeLogger();
var exception = new Exception("test");
exception.Data["Name"] = "John";
logger.LogException(exception);
logger.LastLoggedMessage.ShouldContain("Name = John");
}
[Fact]
public void LogException_Should_Format_Primitive_Data()
{
var logger = new FakeLogger();
var exception = new Exception("test");
exception.Data["Count"] = 42;
exception.Data["IsActive"] = true;
logger.LogException(exception);
logger.LastLoggedMessage.ShouldContain("Count = 42");
logger.LastLoggedMessage.ShouldContain("IsActive = True");
}
[Fact]
public void LogException_Should_Format_Complex_Object_As_Json()
{
var logger = new FakeLogger();
var exception = new Exception("test");
exception.Data["Details"] = new Dictionary<string, object>
{
{ "RuleName", "FixedWindow" },
{ "Limit", 10 }
};
logger.LogException(exception);
logger.LastLoggedMessage.ShouldContain("\"RuleName\":\"FixedWindow\"");
logger.LastLoggedMessage.ShouldContain("\"Limit\":10");
}
[Fact]
public void LogException_Should_Format_List_Of_Complex_Objects_As_Json()
{
var logger = new FakeLogger();
var exception = new Exception("test");
exception.Data["RuleDetails"] = new List<Dictionary<string, object>>
{
new() { { "RuleName", "FixedWindow" }, { "Limit", 10 } },
new() { { "RuleName", "SlidingWindow" }, { "Limit", 20 } }
};
logger.LogException(exception);
var message = logger.LastLoggedMessage;
message.ShouldNotContain("System.Collections.Generic.List");
message.ShouldContain("FixedWindow");
message.ShouldContain("SlidingWindow");
}
[Fact]
public void LogException_Should_Format_Null_Data_As_Empty()
{
var logger = new FakeLogger();
var exception = new Exception("test");
exception.Data["NullKey"] = null;
logger.LogException(exception);
logger.LastLoggedMessage.ShouldContain("NullKey = ");
}
[Fact]
public void LogException_Should_Format_Enum_Data()
{
var logger = new FakeLogger();
var exception = new Exception("test");
exception.Data["Level"] = LogLevel.Warning;
logger.LogException(exception);
logger.LastLoggedMessage.ShouldContain("Level = Warning");
}
[Fact]
public void LogException_Should_Format_DateTime_Data()
{
var logger = new FakeLogger();
var exception = new Exception("test");
var now = new DateTime(2025, 1, 15, 10, 30, 0);
exception.Data["Timestamp"] = now;
logger.LogException(exception);
logger.LastLoggedMessage.ShouldContain($"Timestamp = {now.ToString(CultureInfo.CurrentCulture)}");
}
[Fact]
public void LogException_Should_Format_Guid_Data()
{
var logger = new FakeLogger();
var exception = new Exception("test");
var id = Guid.NewGuid();
exception.Data["Id"] = id;
logger.LogException(exception);
logger.LastLoggedMessage.ShouldContain($"Id = {id}");
}
[Fact]
public void LogException_Should_Format_Anonymous_Object_As_Json()
{
var logger = new FakeLogger();
var exception = new Exception("test");
exception.Data["Info"] = new { Name = "Test", Value = 123 };
logger.LogException(exception);
var message = logger.LastLoggedMessage;
message.ShouldContain("\"Name\":\"Test\"");
message.ShouldContain("\"Value\":123");
}
[Fact]
public void LogException_Should_Fallback_To_ToString_For_Non_Serializable_Object()
{
var logger = new FakeLogger();
var exception = new Exception("test");
var selfRef = new SelfReferencingObject { Name = "Loop" };
selfRef.Self = selfRef;
exception.Data["BadObject"] = selfRef;
logger.LogException(exception);
logger.LastLoggedMessage.ShouldNotBeNull();
logger.LastLoggedMessage.ShouldContain("BadObject = SelfRef:Loop");
logger.LastLoggedMessage.ShouldNotContain("\"Name\"");
}
[Fact]
public void LogException_Should_Truncate_Large_Json_Output()
{
var logger = new FakeLogger();
var exception = new Exception("test");
var largeList = new List<Dictionary<string, string>>();
for (var i = 0; i < 500; i++)
{
largeList.Add(new Dictionary<string, string>
{
{ "Key", new string('x', 100) }
});
}
exception.Data["LargeData"] = largeList;
logger.LogException(exception);
logger.LastLoggedMessage.ShouldNotBeNull();
logger.LastLoggedMessage.ShouldContain("...(truncated)");
}
private class SelfReferencingObject
{
public string Name { get; set; } = default!;
public override string ToString() => $"SelfRef:{Name}";
public SelfReferencingObject? Self { get; set; }
}
private class FakeLogger : ILogger
{
public string? LastLoggedMessage { get; private set; }
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
{
LastLoggedMessage = formatter(state, exception);
}
public bool IsEnabled(LogLevel logLevel) => true;
public IDisposable BeginScope<TState>(TState state) where TState : notnull => NullDisposable.Instance;
private class NullDisposable : IDisposable
{
public static readonly NullDisposable Instance = new();
public void Dispose() { }
}
}
}

111
framework/test/Volo.Abp.Core.Tests/Volo/Abp/SimpleStateChecking/SimpleStateChecker_BatchSingleScope_Tests.cs

@ -0,0 +1,111 @@
using System;
using System.Globalization;
using System.Threading.Tasks;
using Shouldly;
using Xunit;
namespace Volo.Abp.SimpleStateChecking;
/// <summary>
/// Tests that batch IsEnabledAsync evaluates non-batch state checkers correctly
/// when reusing a single DI scope (instead of creating N scopes via InternalIsEnabledAsync).
/// </summary>
public class SimpleStateChecker_BatchSingleScope_Tests : SimpleStateCheckerTestBase
{
[Fact]
public async Task Batch_Should_Evaluate_NonBatch_Checkers_Correctly()
{
var enabled = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
enabled.AddSimpleStateChecker(new MySimpleStateChecker());
var disabled = new MyStateEntity
{
CreationTime = DateTime.Parse("2001-01-01", CultureInfo.InvariantCulture)
};
disabled.AddSimpleStateChecker(new MySimpleStateChecker());
var result = await SimpleStateCheckerManager.IsEnabledAsync(new[] { enabled, disabled });
result[enabled].ShouldBeTrue();
result[disabled].ShouldBeFalse();
enabled.CheckCount.ShouldBe(1);
disabled.CheckCount.ShouldBe(1);
}
[Fact]
public async Task Batch_Should_Skip_NonBatch_Check_When_BatchChecker_Already_Disabled()
{
// Entity disabled by batch checker should not have non-batch checker invoked
var entity = new MyStateEntity
{
CreationTime = DateTime.Parse("2001-01-01", CultureInfo.InvariantCulture) // fails batch checker
};
entity.AddSimpleStateChecker(new MySimpleBatchStateChecker());
entity.AddSimpleStateChecker(new MySimpleStateChecker());
var result = await SimpleStateCheckerManager.IsEnabledAsync(new[] { entity });
result[entity].ShouldBeFalse();
entity.MultipleCheckCount.ShouldBe(1); // batch checker was called
entity.CheckCount.ShouldBe(0); // non-batch checker was NOT called (skipped because batch disabled it)
}
[Fact]
public async Task Batch_Should_Handle_Mix_Of_Entities_With_And_Without_Checkers()
{
var noChecker = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
var withChecker = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
withChecker.AddSimpleStateChecker(new MySimpleStateChecker());
var failingChecker = new MyStateEntity
{
CreationTime = DateTime.Parse("2001-01-01", CultureInfo.InvariantCulture)
};
failingChecker.AddSimpleStateChecker(new MySimpleStateChecker());
var result = await SimpleStateCheckerManager.IsEnabledAsync(
new[] { noChecker, withChecker, failingChecker });
result[noChecker].ShouldBeTrue();
result[withChecker].ShouldBeTrue();
result[failingChecker].ShouldBeFalse();
noChecker.CheckCount.ShouldBe(0);
withChecker.CheckCount.ShouldBe(1);
failingChecker.CheckCount.ShouldBe(1);
}
[Fact]
public async Task Batch_Should_Handle_Large_Number_Of_Entities()
{
var entities = new MyStateEntity[1000];
for (int i = 0; i < 1000; i++)
{
entities[i] = new MyStateEntity
{
CreationTime = i % 2 == 0
? DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
: DateTime.Parse("2001-01-01", CultureInfo.InvariantCulture)
};
entities[i].AddSimpleStateChecker(new MySimpleStateChecker());
}
var result = await SimpleStateCheckerManager.IsEnabledAsync(entities);
for (int i = 0; i < 1000; i++)
{
result[entities[i]].ShouldBe(i % 2 == 0);
entities[i].CheckCount.ShouldBe(1);
}
}
}

66
framework/test/Volo.Abp.Core.Tests/Volo/Abp/SimpleStateChecking/SimpleStateChecker_NoCheckers_Test.cs

@ -0,0 +1,66 @@
using System.Globalization;
using System;
using System.Threading.Tasks;
using Shouldly;
using Xunit;
namespace Volo.Abp.SimpleStateChecking;
public class SimpleStateChecker_NoCheckers_Test : SimpleStateCheckerTestBase
{
// No GlobalStateCheckers registered — verifies the fast path when both
// state.StateCheckers and Options.GlobalStateCheckers are empty.
[Fact]
public async Task Entity_With_No_State_Checkers_Should_Be_Enabled()
{
var entity = new MyStateEntity();
(await SimpleStateCheckerManager.IsEnabledAsync(entity)).ShouldBeTrue();
}
[Fact]
public async Task Entity_With_No_State_Checkers_Should_Not_Increment_Check_Counts()
{
var entity = new MyStateEntity();
await SimpleStateCheckerManager.IsEnabledAsync(entity);
entity.CheckCount.ShouldBe(0);
entity.GlobalCheckCount.ShouldBe(0);
entity.MultipleCheckCount.ShouldBe(0);
entity.MultipleGlobalCheckCount.ShouldBe(0);
}
[Fact]
public async Task Multiple_Entities_With_No_State_Checkers_Should_All_Be_Enabled()
{
var entities = new[]
{
new MyStateEntity { CreationTime = DateTime.Parse("2022-01-01", CultureInfo.InvariantCulture) },
new MyStateEntity { CreationTime = DateTime.Parse("2019-01-01", CultureInfo.InvariantCulture) }
};
var result = await SimpleStateCheckerManager.IsEnabledAsync(entities);
result.Values.ShouldAllBe(v => v);
}
[Fact]
public async Task Entity_With_Individual_Checker_Should_Still_Be_Checked()
{
var entity = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
entity.AddSimpleStateChecker(new MySimpleStateChecker());
(await SimpleStateCheckerManager.IsEnabledAsync(entity)).ShouldBeTrue();
entity.CheckCount.ShouldBe(1);
entity.CreationTime = DateTime.Parse("2001-01-01", CultureInfo.InvariantCulture);
(await SimpleStateCheckerManager.IsEnabledAsync(entity)).ShouldBeFalse();
entity.CheckCount.ShouldBe(2);
}
}

179
framework/test/Volo.Abp.Core.Tests/Volo/Abp/SimpleStateChecking/SimpleStateChecker_ScopeIsolation_Tests.cs

@ -0,0 +1,179 @@
using System;
using System.Collections.Concurrent;
using System.Globalization;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Xunit;
namespace Volo.Abp.SimpleStateChecking;
/// <summary>
/// Probe-based tests that verify:
/// 1. Batch path shares a single DI scope but isolates CachedServiceProvider per state.
/// 2. Single-state path uses separate scopes (original behavior).
/// 3. Nested single-state calls from within batch checkers get their own scope.
/// </summary>
public class SimpleStateChecker_ScopeIsolation_Tests : SimpleStateCheckerTestBase
{
protected override void AfterAddApplication(IServiceCollection services)
{
services.AddScoped<ScopeIdProbe>();
services.AddTransient<TransientIdProbe>();
base.AfterAddApplication(services);
}
[Fact]
public async Task Batch_Should_Share_Scope_But_Isolate_CachedProvider_Across_States()
{
var observations = new ConcurrentDictionary<MyStateEntity, Observation>();
var checker = new ScopeProbeStateChecker(observations);
var stateA = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
stateA.AddSimpleStateChecker(checker);
var stateB = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
stateB.AddSimpleStateChecker(checker);
var stateC = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
stateC.AddSimpleStateChecker(checker);
await SimpleStateCheckerManager.IsEnabledAsync(new[] { stateA, stateB, stateC });
observations.Count.ShouldBe(3);
// All states in the batch should see the same scoped service (shared DI scope)
observations[stateA].ScopeId.ShouldBe(observations[stateB].ScopeId);
observations[stateB].ScopeId.ShouldBe(observations[stateC].ScopeId);
// Each state should get its own transient instance (isolated cached provider)
observations[stateA].TransientId.ShouldNotBe(observations[stateB].TransientId);
observations[stateB].TransientId.ShouldNotBe(observations[stateC].TransientId);
}
[Fact]
public async Task Single_State_Calls_Should_Use_Separate_Scopes()
{
var observations = new ConcurrentDictionary<MyStateEntity, Observation>();
var checker = new ScopeProbeStateChecker(observations);
var stateA = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
stateA.AddSimpleStateChecker(checker);
var stateB = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
stateB.AddSimpleStateChecker(checker);
await SimpleStateCheckerManager.IsEnabledAsync(stateA);
await SimpleStateCheckerManager.IsEnabledAsync(stateB);
observations.Count.ShouldBe(2);
// Single-state calls should each get their own scope
observations[stateA].ScopeId.ShouldNotBe(observations[stateB].ScopeId);
}
[Fact]
public async Task Nested_Single_State_Call_From_Batch_Checker_Should_Get_Own_Scope()
{
var observations = new ConcurrentDictionary<MyStateEntity, Observation>();
// This state will be evaluated via a nested single-state call during batch evaluation
var nestedState = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
nestedState.AddSimpleStateChecker(new ScopeProbeStateChecker(observations));
// This checker triggers a nested IsEnabledAsync(state) during batch evaluation
var nestedCallChecker = new NestedSingleCallChecker(
SimpleStateCheckerManager, nestedState, observations);
var batchState = new MyStateEntity
{
CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
};
batchState.AddSimpleStateChecker(nestedCallChecker);
await SimpleStateCheckerManager.IsEnabledAsync(new[] { batchState });
observations.Count.ShouldBe(2);
// The nested single-state call should get its own scope, not the batch scope
observations[batchState].ScopeId.ShouldNotBe(observations[nestedState].ScopeId);
}
public record Observation(Guid ScopeId, Guid TransientId);
public class ScopeIdProbe
{
public Guid Id { get; } = Guid.NewGuid();
}
public class TransientIdProbe
{
public Guid Id { get; } = Guid.NewGuid();
}
public class ScopeProbeStateChecker : ISimpleStateChecker<MyStateEntity>
{
private readonly ConcurrentDictionary<MyStateEntity, Observation> _observations;
public ScopeProbeStateChecker(
ConcurrentDictionary<MyStateEntity, Observation> observations)
{
_observations = observations;
}
public Task<bool> IsEnabledAsync(SimpleStateCheckerContext<MyStateEntity> context)
{
var scopeProbe = context.ServiceProvider.GetRequiredService<ScopeIdProbe>();
var transientProbe = context.ServiceProvider.GetRequiredService<TransientIdProbe>();
_observations[context.State] = new Observation(scopeProbe.Id, transientProbe.Id);
return Task.FromResult(true);
}
}
public class NestedSingleCallChecker : ISimpleStateChecker<MyStateEntity>
{
private readonly ISimpleStateCheckerManager<MyStateEntity> _manager;
private readonly MyStateEntity _nestedState;
private readonly ConcurrentDictionary<MyStateEntity, Observation> _observations;
public NestedSingleCallChecker(
ISimpleStateCheckerManager<MyStateEntity> manager,
MyStateEntity nestedState,
ConcurrentDictionary<MyStateEntity, Observation> observations)
{
_manager = manager;
_nestedState = nestedState;
_observations = observations;
}
public async Task<bool> IsEnabledAsync(SimpleStateCheckerContext<MyStateEntity> context)
{
var scopeProbe = context.ServiceProvider.GetRequiredService<ScopeIdProbe>();
var transientProbe = context.ServiceProvider.GetRequiredService<TransientIdProbe>();
_observations[context.State] = new Observation(scopeProbe.Id, transientProbe.Id);
// Trigger a nested single-state call during batch evaluation
await _manager.IsEnabledAsync(_nestedState);
return true;
}
}
}

6
framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj

@ -17,6 +17,12 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" />
<PackageReference Include="MySql.EntityFrameworkCore" />
<PackageReference Include="Oracle.EntityFrameworkCore" />
</ItemGroup>
</Project>

111
framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/EfCoreDatabaseProviderHelper_Tests.cs

@ -0,0 +1,111 @@
using Microsoft.EntityFrameworkCore;
using Shouldly;
using Xunit;
namespace Volo.Abp.EntityFrameworkCore;
public class EfCoreDatabaseProviderHelper_Tests
{
[Fact]
public void Should_Detect_SqlServer_From_Real_Assembly()
{
var builder = new DbContextOptionsBuilder<EmptyDbContext>();
Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer(builder, "Server=localhost;Database=test");
using var context = new EmptyDbContext(builder.Options);
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(context.Database.ProviderName)
.ShouldBe(EfCoreDatabaseProvider.SqlServer);
}
[Fact]
public void Should_Detect_PostgreSql_From_Real_Assembly()
{
var builder = new DbContextOptionsBuilder<EmptyDbContext>();
Microsoft.EntityFrameworkCore.NpgsqlDbContextOptionsBuilderExtensions.UseNpgsql(builder, "Host=localhost;Database=test");
using var context = new EmptyDbContext(builder.Options);
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(context.Database.ProviderName)
.ShouldBe(EfCoreDatabaseProvider.PostgreSql);
}
[Fact]
public void Should_Detect_MySql_Pomelo_From_Assembly_Name()
{
var providerName = typeof(Microsoft.EntityFrameworkCore.MySqlDbContextOptionsBuilderExtensions).Assembly.GetName().Name;
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(providerName)
.ShouldBe(EfCoreDatabaseProvider.MySql);
}
[Fact]
public void Should_Detect_MySql_Oracle_From_Real_Assembly()
{
var builder = new DbContextOptionsBuilder<EmptyDbContext>();
Microsoft.EntityFrameworkCore.MySQLDbContextOptionsExtensions.UseMySQL(builder, "Server=localhost;Database=test");
using var context = new EmptyDbContext(builder.Options);
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(context.Database.ProviderName)
.ShouldBe(EfCoreDatabaseProvider.MySql);
}
[Fact]
public void Should_Detect_Oracle_From_Real_Assembly()
{
var builder = new DbContextOptionsBuilder<EmptyDbContext>();
Microsoft.EntityFrameworkCore.OracleDbContextOptionsExtensions.UseOracle(builder, "Data Source=localhost/XE");
using var context = new EmptyDbContext(builder.Options);
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(context.Database.ProviderName)
.ShouldBe(EfCoreDatabaseProvider.Oracle);
}
[Fact]
public void Should_Detect_Sqlite_From_Real_Assembly()
{
var builder = new DbContextOptionsBuilder<EmptyDbContext>();
Microsoft.EntityFrameworkCore.SqliteDbContextOptionsBuilderExtensions.UseSqlite(builder, "Data Source=:memory:");
using var context = new EmptyDbContext(builder.Options);
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(context.Database.ProviderName)
.ShouldBe(EfCoreDatabaseProvider.Sqlite);
}
[Fact]
public void Should_Detect_InMemory_From_Real_Assembly()
{
var builder = new DbContextOptionsBuilder<EmptyDbContext>();
Microsoft.EntityFrameworkCore.InMemoryDbContextOptionsExtensions.UseInMemoryDatabase(builder, "test");
using var context = new EmptyDbContext(builder.Options);
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(context.Database.ProviderName)
.ShouldBe(EfCoreDatabaseProvider.InMemory);
}
[Theory]
[InlineData("Devart.Data.Oracle.Entity.EFCore", EfCoreDatabaseProvider.Oracle)]
[InlineData("FirebirdSql.EntityFrameworkCore.Firebird", EfCoreDatabaseProvider.Firebird)]
[InlineData("Microsoft.EntityFrameworkCore.Cosmos", EfCoreDatabaseProvider.Cosmos)]
public void Should_Detect_Providers_Without_Package_Reference(string providerName, EfCoreDatabaseProvider expected)
{
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(providerName).ShouldBe(expected);
}
[Theory]
[InlineData("microsoft.entityframeworkcore.sqlserver", EfCoreDatabaseProvider.SqlServer)]
[InlineData("POMELO.ENTITYFRAMEWORKCORE.MYSQL", EfCoreDatabaseProvider.MySql)]
[InlineData("npgsql.entityframeworkcore.postgresql", EfCoreDatabaseProvider.PostgreSql)]
public void Should_Detect_Providers_Case_Insensitively(string providerName, EfCoreDatabaseProvider expected)
{
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(providerName).ShouldBe(expected);
}
[Theory]
[InlineData(null)]
[InlineData("")]
[InlineData(" ")]
[InlineData("Some.Unknown.Provider")]
public void Should_Return_Null_For_Unknown_Or_Empty(string? providerName)
{
EfCoreDatabaseProviderHelper.GetDatabaseProviderOrNull(providerName).ShouldBeNull();
}
private class EmptyDbContext : DbContext
{
public EmptyDbContext(DbContextOptions<EmptyDbContext> options) : base(options)
{
}
}
}

106
framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker_Tests.cs

@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.MultiTenancy;
using Volo.Abp.SimpleStateChecking;
using Xunit;
namespace Volo.Abp.Features;
public class RequireFeaturesSimpleBatchStateChecker_Tests : FeatureTestBase
{
private readonly ISimpleStateCheckerManager<MyStateEntity> _simpleStateCheckerManager;
private readonly ICurrentTenant _currentTenant;
public RequireFeaturesSimpleBatchStateChecker_Tests()
{
_simpleStateCheckerManager = GetRequiredService<ISimpleStateCheckerManager<MyStateEntity>>();
_currentTenant = GetRequiredService<ICurrentTenant>();
}
[Fact]
public void Switch_Current_Checker_Test()
{
var checker = RequireFeaturesSimpleBatchStateChecker<MyStateEntity2>.Current;
checker.ShouldNotBeNull();
RequireFeaturesSimpleBatchStateChecker<MyStateEntity2> checker2 = null;
using (RequireFeaturesSimpleBatchStateChecker<MyStateEntity2>.Use(new RequireFeaturesSimpleBatchStateChecker<MyStateEntity2>()))
{
checker2 = RequireFeaturesSimpleBatchStateChecker<MyStateEntity2>.Current;
checker2.ShouldNotBeNull();
checker2.ShouldNotBe(checker);
}
checker2.ShouldNotBeNull();
checker2.ShouldNotBe(checker);
}
[Fact]
public async Task RequireFeaturesSimpleBatchStateChecker_Test()
{
// Tenant1: BooleanTestFeature1=true, BooleanTestFeature2=true
// Tenant2: no boolean features set → false
using (_currentTenant.Change(TestFeatureStore.Tenant1Id))
{
var myStateEntities = new MyStateEntity[]
{
new MyStateEntity().RequireFeatures(requiresAll: true, batchCheck: true, "BooleanTestFeature1"),
new MyStateEntity().RequireFeatures(requiresAll: true, batchCheck: true, "BooleanTestFeature2"),
new MyStateEntity().RequireFeatures(requiresAll: true, batchCheck: true, "BooleanTestFeature1", "BooleanTestFeature2"),
new MyStateEntity().RequireFeatures(requiresAll: true, batchCheck: true, "BooleanTestFeature1", "BooleanTestFeature2"),
};
var result = await _simpleStateCheckerManager.IsEnabledAsync(myStateEntities);
result.Count.ShouldBe(myStateEntities.Length);
result[myStateEntities[0]].ShouldBeTrue();
result[myStateEntities[1]].ShouldBeTrue();
result[myStateEntities[2]].ShouldBeTrue();
result[myStateEntities[3]].ShouldBeTrue();
}
using (_currentTenant.Change(TestFeatureStore.Tenant2Id))
{
var myStateEntities = new MyStateEntity[]
{
new MyStateEntity().RequireFeatures(requiresAll: true, batchCheck: true, "BooleanTestFeature1"),
new MyStateEntity().RequireFeatures(requiresAll: true, batchCheck: true, "BooleanTestFeature2"),
new MyStateEntity().RequireFeatures(requiresAll: true, batchCheck: true, "BooleanTestFeature1", "BooleanTestFeature2"),
new MyStateEntity().RequireFeatures(requiresAll: false, batchCheck: true, "BooleanTestFeature1", "BooleanTestFeature2"),
};
var result = await _simpleStateCheckerManager.IsEnabledAsync(myStateEntities);
result.Count.ShouldBe(myStateEntities.Length);
result[myStateEntities[0]].ShouldBeFalse();
result[myStateEntities[1]].ShouldBeFalse();
result[myStateEntities[2]].ShouldBeFalse();
result[myStateEntities[3]].ShouldBeFalse();
}
}
class MyStateEntity : IHasSimpleStateCheckers<MyStateEntity>
{
public List<ISimpleStateChecker<MyStateEntity>> StateCheckers { get; }
public MyStateEntity()
{
StateCheckers = new List<ISimpleStateChecker<MyStateEntity>>();
}
}
class MyStateEntity2 : IHasSimpleStateCheckers<MyStateEntity2>
{
public List<ISimpleStateChecker<MyStateEntity2>> StateCheckers { get; }
public MyStateEntity2()
{
StateCheckers = new List<ISimpleStateChecker<MyStateEntity2>>();
}
}
}

4
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalizationTestModule.cs

@ -29,6 +29,10 @@ public class AbpLocalizationTestModule : AbpModule
.Add("LocalizationTestCountryNames")
.AddVirtualJson("/Volo/Abp/Localization/TestResources/Base/CountryNames");
options.Resources
.Add("LocalizationTestFilesSplit")
.AddVirtualJson("/Volo/Abp/Localization/TestResources/FilesSplit");
options.Resources
.Add<LocalizationTestResource>("en")
.AddVirtualJson("/Volo/Abp/Localization/TestResources/Source")

29
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs

@ -234,6 +234,35 @@ public class AbpLocalization_Tests : AbpIntegratedTest<AbpLocalizationTestModule
}
}
[Fact]
public void Should_Get_Localized_Text_If_Defined_In_Requested_Culture_Defined_In_Different_Files()
{
using (CultureHelper.Use(CultureInfo.GetCultureInfo("de")))
{
_localizer["Car"].Value.ShouldBe("Auto");
_localizer["CarPlural"].Value.ShouldBe("Autos");
_localizer["Biography"].Value.ShouldBe("Biografie");
_localizer["Enum:BookType.Undefined"].Value.ShouldBe("Nicht definiert");
}
}
[Fact]
public void GetAllStrings_Should_Contain_Values_From_All_Split_Files()
{
using (CultureHelper.Use(CultureInfo.GetCultureInfo("de")))
{
var allStrings = _localizer.GetAllStrings(false).ToList();
// From de.json
allStrings.ShouldContain(ls => ls.Name == "Car" && ls.Value == "Auto");
allStrings.ShouldContain(ls => ls.Name == "FortyTwo" && ls.Value == "Zweiundvierzig");
// From de_Book.json
allStrings.ShouldContain(ls => ls.Name == "Biography" && ls.Value == "Biografie");
allStrings.ShouldContain(ls => ls.Name == "Enum:BookType.Undefined" && ls.Value == "Nicht definiert");
}
}
[Fact]
public void GetAllStrings_With_Parents()
{

51
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpStringLocalizerFactory_Tests.cs

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Localization;
using Shouldly;
using Volo.Abp.DynamicProxy;
@ -90,4 +91,50 @@ public class AbpStringLocalizerFactory_Tests : AbpIntegratedTest<AbpLocalization
localizer2["CarPlural"].Value.ShouldBe("CarPlural");
}
}
}
[Fact]
public void Should_Create_Resource_By_Name_From_Split_Files()
{
using (CultureHelper.Use("en"))
{
var localizer = _factory.CreateByResourceNameOrNull("LocalizationTestFilesSplit");
localizer.ShouldNotBeNull();
localizer["Base.Id"].Value.ShouldBe("Id");
localizer["Book.Id"].Value.ShouldBe("ISBN");
localizer["ThisIsRequiredValue"].Value.ShouldBe("This is required value (this will be used)");
}
}
[Fact]
public void Should_Get_All_Strings_From_Split_Files()
{
using (CultureHelper.Use("en"))
{
var localizer = _factory.CreateByResourceNameOrNull("LocalizationTestFilesSplit");
localizer.ShouldNotBeNull();
var allStrings = localizer.GetAllStrings(includeParentCultures: false).ToList();
allStrings.ShouldContain(ls => ls.Name == "Base.Id" && ls.Value == "Id");
allStrings.ShouldContain(ls => ls.Name == "Base.Name" && ls.Value == "Name");
allStrings.ShouldContain(ls => ls.Name == "Book.Id" && ls.Value == "ISBN");
allStrings.ShouldContain(ls => ls.Name == "Book.Name" && ls.Value == "Title");
allStrings.ShouldContain(ls => ls.Name == "ThisIsRequiredValue" && ls.Value == "This is required value (this will be used)");
}
}
[Fact]
public void Should_Override_Value_From_Later_Split_File()
{
using (CultureHelper.Use("en"))
{
var localizer = _factory.CreateByResourceNameOrNull("LocalizationTestFilesSplit");
localizer.ShouldNotBeNull();
// !en_First.json defines "This is required value"
// zen_Last.json defines "This is required value (this will be used)"
// zen_Last.json sorts after !en_First.json (ordinal: '!' < 'z'), so its value wins
localizer["ThisIsRequiredValue"].Value.ShouldBe("This is required value (this will be used)");
}
}
}

77
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/JsonLocalizationDictionaryBuilder_Tests.cs

@ -0,0 +1,77 @@
using Shouldly;
using Volo.Abp.Localization.Json;
using Xunit;
namespace Volo.Abp.Localization;
/// <summary>
/// Testing edge cases for <see cref="JsonLocalizationDictionaryBuilder"/>
/// </summary>
public class JsonLocalizationDictionaryBuilder_Tests
{
[Fact]
public void Should_Use_Last_Value_When_Json_Contains_Duplicate_Keys()
{
// This test locks the behavior of System.Text.Json when deserializing duplicate JSON property names.
// If STJ changes this behavior in a future version, this test will catch the regression.
var input = """
{
"culture": "en",
"texts": {
"ThisFieldIsRequired": "This field is required",
"MaxLengthErrorMessage": "This field can be maximum of '{0}' chars",
"ThisFieldIsRequired": "This field is required again"
}
}
""";
var localizationDictionary = JsonLocalizationDictionaryBuilder.BuildFromJsonString(input);
localizationDictionary.ShouldNotBeNull();
var localizationString = localizationDictionary.GetOrNull("ThisFieldIsRequired");
localizationString.ShouldNotBeNull();
localizationString.Value.ShouldBe("This field is required again");
}
[Fact]
public void Should_Use_Nested_Value_When_Flat_Key_Is_Defined_Before_Nested_Object()
{
// When a flat key (e.g. "Foo__Bar") appears before a nested object (e.g. "Foo": {"Bar": ...}),
// the nested value wins because FlattenTexts processes keys in order and last-write wins.
var input = """
{
"culture": "en",
"texts": {
"DeepLocalizationKey__DeepKey": "FlatValue",
"DeepLocalizationKey": { "DeepKey": "NestedValue" }
}
}
""";
var localizationDictionary = JsonLocalizationDictionaryBuilder.BuildFromJsonString(input);
localizationDictionary.ShouldNotBeNull();
var localizationString = localizationDictionary.GetOrNull("DeepLocalizationKey__DeepKey");
localizationString.ShouldNotBeNull();
localizationString.Value.ShouldBe("NestedValue");
}
[Fact]
public void JsonLocalizationDictionaryBuilder_Should_Handle_Deep_Duplicates()
{
var input = """
{
"culture": "en",
"texts": {
"ThisFieldIsRequired": "This field is required",
"DeepLocalizationKey": { "DeepKey": "DeepValue" },
"DeepLocalizationKey__DeepKey": "Another translation"
}
}
""";
var localizationDictionary = JsonLocalizationDictionaryBuilder.BuildFromJsonString(input);
localizationDictionary.ShouldNotBeNull();
var localizationString = localizationDictionary.GetOrNull("DeepLocalizationKey__DeepKey");
localizationString.ShouldNotBeNull();
localizationString.Value.ShouldBe("Another translation");
}
}

6
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/FilesSplit/!en_First.json

@ -0,0 +1,6 @@
{
"culture": "en",
"texts": {
"ThisIsRequiredValue": "This is required value"
}
}

7
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/FilesSplit/en_Base.json

@ -0,0 +1,7 @@
{
"culture": "en",
"texts": {
"Base.Id": "Id",
"Base.Name": "Name"
}
}

7
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/FilesSplit/en_Book.json

@ -0,0 +1,7 @@
{
"culture": "en",
"texts": {
"Book.Id": "ISBN",
"Book.Name": "Title"
}
}

6
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/FilesSplit/zen_Last.json

@ -0,0 +1,6 @@
{
"culture": "en",
"texts": {
"ThisIsRequiredValue": "This is required value (this will be used)"
}
}

7
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json

@ -6,11 +6,6 @@
"CarPlural": "Autos",
"MaxLenghtErrorMessage": "Die Länge dieses Feldes kann maximal '{0}'-Zeichen betragen",
"Universe": "Universum",
"FortyTwo": "Zweiundvierzig",
"Enum:BookType.Undefined": "Nicht definiert",
"Enum:BookType.0": "Undefiniert mit Wert 0",
"BookType.Adventure": "Abenteuer",
"BookType.1": "Abenteuer mit Wert 1",
"Biography": "Biografie"
"FortyTwo": "Zweiundvierzig"
}
}

10
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de_Book.json

@ -0,0 +1,10 @@
{
"culture": "de",
"texts": {
"Enum:BookType.Undefined": "Nicht definiert",
"Enum:BookType.0": "Undefiniert mit Wert 0",
"BookType.Adventure": "Abenteuer",
"BookType.1": "Abenteuer mit Wert 1",
"Biography": "Biografie"
}
}

18
latest-versions.json

@ -1,4 +1,22 @@
[
{
"version": "10.3.0",
"releaseDate": "",
"type": "stable",
"message": "",
"leptonx": {
"version": "5.3.0"
}
},
{
"version": "10.2.1",
"releaseDate": "",
"type": "stable",
"message": "",
"leptonx": {
"version": "5.2.1"
}
},
{
"version": "10.2.0",
"releaseDate": "",

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

@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.shared": "~10.3.0-rc.1",
"@abp/prismjs": "~10.3.0-rc.1",
"@abp/highlight.js": "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.shared": "~10.3.0",
"@abp/prismjs": "~10.3.0",
"@abp/highlight.js": "~10.3.0"
}
}

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

@ -2,204 +2,204 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0-rc.1.tgz#465bb75a8b974be7a7945099fd9055ee68e3c9fe"
integrity sha512-89ca3oXYFEkaKbC1+mNsn6U4x0bls5iffcp1ZqaY5LTfHUhO5tJXbNf5kiOiEwT9TCYwPUHyLbUd2+rT72MGFA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0-rc.1"
"@abp/bootstrap" "~10.3.0-rc.1"
"@abp/bootstrap-datepicker" "~10.3.0-rc.1"
"@abp/bootstrap-daterangepicker" "~10.3.0-rc.1"
"@abp/datatables.net-bs5" "~10.3.0-rc.1"
"@abp/font-awesome" "~10.3.0-rc.1"
"@abp/jquery-validation-unobtrusive" "~10.3.0-rc.1"
"@abp/lodash" "~10.3.0-rc.1"
"@abp/luxon" "~10.3.0-rc.1"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0-rc.1"
"@abp/select2" "~10.3.0-rc.1"
"@abp/sweetalert2" "~10.3.0-rc.1"
"@abp/timeago" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0-rc.1.tgz#c5764ec2fcab13ee591863c54e59e33fe1da90b4"
integrity sha512-vmBsradTXcTEqHUXM5rTLYnsNNYJDeyyvz3kaLLqNwYhjo2FxL8D8IUZnp3Mk0qkBpYaYeGag5uxd06VDczDhg==
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0.tgz#bcf72b5dd1dea285c3fa7cb1b6ce27c29b985ff7"
integrity sha512-X5xmMSxnIzNJPexvKR9y6jyn0v5n2wscN1SECG/bMI1YdKugMlkfkSuyUmLn+RX9/YdcK0jOsdMhfuzs5mgAOA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0"
"@abp/bootstrap" "~10.3.0"
"@abp/bootstrap-datepicker" "~10.3.0"
"@abp/bootstrap-daterangepicker" "~10.3.0"
"@abp/datatables.net-bs5" "~10.3.0"
"@abp/font-awesome" "~10.3.0"
"@abp/jquery-validation-unobtrusive" "~10.3.0"
"@abp/lodash" "~10.3.0"
"@abp/luxon" "~10.3.0"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0"
"@abp/moment" "~10.3.0"
"@abp/select2" "~10.3.0"
"@abp/sweetalert2" "~10.3.0"
"@abp/timeago" "~10.3.0"
"@abp/aspnetcore.mvc.ui@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0.tgz#0d125efd172b6772c516eae82cfe35f144da73fc"
integrity sha512-kp0XdwrlNz+NeLdxSJ6xdUaB5PM7xdbiLsIyTUcwa7AUKBtcVU6yq6qttbk9VyO0KqDgLywSuEL+9PkFhthuPg==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0-rc.1.tgz#58586e2333116ef840c3abd44bb2b54f944c92b1"
integrity sha512-PEXWi22YfOBdbxCUfLkEAVL45DCxzDbNALFLfsCK3LPvXuL5Pw0YU0CrezAW54+1tzPpbWh1HLyEyaUAINz6Wg==
"@abp/bootstrap-datepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0.tgz#032aaf0e474f971b9f90ca7fb83ff7ca4d7be933"
integrity sha512-7mRuRRIE4R0yw1cZuoIskgrqZPUa5/SJzse0K6u+/QDqvyLjjOsyE51WuqAXxlVfKpLp/fBvXZwnCDeCRU9iZQ==
dependencies:
bootstrap-datepicker "^1.10.1"
"@abp/bootstrap-daterangepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0-rc.1.tgz#088b96754014b3c7a8884689574c2332cd5c292e"
integrity sha512-uZRh/Eh/3nyFe4KfMLRMud5LmUs2JFKSeA4KeRliGe1PD68E6NizP/ZiNzkYFP2K2p0nNUQrqmSe7ZFHVELN4A==
"@abp/bootstrap-daterangepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0.tgz#b2a9171595ee311c32f57460013870cde67c6b7f"
integrity sha512-ejLu3sWhfNDlsXeUXAQudZvPv0xM4McxIK65vuVEZiKIwFSnrLYil8jBi12EJJmAw5yYA/KC0EdyG82E+AWpmA==
dependencies:
"@abp/moment" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0"
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0-rc.1.tgz#fc1ccf88e689af336fec9c76d367bcaf66253961"
integrity sha512-vdhaz3ccmIflmufhNiQE/8I2RZdSSv3V4sbA2NC24csx8xl4J/R2JFhTyTLixpxOR+/p1cWw1F2oMYVzjV0+eg==
"@abp/bootstrap@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0.tgz#23535c90613271b02fdad3eae1556b67844729e6"
integrity sha512-JnVOeJUyR78oo+QURvaNqa9xGZaVux0PRIpFpd4Qsqiiz9FvJrbCuSoBkkZoj/0eH23WoZ3bJxy0K9LDE19qvg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/popper.js" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@abp/popper.js" "~10.3.0"
bootstrap "^5.3.8"
"@abp/clipboard@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.3.0-rc.1.tgz#2350aba655b18510dea0ca50cb91e5e5960e9480"
integrity sha512-jKo5H0+FSA+1aDdIWDmyAwNP2nFf19x4nAHbclkwnsexHBRfQlvx6yB6sY85BP+Ft6zxIn9gRRLbJPvFwsKBWw==
"@abp/clipboard@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.3.0.tgz#7bfbfcae6a135065ee13afd1b7d3abc92176a203"
integrity sha512-Cah+jOzcG1KZh6PXWxo+BedU7gsqTuNlTDsCzBCk2NuV2/Blb5qumAwEP4GBKAEIY/XwcFQP/ubxuXMTNjr0jw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
clipboard "^2.0.11"
"@abp/core@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0-rc.1.tgz#68f85db8219e3a2618a60cf82933bc52a2d1ec49"
integrity sha512-tOl/yDSPqRaHbENFVYcjqkdKGM4Qhjd/QPushVaH57pxalmv6canhiWAa0x7W31qxdY9od48H7MYoJx61jURhw==
"@abp/core@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0.tgz#9960f8179d1fdc42250d0bbba60e379590c8199c"
integrity sha512-DpL4qrsyCUolypUwxKVDDK8bPVhNbYKx6l2ytUjoOu73CwgPoCSGkvHWrmKIsEsmTfOC9J7+GDErh8jWR/5pVA==
dependencies:
"@abp/utils" "~10.3.0-rc.1"
"@abp/utils" "~10.3.0"
"@abp/datatables.net-bs5@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0-rc.1.tgz#55e8dde9024c51ccb70fe5b640bbb434fff2e00d"
integrity sha512-d6vFlrNgS6MIpXi2EcZjGFbFbCl5I5hzM49NxQeB3hyG7gUElFsEJkf66UcO8PN/56Uo+sFe/rCdrcvyLLDHmg==
"@abp/datatables.net-bs5@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0.tgz#d8711c52f7c03df51d14d1a5f0e6b00f6d9551fc"
integrity sha512-I8rEU98kEhsNZjVdpPvOcG6F4xr1CgIRb0bTf5bfd8ufzxEUKB+xF9bguJIB5kYwjme8QbMlcJ0V/c+N4iewtQ==
dependencies:
"@abp/datatables.net" "~10.3.0-rc.1"
"@abp/datatables.net" "~10.3.0"
datatables.net-bs5 "^2.3.4"
"@abp/datatables.net@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0-rc.1.tgz#8e275f31d8b24b098c6acc3ec1de7ef2fe587e73"
integrity sha512-m57imr9KOkasgDCIFaIgoDqFDhS71wzClE2WCk+Uk7qHLRgRMa7CYRHh5xeck4hgPWq9DEmAZS0ogbHxLgkLKQ==
"@abp/datatables.net@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0.tgz#f98319d8e226da5aced4d1d94d3ababb11327074"
integrity sha512-imM25WmO1V0hqeG5iPeLvYMID2HX7SG9drz47qilr74MhpY2i2J7HlsvZDonNkjpxzhK4DHpGeQd6mE2QzG7Hw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
datatables.net "^2.3.4"
"@abp/font-awesome@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0-rc.1.tgz#e9d4a1b36652773509259440b77b804af18c5364"
integrity sha512-8zvZh7lbPlvH0/SKYtUeQF+ezKSoohwFxzFhOJ88GOdtwp620mBCwYEHjZA64e/Xjk6Oda2VrdNJ318IvgjIvA==
"@abp/font-awesome@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0.tgz#43602605f5633132cc6fe21b6ce5ab19b86bdf27"
integrity sha512-RUOVHxDyT81hp01DhUuSshKvLM+NiTt9VP+O4/rSj+SOaSJAm3wX7eziCKrDi6H41FwhoZL75CifLhcZVyVO4A==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@fortawesome/fontawesome-free" "^7.0.1"
"@abp/highlight.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-10.3.0-rc.1.tgz#76d699f549aa630afda1f822717a3d3e2d846e88"
integrity sha512-m43P+D3gOsbc6tr2qQ/OmpCU6IqfVkw1frq1J6DcwlpEf5rCFhSEuvSq7roe9OTqsFX0xa+a1X2BHRNc3CkS2Q==
"@abp/highlight.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-10.3.0.tgz#1b04355e84eba15c395cdfc7055c8d610296206b"
integrity sha512-cqApQta9gEs03jk/s+yQsm1mnHGNDZPHnkGYgxYKI41Nl9meV6+5Dkz0b4gnQoUKXvFlmuOuf2DOjot7a2yB7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@highlightjs/cdn-assets" "~11.11.1"
"@abp/jquery-validation-unobtrusive@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0-rc.1.tgz#b547557e85838afcc783ef3d502c2da3a31f4a63"
integrity sha512-NU00gPTHDF2HTnsHaZKAp17DTgAHUCz1fwuXRq4f7Ke5Q9HwiJx2IpIFaeR49xe9XRg1d9iRbNKFkMycjX7rEg==
"@abp/jquery-validation-unobtrusive@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0.tgz#5bc14ed642d48f9eae54761ad39bd9f51beeb005"
integrity sha512-j/9fA7tAs1/t3P2U1kKUiDlHAImmseul6KzvV77sNpnms7g4+x6Fgsa+sMzicSRGOLz7lK5RHdBFyvfKxt7/nA==
dependencies:
"@abp/jquery-validation" "~10.3.0-rc.1"
"@abp/jquery-validation" "~10.3.0"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0-rc.1.tgz#c4ab1a0692c1d224c5f60ffc4cb25545a7024c31"
integrity sha512-JaUhEbhKFB1DPFe+xTeIqTvN3YgFm7gdlpqMxN9Q5k0mnecQHlNmXbmC0oDa+CyxZDvMjWOrSMrJw/8yL4moQQ==
"@abp/jquery-validation@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0.tgz#e669a54d28f6c0b863a284322e527a5c65cb7dbf"
integrity sha512-Wo95ZJLS1ScKm7dm3zFlEFUKqXrqo3m9+82DX5mFJUVCHHuBPrhxvDjxNJ18z4gpoOUu08uqxX7LFbphtkRM3g==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
jquery-validation "^1.21.0"
"@abp/jquery@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0-rc.1.tgz#bc8d3a468483165f8d35cbfa5e91621c2fa53c8f"
integrity sha512-tCZsi5U3oWZOazxRuqrEPyE85jZ4D71IfSrT9/Brf1wAELyrttt5ke3P57yQqjBevbfSqW652Wxca/w2GidQcg==
"@abp/jquery@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0.tgz#3b60bcdfe8f9a33be79db1bea2500837fe09c67d"
integrity sha512-TndX/8bJx5vGAAwIykx2CJUZIFFDkwpD+cUjE45WO2dSrY2M5vNfWiuw95OcLGngO8RaT/gTkFGzPuZqKn9ggg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
jquery "~3.7.1"
"@abp/lodash@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0-rc.1.tgz#7bdf8038f28a822dfc12f0bfa9b7d81f13e16d99"
integrity sha512-tlev/kkQ3Q+OC7BT1ZJ+TThIbVQ3CZ+mtEujLt6zHVIxx8tukbYmmDMpltrmOL2kGnQeDdMqFcQoNJAAYOju+A==
"@abp/lodash@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0.tgz#bd091fc811d85d2f535802631af6165ac1c8a198"
integrity sha512-7JDU9UlbD+9odhFQjolvyJZ6EQKG5kiL2Pt9T1RMVchNh47iEuZwfi8c+CIxa3YxA3n6lAsZ+8Pmxq4yOku+RQ==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
lodash "^4.17.21"
"@abp/luxon@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0-rc.1.tgz#e13db7cade7761964e9820315e43bac182f80784"
integrity sha512-FB42gIKvfDJBu2vFZDBFVL6bn9jZpDpKdt5Kkp4OKQak9NHVyNuzH+R95Hr99vB+KELyTwW7hihc6Kl2oCrwWQ==
"@abp/luxon@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0.tgz#acbd92289456a546607ed4506dc36f71e6da53c9"
integrity sha512-IIi2+odQzuFK4qV1KJ2HtlTewSPby2F9CJFNNtNRMzX/P30dQkAGWpNV5/FZzJwFIihR+zSei5wlu11WpPugsw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
luxon "^3.7.2"
"@abp/malihu-custom-scrollbar-plugin@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0-rc.1.tgz#1af6ebce0553c368d884752efcaef6cceaeb806c"
integrity sha512-+BYN/3DhhtI7tS4nv4BpdsPiQLEVrLQ0KgawGRr1h3SV/nz1dtBTBgTbKvy/4bDHoMSKA1dPfudxi6XjgwUoBA==
"@abp/malihu-custom-scrollbar-plugin@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0.tgz#209931d02a994ef448371d6203e9ec74c72b61e6"
integrity sha512-hJjwEExP3hKE1MNDG+pcvoHRFUihh3t/0wCPNaoePFd8+QnJuyQ9U0VA+vdtykTxm8uFNE2uaCgyHffoHmzeZA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0-rc.1.tgz#82229c44e7b1417c872edec53ed3f51d06bf7e8b"
integrity sha512-hKQ8VE25Wqo1mj/ks8qw39ONLQK5sV33xc0bfYHTk0+NVAholAPZF7gjqiDzaAWXzVBVJjemH554AM3y14VNAA==
"@abp/moment@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0.tgz#5a5c4ece14d1bc4dd33134f85d1d085733d3c975"
integrity sha512-8DKw2jgC/28nLrB/CR9BiyUSt0pUmWF+bEgAsduln6VrSCHn0aRLqgs+wi/9Ol+1bl7pO2wbJOYg1qbnkDhrAQ==
dependencies:
moment "^2.30.1"
"@abp/popper.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0-rc.1.tgz#3d758e25e7b09210542e4da06558cd5a1b710b45"
integrity sha512-3PKJpwzTYAQ6UJFe3u9bn1qKRjXwmILlR9umyH998bfJLr0Zl04rBfcbIL9/l3S01qlCMt2bwjre0+wpRl+/OA==
"@abp/popper.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0.tgz#cb2415e45a905854980f4e864c00c8fe1156a6f9"
integrity sha512-Yfafs50t7DKnShxAl9WPpihZxG5cLAt99rJmIyXBYUQIpkHkxDyUIA5b4gCoVCqKgjFDOxG7i6L+Ovd/2N8k7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@popperjs/core" "^2.11.8"
"@abp/prismjs@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.3.0-rc.1.tgz#147852ca4e0f9ceebe5681b65ad440b48325021f"
integrity sha512-sAWkFAP8GPx4UBR2EXg9Uz0sivK9CTWccUGGecttK9mNf12YbtVftmS145Fgip2+ifklPTcVRjXWIghyJPYu5Q==
"@abp/prismjs@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.3.0.tgz#4ea33ece50cefcfc8a89c17b0d265b484b7205ee"
integrity sha512-WvkLyg+izkcX6sEOYy41B9lebiniYxMQZ++c+ysyOQKZzrYEEFOOLlnFS9jPqSKLv9cNRizhG1CCfiwoYCxufQ==
dependencies:
"@abp/clipboard" "~10.3.0-rc.1"
"@abp/core" "~10.3.0-rc.1"
"@abp/clipboard" "~10.3.0"
"@abp/core" "~10.3.0"
prismjs "^1.30.0"
"@abp/select2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0-rc.1.tgz#5292066ccf962ad92058d946b267d413c4876c40"
integrity sha512-gAJaAuLoHaOhkdDwS2F3ZH3CR//8EClkEWDde2AcYS+W2AY9/4g9kAMUOD5IrkrrYvJ+DDa9u426Ds8n8s/B9g==
"@abp/select2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0.tgz#199777173ca3e43a5448f8b51b30c3aafe4a3333"
integrity sha512-6sEIYIakVI1DM3eOqOaxwdG8vkyVFBWvVZhoChPZkgIIQ0EH2JLerHv0pePJEl6mQSxOUrikPA8++B2y+sBnQA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
select2 "^4.0.13"
"@abp/sweetalert2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0-rc.1.tgz#a344674f14b21f430a820805bc36768a6dde1f58"
integrity sha512-UV3nSA3LdgygFr1ruFZRU1PVan455NMFILisXKRYVu9QwweFInmnliR6FmcDlTmPFW7RCLBk+lC9UblEcDthUA==
"@abp/sweetalert2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0.tgz#515e0477574b54bc6650b9f5ee193bfc648c715a"
integrity sha512-bY5MXEiKja+vk71ujSn8rpzRC45Ge8zvcca1k1vBJs+oKyRCii//JBxa3H0lagZo5r/QwIqv5ihdyLE1xsuLSg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
sweetalert2 "^11.23.0"
"@abp/timeago@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0-rc.1.tgz#f0e476b65f19fd986c06231a331fdb4050d1a6c6"
integrity sha512-ydBvTJ73BrV7A69vtWRzw//JmrLu6r4ow8J3GZy8vEuH9vlBWe1JHcPK6lOD3DDM+K6Jag5/31RL45ZuSSxcvQ==
"@abp/timeago@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0.tgz#3214a6d000c79504c9fa7cb4e004a967fe46459b"
integrity sha512-Rgcex+jvM9Z9/E0I5Q3wlC2bY5550/+6xRX407k5ho4gxCccYo3c0Gkpiy5pJRFhTwtBgcNzYxArh6NCez+tDg==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
timeago "^1.6.7"
"@abp/utils@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0-rc.1.tgz#b6e20d357b87a009ffef3e11a0e7cc3a887d461f"
integrity sha512-tBcywC3T2ZUKS6znm1lCd+jP0peZolYyxjs1F7wyyH/y+Y08NYtGgLG/A8EaIv7iDY2K4WExzvWjTHB4lE1mFA==
"@abp/utils@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0.tgz#d88c0d639d69d6210c3070892aac61d5e945c124"
integrity sha512-iNehxiqWJQl2wwE9EbsQANPv/ITMh0yUcPATUlG/McoLWdpPcqobx75NxXcHDqW8ZarecqSktjJDZPvaUaD+jA==
dependencies:
just-compare "^2.3.0"

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

@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0-rc.1",
"@abp/prismjs": "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0",
"@abp/prismjs": "~10.3.0"
},
"devDependencies": {}
}

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

@ -2,203 +2,203 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0-rc.1.tgz#82f61b5d112c8cbc5c74077809d84525edc1200a"
integrity sha512-eo4ubQfc6zT2/uTKM7U7XS6vExSKsg2szfvybFuBWJjmgb1ybfU2dKDXK4OfLdt0/wUBqBlEKDNK6NWZTfiovQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0-rc.1.tgz#465bb75a8b974be7a7945099fd9055ee68e3c9fe"
integrity sha512-89ca3oXYFEkaKbC1+mNsn6U4x0bls5iffcp1ZqaY5LTfHUhO5tJXbNf5kiOiEwT9TCYwPUHyLbUd2+rT72MGFA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0-rc.1"
"@abp/bootstrap" "~10.3.0-rc.1"
"@abp/bootstrap-datepicker" "~10.3.0-rc.1"
"@abp/bootstrap-daterangepicker" "~10.3.0-rc.1"
"@abp/datatables.net-bs5" "~10.3.0-rc.1"
"@abp/font-awesome" "~10.3.0-rc.1"
"@abp/jquery-validation-unobtrusive" "~10.3.0-rc.1"
"@abp/lodash" "~10.3.0-rc.1"
"@abp/luxon" "~10.3.0-rc.1"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0-rc.1"
"@abp/select2" "~10.3.0-rc.1"
"@abp/sweetalert2" "~10.3.0-rc.1"
"@abp/timeago" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0-rc.1.tgz#c5764ec2fcab13ee591863c54e59e33fe1da90b4"
integrity sha512-vmBsradTXcTEqHUXM5rTLYnsNNYJDeyyvz3kaLLqNwYhjo2FxL8D8IUZnp3Mk0qkBpYaYeGag5uxd06VDczDhg==
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0.tgz#bf48e8fa571067d15bc19bdd3f13509acf58f9c7"
integrity sha512-t9pHqrXaCDYcsdrz0VPKT28ujnnU+EVxyVDogQSRRpKsDoLhNcOD8NI3swdAWBQZ46YSCDfeDR+gfwjC3yqpXQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0.tgz#bcf72b5dd1dea285c3fa7cb1b6ce27c29b985ff7"
integrity sha512-X5xmMSxnIzNJPexvKR9y6jyn0v5n2wscN1SECG/bMI1YdKugMlkfkSuyUmLn+RX9/YdcK0jOsdMhfuzs5mgAOA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0"
"@abp/bootstrap" "~10.3.0"
"@abp/bootstrap-datepicker" "~10.3.0"
"@abp/bootstrap-daterangepicker" "~10.3.0"
"@abp/datatables.net-bs5" "~10.3.0"
"@abp/font-awesome" "~10.3.0"
"@abp/jquery-validation-unobtrusive" "~10.3.0"
"@abp/lodash" "~10.3.0"
"@abp/luxon" "~10.3.0"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0"
"@abp/moment" "~10.3.0"
"@abp/select2" "~10.3.0"
"@abp/sweetalert2" "~10.3.0"
"@abp/timeago" "~10.3.0"
"@abp/aspnetcore.mvc.ui@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0.tgz#0d125efd172b6772c516eae82cfe35f144da73fc"
integrity sha512-kp0XdwrlNz+NeLdxSJ6xdUaB5PM7xdbiLsIyTUcwa7AUKBtcVU6yq6qttbk9VyO0KqDgLywSuEL+9PkFhthuPg==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0-rc.1.tgz#58586e2333116ef840c3abd44bb2b54f944c92b1"
integrity sha512-PEXWi22YfOBdbxCUfLkEAVL45DCxzDbNALFLfsCK3LPvXuL5Pw0YU0CrezAW54+1tzPpbWh1HLyEyaUAINz6Wg==
"@abp/bootstrap-datepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0.tgz#032aaf0e474f971b9f90ca7fb83ff7ca4d7be933"
integrity sha512-7mRuRRIE4R0yw1cZuoIskgrqZPUa5/SJzse0K6u+/QDqvyLjjOsyE51WuqAXxlVfKpLp/fBvXZwnCDeCRU9iZQ==
dependencies:
bootstrap-datepicker "^1.10.1"
"@abp/bootstrap-daterangepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0-rc.1.tgz#088b96754014b3c7a8884689574c2332cd5c292e"
integrity sha512-uZRh/Eh/3nyFe4KfMLRMud5LmUs2JFKSeA4KeRliGe1PD68E6NizP/ZiNzkYFP2K2p0nNUQrqmSe7ZFHVELN4A==
"@abp/bootstrap-daterangepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0.tgz#b2a9171595ee311c32f57460013870cde67c6b7f"
integrity sha512-ejLu3sWhfNDlsXeUXAQudZvPv0xM4McxIK65vuVEZiKIwFSnrLYil8jBi12EJJmAw5yYA/KC0EdyG82E+AWpmA==
dependencies:
"@abp/moment" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0"
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0-rc.1.tgz#fc1ccf88e689af336fec9c76d367bcaf66253961"
integrity sha512-vdhaz3ccmIflmufhNiQE/8I2RZdSSv3V4sbA2NC24csx8xl4J/R2JFhTyTLixpxOR+/p1cWw1F2oMYVzjV0+eg==
"@abp/bootstrap@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0.tgz#23535c90613271b02fdad3eae1556b67844729e6"
integrity sha512-JnVOeJUyR78oo+QURvaNqa9xGZaVux0PRIpFpd4Qsqiiz9FvJrbCuSoBkkZoj/0eH23WoZ3bJxy0K9LDE19qvg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/popper.js" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@abp/popper.js" "~10.3.0"
bootstrap "^5.3.8"
"@abp/clipboard@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.3.0-rc.1.tgz#2350aba655b18510dea0ca50cb91e5e5960e9480"
integrity sha512-jKo5H0+FSA+1aDdIWDmyAwNP2nFf19x4nAHbclkwnsexHBRfQlvx6yB6sY85BP+Ft6zxIn9gRRLbJPvFwsKBWw==
"@abp/clipboard@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.3.0.tgz#7bfbfcae6a135065ee13afd1b7d3abc92176a203"
integrity sha512-Cah+jOzcG1KZh6PXWxo+BedU7gsqTuNlTDsCzBCk2NuV2/Blb5qumAwEP4GBKAEIY/XwcFQP/ubxuXMTNjr0jw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
clipboard "^2.0.11"
"@abp/core@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0-rc.1.tgz#68f85db8219e3a2618a60cf82933bc52a2d1ec49"
integrity sha512-tOl/yDSPqRaHbENFVYcjqkdKGM4Qhjd/QPushVaH57pxalmv6canhiWAa0x7W31qxdY9od48H7MYoJx61jURhw==
"@abp/core@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0.tgz#9960f8179d1fdc42250d0bbba60e379590c8199c"
integrity sha512-DpL4qrsyCUolypUwxKVDDK8bPVhNbYKx6l2ytUjoOu73CwgPoCSGkvHWrmKIsEsmTfOC9J7+GDErh8jWR/5pVA==
dependencies:
"@abp/utils" "~10.3.0-rc.1"
"@abp/utils" "~10.3.0"
"@abp/datatables.net-bs5@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0-rc.1.tgz#55e8dde9024c51ccb70fe5b640bbb434fff2e00d"
integrity sha512-d6vFlrNgS6MIpXi2EcZjGFbFbCl5I5hzM49NxQeB3hyG7gUElFsEJkf66UcO8PN/56Uo+sFe/rCdrcvyLLDHmg==
"@abp/datatables.net-bs5@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0.tgz#d8711c52f7c03df51d14d1a5f0e6b00f6d9551fc"
integrity sha512-I8rEU98kEhsNZjVdpPvOcG6F4xr1CgIRb0bTf5bfd8ufzxEUKB+xF9bguJIB5kYwjme8QbMlcJ0V/c+N4iewtQ==
dependencies:
"@abp/datatables.net" "~10.3.0-rc.1"
"@abp/datatables.net" "~10.3.0"
datatables.net-bs5 "^2.3.4"
"@abp/datatables.net@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0-rc.1.tgz#8e275f31d8b24b098c6acc3ec1de7ef2fe587e73"
integrity sha512-m57imr9KOkasgDCIFaIgoDqFDhS71wzClE2WCk+Uk7qHLRgRMa7CYRHh5xeck4hgPWq9DEmAZS0ogbHxLgkLKQ==
"@abp/datatables.net@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0.tgz#f98319d8e226da5aced4d1d94d3ababb11327074"
integrity sha512-imM25WmO1V0hqeG5iPeLvYMID2HX7SG9drz47qilr74MhpY2i2J7HlsvZDonNkjpxzhK4DHpGeQd6mE2QzG7Hw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
datatables.net "^2.3.4"
"@abp/font-awesome@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0-rc.1.tgz#e9d4a1b36652773509259440b77b804af18c5364"
integrity sha512-8zvZh7lbPlvH0/SKYtUeQF+ezKSoohwFxzFhOJ88GOdtwp620mBCwYEHjZA64e/Xjk6Oda2VrdNJ318IvgjIvA==
"@abp/font-awesome@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0.tgz#43602605f5633132cc6fe21b6ce5ab19b86bdf27"
integrity sha512-RUOVHxDyT81hp01DhUuSshKvLM+NiTt9VP+O4/rSj+SOaSJAm3wX7eziCKrDi6H41FwhoZL75CifLhcZVyVO4A==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@fortawesome/fontawesome-free" "^7.0.1"
"@abp/jquery-validation-unobtrusive@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0-rc.1.tgz#b547557e85838afcc783ef3d502c2da3a31f4a63"
integrity sha512-NU00gPTHDF2HTnsHaZKAp17DTgAHUCz1fwuXRq4f7Ke5Q9HwiJx2IpIFaeR49xe9XRg1d9iRbNKFkMycjX7rEg==
"@abp/jquery-validation-unobtrusive@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0.tgz#5bc14ed642d48f9eae54761ad39bd9f51beeb005"
integrity sha512-j/9fA7tAs1/t3P2U1kKUiDlHAImmseul6KzvV77sNpnms7g4+x6Fgsa+sMzicSRGOLz7lK5RHdBFyvfKxt7/nA==
dependencies:
"@abp/jquery-validation" "~10.3.0-rc.1"
"@abp/jquery-validation" "~10.3.0"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0-rc.1.tgz#c4ab1a0692c1d224c5f60ffc4cb25545a7024c31"
integrity sha512-JaUhEbhKFB1DPFe+xTeIqTvN3YgFm7gdlpqMxN9Q5k0mnecQHlNmXbmC0oDa+CyxZDvMjWOrSMrJw/8yL4moQQ==
"@abp/jquery-validation@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0.tgz#e669a54d28f6c0b863a284322e527a5c65cb7dbf"
integrity sha512-Wo95ZJLS1ScKm7dm3zFlEFUKqXrqo3m9+82DX5mFJUVCHHuBPrhxvDjxNJ18z4gpoOUu08uqxX7LFbphtkRM3g==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
jquery-validation "^1.21.0"
"@abp/jquery@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0-rc.1.tgz#bc8d3a468483165f8d35cbfa5e91621c2fa53c8f"
integrity sha512-tCZsi5U3oWZOazxRuqrEPyE85jZ4D71IfSrT9/Brf1wAELyrttt5ke3P57yQqjBevbfSqW652Wxca/w2GidQcg==
"@abp/jquery@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0.tgz#3b60bcdfe8f9a33be79db1bea2500837fe09c67d"
integrity sha512-TndX/8bJx5vGAAwIykx2CJUZIFFDkwpD+cUjE45WO2dSrY2M5vNfWiuw95OcLGngO8RaT/gTkFGzPuZqKn9ggg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
jquery "~3.7.1"
"@abp/lodash@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0-rc.1.tgz#7bdf8038f28a822dfc12f0bfa9b7d81f13e16d99"
integrity sha512-tlev/kkQ3Q+OC7BT1ZJ+TThIbVQ3CZ+mtEujLt6zHVIxx8tukbYmmDMpltrmOL2kGnQeDdMqFcQoNJAAYOju+A==
"@abp/lodash@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0.tgz#bd091fc811d85d2f535802631af6165ac1c8a198"
integrity sha512-7JDU9UlbD+9odhFQjolvyJZ6EQKG5kiL2Pt9T1RMVchNh47iEuZwfi8c+CIxa3YxA3n6lAsZ+8Pmxq4yOku+RQ==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
lodash "^4.17.21"
"@abp/luxon@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0-rc.1.tgz#e13db7cade7761964e9820315e43bac182f80784"
integrity sha512-FB42gIKvfDJBu2vFZDBFVL6bn9jZpDpKdt5Kkp4OKQak9NHVyNuzH+R95Hr99vB+KELyTwW7hihc6Kl2oCrwWQ==
"@abp/luxon@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0.tgz#acbd92289456a546607ed4506dc36f71e6da53c9"
integrity sha512-IIi2+odQzuFK4qV1KJ2HtlTewSPby2F9CJFNNtNRMzX/P30dQkAGWpNV5/FZzJwFIihR+zSei5wlu11WpPugsw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
luxon "^3.7.2"
"@abp/malihu-custom-scrollbar-plugin@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0-rc.1.tgz#1af6ebce0553c368d884752efcaef6cceaeb806c"
integrity sha512-+BYN/3DhhtI7tS4nv4BpdsPiQLEVrLQ0KgawGRr1h3SV/nz1dtBTBgTbKvy/4bDHoMSKA1dPfudxi6XjgwUoBA==
"@abp/malihu-custom-scrollbar-plugin@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0.tgz#209931d02a994ef448371d6203e9ec74c72b61e6"
integrity sha512-hJjwEExP3hKE1MNDG+pcvoHRFUihh3t/0wCPNaoePFd8+QnJuyQ9U0VA+vdtykTxm8uFNE2uaCgyHffoHmzeZA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0-rc.1.tgz#82229c44e7b1417c872edec53ed3f51d06bf7e8b"
integrity sha512-hKQ8VE25Wqo1mj/ks8qw39ONLQK5sV33xc0bfYHTk0+NVAholAPZF7gjqiDzaAWXzVBVJjemH554AM3y14VNAA==
"@abp/moment@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0.tgz#5a5c4ece14d1bc4dd33134f85d1d085733d3c975"
integrity sha512-8DKw2jgC/28nLrB/CR9BiyUSt0pUmWF+bEgAsduln6VrSCHn0aRLqgs+wi/9Ol+1bl7pO2wbJOYg1qbnkDhrAQ==
dependencies:
moment "^2.30.1"
"@abp/popper.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0-rc.1.tgz#3d758e25e7b09210542e4da06558cd5a1b710b45"
integrity sha512-3PKJpwzTYAQ6UJFe3u9bn1qKRjXwmILlR9umyH998bfJLr0Zl04rBfcbIL9/l3S01qlCMt2bwjre0+wpRl+/OA==
"@abp/popper.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0.tgz#cb2415e45a905854980f4e864c00c8fe1156a6f9"
integrity sha512-Yfafs50t7DKnShxAl9WPpihZxG5cLAt99rJmIyXBYUQIpkHkxDyUIA5b4gCoVCqKgjFDOxG7i6L+Ovd/2N8k7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@popperjs/core" "^2.11.8"
"@abp/prismjs@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.3.0-rc.1.tgz#147852ca4e0f9ceebe5681b65ad440b48325021f"
integrity sha512-sAWkFAP8GPx4UBR2EXg9Uz0sivK9CTWccUGGecttK9mNf12YbtVftmS145Fgip2+ifklPTcVRjXWIghyJPYu5Q==
"@abp/prismjs@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.3.0.tgz#4ea33ece50cefcfc8a89c17b0d265b484b7205ee"
integrity sha512-WvkLyg+izkcX6sEOYy41B9lebiniYxMQZ++c+ysyOQKZzrYEEFOOLlnFS9jPqSKLv9cNRizhG1CCfiwoYCxufQ==
dependencies:
"@abp/clipboard" "~10.3.0-rc.1"
"@abp/core" "~10.3.0-rc.1"
"@abp/clipboard" "~10.3.0"
"@abp/core" "~10.3.0"
prismjs "^1.30.0"
"@abp/select2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0-rc.1.tgz#5292066ccf962ad92058d946b267d413c4876c40"
integrity sha512-gAJaAuLoHaOhkdDwS2F3ZH3CR//8EClkEWDde2AcYS+W2AY9/4g9kAMUOD5IrkrrYvJ+DDa9u426Ds8n8s/B9g==
"@abp/select2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0.tgz#199777173ca3e43a5448f8b51b30c3aafe4a3333"
integrity sha512-6sEIYIakVI1DM3eOqOaxwdG8vkyVFBWvVZhoChPZkgIIQ0EH2JLerHv0pePJEl6mQSxOUrikPA8++B2y+sBnQA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
select2 "^4.0.13"
"@abp/sweetalert2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0-rc.1.tgz#a344674f14b21f430a820805bc36768a6dde1f58"
integrity sha512-UV3nSA3LdgygFr1ruFZRU1PVan455NMFILisXKRYVu9QwweFInmnliR6FmcDlTmPFW7RCLBk+lC9UblEcDthUA==
"@abp/sweetalert2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0.tgz#515e0477574b54bc6650b9f5ee193bfc648c715a"
integrity sha512-bY5MXEiKja+vk71ujSn8rpzRC45Ge8zvcca1k1vBJs+oKyRCii//JBxa3H0lagZo5r/QwIqv5ihdyLE1xsuLSg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
sweetalert2 "^11.23.0"
"@abp/timeago@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0-rc.1.tgz#f0e476b65f19fd986c06231a331fdb4050d1a6c6"
integrity sha512-ydBvTJ73BrV7A69vtWRzw//JmrLu6r4ow8J3GZy8vEuH9vlBWe1JHcPK6lOD3DDM+K6Jag5/31RL45ZuSSxcvQ==
"@abp/timeago@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0.tgz#3214a6d000c79504c9fa7cb4e004a967fe46459b"
integrity sha512-Rgcex+jvM9Z9/E0I5Q3wlC2bY5550/+6xRX407k5ho4gxCccYo3c0Gkpiy5pJRFhTwtBgcNzYxArh6NCez+tDg==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
timeago "^1.6.7"
"@abp/utils@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0-rc.1.tgz#b6e20d357b87a009ffef3e11a0e7cc3a887d461f"
integrity sha512-tBcywC3T2ZUKS6znm1lCd+jP0peZolYyxjs1F7wyyH/y+Y08NYtGgLG/A8EaIv7iDY2K4WExzvWjTHB4lE1mFA==
"@abp/utils@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0.tgz#d88c0d639d69d6210c3070892aac61d5e945c124"
integrity sha512-iNehxiqWJQl2wwE9EbsQANPv/ITMh0yUcPATUlG/McoLWdpPcqobx75NxXcHDqW8ZarecqSktjJDZPvaUaD+jA==
dependencies:
just-compare "^2.3.0"

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

@ -1,9 +1,9 @@
{
"version": "0.1.0",
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0-rc.1",
"@abp/blogging": "~10.3.0-rc.1"
}
"version": "0.1.0",
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0",
"@abp/blogging": "~10.3.0"
}
}

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

@ -2,229 +2,229 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0-rc.1.tgz#82f61b5d112c8cbc5c74077809d84525edc1200a"
integrity sha512-eo4ubQfc6zT2/uTKM7U7XS6vExSKsg2szfvybFuBWJjmgb1ybfU2dKDXK4OfLdt0/wUBqBlEKDNK6NWZTfiovQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0-rc.1.tgz#465bb75a8b974be7a7945099fd9055ee68e3c9fe"
integrity sha512-89ca3oXYFEkaKbC1+mNsn6U4x0bls5iffcp1ZqaY5LTfHUhO5tJXbNf5kiOiEwT9TCYwPUHyLbUd2+rT72MGFA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0-rc.1"
"@abp/bootstrap" "~10.3.0-rc.1"
"@abp/bootstrap-datepicker" "~10.3.0-rc.1"
"@abp/bootstrap-daterangepicker" "~10.3.0-rc.1"
"@abp/datatables.net-bs5" "~10.3.0-rc.1"
"@abp/font-awesome" "~10.3.0-rc.1"
"@abp/jquery-validation-unobtrusive" "~10.3.0-rc.1"
"@abp/lodash" "~10.3.0-rc.1"
"@abp/luxon" "~10.3.0-rc.1"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0-rc.1"
"@abp/select2" "~10.3.0-rc.1"
"@abp/sweetalert2" "~10.3.0-rc.1"
"@abp/timeago" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0-rc.1.tgz#c5764ec2fcab13ee591863c54e59e33fe1da90b4"
integrity sha512-vmBsradTXcTEqHUXM5rTLYnsNNYJDeyyvz3kaLLqNwYhjo2FxL8D8IUZnp3Mk0qkBpYaYeGag5uxd06VDczDhg==
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0.tgz#bf48e8fa571067d15bc19bdd3f13509acf58f9c7"
integrity sha512-t9pHqrXaCDYcsdrz0VPKT28ujnnU+EVxyVDogQSRRpKsDoLhNcOD8NI3swdAWBQZ46YSCDfeDR+gfwjC3yqpXQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0.tgz#bcf72b5dd1dea285c3fa7cb1b6ce27c29b985ff7"
integrity sha512-X5xmMSxnIzNJPexvKR9y6jyn0v5n2wscN1SECG/bMI1YdKugMlkfkSuyUmLn+RX9/YdcK0jOsdMhfuzs5mgAOA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0"
"@abp/bootstrap" "~10.3.0"
"@abp/bootstrap-datepicker" "~10.3.0"
"@abp/bootstrap-daterangepicker" "~10.3.0"
"@abp/datatables.net-bs5" "~10.3.0"
"@abp/font-awesome" "~10.3.0"
"@abp/jquery-validation-unobtrusive" "~10.3.0"
"@abp/lodash" "~10.3.0"
"@abp/luxon" "~10.3.0"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0"
"@abp/moment" "~10.3.0"
"@abp/select2" "~10.3.0"
"@abp/sweetalert2" "~10.3.0"
"@abp/timeago" "~10.3.0"
"@abp/aspnetcore.mvc.ui@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0.tgz#0d125efd172b6772c516eae82cfe35f144da73fc"
integrity sha512-kp0XdwrlNz+NeLdxSJ6xdUaB5PM7xdbiLsIyTUcwa7AUKBtcVU6yq6qttbk9VyO0KqDgLywSuEL+9PkFhthuPg==
dependencies:
ansi-colors "^4.1.3"
"@abp/blogging@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-10.3.0-rc.1.tgz#12f6587632e431ead8e7dde57d6d6db343d709d6"
integrity sha512-sw/iIIWBHYCOxbkBv1LRtnuyweiAdldTE0oWxzFdQyChUYHR3DVXjKQxzi4YtcaxpNsmU/NAeOQAeyaRlNejRQ==
"@abp/blogging@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-10.3.0.tgz#cf2c43cf10a3c7f6678682216baa98d297bde3a6"
integrity sha512-A3em39jepJp9TCZVcXeQNP+UnCmgggTmbVDbs5agAA2DiaWA+92oTEcAGlooHw48fiGc+1oANC7WaWS5FdNMGA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0-rc.1"
"@abp/owl.carousel" "~10.3.0-rc.1"
"@abp/prismjs" "~10.3.0-rc.1"
"@abp/tui-editor" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0"
"@abp/owl.carousel" "~10.3.0"
"@abp/prismjs" "~10.3.0"
"@abp/tui-editor" "~10.3.0"
"@abp/bootstrap-datepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0-rc.1.tgz#58586e2333116ef840c3abd44bb2b54f944c92b1"
integrity sha512-PEXWi22YfOBdbxCUfLkEAVL45DCxzDbNALFLfsCK3LPvXuL5Pw0YU0CrezAW54+1tzPpbWh1HLyEyaUAINz6Wg==
"@abp/bootstrap-datepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0.tgz#032aaf0e474f971b9f90ca7fb83ff7ca4d7be933"
integrity sha512-7mRuRRIE4R0yw1cZuoIskgrqZPUa5/SJzse0K6u+/QDqvyLjjOsyE51WuqAXxlVfKpLp/fBvXZwnCDeCRU9iZQ==
dependencies:
bootstrap-datepicker "^1.10.1"
"@abp/bootstrap-daterangepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0-rc.1.tgz#088b96754014b3c7a8884689574c2332cd5c292e"
integrity sha512-uZRh/Eh/3nyFe4KfMLRMud5LmUs2JFKSeA4KeRliGe1PD68E6NizP/ZiNzkYFP2K2p0nNUQrqmSe7ZFHVELN4A==
"@abp/bootstrap-daterangepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0.tgz#b2a9171595ee311c32f57460013870cde67c6b7f"
integrity sha512-ejLu3sWhfNDlsXeUXAQudZvPv0xM4McxIK65vuVEZiKIwFSnrLYil8jBi12EJJmAw5yYA/KC0EdyG82E+AWpmA==
dependencies:
"@abp/moment" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0"
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0-rc.1.tgz#fc1ccf88e689af336fec9c76d367bcaf66253961"
integrity sha512-vdhaz3ccmIflmufhNiQE/8I2RZdSSv3V4sbA2NC24csx8xl4J/R2JFhTyTLixpxOR+/p1cWw1F2oMYVzjV0+eg==
"@abp/bootstrap@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0.tgz#23535c90613271b02fdad3eae1556b67844729e6"
integrity sha512-JnVOeJUyR78oo+QURvaNqa9xGZaVux0PRIpFpd4Qsqiiz9FvJrbCuSoBkkZoj/0eH23WoZ3bJxy0K9LDE19qvg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/popper.js" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@abp/popper.js" "~10.3.0"
bootstrap "^5.3.8"
"@abp/clipboard@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.3.0-rc.1.tgz#2350aba655b18510dea0ca50cb91e5e5960e9480"
integrity sha512-jKo5H0+FSA+1aDdIWDmyAwNP2nFf19x4nAHbclkwnsexHBRfQlvx6yB6sY85BP+Ft6zxIn9gRRLbJPvFwsKBWw==
"@abp/clipboard@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.3.0.tgz#7bfbfcae6a135065ee13afd1b7d3abc92176a203"
integrity sha512-Cah+jOzcG1KZh6PXWxo+BedU7gsqTuNlTDsCzBCk2NuV2/Blb5qumAwEP4GBKAEIY/XwcFQP/ubxuXMTNjr0jw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
clipboard "^2.0.11"
"@abp/core@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0-rc.1.tgz#68f85db8219e3a2618a60cf82933bc52a2d1ec49"
integrity sha512-tOl/yDSPqRaHbENFVYcjqkdKGM4Qhjd/QPushVaH57pxalmv6canhiWAa0x7W31qxdY9od48H7MYoJx61jURhw==
"@abp/core@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0.tgz#9960f8179d1fdc42250d0bbba60e379590c8199c"
integrity sha512-DpL4qrsyCUolypUwxKVDDK8bPVhNbYKx6l2ytUjoOu73CwgPoCSGkvHWrmKIsEsmTfOC9J7+GDErh8jWR/5pVA==
dependencies:
"@abp/utils" "~10.3.0-rc.1"
"@abp/utils" "~10.3.0"
"@abp/datatables.net-bs5@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0-rc.1.tgz#55e8dde9024c51ccb70fe5b640bbb434fff2e00d"
integrity sha512-d6vFlrNgS6MIpXi2EcZjGFbFbCl5I5hzM49NxQeB3hyG7gUElFsEJkf66UcO8PN/56Uo+sFe/rCdrcvyLLDHmg==
"@abp/datatables.net-bs5@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0.tgz#d8711c52f7c03df51d14d1a5f0e6b00f6d9551fc"
integrity sha512-I8rEU98kEhsNZjVdpPvOcG6F4xr1CgIRb0bTf5bfd8ufzxEUKB+xF9bguJIB5kYwjme8QbMlcJ0V/c+N4iewtQ==
dependencies:
"@abp/datatables.net" "~10.3.0-rc.1"
"@abp/datatables.net" "~10.3.0"
datatables.net-bs5 "^2.3.4"
"@abp/datatables.net@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0-rc.1.tgz#8e275f31d8b24b098c6acc3ec1de7ef2fe587e73"
integrity sha512-m57imr9KOkasgDCIFaIgoDqFDhS71wzClE2WCk+Uk7qHLRgRMa7CYRHh5xeck4hgPWq9DEmAZS0ogbHxLgkLKQ==
"@abp/datatables.net@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0.tgz#f98319d8e226da5aced4d1d94d3ababb11327074"
integrity sha512-imM25WmO1V0hqeG5iPeLvYMID2HX7SG9drz47qilr74MhpY2i2J7HlsvZDonNkjpxzhK4DHpGeQd6mE2QzG7Hw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
datatables.net "^2.3.4"
"@abp/font-awesome@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0-rc.1.tgz#e9d4a1b36652773509259440b77b804af18c5364"
integrity sha512-8zvZh7lbPlvH0/SKYtUeQF+ezKSoohwFxzFhOJ88GOdtwp620mBCwYEHjZA64e/Xjk6Oda2VrdNJ318IvgjIvA==
"@abp/font-awesome@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0.tgz#43602605f5633132cc6fe21b6ce5ab19b86bdf27"
integrity sha512-RUOVHxDyT81hp01DhUuSshKvLM+NiTt9VP+O4/rSj+SOaSJAm3wX7eziCKrDi6H41FwhoZL75CifLhcZVyVO4A==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@fortawesome/fontawesome-free" "^7.0.1"
"@abp/jquery-validation-unobtrusive@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0-rc.1.tgz#b547557e85838afcc783ef3d502c2da3a31f4a63"
integrity sha512-NU00gPTHDF2HTnsHaZKAp17DTgAHUCz1fwuXRq4f7Ke5Q9HwiJx2IpIFaeR49xe9XRg1d9iRbNKFkMycjX7rEg==
"@abp/jquery-validation-unobtrusive@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0.tgz#5bc14ed642d48f9eae54761ad39bd9f51beeb005"
integrity sha512-j/9fA7tAs1/t3P2U1kKUiDlHAImmseul6KzvV77sNpnms7g4+x6Fgsa+sMzicSRGOLz7lK5RHdBFyvfKxt7/nA==
dependencies:
"@abp/jquery-validation" "~10.3.0-rc.1"
"@abp/jquery-validation" "~10.3.0"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0-rc.1.tgz#c4ab1a0692c1d224c5f60ffc4cb25545a7024c31"
integrity sha512-JaUhEbhKFB1DPFe+xTeIqTvN3YgFm7gdlpqMxN9Q5k0mnecQHlNmXbmC0oDa+CyxZDvMjWOrSMrJw/8yL4moQQ==
"@abp/jquery-validation@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0.tgz#e669a54d28f6c0b863a284322e527a5c65cb7dbf"
integrity sha512-Wo95ZJLS1ScKm7dm3zFlEFUKqXrqo3m9+82DX5mFJUVCHHuBPrhxvDjxNJ18z4gpoOUu08uqxX7LFbphtkRM3g==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
jquery-validation "^1.21.0"
"@abp/jquery@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0-rc.1.tgz#bc8d3a468483165f8d35cbfa5e91621c2fa53c8f"
integrity sha512-tCZsi5U3oWZOazxRuqrEPyE85jZ4D71IfSrT9/Brf1wAELyrttt5ke3P57yQqjBevbfSqW652Wxca/w2GidQcg==
"@abp/jquery@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0.tgz#3b60bcdfe8f9a33be79db1bea2500837fe09c67d"
integrity sha512-TndX/8bJx5vGAAwIykx2CJUZIFFDkwpD+cUjE45WO2dSrY2M5vNfWiuw95OcLGngO8RaT/gTkFGzPuZqKn9ggg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
jquery "~3.7.1"
"@abp/lodash@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0-rc.1.tgz#7bdf8038f28a822dfc12f0bfa9b7d81f13e16d99"
integrity sha512-tlev/kkQ3Q+OC7BT1ZJ+TThIbVQ3CZ+mtEujLt6zHVIxx8tukbYmmDMpltrmOL2kGnQeDdMqFcQoNJAAYOju+A==
"@abp/lodash@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0.tgz#bd091fc811d85d2f535802631af6165ac1c8a198"
integrity sha512-7JDU9UlbD+9odhFQjolvyJZ6EQKG5kiL2Pt9T1RMVchNh47iEuZwfi8c+CIxa3YxA3n6lAsZ+8Pmxq4yOku+RQ==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
lodash "^4.17.21"
"@abp/luxon@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0-rc.1.tgz#e13db7cade7761964e9820315e43bac182f80784"
integrity sha512-FB42gIKvfDJBu2vFZDBFVL6bn9jZpDpKdt5Kkp4OKQak9NHVyNuzH+R95Hr99vB+KELyTwW7hihc6Kl2oCrwWQ==
"@abp/luxon@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0.tgz#acbd92289456a546607ed4506dc36f71e6da53c9"
integrity sha512-IIi2+odQzuFK4qV1KJ2HtlTewSPby2F9CJFNNtNRMzX/P30dQkAGWpNV5/FZzJwFIihR+zSei5wlu11WpPugsw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
luxon "^3.7.2"
"@abp/malihu-custom-scrollbar-plugin@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0-rc.1.tgz#1af6ebce0553c368d884752efcaef6cceaeb806c"
integrity sha512-+BYN/3DhhtI7tS4nv4BpdsPiQLEVrLQ0KgawGRr1h3SV/nz1dtBTBgTbKvy/4bDHoMSKA1dPfudxi6XjgwUoBA==
"@abp/malihu-custom-scrollbar-plugin@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0.tgz#209931d02a994ef448371d6203e9ec74c72b61e6"
integrity sha512-hJjwEExP3hKE1MNDG+pcvoHRFUihh3t/0wCPNaoePFd8+QnJuyQ9U0VA+vdtykTxm8uFNE2uaCgyHffoHmzeZA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0-rc.1.tgz#82229c44e7b1417c872edec53ed3f51d06bf7e8b"
integrity sha512-hKQ8VE25Wqo1mj/ks8qw39ONLQK5sV33xc0bfYHTk0+NVAholAPZF7gjqiDzaAWXzVBVJjemH554AM3y14VNAA==
"@abp/moment@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0.tgz#5a5c4ece14d1bc4dd33134f85d1d085733d3c975"
integrity sha512-8DKw2jgC/28nLrB/CR9BiyUSt0pUmWF+bEgAsduln6VrSCHn0aRLqgs+wi/9Ol+1bl7pO2wbJOYg1qbnkDhrAQ==
dependencies:
moment "^2.30.1"
"@abp/owl.carousel@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-10.3.0-rc.1.tgz#ef497d41765f6d15eb60d240b053406b80dd2b5e"
integrity sha512-6dNWJ7cTha3cdlNFreQGi6tzY4uYd5eSLAhdebEyPd72jKMpMxyfGQbi3x1hn3wP31/Wi1+QiELWIla1m5c9bg==
"@abp/owl.carousel@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-10.3.0.tgz#840718a4b8ad7636bcb42d40169f42b863ac2537"
integrity sha512-r0Yfbf6MiKRa3fGrz7b/UBeRoPOBUPA39KV6JXIR5UDkn+Vu3BInacpB0HyksADzVcYyz06QvHGzlCOmikXzrg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
owl.carousel "^2.3.4"
"@abp/popper.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0-rc.1.tgz#3d758e25e7b09210542e4da06558cd5a1b710b45"
integrity sha512-3PKJpwzTYAQ6UJFe3u9bn1qKRjXwmILlR9umyH998bfJLr0Zl04rBfcbIL9/l3S01qlCMt2bwjre0+wpRl+/OA==
"@abp/popper.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0.tgz#cb2415e45a905854980f4e864c00c8fe1156a6f9"
integrity sha512-Yfafs50t7DKnShxAl9WPpihZxG5cLAt99rJmIyXBYUQIpkHkxDyUIA5b4gCoVCqKgjFDOxG7i6L+Ovd/2N8k7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@popperjs/core" "^2.11.8"
"@abp/prismjs@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.3.0-rc.1.tgz#147852ca4e0f9ceebe5681b65ad440b48325021f"
integrity sha512-sAWkFAP8GPx4UBR2EXg9Uz0sivK9CTWccUGGecttK9mNf12YbtVftmS145Fgip2+ifklPTcVRjXWIghyJPYu5Q==
"@abp/prismjs@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.3.0.tgz#4ea33ece50cefcfc8a89c17b0d265b484b7205ee"
integrity sha512-WvkLyg+izkcX6sEOYy41B9lebiniYxMQZ++c+ysyOQKZzrYEEFOOLlnFS9jPqSKLv9cNRizhG1CCfiwoYCxufQ==
dependencies:
"@abp/clipboard" "~10.3.0-rc.1"
"@abp/core" "~10.3.0-rc.1"
"@abp/clipboard" "~10.3.0"
"@abp/core" "~10.3.0"
prismjs "^1.30.0"
"@abp/select2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0-rc.1.tgz#5292066ccf962ad92058d946b267d413c4876c40"
integrity sha512-gAJaAuLoHaOhkdDwS2F3ZH3CR//8EClkEWDde2AcYS+W2AY9/4g9kAMUOD5IrkrrYvJ+DDa9u426Ds8n8s/B9g==
"@abp/select2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0.tgz#199777173ca3e43a5448f8b51b30c3aafe4a3333"
integrity sha512-6sEIYIakVI1DM3eOqOaxwdG8vkyVFBWvVZhoChPZkgIIQ0EH2JLerHv0pePJEl6mQSxOUrikPA8++B2y+sBnQA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
select2 "^4.0.13"
"@abp/sweetalert2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0-rc.1.tgz#a344674f14b21f430a820805bc36768a6dde1f58"
integrity sha512-UV3nSA3LdgygFr1ruFZRU1PVan455NMFILisXKRYVu9QwweFInmnliR6FmcDlTmPFW7RCLBk+lC9UblEcDthUA==
"@abp/sweetalert2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0.tgz#515e0477574b54bc6650b9f5ee193bfc648c715a"
integrity sha512-bY5MXEiKja+vk71ujSn8rpzRC45Ge8zvcca1k1vBJs+oKyRCii//JBxa3H0lagZo5r/QwIqv5ihdyLE1xsuLSg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
sweetalert2 "^11.23.0"
"@abp/timeago@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0-rc.1.tgz#f0e476b65f19fd986c06231a331fdb4050d1a6c6"
integrity sha512-ydBvTJ73BrV7A69vtWRzw//JmrLu6r4ow8J3GZy8vEuH9vlBWe1JHcPK6lOD3DDM+K6Jag5/31RL45ZuSSxcvQ==
"@abp/timeago@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0.tgz#3214a6d000c79504c9fa7cb4e004a967fe46459b"
integrity sha512-Rgcex+jvM9Z9/E0I5Q3wlC2bY5550/+6xRX407k5ho4gxCccYo3c0Gkpiy5pJRFhTwtBgcNzYxArh6NCez+tDg==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
timeago "^1.6.7"
"@abp/tui-editor@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-10.3.0-rc.1.tgz#2c2353694efa6f61849f4ed8c769fea95e0304ee"
integrity sha512-Vxi9yKFJ5uBgmULppS67a4hBYC5/B+LIOdvG125x0FlCI5vO2+s+QMz09nQ6Fu4EaLmh4F0Qu0Q8FmRubpj7Jw==
"@abp/tui-editor@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-10.3.0.tgz#4fe3879111fe5ee312048841fca1cac43bb9bb62"
integrity sha512-6zGfaYSggalgpS9tKjESXT6w00KK7fKN71rG/hxRLNRpLGn5aapHdlAZRNEUgEFYo9czFdMW8POHpVA+sjcDMw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/prismjs" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
"@abp/prismjs" "~10.3.0"
"@abp/utils@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0-rc.1.tgz#b6e20d357b87a009ffef3e11a0e7cc3a887d461f"
integrity sha512-tBcywC3T2ZUKS6znm1lCd+jP0peZolYyxjs1F7wyyH/y+Y08NYtGgLG/A8EaIv7iDY2K4WExzvWjTHB4lE1mFA==
"@abp/utils@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0.tgz#d88c0d639d69d6210c3070892aac61d5e945c124"
integrity sha512-iNehxiqWJQl2wwE9EbsQANPv/ITMh0yUcPATUlG/McoLWdpPcqobx75NxXcHDqW8ZarecqSktjJDZPvaUaD+jA==
dependencies:
just-compare "^2.3.0"

2
modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml

@ -95,7 +95,7 @@
<i class="fa fa-pencil"></i> @L["Edit"]
</a>
}
@if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Delete) || (CurrentUser.Id.HasValue && CurrentUser.Id == Model.Post.CreatorId))
@if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Delete))
{
<span class="seperator">|</span>
<a href="#" id="DeletePostLink" data-postid="@Model.Post.Id" data-blogShortName="@Model.BlogShortName">

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

@ -1,8 +1,8 @@
{
"version": "0.1.0",
"name": "client-simulation-web",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0-rc.1"
}
"version": "0.1.0",
"name": "client-simulation-web",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0"
}
}

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

@ -2,186 +2,186 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0-rc.1.tgz#82f61b5d112c8cbc5c74077809d84525edc1200a"
integrity sha512-eo4ubQfc6zT2/uTKM7U7XS6vExSKsg2szfvybFuBWJjmgb1ybfU2dKDXK4OfLdt0/wUBqBlEKDNK6NWZTfiovQ==
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0.tgz#bf48e8fa571067d15bc19bdd3f13509acf58f9c7"
integrity sha512-t9pHqrXaCDYcsdrz0VPKT28ujnnU+EVxyVDogQSRRpKsDoLhNcOD8NI3swdAWBQZ46YSCDfeDR+gfwjC3yqpXQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0-rc.1.tgz#465bb75a8b974be7a7945099fd9055ee68e3c9fe"
integrity sha512-89ca3oXYFEkaKbC1+mNsn6U4x0bls5iffcp1ZqaY5LTfHUhO5tJXbNf5kiOiEwT9TCYwPUHyLbUd2+rT72MGFA==
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0.tgz#bcf72b5dd1dea285c3fa7cb1b6ce27c29b985ff7"
integrity sha512-X5xmMSxnIzNJPexvKR9y6jyn0v5n2wscN1SECG/bMI1YdKugMlkfkSuyUmLn+RX9/YdcK0jOsdMhfuzs5mgAOA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0-rc.1"
"@abp/bootstrap" "~10.3.0-rc.1"
"@abp/bootstrap-datepicker" "~10.3.0-rc.1"
"@abp/bootstrap-daterangepicker" "~10.3.0-rc.1"
"@abp/datatables.net-bs5" "~10.3.0-rc.1"
"@abp/font-awesome" "~10.3.0-rc.1"
"@abp/jquery-validation-unobtrusive" "~10.3.0-rc.1"
"@abp/lodash" "~10.3.0-rc.1"
"@abp/luxon" "~10.3.0-rc.1"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0-rc.1"
"@abp/select2" "~10.3.0-rc.1"
"@abp/sweetalert2" "~10.3.0-rc.1"
"@abp/timeago" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0-rc.1.tgz#c5764ec2fcab13ee591863c54e59e33fe1da90b4"
integrity sha512-vmBsradTXcTEqHUXM5rTLYnsNNYJDeyyvz3kaLLqNwYhjo2FxL8D8IUZnp3Mk0qkBpYaYeGag5uxd06VDczDhg==
"@abp/aspnetcore.mvc.ui" "~10.3.0"
"@abp/bootstrap" "~10.3.0"
"@abp/bootstrap-datepicker" "~10.3.0"
"@abp/bootstrap-daterangepicker" "~10.3.0"
"@abp/datatables.net-bs5" "~10.3.0"
"@abp/font-awesome" "~10.3.0"
"@abp/jquery-validation-unobtrusive" "~10.3.0"
"@abp/lodash" "~10.3.0"
"@abp/luxon" "~10.3.0"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0"
"@abp/moment" "~10.3.0"
"@abp/select2" "~10.3.0"
"@abp/sweetalert2" "~10.3.0"
"@abp/timeago" "~10.3.0"
"@abp/aspnetcore.mvc.ui@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0.tgz#0d125efd172b6772c516eae82cfe35f144da73fc"
integrity sha512-kp0XdwrlNz+NeLdxSJ6xdUaB5PM7xdbiLsIyTUcwa7AUKBtcVU6yq6qttbk9VyO0KqDgLywSuEL+9PkFhthuPg==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0-rc.1.tgz#58586e2333116ef840c3abd44bb2b54f944c92b1"
integrity sha512-PEXWi22YfOBdbxCUfLkEAVL45DCxzDbNALFLfsCK3LPvXuL5Pw0YU0CrezAW54+1tzPpbWh1HLyEyaUAINz6Wg==
"@abp/bootstrap-datepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0.tgz#032aaf0e474f971b9f90ca7fb83ff7ca4d7be933"
integrity sha512-7mRuRRIE4R0yw1cZuoIskgrqZPUa5/SJzse0K6u+/QDqvyLjjOsyE51WuqAXxlVfKpLp/fBvXZwnCDeCRU9iZQ==
dependencies:
bootstrap-datepicker "^1.10.1"
"@abp/bootstrap-daterangepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0-rc.1.tgz#088b96754014b3c7a8884689574c2332cd5c292e"
integrity sha512-uZRh/Eh/3nyFe4KfMLRMud5LmUs2JFKSeA4KeRliGe1PD68E6NizP/ZiNzkYFP2K2p0nNUQrqmSe7ZFHVELN4A==
"@abp/bootstrap-daterangepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0.tgz#b2a9171595ee311c32f57460013870cde67c6b7f"
integrity sha512-ejLu3sWhfNDlsXeUXAQudZvPv0xM4McxIK65vuVEZiKIwFSnrLYil8jBi12EJJmAw5yYA/KC0EdyG82E+AWpmA==
dependencies:
"@abp/moment" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0"
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0-rc.1.tgz#fc1ccf88e689af336fec9c76d367bcaf66253961"
integrity sha512-vdhaz3ccmIflmufhNiQE/8I2RZdSSv3V4sbA2NC24csx8xl4J/R2JFhTyTLixpxOR+/p1cWw1F2oMYVzjV0+eg==
"@abp/bootstrap@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0.tgz#23535c90613271b02fdad3eae1556b67844729e6"
integrity sha512-JnVOeJUyR78oo+QURvaNqa9xGZaVux0PRIpFpd4Qsqiiz9FvJrbCuSoBkkZoj/0eH23WoZ3bJxy0K9LDE19qvg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/popper.js" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@abp/popper.js" "~10.3.0"
bootstrap "^5.3.8"
"@abp/core@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0-rc.1.tgz#68f85db8219e3a2618a60cf82933bc52a2d1ec49"
integrity sha512-tOl/yDSPqRaHbENFVYcjqkdKGM4Qhjd/QPushVaH57pxalmv6canhiWAa0x7W31qxdY9od48H7MYoJx61jURhw==
"@abp/core@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0.tgz#9960f8179d1fdc42250d0bbba60e379590c8199c"
integrity sha512-DpL4qrsyCUolypUwxKVDDK8bPVhNbYKx6l2ytUjoOu73CwgPoCSGkvHWrmKIsEsmTfOC9J7+GDErh8jWR/5pVA==
dependencies:
"@abp/utils" "~10.3.0-rc.1"
"@abp/utils" "~10.3.0"
"@abp/datatables.net-bs5@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0-rc.1.tgz#55e8dde9024c51ccb70fe5b640bbb434fff2e00d"
integrity sha512-d6vFlrNgS6MIpXi2EcZjGFbFbCl5I5hzM49NxQeB3hyG7gUElFsEJkf66UcO8PN/56Uo+sFe/rCdrcvyLLDHmg==
"@abp/datatables.net-bs5@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0.tgz#d8711c52f7c03df51d14d1a5f0e6b00f6d9551fc"
integrity sha512-I8rEU98kEhsNZjVdpPvOcG6F4xr1CgIRb0bTf5bfd8ufzxEUKB+xF9bguJIB5kYwjme8QbMlcJ0V/c+N4iewtQ==
dependencies:
"@abp/datatables.net" "~10.3.0-rc.1"
"@abp/datatables.net" "~10.3.0"
datatables.net-bs5 "^2.3.4"
"@abp/datatables.net@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0-rc.1.tgz#8e275f31d8b24b098c6acc3ec1de7ef2fe587e73"
integrity sha512-m57imr9KOkasgDCIFaIgoDqFDhS71wzClE2WCk+Uk7qHLRgRMa7CYRHh5xeck4hgPWq9DEmAZS0ogbHxLgkLKQ==
"@abp/datatables.net@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0.tgz#f98319d8e226da5aced4d1d94d3ababb11327074"
integrity sha512-imM25WmO1V0hqeG5iPeLvYMID2HX7SG9drz47qilr74MhpY2i2J7HlsvZDonNkjpxzhK4DHpGeQd6mE2QzG7Hw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
datatables.net "^2.3.4"
"@abp/font-awesome@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0-rc.1.tgz#e9d4a1b36652773509259440b77b804af18c5364"
integrity sha512-8zvZh7lbPlvH0/SKYtUeQF+ezKSoohwFxzFhOJ88GOdtwp620mBCwYEHjZA64e/Xjk6Oda2VrdNJ318IvgjIvA==
"@abp/font-awesome@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0.tgz#43602605f5633132cc6fe21b6ce5ab19b86bdf27"
integrity sha512-RUOVHxDyT81hp01DhUuSshKvLM+NiTt9VP+O4/rSj+SOaSJAm3wX7eziCKrDi6H41FwhoZL75CifLhcZVyVO4A==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@fortawesome/fontawesome-free" "^7.0.1"
"@abp/jquery-validation-unobtrusive@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0-rc.1.tgz#b547557e85838afcc783ef3d502c2da3a31f4a63"
integrity sha512-NU00gPTHDF2HTnsHaZKAp17DTgAHUCz1fwuXRq4f7Ke5Q9HwiJx2IpIFaeR49xe9XRg1d9iRbNKFkMycjX7rEg==
"@abp/jquery-validation-unobtrusive@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0.tgz#5bc14ed642d48f9eae54761ad39bd9f51beeb005"
integrity sha512-j/9fA7tAs1/t3P2U1kKUiDlHAImmseul6KzvV77sNpnms7g4+x6Fgsa+sMzicSRGOLz7lK5RHdBFyvfKxt7/nA==
dependencies:
"@abp/jquery-validation" "~10.3.0-rc.1"
"@abp/jquery-validation" "~10.3.0"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0-rc.1.tgz#c4ab1a0692c1d224c5f60ffc4cb25545a7024c31"
integrity sha512-JaUhEbhKFB1DPFe+xTeIqTvN3YgFm7gdlpqMxN9Q5k0mnecQHlNmXbmC0oDa+CyxZDvMjWOrSMrJw/8yL4moQQ==
"@abp/jquery-validation@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0.tgz#e669a54d28f6c0b863a284322e527a5c65cb7dbf"
integrity sha512-Wo95ZJLS1ScKm7dm3zFlEFUKqXrqo3m9+82DX5mFJUVCHHuBPrhxvDjxNJ18z4gpoOUu08uqxX7LFbphtkRM3g==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
jquery-validation "^1.21.0"
"@abp/jquery@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0-rc.1.tgz#bc8d3a468483165f8d35cbfa5e91621c2fa53c8f"
integrity sha512-tCZsi5U3oWZOazxRuqrEPyE85jZ4D71IfSrT9/Brf1wAELyrttt5ke3P57yQqjBevbfSqW652Wxca/w2GidQcg==
"@abp/jquery@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0.tgz#3b60bcdfe8f9a33be79db1bea2500837fe09c67d"
integrity sha512-TndX/8bJx5vGAAwIykx2CJUZIFFDkwpD+cUjE45WO2dSrY2M5vNfWiuw95OcLGngO8RaT/gTkFGzPuZqKn9ggg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
jquery "~3.7.1"
"@abp/lodash@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0-rc.1.tgz#7bdf8038f28a822dfc12f0bfa9b7d81f13e16d99"
integrity sha512-tlev/kkQ3Q+OC7BT1ZJ+TThIbVQ3CZ+mtEujLt6zHVIxx8tukbYmmDMpltrmOL2kGnQeDdMqFcQoNJAAYOju+A==
"@abp/lodash@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0.tgz#bd091fc811d85d2f535802631af6165ac1c8a198"
integrity sha512-7JDU9UlbD+9odhFQjolvyJZ6EQKG5kiL2Pt9T1RMVchNh47iEuZwfi8c+CIxa3YxA3n6lAsZ+8Pmxq4yOku+RQ==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
lodash "^4.17.21"
"@abp/luxon@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0-rc.1.tgz#e13db7cade7761964e9820315e43bac182f80784"
integrity sha512-FB42gIKvfDJBu2vFZDBFVL6bn9jZpDpKdt5Kkp4OKQak9NHVyNuzH+R95Hr99vB+KELyTwW7hihc6Kl2oCrwWQ==
"@abp/luxon@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0.tgz#acbd92289456a546607ed4506dc36f71e6da53c9"
integrity sha512-IIi2+odQzuFK4qV1KJ2HtlTewSPby2F9CJFNNtNRMzX/P30dQkAGWpNV5/FZzJwFIihR+zSei5wlu11WpPugsw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
luxon "^3.7.2"
"@abp/malihu-custom-scrollbar-plugin@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0-rc.1.tgz#1af6ebce0553c368d884752efcaef6cceaeb806c"
integrity sha512-+BYN/3DhhtI7tS4nv4BpdsPiQLEVrLQ0KgawGRr1h3SV/nz1dtBTBgTbKvy/4bDHoMSKA1dPfudxi6XjgwUoBA==
"@abp/malihu-custom-scrollbar-plugin@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0.tgz#209931d02a994ef448371d6203e9ec74c72b61e6"
integrity sha512-hJjwEExP3hKE1MNDG+pcvoHRFUihh3t/0wCPNaoePFd8+QnJuyQ9U0VA+vdtykTxm8uFNE2uaCgyHffoHmzeZA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0-rc.1.tgz#82229c44e7b1417c872edec53ed3f51d06bf7e8b"
integrity sha512-hKQ8VE25Wqo1mj/ks8qw39ONLQK5sV33xc0bfYHTk0+NVAholAPZF7gjqiDzaAWXzVBVJjemH554AM3y14VNAA==
"@abp/moment@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0.tgz#5a5c4ece14d1bc4dd33134f85d1d085733d3c975"
integrity sha512-8DKw2jgC/28nLrB/CR9BiyUSt0pUmWF+bEgAsduln6VrSCHn0aRLqgs+wi/9Ol+1bl7pO2wbJOYg1qbnkDhrAQ==
dependencies:
moment "^2.30.1"
"@abp/popper.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0-rc.1.tgz#3d758e25e7b09210542e4da06558cd5a1b710b45"
integrity sha512-3PKJpwzTYAQ6UJFe3u9bn1qKRjXwmILlR9umyH998bfJLr0Zl04rBfcbIL9/l3S01qlCMt2bwjre0+wpRl+/OA==
"@abp/popper.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0.tgz#cb2415e45a905854980f4e864c00c8fe1156a6f9"
integrity sha512-Yfafs50t7DKnShxAl9WPpihZxG5cLAt99rJmIyXBYUQIpkHkxDyUIA5b4gCoVCqKgjFDOxG7i6L+Ovd/2N8k7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@popperjs/core" "^2.11.8"
"@abp/select2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0-rc.1.tgz#5292066ccf962ad92058d946b267d413c4876c40"
integrity sha512-gAJaAuLoHaOhkdDwS2F3ZH3CR//8EClkEWDde2AcYS+W2AY9/4g9kAMUOD5IrkrrYvJ+DDa9u426Ds8n8s/B9g==
"@abp/select2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0.tgz#199777173ca3e43a5448f8b51b30c3aafe4a3333"
integrity sha512-6sEIYIakVI1DM3eOqOaxwdG8vkyVFBWvVZhoChPZkgIIQ0EH2JLerHv0pePJEl6mQSxOUrikPA8++B2y+sBnQA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
select2 "^4.0.13"
"@abp/sweetalert2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0-rc.1.tgz#a344674f14b21f430a820805bc36768a6dde1f58"
integrity sha512-UV3nSA3LdgygFr1ruFZRU1PVan455NMFILisXKRYVu9QwweFInmnliR6FmcDlTmPFW7RCLBk+lC9UblEcDthUA==
"@abp/sweetalert2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0.tgz#515e0477574b54bc6650b9f5ee193bfc648c715a"
integrity sha512-bY5MXEiKja+vk71ujSn8rpzRC45Ge8zvcca1k1vBJs+oKyRCii//JBxa3H0lagZo5r/QwIqv5ihdyLE1xsuLSg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
sweetalert2 "^11.23.0"
"@abp/timeago@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0-rc.1.tgz#f0e476b65f19fd986c06231a331fdb4050d1a6c6"
integrity sha512-ydBvTJ73BrV7A69vtWRzw//JmrLu6r4ow8J3GZy8vEuH9vlBWe1JHcPK6lOD3DDM+K6Jag5/31RL45ZuSSxcvQ==
"@abp/timeago@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0.tgz#3214a6d000c79504c9fa7cb4e004a967fe46459b"
integrity sha512-Rgcex+jvM9Z9/E0I5Q3wlC2bY5550/+6xRX407k5ho4gxCccYo3c0Gkpiy5pJRFhTwtBgcNzYxArh6NCez+tDg==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
timeago "^1.6.7"
"@abp/utils@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0-rc.1.tgz#b6e20d357b87a009ffef3e11a0e7cc3a887d461f"
integrity sha512-tBcywC3T2ZUKS6znm1lCd+jP0peZolYyxjs1F7wyyH/y+Y08NYtGgLG/A8EaIv7iDY2K4WExzvWjTHB4lE1mFA==
"@abp/utils@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0.tgz#d88c0d639d69d6210c3070892aac61d5e945c124"
integrity sha512-iNehxiqWJQl2wwE9EbsQANPv/ITMh0yUcPATUlG/McoLWdpPcqobx75NxXcHDqW8ZarecqSktjJDZPvaUaD+jA==
dependencies:
just-compare "^2.3.0"

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

@ -15,11 +15,11 @@
},
"private": true,
"dependencies": {
"@abp/ng.account": "~10.3.0-rc.1",
"@abp/ng.identity": "~10.3.0-rc.1",
"@abp/ng.setting-management": "~10.3.0-rc.1",
"@abp/ng.tenant-management": "~10.3.0-rc.1",
"@abp/ng.theme.basic": "~10.3.0-rc.1",
"@abp/ng.account": "~10.3.0",
"@abp/ng.identity": "~10.3.0",
"@abp/ng.setting-management": "~10.3.0",
"@abp/ng.tenant-management": "~10.3.0",
"@abp/ng.theme.basic": "~10.3.0",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",

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

@ -1,13 +1,13 @@
{
"name": "@my-company-name/cms-kit",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
"@abp/ng.core": ">=10.3.0-rc.1",
"@abp/ng.theme.shared": ">=10.3.0-rc.1"
},
"dependencies": {
"tslib": "^2.0.0"
}
"name": "@my-company-name/cms-kit",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
"@abp/ng.core": ">=10.3.0",
"@abp/ng.theme.shared": ">=10.3.0"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

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

@ -1,8 +1,8 @@
{
"version": "1.0.0",
"name": "my-app-identityserver",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0-rc.1"
}
"version": "1.0.0",
"name": "my-app-identityserver",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0"
}
}

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

@ -2,186 +2,186 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0-rc.1.tgz#82f61b5d112c8cbc5c74077809d84525edc1200a"
integrity sha512-eo4ubQfc6zT2/uTKM7U7XS6vExSKsg2szfvybFuBWJjmgb1ybfU2dKDXK4OfLdt0/wUBqBlEKDNK6NWZTfiovQ==
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0.tgz#bf48e8fa571067d15bc19bdd3f13509acf58f9c7"
integrity sha512-t9pHqrXaCDYcsdrz0VPKT28ujnnU+EVxyVDogQSRRpKsDoLhNcOD8NI3swdAWBQZ46YSCDfeDR+gfwjC3yqpXQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0-rc.1.tgz#465bb75a8b974be7a7945099fd9055ee68e3c9fe"
integrity sha512-89ca3oXYFEkaKbC1+mNsn6U4x0bls5iffcp1ZqaY5LTfHUhO5tJXbNf5kiOiEwT9TCYwPUHyLbUd2+rT72MGFA==
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0.tgz#bcf72b5dd1dea285c3fa7cb1b6ce27c29b985ff7"
integrity sha512-X5xmMSxnIzNJPexvKR9y6jyn0v5n2wscN1SECG/bMI1YdKugMlkfkSuyUmLn+RX9/YdcK0jOsdMhfuzs5mgAOA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0-rc.1"
"@abp/bootstrap" "~10.3.0-rc.1"
"@abp/bootstrap-datepicker" "~10.3.0-rc.1"
"@abp/bootstrap-daterangepicker" "~10.3.0-rc.1"
"@abp/datatables.net-bs5" "~10.3.0-rc.1"
"@abp/font-awesome" "~10.3.0-rc.1"
"@abp/jquery-validation-unobtrusive" "~10.3.0-rc.1"
"@abp/lodash" "~10.3.0-rc.1"
"@abp/luxon" "~10.3.0-rc.1"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0-rc.1"
"@abp/select2" "~10.3.0-rc.1"
"@abp/sweetalert2" "~10.3.0-rc.1"
"@abp/timeago" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0-rc.1.tgz#c5764ec2fcab13ee591863c54e59e33fe1da90b4"
integrity sha512-vmBsradTXcTEqHUXM5rTLYnsNNYJDeyyvz3kaLLqNwYhjo2FxL8D8IUZnp3Mk0qkBpYaYeGag5uxd06VDczDhg==
"@abp/aspnetcore.mvc.ui" "~10.3.0"
"@abp/bootstrap" "~10.3.0"
"@abp/bootstrap-datepicker" "~10.3.0"
"@abp/bootstrap-daterangepicker" "~10.3.0"
"@abp/datatables.net-bs5" "~10.3.0"
"@abp/font-awesome" "~10.3.0"
"@abp/jquery-validation-unobtrusive" "~10.3.0"
"@abp/lodash" "~10.3.0"
"@abp/luxon" "~10.3.0"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0"
"@abp/moment" "~10.3.0"
"@abp/select2" "~10.3.0"
"@abp/sweetalert2" "~10.3.0"
"@abp/timeago" "~10.3.0"
"@abp/aspnetcore.mvc.ui@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0.tgz#0d125efd172b6772c516eae82cfe35f144da73fc"
integrity sha512-kp0XdwrlNz+NeLdxSJ6xdUaB5PM7xdbiLsIyTUcwa7AUKBtcVU6yq6qttbk9VyO0KqDgLywSuEL+9PkFhthuPg==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0-rc.1.tgz#58586e2333116ef840c3abd44bb2b54f944c92b1"
integrity sha512-PEXWi22YfOBdbxCUfLkEAVL45DCxzDbNALFLfsCK3LPvXuL5Pw0YU0CrezAW54+1tzPpbWh1HLyEyaUAINz6Wg==
"@abp/bootstrap-datepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0.tgz#032aaf0e474f971b9f90ca7fb83ff7ca4d7be933"
integrity sha512-7mRuRRIE4R0yw1cZuoIskgrqZPUa5/SJzse0K6u+/QDqvyLjjOsyE51WuqAXxlVfKpLp/fBvXZwnCDeCRU9iZQ==
dependencies:
bootstrap-datepicker "^1.10.1"
"@abp/bootstrap-daterangepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0-rc.1.tgz#088b96754014b3c7a8884689574c2332cd5c292e"
integrity sha512-uZRh/Eh/3nyFe4KfMLRMud5LmUs2JFKSeA4KeRliGe1PD68E6NizP/ZiNzkYFP2K2p0nNUQrqmSe7ZFHVELN4A==
"@abp/bootstrap-daterangepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0.tgz#b2a9171595ee311c32f57460013870cde67c6b7f"
integrity sha512-ejLu3sWhfNDlsXeUXAQudZvPv0xM4McxIK65vuVEZiKIwFSnrLYil8jBi12EJJmAw5yYA/KC0EdyG82E+AWpmA==
dependencies:
"@abp/moment" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0"
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0-rc.1.tgz#fc1ccf88e689af336fec9c76d367bcaf66253961"
integrity sha512-vdhaz3ccmIflmufhNiQE/8I2RZdSSv3V4sbA2NC24csx8xl4J/R2JFhTyTLixpxOR+/p1cWw1F2oMYVzjV0+eg==
"@abp/bootstrap@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0.tgz#23535c90613271b02fdad3eae1556b67844729e6"
integrity sha512-JnVOeJUyR78oo+QURvaNqa9xGZaVux0PRIpFpd4Qsqiiz9FvJrbCuSoBkkZoj/0eH23WoZ3bJxy0K9LDE19qvg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/popper.js" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@abp/popper.js" "~10.3.0"
bootstrap "^5.3.8"
"@abp/core@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0-rc.1.tgz#68f85db8219e3a2618a60cf82933bc52a2d1ec49"
integrity sha512-tOl/yDSPqRaHbENFVYcjqkdKGM4Qhjd/QPushVaH57pxalmv6canhiWAa0x7W31qxdY9od48H7MYoJx61jURhw==
"@abp/core@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0.tgz#9960f8179d1fdc42250d0bbba60e379590c8199c"
integrity sha512-DpL4qrsyCUolypUwxKVDDK8bPVhNbYKx6l2ytUjoOu73CwgPoCSGkvHWrmKIsEsmTfOC9J7+GDErh8jWR/5pVA==
dependencies:
"@abp/utils" "~10.3.0-rc.1"
"@abp/utils" "~10.3.0"
"@abp/datatables.net-bs5@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0-rc.1.tgz#55e8dde9024c51ccb70fe5b640bbb434fff2e00d"
integrity sha512-d6vFlrNgS6MIpXi2EcZjGFbFbCl5I5hzM49NxQeB3hyG7gUElFsEJkf66UcO8PN/56Uo+sFe/rCdrcvyLLDHmg==
"@abp/datatables.net-bs5@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0.tgz#d8711c52f7c03df51d14d1a5f0e6b00f6d9551fc"
integrity sha512-I8rEU98kEhsNZjVdpPvOcG6F4xr1CgIRb0bTf5bfd8ufzxEUKB+xF9bguJIB5kYwjme8QbMlcJ0V/c+N4iewtQ==
dependencies:
"@abp/datatables.net" "~10.3.0-rc.1"
"@abp/datatables.net" "~10.3.0"
datatables.net-bs5 "^2.3.4"
"@abp/datatables.net@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0-rc.1.tgz#8e275f31d8b24b098c6acc3ec1de7ef2fe587e73"
integrity sha512-m57imr9KOkasgDCIFaIgoDqFDhS71wzClE2WCk+Uk7qHLRgRMa7CYRHh5xeck4hgPWq9DEmAZS0ogbHxLgkLKQ==
"@abp/datatables.net@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0.tgz#f98319d8e226da5aced4d1d94d3ababb11327074"
integrity sha512-imM25WmO1V0hqeG5iPeLvYMID2HX7SG9drz47qilr74MhpY2i2J7HlsvZDonNkjpxzhK4DHpGeQd6mE2QzG7Hw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
datatables.net "^2.3.4"
"@abp/font-awesome@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0-rc.1.tgz#e9d4a1b36652773509259440b77b804af18c5364"
integrity sha512-8zvZh7lbPlvH0/SKYtUeQF+ezKSoohwFxzFhOJ88GOdtwp620mBCwYEHjZA64e/Xjk6Oda2VrdNJ318IvgjIvA==
"@abp/font-awesome@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0.tgz#43602605f5633132cc6fe21b6ce5ab19b86bdf27"
integrity sha512-RUOVHxDyT81hp01DhUuSshKvLM+NiTt9VP+O4/rSj+SOaSJAm3wX7eziCKrDi6H41FwhoZL75CifLhcZVyVO4A==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@fortawesome/fontawesome-free" "^7.0.1"
"@abp/jquery-validation-unobtrusive@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0-rc.1.tgz#b547557e85838afcc783ef3d502c2da3a31f4a63"
integrity sha512-NU00gPTHDF2HTnsHaZKAp17DTgAHUCz1fwuXRq4f7Ke5Q9HwiJx2IpIFaeR49xe9XRg1d9iRbNKFkMycjX7rEg==
"@abp/jquery-validation-unobtrusive@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0.tgz#5bc14ed642d48f9eae54761ad39bd9f51beeb005"
integrity sha512-j/9fA7tAs1/t3P2U1kKUiDlHAImmseul6KzvV77sNpnms7g4+x6Fgsa+sMzicSRGOLz7lK5RHdBFyvfKxt7/nA==
dependencies:
"@abp/jquery-validation" "~10.3.0-rc.1"
"@abp/jquery-validation" "~10.3.0"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0-rc.1.tgz#c4ab1a0692c1d224c5f60ffc4cb25545a7024c31"
integrity sha512-JaUhEbhKFB1DPFe+xTeIqTvN3YgFm7gdlpqMxN9Q5k0mnecQHlNmXbmC0oDa+CyxZDvMjWOrSMrJw/8yL4moQQ==
"@abp/jquery-validation@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0.tgz#e669a54d28f6c0b863a284322e527a5c65cb7dbf"
integrity sha512-Wo95ZJLS1ScKm7dm3zFlEFUKqXrqo3m9+82DX5mFJUVCHHuBPrhxvDjxNJ18z4gpoOUu08uqxX7LFbphtkRM3g==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
jquery-validation "^1.21.0"
"@abp/jquery@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0-rc.1.tgz#bc8d3a468483165f8d35cbfa5e91621c2fa53c8f"
integrity sha512-tCZsi5U3oWZOazxRuqrEPyE85jZ4D71IfSrT9/Brf1wAELyrttt5ke3P57yQqjBevbfSqW652Wxca/w2GidQcg==
"@abp/jquery@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0.tgz#3b60bcdfe8f9a33be79db1bea2500837fe09c67d"
integrity sha512-TndX/8bJx5vGAAwIykx2CJUZIFFDkwpD+cUjE45WO2dSrY2M5vNfWiuw95OcLGngO8RaT/gTkFGzPuZqKn9ggg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
jquery "~3.7.1"
"@abp/lodash@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0-rc.1.tgz#7bdf8038f28a822dfc12f0bfa9b7d81f13e16d99"
integrity sha512-tlev/kkQ3Q+OC7BT1ZJ+TThIbVQ3CZ+mtEujLt6zHVIxx8tukbYmmDMpltrmOL2kGnQeDdMqFcQoNJAAYOju+A==
"@abp/lodash@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0.tgz#bd091fc811d85d2f535802631af6165ac1c8a198"
integrity sha512-7JDU9UlbD+9odhFQjolvyJZ6EQKG5kiL2Pt9T1RMVchNh47iEuZwfi8c+CIxa3YxA3n6lAsZ+8Pmxq4yOku+RQ==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
lodash "^4.17.21"
"@abp/luxon@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0-rc.1.tgz#e13db7cade7761964e9820315e43bac182f80784"
integrity sha512-FB42gIKvfDJBu2vFZDBFVL6bn9jZpDpKdt5Kkp4OKQak9NHVyNuzH+R95Hr99vB+KELyTwW7hihc6Kl2oCrwWQ==
"@abp/luxon@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0.tgz#acbd92289456a546607ed4506dc36f71e6da53c9"
integrity sha512-IIi2+odQzuFK4qV1KJ2HtlTewSPby2F9CJFNNtNRMzX/P30dQkAGWpNV5/FZzJwFIihR+zSei5wlu11WpPugsw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
luxon "^3.7.2"
"@abp/malihu-custom-scrollbar-plugin@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0-rc.1.tgz#1af6ebce0553c368d884752efcaef6cceaeb806c"
integrity sha512-+BYN/3DhhtI7tS4nv4BpdsPiQLEVrLQ0KgawGRr1h3SV/nz1dtBTBgTbKvy/4bDHoMSKA1dPfudxi6XjgwUoBA==
"@abp/malihu-custom-scrollbar-plugin@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0.tgz#209931d02a994ef448371d6203e9ec74c72b61e6"
integrity sha512-hJjwEExP3hKE1MNDG+pcvoHRFUihh3t/0wCPNaoePFd8+QnJuyQ9U0VA+vdtykTxm8uFNE2uaCgyHffoHmzeZA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0-rc.1.tgz#82229c44e7b1417c872edec53ed3f51d06bf7e8b"
integrity sha512-hKQ8VE25Wqo1mj/ks8qw39ONLQK5sV33xc0bfYHTk0+NVAholAPZF7gjqiDzaAWXzVBVJjemH554AM3y14VNAA==
"@abp/moment@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0.tgz#5a5c4ece14d1bc4dd33134f85d1d085733d3c975"
integrity sha512-8DKw2jgC/28nLrB/CR9BiyUSt0pUmWF+bEgAsduln6VrSCHn0aRLqgs+wi/9Ol+1bl7pO2wbJOYg1qbnkDhrAQ==
dependencies:
moment "^2.30.1"
"@abp/popper.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0-rc.1.tgz#3d758e25e7b09210542e4da06558cd5a1b710b45"
integrity sha512-3PKJpwzTYAQ6UJFe3u9bn1qKRjXwmILlR9umyH998bfJLr0Zl04rBfcbIL9/l3S01qlCMt2bwjre0+wpRl+/OA==
"@abp/popper.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0.tgz#cb2415e45a905854980f4e864c00c8fe1156a6f9"
integrity sha512-Yfafs50t7DKnShxAl9WPpihZxG5cLAt99rJmIyXBYUQIpkHkxDyUIA5b4gCoVCqKgjFDOxG7i6L+Ovd/2N8k7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@popperjs/core" "^2.11.8"
"@abp/select2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0-rc.1.tgz#5292066ccf962ad92058d946b267d413c4876c40"
integrity sha512-gAJaAuLoHaOhkdDwS2F3ZH3CR//8EClkEWDde2AcYS+W2AY9/4g9kAMUOD5IrkrrYvJ+DDa9u426Ds8n8s/B9g==
"@abp/select2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0.tgz#199777173ca3e43a5448f8b51b30c3aafe4a3333"
integrity sha512-6sEIYIakVI1DM3eOqOaxwdG8vkyVFBWvVZhoChPZkgIIQ0EH2JLerHv0pePJEl6mQSxOUrikPA8++B2y+sBnQA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
select2 "^4.0.13"
"@abp/sweetalert2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0-rc.1.tgz#a344674f14b21f430a820805bc36768a6dde1f58"
integrity sha512-UV3nSA3LdgygFr1ruFZRU1PVan455NMFILisXKRYVu9QwweFInmnliR6FmcDlTmPFW7RCLBk+lC9UblEcDthUA==
"@abp/sweetalert2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0.tgz#515e0477574b54bc6650b9f5ee193bfc648c715a"
integrity sha512-bY5MXEiKja+vk71ujSn8rpzRC45Ge8zvcca1k1vBJs+oKyRCii//JBxa3H0lagZo5r/QwIqv5ihdyLE1xsuLSg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
sweetalert2 "^11.23.0"
"@abp/timeago@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0-rc.1.tgz#f0e476b65f19fd986c06231a331fdb4050d1a6c6"
integrity sha512-ydBvTJ73BrV7A69vtWRzw//JmrLu6r4ow8J3GZy8vEuH9vlBWe1JHcPK6lOD3DDM+K6Jag5/31RL45ZuSSxcvQ==
"@abp/timeago@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0.tgz#3214a6d000c79504c9fa7cb4e004a967fe46459b"
integrity sha512-Rgcex+jvM9Z9/E0I5Q3wlC2bY5550/+6xRX407k5ho4gxCccYo3c0Gkpiy5pJRFhTwtBgcNzYxArh6NCez+tDg==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
timeago "^1.6.7"
"@abp/utils@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0-rc.1.tgz#b6e20d357b87a009ffef3e11a0e7cc3a887d461f"
integrity sha512-tBcywC3T2ZUKS6znm1lCd+jP0peZolYyxjs1F7wyyH/y+Y08NYtGgLG/A8EaIv7iDY2K4WExzvWjTHB4lE1mFA==
"@abp/utils@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0.tgz#d88c0d639d69d6210c3070892aac61d5e945c124"
integrity sha512-iNehxiqWJQl2wwE9EbsQANPv/ITMh0yUcPATUlG/McoLWdpPcqobx75NxXcHDqW8ZarecqSktjJDZPvaUaD+jA==
dependencies:
just-compare "^2.3.0"

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

@ -1,8 +1,8 @@
{
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0-rc.1"
}
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0"
}
}

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

@ -2,186 +2,186 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0-rc.1.tgz#82f61b5d112c8cbc5c74077809d84525edc1200a"
integrity sha512-eo4ubQfc6zT2/uTKM7U7XS6vExSKsg2szfvybFuBWJjmgb1ybfU2dKDXK4OfLdt0/wUBqBlEKDNK6NWZTfiovQ==
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0.tgz#bf48e8fa571067d15bc19bdd3f13509acf58f9c7"
integrity sha512-t9pHqrXaCDYcsdrz0VPKT28ujnnU+EVxyVDogQSRRpKsDoLhNcOD8NI3swdAWBQZ46YSCDfeDR+gfwjC3yqpXQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0-rc.1.tgz#465bb75a8b974be7a7945099fd9055ee68e3c9fe"
integrity sha512-89ca3oXYFEkaKbC1+mNsn6U4x0bls5iffcp1ZqaY5LTfHUhO5tJXbNf5kiOiEwT9TCYwPUHyLbUd2+rT72MGFA==
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0.tgz#bcf72b5dd1dea285c3fa7cb1b6ce27c29b985ff7"
integrity sha512-X5xmMSxnIzNJPexvKR9y6jyn0v5n2wscN1SECG/bMI1YdKugMlkfkSuyUmLn+RX9/YdcK0jOsdMhfuzs5mgAOA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0-rc.1"
"@abp/bootstrap" "~10.3.0-rc.1"
"@abp/bootstrap-datepicker" "~10.3.0-rc.1"
"@abp/bootstrap-daterangepicker" "~10.3.0-rc.1"
"@abp/datatables.net-bs5" "~10.3.0-rc.1"
"@abp/font-awesome" "~10.3.0-rc.1"
"@abp/jquery-validation-unobtrusive" "~10.3.0-rc.1"
"@abp/lodash" "~10.3.0-rc.1"
"@abp/luxon" "~10.3.0-rc.1"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0-rc.1"
"@abp/select2" "~10.3.0-rc.1"
"@abp/sweetalert2" "~10.3.0-rc.1"
"@abp/timeago" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0-rc.1.tgz#c5764ec2fcab13ee591863c54e59e33fe1da90b4"
integrity sha512-vmBsradTXcTEqHUXM5rTLYnsNNYJDeyyvz3kaLLqNwYhjo2FxL8D8IUZnp3Mk0qkBpYaYeGag5uxd06VDczDhg==
"@abp/aspnetcore.mvc.ui" "~10.3.0"
"@abp/bootstrap" "~10.3.0"
"@abp/bootstrap-datepicker" "~10.3.0"
"@abp/bootstrap-daterangepicker" "~10.3.0"
"@abp/datatables.net-bs5" "~10.3.0"
"@abp/font-awesome" "~10.3.0"
"@abp/jquery-validation-unobtrusive" "~10.3.0"
"@abp/lodash" "~10.3.0"
"@abp/luxon" "~10.3.0"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0"
"@abp/moment" "~10.3.0"
"@abp/select2" "~10.3.0"
"@abp/sweetalert2" "~10.3.0"
"@abp/timeago" "~10.3.0"
"@abp/aspnetcore.mvc.ui@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0.tgz#0d125efd172b6772c516eae82cfe35f144da73fc"
integrity sha512-kp0XdwrlNz+NeLdxSJ6xdUaB5PM7xdbiLsIyTUcwa7AUKBtcVU6yq6qttbk9VyO0KqDgLywSuEL+9PkFhthuPg==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0-rc.1.tgz#58586e2333116ef840c3abd44bb2b54f944c92b1"
integrity sha512-PEXWi22YfOBdbxCUfLkEAVL45DCxzDbNALFLfsCK3LPvXuL5Pw0YU0CrezAW54+1tzPpbWh1HLyEyaUAINz6Wg==
"@abp/bootstrap-datepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0.tgz#032aaf0e474f971b9f90ca7fb83ff7ca4d7be933"
integrity sha512-7mRuRRIE4R0yw1cZuoIskgrqZPUa5/SJzse0K6u+/QDqvyLjjOsyE51WuqAXxlVfKpLp/fBvXZwnCDeCRU9iZQ==
dependencies:
bootstrap-datepicker "^1.10.1"
"@abp/bootstrap-daterangepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0-rc.1.tgz#088b96754014b3c7a8884689574c2332cd5c292e"
integrity sha512-uZRh/Eh/3nyFe4KfMLRMud5LmUs2JFKSeA4KeRliGe1PD68E6NizP/ZiNzkYFP2K2p0nNUQrqmSe7ZFHVELN4A==
"@abp/bootstrap-daterangepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0.tgz#b2a9171595ee311c32f57460013870cde67c6b7f"
integrity sha512-ejLu3sWhfNDlsXeUXAQudZvPv0xM4McxIK65vuVEZiKIwFSnrLYil8jBi12EJJmAw5yYA/KC0EdyG82E+AWpmA==
dependencies:
"@abp/moment" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0"
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0-rc.1.tgz#fc1ccf88e689af336fec9c76d367bcaf66253961"
integrity sha512-vdhaz3ccmIflmufhNiQE/8I2RZdSSv3V4sbA2NC24csx8xl4J/R2JFhTyTLixpxOR+/p1cWw1F2oMYVzjV0+eg==
"@abp/bootstrap@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0.tgz#23535c90613271b02fdad3eae1556b67844729e6"
integrity sha512-JnVOeJUyR78oo+QURvaNqa9xGZaVux0PRIpFpd4Qsqiiz9FvJrbCuSoBkkZoj/0eH23WoZ3bJxy0K9LDE19qvg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/popper.js" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@abp/popper.js" "~10.3.0"
bootstrap "^5.3.8"
"@abp/core@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0-rc.1.tgz#68f85db8219e3a2618a60cf82933bc52a2d1ec49"
integrity sha512-tOl/yDSPqRaHbENFVYcjqkdKGM4Qhjd/QPushVaH57pxalmv6canhiWAa0x7W31qxdY9od48H7MYoJx61jURhw==
"@abp/core@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0.tgz#9960f8179d1fdc42250d0bbba60e379590c8199c"
integrity sha512-DpL4qrsyCUolypUwxKVDDK8bPVhNbYKx6l2ytUjoOu73CwgPoCSGkvHWrmKIsEsmTfOC9J7+GDErh8jWR/5pVA==
dependencies:
"@abp/utils" "~10.3.0-rc.1"
"@abp/utils" "~10.3.0"
"@abp/datatables.net-bs5@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0-rc.1.tgz#55e8dde9024c51ccb70fe5b640bbb434fff2e00d"
integrity sha512-d6vFlrNgS6MIpXi2EcZjGFbFbCl5I5hzM49NxQeB3hyG7gUElFsEJkf66UcO8PN/56Uo+sFe/rCdrcvyLLDHmg==
"@abp/datatables.net-bs5@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0.tgz#d8711c52f7c03df51d14d1a5f0e6b00f6d9551fc"
integrity sha512-I8rEU98kEhsNZjVdpPvOcG6F4xr1CgIRb0bTf5bfd8ufzxEUKB+xF9bguJIB5kYwjme8QbMlcJ0V/c+N4iewtQ==
dependencies:
"@abp/datatables.net" "~10.3.0-rc.1"
"@abp/datatables.net" "~10.3.0"
datatables.net-bs5 "^2.3.4"
"@abp/datatables.net@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0-rc.1.tgz#8e275f31d8b24b098c6acc3ec1de7ef2fe587e73"
integrity sha512-m57imr9KOkasgDCIFaIgoDqFDhS71wzClE2WCk+Uk7qHLRgRMa7CYRHh5xeck4hgPWq9DEmAZS0ogbHxLgkLKQ==
"@abp/datatables.net@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0.tgz#f98319d8e226da5aced4d1d94d3ababb11327074"
integrity sha512-imM25WmO1V0hqeG5iPeLvYMID2HX7SG9drz47qilr74MhpY2i2J7HlsvZDonNkjpxzhK4DHpGeQd6mE2QzG7Hw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
datatables.net "^2.3.4"
"@abp/font-awesome@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0-rc.1.tgz#e9d4a1b36652773509259440b77b804af18c5364"
integrity sha512-8zvZh7lbPlvH0/SKYtUeQF+ezKSoohwFxzFhOJ88GOdtwp620mBCwYEHjZA64e/Xjk6Oda2VrdNJ318IvgjIvA==
"@abp/font-awesome@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0.tgz#43602605f5633132cc6fe21b6ce5ab19b86bdf27"
integrity sha512-RUOVHxDyT81hp01DhUuSshKvLM+NiTt9VP+O4/rSj+SOaSJAm3wX7eziCKrDi6H41FwhoZL75CifLhcZVyVO4A==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@fortawesome/fontawesome-free" "^7.0.1"
"@abp/jquery-validation-unobtrusive@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0-rc.1.tgz#b547557e85838afcc783ef3d502c2da3a31f4a63"
integrity sha512-NU00gPTHDF2HTnsHaZKAp17DTgAHUCz1fwuXRq4f7Ke5Q9HwiJx2IpIFaeR49xe9XRg1d9iRbNKFkMycjX7rEg==
"@abp/jquery-validation-unobtrusive@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0.tgz#5bc14ed642d48f9eae54761ad39bd9f51beeb005"
integrity sha512-j/9fA7tAs1/t3P2U1kKUiDlHAImmseul6KzvV77sNpnms7g4+x6Fgsa+sMzicSRGOLz7lK5RHdBFyvfKxt7/nA==
dependencies:
"@abp/jquery-validation" "~10.3.0-rc.1"
"@abp/jquery-validation" "~10.3.0"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0-rc.1.tgz#c4ab1a0692c1d224c5f60ffc4cb25545a7024c31"
integrity sha512-JaUhEbhKFB1DPFe+xTeIqTvN3YgFm7gdlpqMxN9Q5k0mnecQHlNmXbmC0oDa+CyxZDvMjWOrSMrJw/8yL4moQQ==
"@abp/jquery-validation@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0.tgz#e669a54d28f6c0b863a284322e527a5c65cb7dbf"
integrity sha512-Wo95ZJLS1ScKm7dm3zFlEFUKqXrqo3m9+82DX5mFJUVCHHuBPrhxvDjxNJ18z4gpoOUu08uqxX7LFbphtkRM3g==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
jquery-validation "^1.21.0"
"@abp/jquery@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0-rc.1.tgz#bc8d3a468483165f8d35cbfa5e91621c2fa53c8f"
integrity sha512-tCZsi5U3oWZOazxRuqrEPyE85jZ4D71IfSrT9/Brf1wAELyrttt5ke3P57yQqjBevbfSqW652Wxca/w2GidQcg==
"@abp/jquery@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0.tgz#3b60bcdfe8f9a33be79db1bea2500837fe09c67d"
integrity sha512-TndX/8bJx5vGAAwIykx2CJUZIFFDkwpD+cUjE45WO2dSrY2M5vNfWiuw95OcLGngO8RaT/gTkFGzPuZqKn9ggg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
jquery "~3.7.1"
"@abp/lodash@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0-rc.1.tgz#7bdf8038f28a822dfc12f0bfa9b7d81f13e16d99"
integrity sha512-tlev/kkQ3Q+OC7BT1ZJ+TThIbVQ3CZ+mtEujLt6zHVIxx8tukbYmmDMpltrmOL2kGnQeDdMqFcQoNJAAYOju+A==
"@abp/lodash@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0.tgz#bd091fc811d85d2f535802631af6165ac1c8a198"
integrity sha512-7JDU9UlbD+9odhFQjolvyJZ6EQKG5kiL2Pt9T1RMVchNh47iEuZwfi8c+CIxa3YxA3n6lAsZ+8Pmxq4yOku+RQ==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
lodash "^4.17.21"
"@abp/luxon@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0-rc.1.tgz#e13db7cade7761964e9820315e43bac182f80784"
integrity sha512-FB42gIKvfDJBu2vFZDBFVL6bn9jZpDpKdt5Kkp4OKQak9NHVyNuzH+R95Hr99vB+KELyTwW7hihc6Kl2oCrwWQ==
"@abp/luxon@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0.tgz#acbd92289456a546607ed4506dc36f71e6da53c9"
integrity sha512-IIi2+odQzuFK4qV1KJ2HtlTewSPby2F9CJFNNtNRMzX/P30dQkAGWpNV5/FZzJwFIihR+zSei5wlu11WpPugsw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
luxon "^3.7.2"
"@abp/malihu-custom-scrollbar-plugin@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0-rc.1.tgz#1af6ebce0553c368d884752efcaef6cceaeb806c"
integrity sha512-+BYN/3DhhtI7tS4nv4BpdsPiQLEVrLQ0KgawGRr1h3SV/nz1dtBTBgTbKvy/4bDHoMSKA1dPfudxi6XjgwUoBA==
"@abp/malihu-custom-scrollbar-plugin@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0.tgz#209931d02a994ef448371d6203e9ec74c72b61e6"
integrity sha512-hJjwEExP3hKE1MNDG+pcvoHRFUihh3t/0wCPNaoePFd8+QnJuyQ9U0VA+vdtykTxm8uFNE2uaCgyHffoHmzeZA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0-rc.1.tgz#82229c44e7b1417c872edec53ed3f51d06bf7e8b"
integrity sha512-hKQ8VE25Wqo1mj/ks8qw39ONLQK5sV33xc0bfYHTk0+NVAholAPZF7gjqiDzaAWXzVBVJjemH554AM3y14VNAA==
"@abp/moment@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0.tgz#5a5c4ece14d1bc4dd33134f85d1d085733d3c975"
integrity sha512-8DKw2jgC/28nLrB/CR9BiyUSt0pUmWF+bEgAsduln6VrSCHn0aRLqgs+wi/9Ol+1bl7pO2wbJOYg1qbnkDhrAQ==
dependencies:
moment "^2.30.1"
"@abp/popper.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0-rc.1.tgz#3d758e25e7b09210542e4da06558cd5a1b710b45"
integrity sha512-3PKJpwzTYAQ6UJFe3u9bn1qKRjXwmILlR9umyH998bfJLr0Zl04rBfcbIL9/l3S01qlCMt2bwjre0+wpRl+/OA==
"@abp/popper.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0.tgz#cb2415e45a905854980f4e864c00c8fe1156a6f9"
integrity sha512-Yfafs50t7DKnShxAl9WPpihZxG5cLAt99rJmIyXBYUQIpkHkxDyUIA5b4gCoVCqKgjFDOxG7i6L+Ovd/2N8k7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@popperjs/core" "^2.11.8"
"@abp/select2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0-rc.1.tgz#5292066ccf962ad92058d946b267d413c4876c40"
integrity sha512-gAJaAuLoHaOhkdDwS2F3ZH3CR//8EClkEWDde2AcYS+W2AY9/4g9kAMUOD5IrkrrYvJ+DDa9u426Ds8n8s/B9g==
"@abp/select2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0.tgz#199777173ca3e43a5448f8b51b30c3aafe4a3333"
integrity sha512-6sEIYIakVI1DM3eOqOaxwdG8vkyVFBWvVZhoChPZkgIIQ0EH2JLerHv0pePJEl6mQSxOUrikPA8++B2y+sBnQA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
select2 "^4.0.13"
"@abp/sweetalert2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0-rc.1.tgz#a344674f14b21f430a820805bc36768a6dde1f58"
integrity sha512-UV3nSA3LdgygFr1ruFZRU1PVan455NMFILisXKRYVu9QwweFInmnliR6FmcDlTmPFW7RCLBk+lC9UblEcDthUA==
"@abp/sweetalert2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0.tgz#515e0477574b54bc6650b9f5ee193bfc648c715a"
integrity sha512-bY5MXEiKja+vk71ujSn8rpzRC45Ge8zvcca1k1vBJs+oKyRCii//JBxa3H0lagZo5r/QwIqv5ihdyLE1xsuLSg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
sweetalert2 "^11.23.0"
"@abp/timeago@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0-rc.1.tgz#f0e476b65f19fd986c06231a331fdb4050d1a6c6"
integrity sha512-ydBvTJ73BrV7A69vtWRzw//JmrLu6r4ow8J3GZy8vEuH9vlBWe1JHcPK6lOD3DDM+K6Jag5/31RL45ZuSSxcvQ==
"@abp/timeago@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0.tgz#3214a6d000c79504c9fa7cb4e004a967fe46459b"
integrity sha512-Rgcex+jvM9Z9/E0I5Q3wlC2bY5550/+6xRX407k5ho4gxCccYo3c0Gkpiy5pJRFhTwtBgcNzYxArh6NCez+tDg==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
timeago "^1.6.7"
"@abp/utils@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0-rc.1.tgz#b6e20d357b87a009ffef3e11a0e7cc3a887d461f"
integrity sha512-tBcywC3T2ZUKS6znm1lCd+jP0peZolYyxjs1F7wyyH/y+Y08NYtGgLG/A8EaIv7iDY2K4WExzvWjTHB4lE1mFA==
"@abp/utils@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0.tgz#d88c0d639d69d6210c3070892aac61d5e945c124"
integrity sha512-iNehxiqWJQl2wwE9EbsQANPv/ITMh0yUcPATUlG/McoLWdpPcqobx75NxXcHDqW8ZarecqSktjJDZPvaUaD+jA==
dependencies:
just-compare "^2.3.0"

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

@ -1,9 +1,9 @@
{
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0-rc.1",
"@abp/cms-kit": "10.3.0-rc.1"
}
"version": "1.0.0",
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~10.3.0",
"@abp/cms-kit": "10.3.0"
}
}

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

@ -2,294 +2,294 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0-rc.1.tgz#82f61b5d112c8cbc5c74077809d84525edc1200a"
integrity sha512-eo4ubQfc6zT2/uTKM7U7XS6vExSKsg2szfvybFuBWJjmgb1ybfU2dKDXK4OfLdt0/wUBqBlEKDNK6NWZTfiovQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0-rc.1.tgz#465bb75a8b974be7a7945099fd9055ee68e3c9fe"
integrity sha512-89ca3oXYFEkaKbC1+mNsn6U4x0bls5iffcp1ZqaY5LTfHUhO5tJXbNf5kiOiEwT9TCYwPUHyLbUd2+rT72MGFA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0-rc.1"
"@abp/bootstrap" "~10.3.0-rc.1"
"@abp/bootstrap-datepicker" "~10.3.0-rc.1"
"@abp/bootstrap-daterangepicker" "~10.3.0-rc.1"
"@abp/datatables.net-bs5" "~10.3.0-rc.1"
"@abp/font-awesome" "~10.3.0-rc.1"
"@abp/jquery-validation-unobtrusive" "~10.3.0-rc.1"
"@abp/lodash" "~10.3.0-rc.1"
"@abp/luxon" "~10.3.0-rc.1"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0-rc.1"
"@abp/select2" "~10.3.0-rc.1"
"@abp/sweetalert2" "~10.3.0-rc.1"
"@abp/timeago" "~10.3.0-rc.1"
"@abp/aspnetcore.mvc.ui@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0-rc.1.tgz#c5764ec2fcab13ee591863c54e59e33fe1da90b4"
integrity sha512-vmBsradTXcTEqHUXM5rTLYnsNNYJDeyyvz3kaLLqNwYhjo2FxL8D8IUZnp3Mk0qkBpYaYeGag5uxd06VDczDhg==
"@abp/aspnetcore.mvc.ui.theme.basic@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.3.0.tgz#bf48e8fa571067d15bc19bdd3f13509acf58f9c7"
integrity sha512-t9pHqrXaCDYcsdrz0VPKT28ujnnU+EVxyVDogQSRRpKsDoLhNcOD8NI3swdAWBQZ46YSCDfeDR+gfwjC3yqpXQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~10.3.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.3.0.tgz#bcf72b5dd1dea285c3fa7cb1b6ce27c29b985ff7"
integrity sha512-X5xmMSxnIzNJPexvKR9y6jyn0v5n2wscN1SECG/bMI1YdKugMlkfkSuyUmLn+RX9/YdcK0jOsdMhfuzs5mgAOA==
dependencies:
"@abp/aspnetcore.mvc.ui" "~10.3.0"
"@abp/bootstrap" "~10.3.0"
"@abp/bootstrap-datepicker" "~10.3.0"
"@abp/bootstrap-daterangepicker" "~10.3.0"
"@abp/datatables.net-bs5" "~10.3.0"
"@abp/font-awesome" "~10.3.0"
"@abp/jquery-validation-unobtrusive" "~10.3.0"
"@abp/lodash" "~10.3.0"
"@abp/luxon" "~10.3.0"
"@abp/malihu-custom-scrollbar-plugin" "~10.3.0"
"@abp/moment" "~10.3.0"
"@abp/select2" "~10.3.0"
"@abp/sweetalert2" "~10.3.0"
"@abp/timeago" "~10.3.0"
"@abp/aspnetcore.mvc.ui@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.3.0.tgz#0d125efd172b6772c516eae82cfe35f144da73fc"
integrity sha512-kp0XdwrlNz+NeLdxSJ6xdUaB5PM7xdbiLsIyTUcwa7AUKBtcVU6yq6qttbk9VyO0KqDgLywSuEL+9PkFhthuPg==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0-rc.1.tgz#58586e2333116ef840c3abd44bb2b54f944c92b1"
integrity sha512-PEXWi22YfOBdbxCUfLkEAVL45DCxzDbNALFLfsCK3LPvXuL5Pw0YU0CrezAW54+1tzPpbWh1HLyEyaUAINz6Wg==
"@abp/bootstrap-datepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.3.0.tgz#032aaf0e474f971b9f90ca7fb83ff7ca4d7be933"
integrity sha512-7mRuRRIE4R0yw1cZuoIskgrqZPUa5/SJzse0K6u+/QDqvyLjjOsyE51WuqAXxlVfKpLp/fBvXZwnCDeCRU9iZQ==
dependencies:
bootstrap-datepicker "^1.10.1"
"@abp/bootstrap-daterangepicker@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0-rc.1.tgz#088b96754014b3c7a8884689574c2332cd5c292e"
integrity sha512-uZRh/Eh/3nyFe4KfMLRMud5LmUs2JFKSeA4KeRliGe1PD68E6NizP/ZiNzkYFP2K2p0nNUQrqmSe7ZFHVELN4A==
"@abp/bootstrap-daterangepicker@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.3.0.tgz#b2a9171595ee311c32f57460013870cde67c6b7f"
integrity sha512-ejLu3sWhfNDlsXeUXAQudZvPv0xM4McxIK65vuVEZiKIwFSnrLYil8jBi12EJJmAw5yYA/KC0EdyG82E+AWpmA==
dependencies:
"@abp/moment" "~10.3.0-rc.1"
"@abp/moment" "~10.3.0"
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0-rc.1.tgz#fc1ccf88e689af336fec9c76d367bcaf66253961"
integrity sha512-vdhaz3ccmIflmufhNiQE/8I2RZdSSv3V4sbA2NC24csx8xl4J/R2JFhTyTLixpxOR+/p1cWw1F2oMYVzjV0+eg==
"@abp/bootstrap@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.3.0.tgz#23535c90613271b02fdad3eae1556b67844729e6"
integrity sha512-JnVOeJUyR78oo+QURvaNqa9xGZaVux0PRIpFpd4Qsqiiz9FvJrbCuSoBkkZoj/0eH23WoZ3bJxy0K9LDE19qvg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/popper.js" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@abp/popper.js" "~10.3.0"
bootstrap "^5.3.8"
"@abp/clipboard@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.3.0-rc.1.tgz#2350aba655b18510dea0ca50cb91e5e5960e9480"
integrity sha512-jKo5H0+FSA+1aDdIWDmyAwNP2nFf19x4nAHbclkwnsexHBRfQlvx6yB6sY85BP+Ft6zxIn9gRRLbJPvFwsKBWw==
"@abp/clipboard@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.3.0.tgz#7bfbfcae6a135065ee13afd1b7d3abc92176a203"
integrity sha512-Cah+jOzcG1KZh6PXWxo+BedU7gsqTuNlTDsCzBCk2NuV2/Blb5qumAwEP4GBKAEIY/XwcFQP/ubxuXMTNjr0jw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
clipboard "^2.0.11"
"@abp/cms-kit.admin@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-10.3.0-rc.1.tgz#ae092d1a75efbb257c725482a3139bdba3e804b7"
integrity sha512-enEcnM3MlDRpQ0YiBmy2km6mqiAUztOodhvuF8I63xONA1T4jlbJUi01sBq2lg3RyxKqv7xBStUxmdH2cw64Pg==
"@abp/cms-kit.admin@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-10.3.0.tgz#3ac7c8e37f7de1345fbb7634ae0d797d28b6751b"
integrity sha512-zvFpdfvBJHg+XC7xM/h9YBe8gPgRrb6AJx+S9eT1+MNgyE+Lm3ghxAa6SBIg5MgPxrVpLO7N8HHrzu5Kx2ksUw==
dependencies:
"@abp/codemirror" "~10.3.0-rc.1"
"@abp/jstree" "~10.3.0-rc.1"
"@abp/markdown-it" "~10.3.0-rc.1"
"@abp/slugify" "~10.3.0-rc.1"
"@abp/tui-editor" "~10.3.0-rc.1"
"@abp/uppy" "~10.3.0-rc.1"
"@abp/codemirror" "~10.3.0"
"@abp/jstree" "~10.3.0"
"@abp/markdown-it" "~10.3.0"
"@abp/slugify" "~10.3.0"
"@abp/tui-editor" "~10.3.0"
"@abp/uppy" "~10.3.0"
"@abp/cms-kit.public@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-10.3.0-rc.1.tgz#cda7ca27a95f5b3903ce12264d0cefc688b5a33a"
integrity sha512-b2utxPU9Q9pzJQjhqpOuB0IZCPJRMAwCSlkOnh6C1YIUwlEpiGU3XFYG92qcrbSjMuX4L4p/HhxNAw8PQkVO0Q==
"@abp/cms-kit.public@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-10.3.0.tgz#2331751380b3f224d28481c4472f31fbfc1e8e1a"
integrity sha512-t7xHhYZqEneV4BwMk7StfQXB1xy0ohoCBDduYwRPGkAvgvWifFNwZ9ZuFwBwItPPeg7llzYPLxLyZg265tNDeQ==
dependencies:
"@abp/highlight.js" "~10.3.0-rc.1"
"@abp/star-rating-svg" "~10.3.0-rc.1"
"@abp/highlight.js" "~10.3.0"
"@abp/star-rating-svg" "~10.3.0"
"@abp/cms-kit@10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-10.3.0-rc.1.tgz#89ae433f6f48a0b104300b8cdd2d83bdc619c8df"
integrity sha512-dZfWaxil5/51DYCc9GT4h7vuuZexkWGtyvEMs74/QKlPUyX4Ad6XklMVsCSDH0b0DqT+0RNRl9xBXkYkbC8/Lw==
"@abp/cms-kit@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-10.3.0.tgz#a67d33eda79a55d6f327d41e320a3bf88360a3ab"
integrity sha512-/nMSj95DkxnI6SG11I0ltdDMaMKNKQ6Fp5/aDNNbFyBXbbOpPzKulhHJIighynXk/B9N01mztL1B5MSL5ViSQg==
dependencies:
"@abp/cms-kit.admin" "~10.3.0-rc.1"
"@abp/cms-kit.public" "~10.3.0-rc.1"
"@abp/cms-kit.admin" "~10.3.0"
"@abp/cms-kit.public" "~10.3.0"
"@abp/codemirror@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-10.3.0-rc.1.tgz#f82db77ccb4995bf7929ab747dfb848f9e56f858"
integrity sha512-lylZ+3ThrRkZffWtni1rv7F3fiRol0ObIVRluRuhU49OXcrg7B7YD35/DWP8McEIF2VKT8gZSUHbBC/b1ycgJw==
"@abp/codemirror@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-10.3.0.tgz#57345c0d68850a4b1d0c62faf2c8cde221bada17"
integrity sha512-vo53MxaQE3l/la5kTXQLh0K4wgCPmfvAO0g552xEKzGEpAtD9Cl3EvmYmdJGxXlfFnAz4ic6/YZ6SJ+LCprFvw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
codemirror "^5.65.1"
"@abp/core@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0-rc.1.tgz#68f85db8219e3a2618a60cf82933bc52a2d1ec49"
integrity sha512-tOl/yDSPqRaHbENFVYcjqkdKGM4Qhjd/QPushVaH57pxalmv6canhiWAa0x7W31qxdY9od48H7MYoJx61jURhw==
"@abp/core@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.3.0.tgz#9960f8179d1fdc42250d0bbba60e379590c8199c"
integrity sha512-DpL4qrsyCUolypUwxKVDDK8bPVhNbYKx6l2ytUjoOu73CwgPoCSGkvHWrmKIsEsmTfOC9J7+GDErh8jWR/5pVA==
dependencies:
"@abp/utils" "~10.3.0-rc.1"
"@abp/utils" "~10.3.0"
"@abp/datatables.net-bs5@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0-rc.1.tgz#55e8dde9024c51ccb70fe5b640bbb434fff2e00d"
integrity sha512-d6vFlrNgS6MIpXi2EcZjGFbFbCl5I5hzM49NxQeB3hyG7gUElFsEJkf66UcO8PN/56Uo+sFe/rCdrcvyLLDHmg==
"@abp/datatables.net-bs5@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.3.0.tgz#d8711c52f7c03df51d14d1a5f0e6b00f6d9551fc"
integrity sha512-I8rEU98kEhsNZjVdpPvOcG6F4xr1CgIRb0bTf5bfd8ufzxEUKB+xF9bguJIB5kYwjme8QbMlcJ0V/c+N4iewtQ==
dependencies:
"@abp/datatables.net" "~10.3.0-rc.1"
"@abp/datatables.net" "~10.3.0"
datatables.net-bs5 "^2.3.4"
"@abp/datatables.net@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0-rc.1.tgz#8e275f31d8b24b098c6acc3ec1de7ef2fe587e73"
integrity sha512-m57imr9KOkasgDCIFaIgoDqFDhS71wzClE2WCk+Uk7qHLRgRMa7CYRHh5xeck4hgPWq9DEmAZS0ogbHxLgkLKQ==
"@abp/datatables.net@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.3.0.tgz#f98319d8e226da5aced4d1d94d3ababb11327074"
integrity sha512-imM25WmO1V0hqeG5iPeLvYMID2HX7SG9drz47qilr74MhpY2i2J7HlsvZDonNkjpxzhK4DHpGeQd6mE2QzG7Hw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
datatables.net "^2.3.4"
"@abp/font-awesome@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0-rc.1.tgz#e9d4a1b36652773509259440b77b804af18c5364"
integrity sha512-8zvZh7lbPlvH0/SKYtUeQF+ezKSoohwFxzFhOJ88GOdtwp620mBCwYEHjZA64e/Xjk6Oda2VrdNJ318IvgjIvA==
"@abp/font-awesome@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.3.0.tgz#43602605f5633132cc6fe21b6ce5ab19b86bdf27"
integrity sha512-RUOVHxDyT81hp01DhUuSshKvLM+NiTt9VP+O4/rSj+SOaSJAm3wX7eziCKrDi6H41FwhoZL75CifLhcZVyVO4A==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@fortawesome/fontawesome-free" "^7.0.1"
"@abp/highlight.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-10.3.0-rc.1.tgz#76d699f549aa630afda1f822717a3d3e2d846e88"
integrity sha512-m43P+D3gOsbc6tr2qQ/OmpCU6IqfVkw1frq1J6DcwlpEf5rCFhSEuvSq7roe9OTqsFX0xa+a1X2BHRNc3CkS2Q==
"@abp/highlight.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-10.3.0.tgz#1b04355e84eba15c395cdfc7055c8d610296206b"
integrity sha512-cqApQta9gEs03jk/s+yQsm1mnHGNDZPHnkGYgxYKI41Nl9meV6+5Dkz0b4gnQoUKXvFlmuOuf2DOjot7a2yB7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@highlightjs/cdn-assets" "~11.11.1"
"@abp/jquery-validation-unobtrusive@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0-rc.1.tgz#b547557e85838afcc783ef3d502c2da3a31f4a63"
integrity sha512-NU00gPTHDF2HTnsHaZKAp17DTgAHUCz1fwuXRq4f7Ke5Q9HwiJx2IpIFaeR49xe9XRg1d9iRbNKFkMycjX7rEg==
"@abp/jquery-validation-unobtrusive@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.3.0.tgz#5bc14ed642d48f9eae54761ad39bd9f51beeb005"
integrity sha512-j/9fA7tAs1/t3P2U1kKUiDlHAImmseul6KzvV77sNpnms7g4+x6Fgsa+sMzicSRGOLz7lK5RHdBFyvfKxt7/nA==
dependencies:
"@abp/jquery-validation" "~10.3.0-rc.1"
"@abp/jquery-validation" "~10.3.0"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0-rc.1.tgz#c4ab1a0692c1d224c5f60ffc4cb25545a7024c31"
integrity sha512-JaUhEbhKFB1DPFe+xTeIqTvN3YgFm7gdlpqMxN9Q5k0mnecQHlNmXbmC0oDa+CyxZDvMjWOrSMrJw/8yL4moQQ==
"@abp/jquery-validation@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.3.0.tgz#e669a54d28f6c0b863a284322e527a5c65cb7dbf"
integrity sha512-Wo95ZJLS1ScKm7dm3zFlEFUKqXrqo3m9+82DX5mFJUVCHHuBPrhxvDjxNJ18z4gpoOUu08uqxX7LFbphtkRM3g==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
jquery-validation "^1.21.0"
"@abp/jquery@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0-rc.1.tgz#bc8d3a468483165f8d35cbfa5e91621c2fa53c8f"
integrity sha512-tCZsi5U3oWZOazxRuqrEPyE85jZ4D71IfSrT9/Brf1wAELyrttt5ke3P57yQqjBevbfSqW652Wxca/w2GidQcg==
"@abp/jquery@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.3.0.tgz#3b60bcdfe8f9a33be79db1bea2500837fe09c67d"
integrity sha512-TndX/8bJx5vGAAwIykx2CJUZIFFDkwpD+cUjE45WO2dSrY2M5vNfWiuw95OcLGngO8RaT/gTkFGzPuZqKn9ggg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
jquery "~3.7.1"
"@abp/jstree@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-10.3.0-rc.1.tgz#11a0b55c0fc5ceefead83caa93806cc856700181"
integrity sha512-1KrfLkTuJScpkiEOujjIYtoiSaRJ31FjYi3DanjbRznKmbFlmqE9VQDg90Dqb2z9r3Oqhj5opEbH7Q0OWwILLQ==
"@abp/jstree@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-10.3.0.tgz#ad6d3a7fe6ec2d0a55ad1fa028a61ec0e7e1157d"
integrity sha512-MR7MIbjDSHq/MUk8FDjIKrram2aWYuuC9OKZLCZ8KH2rsfx9Y0wjYTKcoouwMldLQ/71O7/pY/RRVFCxp5ROvQ==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
jstree "^3.3.17"
"@abp/lodash@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0-rc.1.tgz#7bdf8038f28a822dfc12f0bfa9b7d81f13e16d99"
integrity sha512-tlev/kkQ3Q+OC7BT1ZJ+TThIbVQ3CZ+mtEujLt6zHVIxx8tukbYmmDMpltrmOL2kGnQeDdMqFcQoNJAAYOju+A==
"@abp/lodash@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.3.0.tgz#bd091fc811d85d2f535802631af6165ac1c8a198"
integrity sha512-7JDU9UlbD+9odhFQjolvyJZ6EQKG5kiL2Pt9T1RMVchNh47iEuZwfi8c+CIxa3YxA3n6lAsZ+8Pmxq4yOku+RQ==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
lodash "^4.17.21"
"@abp/luxon@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0-rc.1.tgz#e13db7cade7761964e9820315e43bac182f80784"
integrity sha512-FB42gIKvfDJBu2vFZDBFVL6bn9jZpDpKdt5Kkp4OKQak9NHVyNuzH+R95Hr99vB+KELyTwW7hihc6Kl2oCrwWQ==
"@abp/luxon@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.3.0.tgz#acbd92289456a546607ed4506dc36f71e6da53c9"
integrity sha512-IIi2+odQzuFK4qV1KJ2HtlTewSPby2F9CJFNNtNRMzX/P30dQkAGWpNV5/FZzJwFIihR+zSei5wlu11WpPugsw==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
luxon "^3.7.2"
"@abp/malihu-custom-scrollbar-plugin@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0-rc.1.tgz#1af6ebce0553c368d884752efcaef6cceaeb806c"
integrity sha512-+BYN/3DhhtI7tS4nv4BpdsPiQLEVrLQ0KgawGRr1h3SV/nz1dtBTBgTbKvy/4bDHoMSKA1dPfudxi6XjgwUoBA==
"@abp/malihu-custom-scrollbar-plugin@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.3.0.tgz#209931d02a994ef448371d6203e9ec74c72b61e6"
integrity sha512-hJjwEExP3hKE1MNDG+pcvoHRFUihh3t/0wCPNaoePFd8+QnJuyQ9U0VA+vdtykTxm8uFNE2uaCgyHffoHmzeZA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/markdown-it@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-10.3.0-rc.1.tgz#9acabf7b91ebbdcf4699924c046d2f9ae926374e"
integrity sha512-LE7lb47fgEH97RWFz/OXsvFuqkYSDjJUXWCG58HMsrwDqDqZhfLGPb13y5xueVTin+jdBFX5WadOV3fueRlMJQ==
"@abp/markdown-it@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-10.3.0.tgz#fbc5fff1e9dd1c31c8b96ebd6b481326809ddff0"
integrity sha512-IN01vs2axD+zrygwF5IyYmmFV+GqV7O4NK02ThqX97q0AZ5ZwqOccwcY/kkBkp+qAWoTMcPb6eOQZrTG631qUg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
markdown-it "^14.1.0"
"@abp/moment@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0-rc.1.tgz#82229c44e7b1417c872edec53ed3f51d06bf7e8b"
integrity sha512-hKQ8VE25Wqo1mj/ks8qw39ONLQK5sV33xc0bfYHTk0+NVAholAPZF7gjqiDzaAWXzVBVJjemH554AM3y14VNAA==
"@abp/moment@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.3.0.tgz#5a5c4ece14d1bc4dd33134f85d1d085733d3c975"
integrity sha512-8DKw2jgC/28nLrB/CR9BiyUSt0pUmWF+bEgAsduln6VrSCHn0aRLqgs+wi/9Ol+1bl7pO2wbJOYg1qbnkDhrAQ==
dependencies:
moment "^2.30.1"
"@abp/popper.js@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0-rc.1.tgz#3d758e25e7b09210542e4da06558cd5a1b710b45"
integrity sha512-3PKJpwzTYAQ6UJFe3u9bn1qKRjXwmILlR9umyH998bfJLr0Zl04rBfcbIL9/l3S01qlCMt2bwjre0+wpRl+/OA==
"@abp/popper.js@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.3.0.tgz#cb2415e45a905854980f4e864c00c8fe1156a6f9"
integrity sha512-Yfafs50t7DKnShxAl9WPpihZxG5cLAt99rJmIyXBYUQIpkHkxDyUIA5b4gCoVCqKgjFDOxG7i6L+Ovd/2N8k7g==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
"@popperjs/core" "^2.11.8"
"@abp/prismjs@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.3.0-rc.1.tgz#147852ca4e0f9ceebe5681b65ad440b48325021f"
integrity sha512-sAWkFAP8GPx4UBR2EXg9Uz0sivK9CTWccUGGecttK9mNf12YbtVftmS145Fgip2+ifklPTcVRjXWIghyJPYu5Q==
"@abp/prismjs@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.3.0.tgz#4ea33ece50cefcfc8a89c17b0d265b484b7205ee"
integrity sha512-WvkLyg+izkcX6sEOYy41B9lebiniYxMQZ++c+ysyOQKZzrYEEFOOLlnFS9jPqSKLv9cNRizhG1CCfiwoYCxufQ==
dependencies:
"@abp/clipboard" "~10.3.0-rc.1"
"@abp/core" "~10.3.0-rc.1"
"@abp/clipboard" "~10.3.0"
"@abp/core" "~10.3.0"
prismjs "^1.30.0"
"@abp/select2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0-rc.1.tgz#5292066ccf962ad92058d946b267d413c4876c40"
integrity sha512-gAJaAuLoHaOhkdDwS2F3ZH3CR//8EClkEWDde2AcYS+W2AY9/4g9kAMUOD5IrkrrYvJ+DDa9u426Ds8n8s/B9g==
"@abp/select2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.3.0.tgz#199777173ca3e43a5448f8b51b30c3aafe4a3333"
integrity sha512-6sEIYIakVI1DM3eOqOaxwdG8vkyVFBWvVZhoChPZkgIIQ0EH2JLerHv0pePJEl6mQSxOUrikPA8++B2y+sBnQA==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
select2 "^4.0.13"
"@abp/slugify@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-10.3.0-rc.1.tgz#c8157d107352d7146402206e24eccf6ab480aece"
integrity sha512-66Nd9c+u002OQf1IO2oQU7ZCThFEWUSVhxS56Un/sc6GOhuLe2TWDPuCbRe3qVuMU2sZdqf989w3WM4JBKCwtQ==
"@abp/slugify@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-10.3.0.tgz#629f96a44b07d77439d9056531b43677d496caf3"
integrity sha512-+0WQAjKXLflXOobVkA41xAsvXVuMKZeoNSxGn97VDRLwmAPwb+moHV96fWF0iwju0kUZXNvbWFqbZfV07LitfQ==
dependencies:
slugify "^1.6.6"
"@abp/star-rating-svg@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-10.3.0-rc.1.tgz#bc247af6b2a5a7dcbb95acfa062cdb468aee7c63"
integrity sha512-ffaO88HeFmoOi5QvWBwlM9LKuK2zL5C99wZeM/o3kFdCk3+rbHf89582gqvbfXrn8g7slfzLflQUerRJhCP6QQ==
"@abp/star-rating-svg@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-10.3.0.tgz#195d8175df2c82384752439d0677e27480c3f49d"
integrity sha512-7xXLgz2jxdkBceelG+uvnD9aKwwTV2FIDVCmpRF3AF+0c7jaJvtyM9vlx6xdTFQSSzDnSGG10k/jeYP7O2AjUg==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
star-rating-svg "^3.5.0"
"@abp/sweetalert2@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0-rc.1.tgz#a344674f14b21f430a820805bc36768a6dde1f58"
integrity sha512-UV3nSA3LdgygFr1ruFZRU1PVan455NMFILisXKRYVu9QwweFInmnliR6FmcDlTmPFW7RCLBk+lC9UblEcDthUA==
"@abp/sweetalert2@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.3.0.tgz#515e0477574b54bc6650b9f5ee193bfc648c715a"
integrity sha512-bY5MXEiKja+vk71ujSn8rpzRC45Ge8zvcca1k1vBJs+oKyRCii//JBxa3H0lagZo5r/QwIqv5ihdyLE1xsuLSg==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
sweetalert2 "^11.23.0"
"@abp/timeago@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0-rc.1.tgz#f0e476b65f19fd986c06231a331fdb4050d1a6c6"
integrity sha512-ydBvTJ73BrV7A69vtWRzw//JmrLu6r4ow8J3GZy8vEuH9vlBWe1JHcPK6lOD3DDM+K6Jag5/31RL45ZuSSxcvQ==
"@abp/timeago@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.3.0.tgz#3214a6d000c79504c9fa7cb4e004a967fe46459b"
integrity sha512-Rgcex+jvM9Z9/E0I5Q3wlC2bY5550/+6xRX407k5ho4gxCccYo3c0Gkpiy5pJRFhTwtBgcNzYxArh6NCez+tDg==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
timeago "^1.6.7"
"@abp/tui-editor@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-10.3.0-rc.1.tgz#2c2353694efa6f61849f4ed8c769fea95e0304ee"
integrity sha512-Vxi9yKFJ5uBgmULppS67a4hBYC5/B+LIOdvG125x0FlCI5vO2+s+QMz09nQ6Fu4EaLmh4F0Qu0Q8FmRubpj7Jw==
"@abp/tui-editor@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-10.3.0.tgz#4fe3879111fe5ee312048841fca1cac43bb9bb62"
integrity sha512-6zGfaYSggalgpS9tKjESXT6w00KK7fKN71rG/hxRLNRpLGn5aapHdlAZRNEUgEFYo9czFdMW8POHpVA+sjcDMw==
dependencies:
"@abp/jquery" "~10.3.0-rc.1"
"@abp/prismjs" "~10.3.0-rc.1"
"@abp/jquery" "~10.3.0"
"@abp/prismjs" "~10.3.0"
"@abp/uppy@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-10.3.0-rc.1.tgz#c3be855b5060b3b58097b293f7ad6dbdc17a8c1d"
integrity sha512-tIR78C2drAIwy+PHegaftgMVLQ9oYeXtl7L4nrLm8P9XkJi5jfRnlV7PCQUosU0JiUf6zLd/+lPt/k3oAnChmA==
"@abp/uppy@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-10.3.0.tgz#3b333f4f9618cc24dba989c6e2a9cb8c9bad0b2b"
integrity sha512-5RGZv2pk6xIFOGbIQdMvLBtpencqYICCtL0wuSP58zU97FQuQdbV3Du/2ZZvqCyxinJG+SwUBog4t9PAI1qM8w==
dependencies:
"@abp/core" "~10.3.0-rc.1"
"@abp/core" "~10.3.0"
uppy "^5.1.2"
"@abp/utils@~10.3.0-rc.1":
version "10.3.0-rc.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0-rc.1.tgz#b6e20d357b87a009ffef3e11a0e7cc3a887d461f"
integrity sha512-tBcywC3T2ZUKS6znm1lCd+jP0peZolYyxjs1F7wyyH/y+Y08NYtGgLG/A8EaIv7iDY2K4WExzvWjTHB4lE1mFA==
"@abp/utils@~10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.3.0.tgz#d88c0d639d69d6210c3070892aac61d5e945c124"
integrity sha512-iNehxiqWJQl2wwE9EbsQANPv/ITMh0yUcPATUlG/McoLWdpPcqobx75NxXcHDqW8ZarecqSktjJDZPvaUaD+jA==
dependencies:
just-compare "^2.3.0"

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

Loading…
Cancel
Save