Browse Source

Merge branch 'dev' into feature/ssr-support

# Conflicts:
#	templates/app-nolayers/angular/package.json
#	templates/app/angular/package.json
#	templates/module/angular/package.json
pull/23416/head
erdemcaygor 5 months ago
parent
commit
675e051228
  1. BIN
      docs/en/Community-Articles/2025-09-10-Truly-Layering-a-NET-Application-Based-on-DDD-Principles/coverimage.png
  2. 191
      docs/en/Community-Articles/2025-09-10-Truly-Layering-a-NET-Application-Based-on-DDD-Principles/post.md
  3. 333
      docs/en/Community-Articles/2025-09-11-Best-Practices-Guide-for-REST-API-Design/post.md
  4. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/BenchmarkDotnet.png
  5. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Disruptor.png
  6. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MemoryPack.png
  7. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MessagePack.png
  8. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Polly.png
  9. 157
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Post.md
  10. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cliwrap.png
  11. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cover.png
  12. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine-logo.png
  13. BIN
      docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine.png
  14. 803
      docs/en/Community-Articles/2025-09-11-aws-secrets-manager-in-abp-framework/article.md
  15. BIN
      docs/en/Community-Articles/2025-09-11-aws-secrets-manager-in-abp-framework/cover.png
  16. 316
      docs/en/Community-Articles/2025-09-12-Demystified-Aggregates-in-DDD-&-.NET/post.md
  17. BIN
      docs/en/Community-Articles/2025-09-16-Color-Psychology-in-Web-Design-How-to-Choose-the-Perfect-Palette-in-2025/img-1.png
  18. BIN
      docs/en/Community-Articles/2025-09-16-Color-Psychology-in-Web-Design-How-to-Choose-the-Perfect-Palette-in-2025/img-2.png
  19. BIN
      docs/en/Community-Articles/2025-09-16-Color-Psychology-in-Web-Design-How-to-Choose-the-Perfect-Palette-in-2025/img-3.png
  20. 138
      docs/en/Community-Articles/2025-09-16-Color-Psychology-in-Web-Design-How-to-Choose-the-Perfect-Palette-in-2025/post.md
  21. 8
      docs/en/framework/architecture/modularity/plugin-modules.md
  22. 45
      docs/en/framework/data/entity-framework-core/oracle-official.md
  23. 28
      docs/en/framework/fundamentals/localization.md
  24. 22
      docs/en/framework/infrastructure/audit-logging.md
  25. 10
      docs/en/framework/infrastructure/blob-storing/google.md
  26. 5
      docs/en/framework/infrastructure/event-bus/distributed/index.md
  27. 2
      docs/en/framework/infrastructure/object-to-object-mapping.md
  28. 36
      docs/en/framework/ui/angular/modal.md
  29. 5
      docs/en/framework/ui/angular/modifying-the-menu.md
  30. 8
      framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/DisableAuditingAttribute.cs
  31. 15
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Constants/AbpPlatformUrls.cs
  32. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Helpers/AbpPackageMetadataReader.cs
  33. 14
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs
  34. 8
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs
  35. 6
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs
  36. 10
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs
  37. 21
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  38. 26
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs
  39. 2
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs
  40. 31
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs
  41. 4
      framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IEventInbox.cs
  42. 18
      framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs
  43. 10
      framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IncomingEventStatus.cs
  44. 17
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpEventBusBoxesOptions.cs
  45. 82
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs
  46. 22
      framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessorFailurePolicy.cs
  47. 28
      framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Domain/Entities/EntityNotFoundException.cs
  48. 72
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
  49. 7
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs
  50. 2
      framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs
  51. 8
      framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs
  52. 36
      framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs
  53. 46
      framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs
  54. 77
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Auditing/Auditing_Tests.cs
  55. 25
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs
  56. 24
      framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json
  57. 9
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs
  58. 4
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityCache_Tests.cs
  59. 4
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/RepositoryExtensions_Tests.cs
  60. 9
      latest-versions.json
  61. 6
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
  62. 264
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
  63. 4
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
  64. 268
      modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
  65. 4
      modules/blogging/app/Volo.BloggingTestApp/package.json
  66. 306
      modules/blogging/app/Volo.BloggingTestApp/yarn.lock
  67. 2
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
  68. 240
      modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
  69. 10
      modules/cms-kit/angular/package.json
  70. 4
      modules/cms-kit/angular/projects/cms-kit/package.json
  71. 2
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
  72. 240
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
  73. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
  74. 240
      modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
  75. 4
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
  76. 392
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
  77. 4
      modules/docs/app/VoloDocs.Web/package.json
  78. 306
      modules/docs/app/VoloDocs.Web/yarn.lock
  79. 10
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserDelegationRepository.cs
  80. 8
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserDelegationRepository.cs
  81. 2
      modules/openiddict/app/OpenIddict.Demo.Server/package.json
  82. 20
      modules/openiddict/app/angular/package.json
  83. 74
      modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs
  84. 2
      modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json
  85. 240
      modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock
  86. 4
      modules/virtual-file-explorer/app/package.json
  87. 2
      npm/lerna.json
  88. 4
      npm/ng-packs/package.json
  89. 6
      npm/ng-packs/packages/account-core/package.json
  90. 6
      npm/ng-packs/packages/account/package.json
  91. 6
      npm/ng-packs/packages/components/package.json
  92. 4
      npm/ng-packs/packages/core/package.json
  93. 2
      npm/ng-packs/packages/core/src/lib/services/localization.service.ts
  94. 4
      npm/ng-packs/packages/feature-management/package.json
  95. 2
      npm/ng-packs/packages/generators/package.json
  96. 8
      npm/ng-packs/packages/identity/package.json
  97. 6
      npm/ng-packs/packages/oauth/package.json
  98. 4
      npm/ng-packs/packages/permission-management/package.json
  99. 2
      npm/ng-packs/packages/schematics/package.json
  100. 6
      npm/ng-packs/packages/setting-management/package.json

BIN
docs/en/Community-Articles/2025-09-10-Truly-Layering-a-NET-Application-Based-on-DDD-Principles/coverimage.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 769 KiB

191
docs/en/Community-Articles/2025-09-10-Truly-Layering-a-NET-Application-Based-on-DDD-Principles/post.md

@ -0,0 +1,191 @@
# **Truly Layering a .NET Application Based on DDD Principles**
Okay, so we ALL been there, right? You start new project thinking "this time will be different" - clean code, perfect architecture, everything organized. Fast forward 3 months and your codebase look like someone throw grenade into bowl of spaghetti. Business logic everywhere, your controllers doing database work, and every new feature feel like defusing bomb.
I been there too many times, and honestly, it suck. But here thing - there actually way to build .NET apps that not turn into maintenance nightmare. It called **Layered Architecture** + **Domain-Driven Design (DDD)**, and once you get it, it game changer.
Let me walk you through this step by step, no fluff, just practical stuff that actually work.
### **Layered Architecture 101 (The Foundation)**
So layered architecture basically about keeping your code organized. Instead of having everything mixed together like bad smoothie, you separate concerns into different layers. Think like organizing your room - clothes go in closet, books on shelf, etc.
Here how it typically break down:
* **Presentation Layer (UI):** This what users actually see and click on - your ASP.NET Core MVC stuff, Razor Pages, Blazor, whatever float your boat.
* **Application Layer:** The conductor of orchestra. It not do heavy lifting itself, but tell everyone else what to do. It like middle manager of your code.
* **Domain Layer:** The VIP section. This where all your business rules live - entities, value objects, whole nine yards. This layer pure and not give damn about databases or UI.
* **Infrastructure Layer:** The "how-to" guy. Database stuff, email sending, API calls - basically all technical plumbing that make everything work.
The golden rule? **Dependency Rule**: Layers can only talk to layers below them (or more central). UI talk to Application, Application talk to Domain, but Domain? Domain not talk to anyone. It the cool kid that everyone want to hang out with.
### **DDD: Where Magic Happen**
Alright, so DDD not some fancy framework you install from NuGet. It more like mindset - basically saying "hey, let make our code actually reflect business we building for." Instead of having bunch of random classes, we organize everything around actual business domain.
Think like this: if you building e-commerce app, your code should scream "I'M E-COMMERCE APP" not "I'M BUNCH OF RANDOM CLASSES."
Here toolkit DDD give you (all living in your Domain Layer):
* **Entity:** This something that have identity. Like `Customer` - two customers with same name still different people because they have different IDs. It like having two friends named John - they not same person.
* **Value Object:** Opposite of entity. It defined by what it contain, not who it is. `Address` perfect for this - if two addresses have same street, city, and zip code, they same address. Usually immutable too.
* **Aggregate & Aggregate Root:** This where it get interesting. Aggregate like family of related objects that stick together. **Aggregate Root** head of family - only one you talk to when you want change something. Like `Order` that contain `OrderItem`s. You not mess with `OrderItem` directly, you tell `Order` to handle it.
* **Repository (Interface):** Think like your data access contract. It say "here how you can get and save stuff" without caring about whether it SQL Server, MongoDB, or file on your desktop. Interface live in Domain, implementation go in Infrastructure.
* **Domain Service:** When business logic too complex for single entity or value object, this your go-to. It like utility class but for business rules.
### **Putting It All Together: Real C# Code**
Alright, enough theory. Let see what this actually look like in real .NET solution. You typically have projects like:
* `MyProject.Domain` (or `.Core`) - The VIP section
* `MyProject.Application` - The middle manager
* `MyProject.Infrastructure` - The technical guy
* `MyProject.Web` (or whatever UI you using) - The pretty face
**1. The Domain Layer (`MyProject.Domain`) - The Heart**
This where magic happen. Zero dependencies on other projects (maybe some basic utility libraries, but that it). Pure business logic, no database nonsense, no UI concerns.
```csharp
// In MyProject.Domain/Orders/Order.cs
public class Order : AggregateRoot<Guid>
{
public Address ShippingAddress { get; private set; }
private readonly List<OrderItem> _orderItems = new();
public IReadOnlyCollection<OrderItem> OrderItems => _orderItems.AsReadOnly();
// Private constructor for ORM
private Order() { }
public Order(Guid id, Address shippingAddress) : base(id)
{
ShippingAddress = shippingAddress;
}
public void AddOrderItem(Guid productId, int quantity, decimal price)
{
if (quantity <= 0)
{
throw new BusinessException("Quantity must be greater than zero.");
}
// More business rules...
_orderItems.Add(new OrderItem(productId, quantity, price));
}
}
// In MyProject.Domain/Orders/IOrderRepository.cs
public interface IOrderRepository
{
Task<Order> GetAsync(Guid id);
Task AddAsync(Order order);
Task UpdateAsync(Order order);
}
```
See what I mean? The `Order` class all about business rules (`AddOrderItem` with validation and all that jazz). It not give damn about databases or how it get saved. That someone else problem.
**2. The Application Layer (`MyProject.Application`) - The Conductor**
This where we orchestrate everything. It talk to domain objects and use repositories to get/save data. Think like middle manager that coordinate work but not do heavy lifting.
```csharp
// In MyProject.Application/Orders/OrderAppService.cs
public class OrderAppService
{
private readonly IOrderRepository _orderRepository;
public OrderAppService(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
public async Task CreateOrderAsync(CreateOrderDto input)
{
var shippingAddress = new Address(input.Street, input.City, input.ZipCode);
var order = new Order(Guid.NewGuid(), shippingAddress);
foreach (var item in input.Items)
{
order.AddOrderItem(item.ProductId, item.Quantity, item.Price);
}
await _orderRepository.AddAsync(order);
}
}
```
The application service coordinate everything but let domain objects handle actual business rules. Clean separation!
**3. The Infrastructure Layer (`MyProject.Infrastructure`) - The Technical Guy**
This where we implement all interfaces we defined in domain. Entity Framework Core, email services, API clients - all technical plumbing live here.
```csharp
// In MyProject.Infrastructure/Orders/EfCoreOrderRepository.cs
public class EfCoreOrderRepository : IOrderRepository
{
private readonly MyDbContext _dbContext;
public EfCoreOrderRepository(MyDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<Order> GetAsync(Guid id)
{
// EF Core logic to get the order
return await _dbContext.Orders.FindAsync(id);
}
public async Task AddAsync(Order order)
{
await _dbContext.Orders.AddAsync(order);
}
// ... other implementations
}
```
### **ABP Framework: The Shortcut (Because We Lazy)**
Look, setting all this up from scratch pain. That where **ABP Framework** come in clutch. It basically DDD and layered architecture on steroids, and it do all boring setup work for you.
ABP not just talk talk - it walk walk. When you create new ABP solution, boom! Perfect project structure, all layered and DDD-compliant, ready to go.
Here what you get out of box:
* **Base Classes:** `AggregateRoot`, `Entity`, `ValueObject` - all with good stuff like optimistic concurrency and domain events. No more writing boilerplate.
* **Generic Repositories:** No more writing `IRepository` interfaces for every single entity. ABP give you `IRepository<TEntity, TKey>` with all standard CRUD methods. Just inject it and go.
* **Application Services:** Inherit from `ApplicationService` and boom - you done. It handle validation, authorization, exception handling, all that cross-cutting concern stuff without cluttering your actual business logic.
With ABP, our `OrderAppService` become way cleaner:
```csharp
// In ABP project, this much cleaner
public class OrderAppService : ApplicationService, IOrderAppService
{
private readonly IRepository<Order, Guid> _orderRepository;
public OrderAppService(IRepository<Order, Guid> orderRepository)
{
_orderRepository = orderRepository;
}
public async Task CreateAsync(CreateOrderDto input)
{
// ... same logic as before, but using ABP generic repository
var order = new Order(...);
await _orderRepository.InsertAsync(order);
}
}
```
### **Wrapping Up**
Look, I get it - this stuff take discipline and it not always fastest way to get features out door. But here thing: when you actually layer your app properly and put solid Domain Model at center, you end up with software that not suck to maintain.
Your code start speaking language of business instead of some random technical jargon. That whole point of DDD - make your code reflect what you actually building for.
Yeah, it take work upfront, but payoff huge. And frameworks like ABP make journey way less painful. Trust me, your future self will thank you when you not debugging spaghetti code at 2 AM.
What you think? You try this approach before, or you still stuck in spaghetti code phase? Let me know in comments!

333
docs/en/Community-Articles/2025-09-11-Best-Practices-Guide-for-REST-API-Design/post.md

@ -0,0 +1,333 @@
# Best Practices Guide for REST API Design
This guide compiles best practices for building robust, scalable, and sustainable RESTful APIs, based on information gathered from various sources.
## 1. Fundamentals of REST Architecture
REST is based on specific constraints and principles that support features like simplicity, scalability, and statelessness. The six core principles of RESTful architecture are:
- **Uniform Interface**: This is about consistency. You use standard HTTP methods (GET, POST, PUT, DELETE) and URIs to interact with resources. The client knows how to talk to the server without needing some custom instruction manual.
- **Client-Server**: The client (e.g., a frontend app) and the server are separate. The server handles data and logic, the client handles the user interface. They can evolve independently as long as the API contract doesn't change.
- **Stateless**: This is a big one. The server doesn't remember anything about the client between requests. Every single request must contain all the info needed to process it (like an auth token). This is key for scalability.
- **Cacheable**: Responses should declare whether they can be cached or not. Good caching can massively improve performance and reduce server load.
- **Layered System**: You can have things like proxies or load balancers between the client and the server without the client knowing. It just talks to one endpoint, and the layers in between handle the rest.
- **Code on Demand (Optional)**: This is the only optional one. It means the server can send back executable code (like JavaScript) to the client. Less common in the world of modern SPAs, but it's part of the spec.
## 2. URI Design and Naming Conventions
The URI structure is critical for making your API understandable and intuitive.
### Use Nouns Instead of Verbs
Your URIs should represent things (resources), not actions. The HTTP method already tells you what the action is.
- **Good:** `/api/users`
- **Bad:** `/api/getUsers`
### Use Plural Nouns for Resource Names
Stick with plural nouns for collections. It keeps things consistent, even when you're accessing a single item from that collection.
- **Get all users:** `GET /api/users`
- **Get a single user:** `GET /api/users/{id}`
### Use Nested Routes to Show Relationships
If a resource only exists in the context of another (like a user's orders), reflect that in the URL.
- **Good:** `/api/users/{userId}/orders` (All orders for a user)
- **Bad:** `/api/orders?userId={userId}`
- **Good:** `/api/users/{userId}/orders/{orderId}` (A specific order for a user)
**Note:** Use this structure only if the child resource is tightly coupled to the parent. Avoid nesting deeper than two or three levels, as this can complicate the URIs.
### Path Parameters vs. Query Parameters
Use the correct parameter type based on its function.
- **Path Parameters (`/users/{id}`):** Use these to identify a specific resource or a collection. They are mandatory for the endpoint to resolve.
- *Example:* `GET /api/users/123` uniquely identifies user 123.
- **Query Parameters (`?key=value`):** Use these for optional actions like filtering, sorting, or pagination on a collection.
- *Example:* `GET /api/users?role=admin&sort=lastName` filters the user collection.
### Keep the URL Structure Consistent
- **Use lowercase letters:** Since some systems are case-sensitive, always use lowercase in URIs for consistency.
- *Example:* Use `/api/product-offers` instead of `/api/Product-Offers`.
- **Use special characters correctly:** Use characters like `/`, `?`, and `#` only for their defined purposes.
- *Example:* To get comments for a specific post, use the path `/posts/123/comments`. To filter those comments, use a query parameter: `/posts/123/comments?authorId=45`.
## 3. Correct Usage of HTTP Methods
Each HTTP method has a specific purpose. Sticking to these standards makes your API predictable.
| **HTTP Method** | **Description** | **Idempotent*** | **Safe**** |
| --------------- | --------------------------------------------------------------------------- | --------------- | ---------- |
| **GET** | Retrieves a resource or a collection of resources. | Yes | Yes |
| **POST** | Creates a new resource. | No | No |
| **PUT** | Updates an existing resource completely or creates it if it does not exist. | Yes | No |
| **PATCH** | Partially updates an existing resource. | No | No |
| **DELETE** | Deletes a resource. | Yes | No |
- **Idempotent:** Doing it once has the same effect as doing it 100 times. Deleting a user is idempotent; once it's gone, it's gone.
- **Safe:** The request doesn't change anything on the server. GET is safe.
**Example in practice:**
Let's consider a resource endpoint for a collection of articles: `/api/articles`.
- **`GET /api/articles`**: Retrieves a list of all articles.
- **`GET /api/articles/123`**: Retrieves the specific article with ID 123.
- **`POST /api/articles`**: Creates a new article. The data for the new article is sent in the request body.
- **`PUT /api/articles/123`**: Replaces the entire article with ID 123 using the new data sent in the request body.
- **`PATCH /api/articles/123`**: Partially updates the article with ID 123. For example, you could send only the `{"title": "New Title"}` in the request body to update just the title.
- **`DELETE /api/articles/123`**: Deletes the article with ID 123.
## 4. Data Exchange and Responses
### Prefer the JSON Format
It's the standard. It's lightweight, human-readable, and every language can parse it easily. Send and receive your data as JSON.
- *Example Request Body:*
```
{
"title": "Best Practices for APIs",
"authorId": 5,
"content": "An article about designing great APIs..."
}
```
### Use Appropriate HTTP Status Codes
Use standard HTTP status codes to provide clear information to the client about the outcome of their request.
- **2xx (Success):**
- `200 OK`: The request was successful. (For GET, PUT, PATCH)
- `201 Created`: The resource was successfully created. (For POST) The response should include a `Location` header with the URI of the new resource.
- *Example:* `POST /api/articles` responds with `201 Created` and the header `Location: /api/articles/124`.
- `204 No Content`: The request was successful, but there is no response body. (For DELETE)
- **4xx (Client Error):**
- `400 Bad Request`: Invalid request (e.g., missing or incorrect data).
- `401 Unauthorized`: Authentication is required.
- `403 Forbidden`: No permission.
- `404 Not Found`: The requested resource could not be found.
- **5xx (Server Error):**
- `500 Internal Server Error`: An unexpected error occurred on the server.
### Provide Clear and Consistent Error Responses
When something goes wrong, give back a useful JSON error message. Your future self and any developer using your API will thank you.
- *Example of a detailed error response:*
```
{
"type": "[https://---.com/probs/validation-error](https://example.com/probs/validation-error)",
"title": "Your request parameters didn't validate.",
"status": 400,
"detail": "The 'email' field must be a valid email address.",
"instance": "/api/users"
}
```
## 5. Performance Optimization
Optimizing API performance is crucial for providing a good user experience and ensuring the scalability of your service. Key strategies include caching, efficient data retrieval, and controlling traffic.
### Caching
Caching is one of the most effective ways to improve performance. By storing and reusing frequently accessed data, you can significantly reduce latency and server load.
- **How it works:** Caching can be implemented at various levels (client-side, CDN, server-side). REST APIs can facilitate this by using standard HTTP caching headers.
- **Key Headers:**
- `Cache-Control`: Tells the client how long to cache something (e.g., `public, max-age=600`).
- `ETag`: A unique version identifier for a resource. The client can send this back in an `If-None-Match` header. If the data hasn't changed, you can just return `304 Not Modified` with an empty body, saving bandwidth.
- `Last-Modified`: Indicates when the resource was last changed. Similar to `ETag`, it can be used for conditional requests with the `If-Modified-Since` header.
- *Example Response Header for Caching:*
```
Cache-Control: public, max-age=600
ETag: "x234dff"
```
### Filtering, Sorting, and Pagination
For endpoints that return lists of resources, it's inefficient to return the entire dataset at once, especially if it's large. Implementing these features gives clients more control over the data they receive.
- **Filtering:** Allows clients to narrow down the result set based on specific criteria. This reduces the amount of data transferred and makes it easier for the client to find what it needs.
- *Example:* `GET /api/orders?status=shipped&customer_id=123`
- **Sorting:** Enables clients to request the data in a specific order. A common convention is to specify the field to sort by and the direction (ascending or descending).
- *Example:* `GET /api/users?sort=lastName_asc` or `GET /api/products?sort=-price` (the `-` indicates descending order).
- **Pagination:** Breaks down a large result set into smaller, manageable chunks called "pages". This prevents overloading the server and client with massive amounts of data in a single response.
- *Example:* `GET /api/articles?page=2&pageSize=20` (retrieves the second page, with 20 articles per page).
### Rate Limiting
Protect your API from abuse by limiting how many requests a client can make in a given time. If they exceed the limit, return a `429 Too Many Requests`.
It's also super helpful to return these headers so the client knows what's going on:
- `X-RateLimit-Limit`: Total requests allowed.
- `X-RateLimit-Remaining`: How many requests they have left.
- `Retry-After`: How many seconds they should wait before trying again.
## 6. Security
Security is not an optional feature; it must be a core part of your API design.
- **Always Use HTTPS (TLS):** Encrypt all traffic to prevent man-in-the-middle attacks. There are no exceptions to this rule for production APIs.
- **Authentication & Authorization:**
- **Authentication** (Who are you?): Use a standard like OAuth 2.0 or JWT Bearer Tokens.
- **Authorization** (What are you allowed to do?): Check permissions for every request. Just because a user is logged in doesn't mean they can delete another user's data.
- **Input Validation**: Always validate and sanitize data coming from the client to prevent injection attacks. If the data is bad, reject it with a `400 Bad Request`.
- **Use Security Headers**: Add headers like `Strict-Transport-Security` and `Content-Security-Policy` to add extra layers of browser-level protection.
## 7. API Lifecycle Management
### Versioning
Your API will change. Versioning lets you make breaking changes without messing up existing clients. The most common way is in the URI.
- **URI Versioning (Most Common):** `https://api.example.com/v1/users`
- **Pros:** Simple, explicit, and easy to explore in a browser.
- **Header Versioning:** The client requests a version via a custom HTTP header.
- *Example:* `Accept-Version: v1`
- **Pros:** Keeps the URI clean.
- **Media Type Versioning (Content Negotiation):** The version is included in the `Accept` header.
- *Example:* `Accept: application/vnd.example.v1+json`
- **Pros:** Technically the "purest" REST approach.
### Backward Compatibility & Deprecation
When you release v2, don't just kill v1. Keep it running for a while and communicate a clear shutdown schedule to your users.
### Documentation
An API is only as good as its documentation. Use tools like the **OpenAPI Specification (formerly Swagger)** to generate interactive, machine-readable documentation. Good docs should include:
- Authentication instructions.
- Clear explanations of each endpoint.
- Request/response examples.
- Error code definitions.
## 8. Monitoring and Testing
### Monitoring and Logging
To ensure your API is reliable, you must monitor its health and log important events.
- **Structured Logging:** Log in a machine-readable format like JSON. Include a `correlationId` to track a single request across multiple services.
- **Monitoring:** Track key metrics like latency (response time), error rate, and requests per second. Use tools like Prometheus, Grafana, or Datadog to visualize these metrics and set up alerts.
### API Testing
Thorough testing is essential to prevent bugs and regressions.
- **Unit Tests:** Test individual components and business logic in isolation.
- **Integration Tests:** Test the interaction between different parts of your API, including the database.
- **Contract Tests:** Verify that your API adheres to its documented contract (e.g., the OpenAPI spec).
## 9. Advanced Level: HATEOAS
**HATEOAS (Hypermedia as the Engine of Application State)** is a REST principle that allows your API to be self-documenting and more discoverable. It involves including hyperlinks in responses for actions that can be performed on the relevant resource.
For example, a response for a user resource might look like this:
```
{
"id": 1,
"name": "Deo Steel",
"links": [
{ "rel": "self", "href": "/users/1", "method": "GET" },
{ "rel": "update", "href": "/users/1", "method": "PUT" },
{ "rel": "delete", "href": "/users/1", "method": "DELETE" }
]
}
```
This way, the client can follow the links in the response to take the next step, rather than manually constructing the URIs.
## 10. A Practical Shortcut: Leveraging Frameworks like ABP.IO
Okay, that was a lot. While it's crucial to understand all these principles, you don't have to build everything from scratch. Modern frameworks can handle a ton of this for you. I work a lot in the .NET space, and **ABP Framework** is a great example of this.
Here’s how it automates many of the things we just talked about:
- **Automatic API Controllers**: You write your business logic in an "Application Service," and ABP automatically creates the REST API endpoints for you, following all the correct naming and HTTP method conventions. (Covers sections 2 & 3).
- **Built-in Best Practices**:
- **Standardized Error Responses**: It has a built-in exception handling system that automatically generates clean, consistent JSON error responses. (Covers section 4).
- **Input Validation**: It has automatic validation for your DTOs. If a request is invalid, it returns a detailed `400 Bad Request` without you writing a single line of code for it. (Covers section 6).
- **Paging, Sorting, Filtering**: You get these out of the box by just using their predefined interfaces. (Covers section 5).
- **Integrated Security**: It comes with a full auth system. You just add an `[Authorize]` attribute to a method, and it handles the rest. It also automatically manages database transactions per API request (Unit of Work) to ensure data consistency. (Covers section 6).
- **Automatic Documentation**: It automatically generates an OpenAPI/Swagger UI for your API, which is a massive help for anyone who needs to use it. (Covers section 7).
Using a framework like this lets you focus on your core business logic, confident that the foundation is built on solid, established best practices.

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/BenchmarkDotnet.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 759 KiB

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Disruptor.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MemoryPack.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MessagePack.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Polly.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

157
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Post.md

@ -0,0 +1,157 @@
# High-Performance .NET Libraries You Didn’t Know You Needed
Whether you’re building enterprise apps, microservices, or SaaS platforms, using the right libraries can help you ship faster and scale effortlessly.
Here are some **high-performance .NET libraries** you might not know but definitely should.
## 1. BenchmarkDotNet – Measure before you optimize
![BenchmarkDotnet](BenchmarkDotnet.png)
BenchmarkDotNet makes it simple to **benchmark .NET code with precision**.
- Easy setup with `[Benchmark]` attributes
- Generates detailed performance reports
- Works with .NET Core, .NET Framework, and Mono
Perfect for spotting bottlenecks in APIs, background services, or CPU-bound operations.
- **NuGet** (40M downloads) 🔗 https://www.nuget.org/packages/BenchmarkDotNet
- **GitHub** (11k stars) 🔗 https://github.com/dotnet/BenchmarkDotNet
## 2. MessagePack – Fastest JSON serializer
Need speed beyond System.Text.Json or Newtonsoft.Json? MessagePack is the fastest serializer for C# (.NET, .NET Core, Unity, Xamarin). MessagePack has a compact binary size and a full set of general-purpose expressive data types. Ideal for high-traffic APIs, IoT data processing, and microservices.
![MessagePack Benchmark](MessagePack.png)
- **NuGet** (204M downloads) 🔗 https://www.nuget.org/packages/messagepack
- **GitHub** (6.4K stars) 🔗 https://github.com/MessagePack-CSharp/MessagePack-CSharp
## 3. Polly – Resilience at scale
![Polly](Polly.png)
In distributed systems, failures are inevitable. **Polly** provides a fluent way to add **retry, circuit-breaker, and fallback** strategies.
- Handle transient faults gracefully
- Improve uptime and user experience
- Works seamlessly with HttpClient and gRPC
A must-have for cloud-native .NET applications.
- **NuGet** (1B downloads) 🔗 https://www.nuget.org/packages/polly/
- **GitHub** (14K stars) 🔗 https://github.com/App-vNext/Polly
## 4. MemoryPack – Zero-cost binary serialization
If you need **blazing-fast serialization** for in-memory caching or network transport, **MemoryPack** is a game-changer.
- Zero-copy, zero-alloc serialization
- Perfect for high-performance caching or game servers
- Strongly typed and version-tolerant
![MemoryPack](MemoryPack.png)
Great for real-time multiplayer games, chat apps, or financial systems.
- **NuGet** (5.3M downloads) 🔗 https://www.nuget.org/packages/MemoryPack
- **GitHub** (4K stars) 🔗 https://github.com/Cysharp/MemoryPack
## 5. WolverineFx – Ultra-low latency messaging
![wolverine](wolverine-logo.png)
MediatR was one of the best mediator libraries, but now it's a paid library. Wolverine is a toolset for command execution and message handling within .NET applications. The killer feature of Wolverine is its very efficient command execution pipeline that can be used as:
- An [inline "mediator" pipeline](https://wolverinefx.net/tutorials/mediator.html) for executing commands
- A [local message bus](https://wolverinefx.net/guide/messaging/transports/local.html) for in-application communication
- A full-fledged [asynchronous messaging framework](https://wolverinefx.net/guide/messaging/introduction.html) for robust communication and interaction between services when used in conjunction with low-level messaging infrastructure tools like RabbitMQ
- With the [WolverineFx.Http](https://wolverinefx.net/guide/http/) library, Wolverine's execution pipeline can be used directly as an alternative ASP.NET Core Endpoint provider
*image below is from [codecrash.net](https://www.codecrash.net/2024/02/06/Mediatr-versus-Wolverine-performance.html)*
![WolverineFx](wolverine.png)
WolverineFx is great for cleanly separating business logic from controllers while unifying in-process mediator patterns with powerful distributed messaging in a single, high-performance .NET library.
- **NuGet** (1.5M downloads) 🔗 https://www.nuget.org/packages/WolverineFx
- **GitHub** (1.7K stars) 🔗 https://github.com/JasperFx/wolverine
## 6. Disruptor-net – Next generation free .NET mediator
The Disruptor is a high-performance inter-thread message passing framework. A lock-free ring buffer for ultra-low latency messaging.
Features are:
- Zero memory allocation after initial setup (the events are pre-allocated).
- Push-based consumers.
- Optionally lock-free.
- Configurable wait strategies.
![Disruptor](Disruptor.png)
- **NuGet** (1.2M downloads) 🔗 https://www.nuget.org/packages/Disruptor/
- **GitHub** (1.3K stars) 🔗 https://github.com/disruptor-net/Disruptor-net
## 7. CliWrap - Running command-line processes
![CLIWrap](cliwrap.png)
CliWrap makes it easy to **run and manage external CLI processes in .NET**.
- Fluent, task-based API for starting commands
- Streams standard input/output and error in real time
- Supports cancellation, timeouts, and piping between processes
Ideal for automation, build tools, and integrating external executables.
- **NuGet** (14.1M downloads) 🔗 https://www.nuget.org/packages/CliWrap
- **GitHub** (4.7K stars) 🔗 https://github.com/Tyrrrz/CliWrap
---
## Hidden Libs from the Community
### Sylvan.Csv & **Sep**
- **Sylvan.Csv**: Up to *10× faster* and *100× less memory allocations* than `CsvHelper`, making CSV processing lightning-fast. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com))
- **Sep**: Even faster than Sylvan, but trades off some flexibility. Great when performance matters more than API richness. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com))
### String Parsing: **csFastFloat**
- Parses `float` and `double` around *8–9× faster* than `.Parse` methods—perfect for high-volume parsing tasks. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com))
### CySharp’s Suite: MemoryPack, MasterMemory, SimdLinq
- **MemoryPack**: One of the fastest serializers available, with low allocations and high throughput. Ideal for Web APIs or microservices. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com))
- **MasterMemory**: Designed for databases or config storage. Claims *4,700× faster than SQLite* with zero-allocations per query. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com))
- **SimdLinq**: SIMD-accelerated LINQ operations supporting a broader set of methods than .NET's built-in SIMD. Works when slight floating-point differences are acceptable. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com))
### Jil – JSON Deserializer
- Ultra-fast JSON (de)serializer with low memory overhead, used in high-scale systems. ([Performance is a Feature!](https://www.mattwarren.org/2014/09/05/stack-overflow-performance-lessons-part-2/?utm_source=chatgpt.com))
### StackExchange.NetGain – WebSocket Efficiency
- High-performance WebSocket server library designed for low-latency IO scenarios. (Now mostly replaced by Kestrel's built-in support, but worth knowing.) ([GitHub](https://github.com/StackExchange/NetGain?utm_source=chatgpt.com))
### Math Libraries: Math.NET Numerics & ILNumerics
- **Math.NET Numerics**: Core numerical methods and matrix math, similar to BLAS/LAPACK. ([Wikipedia](https://en.wikipedia.org/wiki/Math.NET_Numerics?utm_source=chatgpt.com))
- **ILNumerics**: Efficient numerical arrays with parallelized processing, loop unrolling and cache optimizations. Great for scientific computing. ([Wikipedia](https://en.wikipedia.org/wiki/ILNumerics?utm_source=chatgpt.com))

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cliwrap.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 KiB

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

BIN
docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

803
docs/en/Community-Articles/2025-09-11-aws-secrets-manager-in-abp-framework/article.md

@ -0,0 +1,803 @@
# Step-by-Step AWS Secrets Manager Integration in ABP Framework Projects
## Introduction
In this article, we are going to discuss how to secure sensitive data in ABP Framework projects using AWS Secrets Manager and explain various aspects and concepts of _secret_ data management. We will explain step-by-step AWS Secrets Manager integration.
## What is the Problem?
Modern applications must store sensitive data such as API keys, database connection strings, OAuth client credentials, and other similar sensitive data. These are at the center of functionality but if stored in the wrong place can be massive security issues.
At build time, the first place that comes to mind is usually **appsettings.json**. This is a configuration file; it is not a secure place to store secret information, especially in production.
### Common Security Risks:
- **Plain text storage**: Plain text storage of passwords
- **Exposure to version control**: Secrets are rendered encrypted in Git repositories
- **No access control**: Anyone who has file access can see the secrets
- **No rotation**: We must change them manually
- **No audit trail**: Who accessed which secret when is not known
## .NET User Secrets Tool vs AWS Secrets Manager
**User Secrets (.NET Secret Manager Tools)** is a dev environment only, local file-based solution that keeps sensitive information out of the repository.
**AWS Secrets Manager** is production. It's a centralized, encrypted, and audited secret management service.
| Feature | User Secrets (Dev) | AWS Secrets Manager (Prod) |
| ---------------------- | ---------------------------- | ------------------------------ |
| Scope | Local developer machine | All environments (dev/stage/prod) |
| Storage | JSON in user profile | Managed service (centralized) |
| Encryption | None (plain text file) | Encrypted with KMS |
| Access Control | OS file permissions | IAM policies |
| Rotation | None | Yes (automatic) |
| Audit / Traceability | None | Yes (CloudTrail) |
| Typical Usage | Quick dev outside repo | Production secret management |
---
## AWS Secrets Manager
Especially designed to securely store and handle sensitive and confidential data for our applications. It even supports features such as secret rotation, replication, and many more.
AWS Secrets Manager offers a trial of 30 days. After that, there is a $0.40 USD/month charge per stored secret. There is also a $0.05 USD fee per 10,000 API requests.
### Key Features:
- **Automatic encryption**: KMS automatic encryption
- **Automatic rotation**: Scheduled secret rotation
- **Fine-grained access control**: IAM fine-grained access control
- **Audit logging**: Full audit logging with CloudTrail
- **Cross-region replication**: Cross-region replication
- **API integration**: Programmatic access support
---
## Step 1: AWS Secrets Manager Setup
### 1.1 Creating a Secret in AWS Console
First, search for the Secrets Manager service in the AWS Management Console.
1. **AWS Console****Secrets Manager** → **Store a new secret**
2. Select **Secret type**:
- **Other type of secret** (For custom key-value pairs)
- **Credentials for RDS database** (For databases)
- **Credentials for DocumentDB database**
- **Credentials for Redshift cluster**
3. Enter **Secret value**:
```json
{
"ConnectionString": "Server=myserver;Database=mydb;User Id=myuser;Password=mypassword;"
}
```
4. Set **Secret name**: `prod/ABPAWSTest/ConnectionString`
5. Add **Description**: "ABP Framework connection string for production"
6. Choose **Encryption key** (default KMS key is sufficient)
7. Configure **Automatic rotation** settings (optional)
### 1.2 IAM Permissions
Create an IAM policy for secret access:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": "arn:aws:secretsmanager:eu-north-1:588118819172:secret:prod/ABPAWSTest/ConnectionString-*"
}
]
}
```
---
## Step 2: ABP Framework Project Setup
### 2.1 NuGet Packages
Add the required AWS packages to your project:
```bash
dotnet add package AWSSDK.SecretsManager
dotnet add package AWSSDK.Extensions.NETCore.Setup
```
### 2.2 Configuration Files
**appsettings.json** (Development):
```json
{
"AWS": {
"Profile": "default",
"Region": "eu-north-1",
"AccessKey": "YOUR_ACCESS_KEY",
"SecretKey": "YOUR_SECRET_KEY"
},
"SecretsManager": {
"SecretName": "prod/ABPAWSTest/ConnectionString",
"SecretArn": "arn:aws:secretsmanager:eu-north-1:588118819172:secret:prod/ABPAWSTest/ConnectionString-xtYQxv"
}
}
```
**appsettings.Production.json** (Production):
```json
{
"AWS": {
"Region": "eu-north-1"
// Use environment variables or IAM roles in production
},
"SecretsManager": {
"SecretName": "prod/ABPAWSTest/ConnectionString"
}
}
```
### 2.3 Environment Variables (Production)
```bash
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_DEFAULT_REGION=eu-north-1
```
---
## Step 3: AWS Integration Implementation
### 3.1 Program.cs Configuration
```csharp
using Amazon;
using Amazon.SecretsManager;
public class Program
{
public async static Task<int> Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// AWS Secrets Manager configuration
var awsOptions = builder.Configuration.GetAWSOptions();
// Read AWS credentials from appsettings
var accessKey = builder.Configuration["AWS:AccessKey"];
var secretKey = builder.Configuration["AWS:SecretKey"];
var region = builder.Configuration["AWS:Region"];
if (!string.IsNullOrEmpty(accessKey) && !string.IsNullOrEmpty(secretKey))
{
awsOptions.Credentials = new Amazon.Runtime.BasicAWSCredentials(accessKey, secretKey);
}
if (!string.IsNullOrEmpty(region))
{
awsOptions.Region = RegionEndpoint.GetBySystemName(region);
}
builder.Services.AddDefaultAWSOptions(awsOptions);
builder.Services.AddAWSService<IAmazonSecretsManager>();
// ... ABP configuration
await builder.AddApplicationAsync<YourAppModule>();
var app = builder.Build();
await app.InitializeApplicationAsync();
await app.RunAsync();
}
}
```
### 3.2 Secrets Manager Service
**Interface:**
```csharp
public interface ISecretsManagerService
{
Task<string> GetSecretAsync(string secretName);
Task<T> GetSecretAsync<T>(string secretName) where T : class;
Task<string> GetConnectionStringAsync();
}
```
**Implementation:**
```csharp
using Amazon.SecretsManager;
using Amazon.SecretsManager.Model;
using Volo.Abp.DependencyInjection;
using System.Text.Json;
public class SecretsManagerService : ISecretsManagerService, IScopedDependency
{
private readonly IAmazonSecretsManager _secretsManager;
private readonly IConfiguration _configuration;
private readonly ILogger<SecretsManagerService> _logger;
public SecretsManagerService(
IAmazonSecretsManager secretsManager,
IConfiguration configuration,
ILogger<SecretsManagerService> logger)
{
_secretsManager = secretsManager;
_configuration = configuration;
_logger = logger;
}
public async Task<string> GetSecretAsync(string secretName)
{
try
{
var request = new GetSecretValueRequest
{
SecretId = secretName
};
var response = await _secretsManager.GetSecretValueAsync(request);
_logger.LogInformation("Successfully retrieved secret: {SecretName}", secretName);
return response.SecretString;
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to retrieve secret: {SecretName}", secretName);
throw;
}
}
public async Task<T> GetSecretAsync<T>(string secretName) where T : class
{
var secretValue = await GetSecretAsync(secretName);
try
{
return JsonSerializer.Deserialize<T>(secretValue)
?? throw new InvalidOperationException($"Failed to deserialize secret {secretName}");
}
catch (JsonException ex)
{
_logger.LogError(ex, "Failed to deserialize secret {SecretName}", secretName);
throw;
}
}
public async Task<string> GetConnectionStringAsync()
{
var secretName = _configuration["SecretsManager:SecretName"]
?? throw new InvalidOperationException("SecretsManager:SecretName configuration is missing");
return await GetSecretAsync(secretName);
}
}
```
---
## Step 4: Usage Examples
### 4.1 Using in Application Service
```csharp
[RemoteService(false)]
public class DatabaseService : ApplicationService
{
private readonly ISecretsManagerService _secretsManager;
public DatabaseService(ISecretsManagerService secretsManager)
{
_secretsManager = secretsManager;
}
public async Task<string> GetDatabaseConnectionAsync()
{
// Get connection string from AWS Secrets Manager
var connectionString = await _secretsManager.GetConnectionStringAsync();
// Use the connection string
return connectionString;
}
public async Task<ApiConfiguration> GetApiConfigAsync()
{
// Deserialize JSON secret
var config = await _secretsManager.GetSecretAsync<ApiConfiguration>("prod/MyApp/ApiConfig");
return config;
}
}
```
### 4.2 DbContext Configuration
```csharp
public class YourDbContextConfigurer
{
public static void Configure(DbContextOptionsBuilder<YourDbContext> builder, string connectionString)
{
builder.UseSqlServer(connectionString);
}
public static void Configure(DbContextOptionsBuilder<YourDbContext> builder, DbConnection connection)
{
builder.UseSqlServer(connection);
}
}
// Usage in Module
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var secretsManager = context.Services.GetRequiredService<ISecretsManagerService>();
// Get secret at startup and pass to DbContext
var connectionString = await secretsManager.GetConnectionStringAsync();
context.Services.AddAbpDbContext<YourDbContext>(options =>
{
options.AddDefaultRepositories(includeAllEntities: true);
options.DbContextOptions.UseSqlServer(connectionString);
});
}
```
---
## Step 5: Best Practices & Security
### 5.1 Security Best Practices
1. **Environment-based Configuration:**
- Development: appsettings.json
- Production: Environment variables or IAM roles
2. **Principle of Least Privilege:**
```json
{
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:region:account:secret:specific-secret-*"
}
```
3. **Secret Rotation:**
- Set up automatic rotation
- Custom rotation logic with Lambda functions
4. **Caching Strategy:**
```csharp
public class CachedSecretsManagerService : ISecretsManagerService
{
private readonly IMemoryCache _cache;
private readonly SecretsManagerService _secretsManager;
public async Task<string> GetSecretAsync(string secretName)
{
var cacheKey = $"secret:{secretName}";
if (_cache.TryGetValue(cacheKey, out string cachedValue))
{
return cachedValue;
}
var value = await _secretsManager.GetSecretAsync(secretName);
_cache.Set(cacheKey, value, TimeSpan.FromMinutes(30));
return value;
}
}
```
### 5.2 Error Handling
```csharp
public async Task<string> GetSecretWithRetryAsync(string secretName)
{
const int maxRetries = 3;
var delay = TimeSpan.FromSeconds(1);
for (int i = 0; i < maxRetries; i++)
{
try
{
return await GetSecretAsync(secretName);
}
catch (AmazonSecretsManagerException ex) when (i < maxRetries - 1)
{
_logger.LogWarning(ex, "Retry {Attempt} for secret {SecretName}", i + 1, secretName);
await Task.Delay(delay);
delay = TimeSpan.FromMilliseconds(delay.TotalMilliseconds * 2); // Exponential backoff
}
}
throw new InvalidOperationException($"Failed to retrieve secret {secretName} after {maxRetries} attempts");
}
```
### 5.3 Performance Optimization
```csharp
public class PerformantSecretsManagerService : ISecretsManagerService
{
private readonly IAmazonSecretsManager _secretsManager;
private readonly IMemoryCache _cache;
private readonly ILogger<PerformantSecretsManagerService> _logger;
private readonly SemaphoreSlim _semaphore = new(1, 1);
public async Task<string> GetSecretAsync(string secretName)
{
var cacheKey = $"secret:{secretName}";
// Try to get from cache first
if (_cache.TryGetValue(cacheKey, out string cachedValue))
{
return cachedValue;
}
// Use semaphore to prevent multiple concurrent requests for the same secret
await _semaphore.WaitAsync();
try
{
// Double-check pattern
if (_cache.TryGetValue(cacheKey, out cachedValue))
{
return cachedValue;
}
// Fetch from AWS
var value = await GetSecretFromAwsAsync(secretName);
// Cache for 30 minutes
_cache.Set(cacheKey, value, TimeSpan.FromMinutes(30));
return value;
}
finally
{
_semaphore.Release();
}
}
}
```
---
## Step 6: Testing & Debugging
### 6.1 Unit Testing
```csharp
public class SecretsManagerServiceTests : AbpIntegratedTest<TestModule>
{
private readonly ISecretsManagerService _secretsManager;
public SecretsManagerServiceTests()
{
_secretsManager = GetRequiredService<ISecretsManagerService>();
}
[Fact]
public async Task Should_Get_Connection_String()
{
// Act
var connectionString = await _secretsManager.GetConnectionStringAsync();
// Assert
connectionString.ShouldNotBeNullOrEmpty();
connectionString.ShouldContain("Server=");
}
[Fact]
public async Task Should_Deserialize_Json_Secret()
{
// Arrange
var secretName = "test/json/config";
// Act
var config = await _secretsManager.GetSecretAsync<TestConfig>(secretName);
// Assert
config.ShouldNotBeNull();
config.ApiKey.ShouldNotBeNullOrEmpty();
}
}
```
### 6.2 Mock Implementation for Testing
```csharp
public class MockSecretsManagerService : ISecretsManagerService, ISingletonDependency
{
private readonly Dictionary<string, string> _secrets = new()
{
["prod/ABPAWSTest/ConnectionString"] = "Server=localhost;Database=TestDb;Trusted_Connection=true;",
["prod/MyApp/ApiKey"] = "test-api-key",
["prod/MyApp/Config"] = """{"ApiUrl": "https://api.test.com", "Timeout": 30}"""
};
public Task<string> GetSecretAsync(string secretName)
{
if (_secrets.TryGetValue(secretName, out var secret))
{
return Task.FromResult(secret);
}
throw new ArgumentException($"Unknown secret: {secretName}");
}
public async Task<T> GetSecretAsync<T>(string secretName) where T : class
{
var json = await GetSecretAsync(secretName);
return JsonSerializer.Deserialize<T>(json)
?? throw new InvalidOperationException($"Failed to deserialize {secretName}");
}
public Task<string> GetConnectionStringAsync()
{
return GetSecretAsync("prod/ABPAWSTest/ConnectionString");
}
}
```
### 6.3 Integration Testing
```csharp
public class SecretsManagerIntegrationTests : IClassFixture<WebApplicationFactory<Program>>
{
private readonly WebApplicationFactory<Program> _factory;
private readonly HttpClient _client;
public SecretsManagerIntegrationTests(WebApplicationFactory<Program> factory)
{
_factory = factory;
_client = _factory.CreateClient();
}
[Fact]
public async Task Should_Connect_To_Database_With_Secret()
{
// Arrange & Act
var response = await _client.GetAsync("/api/health");
// Assert
response.EnsureSuccessStatusCode();
}
}
```
---
## Step 7: Monitoring & Observability
### 7.1 CloudWatch Metrics
```csharp
public class MonitoredSecretsManagerService : ISecretsManagerService
{
private readonly ISecretsManagerService _inner;
private readonly IMetrics _metrics;
private readonly ILogger<MonitoredSecretsManagerService> _logger;
public async Task<string> GetSecretAsync(string secretName)
{
using var activity = Activity.StartActivity("SecretsManager.GetSecret");
activity?.SetTag("secret.name", secretName);
var stopwatch = Stopwatch.StartNew();
try
{
var result = await _inner.GetSecretAsync(secretName);
_metrics.Counter("secrets_manager.requests")
.WithTag("secret_name", secretName)
.WithTag("status", "success")
.Increment();
_metrics.Timer("secrets_manager.duration")
.WithTag("secret_name", secretName)
.Record(stopwatch.ElapsedMilliseconds);
return result;
}
catch (Exception ex)
{
_metrics.Counter("secrets_manager.requests")
.WithTag("secret_name", secretName)
.WithTag("status", "error")
.WithTag("error_type", ex.GetType().Name)
.Increment();
_logger.LogError(ex, "Failed to retrieve secret {SecretName}", secretName);
throw;
}
}
}
```
### 7.2 Health Checks
```csharp
public class SecretsManagerHealthCheck : IHealthCheck
{
private readonly IAmazonSecretsManager _secretsManager;
private readonly ILogger<SecretsManagerHealthCheck> _logger;
public SecretsManagerHealthCheck(
IAmazonSecretsManager secretsManager,
ILogger<SecretsManagerHealthCheck> logger)
{
_secretsManager = secretsManager;
_logger = logger;
}
public async Task<HealthCheckResult> CheckHealthAsync(
HealthCheckContext context,
CancellationToken cancellationToken = default)
{
try
{
// Try to list secrets to verify connection
var request = new ListSecretsRequest { MaxResults = 1 };
await _secretsManager.ListSecretsAsync(request, cancellationToken);
return HealthCheckResult.Healthy("AWS Secrets Manager is accessible");
}
catch (Exception ex)
{
_logger.LogError(ex, "AWS Secrets Manager health check failed");
return HealthCheckResult.Unhealthy("AWS Secrets Manager is not accessible", ex);
}
}
}
// Register in Program.cs
builder.Services.AddHealthChecks()
.AddCheck<SecretsManagerHealthCheck>("secrets-manager");
```
---
## Step 8: Advanced Scenarios
### 8.1 Dynamic Configuration Reload
```csharp
public class DynamicSecretsConfigurationProvider : ConfigurationProvider, IDisposable
{
private readonly ISecretsManagerService _secretsManager;
private readonly Timer _reloadTimer;
private readonly string _secretName;
public DynamicSecretsConfigurationProvider(
ISecretsManagerService secretsManager,
string secretName)
{
_secretsManager = secretsManager;
_secretName = secretName;
// Reload every 5 minutes
_reloadTimer = new Timer(ReloadSecrets, null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
}
private async void ReloadSecrets(object state)
{
try
{
var secretValue = await _secretsManager.GetSecretAsync(_secretName);
var config = JsonSerializer.Deserialize<Dictionary<string, string>>(secretValue);
Data.Clear();
foreach (var kvp in config)
{
Data[kvp.Key] = kvp.Value;
}
OnReload();
}
catch (Exception ex)
{
// Log error but don't throw to avoid crashing the timer
Console.WriteLine($"Failed to reload secrets: {ex.Message}");
}
}
public void Dispose()
{
_reloadTimer?.Dispose();
}
}
```
### 8.2 Multi-Region Failover
```csharp
public class MultiRegionSecretsManagerService : ISecretsManagerService
{
private readonly List<IAmazonSecretsManager> _clients;
private readonly ILogger<MultiRegionSecretsManagerService> _logger;
public MultiRegionSecretsManagerService(
IConfiguration configuration,
ILogger<MultiRegionSecretsManagerService> logger)
{
_logger = logger;
_clients = new List<IAmazonSecretsManager>();
// Create clients for multiple regions
var regions = new[] { "us-east-1", "us-west-2", "eu-west-1" };
foreach (var region in regions)
{
var config = new AmazonSecretsManagerConfig
{
RegionEndpoint = RegionEndpoint.GetBySystemName(region)
};
_clients.Add(new AmazonSecretsManagerClient(config));
}
}
public async Task<string> GetSecretAsync(string secretName)
{
Exception lastException = null;
foreach (var client in _clients)
{
try
{
var request = new GetSecretValueRequest { SecretId = secretName };
var response = await client.GetSecretValueAsync(request);
_logger.LogInformation("Retrieved secret from region {Region}",
client.Config.RegionEndpoint.SystemName);
return response.SecretString;
}
catch (Exception ex)
{
lastException = ex;
_logger.LogWarning(ex, "Failed to retrieve secret from region {Region}",
client.Config.RegionEndpoint.SystemName);
}
}
throw new InvalidOperationException(
"Failed to retrieve secret from all regions", lastException);
}
}
```
---
## Conclusion
AWS Secrets Manager integration with ABP Framework significantly enhances the security of your applications. With this integration:
**Centralized Secret Management**: All secrets are managed centrally
**Better Security**: Encryption through KMS and access control through IAM
**Audit Trail**: Complete recording of who accessed which secret when
**Automatic Rotation**: Secrets can be rotated automatically
**High Availability**: AWS high availability guarantee
**Easy Integration**: Native integration with ABP Framework
**Cost Effective**: Pay only for what you use
**Scalable**: Scales with your application needs
With this post, you can securely utilize AWS Secrets Manager in your ABP Framework applications and bid farewell to secret management concerns in production.
### Key Benefits:
- **Developer Productivity**: No hardcoded secrets in config files
- **Operational Excellence**: Automation of rotation and monitoring
- **Security Compliance**: Meet enterprise security requirements
- **Peace of Mind**: Professional-grade secret management
---
## Additional Resources
- [AWS Secrets Manager Documentation](https://docs.aws.amazon.com/secretsmanager/)
- [ABP Framework Documentation](https://docs.abp.io/)
- [AWS SDK for .NET](https://docs.aws.amazon.com/sdk-for-net/)
- [AWS Security Best Practices](https://aws.amazon.com/architecture/security-identity-compliance/)
- [Sample Project Repository](https://github.com/fahrigedik/AWSIntegrationABP)

BIN
docs/en/Community-Articles/2025-09-11-aws-secrets-manager-in-abp-framework/cover.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

316
docs/en/Community-Articles/2025-09-12-Demystified-Aggregates-in-DDD-&-.NET/post.md

@ -0,0 +1,316 @@
# Demystified Aggregates in DDD & .NET: From Theory to Practice
## Introduction
Domain-Driven Design (DDD) is one of the key foundations of modern software architecture and has taken a strong place in the .NET world. At the center of DDD are Aggregates, which protect the consistency of business rules. While they are one of DDD’s biggest strengths, they’re also one of the most commonly misunderstood ideas. Trying to follow “pure” DDD rules to the letter often clashes with the complexity and performance needs of real-world projects, leaving developers in tough situations. The goal of this article is to take a fresh, practical look at Aggregates and show how they can be applied in a way that works in real life.
----------
### **Chapter 1: Laying the Groundwork: What Is a Classic Aggregate?**
Before jumping into pragmatic shortcuts, let’s make sure we’re all on the same page. To do that, we’ll start with the classic “by the book” definition of an Aggregate and the rules that make it tick.
#### **What Exactly Is an Aggregate?**
At its simplest, an **Aggregate** is a group of related objects (Entities and Value Objects) that are treated as **one unit of change**. And this group has a leader: the **Aggregate Root**.
- **Aggregate Root** → Think of it as the gatekeeper. All outside commands (like “add a product to the order”) must go through the root. You can’t just poke around and change stuff inside.
- **Entity** → Objects within the Aggregate that have their own identity (ID). Example: an `OrderLine` inside an `Order`.
- **Value Object** → Objects without an identity. They’re defined entirely by their values, like an `Address` or `Money`.
The Aggregate’s main purpose isn’t just grouping things together—it’s about **protecting business rules (invariants).** For example: _“an order’s total amount can never be negative.”_ The Aggregate Root makes sure rules like this are never broken.
#### **The Role of Aggregates: Transaction Boundaries**
The most important job of an Aggregate is defining the **transactional consistency boundary**. In other words:
👉 Any change you make inside an Aggregate either **fully succeeds** or **fully fails**. There’s no half-done state.
From a database perspective, when you call `SaveChanges()` or `Commit()`, everything within one Aggregate gets saved in a single transaction. If you add a product and update the total price, those two actions are atomic—they succeed together. Thanks to Aggregates, you’ll never end up in weird states like _“product was added but total wasn’t updated.”_
#### **The Golden Rules of Aggregates**
Classic DDD lays out three golden rules for working with Aggregates:
1. **Talk Only to the Root**
You can’t directly update something like an `OrderLine`. You must go through the root: `Order.AddOrderLine(...)` or `Order.RemoveOrderLine(...)`. That way, the root always enforces the rules.
2. **Reference Other Aggregates by ID Only**
An `Order` shouldn’t hold a `Customer` object directly. Instead, it should just store `CustomerId`. This keeps Aggregates independent and avoids loading massive object graphs.
3. **Change Only One Aggregate per Transaction**
Need to create an order _and_ update loyalty points? Classic DDD says: do it in two steps. First, save the `Order`. Then publish a **domain event** to update the `Customer`. This enables scalability but introduces **eventual consistency**.
#### **A Classic Example: The Order Aggregate in .NET**
Here’s a simple example showing an `Order` Aggregate that enforces a business rule:
```csharp
// Aggregate Root: The entry point and rule enforcer
public class Order
{
public Guid Id { get; private set; }
public Guid CustomerId { get; private set; }
private readonly List<OrderLine> _orderLines = new();
public IReadOnlyCollection<OrderLine> OrderLines => _orderLines.AsReadOnly();
public decimal TotalPrice { get; private set; }
public Order(Guid id, Guid customerId)
{
Id = id;
CustomerId = customerId;
}
public void AddOrderLine(Guid productId, int quantity, decimal price)
{
// Rule 1: Max 10 order lines
if (_orderLines.Count >= 10)
throw new InvalidOperationException("An order can contain at most 10 products.");
// Rule 2: No duplicate products
var existingLine = _orderLines.FirstOrDefault(ol => ol.ProductId == productId);
if (existingLine != null)
throw new InvalidOperationException("This product is already in the order.");
var orderLine = new OrderLine(productId, quantity, price);
_orderLines.Add(orderLine);
RecalculateTotalPrice();
}
private void RecalculateTotalPrice()
{
TotalPrice = _orderLines.Sum(ol => ol.TotalPrice);
}
}
public class OrderLine
{
public Guid Id { get; private set; }
public Guid ProductId { get; private set; }
public int Quantity { get; private set; }
public decimal UnitPrice { get; private set; }
public decimal TotalPrice => Quantity * UnitPrice;
public OrderLine(Guid productId, int quantity, decimal unitPrice)
{
Id = Guid.NewGuid();
ProductId = productId;
Quantity = quantity;
UnitPrice = unitPrice;
}
}
```
Here, the `Order` enforces the rule _“an order can have at most 10 items”_ inside its `AddOrderLine` method. Nobody outside the class can bypass this, because `_orderLines` is private.
👉 That’s the real strength of a classic Aggregate: **business rules are always protected at the boundary.**
----------
### **Chapter 2: Theory in Books vs. Reality in Code — Why Classic Aggregates Struggle**
In Chapter 1, we painted the “ideal” world of DDD. Aggregates were like fortresses guarding our business rules…
But what happens when we try to build that fortress in a real project with tools like Entity Framework Core? That’s when the gap between theory and practice starts to show up.
#### **1. That `.Include()` Chain — Do We Really Need It? The Performance Trap**
DDD books tell us: _“To validate a business rule, you must load the entire aggregate into memory.”_
Sounds reasonable if consistency is the goal.
But let’s picture a scenario: we have an `Order` aggregate with **500 order lines** inside it. And all we want to do is change its status to `Confirmed`.
```csharp
// Just to update a single field...
var order = await _context.Orders
.Include(o => o.OrderLines) // <-- 500 rows pulled in!
.SingleOrDefaultAsync(o => o.Id == orderId);
order.Confirm(); // Just sets order.Status = "Confirmed";
await _context.SaveChangesAsync();
```
This query pulls **all 500 order lines into memory** just so we can flip a single `Status` field. Even in small projects, this is a silent performance killer. As the system grows, it will drag your app down.
#### **2. The Abandoned Fortress — Sliding into Anemic Domain Models**
Now, what’s a developer’s natural reaction to this? Something like:
_“Pulling this much data is expensive. Maybe I should strip down the aggregate into a plain POCO with properties only, and move the logic into an `OrderService` class.”_
This is how we slip straight into the **Anemic Domain Model** trap. Our classes lose their behavior, becoming nothing more than data bags.
The whole DDD principle of _“keep behavior close to data”_ evaporates. Business logic leaks out of the aggregate and spreads across services. We think we’re doing DDD, but in reality, we’ve fallen back into classic transaction-script style coding.
#### **3. One Model Doesn’t Fit All — The Clash of Command and Query**
Aggregates are designed for **commands** — write operations where business rules must be enforced.
But what about **queries**? Imagine a dashboard where we just want to list the last 10 orders. All we need is `OrderId`, `CustomerName`, and `TotalAmount`.
Loading 10 fully-hydrated `Order` aggregates (with all their order lines) just for that list? That’s like using a cannon to hunt a sparrow. Wasteful, slow, and clumsy.
Aggregates simply aren’t built for reporting or read-heavy scenarios.
And there you have it — the three usual suspects that make developers doubt DDD in real life:
- Performance headaches
- The risk of falling into an Anemic Model
- Aggregates being too heavy for read operations
So, should we give up on DDD? Absolutely not!
The key is to stop following the rules blindly and instead focus on their **real intent**. In the next chapter, we’ll explore the pragmatic approach — **Demystified Aggregates** — and how they can actually help us solve these problems.
----------
### **Chapter 3: Enter the Solution — What Exactly Is a "Demystified Aggregate"?**
The issues we listed in the last chapter don’t mean DDD is bad. They just show that blindly applying textbook rules without considering the realities of your project creates friction.
A **Demystified Aggregate** isn’t a library or a framework. It’s a **way of thinking**. Its philosophy is simple: focus on the Aggregate’s real job, and make sure it does that job **as efficiently as possible.**
#### **1. Philosophy: Focus on Purpose, Not Rules**
What’s the Aggregate’s most sacred duty?
**To protect business rules (invariants) during a data change (command).**
Here’s the key: an Aggregate’s job isn’t to always hold all data in memory. Its job is to **ensure consistency while performing an operation**.
Think of it like a security guard at a bank vault. Their job is to make sure transfers are done correctly. They don’t need to memorize the serial number of every single banknote. They just need the critical info for the current operation: the balance and the transfer amount.
The Demystified Aggregate says the same thing: when running a method, you **only load the data that method actually needs**, not the entire Aggregate.
#### **2. The Core Idea: What “State” Does a Behavior Actually Need?**
To apply this idea in code, ask yourself:
_“What data does the `Confirm()` method on my `Order` Aggregate actually need?”_
- Maybe just the order’s current `Status`. (`"Pending"` can become `"Confirmed"`, `"Cancelled"` throws an error.)
- What about `AddItem(product, quantity)`?
- It needs the `Status` (can’t add items to a cancelled order).
- And maybe the existing `OrderLines` (to increase quantity if the item already exists).
See the pattern? Each behavior needs different data. So why load everything every single time?
#### **3. How Do We Do This in .NET & EF Core? Practical Solutions**
Putting this philosophy into code is easier than you might think.
**The Approach: Purpose-Built Repository Methods**
Instead of a generic `GetByIdAsync()`, create methods tailored to the operation at hand. Let’s revisit our classic **Order Confirmation** scenario in a “Before & After” style.
**BEFORE (Classic & Inefficient Approach)**
```csharp
// Repository Layer
public async Task<Order> GetByIdAsync(Guid id)
{
// LOAD EVERYTHING!
return await _context.Orders
.Include(o => o.OrderLines)
.SingleOrDefaultAsync(o => o.Id == id);
}
// Application Service Layer
public async Task ConfirmOrderAsync(Guid orderId)
{
var order = await _orderRepository.GetByIdAsync(orderId);
order.Confirm(); // This method might not even care about OrderLines!
await _unitOfWork.SaveChangesAsync();
}
```
**AFTER (Demystified & Focused Approach)**
```csharp
// Repository Layer
public async Task<Order> GetForConfirmationAsync(Guid id)
{
// LOAD ONLY WHAT WE NEED! (No OrderLines needed)
return await _context.Orders
.SingleOrDefaultAsync(o => o.Id == id);
}
// Application Service Layer
public async Task ConfirmOrderAsync(Guid orderId)
{
// Intent is crystal clear in the code!
var order = await _orderRepository.GetForConfirmationAsync(orderId);
// Aggregate still protects the business rule.
// Confirm() checks status, etc.
order.Confirm();
await _unitOfWork.SaveChangesAsync();
}
```
**What Do We Gain?**
1. **Awesome Performance:** We avoid unnecessary JOINs and data transfer.
2. **Clear Intent:** Anyone reading `GetForConfirmationAsync` immediately knows this operation only cares about the order itself, not its items. Code documents itself.
3. **No Compromise:** Our Aggregate still enforces the business rules via `Confirm()`. DDD’s spirit remains intact.
For **read/query operations**, the answer is even simpler: skip Aggregates altogether! Use optimized queries that return DTOs via `Select` projections, or even raw SQL with Dapper.
That’s the essence of a Demystified Aggregate: **using the right tool for the right job.**
In the next chapter, we’ll wrap everything up and tie all the concepts together.
----------
### **Conclusion: Pragmatism Beats Dogmatism in DDD**
We’ve reached the finish line. We started with the “pure” textbook definition of Aggregates in the ideal world of Domain-Driven Design. Then we hit the real-world walls of performance and complexity. Finally, we learned how to break through those walls.
The biggest lesson from the **Demystified Aggregates** approach is simple:
**DDD isn’t a rigid rulebook — it’s a way of thinking.**
Our goal isn’t to implement the “most pure DDD ever written in a book.” It’s to make our domain logic clean, solid, understandable, and performant. In this journey, patterns and rules should serve us, not the other way around.
### **Key Takeaways**
1. **Focus on the Core Purpose:**
The primary reason an Aggregate exists is to enforce business rules (invariants) and ensure consistency while handling a command. Every design decision should revolve around this purpose.
2. **Load Only What You Need:**
You don’t have to load the entire Aggregate to execute a behavior. Use purpose-built repository methods (`GetForX()`) to fetch just the data needed for the operation. This can drastically improve both performance and readability.
3. **Separate Writing from Reading:**
Use rich, protected Aggregates for commands (write operations). For queries (read operations), don’t burden your Aggregates. Instead, rely on projections, DTOs, or optimized queries. This is one of the simplest, most practical ways to embrace CQRS principles.
Don’t be afraid to shape your Aggregates based on your project and the realities of your tools (like Entity Framework Core). The power of DDD lies in its **flexibility and pragmatism**.

BIN
docs/en/Community-Articles/2025-09-16-Color-Psychology-in-Web-Design-How-to-Choose-the-Perfect-Palette-in-2025/img-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 KiB

BIN
docs/en/Community-Articles/2025-09-16-Color-Psychology-in-Web-Design-How-to-Choose-the-Perfect-Palette-in-2025/img-2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 KiB

BIN
docs/en/Community-Articles/2025-09-16-Color-Psychology-in-Web-Design-How-to-Choose-the-Perfect-Palette-in-2025/img-3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 KiB

138
docs/en/Community-Articles/2025-09-16-Color-Psychology-in-Web-Design-How-to-Choose-the-Perfect-Palette-in-2025/post.md

@ -0,0 +1,138 @@
# Color Psychology in Web Design: How to Choose the Perfect Palette in 2025
## The Importance of Color Psychology in Web Design
First impressions online happen in under 50 milliseconds, and studies show that up to 90% of a user’s initial perception is based on color. In 2025, as digital competition intensifies, brands cannot rely on functionality alone—users expect emotionally engaging and visually strategic designs.
Whether you’re designing for e-commerce, SaaS, lifestyle blogs, or creative portfolios, the right color palette is more than decoration. It directly influences:
- Trust and credibility (blue = reliability, green = balance)
- Conversions and urgency (red for CTAs, orange for enthusiasm)
- Brand recall (consistent use of signature colors builds recognition)
- User comfort and inclusivity (high contrast, accessibility standards)
![image](./img-1.png)
👉 In short, color psychology is not a design afterthought—it’s a core driver of user engagement, retention, and revenue growth.
## The Psychology of Color: How Hues Shape Human Behavior
Color psychology explains how different hues influence emotion, perception, and decision-making. Let’s explore the most common colors in web design:
- 🔴 **Red** – Sparks urgency and excitement. Common in sales promotions, e-commerce banners, and notifications.
Example: YouTube’s red play button signals attention and action.
- 🟠 **Orange** – Represents energy, warmth, and enthusiasm.
Example: Amazon’s orange “Add to Cart” button guides users toward purchases.
- 🟡 **Yellow** – Radiates optimism, creativity, and energy.
Example: Snapchat’s bright yellow interface reflects playfulness and innovation.
- 🟢 **Green** – Suggests growth, sustainability, and wellness.
Example: Whole Foods and health apps use green to symbolize balance and eco-conscious values.
- 🔵 **Blue** – Signals trust, calm, and stability.
Example: PayPal and LinkedIn use blue to reinforce security and professionalism.
- 🟣 **Purple** – Symbolizes luxury, creativity, and imagination.
Example: Beauty brands like Urban Decay use purple to highlight creativity and exclusivity.
- ⚫ **Black** – Conveys sophistication and exclusivity.
Example: Apple and Chanel use black to emphasize premium value.
- ⚪ **White** – Symbolizes purity, simplicity, and clarity.
Example: Apple’s predominantly white interfaces highlight elegance and minimalism.
👉 Pro Insight: Combine psychology with analytics. Tools like Hotjar and Google Optimize reveal how color placement (e.g., green vs. red CTA buttons) impacts conversion rates.
## Beyond Psychology: Cultural Differences in Color Meaning
In global web design, one palette does not fit all. Colors have different cultural associations that can influence user perception:
- **White** – Purity and minimalism in Western cultures, but associated with mourning in parts of East Asia.
- **Red** – Danger in the West, but luck and prosperity in China.
- **Green** – Islamically significant in the Middle East, while in the West it often symbolizes money.
- **Black** – Luxury in the West, but mourning in many cultures.
![image](./img-2.png)
👉 For international brands, it’s crucial to localize website color palettes to avoid misinterpretations.
## Web Design Color Trends for 2025
The digital landscape evolves rapidly, and so do color preferences. The biggest color palette trends in 2025 include:
**Neo-Minimalist Neutrals** ✨
Soft beiges, warm grays, and creamy whites offer calm, distraction-free interfaces—ideal for B2B websites and productivity apps.
**Vibrant Gradients & Neon Accents** 🌈
Tech and e-commerce brands embrace multi-tone gradients and neon highlights to reflect energy and innovation.
**Dark Mode with High-Contrast Highlights** 🌑
Now a default in many apps, dark mode improves eye comfort while allowing accent colors to stand out for easier navigation.
**Nature-Inspired Palettes** 🍃
Eco-conscious businesses are adopting earthy greens, ocean blues, and muted browns to connect with sustainability-minded users.
**Soft Pastels for Inclusivity** 💕
Gentle tones—lavenders, light pinks, and mints—are trending in lifestyle, wellness, and community-driven platforms thanks to their approachable feel.
**Dynamic AI-Driven Palettes** 🤖
AI enables adaptive color systems that change in real-time based on time of day, user mood, or demographics.
👉 Case Study: Spotify uses dark backgrounds but personalizes accents with vibrant colors that align with playlists and campaigns.
## Best Practices for Choosing the Perfect Website Color Palette
A successful palette balances brand identity, psychology, accessibility, and testing. Follow these steps:
**Anchor in Brand Identity**
Select a primary color that embodies your company’s values.
Example: Tiffany & Co.’s teal blue has become globally iconic.
**Apply the 60-30-10 Rule**
- 60% background
- 30% secondary tone
- 10% accent (CTAs, highlights)
This ratio maintains visual balance.
**Leverage Color Theory**
Use complementary or triadic harmonies for better contrast and consistency.
**Prioritize Accessibility (WCAG Standards)**
Ensure a minimum 4.5:1 contrast ratio for text and use color-blind–friendly palettes.
**Account for Cultural Meanings**
Research local associations before targeting global markets.
**Test Across Devices & Modes**
Preview palettes in both light and dark modes, and across desktop, mobile, and tablet.
**A/B Test for Conversions**
Experiment with button colors, background shades, and highlights to find what performs best.
## The Role of Color in Branding and SEO
Color impacts brand authority and indirectly influences SEO by shaping user behavior:
- **Bounce Rate** – Engaging palettes keep users onsite longer.
- **Dwell Time** – Comfortable color schemes encourage scrolling.
- **Conversion Rates** – Optimized CTAs improve click-throughs.
- **Social Sharing** – Bold, appealing colors increase shareability
![image](./img-3.png)
## Future Outlook: Where Color Psychology Is Headed
- **Mood-Adaptive Websites**
Platforms will adjust palettes based on detected user mood or behavior.
- **AR & VR Color Experiences**
Immersive 3D design will require palettes that adapt across realities.
- **Inclusive Color Systems**
Accessibility-first palettes will become the standard, ensuring usability for all.
## Final Thoughts
In 2025, the perfect color palette blends psychological insights, cultural awareness, and data-driven testing. Colors are no longer just visual accents—they are storytelling tools that build trust, guide behavior, and boost conversions.
👉 Brands that embrace color psychology in web design today will not only stand out visually but also gain lasting competitive and business advantages.

8
docs/en/framework/architecture/modularity/plugin-modules.md

@ -1,6 +1,6 @@
# Plug-In Modules
It is possible to load [modules](../modularity/basics.md) as plug-ins. That means you may not reference to a module's assembly in your solution, but you can load that module in the application startup just like any other module.
[Modules](../modularity/basics.md) can also be loaded as plug-ins. This means that you don’t need to reference a module’s assembly directly in your solution; instead, you can load it during application startup in the same way as any other module.
## Basic Usage
@ -28,7 +28,7 @@ That's all. ABP will discover the modules in the given folder, configure and ini
options.PlugInSources.Add(new FolderPlugInSource(@"D:\Temp\MyPlugIns"));
````
> `AddFolder()` only looks for the assembly file in the given folder, but not looks for the sub-folders. You can pass `SearchOption.AllDirectories` as a second parameter to explore plug-ins also from the sub-folders, recursively.
> `AddFolder()` only looks for the assembly file in the given folder, but doesn't look for the sub-folders. You can pass `SearchOption.AllDirectories` as a second parameter to explore plug-ins also from the sub-folders, recursively.
There are two more built-in Plug-In Source implementations:
@ -124,13 +124,13 @@ Edit the `.csproj` file content:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<TargetFramework>net9.0</TargetFramework>
<OutputType>Library</OutputType>
<IsPackable>true</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared" Version="4.0.1" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared" Version="9.3.3" />
</ItemGroup>
</Project>

45
docs/en/framework/data/entity-framework-core/oracle-official.md

@ -59,6 +59,51 @@ Run the `.DbMigrator` project to create the database, apply the changes and seed
Oracle limits strings to `NVARCHAR2(2000)` when the migration is created. Some of the entity properties may extend it. You can check the known and reported properties of ABP modules entities that can extend this limit. To prevent this problem, you need to convert the `string` type to `long` type first and generate a new migration. Then convert the `long` type to `clob` type with maximum length.
## ORA-00904: "FALSE": invalid identifier
In the 23ai release, Oracle has added new `OracleSQLCompatibility` enumeration values:
- `OracleSQLCompatibility.DatabaseVersion19`
- `OracleSQLCompatibility.DatabaseVersion21`
- `OracleSQLCompatibility.DatabaseVersion23`
By default, the enumeration value will match the ODP.NET version number. In the case of ODP.NET 23, the enumeration is `OracleSQLCompatibility.DatabaseVersion23`.
In DB 23ai, BOOLEAN columns and native JSON columns are supported. Thus, Oracle EF Core 8.23.40 use these in its SQL when `OracleSQLCompatibility.DatabaseVersion23` or no value is set. If you'd like to revert to 19c compatible behavior, use the `OracleSQLCompatibility.DatabaseVersion19` value.
See the following issue for more details:
https://github.com/oracle/dotnet-db-samples/issues/377#issuecomment-2096419703
If you want to change the `OracleSQLCompatibility` value, you need to change it at `AbpDbContextOptions` and `MyProjectNameDbContextFactory` files.
```csharp
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpDbContextOptions>(options =>
{
options.UseOracle(x => x.UseOracleSQLCompatibility(OracleSQLCompatibility.DatabaseVersion19));
});
}
```
```csharp
public MyProjectNameDbContext CreateDbContext(string[] args)
{
var configuration = BuildConfiguration();
AbpSolution4EfCoreEntityExtensionMappings.Configure();
var builder = new DbContextOptionsBuilder<MyProjectNameDbContext>()
.UseOracle(configuration.GetConnectionString("Default"), x =>
{
x.UseOracleSQLCompatibility(OracleSQLCompatibility.DatabaseVersion19);
});
return new MyProjectNameDbContext(builder.Options);
}
```
### First Migration
Update you application DbContext `OnModelCreating` method:

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

@ -91,6 +91,34 @@ A JSON localization file content is shown below:
> ABP will ignore (skip) the JSON file if the `culture` section is missing.
You can also use nesting or array in localization files, like this:
````json
{
"culture": "en",
"texts": {
"HelloWorld": "Hello World!",
"Hello": {
"World": "Hello World!"
},
"Hi":[
"Bye": "Bye World!"
"Hello": "Hello World!"
]
}
}
````
Then you can use it like this:
> The double underscore (`__`) is used to separate the parent key from the child key.
````csharp
var str = L["Hello__World"]; // Hello World!
var str2 = L["Hi__0"]; // Bye World!
var str3 = L["Hi__1"]; // Hello World!
````
### Default Resource
`AbpLocalizationOptions.DefaultResourceType` can be set to a resource type, so it is used when the localization resource was not specified:

22
docs/en/framework/infrastructure/audit-logging.md

@ -230,6 +230,28 @@ public class MyUser : Entity<Guid>
}
````
#### Ignore Update Audit Properties And Publish Entity Updated Event
The `[DisableAuditing]` attribute supports additional configuration options when applied to **entity properties**.
* **UpdateModificationProps** (default: `true`): When set to `false`, changes to this entity property will not update audit properties (like `LastModificationTime`.
* **PublishEntityEvent** (default: `true`): When set to `false`, changes to this entity property will not publish entity change events (`EntityUpdatedEvent`).
````csharp
public class MyUser : Entity<Guid>
{
public string Name { get; set; }
[DisableAuditing(UpdateModificationProps = false, PublishEntityEvent = false)]
public string ReadCount { get; set; }
}
````
This example will ignore update audit properties and publish entity updated event when the `ReadCount` property is updated.
> The `UpdateModificationProps` and `PublishEntityEvent` only work for [Entity Framework Core](../data/entity-framework-core). It will not work for [MongoDB](../data/mongodb).
## IAuditingStore
`IAuditingStore` is an interface that is used to save the audit log objects (explained below) by the ABP. If you need to save the audit log objects to a custom data store, you can implement the `IAuditingStore` in your own application and replace using the [dependency injection system](../fundamentals/dependency-injection.md).

10
docs/en/framework/infrastructure/blob-storing/google.md

@ -27,11 +27,11 @@ Configure<AbpBlobStoringOptions>(options =>
{
container.UseGoogle(google =>
{
google.ClientEmail = "your coogle client email";
google.ProjectId = "your coogle project id";
google.PrivateKey = "your coogle private key";
google.Scopes = "your coogle scopes";
google.ContainerName = "your coogle container name";
google.ClientEmail = "your google client email";
google.ProjectId = "your google project id";
google.PrivateKey = "your google private key";
google.Scopes = "your google scopes";
google.ContainerName = "your google container name";
google.CreateContainerIfNotExists = true;
//google.UseApplicationDefaultCredentials = true; // If you want to use application default credentials
});

5
docs/en/framework/infrastructure/event-bus/distributed/index.md

@ -643,6 +643,11 @@ Configure<AbpEventBusBoxesOptions>(options =>
* `InboxWaitingEventMaxCount`: The maximum number of events to query at once from the inbox in the database. Default value is 1000.
* `OutboxWaitingEventMaxCount`: The maximum number of events to query at once from the outbox in the database. Default value is 1000.
* `DistributedLockWaitDuration`: ABP uses [distributed locking](../../distributed-locking.md) to prevent concurrent access to the inbox and outbox messages in the database, when running multiple instance of the same application. If an instance of the application can not obtain the lock, it tries after a duration. This is the configuration of that duration. Default value is 15 seconds (`TimeSpan.FromSeconds(15)`).
* `InboxProcessorFailurePolicy`: The policy to handle the failure of the inbox processor. Default value is `Retry`. Possible values are:
* `Retry`: The current exception and subsequent events will continue to be processed in order in the next cycle.
* `RetryLater`: Skip the event that caused the exception and continue with the following events. The failed event will be retried after a delay that doubles with each retry, starting from the configured `InboxProcessorRetryBackoffFactor` (e.g., 10, 20, 40, 80 seconds). The default maximum retry count is 10 (configurable). Discard the event if it still fails after reaching the maximum retry count.
* `Discard`: The event that caused the exception will be discarded and will not be retried.
* `InboxProcessorRetryBackoffFactor`: The initial retry delay factor (double) used when `InboxProcessorFailurePolicy` is `RetryLater`. The retry delay is calculated as: `delay = InboxProcessorRetryBackoffFactor × 2^retryCount`. Default value is `10`.
### Skipping Outbox

2
docs/en/framework/infrastructure/object-to-object-mapping.md

@ -337,6 +337,8 @@ var users = await _userRepository.GetListAsync(); // returns List<User>
var dtos = ObjectMapper.Map<List<User>, List<UserDto>>(users); // creates List<UserDto>
````
> When mapping a collection property, if the source value is null Mapperly will keep the destination value as null. This is different from AutoMapper, which will map the destination field to an empty collection.
### Nested Mapping
When working with nested object mapping, there's an important limitation to be aware of. If you have separate mappers for nested types like in the example below, the parent mapper (`SourceTypeToDestinationTypeMapper`) will not automatically use the nested mapper (`SourceNestedTypeToDestinationNestedTypeMapper`) to handle the mapping of nested properties. This means that configurations like the `MapperIgnoreTarget` attribute on the nested mapper will be ignored during the parent mapping operation.

36
docs/en/framework/ui/angular/modal.md

@ -178,7 +178,41 @@ The modal with form looks like this:
@Input() visible: boolean
```
**`visible`** is a boolean input that determines whether the modal is open. It is also can be used two-way binding.
**`visible`** is a boolean input that controls whether the modal is open.
Important details:
- Default value: `false` (the modal is closed initially).
- Required binding: You must bind `visible` to a component property. If you omit it completely, the modal will never appear because it is only instantiated when `visible` becomes `true`.
- Two-way binding recommended: The component emits `visibleChange` when it needs to close (e.g., user presses the close button or backdrop). For this reason, using a constant like `[visible]="true"` or `visible="true"` is not supported—Angular cannot update a literal, so the modal cannot properly close and this may lead to an error. Always bind to a variable.
- Correct patterns:
- Preferred shorthand: `[(visible)]="isModalOpen"`
- Or explicit form: `[visible]="isModalOpen" (visibleChange)="isModalOpen = $event"`
Example (already shown above):
```html
<abp-modal [(visible)]="isModalOpen">
<!-- content -->
</abp-modal>
```
Programmatic control:
```ts
// In your component class
isModalOpen = false;
open() { this.isModalOpen = true; }
close() { this.isModalOpen = false; }
```
Avoid (incorrect):
```html
<!-- This will open once but cannot close properly and may throw an error -->
<abp-modal [visible]="true"></abp-modal>
```
#### busy

5
docs/en/framework/ui/angular/modifying-the-menu.md

@ -269,7 +269,12 @@ this.routes.remove(['Your navigation']);
// or
this.routes.removeByParam({ name: 'Your navigation' });
```
**Method Parameters:**
- `remove(routeNames: string[])`: Takes an array of route names to remove.
- `removeByParam(routeProperty: Partial<ABP.Route>)`: Takes any route property (name, path, parentName, etc.) to match and remove routes.
<br>
**Results of the operations above:**
- Moved the _Home_ navigation under the _Administration_ dropdown based on given `parentName`.
- Added an icon to _Home_.
- Specified the order and made _Home_ the first item in list.

8
framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/DisableAuditingAttribute.cs

@ -5,5 +5,13 @@ namespace Volo.Abp.Auditing;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property)]
public class DisableAuditingAttribute : Attribute
{
/// <summary>
/// When set to <c>false</c>, changes to this entity property will not update audit properties (like <see cref="AuditLogInfo.LastModificationTime"/>).
/// </summary>
public bool UpdateModificationProps { get; set; } = true;
/// <summary>
/// When set to <c>false</c>, changes to this entity property will not publish entity change events (<see cref="EntityUpdatedEvent"/>).
/// </summary>
public bool PublishEntityEvent { get; set; } = true;
}

15
framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Constants/AbpPlatformUrls.cs

@ -2,11 +2,12 @@ namespace Volo.Abp.Internal.Telemetry.Constants;
public static class AbpPlatformUrls
{
#if DEBUG
public const string AbpTelemetryApiUrl = "https://localhost:44393/";
#else
public const string AbpTelemetryApiUrl = "https://telemetry.abp.io/";
#endif
public static string AbpTelemetryApiUrl
{
get => AbpTelemetryApiUrlProduction;
set => AbpTelemetryApiUrlProduction = value;
}
public static string AbpTelemetryApiUrlProduction = "https://telemetry.abp.io/";
public static string AbpTelemetryApiUrlDevelopment = "https://localhost:44393/";
}

2
framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Helpers/AbpPackageMetadataReader.cs

@ -11,7 +11,7 @@ static internal class AbpProjectMetadataReader
{
private const string AbpPackageSearchPattern = "*.abppkg";
private const string AbpSolutionSearchPattern = "*.abpsln";
private const int MaxDepth = 5;
private const int MaxDepth = 10;
public static AbpProjectMetaData? ReadProjectMetadata(Assembly assembly)
{
var assemblyPath = assembly.Location;

14
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs

@ -1,9 +1,9 @@
using JetBrains.Annotations;
using System;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Data;
@ -43,9 +43,9 @@ public abstract class BasicRepositoryBase<TEntity> :
public IEntityChangeTrackingProvider EntityChangeTrackingProvider => LazyServiceProvider.LazyGetRequiredService<IEntityChangeTrackingProvider>();
public bool? IsChangeTrackingEnabled { get; protected set; }
public string? EntityName { get; set; }
public void SetEntityName(string? name)
{
EntityName = name;
@ -148,10 +148,10 @@ public abstract class BasicRepositoryBase<TEntity> :
public abstract class BasicRepositoryBase<TEntity, TKey> : BasicRepositoryBase<TEntity>, IBasicRepository<TEntity, TKey>
where TEntity : class, IEntity<TKey>
{
protected BasicRepositoryBase(string providerName)
protected BasicRepositoryBase(string providerName)
: base(providerName)
{
}
public virtual async Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default)
@ -160,7 +160,7 @@ public abstract class BasicRepositoryBase<TEntity, TKey> : BasicRepositoryBase<T
if (entity == null)
{
throw new EntityNotFoundException(typeof(TEntity), id);
throw new EntityNotFoundException<TEntity>(id);
}
return entity;

8
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryBase.cs

@ -1,10 +1,10 @@
using JetBrains.Annotations;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
@ -60,7 +60,7 @@ public abstract class RepositoryBase<TEntity> : BasicRepositoryBase<TEntity>, IR
if (entity == null)
{
throw new EntityNotFoundException(typeof(TEntity));
throw new EntityNotFoundException<TEntity>();
}
return entity;
@ -101,7 +101,7 @@ public abstract class RepositoryBase<TEntity, TKey> : RepositoryBase<TEntity>, I
: base(providerName)
{
}
public abstract Task<TEntity> GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default);
public abstract Task<TEntity?> FindAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default);

6
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/RepositoryExtensions.cs

@ -56,7 +56,7 @@ public static class RepositoryExtensions
{
if (!await repository.AnyAsync(x => x.Id!.Equals(id), cancellationToken))
{
throw new EntityNotFoundException(typeof(TEntity), id);
throw new EntityNotFoundException<TEntity>(id);
}
}
@ -69,7 +69,7 @@ public static class RepositoryExtensions
{
if (!await repository.AnyAsync(expression, cancellationToken))
{
throw new EntityNotFoundException(typeof(TEntity));
throw new EntityNotFoundException<TEntity>();
}
}
@ -250,7 +250,7 @@ public static class RepositoryExtensions
hardDeleteEntities.Add(entity);
await repository.DeleteAsync(entity, autoSave, cancellationToken);
}
public static TRepository SetEntityName<TRepository>(
this TRepository repository,
string name

10
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs

@ -1,6 +1,3 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Data;
@ -8,7 +5,10 @@ using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.Domain.Entities;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.DependencyInjection;
@ -468,7 +468,7 @@ public class EfCoreRepository<TDbContext, TEntity, TKey> : EfCoreRepository<TDbC
if (entity == null)
{
throw new EntityNotFoundException(typeof(TEntity), id);
throw new EntityNotFoundException<TEntity>(id);
}
return entity;
@ -480,7 +480,7 @@ public class EfCoreRepository<TDbContext, TEntity, TKey> : EfCoreRepository<TDbC
? await (await WithDetailsAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id!.Equals(id), GetCancellationToken(cancellationToken))
: !ShouldTrackingEntityChange()
? await (await GetQueryableAsync()).OrderBy(e => e.Id).FirstOrDefaultAsync(e => e.Id!.Equals(id), GetCancellationToken(cancellationToken))
: await (await GetDbSetAsync()).FindAsync(new object[] {id!}, GetCancellationToken(cancellationToken));
: await (await GetDbSetAsync()).FindAsync(new object[] { id! }, GetCancellationToken(cancellationToken));
}
public virtual async Task DeleteAsync(TKey id, bool autoSave = false, CancellationToken cancellationToken = default)

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

@ -436,20 +436,29 @@ public abstract class AbpDbContext<TDbContext> : DbContext, IAbpEfCoreDbContext,
case EntityState.Modified:
if (entry.Properties.Any(x => x.IsModified && (x.Metadata.ValueGenerated == ValueGenerated.Never || x.Metadata.ValueGenerated == ValueGenerated.OnAdd)))
{
if (entry.Properties.Where(x => x.IsModified).All(x => x.Metadata.IsForeignKey()))
var modifiedProperties = entry.Properties.Where(x => x.IsModified).ToList();
if (modifiedProperties.All(x => x.Metadata.IsForeignKey()))
{
// Skip `PublishEntityDeletedEvent/PublishEntityUpdatedEvent` if only foreign keys have changed.
break;
}
ApplyAbpConceptsForModifiedEntity(entry);
if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
var disableAuditingAttributes = modifiedProperties.Select(x => x.Metadata.PropertyInfo?.GetCustomAttribute<DisableAuditingAttribute>()).ToList();
if (disableAuditingAttributes.Any(x => x == null || x.UpdateModificationProps))
{
EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity);
ApplyAbpConceptsForModifiedEntity(entry);
}
else
if (disableAuditingAttributes.Any(x => x == null || x.PublishEntityEvent))
{
EntityChangeEventHelper.PublishEntityUpdatedEvent(entry.Entity);
if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
{
EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity);
}
else
{
EntityChangeEventHelper.PublishEntityUpdatedEvent(entry.Entity);
}
}
}
else if (EntityChangeOptions.Value.PublishEntityUpdatedEventWhenNavigationChanges &&

26
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/DbContextEventInbox.cs

@ -47,10 +47,12 @@ public class DbContextEventInbox<TDbContext> : IDbContextEventInbox<TDbContext>
transformedFilter = InboxOutboxFilterExpressionTransformer.Transform<IIncomingEventInfo, IncomingEventRecord>(filter)!;
}
var now = Clock.Now;
var outgoingEventRecords = await dbContext
.IncomingEvents
.AsNoTracking()
.Where(x => !x.Processed)
.Where(x => x.Status == IncomingEventStatus.Pending)
.Where(x => x.NextRetryTime == null || x.NextRetryTime <= now)
.WhereIf(transformedFilter != null, transformedFilter!)
.OrderBy(x => x.CreationTime)
.Take(maxCount)
@ -66,7 +68,25 @@ public class DbContextEventInbox<TDbContext> : IDbContextEventInbox<TDbContext>
{
var dbContext = await DbContextProvider.GetDbContextAsync();
await dbContext.IncomingEvents.Where(x => x.Id == id).ExecuteUpdateAsync(x =>
x.SetProperty(p => p.Processed, _ => true).SetProperty(p => p.ProcessedTime, _ => Clock.Now));
x.SetProperty(p => p.Status, _ => IncomingEventStatus.Processed).SetProperty(p => p.HandledTime, _ => Clock.Now));
}
[UnitOfWork]
public virtual async Task RetryLaterAsync(Guid id, int retryCount, DateTime? nextRetryTime)
{
var dbContext = await DbContextProvider.GetDbContextAsync();
await dbContext.IncomingEvents.Where(x => x.Id == id).ExecuteUpdateAsync(x =>
x.SetProperty(p => p.RetryCount, _ => retryCount)
.SetProperty(p => p.NextRetryTime, _ => nextRetryTime)
.SetProperty(p => p.Status, _ => IncomingEventStatus.Pending));
}
[UnitOfWork]
public virtual async Task MarkAsDiscardAsync(Guid id)
{
var dbContext = await DbContextProvider.GetDbContextAsync();
await dbContext.IncomingEvents.Where(x => x.Id == id).ExecuteUpdateAsync(x =>
x.SetProperty(p => p.Status, _ => IncomingEventStatus.Discarded).SetProperty(p => p.HandledTime, _ => Clock.Now));
}
[UnitOfWork]
@ -82,7 +102,7 @@ public class DbContextEventInbox<TDbContext> : IDbContextEventInbox<TDbContext>
var dbContext = await DbContextProvider.GetDbContextAsync();
var timeToKeepEvents = Clock.Now - EventBusBoxesOptions.WaitTimeToDeleteProcessedInboxEvents;
await dbContext.IncomingEvents
.Where(x => x.Processed && x.CreationTime < timeToKeepEvents)
.Where(x => (x.Status == IncomingEventStatus.Processed || x.Status == IncomingEventStatus.Discarded) && x.CreationTime < timeToKeepEvents)
.ExecuteDeleteAsync();
}
}

2
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/EventInboxDbContextModelBuilderExtensions.cs

@ -16,7 +16,7 @@ public static class EventInboxDbContextModelBuilderExtensions
b.Property(x => x.EventName).IsRequired().HasMaxLength(IncomingEventRecord.MaxEventNameLength);
b.Property(x => x.EventData).IsRequired();
b.HasIndex(x => new { x.Processed, x.CreationTime });
b.HasIndex(x => new { x.Status, x.CreationTime });
b.HasIndex(x => x.MessageId);
});
}

31
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/DistributedEvents/IncomingEventRecord.cs

@ -24,9 +24,13 @@ public class IncomingEventRecord :
public DateTime CreationTime { get; private set; }
public bool Processed { get; set; }
public IncomingEventStatus Status { get; set; } = IncomingEventStatus.Pending;
public DateTime? ProcessedTime { get; set; }
public DateTime? HandledTime { get; set; }
public int RetryCount { get; set; } = 0;
public DateTime? NextRetryTime { get; set; } = null;
protected IncomingEventRecord()
{
@ -58,7 +62,11 @@ public class IncomingEventRecord :
MessageId,
EventName,
EventData,
CreationTime
CreationTime,
Status,
HandledTime,
RetryCount,
NextRetryTime
);
foreach (var property in ExtraProperties)
@ -71,7 +79,20 @@ public class IncomingEventRecord :
public void MarkAsProcessed(DateTime processedTime)
{
Processed = true;
ProcessedTime = processedTime;
Status = IncomingEventStatus.Processed;
HandledTime = processedTime;
}
public void MarkAsDiscarded(DateTime discardedTime)
{
Status = IncomingEventStatus.Discarded;
HandledTime = discardedTime;
}
public void RetryLater(int retryCount, DateTime nextRetryTime)
{
Status = IncomingEventStatus.Pending;
NextRetryTime = nextRetryTime;
RetryCount = retryCount;
}
}

4
framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IEventInbox.cs

@ -14,6 +14,10 @@ public interface IEventInbox
Task MarkAsProcessedAsync(Guid id);
Task RetryLaterAsync(Guid id, int retryCount, DateTime? nextRetryTime);
Task MarkAsDiscardAsync(Guid id);
Task<bool> ExistsByMessageIdAsync(string messageId);
Task DeleteOldEventsAsync();

18
framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IncomingEventInfo.cs

@ -20,6 +20,14 @@ public class IncomingEventInfo : IIncomingEventInfo
public DateTime CreationTime { get; }
public IncomingEventStatus Status { get; set; } = IncomingEventStatus.Pending;
public DateTime? HandledTime { get; set; }
public int RetryCount { get; set; } = 0;
public DateTime? NextRetryTime { get; set; } = null;
protected IncomingEventInfo()
{
ExtraProperties = new ExtraPropertyDictionary();
@ -31,13 +39,21 @@ public class IncomingEventInfo : IIncomingEventInfo
string messageId,
string eventName,
byte[] eventData,
DateTime creationTime)
DateTime creationTime,
IncomingEventStatus status = IncomingEventStatus.Pending,
DateTime? handledTime = null,
int retryCount = 0,
DateTime? nextRetryTime = null)
{
Id = id;
MessageId = messageId;
EventName = Check.NotNullOrWhiteSpace(eventName, nameof(eventName), MaxEventNameLength);
EventData = eventData;
CreationTime = creationTime;
Status = status;
HandledTime = handledTime;
RetryCount = retryCount;
NextRetryTime = nextRetryTime;
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties();
}

10
framework/src/Volo.Abp.EventBus.Abstractions/Volo/Abp/EventBus/Distributed/IncomingEventStatus.cs

@ -0,0 +1,10 @@
namespace Volo.Abp.EventBus.Distributed;
public enum IncomingEventStatus
{
Pending = 0,
Discarded = 1,
Processed = 2
}

17
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/AbpEventBusBoxesOptions.cs

@ -36,6 +36,23 @@ public class AbpEventBusBoxesOptions
/// </summary>
public TimeSpan PeriodTimeSpan { get; set; }
/// <summary>
/// Default: <see cref="InboxProcessorFailurePolicy.Retry"/>
/// </summary>
public InboxProcessorFailurePolicy InboxProcessorFailurePolicy { get; set; } = InboxProcessorFailurePolicy.Retry;
/// <summary>
/// Default: 10
/// </summary>
public int InboxProcessorMaxRetryCount { get; set; } = 10;
/// <summary>
/// Default value is 10
/// The initial retry delay factor (double) when `InboxProcessorFailurePolicy` is `RetryLater`.
/// The delay is calculated as: `delay = InboxProcessorRetryBackoffFactor × 2^retryCount`
/// </summary>
public double InboxProcessorRetryBackoffFactor { get; set; } = 10;
/// <summary>
/// Default: 15 seconds
/// </summary>

82
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessor.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
@ -25,7 +26,6 @@ public class InboxProcessor : IInboxProcessor, ITransientDependency
protected IEventInbox Inbox { get; private set; } = default!;
protected InboxConfig InboxConfig { get; private set; } = default!;
protected AbpEventBusBoxesOptions EventBusBoxesOptions { get; }
protected DateTime? LastCleanTime { get; set; }
protected string DistributedLockName { get; set; } = default!;
@ -103,18 +103,76 @@ public class InboxProcessor : IInboxProcessor, ITransientDependency
foreach (var waitingEvent in waitingEvents)
{
using (var uow = UnitOfWorkManager.Begin(isTransactional: true, requiresNew: true))
Logger.LogInformation($"Start processing the incoming event with id = {waitingEvent.Id:N}");
try
{
await DistributedEventBus
.AsSupportsEventBoxes()
.ProcessFromInboxAsync(waitingEvent, InboxConfig);
using (var uow = UnitOfWorkManager.Begin(isTransactional: true, requiresNew: true))
{
await DistributedEventBus
.AsSupportsEventBoxes()
.ProcessFromInboxAsync(waitingEvent, InboxConfig);
await Inbox.MarkAsProcessedAsync(waitingEvent.Id);
await Inbox.MarkAsProcessedAsync(waitingEvent.Id);
await uow.CompleteAsync(StoppingToken);
}
await uow.CompleteAsync(StoppingToken);
}
Logger.LogInformation($"Processed the incoming event with id = {waitingEvent.Id:N}");
Logger.LogInformation($"Processed the incoming event with id = {waitingEvent.Id:N}");
}
catch (Exception e)
{
Logger.LogError(e, $"Event with id = {waitingEvent.Id:N} processing failed.");
if (EventBusBoxesOptions.InboxProcessorFailurePolicy == InboxProcessorFailurePolicy.Retry)
{
throw;
}
if (EventBusBoxesOptions.InboxProcessorFailurePolicy == InboxProcessorFailurePolicy.RetryLater)
{
using (var uow = UnitOfWorkManager.Begin(isTransactional: true, requiresNew: true))
{
if (waitingEvent.NextRetryTime != null)
{
waitingEvent.RetryCount++;
}
if (waitingEvent.RetryCount >= EventBusBoxesOptions.InboxProcessorMaxRetryCount)
{
Logger.LogWarning($"Event with id = {waitingEvent.Id:N} has exceeded the maximum retry count. Marking it as discarded.");
await Inbox.RetryLaterAsync(waitingEvent.Id, waitingEvent.RetryCount, null);
await Inbox.MarkAsDiscardAsync(waitingEvent.Id);
await uow.CompleteAsync(StoppingToken);
continue;
}
waitingEvent.NextRetryTime = GetNextRetryTime(waitingEvent.RetryCount, EventBusBoxesOptions.InboxProcessorRetryBackoffFactor);
Logger.LogInformation($"Event with id = {waitingEvent.Id:N} will retry later. " +
$"Current retry count: {waitingEvent.RetryCount}, " +
$"Next retry time: {waitingEvent.NextRetryTime}, " +
$"Max retry count: {EventBusBoxesOptions.InboxProcessorMaxRetryCount}.");
await Inbox.RetryLaterAsync(waitingEvent.Id, waitingEvent.RetryCount, GetNextRetryTime(waitingEvent.RetryCount, EventBusBoxesOptions.InboxProcessorRetryBackoffFactor));
await uow.CompleteAsync(StoppingToken);
}
continue;
}
if (EventBusBoxesOptions.InboxProcessorFailurePolicy == InboxProcessorFailurePolicy.Discard)
{
using (var uow = UnitOfWorkManager.Begin(isTransactional: true, requiresNew: true))
{
Logger.LogInformation($"Event with id = {waitingEvent.Id:N} will be discarded.");
await Inbox.MarkAsDiscardAsync(waitingEvent.Id);
await uow.CompleteAsync(StoppingToken);
}
continue;
}
}
}
}
}
@ -130,6 +188,12 @@ public class InboxProcessor : IInboxProcessor, ITransientDependency
}
}
protected virtual DateTime? GetNextRetryTime(int retryCount, double factor)
{
var delaySeconds = factor * Math.Pow(2, retryCount);
return DateTime.Now.AddSeconds(delaySeconds);
}
protected virtual async Task<List<IncomingEventInfo>> GetWaitingEventsAsync()
{
return await Inbox.GetWaitingEventsAsync(EventBusBoxesOptions.InboxWaitingEventMaxCount, EventBusBoxesOptions.InboxProcessorFilter, StoppingToken);

22
framework/src/Volo.Abp.EventBus/Volo/Abp/EventBus/Distributed/InboxProcessorFailurePolicy.cs

@ -0,0 +1,22 @@
namespace Volo.Abp.EventBus.Distributed;
public enum InboxProcessorFailurePolicy
{
/// <summary>
/// Default behavior, retry the following event in next period time.
/// </summary>
Retry,
/// <summary>
/// Skip the failed event and retry it after a delay.
/// The delay doubles with each retry, starting from the configured InboxProcessorRetryBackoffFactor
/// (e.g., 10, 20, 40, 80 seconds, etc.).
/// The event is discarded if it still fails after reaching the maximum retry count.
/// </summary>
RetryLater,
/// <summary>
/// Skip the event and do not retry it.
/// </summary>
Discard,
}

28
framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Domain/Entities/EntityNotFoundException.cs

@ -2,6 +2,34 @@
namespace Volo.Abp.Domain.Entities;
/// <summary>
/// This exception is thrown if an entity is expected to be found but not found.
/// </summary>
public class EntityNotFoundException<TEntityType> : EntityNotFoundException
{
/// <summary>
/// Creates a new <see cref="EntityNotFoundException{TEntityType}"/> object.
/// </summary>
public EntityNotFoundException()
: base(typeof(TEntityType))
{
}
/// <summary>
/// Creates a new <see cref="EntityNotFoundException{TEntityType}"/> object.
/// </summary>
public EntityNotFoundException(object? id)
: base(typeof(TEntityType), id)
{
}
/// <summary>
/// Creates a new <see cref="EntityNotFoundException{TEntityType}"/> object.
/// </summary>
public EntityNotFoundException(object? id, Exception? innerException)
: base(typeof(TEntityType), id, innerException)
{
}
}
/// <summary>
/// This exception is thrown if an entity is expected to be found but not found.
/// </summary>

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

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Json;
using Microsoft.Extensions.Localization;
@ -47,12 +48,11 @@ public static class JsonLocalizationDictionaryBuilder
{
throw new AbpException("Can not parse json string. " + ex.Message);
}
if (jsonFile == null)
{
return null;
}
var cultureCode = jsonFile.Culture;
if (string.IsNullOrEmpty(cultureCode))
{
@ -61,18 +61,17 @@ public static class JsonLocalizationDictionaryBuilder
var dictionary = new Dictionary<string, LocalizedString>();
var dublicateNames = new List<string>();
foreach (var item in jsonFile.Texts)
foreach (var item in FlattenTexts(jsonFile.Texts))
{
if (string.IsNullOrEmpty(item.Key))
{
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());
}
@ -85,4 +84,67 @@ public static class JsonLocalizationDictionaryBuilder
return new StaticLocalizationDictionary(cultureCode, dictionary);
}
private static Dictionary<string, string> FlattenTexts(Dictionary<string, object> texts, string prefix = "")
{
var result = new Dictionary<string, string>();
foreach (var text in texts)
{
var currentKey = string.IsNullOrEmpty(prefix) ? text.Key : $"{prefix}__{text.Key}";
switch (text.Value)
{
case JsonElement jsonElement:
foreach (var item in FlattenJsonElement(jsonElement, currentKey))
{
result[item.Key] = item.Value;
}
break;
case string str:
result[currentKey] = str;
break;
case null:
result[currentKey] = "";
break;
default:
result[currentKey] = text.Value.ToString() ?? "";
break;
}
}
return result;
}
private static IEnumerable<KeyValuePair<string, string>> FlattenJsonElement(JsonElement element, string prefix)
{
switch (element.ValueKind)
{
case JsonValueKind.String:
yield return new KeyValuePair<string, string>(prefix, element.GetString() ?? "");
break;
case JsonValueKind.Object:
foreach (var prop in element.EnumerateObject())
{
var newKey = $"{prefix}__{prop.Name}";
foreach (var item in FlattenJsonElement(prop.Value, newKey))
{
yield return item;
}
}
break;
case JsonValueKind.Array:
var i = 0;
foreach (var prop in element.EnumerateArray())
{
var newKey = $"{prefix}__{i}";
foreach (var item in FlattenJsonElement(prop, newKey))
{
yield return item;
}
i++;
}
break;
default:
yield return new KeyValuePair<string, string>(prefix, element.ToString());
break;
}
}
}

7
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs

@ -9,10 +9,5 @@ public class JsonLocalizationFile
/// </summary>
public string Culture { get; set; } = default!;
public Dictionary<string, string> Texts { get; set; }
public JsonLocalizationFile()
{
Texts = new Dictionary<string, string>();
}
public Dictionary<string, object> Texts { get; set; } = [];
}

2
framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs

@ -334,7 +334,7 @@ public class MemoryDbRepository<TMemoryDbContext, TEntity, TKey> : MemoryDbRepos
if (entity == null)
{
throw new EntityNotFoundException(typeof(TEntity), id);
throw new EntityNotFoundException<TEntity>(id);
}
return entity;

8
framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs

@ -1,12 +1,12 @@
using JetBrains.Annotations;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using Volo.Abp.Auditing;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
@ -803,7 +803,7 @@ public class MongoDbRepository<TMongoDbContext, TEntity, TKey>
if (entity == null)
{
throw new EntityNotFoundException(typeof(TEntity), id);
throw new EntityNotFoundException<TEntity>(id);
}
return entity;

36
framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/IncomingEventRecord.cs

@ -23,9 +23,13 @@ public class IncomingEventRecord :
public DateTime CreationTime { get; private set; }
public bool Processed { get; set; }
public IncomingEventStatus Status { get; set; } = IncomingEventStatus.Pending;
public DateTime? ProcessedTime { get; set; }
public DateTime? HandledTime { get; set; }
public int RetryCount { get; set; } = 0;
public DateTime? NextRetryTime { get; set; } = null;
protected IncomingEventRecord()
{
@ -41,7 +45,10 @@ public class IncomingEventRecord :
EventName = eventInfo.EventName;
EventData = eventInfo.EventData;
CreationTime = eventInfo.CreationTime;
Status = eventInfo.Status;
HandledTime = eventInfo.HandledTime;
RetryCount = eventInfo.RetryCount;
NextRetryTime = eventInfo.NextRetryTime;
ExtraProperties = new ExtraPropertyDictionary();
this.SetDefaultsForExtraProperties();
foreach (var property in eventInfo.ExtraProperties)
@ -57,7 +64,11 @@ public class IncomingEventRecord :
MessageId,
EventName,
EventData,
CreationTime
CreationTime,
Status,
HandledTime,
RetryCount,
NextRetryTime
);
foreach (var property in ExtraProperties)
@ -70,7 +81,20 @@ public class IncomingEventRecord :
public void MarkAsProcessed(DateTime processedTime)
{
Processed = true;
ProcessedTime = processedTime;
Status = IncomingEventStatus.Processed;
HandledTime = processedTime;
}
public void MarkAsDiscarded(DateTime discardedTime)
{
Status = IncomingEventStatus.Discarded;
HandledTime = discardedTime;
}
public void RetryLater(int retryCount, DateTime nextRetryTime)
{
Status = IncomingEventStatus.Pending;
NextRetryTime = nextRetryTime;
RetryCount = retryCount;
}
}

46
framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/DistributedEvents/MongoDbContextEventInbox.cs

@ -61,10 +61,12 @@ public class MongoDbContextEventInbox<TMongoDbContext> : IMongoDbContextEventInb
transformedFilter = InboxOutboxFilterExpressionTransformer.Transform<IIncomingEventInfo, IncomingEventRecord>(filter)!;
}
var now = Clock.Now;
var outgoingEventRecords = await dbContext
.IncomingEvents
.AsQueryable()
.Where(x => x.Processed == false)
.Where(x => x.Status == IncomingEventStatus.Pending)
.Where(x => x.NextRetryTime == null || x.NextRetryTime <= now)
.WhereIf(transformedFilter != null, transformedFilter!)
.OrderBy(x => x.CreationTime)
.Take(maxCount)
@ -81,7 +83,43 @@ public class MongoDbContextEventInbox<TMongoDbContext> : IMongoDbContextEventInb
var dbContext = await DbContextProvider.GetDbContextAsync();
var filter = Builders<IncomingEventRecord>.Filter.Eq(x => x.Id, id);
var update = Builders<IncomingEventRecord>.Update.Set(x => x.Processed, true).Set(x => x.ProcessedTime, Clock.Now);
var update = Builders<IncomingEventRecord>.Update.Set(x => x.Status, IncomingEventStatus.Processed).Set(x => x.HandledTime, Clock.Now);
if (dbContext.SessionHandle != null)
{
await dbContext.IncomingEvents.UpdateOneAsync(dbContext.SessionHandle, filter, update);
}
else
{
await dbContext.IncomingEvents.UpdateOneAsync(filter, update);
}
}
[UnitOfWork]
public virtual async Task RetryLaterAsync(Guid id, int retryCount, DateTime? nextRetryTime)
{
var dbContext = await DbContextProvider.GetDbContextAsync();
var filter = Builders<IncomingEventRecord>.Filter.Eq(x => x.Id, id);
var update = Builders<IncomingEventRecord>.Update.Set(x => x.RetryCount, retryCount).Set(x => x.NextRetryTime, nextRetryTime);
if (dbContext.SessionHandle != null)
{
await dbContext.IncomingEvents.UpdateOneAsync(dbContext.SessionHandle, filter, update);
}
else
{
await dbContext.IncomingEvents.UpdateOneAsync(filter, update);
}
}
[UnitOfWork]
public virtual async Task MarkAsDiscardAsync(Guid id)
{
var dbContext = await DbContextProvider.GetDbContextAsync();
var filter = Builders<IncomingEventRecord>.Filter.Eq(x => x.Id, id);
var update = Builders<IncomingEventRecord>.Update.Set(x => x.Status, IncomingEventStatus.Discarded).Set(x => x.HandledTime, Clock.Now);
if (dbContext.SessionHandle != null)
{
@ -108,11 +146,11 @@ public class MongoDbContextEventInbox<TMongoDbContext> : IMongoDbContextEventInb
if (dbContext.SessionHandle != null)
{
await dbContext.IncomingEvents.DeleteManyAsync(dbContext.SessionHandle, x => x.Processed && x.CreationTime < timeToKeepEvents);
await dbContext.IncomingEvents.DeleteManyAsync(dbContext.SessionHandle, x => (x.Status == IncomingEventStatus.Processed || x.Status == IncomingEventStatus.Discarded) && x.CreationTime < timeToKeepEvents);
}
else
{
await dbContext.IncomingEvents.DeleteManyAsync(x => x.Processed && x.CreationTime < timeToKeepEvents);
await dbContext.IncomingEvents.DeleteManyAsync(x => (x.Status == IncomingEventStatus.Processed || x.Status == IncomingEventStatus.Discarded) && x.CreationTime < timeToKeepEvents);
}
}
}

77
framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Auditing/Auditing_Tests.cs

@ -1,6 +1,10 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using NSubstitute;
using Shouldly;
using Volo.Abp.Domain.Entities.Events;
using Volo.Abp.TestApp;
using Volo.Abp.TestApp.Testing;
using Xunit;
@ -9,6 +13,16 @@ namespace Volo.Abp.EntityFrameworkCore.Auditing;
public class Auditing_Tests : Auditing_Tests<AbpEntityFrameworkCoreTestModule>
{
protected IEntityChangeEventHelper EntityChangeEventHelper;
protected override void AfterAddApplication(IServiceCollection services)
{
EntityChangeEventHelper = Substitute.For<IEntityChangeEventHelper>();
services.Replace(ServiceDescriptor.Singleton(EntityChangeEventHelper));
base.AfterAddApplication(services);
}
[Fact]
public async Task Should_Not_Set_Modification_If_Properties_Generated_By_Database()
{
@ -24,7 +38,6 @@ public class Auditing_Tests : Auditing_Tests<AbpEntityFrameworkCoreTestModule>
douglas.ShouldNotBeNull();
douglas.LastModificationTime.ShouldBeNull();
douglas.LastModificationTime.ShouldBeNull();
douglas.LastModifierId.ShouldBeNull();
}));
}
@ -71,4 +84,66 @@ public class Auditing_Tests : Auditing_Tests<AbpEntityFrameworkCoreTestModule>
douglas.LastModifierId.ShouldBe(CurrentUserId);
}));
}
[Fact]
public async Task Should_Not_Set_Modification_If_Properties_HasDisableAuditing_UpdateModificationProps()
{
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId);
douglas.DisableAuditingUpdateModificationPropsProperty = Guid.NewGuid().ToString();
}));
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId);
douglas.ShouldNotBeNull();
douglas.LastModificationTime.ShouldBeNull();
douglas.LastModifierId.ShouldBeNull();
}));
EntityChangeEventHelper.Received().PublishEntityUpdatedEvent(Arg.Any<object>());
}
[Fact]
public async Task Should_Not_PublishEntityEvent_If_Properties_HasDisableAuditing_PublishEntityEventProperty()
{
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId);
douglas.DisableAuditingPublishEntityEventProperty = Guid.NewGuid().ToString();
}));
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId);
douglas.ShouldNotBeNull();
douglas.LastModificationTime.ShouldNotBeNull();
}));
EntityChangeEventHelper.DidNotReceive().PublishEntityUpdatedEvent(Arg.Any<object>());
}
[Fact]
public async Task Should_Set_Modification_And_PublishEntityEvent_If_Properties_HasDisableAuditing()
{
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId);
douglas.DisableAuditingProperty = Guid.NewGuid().ToString();
}));
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId);
douglas.ShouldNotBeNull();
douglas.LastModificationTime.ShouldNotBeNull();
}));
EntityChangeEventHelper.Received().PublishEntityUpdatedEvent(Arg.Any<object>());
}
}

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

@ -196,7 +196,7 @@ public class AbpLocalization_Tests : AbpIntegratedTest<AbpLocalizationTestModule
{
_localizer["CarPlural"].Value.ShouldBe("汽车");
}
using (CultureHelper.Use(CultureInfo.GetCultureInfo("zh-Hans-CN")))
{
_localizer["Car"].Value.ShouldBe("汽车");
@ -214,7 +214,7 @@ public class AbpLocalization_Tests : AbpIntegratedTest<AbpLocalizationTestModule
{
_localizer["CarPlural"].Value.ShouldBe("汽車");
}
using (CultureHelper.Use(CultureInfo.GetCultureInfo("zh-TW")))
{
_localizer["Car"].Value.ShouldBe("汽車");
@ -223,7 +223,7 @@ public class AbpLocalization_Tests : AbpIntegratedTest<AbpLocalizationTestModule
{
_localizer["CarPlural"].Value.ShouldBe("汽車");
}
using (CultureHelper.Use(CultureInfo.GetCultureInfo("zh-Hant-TW")))
{
_localizer["Car"].Value.ShouldBe("汽車");
@ -375,4 +375,21 @@ public class AbpLocalization_Tests : AbpIntegratedTest<AbpLocalizationTestModule
var externalLocalizer = _localizerFactory.CreateByResourceName(TestExternalLocalizationStore.TestExternalResourceNames.ExternalResource1);
externalLocalizer["Car"].Value.ShouldBe("Car");
}
}
[Fact]
public void Should_Get_Nested_Translations()
{
using (CultureHelper.Use("en"))
{
_localizer["MyNestedTranslation__SomeKey"].Value.ShouldBe("Some nested value");
_localizer["MyNestedTranslation__SomeOtherKey"].Value.ShouldBe("Some other nested value");
_localizer["MyNestedTranslation__DeeplyNested__DeepKey"].Value.ShouldBe("A deeply nested value");
_localizer["MyNestedTranslation__DeeplyNestedArray__0"].Value.ShouldBe("First value in array");
_localizer["MyNestedTranslation__DeeplyNestedArray__1"].Value.ShouldBe("Second value in array");
_localizer["MyNestedTranslation__DeeplyNestedArray__2__InnerDeepKey"].Value.ShouldBe("Inner deeply nested value");
_localizer["MyNestedTranslation__DeeplyNestedArray__3__InnerDeepArray__0"].Value.ShouldBe("First inner deep array value");
_localizer["MyNestedTranslation__DeeplyNestedArray__3__InnerDeepArray__1"].Value.ShouldBe("Second inner deep array value");
}
}
}

24
framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/en.json

@ -1,6 +1,26 @@
{
"culture": "en",
"texts": {
"SeeYou": "See you"
"SeeYou": "See you",
"MyNestedTranslation": {
"SomeKey": "Some nested value",
"SomeOtherKey": "Some other nested value",
"DeeplyNested": {
"DeepKey": "A deeply nested value"
},
"DeeplyNestedArray": [
"First value in array",
"Second value in array",
{
"InnerDeepKey": "Inner deeply nested value"
},
{
"InnerDeepArray": [
"First inner deep array value",
"Second inner deep array value"
]
}
]
}
}
}
}

9
framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/Person.cs

@ -34,6 +34,15 @@ public class Person : FullAuditedAggregateRoot<Guid>, IMultiTenant, IHasEntityVe
public int EntityVersion { get; set; }
[DisableAuditing(UpdateModificationProps = false)]
public string DisableAuditingUpdateModificationPropsProperty { get; set; }
[DisableAuditing(PublishEntityEvent = false)]
public string DisableAuditingPublishEntityEventProperty { get; set; }
[DisableAuditing]
public string DisableAuditingProperty { get; set; }
private Person()
{
}

4
framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityCache_Tests.cs

@ -37,8 +37,8 @@ public abstract class EntityCache_Tests<TStartupModule> : TestAppTestBase<TStart
public async Task Should_Throw_EntityNotFoundException_IF_Entity_Not_Exist()
{
var notExistId = Guid.NewGuid();
await Assert.ThrowsAsync<EntityNotFoundException>(() => ProductEntityCache.GetAsync(notExistId));
await Assert.ThrowsAsync<EntityNotFoundException>(() => ProductCacheItem.GetAsync(notExistId));
await Assert.ThrowsAsync<EntityNotFoundException<Product>>(() => ProductEntityCache.GetAsync(notExistId));
await Assert.ThrowsAsync<EntityNotFoundException<Product>>(() => ProductCacheItem.GetAsync(notExistId));
}
[Fact]

4
framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/RepositoryExtensions_Tests.cs

@ -24,10 +24,10 @@ public abstract class RepositoryExtensions_Tests<TStartupModule> : TestAppTestBa
await WithUnitOfWorkAsync(async () =>
{
var id = Guid.NewGuid();
await Assert.ThrowsAsync<EntityNotFoundException>(async () =>
await Assert.ThrowsAsync<EntityNotFoundException<Person>>(async () =>
await PersonRepository.EnsureExistsAsync(Guid.NewGuid())
);
await Assert.ThrowsAsync<EntityNotFoundException>(async () =>
await Assert.ThrowsAsync<EntityNotFoundException<Person>>(async () =>
await PersonRepository.EnsureExistsAsync(x => x.Id == id)
);

9
latest-versions.json

@ -1,4 +1,13 @@
[
{
"version": "9.3.3",
"releaseDate": "",
"type": "stable",
"message": "",
"leptonx": {
"version": "4.3.3"
}
},
{
"version": "9.3.2",
"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": "~9.3.3",
"@abp/prismjs": "~9.3.3",
"@abp/highlight.js": "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared": "~9.3.4",
"@abp/prismjs": "~9.3.4",
"@abp/highlight.js": "~9.3.4"
}
}

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

@ -2,203 +2,203 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/clipboard@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed"
integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA==
"@abp/clipboard@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.4.tgz#5d87616bec7ecba999cf8b92d166e3b276dcf76b"
integrity sha512-Zy7bglv4vF3LvdXL0De/8Dy/VaQTHA0k2FNN6YjrZX3Brj2PqlQ+1vGcHmoZheI6Wz1DYME+jOVpa5gQziBFJA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
clipboard "^2.0.11"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/highlight.js@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.3.tgz#fe557c7e3a8d17f3c319d6af8d90de4979f28589"
integrity sha512-sqRynOCoBZAYqqQXU3LEmSupC7HrkmRg+8I8CJJZbfduZJvETbWZyXAISLkyTOzPa9CvOOBXYjnpCkjCWqOxcg==
"@abp/highlight.js@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.4.tgz#62a98df3441d6586da0c51e60409cb928115dbb8"
integrity sha512-CapJClX9aT1qjNMdCXS//2YFL1fV2jv8jpqmxdIK2D5aqNv2m8+qArCSlkdfUGnkptGrzJhPizgn39bqYpXDyA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@highlightjs/cdn-assets" "~11.10.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/prismjs@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904"
integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA==
"@abp/prismjs@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.4.tgz#5790cad00edfccbcaf1547f12d9c040b2ade735d"
integrity sha512-KVdolBH4G8h0FhXyL2noc8JodadbM8EowjCwkbTaqiTeY4qjTTXfQf+kBwVg6x/C3uMmO2hjbFMHeXA+f3rVfw==
dependencies:
"@abp/clipboard" "~9.3.3"
"@abp/core" "~9.3.3"
"@abp/clipboard" "~9.3.4"
"@abp/core" "~9.3.4"
prismjs "^1.29.0"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
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": "~9.3.3",
"@abp/prismjs": "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.4",
"@abp/prismjs": "~9.3.4"
},
"devDependencies": {}
}

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

@ -2,202 +2,202 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7"
integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.4.tgz#66b2969062aa15ca7d448d36cccccfdec6054165"
integrity sha512-rmgYDDImW+bJnbWE1rEAjce/CA7xlmHQrcr5AoHCWvMnOi5Z5YUZleOcND+Wb7pxEJ8ptWOn9pIg6MIcFl1Nnw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/clipboard@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed"
integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA==
"@abp/clipboard@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.4.tgz#5d87616bec7ecba999cf8b92d166e3b276dcf76b"
integrity sha512-Zy7bglv4vF3LvdXL0De/8Dy/VaQTHA0k2FNN6YjrZX3Brj2PqlQ+1vGcHmoZheI6Wz1DYME+jOVpa5gQziBFJA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
clipboard "^2.0.11"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/prismjs@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904"
integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA==
"@abp/prismjs@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.4.tgz#5790cad00edfccbcaf1547f12d9c040b2ade735d"
integrity sha512-KVdolBH4G8h0FhXyL2noc8JodadbM8EowjCwkbTaqiTeY4qjTTXfQf+kBwVg6x/C3uMmO2hjbFMHeXA+f3rVfw==
dependencies:
"@abp/clipboard" "~9.3.3"
"@abp/core" "~9.3.3"
"@abp/clipboard" "~9.3.4"
"@abp/core" "~9.3.4"
prismjs "^1.29.0"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
dependencies:
just-compare "^2.3.0"

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

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

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

@ -2,228 +2,228 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7"
integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.4.tgz#66b2969062aa15ca7d448d36cccccfdec6054165"
integrity sha512-rmgYDDImW+bJnbWE1rEAjce/CA7xlmHQrcr5AoHCWvMnOi5Z5YUZleOcND+Wb7pxEJ8ptWOn9pIg6MIcFl1Nnw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/blogging@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-9.3.3.tgz#16a4433b52f8ec08e8b4ed1d7fef8ee072fe47f7"
integrity sha512-hND79rJkapTEr4bwlh2Bzv2SdwOKXLMHtXv2nrtsmCb/GkPvkBNX07gewvJos/rIupxal0ZKH3aNcUzllH3ccA==
"@abp/blogging@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-9.3.4.tgz#0c6854a20f26458cfa07180375ea64f198975bc8"
integrity sha512-PW9GQhLFXT0jXUuYGgrYJoPEeKbjcdE2HEGLmxNCM/TwSlfMushkcKbTp4dU77Z9QoDWPJlWMgd+SZmRFyosuw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/owl.carousel" "~9.3.3"
"@abp/prismjs" "~9.3.3"
"@abp/tui-editor" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/owl.carousel" "~9.3.4"
"@abp/prismjs" "~9.3.4"
"@abp/tui-editor" "~9.3.4"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/clipboard@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed"
integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA==
"@abp/clipboard@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.4.tgz#5d87616bec7ecba999cf8b92d166e3b276dcf76b"
integrity sha512-Zy7bglv4vF3LvdXL0De/8Dy/VaQTHA0k2FNN6YjrZX3Brj2PqlQ+1vGcHmoZheI6Wz1DYME+jOVpa5gQziBFJA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
clipboard "^2.0.11"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/owl.carousel@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-9.3.3.tgz#fc94b12ff3c1df59a770a7a4519b9d765a1861ab"
integrity sha512-ZJnWMu9PPAgwMOxtrcE8PcMXOlhVcwfcBF1soIOCcY3eC3lGQ7t8voZr7Iu+WKC1CWeD0qxqHrlqXw+nHbc7Dw==
"@abp/owl.carousel@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-9.3.4.tgz#b63ee94c585aeda369fc39b495b963508ab9368d"
integrity sha512-kvhrd0HY1f1+zYks8H10e/eNcMSJ83zGLw64r9jBUsdFInetuhaAirZVlx+q5scLI8jDzyMoA/vACeTcNlQPqA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
owl.carousel "^2.3.4"
"@abp/prismjs@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904"
integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA==
"@abp/prismjs@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.4.tgz#5790cad00edfccbcaf1547f12d9c040b2ade735d"
integrity sha512-KVdolBH4G8h0FhXyL2noc8JodadbM8EowjCwkbTaqiTeY4qjTTXfQf+kBwVg6x/C3uMmO2hjbFMHeXA+f3rVfw==
dependencies:
"@abp/clipboard" "~9.3.3"
"@abp/core" "~9.3.3"
"@abp/clipboard" "~9.3.4"
"@abp/core" "~9.3.4"
prismjs "^1.29.0"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/tui-editor@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.3.tgz#0a4651bb4babc625f4598ebddcb4049eedcff4cc"
integrity sha512-9iHqRRFS6EVqrKwZ75yVW2nkTkZxF5BcVOYnIMTApwrxsRTqzQ95tikt0UNUZ4qgmsgDy4LeOnJAVk1K6MsiQA==
"@abp/tui-editor@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.4.tgz#e6a241223aac4a39dd1c48043611f304202e7992"
integrity sha512-Xw8TpOXkLztlXLS3Ky3s5d0W6zIob2G2oFe+iWay5OrTVPSNUHfPmtsrp+Rbd3PjaeZG7OyCkBFBI71IJQdiOg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/prismjs" "~9.3.3"
"@abp/jquery" "~9.3.4"
"@abp/prismjs" "~9.3.4"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
dependencies:
just-compare "^2.3.0"

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

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

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

@ -2,185 +2,185 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7"
integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ==
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.4.tgz#66b2969062aa15ca7d448d36cccccfdec6054165"
integrity sha512-rmgYDDImW+bJnbWE1rEAjce/CA7xlmHQrcr5AoHCWvMnOi5Z5YUZleOcND+Wb7pxEJ8ptWOn9pIg6MIcFl1Nnw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
dependencies:
just-compare "^2.3.0"

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

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

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

@ -4,8 +4,8 @@
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
"@abp/ng.core": ">=9.3.3",
"@abp/ng.theme.shared": ">=9.3.3"
"@abp/ng.core": ">=9.3.4",
"@abp/ng.theme.shared": ">=9.3.4"
},
"dependencies": {
"tslib": "^2.0.0"

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

@ -3,6 +3,6 @@
"name": "my-app-identityserver",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.4"
}
}

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

@ -2,185 +2,185 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7"
integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ==
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.4.tgz#66b2969062aa15ca7d448d36cccccfdec6054165"
integrity sha512-rmgYDDImW+bJnbWE1rEAjce/CA7xlmHQrcr5AoHCWvMnOi5Z5YUZleOcND+Wb7pxEJ8ptWOn9pIg6MIcFl1Nnw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
dependencies:
just-compare "^2.3.0"

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

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

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

@ -2,185 +2,185 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7"
integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ==
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.4.tgz#66b2969062aa15ca7d448d36cccccfdec6054165"
integrity sha512-rmgYDDImW+bJnbWE1rEAjce/CA7xlmHQrcr5AoHCWvMnOi5Z5YUZleOcND+Wb7pxEJ8ptWOn9pIg6MIcFl1Nnw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
dependencies:
just-compare "^2.3.0"

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

@ -3,7 +3,7 @@
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3",
"@abp/cms-kit": "9.3.3"
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.4",
"@abp/cms-kit": "9.3.4"
}
}

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

@ -2,293 +2,293 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7"
integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.4.tgz#66b2969062aa15ca7d448d36cccccfdec6054165"
integrity sha512-rmgYDDImW+bJnbWE1rEAjce/CA7xlmHQrcr5AoHCWvMnOi5Z5YUZleOcND+Wb7pxEJ8ptWOn9pIg6MIcFl1Nnw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/clipboard@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed"
integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA==
"@abp/clipboard@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.4.tgz#5d87616bec7ecba999cf8b92d166e3b276dcf76b"
integrity sha512-Zy7bglv4vF3LvdXL0De/8Dy/VaQTHA0k2FNN6YjrZX3Brj2PqlQ+1vGcHmoZheI6Wz1DYME+jOVpa5gQziBFJA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
clipboard "^2.0.11"
"@abp/cms-kit.admin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-9.3.3.tgz#f3ca6e4ecdda1a70ef8581ad1e302c4dd7b77316"
integrity sha512-cvHYgvtFuM5G2TkkeEIvRgpC7tZDGioVXLKNqovT4T1XzCtqZyuU3AOKBHCZqiqinJZ+9E/FsnKKjp3vlZpvZw==
"@abp/cms-kit.admin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-9.3.4.tgz#eac26845acc7fa0eba9975effc33c5a8b2ccac02"
integrity sha512-gEIV1vnpQd1PxHUpwwOuJ2YnzPHr03EtmZRQU36dxx09M+JcXDqGwfamtsxJxvi1h9RAWejj6Va/t0NlYCmL5g==
dependencies:
"@abp/codemirror" "~9.3.3"
"@abp/jstree" "~9.3.3"
"@abp/markdown-it" "~9.3.3"
"@abp/slugify" "~9.3.3"
"@abp/tui-editor" "~9.3.3"
"@abp/uppy" "~9.3.3"
"@abp/codemirror" "~9.3.4"
"@abp/jstree" "~9.3.4"
"@abp/markdown-it" "~9.3.4"
"@abp/slugify" "~9.3.4"
"@abp/tui-editor" "~9.3.4"
"@abp/uppy" "~9.3.4"
"@abp/cms-kit.public@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-9.3.3.tgz#b2140e2edc4e78f55ff4d01416685bdc7109f663"
integrity sha512-5xh41EqEwxMdSUMb89XXmlO7c7vbe4XU3kzEMxN70V7jAUtww+bCHKqbw/mqvHhjuSCdXQ0K+IfTjWxZ/kFPVQ==
"@abp/cms-kit.public@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-9.3.4.tgz#becd73e870d8aea36bb473e6bfd296b330179225"
integrity sha512-LT2U4bTCiTurtbs3TByhlAc14z34puapGph03QPu7973cp8g8ls+Yrp/bT05aDDrGE3fnBVW5Axd/cy1/5BPWQ==
dependencies:
"@abp/highlight.js" "~9.3.3"
"@abp/star-rating-svg" "~9.3.3"
"@abp/highlight.js" "~9.3.4"
"@abp/star-rating-svg" "~9.3.4"
"@abp/cms-kit@9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-9.3.3.tgz#7b8e67a5391aefb5f563af8a9b0435c008612185"
integrity sha512-+G3SuChVU6apexSCqW7W0Zy4EO/hiKt5cXRWjjx5A8em+SgUOuDB2/nA1TNBe/IGixJJbei6qF4mLlabwnJDTw==
"@abp/cms-kit@9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-9.3.4.tgz#d8974758d7f7566176fabc23149500944a1322ce"
integrity sha512-nhAbIkUbH4+lp6IBEGynY8hTavyCDs2XT4ig46OnLD2NJFSvb9bVejUHjhxP+2BYxcgmkLWI4BsTs8j94SbYUA==
dependencies:
"@abp/cms-kit.admin" "~9.3.3"
"@abp/cms-kit.public" "~9.3.3"
"@abp/cms-kit.admin" "~9.3.4"
"@abp/cms-kit.public" "~9.3.4"
"@abp/codemirror@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-9.3.3.tgz#9bb164b214d1969a951f46ee997a69856c25bc26"
integrity sha512-XivrP8v9kztDFWTXkuoHLONFdBQ54dlVUsmwv8WBRVl4QKfVIDhSZs8EmqU8PSIqygS10rcjo6dDLvJYEL3mfg==
"@abp/codemirror@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-9.3.4.tgz#4018a723a804eef48db146f4b3ac76acf9a53bef"
integrity sha512-YQOMyGmbPpBLzWZyUve45ZCanJClHp9sVkZQjzJzUY62exakhwtImVr5akRbScfzGMJZKCIP3cUhDUE7gB+TJA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
codemirror "^5.65.1"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/highlight.js@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.3.tgz#fe557c7e3a8d17f3c319d6af8d90de4979f28589"
integrity sha512-sqRynOCoBZAYqqQXU3LEmSupC7HrkmRg+8I8CJJZbfduZJvETbWZyXAISLkyTOzPa9CvOOBXYjnpCkjCWqOxcg==
"@abp/highlight.js@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.4.tgz#62a98df3441d6586da0c51e60409cb928115dbb8"
integrity sha512-CapJClX9aT1qjNMdCXS//2YFL1fV2jv8jpqmxdIK2D5aqNv2m8+qArCSlkdfUGnkptGrzJhPizgn39bqYpXDyA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@highlightjs/cdn-assets" "~11.10.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/jstree@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-9.3.3.tgz#6c7ab0049dc033da23617ce9e192fb98b1a0a081"
integrity sha512-HVkL6DtiURnhBhqivBAnVpFSgrAJ5HCsieVBPdciWdrggQ0Y/rPZN6F+HrrI28Asymnj8ayrG/4735yAn2bNZA==
"@abp/jstree@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-9.3.4.tgz#552b38e89626d9c25c4bb21f47c5c4411fc2337f"
integrity sha512-Q/RcrsfpVv6JJU8g+C4z2jYBeK+UD4Fu0yCKWi1UBCTt7bvm6pvXKqTqCdoZQdSnCd2/2RACuYlmvBTU1LLLRQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jstree "^3.3.17"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/markdown-it@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-9.3.3.tgz#4fc2b4934fe50999e6f20015b7f4e4bdbd185e38"
integrity sha512-6/IZ/2XQQzsnjYNBCcFxTroVenThiridD1oyRmtGK/+q7TGkgxU6x7b89losmvn8n1oGKBOOsqr/f3knEB/+RA==
"@abp/markdown-it@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-9.3.4.tgz#a6f62798c83854e8ae843e64e17441cb1a20788d"
integrity sha512-SDL7lijWSD1lRYmXQt8dIatI2TXuf1jwmDMfQpDLgliwk3W0ij28IPZ9aRwJvirJqAWSD/KE1xNI2+nfwVvpYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
markdown-it "^14.1.0"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/prismjs@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904"
integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA==
"@abp/prismjs@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.4.tgz#5790cad00edfccbcaf1547f12d9c040b2ade735d"
integrity sha512-KVdolBH4G8h0FhXyL2noc8JodadbM8EowjCwkbTaqiTeY4qjTTXfQf+kBwVg6x/C3uMmO2hjbFMHeXA+f3rVfw==
dependencies:
"@abp/clipboard" "~9.3.3"
"@abp/core" "~9.3.3"
"@abp/clipboard" "~9.3.4"
"@abp/core" "~9.3.4"
prismjs "^1.29.0"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/slugify@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-9.3.3.tgz#9cf5b7d924f69a3e75e3cbfa87e0f7ee0e99ad3b"
integrity sha512-9cuT2CgCwcUumuTuMtVq108i65gAgz3SBWq7xy5CW5fS72OenRqi45N1m3yKQxhZ1JIkbvBGI5UlKHmWd9W7mQ==
"@abp/slugify@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-9.3.4.tgz#980bf3526d95d4fba2cb32ac2ccee93694d05d19"
integrity sha512-up/moi4xuJq1bPIQpwC6YqTKOtPMWWvmx4WnEHCME/I18PH/NOa9T8A0SmhWtdDDvQvUBaiJeuyK4so+PD79yg==
dependencies:
slugify "^1.6.6"
"@abp/star-rating-svg@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-9.3.3.tgz#3330bcc4635aed05001404cbdf3cb84ef68f211e"
integrity sha512-rSpXtyhL7n21mp7O7GotbyJyBL+Yo/6+UAAXgPjpq0qia8OHB+aRPuZiyBBQwvPfR8nIzRK0wrdwOsaSaFU71Q==
"@abp/star-rating-svg@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-9.3.4.tgz#baba7f2bdb9d32d840868887f01573b73c1b30c8"
integrity sha512-SgaUAEYeIdSvKiXM3Q8ub2mws50ZU4Wa1Ez3RZY1UkHkMiAEThbkL2dWhMvxCvQoeuXK8cLbUv2PWFMrLaE3lA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
star-rating-svg "^3.5.0"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/tui-editor@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.3.tgz#0a4651bb4babc625f4598ebddcb4049eedcff4cc"
integrity sha512-9iHqRRFS6EVqrKwZ75yVW2nkTkZxF5BcVOYnIMTApwrxsRTqzQ95tikt0UNUZ4qgmsgDy4LeOnJAVk1K6MsiQA==
"@abp/tui-editor@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.4.tgz#e6a241223aac4a39dd1c48043611f304202e7992"
integrity sha512-Xw8TpOXkLztlXLS3Ky3s5d0W6zIob2G2oFe+iWay5OrTVPSNUHfPmtsrp+Rbd3PjaeZG7OyCkBFBI71IJQdiOg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/prismjs" "~9.3.3"
"@abp/jquery" "~9.3.4"
"@abp/prismjs" "~9.3.4"
"@abp/uppy@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-9.3.3.tgz#cb7371e323340021f8de80295f53557df05aeab7"
integrity sha512-/3dBmqlxt/pJ5iQJN6zqoGyCmXN4MSqkKqR+ZVo+z5H807GQiYfZbQ8aqDzTpqIEEF+9NU5Czyelvm5zby6PlA==
"@abp/uppy@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-9.3.4.tgz#5f605595c8be58a41610acff2aab4a0e7bb07f53"
integrity sha512-81TY9ccRd9JrDIK/MqoOHejfKJDAx8DMSQ5iI6fTeXwZyyuOi68lrabvcQNltc2ZJQqeTUpYMjGPJi54EaP+GA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
uppy "^4.4.1"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
dependencies:
just-compare "^2.3.0"

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

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

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

@ -2,229 +2,229 @@
# yarn lockfile v1
"@abp/anchor-js@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-9.3.3.tgz#cc98c5eb55ba854f3e6d379401bdc8606c6ff69b"
integrity sha512-h+ifARYy3nRfe1hzO7hx3ELqdMf1nxjcWjBBSvRHRqsxpjZqhE7B4Pasw+Se2VmCCfvP2wYDYmed8Ejfksezyg==
"@abp/anchor-js@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-9.3.4.tgz#bf02015001e6b14d00d220b983125e5417d5a911"
integrity sha512-Jx3GCMQwhAn+d2sz72m0dMlItoJ/RlRa4Lmqgqrf5d3mJOvaAydk+MqSIVeP0HLExk+ZwB9c/9n2QChm52dZuw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
anchor-js "^5.0.0"
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7"
integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.4.tgz#66b2969062aa15ca7d448d36cccccfdec6054165"
integrity sha512-rmgYDDImW+bJnbWE1rEAjce/CA7xlmHQrcr5AoHCWvMnOi5Z5YUZleOcND+Wb7pxEJ8ptWOn9pIg6MIcFl1Nnw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/clipboard@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed"
integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA==
"@abp/clipboard@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.4.tgz#5d87616bec7ecba999cf8b92d166e3b276dcf76b"
integrity sha512-Zy7bglv4vF3LvdXL0De/8Dy/VaQTHA0k2FNN6YjrZX3Brj2PqlQ+1vGcHmoZheI6Wz1DYME+jOVpa5gQziBFJA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
clipboard "^2.0.11"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/docs@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-9.3.3.tgz#52aabdca61bc5a6479a7d2a64c59204a789d051b"
integrity sha512-lb0zaYstUN2lzbDRwnrrbHHViVboJi2uyLEqxeM11Ds+8Yrt93u+42Aol9P14wYlgvYcvXUN5erffYawFSkPDg==
"@abp/docs@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-9.3.4.tgz#c60e151dc44c89b2ceaeba64b3112d5ec4a18f2e"
integrity sha512-Uupv/GDIFgTgo3O4CUNp06l0j6u1LrqKXQ1KD9hfbB/YAfU6xeAMqKm+5yTTBus0uvI1RqBThFp1TNAw+b1MjQ==
dependencies:
"@abp/anchor-js" "~9.3.3"
"@abp/clipboard" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/popper.js" "~9.3.3"
"@abp/prismjs" "~9.3.3"
"@abp/anchor-js" "~9.3.4"
"@abp/clipboard" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/popper.js" "~9.3.4"
"@abp/prismjs" "~9.3.4"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/popper.js@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-9.3.3.tgz#23c729cbadec27a2452f81a32a88c7357963281d"
integrity sha512-vo5RQBQV9R0sF34283vGDdDAjlGHB/dukNae04RvhN4N/0hUYssRIyEQENRHCn86sWtrd8YKSUoOSPW2LPH6Cg==
"@abp/popper.js@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-9.3.4.tgz#02730d16b660432a3ffaeff559fb992b452c5c5d"
integrity sha512-fm+hwydFU71d3en6zarfxVOxMaXVsQc8qWGpA/im0Gd2vnP+Uz6RoqRFGuUoWTLb3juX4ov+O3DrNPXRykKd+g==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@popperjs/core" "^2.11.8"
"@abp/prismjs@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904"
integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA==
"@abp/prismjs@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.4.tgz#5790cad00edfccbcaf1547f12d9c040b2ade735d"
integrity sha512-KVdolBH4G8h0FhXyL2noc8JodadbM8EowjCwkbTaqiTeY4qjTTXfQf+kBwVg6x/C3uMmO2hjbFMHeXA+f3rVfw==
dependencies:
"@abp/clipboard" "~9.3.3"
"@abp/core" "~9.3.3"
"@abp/clipboard" "~9.3.4"
"@abp/core" "~9.3.4"
prismjs "^1.29.0"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
dependencies:
just-compare "^2.3.0"

10
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserDelegationRepository.cs

@ -31,22 +31,24 @@ public class EfCoreIdentityUserDelegationRepository : EfCoreRepository<IIdentity
public virtual async Task<List<IdentityUserDelegation>> GetActiveDelegationsAsync(Guid targetUserId, CancellationToken cancellationToken = default)
{
var now = Clock.Now;
return await (await GetDbSetAsync())
.AsNoTracking()
.Where(x => x.TargetUserId == targetUserId &&
x.StartTime <= Clock.Now &&
x.EndTime >= Clock.Now)
x.StartTime <= now &&
x.EndTime >= now)
.ToListAsync(cancellationToken: cancellationToken);
}
public virtual async Task<IdentityUserDelegation> FindActiveDelegationByIdAsync(Guid id, CancellationToken cancellationToken = default)
{
var now = Clock.Now;
return await (await GetDbSetAsync())
.AsNoTracking()
.FirstOrDefaultAsync(x =>
x.Id == id &&
x.StartTime <= Clock.Now &&
x.EndTime >= Clock.Now
x.StartTime <= now &&
x.EndTime >= now
, cancellationToken: GetCancellationToken(cancellationToken));
}
}

8
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserDelegationRepository.cs

@ -32,19 +32,21 @@ public class MongoIdentityUserDelegationRepository : MongoDbRepository<IAbpIdent
public virtual async Task<List<IdentityUserDelegation>> GetActiveDelegationsAsync(Guid targetUserId, CancellationToken cancellationToken = default)
{
var now = Clock.Now;
return await (await GetQueryableAsync(cancellationToken))
.Where(x => x.TargetUserId == targetUserId)
.Where(x => x.StartTime <= Clock.Now && x.EndTime >= Clock.Now)
.Where(x => x.StartTime <= now && x.EndTime >= now)
.ToListAsync(cancellationToken: cancellationToken);
}
public virtual async Task<IdentityUserDelegation> FindActiveDelegationByIdAsync(Guid id, CancellationToken cancellationToken = default)
{
var now = Clock.Now;
return await (await GetQueryableAsync(cancellationToken))
.FirstOrDefaultAsync(x =>
x.Id == id &&
x.StartTime <= Clock.Now &&
x.EndTime >= Clock.Now
x.StartTime <= now &&
x.EndTime >= now
, cancellationToken: GetCancellationToken(cancellationToken));
}
}

2
modules/openiddict/app/OpenIddict.Demo.Server/package.json

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

20
modules/openiddict/app/angular/package.json

@ -12,15 +12,15 @@
},
"private": true,
"dependencies": {
"@abp/ng.account": "~9.3.3",
"@abp/ng.components": "~9.3.3",
"@abp/ng.core": "~9.3.3",
"@abp/ng.oauth": "~9.3.3",
"@abp/ng.identity": "~9.3.3",
"@abp/ng.setting-management": "~9.3.3",
"@abp/ng.tenant-management": "~9.3.3",
"@abp/ng.theme.shared": "~9.3.3",
"@abp/ng.theme.lepton-x": "~4.3.3",
"@abp/ng.account": "~9.3.4",
"@abp/ng.components": "~9.3.4",
"@abp/ng.core": "~9.3.4",
"@abp/ng.oauth": "~9.3.4",
"@abp/ng.identity": "~9.3.4",
"@abp/ng.setting-management": "~9.3.4",
"@abp/ng.tenant-management": "~9.3.4",
"@abp/ng.theme.shared": "~9.3.4",
"@abp/ng.theme.lepton-x": "~4.3.4",
"@angular/animations": "^15.0.1",
"@angular/common": "^15.0.1",
"@angular/compiler": "^15.0.1",
@ -36,7 +36,7 @@
"zone.js": "~0.11.4"
},
"devDependencies": {
"@abp/ng.schematics": "~9.3.3",
"@abp/ng.schematics": "~9.3.4",
"@angular-devkit/build-angular": "^15.0.1",
"@angular-eslint/builder": "~15.1.0",
"@angular-eslint/eslint-plugin": "~15.1.0",

74
modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs

@ -31,11 +31,8 @@ public partial class PermissionManagementModal
protected string _selectedTabName;
protected int _grantedPermissionCount = 0;
protected int _notGrantedPermissionCount = 0;
protected bool _selectAllDisabled;
protected string _permissionGroupSearchText;
protected bool GrantAll { get; set; }
@ -62,8 +59,8 @@ public partial class PermissionManagementModal
_groups = _allGroups.ToList();
NormalizePermissionGroup();
GrantAll = _notGrantedPermissionCount == 0;
GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted);
await InvokeAsync(_modal.Show);
}
@ -76,17 +73,14 @@ public partial class PermissionManagementModal
protected virtual async Task GrantAllAsync(bool grantAll)
{
GrantAll = grantAll;
if (_allGroups == null)
{
return;
}
_grantedPermissionCount = 0;
_notGrantedPermissionCount = 0;
await OnPermissionGroupSearchTextChangedAsync(string.Empty);
foreach (var permission in _allGroups.SelectMany(x => x.Permissions))
{
if (IsDisabledPermission(permission))
@ -95,49 +89,28 @@ public partial class PermissionManagementModal
}
permission.IsGranted = grantAll;
if (grantAll)
{
_grantedPermissionCount++;
}
else
{
_notGrantedPermissionCount++;
}
}
await InvokeAsync(StateHasChanged);
}
protected virtual void NormalizePermissionGroup(bool checkDisabledPermissions = true)
{
_selectAllDisabled = _groups.All(IsPermissionGroupDisabled);
_grantedPermissionCount = 0;
_notGrantedPermissionCount = 0;
if (checkDisabledPermissions)
{
_disabledPermissions.Clear();
}
foreach (var permission in _groups.SelectMany(x => x.Permissions))
{
if (checkDisabledPermissions && permission.IsGranted && permission.GrantedProviders.All(x => x.ProviderName != _providerName))
{
_disabledPermissions.Add(permission);
continue;
}
if (permission.IsGranted)
{
_grantedPermissionCount++;
}
else
{
_notGrantedPermissionCount++;
}
}
foreach (var group in _groups)
{
SetPermissionDepths(group.Permissions, null, 0);
@ -210,7 +183,7 @@ public partial class PermissionManagementModal
return _permissionDepths.GetValueOrDefault(name, 0);
}
protected virtual void GroupGrantAllChanged(bool value, PermissionGroupDto permissionGroup)
protected virtual async Task GroupGrantAllChanged(bool value, PermissionGroupDto permissionGroup)
{
foreach (var permission in permissionGroup.Permissions)
{
@ -219,9 +192,12 @@ public partial class PermissionManagementModal
SetPermissionGrant(permission, value);
}
}
GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted);
await InvokeAsync(StateHasChanged);
}
protected virtual void PermissionChanged(bool value, PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission)
protected virtual async Task PermissionChanged(bool value, PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission)
{
SetPermissionGrant(permission, value);
@ -238,6 +214,9 @@ public partial class PermissionManagementModal
SetPermissionGrant(childPermission, false);
}
}
GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted);
await InvokeAsync(StateHasChanged);
}
private void SetParentPermissionGrant(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission)
@ -261,17 +240,6 @@ public partial class PermissionManagementModal
return;
}
if (value)
{
_grantedPermissionCount++;
_notGrantedPermissionCount--;
}
else
{
_grantedPermissionCount--;
_notGrantedPermissionCount++;
}
permission.IsGranted = value;
}
@ -338,22 +306,22 @@ public partial class PermissionManagementModal
return permissions.All(x => x.IsGranted) && grantedProviders.Any(p => p.ProviderName != _providerName);
}
protected virtual async Task OnPermissionGroupSearchTextChangedAsync(string value)
{
if (value == _permissionGroupSearchText)
{
return;
}
_permissionGroupSearchText = value;
_groups = _permissionGroupSearchText.IsNullOrWhiteSpace() ? _allGroups.ToList() : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase) || x.Permissions.Any(permission => permission.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase))).ToList();
NormalizePermissionGroup(false);
await InvokeAsync(StateHasChanged);
}
protected virtual Task OnSelectedTabChangedAsync(string name)
{
_selectedTabName = name;

2
modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json

@ -3,6 +3,6 @@
"name": "demo-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.4"
}
}

240
modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock

@ -2,185 +2,185 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7"
integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ==
"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.4.tgz#66b2969062aa15ca7d448d36cccccfdec6054165"
integrity sha512-rmgYDDImW+bJnbWE1rEAjce/CA7xlmHQrcr5AoHCWvMnOi5Z5YUZleOcND+Wb7pxEJ8ptWOn9pIg6MIcFl1Nnw==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.4"
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d"
integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw==
"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.4.tgz#af1bffb4f8743ad0def202ca8c8b7058c8dfcf3b"
integrity sha512-aUx7iDUqswlC8SvMa46OxM9McAhOj5AJHh9FWP29QF7+ZTMZLJ5Et6L9MkI+xxAkb4kmMWDnCKVnwnA/S13W1Q==
dependencies:
"@abp/aspnetcore.mvc.ui" "~9.3.3"
"@abp/bootstrap" "~9.3.3"
"@abp/bootstrap-datepicker" "~9.3.3"
"@abp/bootstrap-daterangepicker" "~9.3.3"
"@abp/datatables.net-bs5" "~9.3.3"
"@abp/font-awesome" "~9.3.3"
"@abp/jquery-form" "~9.3.3"
"@abp/jquery-validation-unobtrusive" "~9.3.3"
"@abp/lodash" "~9.3.3"
"@abp/luxon" "~9.3.3"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.3"
"@abp/moment" "~9.3.3"
"@abp/select2" "~9.3.3"
"@abp/sweetalert2" "~9.3.3"
"@abp/timeago" "~9.3.3"
"@abp/aspnetcore.mvc.ui@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387"
integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg==
"@abp/aspnetcore.mvc.ui" "~9.3.4"
"@abp/bootstrap" "~9.3.4"
"@abp/bootstrap-datepicker" "~9.3.4"
"@abp/bootstrap-daterangepicker" "~9.3.4"
"@abp/datatables.net-bs5" "~9.3.4"
"@abp/font-awesome" "~9.3.4"
"@abp/jquery-form" "~9.3.4"
"@abp/jquery-validation-unobtrusive" "~9.3.4"
"@abp/lodash" "~9.3.4"
"@abp/luxon" "~9.3.4"
"@abp/malihu-custom-scrollbar-plugin" "~9.3.4"
"@abp/moment" "~9.3.4"
"@abp/select2" "~9.3.4"
"@abp/sweetalert2" "~9.3.4"
"@abp/timeago" "~9.3.4"
"@abp/aspnetcore.mvc.ui@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.4.tgz#2248eca8c5ca69cf174f81c2b6770cfabe325a68"
integrity sha512-62A6QW903LmvWd6CGQHkNitYah0cMp5fraow1kQWLPeEp37WTMGl5XI13lkLYPlhAfBJV1reDAa89j24TzKSJA==
dependencies:
ansi-colors "^4.1.3"
"@abp/bootstrap-datepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f"
integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw==
"@abp/bootstrap-datepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.4.tgz#767f60005d3c9b72f14f1437af7ef14dd014f46a"
integrity sha512-zyCwMjkdV7x58VhOWw/ght4uNCLCe/ADsAuFCmYWeHRH9DuQuXPZPiBZMAtPLSxjHAO+/HfKAwoQt+Xelu4bSQ==
dependencies:
bootstrap-datepicker "^1.10.0"
"@abp/bootstrap-daterangepicker@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607"
integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q==
"@abp/bootstrap-daterangepicker@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.4.tgz#e00cab9d6abd2f8f865d6c3471b7e0f79a1e7cfa"
integrity sha512-su9DHyFuD0PvuUlK277l5u18Nls3QTOsiRNF0rNmR3NESi16ldqB5ctSQoYNEscny/BpWwlW0Otj6e4ojwCQDw==
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506"
integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA==
"@abp/bootstrap@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.4.tgz#928fb3a665d6aee72dd54e878793bb05000c64e4"
integrity sha512-yr7MhFyOAKxsw7zhmXI1iqaq6hZkI3k/MB1r+buVGVcfx0fIqKQUnkodLNLC5dHOAlglOKGk84KZver3dql4/w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
bootstrap "^5.3.3"
"@abp/core@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591"
integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw==
"@abp/core@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.4.tgz#dde73cf21c929400e14a296c34633cf8b327162f"
integrity sha512-MKBFM3rXljxsQKP/G8I97v4pn9MLSmPQuxBFo/qNHxSH83mJJh84465hrV4jCJMlsT4pUwJORRLlD/4X73bfqA==
dependencies:
"@abp/utils" "~9.3.3"
"@abp/utils" "~9.3.4"
"@abp/datatables.net-bs5@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6"
integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA==
"@abp/datatables.net-bs5@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.4.tgz#5d23f9ee492c7534320d61085cf638b66ef4790e"
integrity sha512-eTmgF43cXZpXkWWa+zsEfIJA6aQkdvMYVw8OckV58jGnk9bH6q4be8y6vKWLDfJqhMlmRry7+EPxKu00+BbkVQ==
dependencies:
"@abp/datatables.net" "~9.3.3"
"@abp/datatables.net" "~9.3.4"
datatables.net-bs5 "^2.1.8"
"@abp/datatables.net@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf"
integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ==
"@abp/datatables.net@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.4.tgz#dffae35877215b7e4d9e32d6ad05d02eba4dc792"
integrity sha512-0G1xUKS0gMgY1ZPJSlEtwULnvTI72aMrAXYk47JMt23kJpoTyQWUGokjhHkh9TJzWhbN25qgbs8vGco5FpRXMA==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
datatables.net "^2.1.8"
"@abp/font-awesome@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370"
integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw==
"@abp/font-awesome@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.4.tgz#f718b1546df3efd718b8569a4b21b70a7331f3cd"
integrity sha512-mYRnidh8vRXAmtTImbTrZMvSiKF4y8kipRz0x4uUC31cse6oCMSCBNSXtNQTYWGnnvHfizifpXupf+ykMY4zhw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
"@fortawesome/fontawesome-free" "^6.6.0"
"@abp/jquery-form@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094"
integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q==
"@abp/jquery-form@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.4.tgz#074212cda79e962baa1a396eeb2012e04dba997d"
integrity sha512-UcuaPM+w3AkmB4W4UrMZiLDuyeLJj7jDyJQr3ILYxCbrwdePdWcY0FAHrHgSa80XW7elPGx29nZo7XD99V+iqw==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235"
integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ==
"@abp/jquery-validation-unobtrusive@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.4.tgz#02f7b12c07caab390ad2db3727a360331007a79f"
integrity sha512-LvGde663YJca+H69yVjpz60z3Y22Pshj3Ys23nAnwN1O2C1U9F3kg8ZvbP6MakF3fnJooB0I+V+ay5hLbckeKg==
dependencies:
"@abp/jquery-validation" "~9.3.3"
"@abp/jquery-validation" "~9.3.4"
jquery-validation-unobtrusive "^4.0.0"
"@abp/jquery-validation@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3"
integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg==
"@abp/jquery-validation@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.4.tgz#f8ae286eddabce917212bbe3d37ea5ae3d7062ad"
integrity sha512-6CYadT28dK3OdCIf2Y8Z/z2jgzWGBCok83XFtLibtNfddJjdX7r+nP/UyMvbnrV7w0wp/g+mWq+6tPHiHUN9Kg==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
jquery-validation "^1.21.0"
"@abp/jquery@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37"
integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw==
"@abp/jquery@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.4.tgz#6b375cbf5d1beeaaa27f263b2985f15f6fc45e53"
integrity sha512-5kjOXFl9acymDSJsOFcO+Nh3CTsSNuZabsVcInAK5znXUacoeijnHH+6mDTZNiADMsYU3nRiUOT2AJeV312r3w==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
jquery "~3.7.1"
"@abp/lodash@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40"
integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg==
"@abp/lodash@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.4.tgz#b52c698633ba20a08b99e89462fe2400c672b4f0"
integrity sha512-ED0o37bUAWvYCUQqNFLUxh1PpuYsXsZm7Y6X+KpeAlVdvdsDlZmvn+BoyrZLIV+7TCnKuIq6/UgeGp3aWzZ7vA==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
lodash "^4.17.21"
"@abp/luxon@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553"
integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A==
"@abp/luxon@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.4.tgz#6b7e1bff024c7ca80ef3dee9cffe244d1449c4fa"
integrity sha512-3rcqJICchA2y8givfClTFZPB+mG/HqLkfhc+/JmDCVA87bQ/HAkxWVxfW70MsyDQNUPVWTVFGsfN81YJdvyBYw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
luxon "^3.5.0"
"@abp/malihu-custom-scrollbar-plugin@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287"
integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A==
"@abp/malihu-custom-scrollbar-plugin@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.4.tgz#6ea3abe9cafab290bd8036a66666af6c25289619"
integrity sha512-CSR0IRRJmHYhHeRNT90VjE27n84AneKnzpE1Jbszq2gQCUCJ8TfvkEthXGQFDhBpiS3uB/qWr+PjzssPDQHbqw==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69"
integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg==
"@abp/moment@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.4.tgz#c8f9bf7218336ff8fcaa58c6be0e85ecc6f126af"
integrity sha512-9EHdOQytFMqIr8a6Wb2+nhKQfbqTxc09wz3dkcEO5PjQp0wq+JPYdTztVYkyN+OZoPBsKKTjYtn92U/rsM1hTw==
dependencies:
moment "^2.30.1"
"@abp/select2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a"
integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA==
"@abp/select2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.4.tgz#4a97834e72c40b77f2e97fc030f59a8e3c6b0ec8"
integrity sha512-S9ANdhW0QECI+rrx3vHVggkmtBBf/G67GpSQM20efaYUMs25REvs2LFRSq9PnhHPGn1p4xOE30LfjH07+ePvAQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
select2 "^4.0.13"
"@abp/sweetalert2@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df"
integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ==
"@abp/sweetalert2@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.4.tgz#c96cef8b7e6607f34a05cd998d70dd871fe9eef9"
integrity sha512-pU7eyG8dn5QJVi6X6Ij6JR/KzOpSx+a4j/dWr4aSWXCXv9xazgbwGsk831D2hIHNvrDlCNBTgKPc9FL6LEMxYQ==
dependencies:
"@abp/core" "~9.3.3"
"@abp/core" "~9.3.4"
sweetalert2 "^11.14.1"
"@abp/timeago@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5"
integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ==
"@abp/timeago@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.4.tgz#dc8e006ae4f3547b304fa8546c5b92c9bc59451e"
integrity sha512-CIhWeUI1Hfq4KP+DSJacbpOGQJc/BLJvp3wIimQVxnc/UeuEae7HAxi+d0+1/JaIdtVZUblfjyKWt85jtcLHNQ==
dependencies:
"@abp/jquery" "~9.3.3"
"@abp/jquery" "~9.3.4"
timeago "^1.6.7"
"@abp/utils@~9.3.3":
version "9.3.3"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec"
integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA==
"@abp/utils@~9.3.4":
version "9.3.4"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.4.tgz#72d0c8b109415d584c887fd8c904644cdf767fd4"
integrity sha512-94EyyKIovai/Mzfa6DhanwC2Y+Jz2uX+w/9nkAfitvN2NJY1+Ixqd6cnvuDdIHAGMTxs6Bo5XV0cT33VGrGMAA==
dependencies:
just-compare "^2.3.0"

4
modules/virtual-file-explorer/app/package.json

@ -3,7 +3,7 @@
"name": "my-app",
"private": true,
"dependencies": {
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3",
"@abp/virtual-file-explorer": "~9.3.3"
"@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.4",
"@abp/virtual-file-explorer": "~9.3.4"
}
}

2
npm/lerna.json

@ -1,5 +1,5 @@
{
"version": "9.3.3",
"version": "9.3.4",
"packages": [
"packs/*"
],

4
npm/ng-packs/package.json

@ -46,8 +46,8 @@
},
"private": true,
"devDependencies": {
"@abp/ng.theme.lepton-x": "~4.3.3",
"@abp/utils": "~9.3.3",
"@abp/ng.theme.lepton-x": "~4.3.4",
"@abp/utils": "~9.3.4",
"@angular-devkit/build-angular": "~20.0.0",
"@angular-devkit/core": "~20.0.0",
"@angular-devkit/schematics": "~20.0.0",

6
npm/ng-packs/packages/account-core/package.json

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

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

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

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

@ -1,14 +1,14 @@
{
"name": "@abp/ng.components",
"version": "9.3.3",
"version": "9.3.4",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"peerDependencies": {
"@abp/ng.core": ">=9.3.3",
"@abp/ng.theme.shared": ">=9.3.3"
"@abp/ng.core": ">=9.3.4",
"@abp/ng.theme.shared": ">=9.3.4"
},
"dependencies": {
"chart.js": "^3.5.1",

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

@ -1,13 +1,13 @@
{
"name": "@abp/ng.core",
"version": "9.3.3",
"version": "9.3.4",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/utils": "~9.3.3",
"@abp/utils": "~9.3.4",
"just-clone": "^6.0.0",
"just-compare": "^2.0.0",
"ts-toolbelt": "^9.0.0",

2
npm/ng-packs/packages/core/src/lib/services/localization.service.ts

@ -279,7 +279,7 @@ function recursivelyMergeBaseResources(
return item.baseResources.reduce((acc, baseResource) => {
const baseItem = recursivelyMergeBaseResources(baseResource, source);
const texts = { ...baseItem.texts, ...item.texts };
const texts = { ...baseItem.texts, ...acc.texts };
return { ...acc, texts };
}, item);
}

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

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

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

@ -1,6 +1,6 @@
{
"name": "@abp/nx.generators",
"version": "9.3.3",
"version": "9.3.4",
"homepage": "https://abp.io",
"generators": "./generators.json",
"type": "commonjs",

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

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

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

@ -1,14 +1,14 @@
{
"name": "@abp/ng.oauth",
"version": "9.3.3",
"version": "9.3.4",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/ng.core": "~9.3.3",
"@abp/utils": "~9.3.3",
"@abp/ng.core": "~9.3.4",
"@abp/utils": "~9.3.4",
"angular-oauth2-oidc": "^20.0.0",
"just-clone": "^6.0.0",
"just-compare": "^2.0.0",

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

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

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

@ -1,6 +1,6 @@
{
"name": "@abp/ng.schematics",
"version": "9.3.3",
"version": "9.3.4",
"author": "",
"schematics": "./collection.json",
"dependencies": {

6
npm/ng-packs/packages/setting-management/package.json

@ -1,14 +1,14 @@
{
"name": "@abp/ng.setting-management",
"version": "9.3.3",
"version": "9.3.4",
"homepage": "https://abp.io",
"repository": {
"type": "git",
"url": "https://github.com/abpframework/abp.git"
},
"dependencies": {
"@abp/ng.components": "~9.3.3",
"@abp/ng.theme.shared": "~9.3.3",
"@abp/ng.components": "~9.3.4",
"@abp/ng.theme.shared": "~9.3.4",
"tslib": "^2.0.0"
},
"publishConfig": {

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

Loading…
Cancel
Save